Initial commit
EBO <eric.bouhana@softalys.com> committé le 2026-04-17 15:11
4b68c7154a33d0c3754b9cc54686673f03137d93
263 fichiers modifiés
+50896
-0
A
.github/workflows/build-docs.yml
+72
-0
@@ -0,0 +1,72 @@
| 1 | +# CI de build, lint et validation pour la documentation gitrust | |
| 2 | +# Déclenchée sur chaque push et pull request vers main | |
| 3 | + | |
| 4 | +name: Build documentation | |
| 5 | + | |
| 6 | +on: | |
| 7 | + push: | |
| 8 | + branches: [main] | |
| 9 | + pull_request: | |
| 10 | + branches: [main] | |
| 11 | + | |
| 12 | +jobs: | |
| 13 | + build: | |
| 14 | + name: Build, lint et validation | |
| 15 | + runs-on: ubuntu-latest | |
| 16 | + | |
| 17 | + steps: | |
| 18 | + - name: Checkout du dépôt | |
| 19 | + uses: actions/checkout@v4 | |
| 20 | + | |
| 21 | + - name: Installer Rust (stable) | |
| 22 | + uses: dtolnay/rust-toolchain@stable | |
| 23 | + | |
| 24 | + - name: Mettre en cache le registre Cargo | |
| 25 | + uses: actions/cache@v4 | |
| 26 | + with: | |
| 27 | + path: | | |
| 28 | + ~/.cargo/registry | |
| 29 | + ~/.cargo/git | |
| 30 | + ~/.cargo/bin | |
| 31 | + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| 32 | + restore-keys: | | |
| 33 | + ${{ runner.os }}-cargo- | |
| 34 | + | |
| 35 | + - name: Installer mdbook | |
| 36 | + run: | | |
| 37 | + cargo install mdbook --locked --version "^0.4" | |
| 38 | + | |
| 39 | + - name: Installer mdbook-mermaid | |
| 40 | + run: | | |
| 41 | + cargo install mdbook-mermaid --locked | |
| 42 | + | |
| 43 | + - name: Construire la documentation (FR) | |
| 44 | + run: mdbook build | |
| 45 | + | |
| 46 | + - name: Installer Node.js | |
| 47 | + uses: actions/setup-node@v4 | |
| 48 | + with: | |
| 49 | + node-version: '20' | |
| 50 | + | |
| 51 | + - name: Installer markdownlint-cli2 | |
| 52 | + run: npm install -g markdownlint-cli2 | |
| 53 | + | |
| 54 | + - name: Linter les fichiers Markdown | |
| 55 | + run: markdownlint-cli2 "**/*.md" "#node_modules" "#book" | |
| 56 | + | |
| 57 | + - name: Installer mermaid-cli | |
| 58 | + run: npm install -g @mermaid-js/mermaid-cli | |
| 59 | + | |
| 60 | + - name: Valider les diagrammes Mermaid | |
| 61 | + run: | | |
| 62 | + shopt -s nullglob | |
| 63 | + mmd_files=(diagrams/*.mmd) | |
| 64 | + if [ ${#mmd_files[@]} -eq 0 ]; then | |
| 65 | + echo "Aucun fichier .mmd trouvé dans diagrams/ — étape ignorée." | |
| 66 | + exit 0 | |
| 67 | + fi | |
| 68 | + for f in "${mmd_files[@]}"; do | |
| 69 | + echo "Validation de $f..." | |
| 70 | + mmdc -i "$f" -o /tmp/out.svg | |
| 71 | + echo " OK" | |
| 72 | + done |
A
.markdownlint.yaml
+50
-0
@@ -0,0 +1,50 @@
| 1 | +# Configuration markdownlint pour la documentation gitrust | |
| 2 | +# Référence : https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md | |
| 3 | + | |
| 4 | +# Longueur de ligne maximale : 120 caractères | |
| 5 | +# Les blocs de code, tableaux et URLs sont exclus | |
| 6 | +MD013: | |
| 7 | + line_length: 120 | |
| 8 | + code_blocks: false | |
| 9 | + tables: false | |
| 10 | + headings: false | |
| 11 | + | |
| 12 | +# Autoriser certaines balises HTML utiles pour la mise en forme | |
| 13 | +# <details> et <summary> sont utilisés pour les sections repliables | |
| 14 | +MD033: | |
| 15 | + allowed_elements: | |
| 16 | + - details | |
| 17 | + - summary | |
| 18 | + - br | |
| 19 | + - kbd | |
| 20 | + - sup | |
| 21 | + - sub | |
| 22 | + | |
| 23 | +# Désactivé : mdBook injecte le titre depuis SUMMARY.md, | |
| 24 | +# la première ligne d'un fichier source n'a pas besoin d'être un H1 | |
| 25 | +MD041: false | |
| 26 | + | |
| 27 | +# Interdit les espaces en fin de ligne (conservé actif) | |
| 28 | +MD009: true | |
| 29 | + | |
| 30 | +# Interdit les lignes vides multiples consécutives | |
| 31 | +MD012: | |
| 32 | + maximum: 1 | |
| 33 | + | |
| 34 | +# Impose des titres cohérents (pas de saut H1 → H3) | |
| 35 | +MD001: true | |
| 36 | + | |
| 37 | +# Cohérence du style des listes non ordonnées (tiret) | |
| 38 | +MD004: | |
| 39 | + style: dash | |
| 40 | + | |
| 41 | +# Cohérence des blocs de code délimités (backticks) | |
| 42 | +MD046: | |
| 43 | + style: fenced | |
| 44 | + | |
| 45 | +# Espace requis après le marqueur de liste | |
| 46 | +MD030: | |
| 47 | + ul_single: 1 | |
| 48 | + ol_single: 1 | |
| 49 | + ul_multi: 1 | |
| 50 | + ol_multi: 1 |
A
.omc/sessions/0d1f2ab7-88e8-40e3-a660-1224d3d46c76.json
+8
-0
@@ -0,0 +1,8 @@
| 1 | +{ | |
| 2 | + "session_id": "0d1f2ab7-88e8-40e3-a660-1224d3d46c76", | |
| 3 | + "ended_at": "2026-04-17T14:16:59.018Z", | |
| 4 | + "reason": "other", | |
| 5 | + "agents_spawned": 2, | |
| 6 | + "agents_completed": 2, | |
| 7 | + "modes_used": [] | |
| 8 | +} | |
| 8 | < \ No newline at end of file |
A
.omc/sessions/3ee3ef93-1bf2-409a-9b40-4a3f9aab2717.json
+8
-0
@@ -0,0 +1,8 @@
| 1 | +{ | |
| 2 | + "session_id": "3ee3ef93-1bf2-409a-9b40-4a3f9aab2717", | |
| 3 | + "ended_at": "2026-04-17T13:07:22.927Z", | |
| 4 | + "reason": "other", | |
| 5 | + "agents_spawned": 0, | |
| 6 | + "agents_completed": 0, | |
| 7 | + "modes_used": [] | |
| 8 | +} | |
| 8 | < \ No newline at end of file |
A
.omc/state/agent-replay-3ee3ef93-1bf2-409a-9b40-4a3f9aab2717.jsonl
+8
-0
@@ -0,0 +1,8 @@
| 1 | +{"t":0,"agent":"aee036e","agent_type":"executor","event":"agent_start","parent_mode":"none"} | |
| 2 | +{"t":0,"agent":"a91af61","agent_type":"executor","event":"agent_start","parent_mode":"none"} | |
| 3 | +{"t":0,"agent":"ae05933","agent_type":"executor","event":"agent_start","parent_mode":"none"} | |
| 4 | +{"t":0,"agent":"a700cb9","agent_type":"executor","event":"agent_start","parent_mode":"none"} | |
| 5 | +{"t":0,"agent":"aee036e","agent_type":"executor","event":"agent_stop","success":true,"duration_ms":241879} | |
| 6 | +{"t":0,"agent":"a700cb9","agent_type":"executor","event":"agent_stop","success":true,"duration_ms":210730} | |
| 7 | +{"t":0,"agent":"ae05933","agent_type":"executor","event":"agent_stop","success":true,"duration_ms":332456} | |
| 8 | +{"t":0,"agent":"a91af61","agent_type":"executor","event":"agent_stop","success":true,"duration_ms":838029} |
A
.omc/state/idle-notif-cooldown.json
+3
-0
@@ -0,0 +1,3 @@
| 1 | +{ | |
| 2 | + "lastSentAt": "2026-04-17T14:47:54.516Z" | |
| 3 | +} | |
| 3 | < \ No newline at end of file |
A
.omc/state/mission-state.json
+143
-0
@@ -0,0 +1,143 @@
| 1 | +{ | |
| 2 | + "updatedAt": "2026-04-17T14:32:10.805Z", | |
| 3 | + "missions": [ | |
| 4 | + { | |
| 5 | + "id": "session:3ee3ef93-1bf2-409a-9b40-4a3f9aab2717:none", | |
| 6 | + "source": "session", | |
| 7 | + "name": "none", | |
| 8 | + "objective": "Session mission", | |
| 9 | + "createdAt": "2026-04-17T13:11:34.572Z", | |
| 10 | + "updatedAt": "2026-04-17T14:32:10.805Z", | |
| 11 | + "status": "done", | |
| 12 | + "workerCount": 6, | |
| 13 | + "taskCounts": { | |
| 14 | + "total": 6, | |
| 15 | + "pending": 0, | |
| 16 | + "blocked": 0, | |
| 17 | + "inProgress": 0, | |
| 18 | + "completed": 6, | |
| 19 | + "failed": 0 | |
| 20 | + }, | |
| 21 | + "agents": [ | |
| 22 | + { | |
| 23 | + "name": "Explore:a94b24f", | |
| 24 | + "role": "Explore", | |
| 25 | + "ownership": "a94b24f27cc830119", | |
| 26 | + "status": "done", | |
| 27 | + "currentStep": null, | |
| 28 | + "latestUpdate": "completed", | |
| 29 | + "completedSummary": null, | |
| 30 | + "updatedAt": "2026-04-17T13:13:55.288Z" | |
| 31 | + }, | |
| 32 | + { | |
| 33 | + "name": "Explore:a60004d", | |
| 34 | + "role": "Explore", | |
| 35 | + "ownership": "a60004d7c1c5aa264", | |
| 36 | + "status": "done", | |
| 37 | + "currentStep": null, | |
| 38 | + "latestUpdate": "completed", | |
| 39 | + "completedSummary": null, | |
| 40 | + "updatedAt": "2026-04-17T13:32:18.096Z" | |
| 41 | + }, | |
| 42 | + { | |
| 43 | + "name": "executor:aee036e", | |
| 44 | + "role": "executor", | |
| 45 | + "ownership": "aee036e624c83de9b", | |
| 46 | + "status": "done", | |
| 47 | + "currentStep": null, | |
| 48 | + "latestUpdate": "completed", | |
| 49 | + "completedSummary": null, | |
| 50 | + "updatedAt": "2026-04-17T14:21:49.414Z" | |
| 51 | + }, | |
| 52 | + { | |
| 53 | + "name": "executor:a91af61", | |
| 54 | + "role": "executor", | |
| 55 | + "ownership": "a91af616306bfc605", | |
| 56 | + "status": "done", | |
| 57 | + "currentStep": null, | |
| 58 | + "latestUpdate": "completed", | |
| 59 | + "completedSummary": null, | |
| 60 | + "updatedAt": "2026-04-17T14:32:10.805Z" | |
| 61 | + }, | |
| 62 | + { | |
| 63 | + "name": "executor:ae05933", | |
| 64 | + "role": "executor", | |
| 65 | + "ownership": "ae05933e0e3918607", | |
| 66 | + "status": "done", | |
| 67 | + "currentStep": null, | |
| 68 | + "latestUpdate": "completed", | |
| 69 | + "completedSummary": null, | |
| 70 | + "updatedAt": "2026-04-17T14:24:13.852Z" | |
| 71 | + }, | |
| 72 | + { | |
| 73 | + "name": "executor:a700cb9", | |
| 74 | + "role": "executor", | |
| 75 | + "ownership": "a700cb975b07f9b00", | |
| 76 | + "status": "done", | |
| 77 | + "currentStep": null, | |
| 78 | + "latestUpdate": "completed", | |
| 79 | + "completedSummary": null, | |
| 80 | + "updatedAt": "2026-04-17T14:22:38.798Z" | |
| 81 | + } | |
| 82 | + ], | |
| 83 | + "timeline": [ | |
| 84 | + { | |
| 85 | + "id": "session-start:a91af616306bfc605:2026-04-17T14:18:12.776Z", | |
| 86 | + "at": "2026-04-17T14:18:12.776Z", | |
| 87 | + "kind": "update", | |
| 88 | + "agent": "executor:a91af61", | |
| 89 | + "detail": "started executor:a91af61", | |
| 90 | + "sourceKey": "session-start:a91af616306bfc605" | |
| 91 | + }, | |
| 92 | + { | |
| 93 | + "id": "session-start:ae05933e0e3918607:2026-04-17T14:18:41.396Z", | |
| 94 | + "at": "2026-04-17T14:18:41.396Z", | |
| 95 | + "kind": "update", | |
| 96 | + "agent": "executor:ae05933", | |
| 97 | + "detail": "started executor:ae05933", | |
| 98 | + "sourceKey": "session-start:ae05933e0e3918607" | |
| 99 | + }, | |
| 100 | + { | |
| 101 | + "id": "session-start:a700cb975b07f9b00:2026-04-17T14:19:08.068Z", | |
| 102 | + "at": "2026-04-17T14:19:08.068Z", | |
| 103 | + "kind": "update", | |
| 104 | + "agent": "executor:a700cb9", | |
| 105 | + "detail": "started executor:a700cb9", | |
| 106 | + "sourceKey": "session-start:a700cb975b07f9b00" | |
| 107 | + }, | |
| 108 | + { | |
| 109 | + "id": "session-stop:aee036e624c83de9b:2026-04-17T14:21:49.414Z", | |
| 110 | + "at": "2026-04-17T14:21:49.414Z", | |
| 111 | + "kind": "completion", | |
| 112 | + "agent": "executor:aee036e", | |
| 113 | + "detail": "completed", | |
| 114 | + "sourceKey": "session-stop:aee036e624c83de9b" | |
| 115 | + }, | |
| 116 | + { | |
| 117 | + "id": "session-stop:a700cb975b07f9b00:2026-04-17T14:22:38.798Z", | |
| 118 | + "at": "2026-04-17T14:22:38.798Z", | |
| 119 | + "kind": "completion", | |
| 120 | + "agent": "executor:a700cb9", | |
| 121 | + "detail": "completed", | |
| 122 | + "sourceKey": "session-stop:a700cb975b07f9b00" | |
| 123 | + }, | |
| 124 | + { | |
| 125 | + "id": "session-stop:ae05933e0e3918607:2026-04-17T14:24:13.852Z", | |
| 126 | + "at": "2026-04-17T14:24:13.852Z", | |
| 127 | + "kind": "completion", | |
| 128 | + "agent": "executor:ae05933", | |
| 129 | + "detail": "completed", | |
| 130 | + "sourceKey": "session-stop:ae05933e0e3918607" | |
| 131 | + }, | |
| 132 | + { | |
| 133 | + "id": "session-stop:a91af616306bfc605:2026-04-17T14:32:10.805Z", | |
| 134 | + "at": "2026-04-17T14:32:10.805Z", | |
| 135 | + "kind": "completion", | |
| 136 | + "agent": "executor:a91af61", | |
| 137 | + "detail": "completed", | |
| 138 | + "sourceKey": "session-stop:a91af616306bfc605" | |
| 139 | + } | |
| 140 | + ] | |
| 141 | + } | |
| 142 | + ] | |
| 143 | +} | |
| 143 | < \ No newline at end of file |
A
.omc/state/skill-sessions.json
+16
-0
@@ -0,0 +1,16 @@
| 1 | +{ | |
| 2 | + "sessions": { | |
| 3 | + "3ee3ef93-1bf2-409a-9b40-4a3f9aab2717": { | |
| 4 | + "injectedPaths": [ | |
| 5 | + "/home/monsieurb/.claude/skills/omc-learned/diataxis/SKILL.md" | |
| 6 | + ], | |
| 7 | + "timestamp": 1776433438621 | |
| 8 | + }, | |
| 9 | + "0d1f2ab7-88e8-40e3-a660-1224d3d46c76": { | |
| 10 | + "injectedPaths": [ | |
| 11 | + "/home/monsieurb/.claude/skills/omc-learned/diataxis/SKILL.md" | |
| 12 | + ], | |
| 13 | + "timestamp": 1776433510254 | |
| 14 | + } | |
| 15 | + } | |
| 16 | +} | |
| 16 | < \ No newline at end of file |
A
.omc/state/subagent-tracking.json
+44
-0
@@ -0,0 +1,44 @@
| 1 | +{ | |
| 2 | + "agents": [ | |
| 3 | + { | |
| 4 | + "agent_id": "aee036e624c83de9b", | |
| 5 | + "agent_type": "oh-my-claudecode:executor", | |
| 6 | + "started_at": "2026-04-17T14:17:47.535Z", | |
| 7 | + "parent_mode": "none", | |
| 8 | + "status": "completed", | |
| 9 | + "completed_at": "2026-04-17T14:21:49.414Z", | |
| 10 | + "duration_ms": 241879 | |
| 11 | + }, | |
| 12 | + { | |
| 13 | + "agent_id": "a91af616306bfc605", | |
| 14 | + "agent_type": "oh-my-claudecode:executor", | |
| 15 | + "started_at": "2026-04-17T14:18:12.776Z", | |
| 16 | + "parent_mode": "none", | |
| 17 | + "status": "completed", | |
| 18 | + "completed_at": "2026-04-17T14:32:10.805Z", | |
| 19 | + "duration_ms": 838029 | |
| 20 | + }, | |
| 21 | + { | |
| 22 | + "agent_id": "ae05933e0e3918607", | |
| 23 | + "agent_type": "oh-my-claudecode:executor", | |
| 24 | + "started_at": "2026-04-17T14:18:41.396Z", | |
| 25 | + "parent_mode": "none", | |
| 26 | + "status": "completed", | |
| 27 | + "completed_at": "2026-04-17T14:24:13.852Z", | |
| 28 | + "duration_ms": 332456 | |
| 29 | + }, | |
| 30 | + { | |
| 31 | + "agent_id": "a700cb975b07f9b00", | |
| 32 | + "agent_type": "oh-my-claudecode:executor", | |
| 33 | + "started_at": "2026-04-17T14:19:08.068Z", | |
| 34 | + "parent_mode": "none", | |
| 35 | + "status": "completed", | |
| 36 | + "completed_at": "2026-04-17T14:22:38.798Z", | |
| 37 | + "duration_ms": 210730 | |
| 38 | + } | |
| 39 | + ], | |
| 40 | + "total_spawned": 4, | |
| 41 | + "total_completed": 4, | |
| 42 | + "total_failed": 0, | |
| 43 | + "last_updated": "2026-04-17T14:32:10.906Z" | |
| 44 | +} | |
| 44 | < \ No newline at end of file |
A
.plans/001-scaffold-initial.md
+582
-0
@@ -0,0 +1,582 @@
| 1 | +# Plan — Documentation officielle gitrust (girust_doc) | |
| 2 | + | |
| 3 | +## Contexte | |
| 4 | + | |
| 5 | +Le dépôt `/home/monsieurb/Documents/devel/girust_doc` est actuellement vide (3 dossiers `administration_manual/`, `user_manual/`, `template/` + un README de 9 lignes). Il doit héberger la documentation officielle publique de la plateforme **gitrust** (forge Git self-hosted en Rust, similaire à Gitea, déployée sur `demo.gitrust.eu`). | |
| 6 | + | |
| 7 | +La plateforme cible (explorée dans `/home/monsieurb/Documents/devel/gitrust`) est un **monorepo Rust à 6 crates** (rustwarden-core, gitrust-core, gitrust-git, gitrust-web, gitrust-ssh, gitrust-hooks), fournit un serveur HTTP (:4000) + SSH (:2222), PostgreSQL, CI Dagger intégrée, SBOM + Dependency-Track, i18n (6 langues : fr, en, de, es, pt, it), et vise l'auto-hébergement pour équipes de 3-20 personnes avec conformité ANSSI PA-074. | |
| 8 | + | |
| 9 | +Cette documentation doit être : | |
| 10 | +- **Multilingue** : fr, en, de, es, pt, it (aligné avec les langues de l'UI gitrust) | |
| 11 | +- **Structurée selon Diátaxis** : Tutorials / How-to / Reference / Explanation | |
| 12 | +- **Publiée via mdBook** (natif Rust, cohérent avec la stack), Markdown brut lisible sans build | |
| 13 | +- **Riche en diagrammes Mermaid** et en exemples réutilisables (configs, CI, code) | |
| 14 | + | |
| 15 | +## Objectif | |
| 16 | + | |
| 17 | +Scaffolder un dépôt documentaire complet, prêt à être rempli de contenu, avec : | |
| 18 | +1. Une structure mdBook multilingue (6 langues) sur base FR → EN → autres | |
| 19 | +2. **Quatre manuels** organisés selon Diátaxis : | |
| 20 | + - `user_manual/` — utilisateurs finaux | |
| 21 | + - `administration_manual/` — ops / self-hosters | |
| 22 | + - `developer_manual/` — contributeurs core + utilisateurs API (**nouveau**) | |
| 23 | + - `template/` — exemples copiables (hors Diátaxis par nature) | |
| 24 | +3. Une bibliothèque de templates de configuration réutilisables | |
| 25 | +4. Les outils d'automatisation (CI de build, lint Markdown, validation Mermaid) | |
| 26 | +5. **Réutilisation maximale du contenu existant de `gitrust/docs/`** — 9 fichiers publiables quasi tels quels, 8 fichiers à extraire partiellement (voir § Manuel développeur) | |
| 27 | + | |
| 28 | +## Objectifs par manuel | |
| 29 | + | |
| 30 | +Chaque manuel a un public distinct, un objectif propre, et un périmètre explicitement délimité. Le respect strict de ces périmètres garantit qu'un lecteur trouve ce qu'il cherche sans traverser du contenu qui ne le concerne pas. | |
| 31 | + | |
| 32 | +### `user_manual/` — Manuel utilisateur | |
| 33 | + | |
| 34 | +- **Public** : utilisateurs finaux de gitrust (développeurs qui *utilisent* la forge : push/pull, code review, issues, notifications). | |
| 35 | +- **Objectif** : rendre autonome quelqu'un qui se connecte à une instance gitrust existante pour collaborer sur du code. | |
| 36 | +- **Couvre** : inscription, 2FA, gestion des clés SSH, création/clonage/push de dépôts, pull requests et stratégies de merge, issues et labels hiérarchiques, équipes et permissions, notifications, personal access tokens, usage de la CI intégrée (`.gitrust-ci.yml`), lecture du SBOM. | |
| 37 | +- **Ne couvre pas** : l'installation de la plateforme, l'administration multi-utilisateurs, le code source gitrust, l'API programmatique avancée. | |
| 38 | +- **Prérequis lecteur** : savoir utiliser Git en ligne de commande. | |
| 39 | + | |
| 40 | +### `administration_manual/` — Manuel d'administration | |
| 41 | + | |
| 42 | +- **Public** : ops et self-hosters qui déploient, configurent et maintiennent une instance gitrust en production. | |
| 43 | +- **Objectif** : installer, exploiter et superviser une instance, depuis le premier démarrage jusqu'à la mise à jour et la restauration après incident. | |
| 44 | +- **Couvre** : installation Docker / systemd, reverse-proxy TLS (Nginx/Caddy/Traefik), configuration SMTP et OAuth, CI runner distant, intégration Dependency-Track et Syft (SBOM), durcissement Fail2ban, tuning rate limiting, forçage 2FA global, sauvegarde/restauration (PostgreSQL + dépôts bare + clés SSH), procédure de mise à jour, dépannage SSH/CI, administration via `/admin`, conformité ANSSI PA-074. | |
| 45 | +- **Ne couvre pas** : l'utilisation quotidienne par un développeur, la contribution au code source, le développement de clients API. | |
| 46 | +- **Prérequis lecteur** : administration Linux, notions de réseau et TLS. | |
| 47 | + | |
| 48 | +### `developer_manual/` — Manuel développeur | |
| 49 | + | |
| 50 | +- **Public** : double — (a) contributeurs au code gitrust (core ou via fork rustwarden), (b) développeurs externes qui construisent des intégrations sur l'API publique. | |
| 51 | +- **Objectif** : fournir tout le nécessaire pour comprendre l'architecture, contribuer du code conforme aux standards du projet, ou bâtir un client qui parle à l'API gitrust. | |
| 52 | +- **Couvre** : architecture des 6 crates (rustwarden-core, gitrust-core, gitrust-git, gitrust-web, gitrust-ssh, gitrust-hooks), schéma de la base de données et ERD, modèle RBAC 4 niveaux, diagrammes de séquence (auth SSH, push, merge PR, import repo), patrons de contribution (ajouter une route, un service, une migration, un worker async), stratégie de tests unitaires et E2E (Playwright), règles QA et gates ANSSI, workflow de PR et contribution upstream rustwarden, référence complète de l'API REST v1 (auth, pagination, codes erreur, exemples de clients), fonctionnement interne de features (2FA, labels hiérarchiques, CI Dagger Easy vs Power Mode, décisions UI HTMX). | |
| 53 | +- **Ne couvre pas** : l'installation d'une instance de production, l'usage utilisateur de la forge. | |
| 54 | +- **Prérequis lecteur** : Rust (pour contribuer) ou un langage client (pour l'API) ; familiarité avec HTTP, Git, PostgreSQL. | |
| 55 | + | |
| 56 | +### `template/` — Bibliothèque d'exemples copiables | |
| 57 | + | |
| 58 | +- **Public** : tous les profils précédents, chaque fois qu'ils cherchent un point de départ prêt à l'emploi pour une config ou un script. | |
| 59 | +- **Objectif** : fournir des fichiers **standalone, copiables tels quels**, couvrant les cas d'usage concrets rencontrés par les 3 autres manuels. Un fichier = un cas d'usage, nom explicite, commentaires internes suffisants, mais **pas de prose explicative autour**. | |
| 60 | +- **Couvre** : fichiers `.env` par profil (dev local, production mono-machine, production CI-heavy, tests E2E), variantes `docker-compose.yml` (minimal, production avec Redis+SMTP, avec CI runner), reverse-proxy (Nginx TLS, Caddyfile, Traefik dynamique), unit systemd avec hardening AppArmor/seccomp + timer de sauvegarde, `.gitrust-ci.yml` par langage (Rust, Go, Python, Node) + squelette Dagger Power Mode, scripts de backup/restore, clients API d'exemple (Python, Rust, curl+PAT), scripts de migration depuis Gitea et Forgejo, alternative Podman Quadlet. | |
| 61 | +- **Particularité** : **hors cadre Diátaxis** par nature — c'est un atelier, pas un texte pédagogique. L'unique fichier de prose est `template/index.md` qui sert de catalogue. Les manuels Diátaxis pointent vers ces templates depuis leurs how-to (ex. `administration_manual/how-to/configurer-smtp.md` → « copiez `template/env/production-mono-machine.env` puis... »). | |
| 62 | +- **Ne couvre pas** : toute explication pédagogique (cela appartient aux 3 manuels). | |
| 63 | + | |
| 64 | +### Relations entre les 4 parties | |
| 65 | + | |
| 66 | +```mermaid | |
| 67 | +graph LR | |
| 68 | + U[user_manual] --> API[developer_manual/reference/api] | |
| 69 | + U --> T[template/api-clients/] | |
| 70 | + A[admin_manual] --> T | |
| 71 | + D[developer_manual] --> T | |
| 72 | + T -. référencé depuis .-> U | |
| 73 | + T -. référencé depuis .-> A | |
| 74 | + T -. référencé depuis .-> D | |
| 75 | +``` | |
| 76 | + | |
| 77 | +- Chaque manuel narratif (U/A/D) est lisible seul. | |
| 78 | +- `template/` est la boîte à outils commune — les trois manuels y pointent depuis leurs how-to sans jamais dupliquer le contenu du template dans la prose. | |
| 79 | +- Pas de dépendance circulaire : `template/` ne pointe jamais vers les manuels ; `user_manual` ne référence jamais `administration_manual` (publics distincts). | |
| 80 | + | |
| 81 | +## Principes directeurs | |
| 82 | + | |
| 83 | +- **FR comme langue source** (aligné avec le projet gitrust french-first) ; les autres langues sont des traductions dérivées via `mdbook-i18n-helpers` (patterns `po/xx.po`) — le même workflow que `rust-lang/book`. | |
| 84 | +- **Diátaxis par manuel** : chaque manuel (user / admin) contient ses propres `tutorials/`, `how-to/`, `reference/`, `explanation/`. | |
| 85 | +- **Les templates** sont du code/config copiable, pas de la prose : un fichier = un cas d'usage. | |
| 86 | +- **Mermaid partout où une séquence, un flux ou une topologie clarifie plus que 10 lignes de texte.** | |
| 87 | +- **Documentation autonome** : la doc est **déconnectée** des sources gitrust. Tout exemple (config, extrait de code, schéma, diagramme) est **copié** dans la doc, jamais référencé par lien local ni par chemin relatif sortant de `girust_doc/`. Un lecteur sur `demo.gitrust.eu` doit pouvoir tout trouver sans checkout du repo. Seule exception : lien HTTP vers le dépôt public (pour pointer vers le code de référence), mais le contenu reste dans la doc. Quand gitrust évolue, sync manuelle documentée dans `CONTRIBUTING.md`. | |
| 88 | +- **Exigence pédagogique** : Diátaxis répond à « où placer le contenu », la pédagogie répond à « comment le contenu fait apprendre ». Les deux s'appliquent ensemble dans `tutorials/` et `explanation/` (voir § Principes pédagogiques). | |
| 89 | + | |
| 90 | +## Principes pédagogiques (tutorials + explanation) | |
| 91 | + | |
| 92 | +Les tutoriels et explanations doivent construire une **compétence** chez le lecteur, pas seulement l'informer. Quatre leviers sont imposés : | |
| 93 | + | |
| 94 | +### 1. Objectifs d'apprentissage mesurables (Bloom) | |
| 95 | + | |
| 96 | +Chaque tutoriel déclare en tête ses objectifs en **verbes observables** (lister, exécuter, configurer, diagnostiquer, comparer, concevoir). Interdits : *comprendre, maîtriser, savoir, connaître, se familiariser avec*. | |
| 97 | + | |
| 98 | +```markdown | |
| 99 | +## Objectifs | |
| 100 | +À la fin de ce tutoriel, vous saurez : | |
| 101 | +- O1. [verbe Bloom] [objet concret] | |
| 102 | +- O2. [verbe Bloom] [objet concret] | |
| 103 | +- O3. [verbe Bloom] [objet concret] | |
| 104 | +``` | |
| 105 | + | |
| 106 | +Tutoriels débutants : Bloom niveaux 1-3 (mémoriser, comprendre, appliquer). Explanations : Bloom 2, 4, 5 (comprendre, analyser, évaluer). | |
| 107 | + | |
| 108 | +### 2. Charge cognitive maîtrisée (Sweller) | |
| 109 | + | |
| 110 | +- **≤ 3 concepts nouveaux** par tutoriel débutant. | |
| 111 | +- **≤ 7 étapes séquentielles** sans checkpoint récapitulatif. | |
| 112 | +- Texte et code **côte-à-côte** (pas de bloc de code sans annotation adjacente). | |
| 113 | +- Jargon défini **à sa première apparition**. | |
| 114 | +- Digressions/options/alternatives déportées en `reference/` (charge extrinsèque). | |
| 115 | + | |
| 116 | +### 3. Scaffolding — étayage dégressif entre tutoriels | |
| 117 | + | |
| 118 | +Le niveau d'aide recule d'exactement **un cran** entre deux tutoriels consécutifs : | |
| 119 | + | |
| 120 | +| Niveau | Nature | Position dans le parcours | | |
| 121 | +|---|---|---| | |
| 122 | +| 1 | Copier-coller intégral (100 % fourni) | Tutoriel 01-02 | | |
| 123 | +| 2 | Compléter un trou (80 % fourni) | Tutoriel 03-04 | | |
| 124 | +| 3 | Combiner des recettes existantes (50 %) | Tutoriel capstone | | |
| 125 | +| 4 | Résoudre avec recettes dispo (20 %) | How-to (post-parcours) | | |
| 126 | + | |
| 127 | +Sauter deux crans = décrochage garanti. | |
| 128 | + | |
| 129 | +### 4. Feedback formatif — checkpoints observables | |
| 130 | + | |
| 131 | +Aucun apprenant n'avance **plus de 2 étapes sans feedback observable** : | |
| 132 | +- Sortie console attendue affichée **verbatim** | |
| 133 | +- Capture d'écran UI (ou description textuelle du résultat visible) | |
| 134 | +- Commande de vérification (« pour confirmer, exécutez `git status` — vous devriez voir… ») | |
| 135 | +- Section « **Et si ça ne marche pas** » avec les **3 erreurs les plus probables** et leur correction | |
| 136 | + | |
| 137 | +### 5. Ancrage mental avant la pratique | |
| 138 | + | |
| 139 | +Chaque tutoriel et explanation **commence** par installer le modèle mental **avant** toute commande : | |
| 140 | +- Une analogie avec le connu | |
| 141 | +- Un schéma Mermaid des acteurs et flux | |
| 142 | +- Un contre-exemple le cas échéant | |
| 143 | +- Un exemple prototype mémorable | |
| 144 | + | |
| 145 | +## Parcours d'apprentissage par persona | |
| 146 | + | |
| 147 | +Chaque manuel est un **parcours** explicite, pas un sac de tutoriels isolés. | |
| 148 | + | |
| 149 | +### user_manual — parcours utilisateur (≈ 90 min) | |
| 150 | + | |
| 151 | +```mermaid | |
| 152 | +graph LR | |
| 153 | + A[Compte créé] --> B[01-premier-pas<br/>20 min] | |
| 154 | + B --> C[02-cloner-pousser<br/>25 min] | |
| 155 | + C --> D[03-collaborer<br/>25 min] | |
| 156 | + D --> E[04-automatiser-ci<br/>20 min] | |
| 157 | + E --> F[Utilisateur autonome] | |
| 158 | +``` | |
| 159 | + | |
| 160 | +- **État initial** : a un compte gitrust, Git installé | |
| 161 | +- **État final** : pousse du code, ouvre et review des PR, configure une CI | |
| 162 | +- **Scaffolding** : 01 = copier-coller intégral → 04 = compose à partir de recettes | |
| 163 | + | |
| 164 | +### administration_manual — parcours admin (≈ 3 h) | |
| 165 | + | |
| 166 | +```mermaid | |
| 167 | +graph LR | |
| 168 | + A[VM prête<br/>Docker installé] --> B[01-installation-docker<br/>30 min] | |
| 169 | + B --> C[02-installation-systemd<br/>45 min] | |
| 170 | + C --> D[03-premier-demarrage<br/>20 min] | |
| 171 | + D --> E[04-mise-en-production<br/>90 min] | |
| 172 | + E --> F[Admin opérationnel] | |
| 173 | +``` | |
| 174 | + | |
| 175 | +- **État initial** : Linux admin, DNS prêt, TLS compris | |
| 176 | +- **État final** : instance prod qui tourne, sauvegardée, monitorée | |
| 177 | + | |
| 178 | +### developer_manual — parcours contributeur (≈ 4 h) | |
| 179 | + | |
| 180 | +```mermaid | |
| 181 | +graph LR | |
| 182 | + A[Utilisateur autonome] --> B[01-getting-started<br/>45 min] | |
| 183 | + B --> C[02-premiere-contribution<br/>90 min] | |
| 184 | + C --> D[03-creer-un-worker-async<br/>capstone 120 min] | |
| 185 | + D --> E[Core contributor] | |
| 186 | +``` | |
| 187 | + | |
| 188 | +- **État initial** : Rust ≥ 3 mois, connaît Git/HTTP/PostgreSQL | |
| 189 | +- **État final** : capable d'ajouter une feature gitrust de A à Z avec tests | |
| 190 | +- **Capstone** : tuto 03 (worker async) consolide sans guide pas-à-pas | |
| 191 | + | |
| 192 | +### Checkpoints de parcours | |
| 193 | + | |
| 194 | +Entre deux tutoriels, l'`index.md` du manuel affiche un encart : « Vous devriez maintenant savoir faire X avant de passer au suivant — si ce n'est pas le cas, relisez le tutoriel précédent ». | |
| 195 | + | |
| 196 | +## Templates pédagogiques imposés | |
| 197 | + | |
| 198 | +### Template tutoriel (augmente Diátaxis) | |
| 199 | + | |
| 200 | +```markdown | |
| 201 | +# [Titre promettant une expérience concrète] | |
| 202 | + | |
| 203 | +## Objectifs | |
| 204 | +À la fin de ce tutoriel, vous saurez : | |
| 205 | +- O1. [verbe Bloom 1-3] [objet concret] | |
| 206 | +- O2. [verbe Bloom 1-3] [objet concret] | |
| 207 | +- O3. [verbe Bloom 1-3] [objet concret] | |
| 208 | + | |
| 209 | +## Pré-requis | |
| 210 | +- **Technique** : [outils/versions installés] | |
| 211 | +- **Pédagogique** : tutoriel [précédent] complété | |
| 212 | +- **Temps estimé** : ~N minutes | |
| 213 | + | |
| 214 | +## Vue d'ensemble | |
| 215 | +[1 paragraphe + 1 schéma Mermaid qui installe le modèle mental] | |
| 216 | + | |
| 217 | +## Étape 1 : [action à l'impératif] | |
| 218 | +[1-2 phrases de contexte] | |
| 219 | + | |
| 220 | +```bash | |
| 221 | +[commande exacte] | |
| 222 | +``` | |
| 223 | + | |
| 224 | +Sortie attendue : | |
| 225 | +``` | |
| 226 | +[sortie verbatim] | |
| 227 | +``` | |
| 228 | + | |
| 229 | +**Checkpoint** : [vérification observable par l'apprenant] | |
| 230 | + | |
| 231 | +## Étape 2 : … | |
| 232 | +## Étape N : … | |
| 233 | + | |
| 234 | +## Récapitulatif | |
| 235 | +- ✓ O1 accompli en [faisant X] | |
| 236 | +- ✓ O2 accompli en [faisant Y] | |
| 237 | +- ✓ O3 accompli en [faisant Z] | |
| 238 | + | |
| 239 | +## Et si ça ne marche pas | |
| 240 | + | |
| 241 | +| Symptôme | Cause probable | Correction | | |
| 242 | +|---|---|---| | |
| 243 | +| `erreur 1` | … | … | | |
| 244 | +| `erreur 2` | … | … | | |
| 245 | +| `erreur 3` | … | … | | |
| 246 | + | |
| 247 | +## Prochaine étape | |
| 248 | +→ [tutoriel suivant dans le parcours] | |
| 249 | +``` | |
| 250 | + | |
| 251 | +### Template explanation | |
| 252 | + | |
| 253 | +```markdown | |
| 254 | +# Comprendre [concept] | |
| 255 | + | |
| 256 | +## Ce que vous allez comprendre | |
| 257 | +- [objectif Bloom niveau 2, 4 ou 5] | |
| 258 | + | |
| 259 | +## Le problème concret | |
| 260 | +[Situation réelle observable] | |
| 261 | + | |
| 262 | +## L'analogie | |
| 263 | +[Rapport au connu : « c'est comme… »] | |
| 264 | + | |
| 265 | +## Le modèle | |
| 266 | +[Schéma Mermaid + 2-3 paragraphes] | |
| 267 | + | |
| 268 | +## Alternatives et compromis | |
| 269 | +[Ce qui aurait pu être choisi, pourquoi pas ici] | |
| 270 | + | |
| 271 | +## Vérifier votre compréhension | |
| 272 | +1. [Question ouverte Bloom 2] | |
| 273 | +2. [Question ouverte Bloom 4] | |
| 274 | + | |
| 275 | +## Pour aller plus loin | |
| 276 | +- [Reference des détails techniques] | |
| 277 | +- [How-to qui applique ce concept] | |
| 278 | +``` | |
| 279 | + | |
| 280 | +## Arborescence cible | |
| 281 | + | |
| 282 | +``` | |
| 283 | +girust_doc/ | |
| 284 | +├── README.md # Présentation + lien vers demo.gitrust.eu | |
| 285 | +├── book.toml # Config mdBook globale (FR source) | |
| 286 | +├── theme/ # Thème custom gitrust (logo, couleurs) | |
| 287 | +├── po/ # Traductions gettext (mdbook-i18n-helpers) | |
| 288 | +│ ├── en.po # Anglais (prioritaire) | |
| 289 | +│ ├── de.po es.po pt.po it.po # Autres langues (stubs initiaux) | |
| 290 | +├── src/ # Source mdBook (FR, canonique) | |
| 291 | +│ ├── SUMMARY.md # Sommaire global avec 3 manuels | |
| 292 | +│ ├── introduction.md # Qu'est-ce que gitrust, philosophie, roadmap | |
| 293 | +│ ├── user_manual/ # → monté depuis ../user_manual/ | |
| 294 | +│ ├── administration_manual/ # → monté depuis ../administration_manual/ | |
| 295 | +│ └── template/ # → monté depuis ../template/ | |
| 296 | +├── user_manual/ # MANUEL UTILISATEUR (Diátaxis) | |
| 297 | +│ ├── index.md | |
| 298 | +│ ├── tutorials/ # Apprentissage guidé pas-à-pas | |
| 299 | +│ │ ├── 01-premier-pas.md # Inscription, 2FA, premier dépôt | |
| 300 | +│ │ ├── 02-cloner-pousser.md # SSH keys + git clone/push | |
| 301 | +│ │ ├── 03-collaborer.md # Équipes, issues, pull requests | |
| 302 | +│ │ └── 04-automatiser-ci.md # Premier .gitrust-ci.yml | |
| 303 | +│ ├── how-to/ # Recettes orientées tâche | |
| 304 | +│ │ ├── gerer-cles-ssh.md | |
| 305 | +│ │ ├── configurer-2fa.md | |
| 306 | +│ │ ├── creer-personal-access-token.md | |
| 307 | +│ │ ├── gerer-equipes-permissions.md | |
| 308 | +│ │ ├── ouvrir-pull-request.md | |
| 309 | +│ │ ├── fusionner-strategies.md # ff / squash / merge commit | |
| 310 | +│ │ ├── utiliser-labels-issues.md | |
| 311 | +│ │ ├── importer-depot-externe.md | |
| 312 | +│ │ └── consulter-sbom.md | |
| 313 | +│ ├── reference/ | |
| 314 | +│ │ ├── modele-permissions.md # 4 rôles (Reader/Dev/Maint/Owner) | |
| 315 | +│ │ ├── api-rest-v1.md # Lien Swagger + auth flow + pagination | |
| 316 | +│ │ ├── .gitrust-ci-yml-schema.md # Schéma YAML complet Easy Mode | |
| 317 | +│ │ ├── markdown-et-syntaxe.md # Syntaxe supportée dans README/issues | |
| 318 | +│ │ └── notifications.md # SSE + email + préférences | |
| 319 | +│ └── explanation/ | |
| 320 | +│ ├── modele-collaboration.md # Philosophie code review gitrust | |
| 321 | +│ ├── securite-utilisateur.md # Pourquoi 2FA, hash PAT, audit log | |
| 322 | +│ └── cycle-vie-pull-request.md # Avec diagramme Mermaid | |
| 323 | +├── developer_manual/ # MANUEL DÉVELOPPEUR (Diátaxis) — NOUVEAU | |
| 324 | +│ ├── index.md | |
| 325 | +│ ├── tutorials/ | |
| 326 | +│ │ ├── 01-getting-started.md # ← gitrust/docs/GETTING_STARTED.md (as-is) | |
| 327 | +│ │ ├── 02-premiere-contribution.md # Clone, build, test, première PR | |
| 328 | +│ │ └── 03-creer-un-worker-async.md # TDD pas-à-pas (adapté de plans/import-async-worker.md) | |
| 329 | +│ ├── how-to/ | |
| 330 | +│ │ ├── contribuer-workflow-pr.md # Workflow Git + review + QA | |
| 331 | +│ │ ├── lancer-tests-unitaires.md # ← gitrust/docs/TESTING.md (section unitaires) | |
| 332 | +│ │ ├── lancer-tests-e2e.md # ← gitrust/docs/TESTS_E2E.md (section playwright) | |
| 333 | +│ │ ├── ajouter-route-web.md # Patron rustwarden → axum handler | |
| 334 | +│ │ ├── ajouter-service-metier.md # Patron service + injection + tests | |
| 335 | +│ │ ├── ajouter-migration-db.md # SeaORM, ordre, rollback | |
| 336 | +│ │ ├── implementer-webhooks.md # ← extrait GUIDE_DEVELOPPEMENT_PHASE5.md (LOT 5.1) | |
| 337 | +│ │ ├── implementer-endpoint-api.md # ← extrait GUIDE_DEVELOPPEMENT_PHASE5.md (LOT 5.2) | |
| 338 | +│ │ ├── importer-depot-externe-code.md # ← gitrust/docs/IMPORT_FLOW.md | |
| 339 | +│ │ ├── contribuer-a-rustwarden.md # ← gitrust/docs/UPSTREAM_RUSTWARDEN.md | |
| 340 | +│ │ └── passer-la-qa-avant-merge.md # Checklist pre-merge (extrait QA_RULES.md) | |
| 341 | +│ ├── reference/ | |
| 342 | +│ │ ├── architecture-crates.md # ← gitrust/docs/ARCHITECTURE.md (as-is) | |
| 343 | +│ │ ├── services-api-interne.md # ← gitrust/docs/SERVICES_REFERENCE.md (à compléter) | |
| 344 | +│ │ ├── schema-base-donnees.md # ← gitrust/docs/DATABASE.md (ERD + tables) | |
| 345 | +│ │ ├── regles-qa-anssi.md # ← gitrust/docs/QA_RULES.md (gates, lints, ANSSI) | |
| 346 | +│ │ ├── api-rest-v1.md # Swagger link + auth + pagination + errors | |
| 347 | +│ │ ├── git-hooks-post-receive.md # Référence des hooks exposés | |
| 348 | +│ │ └── rustwarden-core-api.md # Helpers, extracteurs, middleware rustwarden | |
| 349 | +│ └── explanation/ | |
| 350 | +│ ├── vue-ensemble-architecture.md # ← gitrust/docs/ARCHITECTURE.md (partie narrative) | |
| 351 | +│ ├── flux-requetes.md # ← gitrust/docs/SEQUENCES.md (diagrammes Mermaid) | |
| 352 | +│ ├── modele-permissions-rbac.md # 4 rôles × teams × repo scope | |
| 353 | +│ ├── 2fa-fonctionnement.md # ← extrait CHANGELOG_2FA_EMAIL_LOGIN.md | |
| 354 | +│ ├── hierarchie-labels.md # ← extrait REALISE_LOT12.md | |
| 355 | +│ ├── ci-dagger-easy-vs-power.md # ← extrait DAGGER_CI_ANALYSIS.md | |
| 356 | +│ ├── decisions-ui-htmx.md # ← extrait PLAN_UI_TRANSFORMATION.md | |
| 357 | +│ └── patron-worker-async.md # ← extrait plans/import-async-worker.md | |
| 358 | +├── administration_manual/ # MANUEL D'ADMINISTRATION (Diátaxis) | |
| 359 | +│ ├── index.md | |
| 360 | +│ ├── tutorials/ | |
| 361 | +│ │ ├── 01-installation-docker.md # Stack docker-compose complète | |
| 362 | +│ │ ├── 02-installation-systemd.md # Binaire natif + service | |
| 363 | +│ │ ├── 03-premier-demarrage.md # Admin bootstrap, SSH host key, migrations | |
| 364 | +│ │ └── 04-mise-en-production-192-168.md # ← plans/deploiement-local-192-168-1-57.md (as-is, généralisé) | |
| 365 | +│ ├── how-to/ | |
| 366 | +│ │ ├── sauvegarder-restaurer.md # pg_dump + repos bare + SSH keys | |
| 367 | +│ │ ├── mettre-a-jour.md # Upgrade checklist (migrations auto) | |
| 368 | +│ │ ├── configurer-smtp.md | |
| 369 | +│ │ ├── configurer-oauth.md # Google/GitHub providers via rustwarden | |
| 370 | +│ │ ├── configurer-ci-runner-remote.md # ← gitrust/docs/CI_REMOTE_RUNNER.md | |
| 371 | +│ │ ├── integrer-dependency-track.md # ← gitrust/docs/CI_AND_DEPENDENCY_TRACKER.md | |
| 372 | +│ │ ├── durcir-avec-fail2ban.md # ← gitrust/docs/FAIL2BAN_DEPLOYMENT.md (as-is) | |
| 373 | +│ │ ├── tuner-rate-limiting.md | |
| 374 | +│ │ ├── forcer-2fa-globalement.md # ← extrait CHANGELOG_FORCE_2FA.md | |
| 375 | +│ │ ├── depanner-ssh.md # Keys, ports, fingerprints | |
| 376 | +│ │ ├── depanner-ci.md | |
| 377 | +│ │ ├── gerer-utilisateurs-admin.md # Panel /admin | |
| 378 | +│ │ └── auditer-instance.md # Logs journalctl, audit log, métriques | |
| 379 | +│ ├── reference/ | |
| 380 | +│ │ ├── variables-environnement.md # Index thématique du .env (lien vers .env.example) | |
| 381 | +│ │ ├── parametres-dynamiques.md # Table app_settings, /admin/settings | |
| 382 | +│ │ ├── schema-base-de-donnees.md # Résumé + lien vers ../gitrust/docs/DATABASE.md | |
| 383 | +│ │ ├── ports-et-services.md # 4000 HTTP, 2222 SSH, 5432 PG | |
| 384 | +│ │ └── conformite-anssi-pa074.md # Checklist QA_RULES appliquée | |
| 385 | +│ └── explanation/ | |
| 386 | +│ ├── architecture-globale.md # Diagramme composants + flux requête | |
| 387 | +│ ├── modele-deploiement.md # Mono-machine vs HA, limites | |
| 388 | +│ ├── ci-dagger.md # Pourquoi Dagger, Easy vs Power Mode | |
| 389 | +│ └── strategie-sauvegarde.md # Rationale 3-2-1 adapté gitrust | |
| 390 | +├── template/ # EXEMPLES RÉUTILISABLES (code/config pur) | |
| 391 | +│ ├── index.md # Index des templates avec cas d'usage | |
| 392 | +│ ├── env/ | |
| 393 | +│ │ ├── dev-local.env | |
| 394 | +│ │ ├── production-mono-machine.env | |
| 395 | +│ │ ├── production-ci-heavy.env | |
| 396 | +│ │ └── tests-e2e.env | |
| 397 | +│ ├── docker/ | |
| 398 | +│ │ ├── docker-compose.minimal.yml | |
| 399 | +│ │ ├── docker-compose.production.yml # + Redis sessions + SMTP | |
| 400 | +│ │ ├── docker-compose.with-ci-runner.yml | |
| 401 | +│ │ └── podman-quadlet.container # Alternative Docker | |
| 402 | +│ ├── reverse-proxy/ | |
| 403 | +│ │ ├── nginx-tls.conf | |
| 404 | +│ │ ├── caddy-Caddyfile | |
| 405 | +│ │ └── traefik-dynamic.yml | |
| 406 | +│ ├── systemd/ | |
| 407 | +│ │ ├── gitrust.service # + hardening AppArmor/seccomp | |
| 408 | +│ │ └── gitrust-backup.timer | |
| 409 | +│ ├── ci/ | |
| 410 | +│ │ ├── rust.gitrust-ci.yml | |
| 411 | +│ │ ├── go.gitrust-ci.yml | |
| 412 | +│ │ ├── python.gitrust-ci.yml | |
| 413 | +│ │ ├── node.gitrust-ci.yml | |
| 414 | +│ │ └── dagger-power-mode/ # Squelette .dagger/ | |
| 415 | +│ │ ├── dagger.json | |
| 416 | +│ │ └── main.go | |
| 417 | +│ ├── backup/ | |
| 418 | +│ │ ├── backup.sh # pg_dump + rsync repos | |
| 419 | +│ │ └── restore.sh | |
| 420 | +│ ├── api-clients/ | |
| 421 | +│ │ ├── python-create-repo.py | |
| 422 | +│ │ ├── rust-list-repos.rs | |
| 423 | +│ │ └── curl-pat-auth.sh | |
| 424 | +│ └── migration/ | |
| 425 | +│ ├── from-gitea.sh # Import en masse via worker | |
| 426 | +│ └── from-forgejo.sh | |
| 427 | +├── diagrams/ # Sources Mermaid partagées | |
| 428 | +│ ├── architecture-globale.mmd | |
| 429 | +│ ├── flux-auth-ssh.mmd # (adapté de gitrust/docs/SEQUENCES.md) | |
| 430 | +│ ├── cycle-vie-pr.mmd | |
| 431 | +│ ├── pipeline-ci-dagger.mmd | |
| 432 | +│ └── topologie-deploiement.mmd | |
| 433 | +├── .github/workflows/ # Ou .gitrust-ci.yml si hébergé sur gitrust | |
| 434 | +│ └── build-docs.yml # mdBook build + lint + deploy demo.gitrust.eu | |
| 435 | +├── .markdownlint.yaml # Règles lint (longueur ligne, headings, etc.) | |
| 436 | +├── CONTRIBUTING.md # Workflow traduction po, conventions FR | |
| 437 | +├── CLAUDE.md # Directives projet pour Claude Code (voir § Directives projet) | |
| 438 | +└── .plans/ # Plans de travail (tous plans futurs ici, pas dans ~/.claude/plans/) | |
| 439 | + └── 001-scaffold-initial.md # Copie/déplacement du présent plan | |
| 440 | +``` | |
| 441 | + | |
| 442 | +## Directives projet (CLAUDE.md local) | |
| 443 | + | |
| 444 | +Un fichier `CLAUDE.md` est créé à la racine de `girust_doc/` avec au minimum : | |
| 445 | + | |
| 446 | +- **Plans de travail** : tout plan (issu de `/plan`, `ExitPlanMode`, autopilot, etc.) doit être écrit dans `./.plans/` à la racine du projet, jamais dans `~/.claude/plans/`. Numérotation séquentielle `NNN-slug.md`. Les plans restent versionnés avec le dépôt. | |
| 447 | +- **Langue canonique** : FR pour les sources, EN prioritaire en traduction. | |
| 448 | +- **Diátaxis strict** : aucun nouveau fichier de contenu hors des 4 dossiers `tutorials/`, `how-to/`, `reference/`, `explanation/` de chaque manuel. | |
| 449 | +- **Templates = code pur** : pas de prose dans `template/` (sauf `index.md`). | |
| 450 | +- **Mermaid centralisé** : sources `.mmd` dans `diagrams/`, référencées depuis les `.md` via include mdBook. | |
| 451 | + | |
| 452 | +Ce plan lui-même est copié vers `./.plans/001-scaffold-initial.md` dans le premier commit. | |
| 453 | + | |
| 454 | +## Fichiers critiques à créer en priorité (ordre d'exécution) | |
| 455 | + | |
| 456 | +1. **`CLAUDE.md`** racine + **`.plans/001-scaffold-initial.md`** (copie de ce plan) — avant tout le reste, pour verrouiller la convention. | |
| 457 | +2. **`book.toml`** — config mdBook avec `[preprocessor.gettext]`, `[output.html]` thème, `[preprocessor.mermaid]`. | |
| 458 | +3. **`src/SUMMARY.md`** — squelette complet de l'arborescence ci-dessus (placeholders). | |
| 459 | +4. **`README.md`** racine — présentation du dépôt doc (pas de la plateforme), comment contribuer. | |
| 460 | +5. **`CONTRIBUTING.md`** — workflow `po/*.po` pour traduction, conventions nommage, règles Mermaid. | |
| 461 | +6. **4 `index.md`** — `user_manual/`, `administration_manual/`, `developer_manual/`, `template/` avec carte de navigation Diátaxis. | |
| 462 | +7. **Import en bloc des fichiers "or"** de `gitrust/docs/` (13 fichiers) vers les destinations listées dans le mapping — copie + ajustement d'en-tête + vérification Diátaxis. | |
| 463 | +8. **4 tutoriels phares** (1 par manuel) pour prouver que le scaffold fonctionne bout en bout : | |
| 464 | + - `user_manual/tutorials/01-premier-pas.md` | |
| 465 | + - `administration_manual/tutorials/01-installation-docker.md` | |
| 466 | + - `developer_manual/tutorials/01-getting-started.md` (import direct) | |
| 467 | + - `template/env/dev-local.env` + `template/docker/docker-compose.minimal.yml` | |
| 468 | +9. **`diagrams/architecture-globale.mmd`** + `flux-requetes.mmd` (extraits des Mermaid existants dans `docs/SEQUENCES.md`). | |
| 469 | +10. **`.markdownlint.yaml`** + **`.github/workflows/build-docs.yml`** — CI de build + lint dès le début. | |
| 470 | + | |
| 471 | +## Mapping gitrust/docs → girust_doc (basé sur audit complet, 44 fichiers) | |
| 472 | + | |
| 473 | +> **Rappel** : `girust_doc` est autonome. Toutes les flèches `←` ci-dessous signifient **copier le contenu** dans le fichier cible, pas un lien. Une fois copié, la doc ne dépend plus du dépôt source. | |
| 474 | + | |
| 475 | +### Fichiers "or" — publiables tels quels (copier + adapter en-tête + Diátaxis) | |
| 476 | + | |
| 477 | +| Source (gitrust/) | Destination (girust_doc/) | Manuel | Mode | | |
| 478 | +|---|---|---|---| | |
| 479 | +| `docs/GETTING_STARTED.md` | `developer_manual/tutorials/01-getting-started.md` | dev | tutorial | | |
| 480 | +| `docs/ARCHITECTURE.md` | `developer_manual/reference/architecture-crates.md` + `developer_manual/explanation/vue-ensemble-architecture.md` (scindé) | dev | reference + explanation | | |
| 481 | +| `docs/SEQUENCES.md` | `developer_manual/explanation/flux-requetes.md` + sources `.mmd` dans `diagrams/` | dev | explanation | | |
| 482 | +| `docs/TESTING.md` | `developer_manual/how-to/lancer-tests-unitaires.md` | dev | how-to | | |
| 483 | +| `docs/TESTS_E2E.md` | `developer_manual/how-to/lancer-tests-e2e.md` | dev | how-to | | |
| 484 | +| `docs/QA_RULES.md` | `developer_manual/reference/regles-qa-anssi.md` | dev | reference | | |
| 485 | +| `docs/SETTINGS.md` | `administration_manual/reference/parametres-dynamiques.md` | admin | reference | | |
| 486 | +| `docs/CI_AND_DEPENDENCY_TRACKER.md` | `administration_manual/how-to/integrer-dependency-track.md` | admin | how-to | | |
| 487 | +| `docs/CI_REMOTE_RUNNER.md` | `administration_manual/how-to/configurer-ci-runner-remote.md` | admin | how-to | | |
| 488 | +| `docs/FAIL2BAN_DEPLOYMENT.md` | `administration_manual/how-to/durcir-avec-fail2ban.md` | admin | how-to | | |
| 489 | +| `docs/plans/deploiement-local-192-168-1-57.md` | `administration_manual/tutorials/04-mise-en-production-192-168.md` (généralisé) | admin | tutorial | | |
| 490 | +| `docs/UPSTREAM_RUSTWARDEN.md` | `developer_manual/how-to/contribuer-a-rustwarden.md` | dev | how-to | | |
| 491 | +| `docs/IMPORT_FLOW.md` | `developer_manual/how-to/importer-depot-externe-code.md` | dev | how-to | | |
| 492 | + | |
| 493 | +### Fichiers "mine" — extraits partiels à recomposer | |
| 494 | + | |
| 495 | +| Source | Extraits à publier | Destination | Mode | | |
| 496 | +|---|---|---|---| | |
| 497 | +| `docs/DATABASE.md` | ERD + tables publiques (pas le SQL interne brut) | `developer_manual/reference/schema-base-donnees.md` | reference | | |
| 498 | +| `docs/SERVICES_REFERENCE.md` | Structure + signatures — à **compléter** (inachevé à 100 lignes) | `developer_manual/reference/services-api-interne.md` | reference | | |
| 499 | +| `docs/CHANGELOG_2FA_EMAIL_LOGIN.md` | Transformer "changelog" en doc conceptuelle | `developer_manual/explanation/2fa-fonctionnement.md` | explanation | | |
| 500 | +| `docs/CHANGELOG_FORCE_2FA.md` | Feature flag + impact admin uniquement | `administration_manual/how-to/forcer-2fa-globalement.md` | how-to | | |
| 501 | +| `docs/DAGGER_CI_ANALYSIS.md` | Comparaison Easy vs Power Mode | `developer_manual/explanation/ci-dagger-easy-vs-power.md` | explanation | | |
| 502 | +| `docs/PLAN_UI_TRANSFORMATION.md` | Décisions design (DaisyUI, HTMX) — pas la roadmap | `developer_manual/explanation/decisions-ui-htmx.md` | explanation | | |
| 503 | +| `docs/GUIDE_DEVELOPPEMENT_PHASE5.md` | Diviser en deux : LOT 5.1 webhooks + LOT 5.2 API | `developer_manual/how-to/implementer-webhooks.md` + `implementer-endpoint-api.md` | how-to | | |
| 504 | +| `docs/plans/import-async-worker.md` | Patron TDD + worker + SSE (généraliser hors contexte import) | `developer_manual/explanation/patron-worker-async.md` + `tutorials/03-creer-un-worker-async.md` | explanation + tutorial | | |
| 505 | +| `docs/plans/import-repository-externe.md` | Démarche TDD MVP (généraliser) | Fusionné avec précédent | — | | |
| 506 | +| `docs/REALISE_LOT1.md` | Patron navigation arbre de fichiers | `developer_manual/how-to/ajouter-route-web.md` (exemple illustratif) | how-to | | |
| 507 | +| `docs/REALISE_LOT12.md` | Hiérarchie 2-niveaux des labels | `developer_manual/explanation/hierarchie-labels.md` | explanation | | |
| 508 | + | |
| 509 | +### Fichiers à ignorer (obsolètes, internes, ou confidentiels) | |
| 510 | + | |
| 511 | +| Fichier | Raison | | |
| 512 | +|---|---| | |
| 513 | +| `ARCHITECTURE.md` racine (pas `docs/`) | Généré par wizard rustwarden, obsolète — `docs/ARCHITECTURE.md` fait foi | | |
| 514 | +| `DEVELOPER.md` racine | Générique rustwarden, remplacé par le nouveau manuel dev | | |
| 515 | +| `docs/MIGRATION_GUIDE.md` | V1→V2 obsolète (daté 2026-03-26) | | |
| 516 | +| `docs/LOTS_RESTANTS.md` | TODO interne obsolète | | |
| 517 | +| `docs/ORDONNANCEMENT.md` | Planification interne des lots | | |
| 518 | +| `docs/evaluations.md` | Notes internes produit (49K tokens), pas pour publication | | |
| 519 | +| `docs/eval-credentials.local.md` | **Confidentiel — secrets**, ne jamais publier | | |
| 520 | +| `docs/Update_rustwarden_db_getter.md` + `project_rustwarden_db_getter.md` | Notes tech debt internes | | |
| 521 | +| `docs/REALISE_LOT2-11, 13-14, LOT_SSH` | Rétros sprints sans valeur pédagogique publique | | |
| 522 | + | |
| 523 | +### Autres fichiers existants (hors `docs/`) à copier dans la doc | |
| 524 | + | |
| 525 | +| Fichier source | Contenu copié dans la doc | | |
| 526 | +|---|---| | |
| 527 | +| `.env.example` | **Contenu complet copié** dans `administration_manual/reference/variables-environnement.md` (avec annotations et regroupement thématique) | | |
| 528 | +| `deployment/gitrust.service`, `nginx-gitrust.conf` | **Contenu copié** dans `template/systemd/gitrust.service` et `template/reverse-proxy/nginx-tls.conf` — fichiers standalone | | |
| 529 | +| `static/api-docs/openapi.yaml` | **Copie embarquée** dans `developer_manual/reference/openapi.yaml` + page `api-rest-v1.md` qui documente l'auth, la pagination, les codes erreur et intègre un rendu Swagger UI local (ou équivalent statique) | | |
| 530 | + | |
| 531 | +## Stratégie multilingue (les 6 langues) | |
| 532 | + | |
| 533 | +- **FR** : langue source, canonique, tous les fichiers `.md` dans `src/` et sous-dossiers. | |
| 534 | +- **EN** : traduction prioritaire, via `po/en.po` généré par `mdbook-xgettext`. | |
| 535 | +- **DE / ES / PT / IT** : fichiers `po/*.po` créés vides au scaffold, traduction progressive. | |
| 536 | +- Build mdBook produit 6 sites statiques (`book/fr/`, `book/en/`, ...) déployés sous `demo.gitrust.eu/docs/{lang}/`. | |
| 537 | +- Une page d'accueil statique avec sélecteur de langue redirige selon `Accept-Language`. | |
| 538 | +- **Hors-scope de ce plan** : traduire effectivement le contenu — seul le scaffold bilingue (FR + EN squelette) est livré ; les autres langues restent en stubs jusqu'à ce que la matière FR soit stable. | |
| 539 | + | |
| 540 | +## Scope de ce chantier (itération 1) | |
| 541 | + | |
| 542 | +**Inclus** : | |
| 543 | +- Toute l'arborescence de dossiers et fichiers index (vides ou avec TODO) listée ci-dessus — **incluant `developer_manual/`** | |
| 544 | +- `book.toml` fonctionnel, build local `mdbook serve` opérationnel | |
| 545 | +- **Import en bloc des 13 fichiers "or"** depuis `gitrust/docs/` vers leurs destinations (copie + ajustement d'en-tête + placement Diátaxis correct) | |
| 546 | +- 4 tutoriels phares rédigés (un par manuel : user, admin, dev, template) — **respectant le template pédagogique** : objectifs Bloom, prérequis explicites, modèle mental avant pratique, checkpoints observables toutes les 2 étapes max, sortie verbatim, section « Et si ça ne marche pas » avec 3 erreurs top, récap qui reprend chaque objectif, lien vers la suite du parcours | |
| 547 | +- 4 templates critiques rédigés (env dev, docker-compose minimal, nginx TLS, systemd) | |
| 548 | +- Diagrammes Mermaid architecture globale + flux-requetes (extraits de `docs/SEQUENCES.md`) | |
| 549 | +- CI de build + lint Markdown | |
| 550 | +- `README.md` + `CONTRIBUTING.md` | |
| 551 | +- Pipeline de traduction `po/` en place (en.po généré, autres stubs vides) | |
| 552 | + | |
| 553 | +**Exclus** (itérations ultérieures) : | |
| 554 | +- Extraction fine des 8 fichiers "mine" (recomposition manuelle nécessaire) | |
| 555 | +- Complétion de `SERVICES_REFERENCE.md` (inachevé à 100 lignes — nécessite lecture du code) | |
| 556 | +- Rédaction exhaustive des how-to et reference hors import (placeholders `TODO` listés) | |
| 557 | +- Traduction réelle des langues autres que FR | |
| 558 | +- Captures d'écran UI (nécessitent instance démo déployée) | |
| 559 | +- Documentation API interactive au-delà du lien Swagger existant | |
| 560 | +- Nettoyage du dépôt source `gitrust/docs/` (suppression des fichiers obsolètes identifiés — hors périmètre de ce dépôt doc) | |
| 561 | + | |
| 562 | +## Vérification | |
| 563 | + | |
| 564 | +1. **Build local** : `mdbook build` dans `/home/monsieurb/Documents/devel/girust_doc` produit `book/` sans erreur et sans warning de lien cassé. | |
| 565 | +2. **Serveur de dev** : `mdbook serve --open` affiche le sommaire, les **4 manuels** (user / admin / dev / template), les 4 tutoriels phares rédigés avec diagrammes Mermaid rendus correctement, et les 13 fichiers importés depuis `gitrust/docs/` accessibles via la navigation. | |
| 566 | +3. **Lint Markdown** : `markdownlint-cli2 "**/*.md"` passe sans erreur. | |
| 567 | +4. **Validation Mermaid** : chaque fichier `.mmd` dans `diagrams/` est parsable via `mermaid-cli` (`mmdc -i x.mmd -o x.svg`). | |
| 568 | +5. **Sommaire** : chaque entrée de `src/SUMMARY.md` pointe vers un fichier qui existe (pas de lien mort). | |
| 569 | +6. **Templates copiables** : `cp template/env/dev-local.env ../gitrust/.env && cd ../gitrust && cargo run` doit démarrer l'instance sans modification (validation du contrat avec `gitrust/.env.example`). | |
| 570 | +7. **i18n** : `mdbook build` avec `MDBOOK_BOOK__LANGUAGE=en` produit `book/en/` avec fichiers traduits pour les pages où `po/en.po` contient des entrées, et fallback FR pour le reste. | |
| 571 | +8. **CI GitHub/gitrust** : le workflow de build passe sur une PR factice ajoutant un `.md` incorrect (doit échouer) et sur un `.md` valide (doit passer). | |
| 572 | +9. **Audit pédagogique des 4 tutoriels phares** : chacun coche toute la checklist : | |
| 573 | + - [ ] Objectifs Bloom observables déclarés (`O1..On`) | |
| 574 | + - [ ] Prérequis technique + pédagogique + temps estimé explicites | |
| 575 | + - [ ] Modèle mental / schéma Mermaid **avant** la première commande | |
| 576 | + - [ ] ≤ 3 concepts nouveaux dans la page | |
| 577 | + - [ ] ≤ 2 étapes consécutives sans checkpoint observable | |
| 578 | + - [ ] Sortie verbatim à chaque commande | |
| 579 | + - [ ] Section « Et si ça ne marche pas » avec ≥ 3 erreurs top | |
| 580 | + - [ ] Récap reprend explicitement chaque `Oi` | |
| 581 | + - [ ] Lien vers la prochaine étape du parcours | |
| 582 | +10. **Audit de parcours** : chaque manuel (user, admin, dev) a dans son `index.md` un diagramme Mermaid du parcours complet avec temps, scaffolding dégressif d'exactement 1 cran entre tutoriels, pas de saut > 1 niveau Bloom. |
A
CLAUDE.md
+81
-0
@@ -0,0 +1,81 @@
| 1 | +# CLAUDE.md | |
| 2 | + | |
| 3 | +Directives projet pour Claude Code lorsqu'il intervient dans `girust_doc/`. | |
| 4 | + | |
| 5 | +## Mission du dépôt | |
| 6 | + | |
| 7 | +Documentation officielle publique de la plateforme **gitrust** (forge Git self-hosted en Rust). Publiée sur `https://demo.gitrust.eu`. Source : dépôt gitrust voisin `/home/monsieurb/Documents/devel/gitrust`. | |
| 8 | + | |
| 9 | +## Conventions inviolables | |
| 10 | + | |
| 11 | +### Plans de travail | |
| 12 | + | |
| 13 | +Tout plan issu de `/plan`, `ExitPlanMode`, `autopilot` ou tout autre workflow doit être écrit dans `./.plans/` à la racine du projet, **jamais** dans `~/.claude/plans/`. Numérotation séquentielle `NNN-slug.md`. Les plans sont versionnés avec le dépôt pour rester visibles par l'équipe. | |
| 14 | + | |
| 15 | +### Langue canonique | |
| 16 | + | |
| 17 | +- **Source** : français (FR) — tous les `.md` dans `src/` et sous-dossiers de contenu. | |
| 18 | +- **Traductions** : via `mdbook-i18n-helpers` dans `po/{en,de,es,pt,it}.po`. Aligné avec les 6 langues de l'UI gitrust. | |
| 19 | +- Ne jamais traduire manuellement en éditant un fichier `.md` non-FR : tout passe par `po/`. | |
| 20 | + | |
| 21 | +### Framework documentaire : Diátaxis strict | |
| 22 | + | |
| 23 | +Chaque manuel (`user_manual/`, `administration_manual/`) possède exactement quatre dossiers : | |
| 24 | + | |
| 25 | +- `tutorials/` — apprentissage guidé pas-à-pas (quand l'utilisateur apprend) | |
| 26 | +- `how-to/` — recettes orientées tâche (quand l'utilisateur veut résoudre un problème précis) | |
| 27 | +- `reference/` — description technique exhaustive (quand l'utilisateur cherche une information) | |
| 28 | +- `explanation/` — contexte, rationale, concepts (quand l'utilisateur veut comprendre) | |
| 29 | + | |
| 30 | +Aucun fichier de contenu hors de ces quatre dossiers. Interdit : `guides/`, `docs/`, `misc/`, etc. | |
| 31 | + | |
| 32 | +### Templates = code pur | |
| 33 | + | |
| 34 | +Le dossier `template/` contient uniquement des fichiers copiables (configs, scripts, exemples de code). Pas de prose explicative sauf dans `template/index.md`. Tout contexte narratif va dans un `how-to/` qui référence le template. | |
| 35 | + | |
| 36 | +### Mermaid | |
| 37 | + | |
| 38 | +Sources Mermaid dans `diagrams/*.mmd`. Les `.md` incluent les diagrammes via un bloc de code Mermaid ou une directive d'inclusion mdBook. Ne jamais dupliquer un diagramme dans plusieurs fichiers : un fichier `.mmd` = une source de vérité. | |
| 39 | + | |
| 40 | +### Documentation autonome (déconnectée des sources) | |
| 41 | + | |
| 42 | +**Ce dépôt est autosuffisant.** Un lecteur sur `demo.gitrust.eu` n'a pas accès au code de `gitrust/`. Tout exemple (config, extrait de code, schéma SQL, diagramme) doit être **copié** dans la doc, pas référencé par lien local. | |
| 43 | + | |
| 44 | +- `.env.example` de gitrust → son contenu est copié dans `administration_manual/reference/variables-environnement.md` | |
| 45 | +- Diagrammes Mermaid de `gitrust/docs/SEQUENCES.md` → copiés dans `diagrams/*.mmd` | |
| 46 | +- Modèles de données, patrons de code, recettes d'installation → intégrés dans les pages correspondantes | |
| 47 | +- **Pas de liens `file://`** ni de chemins relatifs sortant de `girust_doc/` | |
| 48 | +- **Seule exception admise** : lien HTTP vers le dépôt public `demo.gitrust.eu/gitrust/gitrust` pour pointer vers le "code de référence", mais le contenu pertinent reste présent dans la doc | |
| 49 | +- Conséquence : quand gitrust évolue, un travail de synchronisation manuel est nécessaire (documenté dans `CONTRIBUTING.md`) | |
| 50 | + | |
| 51 | +## Build et vérification | |
| 52 | + | |
| 53 | +```bash | |
| 54 | +mdbook build # produit book/ (FR) | |
| 55 | +mdbook serve --open # serveur de dev | |
| 56 | +MDBOOK_BOOK__LANGUAGE=en mdbook build # produit book/en/ | |
| 57 | +markdownlint-cli2 "**/*.md" # lint | |
| 58 | +mmdc -i diagrams/x.mmd -o /tmp/x.svg # validation Mermaid individuelle | |
| 59 | +``` | |
| 60 | + | |
| 61 | +CI : `.github/workflows/build-docs.yml` enchaîne build + lint + validation Mermaid sur chaque PR. | |
| 62 | + | |
| 63 | +## Structure imposée | |
| 64 | + | |
| 65 | +``` | |
| 66 | +girust_doc/ | |
| 67 | +├── CLAUDE.md # ce fichier | |
| 68 | +├── .plans/ # plans de travail versionnés | |
| 69 | +├── book.toml # config mdBook | |
| 70 | +├── src/SUMMARY.md # sommaire mdBook | |
| 71 | +├── user_manual/ # Diátaxis × 4 | |
| 72 | +├── administration_manual/ # Diátaxis × 4 | |
| 73 | +├── template/ # code/config copiables | |
| 74 | +├── diagrams/ # sources Mermaid | |
| 75 | +├── po/ # traductions gettext | |
| 76 | +└── theme/ # thème mdBook custom | |
| 77 | +``` | |
| 78 | + | |
| 79 | +## Projet source (gitrust) | |
| 80 | + | |
| 81 | +Tous les liens vers le code ou la config gitrust pointent vers `/home/monsieurb/Documents/devel/gitrust` en local et vers `https://demo.gitrust.eu/gitrust/gitrust` une fois publié. Toujours vérifier que le lien existe encore avant de le référencer dans une page publiée. |
A
CONTRIBUTING.md
+142
-0
@@ -0,0 +1,142 @@
| 1 | +# Contribuer à la documentation gitrust | |
| 2 | + | |
| 3 | +Bienvenue ! Ce guide explique comment ajouter du contenu, traduire des pages et soumettre une pull request. | |
| 4 | + | |
| 5 | +--- | |
| 6 | + | |
| 7 | +## 1. Choisir le bon type de contenu (Diátaxis) | |
| 8 | + | |
| 9 | +Avant de créer un fichier, posez-vous la question : *qu'est-ce que le lecteur veut faire ?* | |
| 10 | + | |
| 11 | +| Type | Le lecteur veut… | Dossier cible | | |
| 12 | +|---|---|---| | |
| 13 | +| **Tutoriel** | Apprendre pas-à-pas, être guidé | `{manuel}/tutorials/` | | |
| 14 | +| **Guide pratique** | Accomplir une tâche précise | `{manuel}/how-to/` | | |
| 15 | +| **Référence** | Trouver une information technique | `{manuel}/reference/` | | |
| 16 | +| **Explication** | Comprendre le pourquoi, le contexte | `{manuel}/explanation/` | | |
| 17 | + | |
| 18 | +Consultez [CLAUDE.md](CLAUDE.md) pour les règles Diátaxis strictes appliquées à ce dépôt. Aucun fichier de contenu ne doit exister hors des quatre dossiers ci-dessus (dans chaque manuel). | |
| 19 | + | |
| 20 | +--- | |
| 21 | + | |
| 22 | +## 2. Ajouter une page | |
| 23 | + | |
| 24 | +1. Créez le fichier Markdown dans le bon dossier selon Diátaxis. | |
| 25 | +2. Ajoutez une entrée dans `src/SUMMARY.md` à la bonne position hiérarchique. | |
| 26 | +3. Rédigez en français (langue source canonique). | |
| 27 | +4. Respectez la checklist pédagogique ci-dessous pour les tutoriels. | |
| 28 | + | |
| 29 | +### Checklist pédagogique pour les tutoriels | |
| 30 | + | |
| 31 | +Chaque tutoriel doit cocher toutes ces cases avant d'être fusionné : | |
| 32 | + | |
| 33 | +- [ ] Objectifs Bloom observables déclarés en tête (`O1..On`) avec des verbes d'action (lister, exécuter, configurer, diagnostiquer, comparer, concevoir) — interdits : *comprendre, maîtriser, savoir, connaître, se familiariser avec* | |
| 34 | +- [ ] Prérequis explicites : technique (outils/versions), pédagogique (tutoriel précédent complété), temps estimé | |
| 35 | +- [ ] Modèle mental ou schéma Mermaid installé **avant** la première commande | |
| 36 | +- [ ] Pas plus de 3 concepts nouveaux dans la page | |
| 37 | +- [ ] Pas plus de 2 étapes consécutives sans checkpoint observable | |
| 38 | +- [ ] Sortie console attendue affichée verbatim après chaque commande | |
| 39 | +- [ ] Section « Et si ça ne marche pas » avec au moins 3 erreurs fréquentes et leur correction | |
| 40 | +- [ ] Récapitulatif qui reprend explicitement chaque objectif (`Oi`) | |
| 41 | +- [ ] Lien vers la prochaine étape du parcours | |
| 42 | + | |
| 43 | +--- | |
| 44 | + | |
| 45 | +## 3. Workflow de traduction | |
| 46 | + | |
| 47 | +La documentation source est en **français**. Les traductions passent exclusivement par les fichiers `po/`. | |
| 48 | + | |
| 49 | +### Générer les chaînes à traduire | |
| 50 | + | |
| 51 | +```bash | |
| 52 | +# Installer mdbook-i18n-helpers | |
| 53 | +cargo install mdbook-i18n-helpers | |
| 54 | + | |
| 55 | +# Extraire les chaînes françaises vers po/en.po | |
| 56 | +mdbook-xgettext | |
| 57 | +``` | |
| 58 | + | |
| 59 | +### Modifier une traduction existante | |
| 60 | + | |
| 61 | +Éditez le fichier `po/{lang}.po` correspondant à la langue cible. | |
| 62 | + | |
| 63 | +Priorité des langues : `en` (anglais, prioritaire) > `de`, `es`, `pt`, `it` (stubs initiaux). | |
| 64 | + | |
| 65 | +### Ajouter une nouvelle entrée de traduction | |
| 66 | + | |
| 67 | +```po | |
| 68 | +#: src/introduction.md:3 | |
| 69 | +msgid "Phrase en français" | |
| 70 | +msgstr "Translated phrase" | |
| 71 | +``` | |
| 72 | + | |
| 73 | +Ne jamais modifier un fichier `.md` pour le traduire : tout passe par `po/`. | |
| 74 | + | |
| 75 | +### Construire une version traduite | |
| 76 | + | |
| 77 | +```bash | |
| 78 | +MDBOOK_BOOK__LANGUAGE=en mdbook build | |
| 79 | +# Résultat dans book/en/ | |
| 80 | +``` | |
| 81 | + | |
| 82 | +--- | |
| 83 | + | |
| 84 | +## 4. Conventions Mermaid | |
| 85 | + | |
| 86 | +- Les sources Mermaid sont des fichiers `.mmd` dans `diagrams/`. | |
| 87 | +- **Un fichier `.mmd` = une source de vérité.** Ne jamais dupliquer un diagramme dans plusieurs pages `.md`. | |
| 88 | +- Dans les pages `.md`, insérer le diagramme via un bloc de code Mermaid : | |
| 89 | + | |
| 90 | + ````markdown | |
| 91 | + ```mermaid | |
| 92 | + graph LR | |
| 93 | + A --> B | |
| 94 | + ``` | |
| 95 | + ```` | |
| 96 | + | |
| 97 | +- Pour les diagrammes partagés entre plusieurs pages, inclure le contenu du `.mmd` (copie explicite acceptable, mais documenter la source dans un commentaire). | |
| 98 | +- Valider tout `.mmd` avant de soumettre : | |
| 99 | + | |
| 100 | + ```bash | |
| 101 | + mmdc -i diagrams/mon-diagramme.mmd -o /tmp/test.svg | |
| 102 | + ``` | |
| 103 | + | |
| 104 | +--- | |
| 105 | + | |
| 106 | +## 5. Règles Markdown | |
| 107 | + | |
| 108 | +Ce dépôt utilise [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) avec la configuration `.markdownlint.yaml`. | |
| 109 | + | |
| 110 | +Règles notables : | |
| 111 | + | |
| 112 | +- Longueur de ligne max : **120 caractères** (MD013) | |
| 113 | +- HTML autorisé : `<details>`, `<summary>` (MD033) | |
| 114 | +- La première ligne d'un fichier n'a pas besoin d'être un H1 (MD041 désactivé, car mdBook injecte le titre) | |
| 115 | +- Les titres suivent une hiérarchie stricte sans saut de niveau (MD001) | |
| 116 | + | |
| 117 | +Lancer le lint localement : | |
| 118 | + | |
| 119 | +```bash | |
| 120 | +markdownlint-cli2 "**/*.md" | |
| 121 | +``` | |
| 122 | + | |
| 123 | +--- | |
| 124 | + | |
| 125 | +## 6. Synchronisation avec le dépôt source gitrust | |
| 126 | + | |
| 127 | +Ce dépôt est **autonome** : tout contenu issu de `gitrust/docs/` a été copié ici et ne dépend plus du dépôt source. Quand gitrust évolue (nouvelles variables d'environnement, nouveaux endpoints API, changements d'architecture), une synchronisation manuelle est nécessaire : | |
| 128 | + | |
| 129 | +1. Comparer les fichiers sources dans `gitrust/docs/` avec leurs copies dans ce dépôt. | |
| 130 | +2. Mettre à jour les pages concernées. | |
| 131 | +3. Documenter le changement dans le message de commit (`sync: mise à jour depuis gitrust vX.Y`). | |
| 132 | + | |
| 133 | +--- | |
| 134 | + | |
| 135 | +## 7. Workflow de pull request | |
| 136 | + | |
| 137 | +1. Créez une branche depuis `main` : `git checkout -b doc/ma-contribution` | |
| 138 | +2. Faites vos modifications, lancez `mdbook build` et `markdownlint-cli2 "**/*.md"` localement. | |
| 139 | +3. Ouvrez une PR sur [demo.gitrust.eu/gitrust/girust_doc](https://demo.gitrust.eu/gitrust/girust_doc). | |
| 140 | +4. La CI vérifie : build mdBook, lint Markdown, validation des `.mmd`. | |
| 141 | +5. Un relecteur vérifie la checklist pédagogique (pour les tutoriels) et la cohérence Diátaxis. | |
| 142 | +6. Fusion en squash merge après approbation. |
A
README.md
+72
-0
@@ -0,0 +1,72 @@
| 1 | +# girust_doc — Documentation officielle gitrust | |
| 2 | + | |
| 3 | +Ce dépôt contient les sources de la documentation officielle de la plateforme [gitrust](https://demo.gitrust.eu), forge Git self-hosted en Rust. | |
| 4 | + | |
| 5 | +La documentation publiée est accessible sur **[demo.gitrust.eu](https://demo.gitrust.eu)**. | |
| 6 | + | |
| 7 | +--- | |
| 8 | + | |
| 9 | +## Pour les contributeurs à la documentation | |
| 10 | + | |
| 11 | +### Prérequis | |
| 12 | + | |
| 13 | +- [mdBook](https://rust-lang.github.io/mdBook/guide/installation.html) — `cargo install mdbook` | |
| 14 | +- [mdbook-mermaid](https://github.com/badboy/mdbook-mermaid) — `cargo install mdbook-mermaid` | |
| 15 | +- [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) — `npm install -g markdownlint-cli2` | |
| 16 | +- [mermaid-cli](https://github.com/mermaid-js/mermaid-cli) — `npm install -g @mermaid-js/mermaid-cli` (pour valider les `.mmd`) | |
| 17 | + | |
| 18 | +### Construire la documentation | |
| 19 | + | |
| 20 | +```bash | |
| 21 | +# Construire la version française (source canonique) | |
| 22 | +mdbook build | |
| 23 | + | |
| 24 | +# Lancer le serveur de développement avec rechargement automatique | |
| 25 | +mdbook serve --open | |
| 26 | + | |
| 27 | +# Construire une version traduite (ex. anglais) | |
| 28 | +MDBOOK_BOOK__LANGUAGE=en mdbook build | |
| 29 | +``` | |
| 30 | + | |
| 31 | +Le résultat est produit dans `book/`. | |
| 32 | + | |
| 33 | +### Vérifier la qualité | |
| 34 | + | |
| 35 | +```bash | |
| 36 | +# Lint Markdown | |
| 37 | +markdownlint-cli2 "**/*.md" | |
| 38 | + | |
| 39 | +# Valider un diagramme Mermaid | |
| 40 | +mmdc -i diagrams/architecture-globale.mmd -o /tmp/out.svg | |
| 41 | +``` | |
| 42 | + | |
| 43 | +### Contribuer | |
| 44 | + | |
| 45 | +Consultez [CONTRIBUTING.md](CONTRIBUTING.md) pour : | |
| 46 | + | |
| 47 | +- Choisir le bon type de contenu (Diátaxis) | |
| 48 | +- Ajouter une nouvelle page | |
| 49 | +- Proposer une traduction | |
| 50 | +- Respecter les conventions Mermaid et Markdown | |
| 51 | +- Soumettre une pull request | |
| 52 | + | |
| 53 | +### Structure du dépôt | |
| 54 | + | |
| 55 | +``` | |
| 56 | +girust_doc/ | |
| 57 | +├── book.toml # Configuration mdBook | |
| 58 | +├── src/SUMMARY.md # Table des matières | |
| 59 | +├── src/introduction.md # Page d'accueil | |
| 60 | +├── user_manual/ # Manuel utilisateur (Diátaxis) | |
| 61 | +├── administration_manual/ # Manuel d'administration (Diátaxis) | |
| 62 | +├── developer_manual/ # Manuel développeur (Diátaxis) | |
| 63 | +├── template/ # Configs et scripts copiables | |
| 64 | +├── diagrams/ # Sources Mermaid (.mmd) | |
| 65 | +├── po/ # Traductions gettext | |
| 66 | +├── theme/ # Thème mdBook custom | |
| 67 | +└── .github/workflows/ # CI de build et lint | |
| 68 | +``` | |
| 69 | + | |
| 70 | +--- | |
| 71 | + | |
| 72 | +Documentation publiée sous licence [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). |
A
administration_manual/explanation/architecture-globale.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Architecture globale | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/explanation/ci-dagger.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# CI Dagger : Easy Mode vs Power Mode | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/explanation/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Explication | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/explanation/modele-deploiement.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Modèle de déploiement | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/explanation/strategie-sauvegarde.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Stratégie de sauvegarde | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/how-to/auditer-instance.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Auditer une instance | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/how-to/configurer-ci-runner-remote.md
+275
-0
@@ -0,0 +1,275 @@
| 1 | +# Configurer le runner CI distant | |
| 2 | + | |
| 3 | +Guide d'usage du script qui provisionne une machine distante pour exécuter les pipelines CI/CD de gitrust via SSH + rsync + Dagger. | |
| 4 | + | |
| 5 | +--- | |
| 6 | + | |
| 7 | +## 1. Rôle du script | |
| 8 | + | |
| 9 | +`deployment/setup-remote-ci.sh` (disponible dans le dépôt source gitrust) prépare **un serveur de build distant** utilisé par le worker CI de gitrust. Il automatise 6 étapes : | |
| 10 | + | |
| 11 | +1. Vérifie la connectivité SSH vers le runner | |
| 12 | +2. Installe **Docker** (`curl https://get.docker.com | sh`) s'il est absent | |
| 13 | +3. Installe **Dagger CLI** (`curl https://dl.dagger.io/dagger/install.sh | sh`) s'il est absent | |
| 14 | +4. Crée le répertoire de travail distant (`CI_REMOTE_PATH`) | |
| 15 | +5. Synchronise le module `deployment/ci-engine/` (mode CI Easy) via `rsync -az --delete` | |
| 16 | +6. Smoke test : affiche `docker --version` et `dagger version` | |
| 17 | + | |
| 18 | +Le script est **idempotent** : rejoue sans dommage, skip ce qui existe déjà. | |
| 19 | + | |
| 20 | +--- | |
| 21 | + | |
| 22 | +## 2. Quand l'utiliser | |
| 23 | + | |
| 24 | +| Scénario | Besoin de `setup-remote-ci.sh` ? | | |
| 25 | +|---|---| | |
| 26 | +| Dev local, CI sur la même machine que gitrust (`CI_REMOTE_HOST=localhost`) | **Non** — Docker et Dagger déjà installés localement, le `ci-engine/` est lu depuis `deployment/ci-engine/` directement | | |
| 27 | +| Prod on-premise, un seul serveur (gitrust + CI colocalisés) | **Non** — idem, un simple `curl get.docker.com \| sh` suffit sur le serveur gitrust | | |
| 28 | +| Prod avec **runner CI dédié** (machine séparée) | **OUI** — c'est le cas cible de ce script | | |
| 29 | +| Prod avec plusieurs instances gitrust partageant un runner | **OUI** — le runner est provisionné une fois, chaque instance pointe dessus | | |
| 30 | +| CI dans Kubernetes / Nomad / runner managé cloud | **Non** — ce script est pensé pour une VM Debian/Ubuntu classique | | |
| 31 | + | |
| 32 | +--- | |
| 33 | + | |
| 34 | +## 3. Architecture cible | |
| 35 | + | |
| 36 | +``` | |
| 37 | ++---------------------+ SSH + rsync +-----------------------+ | |
| 38 | +| Gitrust (web+SSH) |---------------------------| CI Runner (distant) | | |
| 39 | +| <your-server-ip> | CI_REMOTE_HOST/USER/KEY | <ci-runner-ip> | | |
| 40 | +| | | | | |
| 41 | +| Worker CI Tokio | push .gitrust-ci.yml | /opt/gitrust-ci/ | | |
| 42 | +| (dans gitrust.bin) | + code source checkout | ├── ci-engine/ | | |
| 43 | +| | | └── workspaces/ | | |
| 44 | +| | dagger call ... | | | |
| 45 | +| | | Docker + Dagger CLI | | |
| 46 | ++---------------------+ +-----------------------+ | |
| 47 | +``` | |
| 48 | + | |
| 49 | +Le worker CI de gitrust (tâche Tokio dans le binaire principal) ne fait **pas tourner** Docker localement — il délègue au runner via SSH. Cela permet d'isoler les workloads CPU/RAM gourmands (builds Rust, Node, Docker) du process web de gitrust. | |
| 50 | + | |
| 51 | +--- | |
| 52 | + | |
| 53 | +## 4. Pré-requis | |
| 54 | + | |
| 55 | +### Sur la machine d'exécution (là où on lance le script) | |
| 56 | + | |
| 57 | +| Outil | Rôle | | |
| 58 | +|---|---| | |
| 59 | +| `bash` ≥ 4 | Interpréteur | | |
| 60 | +| `ssh`, `rsync` | Transport et synchro | | |
| 61 | +| `ssh-agent` chargé **ou** `CI_REMOTE_SSH_KEY` défini | Auth SSH sans mot de passe interactif (`BatchMode=yes`) | | |
| 62 | +| Fichier `.env` avec les variables CI_REMOTE_* | Config (voir section 5) | | |
| 63 | + | |
| 64 | +### Sur le runner distant | |
| 65 | + | |
| 66 | +| Pré-requis | Pourquoi | | |
| 67 | +|---|---| | |
| 68 | +| OS Linux récent (Debian 12+, Ubuntu 22.04+) | Docker install script compatible | | |
| 69 | +| User avec `sudo` passwordless **ou** droits `docker` | `get.docker.com` fait `sudo` en interne | | |
| 70 | +| Clé SSH publique du user local dans `~/.ssh/authorized_keys` | Auth SSH non-interactive | | |
| 71 | +| Réseau sortant autorisé vers `get.docker.com` et `dl.dagger.io` | Installation des binaires | | |
| 72 | +| Au minimum ~5 Go libres dans `CI_REMOTE_PATH` | Images Docker + workspaces | | |
| 73 | + | |
| 74 | +--- | |
| 75 | + | |
| 76 | +## 5. Variables d'environnement attendues (le `.env`) | |
| 77 | + | |
| 78 | +Le script **source un fichier `.env`** dont le chemin est passé en argument, ou par défaut `../.env` (relatif au script, donc `<racine_projet>/.env`). | |
| 79 | + | |
| 80 | +### Tableau des variables | |
| 81 | + | |
| 82 | +| Variable | Obligatoire | Défaut | Description | | |
| 83 | +|---|---|---|---| | |
| 84 | +| `CI_REMOTE_HOST` | **OUI** | — | Hostname ou IP du runner (ex: `ci-runner.internal`) | | |
| 85 | +| `CI_REMOTE_USER` | non | `$(whoami)` (user courant) | Compte SSH sur le runner | | |
| 86 | +| `CI_REMOTE_SSH_PORT` | non | `22` | Port SSH du runner | | |
| 87 | +| `CI_REMOTE_PATH` | non | `/opt/gitrust-ci` | Répertoire de travail distant (créé par le script) | | |
| 88 | +| `CI_REMOTE_SSH_KEY` | non | — (ssh-agent) | Chemin d'une clé privée SSH spécifique | | |
| 89 | + | |
| 90 | +Ces variables sont les **mêmes** que celles lues par gitrust au runtime. Centraliser dans `.env` évite les divergences entre le provisionnement et le runtime. | |
| 91 | + | |
| 92 | +### Exemple minimal de `.env` (runner dédié) | |
| 93 | + | |
| 94 | +```bash | |
| 95 | +# --- CI runner distant --- | |
| 96 | +CI_REMOTE_HOST=<ci-runner-ip> | |
| 97 | +CI_REMOTE_USER=ci-runner | |
| 98 | +CI_REMOTE_SSH_PORT=22 | |
| 99 | +CI_REMOTE_PATH=/opt/gitrust-ci | |
| 100 | +CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/ci_runner_ed25519 | |
| 101 | +``` | |
| 102 | + | |
| 103 | +### Exemple `.env` complet coexistant avec config gitrust | |
| 104 | + | |
| 105 | +```bash | |
| 106 | +DATABASE_URL=postgres://... | |
| 107 | +JWT_SECRET=... | |
| 108 | +# ... (voir .env.example pour le reste) | |
| 109 | + | |
| 110 | +# --- CI/CD (lu par gitrust ET par setup-remote-ci.sh) --- | |
| 111 | +CI_ENABLED=true | |
| 112 | +CI_MAX_CONCURRENT=4 | |
| 113 | +CI_REMOTE_HOST=ci-runner.internal | |
| 114 | +CI_REMOTE_USER=ci-runner | |
| 115 | +CI_REMOTE_PATH=/opt/gitrust-ci | |
| 116 | +CI_REMOTE_SSH_KEY=/opt/gitrust/data/ci_runner_key | |
| 117 | +``` | |
| 118 | + | |
| 119 | +### Cas « runner local » (pas besoin du script) | |
| 120 | + | |
| 121 | +```bash | |
| 122 | +CI_REMOTE_HOST=localhost | |
| 123 | +# Les autres CI_REMOTE_* sont ignorés | |
| 124 | +``` | |
| 125 | + | |
| 126 | +Dans ce cas, installer Docker et Dagger directement sur la machine gitrust, copier `deployment/ci-engine/` vers `CI_ENGINE_PATH` (défaut `/opt/gitrust/ci-engine`) et passer à la suite. **Ne pas exécuter `setup-remote-ci.sh`** avec `CI_REMOTE_HOST=localhost`. | |
| 127 | + | |
| 128 | +--- | |
| 129 | + | |
| 130 | +## 6. Usage | |
| 131 | + | |
| 132 | +### Depuis la racine du projet (par défaut) | |
| 133 | + | |
| 134 | +```bash | |
| 135 | +cd /chemin/vers/gitrust | |
| 136 | + | |
| 137 | +# .env a la racine (défaut) : | |
| 138 | +./deployment/setup-remote-ci.sh | |
| 139 | +``` | |
| 140 | + | |
| 141 | +### Avec un `.env` explicite | |
| 142 | + | |
| 143 | +```bash | |
| 144 | +./deployment/setup-remote-ci.sh /chemin/vers/mon.env | |
| 145 | +# Utile si vous avez .env.production, .env.staging, etc. | |
| 146 | +./deployment/setup-remote-ci.sh .env.production | |
| 147 | +``` | |
| 148 | + | |
| 149 | +### Sortie attendue | |
| 150 | + | |
| 151 | +``` | |
| 152 | +==> Configuration : | |
| 153 | + Serveur : ci-runner@<ci-runner-ip> | |
| 154 | + Port SSH : 22 | |
| 155 | + Chemin : /opt/gitrust-ci | |
| 156 | + | |
| 157 | +==> [1/6] Vérification de la connectivité SSH... | |
| 158 | +SSH OK | |
| 159 | + OK | |
| 160 | +==> [2/6] Vérification de Docker... | |
| 161 | + Docker déjà installé | |
| 162 | +==> [3/6] Vérification de Dagger CLI... | |
| 163 | + Installation de Dagger CLI... | |
| 164 | + Dagger installé | |
| 165 | +==> [4/6] Création du répertoire distant... | |
| 166 | + /opt/gitrust-ci créé | |
| 167 | +==> [5/6] Synchronisation du ci-engine... | |
| 168 | +sending incremental file list | |
| 169 | +ci-engine/ | |
| 170 | +ci-engine/profiles/ | |
| 171 | +... | |
| 172 | + ci-engine synchronisé vers /opt/gitrust-ci/ci-engine/ | |
| 173 | +==> [6/6] Smoke test... | |
| 174 | + Versions distantes : | |
| 175 | +Docker version 28.0.1, build abcd123 | |
| 176 | +dagger v0.19.2 (linux/amd64) | |
| 177 | + | |
| 178 | +==> Setup terminé. Le serveur ci-runner@<ci-runner-ip> est prêt pour l'exécution CI. | |
| 179 | + Pensez à configurer CI_EXECUTION_MODE=remote dans votre .env | |
| 180 | +``` | |
| 181 | + | |
| 182 | +--- | |
| 183 | + | |
| 184 | +## 7. Ce qui se retrouve sur le runner | |
| 185 | + | |
| 186 | +Après exécution réussie : | |
| 187 | + | |
| 188 | +``` | |
| 189 | +/opt/gitrust-ci/ <- CI_REMOTE_PATH | |
| 190 | +└── ci-engine/ <- synchronisé depuis deployment/ci-engine/ | |
| 191 | + ├── README.md | |
| 192 | + └── profiles/ <- templates par stack (Python, Node, Rust, ...) | |
| 193 | +``` | |
| 194 | + | |
| 195 | +Plus, installés globalement : | |
| 196 | +- `/usr/bin/docker` (ou équivalent) + socket `/var/run/docker.sock` | |
| 197 | +- `/usr/local/bin/dagger` | |
| 198 | + | |
| 199 | +Les **workspaces de pipelines** (checkouts temporaires) sont créés par le worker CI de gitrust au moment de l'exécution sous `CI_WORKSPACE_PATH` (défaut `/tmp/gitrust-ci`) — **pas par ce script**. | |
| 200 | + | |
| 201 | +--- | |
| 202 | + | |
| 203 | +## 8. Vérifications post-setup | |
| 204 | + | |
| 205 | +### Depuis la machine gitrust | |
| 206 | + | |
| 207 | +```bash | |
| 208 | +# Source le .env | |
| 209 | +set -a; source .env.production; set +a | |
| 210 | + | |
| 211 | +# 1. SSH direct (doit passer sans prompt) | |
| 212 | +ssh -p ${CI_REMOTE_SSH_PORT:-22} \ | |
| 213 | + ${CI_REMOTE_SSH_KEY:+-i $CI_REMOTE_SSH_KEY} \ | |
| 214 | + $CI_REMOTE_USER@$CI_REMOTE_HOST 'docker info && dagger version' | |
| 215 | + | |
| 216 | +# 2. Rsync round-trip (lecture/écriture sur CI_REMOTE_PATH) | |
| 217 | +echo "test" | ssh $CI_REMOTE_USER@$CI_REMOTE_HOST \ | |
| 218 | + "cat > $CI_REMOTE_PATH/.gitrust-test && cat $CI_REMOTE_PATH/.gitrust-test && rm $CI_REMOTE_PATH/.gitrust-test" | |
| 219 | +# Attendu : "test" | |
| 220 | +``` | |
| 221 | + | |
| 222 | +### Pipeline de test via gitrust | |
| 223 | + | |
| 224 | +Pousser un dépôt avec un `.gitrust-ci.yml` minimal : | |
| 225 | + | |
| 226 | +```yaml | |
| 227 | +# .gitrust-ci.yml | |
| 228 | +version: 1 | |
| 229 | +pipeline: | |
| 230 | + - name: smoke | |
| 231 | + image: alpine:3 | |
| 232 | + run: echo "CI runner OK" | |
| 233 | +``` | |
| 234 | + | |
| 235 | +Puis dans l'UI gitrust : onglet `Pipelines` → la pipeline doit passer au statut `success`. | |
| 236 | + | |
| 237 | +--- | |
| 238 | + | |
| 239 | +## 9. Mise à jour après modification du `ci-engine/` | |
| 240 | + | |
| 241 | +Le `ci-engine/` synchronisé n'est pas « live-linké » : rejouer le script après modification côté source. | |
| 242 | + | |
| 243 | +```bash | |
| 244 | +# Modifier deployment/ci-engine/profiles/*.py ou similaire | |
| 245 | +./deployment/setup-remote-ci.sh | |
| 246 | +# Les étapes 2-3 sont skip (déjà installés), seule l'étape 5 refait le rsync | |
| 247 | +``` | |
| 248 | + | |
| 249 | +`rsync -az --delete` **supprime** les fichiers côté runner qui n'existent plus localement — garantit la cohérence. | |
| 250 | + | |
| 251 | +--- | |
| 252 | + | |
| 253 | +## 10. Dépannage | |
| 254 | + | |
| 255 | +| Symptôme | Cause probable | Fix | | |
| 256 | +|---|---|---| | |
| 257 | +| `ERREUR: fichier .env introuvable` | `.env` absent ou chemin incorrect | `cp .env.example .env && $EDITOR .env` ou passer le chemin : `./setup-remote-ci.sh /path/to/.env` | | |
| 258 | +| `ERREUR: CI_REMOTE_HOST non défini` | Variable commentée ou absente | Décommenter `CI_REMOTE_HOST=...` dans le `.env` | | |
| 259 | +| `ERREUR: impossible de se connecter` | SSH bloqué, mauvais user, clé non autorisée | Tester manuellement : `ssh -v -p X user@host` ; vérifier `~/.ssh/authorized_keys` sur le runner | | |
| 260 | +| `Permission denied (publickey)` | `BatchMode=yes` interdit les prompts, clé non chargée | `ssh-add ~/.ssh/ci_runner_ed25519` ou définir `CI_REMOTE_SSH_KEY=/path/to/key` | | |
| 261 | +| `sudo: a password is required` pendant l'install Docker | User sans `NOPASSWD` sudo | Ajouter le user au `sudoers` : `ci-runner ALL=(ALL) NOPASSWD:ALL` (runner uniquement) | | |
| 262 | +| `curl: (7) Failed to connect to get.docker.com` | Réseau sortant du runner bloqué | Whitelist `get.docker.com` et `dl.dagger.io`, ou pré-installer Docker + Dagger manuellement | | |
| 263 | +| `ATTENTION: ... ci-engine introuvable` | Lancé hors du repo gitrust | `cd` dans la racine du projet avant de lancer | | |
| 264 | +| Pipeline reste `queued` indéfiniment | Worker CI ne trouve pas le runner | Vérifier `CI_EXECUTION_MODE=remote` dans `.env` gitrust + logs : `journalctl -u gitrust \| grep -i 'ci\|dagger'` | | |
| 265 | +| `dagger: command not found` au smoke test | `$PATH` du user SSH ne contient pas `/usr/local/bin` | `echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc` sur le runner, ou `CI_DAGGER_BIN=/usr/local/bin/dagger` côté gitrust | | |
| 266 | + | |
| 267 | +--- | |
| 268 | + | |
| 269 | +## 11. Sécurité | |
| 270 | + | |
| 271 | +- Le runner CI exécute du **code arbitraire** venant des dépôts hébergés. **Ne jamais** le colocaliser avec des secrets sensibles (PG prod, clés de prod). | |
| 272 | +- Isoler réseau : bloquer l'accès sortant du runner vers le LAN privé (seul l'accès Internet pour `docker pull` est nécessaire). | |
| 273 | +- Limiter `sudo NOPASSWD` au strict minimum sur le runner (idéalement : juste pour les commandes `docker` et `apt`). | |
| 274 | +- Rotation régulière de la clé SSH `CI_REMOTE_SSH_KEY`. La révoquer dans `~/.ssh/authorized_keys` côté runner en cas de suspicion. | |
| 275 | +- Le runner ne doit **pas** pouvoir se connecter en SSH à la machine gitrust (unidirectionnel). |
A
administration_manual/how-to/configurer-oauth.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Configurer OAuth | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/how-to/configurer-smtp.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Configurer SMTP | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/how-to/depanner-ci.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Dépanner la CI | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/how-to/depanner-ssh.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Dépanner SSH | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/how-to/durcir-avec-fail2ban.md
+571
-0
@@ -0,0 +1,571 @@
| 1 | +# Durcir l'instance avec Fail2ban | |
| 2 | + | |
| 3 | +Configuration complète pour protéger un déploiement gitrust exposant : | |
| 4 | + | |
| 5 | +- **sshd système** sur `:2022` (admin) | |
| 6 | +- **Nginx** en reverse proxy HTTPS `:443` + redirect `:80` + `stream :22 → :2222` | |
| 7 | +- **Gitrust** (web `127.0.0.1:4000`, SSH russh `127.0.0.1:2222`) | |
| 8 | +- **Dagger** CI runner (local, pas d'exposition réseau directe) | |
| 9 | +- **Dependency-Track** API `:8081` + UI `:8080` (si exposés) | |
| 10 | +- **PostgreSQL** `127.0.0.1:5432` (défensif au cas où le bind fuit) | |
| 11 | + | |
| 12 | +--- | |
| 13 | + | |
| 14 | +## 1. Installation | |
| 15 | + | |
| 16 | +```bash | |
| 17 | +sudo apt install -y fail2ban | |
| 18 | +sudo systemctl enable --now fail2ban | |
| 19 | +fail2ban-client --version | |
| 20 | +``` | |
| 21 | + | |
| 22 | +Vérifier que `ufw` est actif (fournit `banaction = ufw` dans la config) : | |
| 23 | + | |
| 24 | +```bash | |
| 25 | +sudo ufw status | |
| 26 | +``` | |
| 27 | + | |
| 28 | +--- | |
| 29 | + | |
| 30 | +## 2. Fichier principal `/etc/fail2ban/jail.local` | |
| 31 | + | |
| 32 | +À placer via : | |
| 33 | +```bash | |
| 34 | +sudo tee /etc/fail2ban/jail.local <<'EOF' | |
| 35 | +[Le contenu ci-dessous] | |
| 36 | +EOF | |
| 37 | +``` | |
| 38 | + | |
| 39 | +```ini | |
| 40 | +# ============================================================================= | |
| 41 | +# Défauts globaux | |
| 42 | +# ============================================================================= | |
| 43 | +[DEFAULT] | |
| 44 | +backend = systemd | |
| 45 | +bantime = 1h | |
| 46 | +findtime = 10m | |
| 47 | +maxretry = 5 | |
| 48 | + | |
| 49 | +# LAN privé et loopback jamais bannis | |
| 50 | +ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 | |
| 51 | + | |
| 52 | +# UFW | |
| 53 | +banaction = ufw | |
| 54 | +banaction_allports = ufw | |
| 55 | + | |
| 56 | +# Notifications (optionnel — nécessite un relay SMTP local) | |
| 57 | +# destemail = contact@gitrust.eu | |
| 58 | +# sender = fail2ban@votre-serveur.example.com | |
| 59 | +# action = %(action_mwl)s | |
| 60 | + | |
| 61 | +# ============================================================================= | |
| 62 | +# 1) sshd admin système — port 2022 | |
| 63 | +# ============================================================================= | |
| 64 | +[sshd] | |
| 65 | +enabled = true | |
| 66 | +port = 2022 | |
| 67 | +filter = sshd | |
| 68 | +backend = %(sshd_backend)s | |
| 69 | +logpath = %(sshd_log)s | |
| 70 | +maxretry = 3 | |
| 71 | +findtime = 10m | |
| 72 | +bantime = 1h | |
| 73 | + | |
| 74 | +# ============================================================================= | |
| 75 | +# 2) Nginx — 401/403 auth basic (si un jour activé sur /admin, /metrics, etc.) | |
| 76 | +# ============================================================================= | |
| 77 | +[nginx-http-auth] | |
| 78 | +enabled = true | |
| 79 | +port = http,https | |
| 80 | +filter = nginx-http-auth | |
| 81 | +logpath = /var/log/nginx/gitrust.error.log | |
| 82 | +maxretry = 5 | |
| 83 | + | |
| 84 | +# ============================================================================= | |
| 85 | +# 3) Nginx — scanners d'URL (wp-admin, .env, phpmyadmin, config.php, etc.) | |
| 86 | +# ============================================================================= | |
| 87 | +[nginx-botsearch] | |
| 88 | +enabled = true | |
| 89 | +port = http,https | |
| 90 | +filter = nginx-botsearch | |
| 91 | +logpath = /var/log/nginx/gitrust.access.log | |
| 92 | +maxretry = 2 | |
| 93 | +findtime = 10m | |
| 94 | +bantime = 24h | |
| 95 | + | |
| 96 | +# ============================================================================= | |
| 97 | +# 4) Nginx — bad user-agents (scanners agressifs, masscan, nikto, etc.) | |
| 98 | +# ============================================================================= | |
| 99 | +[nginx-badbots] | |
| 100 | +enabled = true | |
| 101 | +port = http,https | |
| 102 | +filter = nginx-badbots | |
| 103 | +logpath = /var/log/nginx/gitrust.access.log | |
| 104 | +maxretry = 2 | |
| 105 | +bantime = 24h | |
| 106 | + | |
| 107 | +# ============================================================================= | |
| 108 | +# 5) Nginx — dépassement limit_req (voir section 4 — zones HTTPS) | |
| 109 | +# ============================================================================= | |
| 110 | +[nginx-limit-req] | |
| 111 | +enabled = true | |
| 112 | +port = http,https | |
| 113 | +filter = nginx-limit-req | |
| 114 | +logpath = /var/log/nginx/gitrust.error.log | |
| 115 | +maxretry = 10 | |
| 116 | +findtime = 5m | |
| 117 | +bantime = 1h | |
| 118 | + | |
| 119 | +# ============================================================================= | |
| 120 | +# 6) Gitrust — brute force login (formulaire + API JWT) | |
| 121 | +# ============================================================================= | |
| 122 | +[gitrust-login] | |
| 123 | +enabled = true | |
| 124 | +port = http,https | |
| 125 | +filter = gitrust-login | |
| 126 | +logpath = /var/log/nginx/gitrust.access.log | |
| 127 | +maxretry = 5 | |
| 128 | +findtime = 10m | |
| 129 | +bantime = 1h | |
| 130 | + | |
| 131 | +# ============================================================================= | |
| 132 | +# 7) Gitrust — abus API (tokens personnels leaked, scrapers) | |
| 133 | +# ============================================================================= | |
| 134 | +[gitrust-api-abuse] | |
| 135 | +enabled = true | |
| 136 | +port = http,https | |
| 137 | +filter = gitrust-api-abuse | |
| 138 | +logpath = /var/log/nginx/gitrust.access.log | |
| 139 | +maxretry = 30 | |
| 140 | +findtime = 1m | |
| 141 | +bantime = 2h | |
| 142 | + | |
| 143 | +# ============================================================================= | |
| 144 | +# 8) Gitrust SSH (russh) — brute force clé publique | |
| 145 | +# ============================================================================= | |
| 146 | +[gitrust-ssh] | |
| 147 | +enabled = true | |
| 148 | +port = 22,2222 | |
| 149 | +filter = gitrust-ssh | |
| 150 | +backend = systemd | |
| 151 | +journalmatch = _SYSTEMD_UNIT=gitrust.service | |
| 152 | +maxretry = 5 | |
| 153 | +findtime = 10m | |
| 154 | +bantime = 1h | |
| 155 | + | |
| 156 | +# ============================================================================= | |
| 157 | +# 9) Gitrust import worker — tokens invalides sur clone de dépôts externes | |
| 158 | +# ============================================================================= | |
| 159 | +[gitrust-import] | |
| 160 | +enabled = true | |
| 161 | +port = http,https | |
| 162 | +filter = gitrust-import | |
| 163 | +backend = systemd | |
| 164 | +journalmatch = _SYSTEMD_UNIT=gitrust.service | |
| 165 | +maxretry = 3 | |
| 166 | +findtime = 5m | |
| 167 | +bantime = 30m | |
| 168 | + | |
| 169 | +# ============================================================================= | |
| 170 | +# 10) Dependency-Track UI — brute force login (port 8080) | |
| 171 | +# ============================================================================= | |
| 172 | +# Activer UNIQUEMENT si DTrack est exposé publiquement. | |
| 173 | +# Si DTrack est sur réseau privé/loopback, laisser enabled=false. | |
| 174 | +[dtrack-login] | |
| 175 | +enabled = false | |
| 176 | +port = 8080,http,https | |
| 177 | +filter = dtrack-login | |
| 178 | +logpath = /var/log/nginx/dtrack.access.log | |
| 179 | +maxretry = 5 | |
| 180 | +findtime = 10m | |
| 181 | +bantime = 2h | |
| 182 | + | |
| 183 | +# ============================================================================= | |
| 184 | +# 11) Dependency-Track API — abus clé API (port 8081) | |
| 185 | +# ============================================================================= | |
| 186 | +[dtrack-api] | |
| 187 | +enabled = false | |
| 188 | +port = 8081,http,https | |
| 189 | +filter = dtrack-api | |
| 190 | +logpath = /var/log/nginx/dtrack.access.log | |
| 191 | +maxretry = 10 | |
| 192 | +findtime = 5m | |
| 193 | +bantime = 1h | |
| 194 | + | |
| 195 | +# ============================================================================= | |
| 196 | +# 12) PostgreSQL — tentatives de connexion invalides (défensif) | |
| 197 | +# ============================================================================= | |
| 198 | +# PG doit binder 127.0.0.1 uniquement. Ce jail protège si la config fuit. | |
| 199 | +[postgresql] | |
| 200 | +enabled = true | |
| 201 | +port = 5432 | |
| 202 | +filter = postgresql | |
| 203 | +backend = systemd | |
| 204 | +journalmatch = _SYSTEMD_UNIT=postgresql.service + _SYSTEMD_UNIT=docker.service | |
| 205 | +maxretry = 5 | |
| 206 | +findtime = 10m | |
| 207 | +bantime = 1h | |
| 208 | + | |
| 209 | +# ============================================================================= | |
| 210 | +# 13) Récidive — ban long pour IPs bannies 3x en 24h, tous jails confondus | |
| 211 | +# ============================================================================= | |
| 212 | +[recidive] | |
| 213 | +enabled = true | |
| 214 | +logpath = /var/log/fail2ban.log | |
| 215 | +banaction = %(banaction_allports)s | |
| 216 | +bantime = 1w | |
| 217 | +findtime = 1d | |
| 218 | +maxretry = 3 | |
| 219 | +``` | |
| 220 | + | |
| 221 | +--- | |
| 222 | + | |
| 223 | +## 3. Filtres personnalisés | |
| 224 | + | |
| 225 | +À placer dans `/etc/fail2ban/filter.d/` (un fichier par jail custom). | |
| 226 | + | |
| 227 | +### 3.1 `gitrust-login.conf` | |
| 228 | + | |
| 229 | +```bash | |
| 230 | +sudo tee /etc/fail2ban/filter.d/gitrust-login.conf <<'EOF' | |
| 231 | +[Definition] | |
| 232 | +# POST sur /login ou endpoints JWT avec code 4xx (401/403/422/429) | |
| 233 | +failregex = ^<HOST> .* "POST /(login|api/v1/auth/login|api/v1/auth/refresh|api/v1/auth/2fa)[^"]*" (401|403|422|429) .*$ | |
| 234 | +ignoreregex = | |
| 235 | +EOF | |
| 236 | +``` | |
| 237 | + | |
| 238 | +### 3.2 `gitrust-api-abuse.conf` | |
| 239 | + | |
| 240 | +```bash | |
| 241 | +sudo tee /etc/fail2ban/filter.d/gitrust-api-abuse.conf <<'EOF' | |
| 242 | +[Definition] | |
| 243 | +# Abus API : 401/403 répétés sur /api/v1/* (hors auth déjà couvert par gitrust-login) | |
| 244 | +failregex = ^<HOST> .* "(GET|POST|PUT|DELETE|PATCH) /api/v1/(?!auth/)[^"]*" (401|403) .*$ | |
| 245 | +ignoreregex = | |
| 246 | +EOF | |
| 247 | +``` | |
| 248 | + | |
| 249 | +### 3.3 `gitrust-ssh.conf` | |
| 250 | + | |
| 251 | +```bash | |
| 252 | +sudo tee /etc/fail2ban/filter.d/gitrust-ssh.conf <<'EOF' | |
| 253 | +[Definition] | |
| 254 | +# russh / gitrust-ssh : échecs d'authentification | |
| 255 | +# Regex à raffiner après observation des logs réels via : | |
| 256 | +# sudo fail2ban-regex <(journalctl -u gitrust --no-pager -n 2000) \ | |
| 257 | +# /etc/fail2ban/filter.d/gitrust-ssh.conf | |
| 258 | +failregex = ^.*ssh.*auth(entication)? (failed|failure).*from <HOST>.*$ | |
| 259 | + ^.*[Rr]ejected.*(public[_ ]?key|password).*from <HOST>.*$ | |
| 260 | + ^.*no matching (ssh|public) key.*from <HOST>.*$ | |
| 261 | + ^.*unknown user.*from <HOST>.*$ | |
| 262 | + ^.*gitrust.*auth.*refused.*<HOST>.*$ | |
| 263 | +ignoreregex = | |
| 264 | +EOF | |
| 265 | +``` | |
| 266 | + | |
| 267 | +### 3.4 `gitrust-import.conf` | |
| 268 | + | |
| 269 | +```bash | |
| 270 | +sudo tee /etc/fail2ban/filter.d/gitrust-import.conf <<'EOF' | |
| 271 | +[Definition] | |
| 272 | +# Import worker : tokens OAuth/GitHub invalides sur clone de dépôts externes | |
| 273 | +failregex = ^.*import.*authentication failed.*from <HOST>.*$ | |
| 274 | + ^.*import.*invalid (token|credentials).*from <HOST>.*$ | |
| 275 | + ^.*import.*clone failed.*401.*from <HOST>.*$ | |
| 276 | +ignoreregex = | |
| 277 | +EOF | |
| 278 | +``` | |
| 279 | + | |
| 280 | +### 3.5 `dtrack-login.conf` (si DTrack exposé) | |
| 281 | + | |
| 282 | +```bash | |
| 283 | +sudo tee /etc/fail2ban/filter.d/dtrack-login.conf <<'EOF' | |
| 284 | +[Definition] | |
| 285 | +# Dependency-Track : brute force du POST /api/v1/user/login | |
| 286 | +failregex = ^<HOST> .* "POST /api/v1/user/login[^"]*" (401|403) .*$ | |
| 287 | + ^<HOST> .* "POST /api/v1/user/forceChangePassword[^"]*" (401|403) .*$ | |
| 288 | +ignoreregex = | |
| 289 | +EOF | |
| 290 | +``` | |
| 291 | + | |
| 292 | +### 3.6 `dtrack-api.conf` (si DTrack exposé) | |
| 293 | + | |
| 294 | +```bash | |
| 295 | +sudo tee /etc/fail2ban/filter.d/dtrack-api.conf <<'EOF' | |
| 296 | +[Definition] | |
| 297 | +# Dependency-Track API : abus de clé API ou requêtes non authentifiées | |
| 298 | +failregex = ^<HOST> .* "[^"]+ /api/v1/[^"]*" 401 .*$ | |
| 299 | + ^<HOST> .* "[^"]+ /api/v1/[^"]*" 403 .*$ | |
| 300 | +ignoreregex = | |
| 301 | +EOF | |
| 302 | +``` | |
| 303 | + | |
| 304 | +### 3.7 `postgresql.conf` (créer si absent) | |
| 305 | + | |
| 306 | +```bash | |
| 307 | +if [ ! -f /etc/fail2ban/filter.d/postgresql.conf ]; then | |
| 308 | +sudo tee /etc/fail2ban/filter.d/postgresql.conf <<'EOF' | |
| 309 | +[Definition] | |
| 310 | +failregex = ^.*authentication failed for user.*host=<HOST>.*$ | |
| 311 | + ^.*FATAL:.*password authentication failed.*<HOST>.*$ | |
| 312 | + ^.*no pg_hba\.conf entry for host "<HOST>".*$ | |
| 313 | +ignoreregex = | |
| 314 | +EOF | |
| 315 | +fi | |
| 316 | +``` | |
| 317 | + | |
| 318 | +### 3.8 `nginx-limit-req.conf` (créer si absent sur votre distro) | |
| 319 | + | |
| 320 | +```bash | |
| 321 | +if [ ! -f /etc/fail2ban/filter.d/nginx-limit-req.conf ]; then | |
| 322 | +sudo tee /etc/fail2ban/filter.d/nginx-limit-req.conf <<'EOF' | |
| 323 | +[Definition] | |
| 324 | +failregex = ^.*limiting requests, excess: .* by zone .*, client: <HOST>.*$ | |
| 325 | +ignoreregex = | |
| 326 | +EOF | |
| 327 | +fi | |
| 328 | +``` | |
| 329 | + | |
| 330 | +### 3.9 `nginx-badbots.conf` — OBLIGATOIRE (pas fourni par Debian/Ubuntu) | |
| 331 | + | |
| 332 | +Le paquet `fail2ban` Debian/Ubuntu fournit `apache-badbots.conf` mais PAS `nginx-badbots.conf`. Sans ce filter, `fail2ban-client reload` affiche : | |
| 333 | + | |
| 334 | +``` | |
| 335 | +Found no accessible config files for 'filter.d/nginx-badbots' under /etc/fail2ban | |
| 336 | +``` | |
| 337 | + | |
| 338 | +Le filter ci-dessous réutilise la liste de bad user-agents de `apache-badbots` avec un `failregex` adapté au format `combined` de nginx : | |
| 339 | + | |
| 340 | +```bash | |
| 341 | +sudo tee /etc/fail2ban/filter.d/nginx-badbots.conf <<'EOF' | |
| 342 | +[Definition] | |
| 343 | +badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider | |
| 344 | +badbots = Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|ContentSmartz|DataCha0s/2\.0|DBrowse 1\.4b|DBrowse 1\.4d|Demo Bot DOT 16b|Demo Bot Z 16b|DSurf15a 01|DSurf15a 71|DSurf15a 81|DSurf15a VA|EBrowse 1\.4b|Educate Search VxB|EmailSiphon|EmailSpider|EmailWolf 1\.00|ExtractorPro|Franklin Locator 1\.8|Full Web Bot 0416B|Guestbook Auto Submitter|ISC Systems iRc Search 2\.1|LMQueueBot/0\.2|LWP\:\:Simple/5\.803|Microsoft URL Control - 6\.00\.8xxx|Missigua Locator 1\.9|Mozilla/4\.0 efp@gmx\.net|Nsauditor/1\.x|PBrowse 1\.4b|PEval 1\.4b|Poirot|psycheclone|sogou spider|sohu agent|VadixBot|WebVulnCrawl\.unknown/1\.0 libwww-perl/5\.803|Wells Search II|WEP Search 00 | |
| 345 | + | |
| 346 | +failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$ | |
| 347 | +ignoreregex = | |
| 348 | + | |
| 349 | +datepattern = ^[^\[]*\[({DATE}) | |
| 350 | + {^LN-BEG} | |
| 351 | +EOF | |
| 352 | +``` | |
| 353 | + | |
| 354 | +**Alternative** : si vous ne voulez pas maintenir la liste, simplement désactiver le jail (`enabled = false` dans le `[nginx-badbots]`) — la combinaison `nginx-botsearch` + `nginx-limit-req` + `gitrust-api-abuse` couvre déjà l'essentiel. | |
| 355 | + | |
| 356 | +--- | |
| 357 | + | |
| 358 | +## 4. Rate limiting côté Nginx (requis par `nginx-limit-req`) | |
| 359 | + | |
| 360 | +### 4.1 Déclarer les zones globales | |
| 361 | + | |
| 362 | +```bash | |
| 363 | +sudo tee /etc/nginx/conf.d/gitrust-limit.conf <<'EOF' | |
| 364 | +# Zones de rate limiting gitrust | |
| 365 | +limit_req_zone $binary_remote_addr zone=gitrust_login:10m rate=1r/s; | |
| 366 | +limit_req_zone $binary_remote_addr zone=gitrust_api:10m rate=10r/s; | |
| 367 | +limit_req_zone $binary_remote_addr zone=gitrust_git:10m rate=30r/s; | |
| 368 | +EOF | |
| 369 | +``` | |
| 370 | + | |
| 371 | +### 4.2 Ajouter les `location` dans `/etc/nginx/sites-available/gitrust` | |
| 372 | + | |
| 373 | +Dans le bloc `server { listen 443 ssl; ... }`, **avant** `location /` finale : | |
| 374 | + | |
| 375 | +```nginx | |
| 376 | +# Protection brute force login (1 req/s par IP, burst 5) | |
| 377 | +location ~ ^/(login|api/v1/auth/) { | |
| 378 | + limit_req zone=gitrust_login burst=5 nodelay; | |
| 379 | + proxy_pass http://gitrust_backend; | |
| 380 | + proxy_set_header Host $host; | |
| 381 | + proxy_set_header X-Real-IP $remote_addr; | |
| 382 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 383 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 384 | +} | |
| 385 | + | |
| 386 | +# Protection API (10 req/s par IP, burst 20) | |
| 387 | +location ^~ /api/v1/ { | |
| 388 | + limit_req zone=gitrust_api burst=20 nodelay; | |
| 389 | + proxy_pass http://gitrust_backend; | |
| 390 | + proxy_set_header Host $host; | |
| 391 | + proxy_set_header X-Real-IP $remote_addr; | |
| 392 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 393 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 394 | +} | |
| 395 | + | |
| 396 | +# Protection Git smart HTTP (30 req/s — clone/push légitime peut être verbeux) | |
| 397 | +location ~ ^/[^/]+/[^/]+\.git/ { | |
| 398 | + limit_req zone=gitrust_git burst=50 nodelay; | |
| 399 | + proxy_pass http://gitrust_backend; | |
| 400 | + proxy_http_version 1.1; | |
| 401 | + proxy_set_header Host $host; | |
| 402 | + proxy_set_header X-Real-IP $remote_addr; | |
| 403 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 404 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 405 | + proxy_buffering off; | |
| 406 | + proxy_request_buffering off; | |
| 407 | + client_max_body_size 2G; | |
| 408 | +} | |
| 409 | +``` | |
| 410 | + | |
| 411 | +### 4.3 Reload | |
| 412 | + | |
| 413 | +```bash | |
| 414 | +sudo nginx -t && sudo systemctl reload nginx | |
| 415 | +``` | |
| 416 | + | |
| 417 | +--- | |
| 418 | + | |
| 419 | +## 5. Démarrage et validation | |
| 420 | + | |
| 421 | +```bash | |
| 422 | +sudo systemctl restart fail2ban | |
| 423 | + | |
| 424 | +# Liste des jails actifs | |
| 425 | +sudo fail2ban-client status | |
| 426 | +# Attendu : | |
| 427 | +# sshd, nginx-http-auth, nginx-botsearch, nginx-badbots, nginx-limit-req, | |
| 428 | +# gitrust-login, gitrust-api-abuse, gitrust-ssh, gitrust-import, | |
| 429 | +# postgresql, recidive | |
| 430 | +# (+ dtrack-login, dtrack-api si activées) | |
| 431 | + | |
| 432 | +# Stats par jail | |
| 433 | +sudo fail2ban-client status gitrust-login | |
| 434 | +sudo fail2ban-client status sshd | |
| 435 | +``` | |
| 436 | + | |
| 437 | +### Valider chaque filtre custom | |
| 438 | + | |
| 439 | +```bash | |
| 440 | +# 1. gitrust-login contre l'access log nginx | |
| 441 | +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \ | |
| 442 | + /etc/fail2ban/filter.d/gitrust-login.conf | |
| 443 | + | |
| 444 | +# 2. gitrust-api-abuse | |
| 445 | +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \ | |
| 446 | + /etc/fail2ban/filter.d/gitrust-api-abuse.conf | |
| 447 | + | |
| 448 | +# 3. gitrust-ssh contre journald | |
| 449 | +journalctl -u gitrust --no-pager -n 5000 > /tmp/gitrust.log | |
| 450 | +sudo fail2ban-regex /tmp/gitrust.log \ | |
| 451 | + /etc/fail2ban/filter.d/gitrust-ssh.conf | |
| 452 | +rm /tmp/gitrust.log | |
| 453 | + | |
| 454 | +# 4. postgresql | |
| 455 | +journalctl -u docker --no-pager -n 5000 | grep -i postgres > /tmp/pg.log | |
| 456 | +sudo fail2ban-regex /tmp/pg.log \ | |
| 457 | + /etc/fail2ban/filter.d/postgresql.conf | |
| 458 | +``` | |
| 459 | + | |
| 460 | +`0 failregex found` = regex à ajuster après observation des logs réels de chaque service. | |
| 461 | + | |
| 462 | +### Test de bannissement | |
| 463 | + | |
| 464 | +```bash | |
| 465 | +# Depuis un host HORS LAN (sinon ignoreip s'applique) | |
| 466 | +for i in $(seq 1 10); do | |
| 467 | + curl -sk -o /dev/null -w "%{http_code}\n" \ | |
| 468 | + -X POST https://<votre-domaine>/login \ | |
| 469 | + -d 'username=admin&password=wrong' | |
| 470 | +done | |
| 471 | + | |
| 472 | +# Vérifier le ban | |
| 473 | +ssh gitrust-host 'sudo fail2ban-client status gitrust-login' | |
| 474 | +# Currently banned : 1 — Banned IP list : <IP test> | |
| 475 | + | |
| 476 | +# Débannir manuellement | |
| 477 | +ssh gitrust-host 'sudo fail2ban-client unban <IP>' | |
| 478 | +``` | |
| 479 | + | |
| 480 | +--- | |
| 481 | + | |
| 482 | +## 6. Monitoring | |
| 483 | + | |
| 484 | +```bash | |
| 485 | +# Logs fail2ban temps réel | |
| 486 | +sudo tail -f /var/log/fail2ban.log | |
| 487 | + | |
| 488 | +# Toutes les IPs bannies, tous jails confondus | |
| 489 | +sudo fail2ban-client banned | |
| 490 | + | |
| 491 | +# Stats détaillées d'un jail | |
| 492 | +sudo fail2ban-client status gitrust-ssh | |
| 493 | +# Currently failed : 2 | |
| 494 | +# Total failed : 47 | |
| 495 | +# Currently banned : 1 | |
| 496 | +# Total banned : 12 | |
| 497 | +# Banned IP list : 203.0.113.42 | |
| 498 | + | |
| 499 | +sudo grep "Ban " /var/log/fail2ban.log | tail -20 | |
| 500 | +``` | |
| 501 | + | |
| 502 | +--- | |
| 503 | + | |
| 504 | +## 7. Matrice récapitulative | |
| 505 | + | |
| 506 | +| # | Jail | Port(s) | Source logs | Max retry | Ban time | Surface protégée | | |
| 507 | +|---|------|---------|-------------|-----------|----------|------------------| | |
| 508 | +| 1 | `sshd` | 2022 | journald sshd | 3 | 1h | SSH admin | | |
| 509 | +| 2 | `nginx-http-auth` | 80,443 | nginx error | 5 | 1h | Basic auth (admin futur) | | |
| 510 | +| 3 | `nginx-botsearch` | 80,443 | nginx access | 2 | 24h | Scanners WP/PHP | | |
| 511 | +| 4 | `nginx-badbots` | 80,443 | nginx access | 2 | 24h | User-agents malveillants | | |
| 512 | +| 5 | `nginx-limit-req` | 80,443 | nginx error | 10 | 1h | Flood global | | |
| 513 | +| 6 | `gitrust-login` | 80,443 | nginx access | 5 | 1h | Brute force login UI + API | | |
| 514 | +| 7 | `gitrust-api-abuse` | 80,443 | nginx access | 30 | 2h | Scrapers API (tokens fuités) | | |
| 515 | +| 8 | `gitrust-ssh` | 22,2222 | journald gitrust | 5 | 1h | Brute force clé SSH Git | | |
| 516 | +| 9 | `gitrust-import` | 80,443 | journald gitrust | 3 | 30m | Brute force PAT/OAuth import | | |
| 517 | +| 10 | `dtrack-login` | 8080 | nginx access | 5 | 2h | Brute force UI Dep-Track | | |
| 518 | +| 11 | `dtrack-api` | 8081 | nginx access | 10 | 1h | Abus clé API Dep-Track | | |
| 519 | +| 12 | `postgresql` | 5432 | journald | 5 | 1h | Défense en profondeur PG | | |
| 520 | +| 13 | `recidive` | all | fail2ban.log | 3 | 1w | Méta-ban 3×/24h | | |
| 521 | + | |
| 522 | +**Ordre de déclenchement typique** : brute force → jail spécifique (ban 1h) → si récidive 3x → recidive (ban 1 semaine, tous ports). | |
| 523 | + | |
| 524 | +--- | |
| 525 | + | |
| 526 | +## 8. Notes spécifiques à la stack gitrust | |
| 527 | + | |
| 528 | +### 8.1 Dagger (CI) | |
| 529 | + | |
| 530 | +Dagger s'exécute **localement** sur la machine gitrust (ou un runner distant — voir `administration_manual/how-to/configurer-ci-runner-remote.md`). **Aucun port réseau ouvert** → pas de jail dédié. | |
| 531 | + | |
| 532 | +### 8.2 Dependency-Track | |
| 533 | + | |
| 534 | +Si DTrack est déployé sur le même serveur et **exposé**, activer les jails 10 et 11 en mettant `enabled = true` et en pointant `logpath` vers les logs nginx du vhost DTrack. | |
| 535 | + | |
| 536 | +Si DTrack est **interne** (VPN, réseau privé), laisser `enabled = false` — le firewall suffit. | |
| 537 | + | |
| 538 | +Config DTrack recommandée : | |
| 539 | +- Bind sur `127.0.0.1` via `dtrack.url.base=http://127.0.0.1:8080` | |
| 540 | + | |
| 541 | +### 8.3 PostgreSQL | |
| 542 | + | |
| 543 | +Le jail `postgresql` est **défensif**. PG doit rester bindé sur `127.0.0.1:5432` via Docker. Vérifier : | |
| 544 | + | |
| 545 | +```bash | |
| 546 | +sudo ss -tlnp | grep 5432 | |
| 547 | +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0:5432 | |
| 548 | +``` | |
| 549 | + | |
| 550 | +### 8.4 Notifications | |
| 551 | + | |
| 552 | +Pour recevoir un mail à chaque ban : | |
| 553 | + | |
| 554 | +1. Installer un relay SMTP local : `sudo apt install msmtp-mta` | |
| 555 | +2. Configurer `/etc/msmtprc` avec un compte SMTP | |
| 556 | +3. Décommenter dans `[DEFAULT]` : | |
| 557 | + ```ini | |
| 558 | + destemail = contact@gitrust.eu | |
| 559 | + sender = fail2ban@votre-serveur.example.com | |
| 560 | + action = %(action_mwl)s | |
| 561 | + ``` | |
| 562 | +4. `sudo systemctl restart fail2ban` | |
| 563 | + | |
| 564 | +--- | |
| 565 | + | |
| 566 | +## 9. Limites et évolutions | |
| 567 | + | |
| 568 | +- **IPv6** : toutes les regex utilisent `<HOST>` qui matche IPv4 ET IPv6. Vérifier que UFW est configuré pour v6 également. | |
| 569 | +- **CDN/Cloudflare devant** : si un CDN est ajouté, `$remote_addr` côté Nginx sera l'IP du CDN — il faut récupérer la vraie IP via `X-Forwarded-For` et propager au logging Nginx. Changer `failregex` en conséquence. Sinon les jails banniront le CDN. | |
| 570 | +- **Docker/Podman** : si gitrust passe en conteneur, les logs de `gitrust.service` deviennent `docker.service` ou `podman.service` → mettre à jour `journalmatch` dans les jails 8 et 9. | |
| 571 | +- **GeoIP** : pour bloquer des pays entiers en amont, ajouter `geo $blocked_country` dans Nginx (module `ngx_http_geoip2_module`) — complémentaire à fail2ban. |
A
administration_manual/how-to/forcer-2fa-globalement.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Forcer le 2FA sur toute l'instance | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/how-to/gerer-utilisateurs-admin.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Gérer les utilisateurs (panel /admin) | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/how-to/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Guides pratiques | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/how-to/integrer-dependency-track.md
+351
-0
@@ -0,0 +1,351 @@
| 1 | +# Intégrer la CI et Dependency-Track | |
| 2 | + | |
| 3 | +Ce document explique comment activer et configurer les deux fonctionnalités de qualité/sécurité de gitrust : | |
| 4 | + | |
| 5 | +1. **La CI intégrée** (Dagger) qui exécute les builds/tests/lints à chaque push. | |
| 6 | +2. **Le dependency tracker** (Syft + Dependency-Track) qui scanne les composants du code à chaque push et détecte les vulnérabilités connues. | |
| 7 | + | |
| 8 | +Ces deux systèmes sont **indépendants** : on peut activer l'un sans l'autre. | |
| 9 | + | |
| 10 | +--- | |
| 11 | + | |
| 12 | +## 1. Architecture générale | |
| 13 | + | |
| 14 | +```mermaid | |
| 15 | +flowchart TB | |
| 16 | + subgraph Client | |
| 17 | + Dev[Développeur] | |
| 18 | + end | |
| 19 | + subgraph Gitrust[Instance Gitrust] | |
| 20 | + HTTP[:4000 HTTP/Git] | |
| 21 | + SSH[:2222 SSH/Git] | |
| 22 | + Worker[CiWorker<br/>tokio task] | |
| 23 | + Sbom[SbomService<br/>tokio spawn] | |
| 24 | + DB[(PostgreSQL)] | |
| 25 | + end | |
| 26 | + subgraph Builder[Serveur de build] | |
| 27 | + Docker[Docker/Podman] | |
| 28 | + Dagger[Dagger CLI] | |
| 29 | + CiEngine[/opt/gitrust-ci/ci-engine/] | |
| 30 | + end | |
| 31 | + subgraph Security[Stack sécurité optionnelle] | |
| 32 | + Syft[syft] | |
| 33 | + Dtrack[Dependency-Track] | |
| 34 | + end | |
| 35 | + | |
| 36 | + Dev -->|git push| HTTP | |
| 37 | + Dev -->|git push| SSH | |
| 38 | + HTTP --> Worker | |
| 39 | + SSH --> Worker | |
| 40 | + HTTP --> Sbom | |
| 41 | + SSH --> Sbom | |
| 42 | + Worker -->|SSH + rsync| Builder | |
| 43 | + Builder -->|logs streamés| Worker | |
| 44 | + Worker --> DB | |
| 45 | + Sbom -->|scan workspace| Syft | |
| 46 | + Sbom -->|PUT BOM| Dtrack | |
| 47 | + Dtrack -->|findings| Sbom | |
| 48 | + Sbom --> DB | |
| 49 | +``` | |
| 50 | + | |
| 51 | +Trois composants fonctionnent en parallèle : | |
| 52 | + | |
| 53 | +- **CiWorker** : tâche Tokio qui consomme des `CiTask` depuis un channel `mpsc`, limitée par un `Semaphore` à `CI_MAX_CONCURRENT` pipelines simultanés. | |
| 54 | +- **SbomService** : exécuté dans un `tokio::spawn` après chaque push, totalement découplé du CI. | |
| 55 | +- **Serveur de build** : machine distante (ou `localhost`) qui exécute Docker + Dagger. Gitrust y envoie le workspace par rsync et lance Dagger par SSH. | |
| 56 | + | |
| 57 | +--- | |
| 58 | + | |
| 59 | +## 2. Mettre en place la CI | |
| 60 | + | |
| 61 | +### 2.1 Pré-requis serveur de build | |
| 62 | + | |
| 63 | +Le serveur de build peut être **la même machine que Gitrust** (`CI_REMOTE_HOST=localhost`) ou une machine dédiée. Il doit disposer de : | |
| 64 | + | |
| 65 | +| Outil | Rôle | | |
| 66 | +|-------|------| | |
| 67 | +| Docker ou Podman | Containers Dagger | | |
| 68 | +| Dagger CLI | Moteur d'exécution | | |
| 69 | +| SSH (accès sortant depuis Gitrust) | Transport | | |
| 70 | +| rsync | Copie du workspace | | |
| 71 | +| git, tar | Extraction du tree du commit | | |
| 72 | + | |
| 73 | +Installation automatique recommandée : | |
| 74 | + | |
| 75 | +```bash | |
| 76 | +# Depuis la machine Gitrust (l'utilisateur doit pouvoir SSH vers le builder) | |
| 77 | +./deployment/setup-remote-ci.sh .env | |
| 78 | +``` | |
| 79 | + | |
| 80 | +Le script exécute : | |
| 81 | + | |
| 82 | +1. Vérification de la connectivité SSH | |
| 83 | +2. Installation de Docker si absent | |
| 84 | +3. Installation de Dagger CLI si absent | |
| 85 | +4. Création du répertoire de travail distant | |
| 86 | +5. Synchronisation du `ci-engine` | |
| 87 | +6. Smoke test (versions) | |
| 88 | + | |
| 89 | +### 2.2 Configuration Gitrust (fichier .env) | |
| 90 | + | |
| 91 | +Ajouter au `.env` de Gitrust : | |
| 92 | + | |
| 93 | +```env | |
| 94 | +# Activer globalement le CI | |
| 95 | +CI_ENABLED=true | |
| 96 | + | |
| 97 | +# Chemin du ci-engine sur le serveur de build | |
| 98 | +CI_ENGINE_PATH=/opt/gitrust-ci/ci-engine | |
| 99 | + | |
| 100 | +# Limite de parallélisme | |
| 101 | +CI_MAX_CONCURRENT=4 | |
| 102 | +CI_DEFAULT_TIMEOUT=3600 | |
| 103 | +CI_WORKSPACE_PATH=/tmp/gitrust-ci | |
| 104 | + | |
| 105 | +# Serveur de build (mettre localhost pour "même machine") | |
| 106 | +CI_REMOTE_HOST=builder.example.com | |
| 107 | +CI_REMOTE_USER=ci-runner | |
| 108 | +CI_REMOTE_PATH=/opt/gitrust-ci | |
| 109 | +CI_REMOTE_SSH_PORT=22 | |
| 110 | +# CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/id_ed25519 # si pas ssh-agent | |
| 111 | +``` | |
| 112 | + | |
| 113 | +Redémarrer Gitrust : `systemctl restart gitrust` (ou `cargo run --release`). | |
| 114 | + | |
| 115 | +### 2.3 Activer la CI sur un dépôt | |
| 116 | + | |
| 117 | +Dans l'interface web : aller sur le dépôt → **Settings** → **CI**. | |
| 118 | + | |
| 119 | +- Cocher **CI enabled** (requis — par défaut `false`) | |
| 120 | +- Cocher **Trigger on push** (active l'exécution à chaque push) | |
| 121 | +- Optionnel : **Auto-cancel** (annule les pipelines en cours quand un nouveau démarre) | |
| 122 | +- Optionnel : **Allowed branches** (ex. `main,develop` — vide = toutes) | |
| 123 | + | |
| 124 | +### 2.4 Choisir le mode : Easy ou Power | |
| 125 | + | |
| 126 | +```mermaid | |
| 127 | +flowchart LR | |
| 128 | + Push[Commit<br/>poussé] --> Tree{Arbre du<br/>commit contient ?} | |
| 129 | + Tree -->|.dagger/| Power[Mode Power<br/>dagger call -m .dagger/ ci] | |
| 130 | + Tree -->|.gitrust-ci.yml| Easy[Mode Easy<br/>dagger call -m ci-engine test-pr] | |
| 131 | + Tree -->|rien| None[Pas de pipeline] | |
| 132 | + Power --> Run[Exécution<br/>distante SSH] | |
| 133 | + Easy --> Run | |
| 134 | +``` | |
| 135 | + | |
| 136 | +#### Mode Easy (recommandé pour commencer) | |
| 137 | + | |
| 138 | +Créer `.gitrust-ci.yml` à la racine du dépôt : | |
| 139 | + | |
| 140 | +```yaml | |
| 141 | +# Raccourci : charge un profil pré-configuré (rust | python | node) | |
| 142 | +language: rust | |
| 143 | + | |
| 144 | +build: | |
| 145 | + command: "cargo build --release" | |
| 146 | + | |
| 147 | +checks: | |
| 148 | + lint: "cargo clippy -- -D warnings" | |
| 149 | + format: "cargo fmt -- --check" | |
| 150 | + | |
| 151 | +tests: | |
| 152 | + command: "cargo test --release" | |
| 153 | +``` | |
| 154 | + | |
| 155 | +Les profils disponibles se trouvent dans `deployment/ci-engine/profiles/` (rust.yaml, python.yaml, node.yaml) dans le dépôt source. | |
| 156 | + | |
| 157 | +#### Mode Power | |
| 158 | + | |
| 159 | +Pour les utilisateurs avancés, créer un module Dagger complet dans `.dagger/` : | |
| 160 | + | |
| 161 | +``` | |
| 162 | +.dagger/ | |
| 163 | +├── dagger.json | |
| 164 | +├── src/ | |
| 165 | +│ └── main.py # ou Go/TypeScript | |
| 166 | +``` | |
| 167 | + | |
| 168 | +La fonction `ci` du module est appelée directement : | |
| 169 | + | |
| 170 | +```bash | |
| 171 | +dagger call -m .dagger/ ci | |
| 172 | +``` | |
| 173 | + | |
| 174 | +Avantage : accès au Daggerverse, composition, tests de pipeline. Voir la [documentation Dagger](https://docs.dagger.io/). | |
| 175 | + | |
| 176 | +### 2.5 Suivi d'un pipeline | |
| 177 | + | |
| 178 | +Après un `git push`, une entrée apparaît dans l'onglet **CI** du dépôt : | |
| 179 | + | |
| 180 | +```mermaid | |
| 181 | +stateDiagram-v2 | |
| 182 | + [*] --> Pending: create_pipeline | |
| 183 | + Pending --> Running: worker picks CiTask | |
| 184 | + Running --> Success: exit 0 | |
| 185 | + Running --> Failure: exit != 0 | |
| 186 | + Running --> Cancelled: timeout / auto_cancel / manuel | |
| 187 | + Success --> [*] | |
| 188 | + Failure --> [*] | |
| 189 | + Cancelled --> [*] | |
| 190 | +``` | |
| 191 | + | |
| 192 | +Les logs stdout/stderr sont streamés ligne par ligne dans la table `ci_logs` et visibles en direct dans l'UI. En cas d'échec, une notification est envoyée au propriétaire du dépôt. | |
| 193 | + | |
| 194 | +--- | |
| 195 | + | |
| 196 | +## 3. Mettre en place le Dependency Tracker | |
| 197 | + | |
| 198 | +Cette partie est totalement indépendante de la CI. Elle scanne le code poussé et produit un SBOM CycloneDX, puis (optionnellement) l'envoie à Dependency-Track pour une analyse de vulnérabilités. | |
| 199 | + | |
| 200 | +### 3.1 Installer Syft | |
| 201 | + | |
| 202 | +Sur la machine Gitrust (le scan se fait localement, pas sur le builder) : | |
| 203 | + | |
| 204 | +```bash | |
| 205 | +# Installation officielle | |
| 206 | +curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh \ | |
| 207 | + | sh -s -- -b /usr/local/bin | |
| 208 | + | |
| 209 | +# Vérification | |
| 210 | +syft --version | |
| 211 | +``` | |
| 212 | + | |
| 213 | +Dans `.env` : | |
| 214 | + | |
| 215 | +```env | |
| 216 | +CI_SBOM_ENABLED=true | |
| 217 | +CI_SYFT_BIN=/usr/local/bin/syft # optionnel, défaut: syft dans PATH | |
| 218 | +``` | |
| 219 | + | |
| 220 | +À ce stade : à chaque push, un SBOM CycloneDX est généré et stocké (sans upload externe). Visible dans l'onglet **Security** du dépôt : nombre de composants, sha256 du BOM. | |
| 221 | + | |
| 222 | +### 3.2 Déployer Dependency-Track | |
| 223 | + | |
| 224 | +Dependency-Track est une application Java qui stocke les SBOM et corrèle avec les bases CVE/OSV/NVD. Déploiement Docker recommandé : | |
| 225 | + | |
| 226 | +```bash | |
| 227 | +mkdir -p /opt/dtrack && cd /opt/dtrack | |
| 228 | +curl -L -o docker-compose.yml \ | |
| 229 | + https://dependencytrack.org/docker-compose.yml | |
| 230 | +docker compose up -d | |
| 231 | +``` | |
| 232 | + | |
| 233 | +L'API est disponible sur `http://localhost:8081` et l'UI sur `http://localhost:8080`. | |
| 234 | +Login initial : `admin` / `admin` (à changer immédiatement). | |
| 235 | + | |
| 236 | +### 3.3 Créer une clé API | |
| 237 | + | |
| 238 | +Dans Dependency-Track → **Administration** → **Access Management** → **Teams** : | |
| 239 | + | |
| 240 | +1. Créer (ou réutiliser) une équipe `gitrust`. | |
| 241 | +2. Lui attribuer les permissions : | |
| 242 | + - `BOM_UPLOAD` | |
| 243 | + - `PROJECT_CREATION_UPLOAD` | |
| 244 | + - `VIEW_PORTFOLIO` | |
| 245 | + - `VIEW_VULNERABILITY` | |
| 246 | +3. Générer une API key et la copier. | |
| 247 | + | |
| 248 | +### 3.4 Configurer Gitrust | |
| 249 | + | |
| 250 | +Ajouter au `.env` : | |
| 251 | + | |
| 252 | +```env | |
| 253 | +CI_DTRACK_ENABLED=true | |
| 254 | +CI_DTRACK_URL=http://localhost:8081 | |
| 255 | +CI_DTRACK_API_KEY=odt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | |
| 256 | +``` | |
| 257 | + | |
| 258 | +Redémarrer Gitrust. À chaque push : | |
| 259 | + | |
| 260 | +```mermaid | |
| 261 | +sequenceDiagram | |
| 262 | + participant Push as post-receive | |
| 263 | + participant Sbom as SbomService | |
| 264 | + participant Git as git archive | |
| 265 | + participant Syft | |
| 266 | + participant Dtrack as Dependency-Track | |
| 267 | + participant DB as sbom_reports | |
| 268 | + | |
| 269 | + Push->>Sbom: process_push(sha, ref) | |
| 270 | + Sbom->>DB: upsert status=pending | |
| 271 | + Sbom->>Git: archive sha | tar -x tmpdir | |
| 272 | + Sbom->>Syft: scan dir:tmpdir -o cyclonedx-json | |
| 273 | + Syft-->>Sbom: BOM bytes | |
| 274 | + Sbom->>DB: update sha256 | |
| 275 | + Sbom->>Dtrack: PUT /api/v1/bom (base64) | |
| 276 | + Dtrack-->>Sbom: token | |
| 277 | + loop max 30s | |
| 278 | + Sbom->>Dtrack: GET /api/v1/bom/token/{token} | |
| 279 | + Dtrack-->>Sbom: processing ? | |
| 280 | + end | |
| 281 | + Sbom->>Dtrack: GET /api/v1/finding/project/{uuid} | |
| 282 | + Dtrack-->>Sbom: findings[] | |
| 283 | + Sbom->>DB: update status=success<br/>+ critical/high/medium/low | |
| 284 | +``` | |
| 285 | + | |
| 286 | +### 3.5 Lire les résultats | |
| 287 | + | |
| 288 | +Onglet **Security** du dépôt → encart SBOM : | |
| 289 | + | |
| 290 | +- Nombre de composants détectés | |
| 291 | +- Compteurs par sévérité : Critical / High / Medium / Low | |
| 292 | +- Lien direct vers le projet dans Dependency-Track (si l'UUID est résolu) | |
| 293 | +- Hash sha256 du BOM (traçabilité) | |
| 294 | + | |
| 295 | +Si Dependency-Track met plus de 30s à analyser, le status reste `processing` — un sweeper ultérieur ira rechercher les findings. | |
| 296 | + | |
| 297 | +--- | |
| 298 | + | |
| 299 | +## 4. Débogage | |
| 300 | + | |
| 301 | +### Problèmes CI courants | |
| 302 | + | |
| 303 | +| Symptôme | Cause probable | Vérifier | | |
| 304 | +|----------|----------------|----------| | |
| 305 | +| Pipeline reste `pending` | Worker non démarré, ou channel saturé | Logs `CI worker started`, `CI_MAX_CONCURRENT` | | |
| 306 | +| `Échec rsync vers le serveur de build` | SSH bloqué, clé absente | `ssh -p ${CI_REMOTE_SSH_PORT} ${CI_REMOTE_USER}@${CI_REMOTE_HOST}` manuel | | |
| 307 | +| `dagger: command not found` | Dagger non installé sur le builder | Relancer `setup-remote-ci.sh` | | |
| 308 | +| Status `Cancelled` inattendu | Timeout (`CI_DEFAULT_TIMEOUT`) ou auto-cancel | Augmenter le timeout, vérifier pipelines concurrents | | |
| 309 | + | |
| 310 | +### Problèmes SBOM courants | |
| 311 | + | |
| 312 | +| Symptôme | Cause probable | Vérifier | | |
| 313 | +|----------|----------------|----------| | |
| 314 | +| `SBOM generation disabled` | `CI_SBOM_ENABLED=false` | `.env` | | |
| 315 | +| `syft spawn failed` | Binaire introuvable | `which syft`, `CI_SYFT_BIN` | | |
| 316 | +| `invalid commit sha` | SHA non hex 40 chars | Rare, signale un bug | | |
| 317 | +| `Dtrack upload 401` | API key invalide ou permissions manquantes | Régénérer, vérifier les 4 permissions | | |
| 318 | +| Status `processing` indéfiniment | Dtrack surchargé, analyse lente | Attendre, ou relancer un push | | |
| 319 | + | |
| 320 | +### Logs utiles | |
| 321 | + | |
| 322 | +```bash | |
| 323 | +# Logs Gitrust (systemd) | |
| 324 | +journalctl -u gitrust -f | grep -E "CI|SBOM|sbom|pipeline" | |
| 325 | + | |
| 326 | +# Vérifier un pipeline en DB | |
| 327 | +psql $DATABASE_URL -c "SELECT id, status, commit_sha, created_at FROM ci_pipelines ORDER BY created_at DESC LIMIT 10;" | |
| 328 | + | |
| 329 | +# Vérifier un SBOM | |
| 330 | +psql $DATABASE_URL -c "SELECT commit_sha, status, components_count, critical_count, high_count FROM sbom_reports ORDER BY created_at DESC LIMIT 10;" | |
| 331 | +``` | |
| 332 | + | |
| 333 | +--- | |
| 334 | + | |
| 335 | +## 5. Checklist récapitulative | |
| 336 | + | |
| 337 | +**CI :** | |
| 338 | +- [ ] Docker + Dagger installés sur le serveur de build (`setup-remote-ci.sh`) | |
| 339 | +- [ ] `CI_ENABLED=true` et `CI_REMOTE_*` dans `.env` | |
| 340 | +- [ ] Gitrust redémarré | |
| 341 | +- [ ] CI activée dans Settings → CI pour chaque dépôt | |
| 342 | +- [ ] Fichier `.gitrust-ci.yml` (Easy) ou `.dagger/` (Power) commité | |
| 343 | +- [ ] Push → pipeline visible dans l'onglet CI | |
| 344 | + | |
| 345 | +**Dependency Tracker :** | |
| 346 | +- [ ] Syft installé sur la machine Gitrust | |
| 347 | +- [ ] `CI_SBOM_ENABLED=true` dans `.env` | |
| 348 | +- [ ] (Optionnel) Dependency-Track déployé + API key créée avec les 4 permissions | |
| 349 | +- [ ] (Optionnel) `CI_DTRACK_ENABLED=true`, `CI_DTRACK_URL`, `CI_DTRACK_API_KEY` dans `.env` | |
| 350 | +- [ ] Gitrust redémarré | |
| 351 | +- [ ] Push → SBOM visible dans l'onglet Security |
A
administration_manual/how-to/mettre-a-jour.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Mettre à jour gitrust | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/how-to/sauvegarder-restaurer.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Sauvegarder et restaurer | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/how-to/tuner-rate-limiting.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Régler le rate limiting | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/index.md
+74
-0
@@ -0,0 +1,74 @@
| 1 | +# Manuel d'administration | |
| 2 | + | |
| 3 | +Ce manuel s'adresse aux opérateurs et self-hosters qui déploient, configurent et maintiennent une instance gitrust en production. Il couvre l'intégralité du cycle de vie d'une instance : premier démarrage, mise en production, sauvegarde, mise à jour et dépannage. Il suppose des connaissances en administration Linux, en réseau et en TLS — il n'explique pas ces prérequis. | |
| 4 | + | |
| 5 | +## Parcours d'apprentissage | |
| 6 | + | |
| 7 | +Le parcours administrateur est structuré en 4 tutoriels qui représentent environ 3 heures au total. L'étayage est dégressif : le premier tutoriel fournit tout clé en main, le dernier demande de composer soi-même à partir des recettes disponibles. | |
| 8 | + | |
| 9 | +```mermaid | |
| 10 | +graph LR | |
| 11 | + A[VM prête<br/>Docker installé] --> B[01-installation-docker<br/>30 min] | |
| 12 | + B --> C[02-installation-systemd<br/>45 min] | |
| 13 | + C --> D[03-premier-demarrage<br/>20 min] | |
| 14 | + D --> E[04-mise-en-production<br/>90 min] | |
| 15 | + E --> F[Admin opérationnel] | |
| 16 | +``` | |
| 17 | + | |
| 18 | +> **Checkpoint de parcours** : avant de passer au tutoriel 02, vous devez avoir une instance gitrust accessible sur `http://localhost:4000` avec un compte administrateur fonctionnel. Si ce n'est pas le cas, relisez le tutoriel 01. | |
| 19 | + | |
| 20 | +> **Checkpoint de parcours** : avant le tutoriel 04, vous devez avoir une instance démarrée avec une configuration SMTP et un reverse-proxy TLS opérationnel. Si ce n'est pas le cas, relisez le tutoriel 03. | |
| 21 | + | |
| 22 | +--- | |
| 23 | + | |
| 24 | +## Tutoriels — apprendre en faisant | |
| 25 | + | |
| 26 | +Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l'ordre — chacun suppose le précédent complété. | |
| 27 | + | |
| 28 | +- [01 — Installation Docker : stack docker-compose complète](tutorials/01-installation-docker.md) — ~30 min | |
| 29 | +- [02 — Installation systemd : binaire natif + service](tutorials/02-installation-systemd.md) — ~45 min | |
| 30 | +- [03 — Premier démarrage : admin bootstrap, migrations](tutorials/03-premier-demarrage.md) — ~20 min | |
| 31 | +- [04 — Mise en production](tutorials/04-mise-en-production-192-168.md) — ~90 min | |
| 32 | + | |
| 33 | +--- | |
| 34 | + | |
| 35 | +## How-to — recettes pour les tâches courantes | |
| 36 | + | |
| 37 | +Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n'importe quel ordre selon votre besoin. | |
| 38 | + | |
| 39 | +- [Sauvegarder et restaurer](how-to/sauvegarder-restaurer.md) | |
| 40 | +- [Mettre à jour l'instance](how-to/mettre-a-jour.md) | |
| 41 | +- [Configurer SMTP](how-to/configurer-smtp.md) | |
| 42 | +- [Configurer OAuth (Google, GitHub)](how-to/configurer-oauth.md) | |
| 43 | +- [Configurer un CI runner distant](how-to/configurer-ci-runner-remote.md) | |
| 44 | +- [Intégrer Dependency-Track (SBOM)](how-to/integrer-dependency-track.md) | |
| 45 | +- [Durcir avec Fail2ban](how-to/durcir-avec-fail2ban.md) | |
| 46 | +- [Tuner le rate limiting](how-to/tuner-rate-limiting.md) | |
| 47 | +- [Forcer la 2FA globalement](how-to/forcer-2fa-globalement.md) | |
| 48 | +- [Dépanner SSH](how-to/depanner-ssh.md) | |
| 49 | +- [Dépanner la CI](how-to/depanner-ci.md) | |
| 50 | +- [Gérer les utilisateurs depuis /admin](how-to/gerer-utilisateurs-admin.md) | |
| 51 | +- [Auditer l'instance](how-to/auditer-instance.md) | |
| 52 | + | |
| 53 | +--- | |
| 54 | + | |
| 55 | +## Référence — informations techniques exactes | |
| 56 | + | |
| 57 | +La référence documente de façon exhaustive les paramètres, schémas et comportements. Elle est destinée à la consultation ponctuelle. | |
| 58 | + | |
| 59 | +- [Variables d'environnement (.env)](reference/variables-environnement.md) | |
| 60 | +- [Paramètres dynamiques (app_settings)](reference/parametres-dynamiques.md) | |
| 61 | +- [Schéma de base de données](reference/schema-base-de-donnees.md) | |
| 62 | +- [Ports et services (4000 HTTP, 2222 SSH, 5432 PG)](reference/ports-et-services.md) | |
| 63 | +- [Conformité ANSSI PA-074](reference/conformite-anssi-pa074.md) | |
| 64 | + | |
| 65 | +--- | |
| 66 | + | |
| 67 | +## Explication — comprendre le pourquoi | |
| 68 | + | |
| 69 | +Les explanations construisent les modèles mentaux nécessaires pour prendre de bonnes décisions d'exploitation. Lisez-les quand vous voulez comprendre les choix d'architecture, pas seulement les appliquer. | |
| 70 | + | |
| 71 | +- [Architecture globale de gitrust](explanation/architecture-globale.md) | |
| 72 | +- [Modèle de déploiement : mono-machine vs HA](explanation/modele-deploiement.md) | |
| 73 | +- [CI Dagger : pourquoi et comment](explanation/ci-dagger.md) | |
| 74 | +- [Stratégie de sauvegarde 3-2-1 adaptée gitrust](explanation/strategie-sauvegarde.md) |
A
administration_manual/reference/conformite-anssi-pa074.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Conformité ANSSI PA-074 | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/reference/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Référence | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/reference/parametres-dynamiques.md
+296
-0
@@ -0,0 +1,296 @@
| 1 | +# Paramètres dynamiques | |
| 2 | + | |
| 3 | +Ce document explique comment fonctionne la configuration de la plateforme, les deux mécanismes en jeu, leur précédence, et les pièges à connaître. | |
| 4 | + | |
| 5 | +--- | |
| 6 | + | |
| 7 | +## Vue d'ensemble : deux systèmes distincts | |
| 8 | + | |
| 9 | +Gitrust utilise **deux systèmes de configuration** indépendants : | |
| 10 | + | |
| 11 | +| Système | Source | Modifiable à chaud | Visible dans l'UI admin | | |
| 12 | +|---------|--------|:------------------:|:-----------------------:| | |
| 13 | +| **Configuration statique** | Fichier `.env` + variables d'environnement | Non (restart requis) | Non | | |
| 14 | +| **Configuration dynamique** | Table `app_settings` (PostgreSQL) | Oui (effet immédiat) | Oui (`/admin/settings`) | | |
| 15 | + | |
| 16 | +Il existe un **cas hybride** pour OAuth (DB prioritaire, `.env` en fallback). | |
| 17 | + | |
| 18 | +--- | |
| 19 | + | |
| 20 | +## 1. Configuration statique (`.env`) | |
| 21 | + | |
| 22 | +### Principe | |
| 23 | + | |
| 24 | +Les variables d'environnement sont chargées **une seule fois au démarrage** par `dotenvy::dotenv()` et stockées dans des structs Rust immuables. Elles ne sont jamais relues après le boot. | |
| 25 | + | |
| 26 | +### Fichiers de référence | |
| 27 | + | |
| 28 | +| Fichier | Rôle | | |
| 29 | +|---------|------| | |
| 30 | +| `.env.example` | Template documenté avec toutes les variables | | |
| 31 | +| `.env` | Configuration locale (gitignore) | | |
| 32 | +| `.env.production` | Configuration de déploiement | | |
| 33 | +| `.env.test` | Configuration de tests | | |
| 34 | + | |
| 35 | +### Structs de chargement | |
| 36 | + | |
| 37 | +| Struct | Variables concernées | | |
| 38 | +|--------|---------------------| | |
| 39 | +| `GitrustConfig` | `GIT_REPOS_BASE_PATH`, `SSH_PORT`, `SSH_LISTEN_ADDR`, `SSH_HOST_KEY_PATH`, `CI_*`, `IMPORT_*` | | |
| 40 | +| `AppConfig` | `APP_NAME`, `APP_THEME`, `APP_DEBUG` | | |
| 41 | +| `AuthConfig` | `JWT_SECRET`, `JWT_EXPIRATION_MINUTES`, `SESSION_*`, `RATE_LIMIT_*`, `COOKIE_*` | | |
| 42 | +| `EmailConfig` | `SMTP_*`, `EMAIL_*`, `IMAP_*` | | |
| 43 | + | |
| 44 | +### Comportement | |
| 45 | + | |
| 46 | +- Chargées dans `RustwardenApp::build()` au démarrage | |
| 47 | +- Stockées dans des `Arc<Config>` partagés via l'état axum | |
| 48 | +- **Modifier le `.env` sans redémarrer n'a aucun effet** | |
| 49 | +- **Ces variables ne sont PAS affichées dans l'interface admin** | |
| 50 | + | |
| 51 | +### Liste des variables statiques (non exhaustive) | |
| 52 | + | |
| 53 | +``` | |
| 54 | +DATABASE_URL, SERVER_HOST, SERVER_PORT, RUST_LOG, | |
| 55 | +SSH_HOST_KEY_PATH, SSH_PORT, SSH_LISTEN_ADDR, SSH_PUBLIC_HOST, | |
| 56 | +JWT_SECRET, JWT_EXPIRATION_MINUTES, JWT_ISSUER, | |
| 57 | +REFRESH_TOKEN_EXPIRATION_DAYS, REMEMBER_ME_EXPIRATION_DAYS, | |
| 58 | +SESSION_TIMEOUT_MINUTES, SESSION_BACKEND, | |
| 59 | +RATE_LIMIT_LOGIN_PER_MINUTE, RATE_LIMIT_REFRESH_PER_MINUTE, | |
| 60 | +RATE_LIMIT_GENERAL_PER_MINUTE, | |
| 61 | +APP_DEBUG, COOKIE_SECURE, COOKIE_SAME_SITE, | |
| 62 | +ADMIN_USERNAME, ADMIN_EMAIL, ADMIN_PASSWORD, | |
| 63 | +SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM, | |
| 64 | +EMAIL_BASE_URL, EMAIL_QUEUE_*, | |
| 65 | +APP_NAME, APP_THEME, DEFAULT_LOCALE, | |
| 66 | +GIT_REPOS_BASE_PATH, | |
| 67 | +CI_ENABLED, CI_MAX_CONCURRENT, CI_REMOTE_HOST, CI_WORKSPACE_PATH | |
| 68 | +``` | |
| 69 | + | |
| 70 | +--- | |
| 71 | + | |
| 72 | +## 2. Configuration dynamique (table `app_settings`) | |
| 73 | + | |
| 74 | +### Principe | |
| 75 | + | |
| 76 | +Les réglages dynamiques sont stockés en base PostgreSQL dans la table `app_settings` et lus **à chaque requête** via `AppSettingsService`. Ils sont modifiables à chaud par un administrateur depuis l'interface `/admin/settings`. | |
| 77 | + | |
| 78 | +### Schéma de la table | |
| 79 | + | |
| 80 | +```sql | |
| 81 | +CREATE TABLE app_settings ( | |
| 82 | + id UUID PRIMARY KEY, | |
| 83 | + key VARCHAR(100) UNIQUE NOT NULL, | |
| 84 | + value TEXT NOT NULL, | |
| 85 | + description TEXT, | |
| 86 | + updated_by UUID REFERENCES users(id) ON DELETE SET NULL, | |
| 87 | + updated_at TIMESTAMPTZ NOT NULL | |
| 88 | +); | |
| 89 | +``` | |
| 90 | + | |
| 91 | +### Initialisation au démarrage | |
| 92 | + | |
| 93 | +Au boot, `AppSettingsService::initialize_default_settings()` crée les réglages par défaut **uniquement s'ils n'existent pas encore en base** : | |
| 94 | + | |
| 95 | +```rust | |
| 96 | +let existing = Self::get_setting(db, key).await?; | |
| 97 | +if existing.is_none() { | |
| 98 | + // ... insert valeur par défaut | |
| 99 | +} | |
| 100 | +``` | |
| 101 | + | |
| 102 | +**Conséquence critique** : une fois qu'un réglage existe en base (créé au premier démarrage ou modifié via l'UI), il n'est **jamais écrasé** par un redémarrage ultérieur. | |
| 103 | + | |
| 104 | +### Liste des réglages dynamiques et leurs valeurs par défaut | |
| 105 | + | |
| 106 | +| Clé | Défaut | Description | | |
| 107 | +|-----|--------|-------------| | |
| 108 | +| `app_domain` | `env::var("APP_DOMAIN")` ou `"localhost"` | Domaine de l'application | | |
| 109 | +| `allow_registration` | `false` | Autoriser l'inscription publique | | |
| 110 | +| `validation_email_required` | `true` | Exiger la validation email | | |
| 111 | +| `audit_log_level` | `INFO` | Niveau de log d'audit | | |
| 112 | +| `audit_log_actions` | `["create","update","delete","reset_password"]` | Actions auditées | | |
| 113 | +| `password_min_length` | `8` | Longueur minimum mot de passe | | |
| 114 | +| `password_require_uppercase` | `false` | Exiger des majuscules | | |
| 115 | +| `password_require_lowercase` | `false` | Exiger des minuscules | | |
| 116 | +| `password_require_digits` | `false` | Exiger des chiffres | | |
| 117 | +| `password_require_special` | `false` | Exiger des caractères spéciaux | | |
| 118 | +| `password_change_require_email` | `true` | Confirmation email pour changement mdp | | |
| 119 | +| `password_expiration_enabled` | `false` | Activer l'expiration des mots de passe | | |
| 120 | +| `password_expiration_days` | `0` | Durée d'expiration (jours) | | |
| 121 | +| `password_expiration_alert_enabled` | `false` | Alerte email avant expiration | | |
| 122 | +| `password_expiration_alert_days_before` | `7` | Jours avant expiration pour alerter | | |
| 123 | +| `oauth_enabled` | `false` | Activer OAuth/SSO | | |
| 124 | +| `oauth_google_enabled` | `false` | Activer Google OAuth | | |
| 125 | +| `oauth_github_enabled` | `false` | Activer GitHub OAuth | | |
| 126 | +| `oauth_discord_enabled` | `false` | Activer Discord OAuth | | |
| 127 | +| `oauth_microsoft_enabled` | `false` | Activer Microsoft OAuth | | |
| 128 | +| `oauth_redirect_base_url` | `""` | URL de base pour les callbacks OAuth | | |
| 129 | +| `oauth_auto_register` | `true` | Créer un compte auto au premier login OAuth | | |
| 130 | +| `oauth_link_existing_account` | `true` | Lier un compte OAuth à un utilisateur existant | | |
| 131 | +| `oauth_{provider}_client_id` | `""` | Client ID du provider OAuth | | |
| 132 | +| `oauth_{provider}_client_secret` | `""` | Client secret (chiffré AES-256-GCM en base) | | |
| 133 | +| `oauth_microsoft_tenant` | `""` | Tenant Azure AD | | |
| 134 | + | |
| 135 | +--- | |
| 136 | + | |
| 137 | +## 3. Cas hybride : OAuth | |
| 138 | + | |
| 139 | +OAuth est le **seul sous-système** qui combine les deux sources. La logique dans `OAuthConfig::load()` : | |
| 140 | + | |
| 141 | +``` | |
| 142 | +Pour chaque réglage OAuth : | |
| 143 | + 1. Chercher dans app_settings (DB) | |
| 144 | + → si trouvé et non vide : utiliser cette valeur | |
| 145 | + 2. Sinon : fallback sur la variable d'environnement | |
| 146 | + → si absente : utiliser la valeur par défaut codée en dur | |
| 147 | +``` | |
| 148 | + | |
| 149 | +**Important** : `OAuthConfig::load()` est appelé au démarrage. Le résultat est stocké dans un `Arc` et n'est pas relu dynamiquement. Donc : | |
| 150 | + | |
| 151 | +- Modifier un réglage OAuth **via l'UI admin** nécessite un **redémarrage** pour que `OAuthConfig` soit rechargé | |
| 152 | +- Le `.env` n'est qu'un fallback si la DB n'a pas de valeur | |
| 153 | + | |
| 154 | +--- | |
| 155 | + | |
| 156 | +## 4. Précédence et comportement au redémarrage | |
| 157 | + | |
| 158 | +### Réglages statiques (`.env` uniquement) | |
| 159 | + | |
| 160 | +| Action | Effet immédiat | Après restart | | |
| 161 | +|--------|:-:|:-:| | |
| 162 | +| Modifier `.env` | Non | Oui | | |
| 163 | + | |
| 164 | +### Réglages dynamiques (DB uniquement) | |
| 165 | + | |
| 166 | +| Action | Effet immédiat | Après restart | | |
| 167 | +|--------|:-:|:-:| | |
| 168 | +| Modifier via UI admin | Oui | Oui (valeur en DB persiste) | | |
| 169 | +| Modifier le `.env` | Aucun effet | Aucun effet | | |
| 170 | + | |
| 171 | +### Réglages hybrides (OAuth) | |
| 172 | + | |
| 173 | +| Action | Effet immédiat | Après restart | | |
| 174 | +|--------|:-:|:-:| | |
| 175 | +| Modifier via UI admin | Non (OAuthConfig est en Arc) | Oui (DB prime sur .env) | | |
| 176 | +| Modifier `.env` | Non | Seulement si aucune valeur en DB | | |
| 177 | + | |
| 178 | +--- | |
| 179 | + | |
| 180 | +## 5. Piège principal : les variables `.env` fantômes | |
| 181 | + | |
| 182 | +Certaines variables présentes dans `.env.example` donnent l'**illusion** de configurer des réglages qui sont en réalité gérés par la base de données : | |
| 183 | + | |
| 184 | +| Variable `.env` | Réglage DB correspondant | La variable `.env` est-elle lue ? | | |
| 185 | +|-----------------|--------------------------|:-:| | |
| 186 | +| `ALLOW_REGISTRATION=true` | `allow_registration` | **Non** — valeur par défaut codée en dur (`"false"`) | | |
| 187 | +| `EMAIL_VALIDATION_REQUIRED=true` | `validation_email_required` | **Non** — valeur par défaut codée en dur (`"true"`) | | |
| 188 | +| `OAUTH_ENABLED=true` | `oauth_enabled` | Oui, mais **seulement en fallback** si la DB n'a pas de valeur | | |
| 189 | + | |
| 190 | +Pour `ALLOW_REGISTRATION` et `EMAIL_VALIDATION_REQUIRED` : | |
| 191 | + | |
| 192 | +- La variable `.env` est documentée dans `.env.example` mais **n'est jamais consultée** par `initialize_default_settings()` | |
| 193 | +- La valeur initiale est **codée en dur** dans le service | |
| 194 | +- Seule la valeur en base de données (modifiable via `/admin/settings`) fait foi | |
| 195 | + | |
| 196 | +Pour `app_domain`, c'est le seul réglage dynamique qui lit le `.env` comme seed initial. | |
| 197 | + | |
| 198 | +--- | |
| 199 | + | |
| 200 | +## 6. Diagramme de décision | |
| 201 | + | |
| 202 | +``` | |
| 203 | + ┌─────────────────────────────┐ | |
| 204 | + │ Quel type de réglage ? │ | |
| 205 | + └──────────┬──────────────────-┘ | |
| 206 | + │ | |
| 207 | + ┌────────────────┼────────────────┐ | |
| 208 | + ▼ ▼ ▼ | |
| 209 | + Infrastructure Fonctionnel OAuth | |
| 210 | + (port, JWT, SMTP) (inscription, (providers, | |
| 211 | + mots de passe) secrets) | |
| 212 | + │ │ │ | |
| 213 | + ▼ ▼ ▼ | |
| 214 | + .env seul DB seule DB + fallback .env | |
| 215 | + │ │ │ | |
| 216 | + ▼ ▼ ▼ | |
| 217 | + Restart requis Effet immédiat Restart requis | |
| 218 | + via /admin/ (OAuthConfig en Arc) | |
| 219 | + settings | |
| 220 | +``` | |
| 221 | + | |
| 222 | +--- | |
| 223 | + | |
| 224 | +## 7. Guide pour les administrateurs | |
| 225 | + | |
| 226 | +### Modifier un réglage d'infrastructure | |
| 227 | + | |
| 228 | +Éditer `.env` (ou `.env.production`) puis redémarrer le service : | |
| 229 | + | |
| 230 | +```bash | |
| 231 | +# Éditer | |
| 232 | +vim .env | |
| 233 | + | |
| 234 | +# Redémarrer | |
| 235 | +systemctl restart gitrust # production | |
| 236 | +# ou Ctrl+C + cargo run # dev | |
| 237 | +``` | |
| 238 | + | |
| 239 | +### Modifier un réglage fonctionnel | |
| 240 | + | |
| 241 | +Se connecter en tant qu'administrateur, aller dans `/admin/settings`, modifier la valeur, et cliquer "Save". L'effet est **immédiat**, aucun redémarrage nécessaire. | |
| 242 | + | |
| 243 | +### Modifier un réglage OAuth | |
| 244 | + | |
| 245 | +Via `/admin/settings`, modifier les valeurs OAuth puis **redémarrer le service** (la config OAuth est chargée en mémoire au boot et n'est pas relue dynamiquement). | |
| 246 | + | |
| 247 | +### Vérifier la valeur effective d'un réglage | |
| 248 | + | |
| 249 | +Pour les réglages dynamiques, interroger la base directement : | |
| 250 | + | |
| 251 | +```sql | |
| 252 | +SELECT key, value, updated_at, updated_by | |
| 253 | +FROM app_settings | |
| 254 | +WHERE key = 'allow_registration'; | |
| 255 | +``` | |
| 256 | + | |
| 257 | +Pour les réglages statiques, vérifier les logs au démarrage (`RUST_LOG=debug`). | |
| 258 | + | |
| 259 | +--- | |
| 260 | + | |
| 261 | +## 8. Guide pour les développeurs | |
| 262 | + | |
| 263 | +### Ajouter un nouveau réglage dynamique | |
| 264 | + | |
| 265 | +1. Ajouter le tuple `(clé, valeur_défaut, description)` dans `AppSettingsService::initialize_default_settings()` : | |
| 266 | + ```rust | |
| 267 | + ("ma_nouvelle_cle", "valeur_par_defaut", Some("Description pour l'UI admin")), | |
| 268 | + ``` | |
| 269 | + | |
| 270 | +2. Lire la valeur dans le code via le service : | |
| 271 | + ```rust | |
| 272 | + // Boolean avec défaut | |
| 273 | + let enabled = AppSettingsService::get_bool(&db, "ma_nouvelle_cle", false).await?; | |
| 274 | + | |
| 275 | + // String | |
| 276 | + let val = AppSettingsService::get_setting(&db, "ma_nouvelle_cle").await?; | |
| 277 | + ``` | |
| 278 | + | |
| 279 | +3. La valeur apparaîtra automatiquement dans `/admin/settings`. | |
| 280 | + | |
| 281 | +### Ajouter un nouveau réglage statique | |
| 282 | + | |
| 283 | +1. Ajouter la variable dans `.env.example` avec documentation complète | |
| 284 | +2. Lire la variable dans le struct `Config` correspondant via `env::var()` | |
| 285 | +3. La valeur ne sera **pas** visible dans l'interface admin | |
| 286 | + | |
| 287 | +### Ajouter un réglage hybride (DB + fallback .env) | |
| 288 | + | |
| 289 | +Suivre le pattern OAuth dans `crates/rustwarden-core/src/config/oauth.rs` : | |
| 290 | + | |
| 291 | +```rust | |
| 292 | +let ma_valeur = match db_val("ma_cle").await { | |
| 293 | + Some(v) => v, | |
| 294 | + None => env::var("MA_CLE").unwrap_or_else(|_| "defaut".to_string()), | |
| 295 | +}; | |
| 296 | +``` |
A
administration_manual/reference/ports-et-services.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Ports et services | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/reference/schema-base-de-donnees.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Schéma de la base de données | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/reference/variables-environnement.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Variables d'environnement | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/tutorials/01-installation-docker.md
+312
-0
@@ -0,0 +1,312 @@
| 1 | +# Installation Docker : démarrez gitrust en 30 minutes avec docker-compose | |
| 2 | + | |
| 3 | +## Objectifs | |
| 4 | + | |
| 5 | +À la fin de ce tutoriel, vous saurez : | |
| 6 | + | |
| 7 | +- **O1. Déployer** la stack gitrust minimale (application + PostgreSQL) avec docker-compose | |
| 8 | +- **O2. Vérifier** que les trois services démarrent correctement et sont en bonne santé | |
| 9 | +- **O3. Créer** le premier compte administrateur et accéder à l'interface web | |
| 10 | + | |
| 11 | +## Pré-requis | |
| 12 | + | |
| 13 | +- **Technique** : une VM ou machine Linux (Debian 12 / Ubuntu 22.04 ou supérieur), Docker Engine ≥ 24 installé (`docker --version` répond), Docker Compose plugin installé (`docker compose version` répond), ports 4000 et 2222 libres sur la machine | |
| 14 | +- **Pédagogique** : aucun tutoriel gitrust préalable requis — c'est le point de départ du parcours administrateur | |
| 15 | +- **Temps estimé** : ~30 minutes | |
| 16 | + | |
| 17 | +## Vue d'ensemble | |
| 18 | + | |
| 19 | +Avant de lancer la moindre commande, comprenons ce que docker-compose va orchestrer et pourquoi. | |
| 20 | + | |
| 21 | +gitrust est composé de **trois services principaux** dans sa configuration minimale. Pensez-y comme trois pièces d'un appartement qui s'appellent entre elles via un réseau interne : | |
| 22 | + | |
| 23 | +```mermaid | |
| 24 | +graph TB | |
| 25 | + subgraph internet ["Internet / votre navigateur"] | |
| 26 | + B[Navigateur :4000] | |
| 27 | + S[Client git/SSH :2222] | |
| 28 | + end | |
| 29 | + | |
| 30 | + subgraph docker ["Réseau Docker gitrust_net"] | |
| 31 | + A["gitrust-app<br/>(Rust, port 4000 + 2222)<br/>Lit la config depuis .env"] | |
| 32 | + P["postgres<br/>(PostgreSQL 16, port 5432)<br/>Stocke comptes, dépôts, issues"] | |
| 33 | + R["redis (optionnel)<br/>(Redis 7, port 6379)<br/>Sessions web + cache"] | |
| 34 | + end | |
| 35 | + | |
| 36 | + B -->|HTTP| A | |
| 37 | + S -->|SSH| A | |
| 38 | + A -->|SQL| P | |
| 39 | + A -.->|sessions| R | |
| 40 | +``` | |
| 41 | + | |
| 42 | +**gitrust-app** est le cœur : serveur HTTP (`:4000`) + serveur SSH (`:2222`) compilé en Rust. Il lit sa configuration depuis un fichier `.env` et écrit les dépôts Git bare sur un volume Docker. **PostgreSQL** stocke toutes les données relationnelles (comptes, organisations, dépôts, issues, PRs). **Redis** est optionnel dans la configuration minimale — il gère les sessions web et le cache quand il est présent. | |
| 43 | + | |
| 44 | +Dans ce tutoriel, nous utilisons la stack **minimale** (app + PostgreSQL) suffisante pour évaluer gitrust et démarrer une petite instance. La stack production avec Redis et SMTP se trouve dans [`template/docker/docker-compose.production.yml`](../../template/docker/docker-compose.production.yml). | |
| 45 | + | |
| 46 | +--- | |
| 47 | + | |
| 48 | +## Étape 1 : Créez le répertoire de travail et le fichier de configuration | |
| 49 | + | |
| 50 | +Créez un répertoire dédié à votre instance gitrust et positionnez-vous dedans : | |
| 51 | + | |
| 52 | +```bash | |
| 53 | +mkdir -p /opt/gitrust && cd /opt/gitrust | |
| 54 | +``` | |
| 55 | + | |
| 56 | +Créez le fichier de configuration `.env` avec les valeurs minimales. **Changez impérativement** les valeurs marquées `CHANGE_ME` : | |
| 57 | + | |
| 58 | +```bash | |
| 59 | +cat > .env << 'EOF' | |
| 60 | +# === gitrust — configuration minimale === | |
| 61 | +# Changez toutes les valeurs CHANGE_ME avant de démarrer | |
| 62 | + | |
| 63 | +# Clé secrète de l'application (générez avec : openssl rand -hex 32) | |
| 64 | +SECRET_KEY=CHANGE_ME_openssl_rand_hex_32 | |
| 65 | + | |
| 66 | +# URL publique de l'instance (sans slash final) | |
| 67 | +APP_URL=http://localhost:4000 | |
| 68 | + | |
| 69 | +# Base de données PostgreSQL | |
| 70 | +DATABASE_URL=postgres://gitrust:CHANGE_ME_db_password@postgres:5432/gitrust | |
| 71 | +POSTGRES_USER=gitrust | |
| 72 | +POSTGRES_PASSWORD=CHANGE_ME_db_password | |
| 73 | +POSTGRES_DB=gitrust | |
| 74 | + | |
| 75 | +# Serveur SSH (port exposé à l'extérieur) | |
| 76 | +SSH_PORT=2222 | |
| 77 | + | |
| 78 | +# Mode de l'application | |
| 79 | +RUST_LOG=info | |
| 80 | +APP_ENV=production | |
| 81 | +EOF | |
| 82 | +``` | |
| 83 | + | |
| 84 | +Générez maintenant une clé secrète robuste et remplacez la valeur dans `.env` : | |
| 85 | + | |
| 86 | +```bash | |
| 87 | +SECRET=$(openssl rand -hex 32) | |
| 88 | +sed -i "s/CHANGE_ME_openssl_rand_hex_32/$SECRET/" .env | |
| 89 | +``` | |
| 90 | + | |
| 91 | +Choisissez également un mot de passe pour PostgreSQL et remplacez les deux occurrences : | |
| 92 | + | |
| 93 | +```bash | |
| 94 | +DB_PASS=$(openssl rand -hex 16) | |
| 95 | +sed -i "s/CHANGE_ME_db_password/$DB_PASS/g" .env | |
| 96 | +``` | |
| 97 | + | |
| 98 | +Sortie attendue (vérification) : | |
| 99 | +```bash | |
| 100 | +grep SECRET_KEY .env | |
| 101 | +# → SECRET_KEY=4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a | |
| 102 | +``` | |
| 103 | + | |
| 104 | +**Checkpoint** : exécutez `grep CHANGE_ME .env` — la commande doit ne rien retourner. Si elle retourne des lignes, ces valeurs n'ont pas été remplacées et le démarrage échouera. | |
| 105 | + | |
| 106 | +--- | |
| 107 | + | |
| 108 | +## Étape 2 : Créez le fichier docker-compose.yml | |
| 109 | + | |
| 110 | +Créez le fichier `docker-compose.yml` suivant dans `/opt/gitrust/`. Ce contenu correspond à la stack minimale gitrust — il est reproduit ici intégralement pour que vous puissiez démarrer sans dépendance externe : | |
| 111 | + | |
| 112 | +```bash | |
| 113 | +cat > docker-compose.yml << 'EOF' | |
| 114 | +# docker-compose.minimal.yml — Stack gitrust minimale (app + PostgreSQL) | |
| 115 | +# Cas d'usage : évaluation, développement, petite instance (<10 utilisateurs) | |
| 116 | +# Pour la production : utilisez docker-compose.production.yml (+ Redis + SMTP) | |
| 117 | +# | |
| 118 | +# Usage : | |
| 119 | +# docker compose up -d | |
| 120 | +# docker compose logs -f gitrust | |
| 121 | +# docker compose down | |
| 122 | + | |
| 123 | +version: "3.9" | |
| 124 | + | |
| 125 | +services: | |
| 126 | + # ── Base de données ─────────────────────────────────────────────────────── | |
| 127 | + postgres: | |
| 128 | + image: postgres:16-alpine | |
| 129 | + container_name: gitrust_postgres | |
| 130 | + restart: unless-stopped | |
| 131 | + environment: | |
| 132 | + POSTGRES_USER: ${POSTGRES_USER} | |
| 133 | + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} | |
| 134 | + POSTGRES_DB: ${POSTGRES_DB} | |
| 135 | + volumes: | |
| 136 | + # Données persistantes — ne supprimez pas ce volume sans sauvegarde | |
| 137 | + - postgres_data:/var/lib/postgresql/data | |
| 138 | + healthcheck: | |
| 139 | + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] | |
| 140 | + interval: 10s | |
| 141 | + timeout: 5s | |
| 142 | + retries: 5 | |
| 143 | + networks: | |
| 144 | + - gitrust_net | |
| 145 | + | |
| 146 | + # ── Application gitrust ─────────────────────────────────────────────────── | |
| 147 | + gitrust: | |
| 148 | + image: ghcr.io/gitrust/gitrust:latest | |
| 149 | + container_name: gitrust_app | |
| 150 | + restart: unless-stopped | |
| 151 | + depends_on: | |
| 152 | + postgres: | |
| 153 | + condition: service_healthy | |
| 154 | + env_file: | |
| 155 | + # Lit toutes les variables depuis .env — ne commitez jamais ce fichier | |
| 156 | + - .env | |
| 157 | + ports: | |
| 158 | + # Interface web — exposée sur toutes les interfaces de la machine hôte | |
| 159 | + - "4000:4000" | |
| 160 | + # Serveur SSH Git — exposé sur le port configuré dans .env | |
| 161 | + - "${SSH_PORT:-2222}:2222" | |
| 162 | + volumes: | |
| 163 | + # Dépôts Git bare — données critiques, sauvegardez ce volume | |
| 164 | + - git_repos:/var/lib/gitrust/repositories | |
| 165 | + # Clés SSH du serveur — générées au premier démarrage, persistez-les | |
| 166 | + - ssh_host_keys:/etc/gitrust/ssh | |
| 167 | + healthcheck: | |
| 168 | + test: ["CMD", "curl", "-f", "http://localhost:4000/health"] | |
| 169 | + interval: 30s | |
| 170 | + timeout: 10s | |
| 171 | + retries: 3 | |
| 172 | + start_period: 30s | |
| 173 | + networks: | |
| 174 | + - gitrust_net | |
| 175 | + | |
| 176 | +volumes: | |
| 177 | + # postgres_data : données relationnelles (comptes, dépôts, issues, PRs) | |
| 178 | + postgres_data: | |
| 179 | + # git_repos : dépôts Git bare (le contenu réel des commits) | |
| 180 | + git_repos: | |
| 181 | + # ssh_host_keys : clés SSH hôte (fingerprint de votre serveur) | |
| 182 | + ssh_host_keys: | |
| 183 | + | |
| 184 | +networks: | |
| 185 | + gitrust_net: | |
| 186 | + driver: bridge | |
| 187 | +EOF | |
| 188 | +``` | |
| 189 | + | |
| 190 | +**Checkpoint** : vérifiez que les deux fichiers sont présents dans `/opt/gitrust/` : | |
| 191 | + | |
| 192 | +```bash | |
| 193 | +ls -la /opt/gitrust/ | |
| 194 | +``` | |
| 195 | + | |
| 196 | +Sortie attendue : | |
| 197 | +``` | |
| 198 | +total 16 | |
| 199 | +drwxr-xr-x 2 root root 4096 avr 17 10:00 . | |
| 200 | +drwxr-xr-x 8 root root 4096 avr 17 09:55 .. | |
| 201 | +-rw------- 1 root root 612 avr 17 10:00 .env | |
| 202 | +-rw-r--r-- 1 root root 2048 avr 17 10:00 docker-compose.yml | |
| 203 | +``` | |
| 204 | + | |
| 205 | +--- | |
| 206 | + | |
| 207 | +## Étape 3 : Démarrez la stack et suivez les logs | |
| 208 | + | |
| 209 | +Démarrez tous les services en arrière-plan : | |
| 210 | + | |
| 211 | +```bash | |
| 212 | +docker compose up -d | |
| 213 | +``` | |
| 214 | + | |
| 215 | +Sortie attendue : | |
| 216 | +``` | |
| 217 | +[+] Running 4/4 | |
| 218 | + ✔ Network gitrust_gitrust_net Created 0.1s | |
| 219 | + ✔ Volume "gitrust_postgres_data" Created 0.0s | |
| 220 | + ✔ Container gitrust_postgres Started 0.8s | |
| 221 | + ✔ Container gitrust_app Started 1.2s | |
| 222 | +``` | |
| 223 | + | |
| 224 | +Suivez les logs de l'application pour observer le démarrage (les migrations s'exécutent automatiquement) : | |
| 225 | + | |
| 226 | +```bash | |
| 227 | +docker compose logs -f gitrust | |
| 228 | +``` | |
| 229 | + | |
| 230 | +Sortie attendue (les 15-20 premières secondes) : | |
| 231 | +``` | |
| 232 | +gitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Starting gitrust v0.9.0 | |
| 233 | +gitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Connecting to database... | |
| 234 | +gitrust_app | 2026-04-17T10:00:16Z INFO gitrust > Running database migrations... | |
| 235 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Applied 42 migrations successfully | |
| 236 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Generating SSH host keys... | |
| 237 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH host key fingerprint: SHA256:xxxxxxxxxxxxxxxxxxxx | |
| 238 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > HTTP server listening on 0.0.0.0:4000 | |
| 239 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH server listening on 0.0.0.0:2222 | |
| 240 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > gitrust is ready | |
| 241 | +``` | |
| 242 | + | |
| 243 | +Appuyez sur **Ctrl+C** pour quitter le suivi des logs (les containers continuent de tourner). | |
| 244 | + | |
| 245 | +**Checkpoint** : vérifiez l'état de santé des services : | |
| 246 | + | |
| 247 | +```bash | |
| 248 | +docker compose ps | |
| 249 | +``` | |
| 250 | + | |
| 251 | +Sortie attendue : | |
| 252 | +``` | |
| 253 | +NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS | |
| 254 | +gitrust_app ghcr.io/gitrust/gitrust:latest "/usr/local/bin/gitr…" gitrust 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:4000->4000/tcp, 0.0.0.0:2222->2222/tcp | |
| 255 | +gitrust_postgres postgres:16-alpine "docker-entrypoint.s…" postgres 2 minutes ago Up 2 minutes (healthy) 5432/tcp | |
| 256 | +``` | |
| 257 | + | |
| 258 | +Les deux containers doivent afficher `(healthy)`. Si l'un affiche `(starting)`, attendez 30 secondes et relancez la commande. S'il affiche `(unhealthy)`, consultez les logs avec `docker compose logs gitrust` ou `docker compose logs postgres`. | |
| 259 | + | |
| 260 | +--- | |
| 261 | + | |
| 262 | +## Étape 4 : Créez le premier compte administrateur | |
| 263 | + | |
| 264 | +Ouvrez votre navigateur et rendez-vous sur `http://localhost:4000`. | |
| 265 | + | |
| 266 | +Vous devriez voir la page d'accueil gitrust avec un formulaire d'inscription. Comme l'instance est vierge, **le premier compte créé devient automatiquement administrateur**. | |
| 267 | + | |
| 268 | +Remplissez le formulaire : | |
| 269 | +- **Pseudo** : votre identifiant administrateur (ex. `admin`) | |
| 270 | +- **E-mail** : votre adresse e-mail | |
| 271 | +- **Mot de passe** : choisissez un mot de passe robuste (≥ 12 caractères) | |
| 272 | + | |
| 273 | +Cliquez sur **Créer mon compte**. | |
| 274 | + | |
| 275 | +Sortie attendue dans les logs (visible avec `docker compose logs -f gitrust`) : | |
| 276 | +``` | |
| 277 | +gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::auth > New user registered: admin (id=1) | |
| 278 | +gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::admin > First user promoted to administrator: admin | |
| 279 | +``` | |
| 280 | + | |
| 281 | +**Checkpoint final** : connectez-vous avec vos identifiants. Après la connexion, vérifiez que le menu en haut à droite affiche un lien **Administration** (ou naviguez vers `http://localhost:4000/admin`). Cette page n'est accessible qu'aux administrateurs — sa présence confirme que votre compte a bien le rôle admin. | |
| 282 | + | |
| 283 | +L'URL de votre instance est `http://localhost:4000` et votre compte administrateur est opérationnel. | |
| 284 | + | |
| 285 | +--- | |
| 286 | + | |
| 287 | +## Récapitulatif | |
| 288 | + | |
| 289 | +- ✓ **O1 accompli** : la stack docker-compose est déployée — `docker compose ps` affiche deux containers `(healthy)` | |
| 290 | +- ✓ **O2 accompli** : les trois services (app, PostgreSQL, réseau interne) démarrent correctement — les logs montrent « gitrust is ready » et les migrations sont appliquées | |
| 291 | +- ✓ **O3 accompli** : le premier compte administrateur est créé et la page `/admin` est accessible | |
| 292 | + | |
| 293 | +--- | |
| 294 | + | |
| 295 | +## Et si ça ne marche pas | |
| 296 | + | |
| 297 | +| Symptôme | Cause probable | Correction | | |
| 298 | +|----------|----------------|------------| | |
| 299 | +| `Error: port 4000 is already in use` au démarrage | Un autre service occupe le port 4000 sur la machine hôte | Identifiez le service avec `ss -tlnp \| grep 4000` ou `lsof -i :4000`. Arrêtez-le ou changez le port dans `docker-compose.yml` : remplacez `"4000:4000"` par `"4001:4000"` et accédez sur `:4001` | | |
| 300 | +| Le container `gitrust_app` affiche `(unhealthy)` ou redémarre en boucle | La variable `DATABASE_URL` est incorrecte ou `SECRET_KEY` contient des caractères spéciaux non échappés | Vérifiez avec `docker compose logs gitrust \| grep ERROR`. Assurez-vous que `SECRET_KEY` est bien une chaîne hexadécimale sans guillemets. Rechargez avec `docker compose down && docker compose up -d` | | |
| 301 | +| La page `http://localhost:4000` affiche « Connection refused » | Le container n'est pas encore en `(healthy)` ou le port n'est pas exposé | Attendez 30 secondes et rechargez. Si le problème persiste, vérifiez que votre pare-feu local (`ufw status`) autorise le port 4000 | | |
| 302 | +| `FATAL: password authentication failed for user "gitrust"` dans les logs postgres | Le mot de passe dans `DATABASE_URL` ne correspond pas à `POSTGRES_PASSWORD` | Supprimez le volume PostgreSQL (`docker compose down -v`) et relancez — **attention : supprime toutes les données** | | |
| 303 | + | |
| 304 | +--- | |
| 305 | + | |
| 306 | +## Prochaine étape | |
| 307 | + | |
| 308 | +→ [02 — Installation systemd : binaire natif + service](02-installation-systemd.md) : découvrez l'installation sans Docker pour un déploiement production avec hardening AppArmor (~45 min) | |
| 309 | + | |
| 310 | +Ou si vous souhaitez rendre cette instance accessible depuis Internet : | |
| 311 | + | |
| 312 | +→ [04 — Mise en production](04-mise-en-production-192-168.md) : reverse-proxy TLS, SMTP, sauvegarde automatique (~90 min) |
A
administration_manual/tutorials/02-installation-systemd.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# 02 — Installation avec systemd | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/tutorials/03-premier-demarrage.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# 03 — Premier démarrage | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
administration_manual/tutorials/04-mise-en-production-192-168.md
+582
-0
@@ -0,0 +1,582 @@
| 1 | +# Mise en production sur une machine Linux avec HTTPS Let's Encrypt | |
| 2 | + | |
| 3 | +## Contexte | |
| 4 | + | |
| 5 | +Procédure de référence pour déployer une instance gitrust sur une machine Linux à IP fixe, avec patte externe routée et HTTPS via Let's Encrypt. Reproductible et testée en conditions réelles. | |
| 6 | + | |
| 7 | +Adaptez les valeurs suivantes à votre environnement : | |
| 8 | + | |
| 9 | +| Placeholder | Remplacez par | | |
| 10 | +|---|---| | |
| 11 | +| `<your-server-ip>` | L'IP fixe de votre serveur (ex: `192.168.1.57` sur un LAN, ou une IP publique) | | |
| 12 | +| `<your-domain>` | Votre FQDN principal (ex: `gitrust.example.com`) | | |
| 13 | +| `<acme-email>` | L'email pour Let's Encrypt (ex: `contact@example.com`) | | |
| 14 | +| `<admin-user>` | L'utilisateur SSH admin sur le serveur cible | | |
| 15 | + | |
| 16 | +### Les trois services gitrust | |
| 17 | + | |
| 18 | +| # | Service | Bind interne | Exposition publique | Variable | | |
| 19 | +|---|---------|--------------|---------------------|----------| | |
| 20 | +| 1 | Web HTTP (UI SSR + API) | `127.0.0.1:4000` | `:443` HTTPS via Nginx | `SERVER_PORT` | | |
| 21 | +| 2 | SSH Git (russh) | `127.0.0.1:2222` | `:22` via Nginx stream | `SSH_PORT` | | |
| 22 | +| 3 | Worker CI/CD (Dagger) | tâche Tokio in-process | — (déclenché par push) | `CI_ENABLED` | | |
| 23 | + | |
| 24 | +PostgreSQL = dépendance, conteneur Docker bind loopback `127.0.0.1:5432`. | |
| 25 | + | |
| 26 | +### Topologie réseau | |
| 27 | + | |
| 28 | +``` | |
| 29 | +Internet | |
| 30 | + | | |
| 31 | + v | |
| 32 | +<your-server-ip> (patte externe) | |
| 33 | + | | |
| 34 | + +-- :22 Nginx stream --> 127.0.0.1:2222 (gitrust SSH) | |
| 35 | + +-- :80 Nginx HTTP --> 301 HTTPS (sauf /.well-known/acme-challenge) | |
| 36 | + +-- :443 Nginx HTTPS --> 127.0.0.1:4000 (gitrust HTTP) | |
| 37 | + +-- :2022 sshd système (accès admin, déplacé depuis :22) | |
| 38 | + | |
| 39 | + Loopback uniquement : | |
| 40 | + +-- 127.0.0.1:4000 gitrust web | |
| 41 | + +-- 127.0.0.1:2222 gitrust SSH | |
| 42 | + +-- 127.0.0.1:5432 postgres docker | |
| 43 | +``` | |
| 44 | + | |
| 45 | +### Risque critique — ordre d'exécution | |
| 46 | + | |
| 47 | +Le déplacement de `sshd` système de `:22` vers `:2022` **doit** être fait avant la configuration `nginx stream`, et **doit** être validé depuis une **deuxième session SSH** avant fermeture de la première. Sinon : lockout total (besoin d'accès console physique). | |
| 48 | + | |
| 49 | +--- | |
| 50 | + | |
| 51 | +## Pré-requis | |
| 52 | + | |
| 53 | +### Poste de build (machine locale avec le code source) | |
| 54 | + | |
| 55 | +```bash | |
| 56 | +rustup show && command -v rsync envsubst npx | |
| 57 | +# Installer si besoin : sudo apt install rsync gettext-base | |
| 58 | +``` | |
| 59 | + | |
| 60 | +### Cible `<your-server-ip>` | |
| 61 | + | |
| 62 | +- Debian/Ubuntu récent | |
| 63 | +- Accès SSH avec `sudo` | |
| 64 | +- Docker + plugin compose (`docker compose version`) | |
| 65 | +- Snap ou apt pour `certbot` + plugin nginx | |
| 66 | +- DNS `<your-domain>` → IP publique de la patte externe (vérifier `dig +short <your-domain>`) | |
| 67 | +- Module `stream` Nginx disponible (paquet `libnginx-mod-stream` sur Debian) | |
| 68 | + | |
| 69 | +--- | |
| 70 | + | |
| 71 | +## Phase 0 — Générer `.env.production` (poste de build, une seule fois) | |
| 72 | + | |
| 73 | +```bash | |
| 74 | +JWT=$(openssl rand -hex 64) | |
| 75 | +ADMIN_PWD=$(openssl rand -base64 24) | |
| 76 | +PG_PWD=$(openssl rand -base64 24) | |
| 77 | + | |
| 78 | +cat > .env.production <<EOF | |
| 79 | +# ---- Base de données ---- | |
| 80 | +DATABASE_URL=postgres://gitrust:${PG_PWD}@127.0.0.1:5432/gitrust | |
| 81 | + | |
| 82 | +# ---- Serveur HTTP (derrière Nginx HTTPS) ---- | |
| 83 | +SERVER_HOST=127.0.0.1 | |
| 84 | +SERVER_PORT=4000 | |
| 85 | + | |
| 86 | +# ---- Serveur SSH (derrière nginx stream :22) ---- | |
| 87 | +SSH_PORT=2222 | |
| 88 | +SSH_LISTEN_ADDR=127.0.0.1 | |
| 89 | +SSH_PUBLIC_HOST=<your-domain> | |
| 90 | +SSH_HOST_KEY_PATH=/opt/gitrust/data/ssh_host_ed25519_key | |
| 91 | + | |
| 92 | +# ---- Chemins (réécrits par deploy.sh) ---- | |
| 93 | +GIT_REPOS_BASE_PATH=/opt/gitrust/data/repos | |
| 94 | +STATIC_FILES_PATH=/opt/gitrust/static | |
| 95 | + | |
| 96 | +# ---- Sécurité — HTTPS actif ---- | |
| 97 | +JWT_SECRET=${JWT} | |
| 98 | +JWT_EXPIRATION_MINUTES=15 | |
| 99 | +REFRESH_TOKEN_EXPIRATION_DAYS=7 | |
| 100 | +COOKIE_SECURE=true # HTTPS via Nginx | |
| 101 | +COOKIE_SAME_SITE=Lax | |
| 102 | +APP_DEBUG=false | |
| 103 | +RUST_LOG=info | |
| 104 | + | |
| 105 | +# ---- Admin initial ---- | |
| 106 | +ADMIN_USERNAME=admin | |
| 107 | +ADMIN_EMAIL=<acme-email> | |
| 108 | +ADMIN_PASSWORD=${ADMIN_PWD} | |
| 109 | + | |
| 110 | +# ---- Inscription & UI ---- | |
| 111 | +ALLOW_REGISTRATION=false | |
| 112 | +APP_NAME=Gitrust | |
| 113 | +DEFAULT_LOCALE=fr | |
| 114 | + | |
| 115 | +# ---- Email ---- | |
| 116 | +EMAIL_VALIDATION_REQUIRED=false | |
| 117 | +EMAIL_BASE_URL=https://<your-domain> | |
| 118 | + | |
| 119 | +# ---- CI/CD Dagger (worker 3) ---- | |
| 120 | +CI_ENABLED=true | |
| 121 | +CI_MAX_CONCURRENT=4 | |
| 122 | +CI_DEFAULT_TIMEOUT=3600 | |
| 123 | +CI_WORKSPACE_PATH=/tmp/gitrust-ci | |
| 124 | +CI_REMOTE_HOST=localhost | |
| 125 | + | |
| 126 | +# ---- Worker import ---- | |
| 127 | +IMPORT_MAX_CONCURRENT=2 | |
| 128 | +IMPORT_TIMEOUT_SECS=1800 | |
| 129 | +DB_WORKER_POOL_SIZE=4 | |
| 130 | +EOF | |
| 131 | + | |
| 132 | +chmod 600 .env.production | |
| 133 | +echo "ADMIN_PASSWORD = ${ADMIN_PWD}" | |
| 134 | +echo "POSTGRES_PASSWORD = ${PG_PWD}" | |
| 135 | +``` | |
| 136 | + | |
| 137 | +> **Critique** : noter `ADMIN_PASSWORD` et `POSTGRES_PASSWORD` dans un gestionnaire de mots de passe. | |
| 138 | + | |
| 139 | +--- | |
| 140 | + | |
| 141 | +## Phase 1 — Préparer la cible : déplacer sshd système sur :2022 | |
| 142 | + | |
| 143 | +**À faire en gardant deux sessions SSH simultanées**. | |
| 144 | + | |
| 145 | +### 1.pre. Diagnostic de l'état initial | |
| 146 | + | |
| 147 | +#### 1.pre.1 — Trouver le port SSH ouvert depuis le poste de build | |
| 148 | + | |
| 149 | +```bash | |
| 150 | +# Depuis votre poste (sans être connecté) : | |
| 151 | +for p in 22 2022 2222 2200 22022; do | |
| 152 | + timeout 3 bash -c "echo >/dev/tcp/<your-server-ip>/$p" 2>/dev/null \ | |
| 153 | + && echo "Port $p : OUVERT" \ | |
| 154 | + || echo "Port $p : fermé/filtré" | |
| 155 | +done | |
| 156 | +``` | |
| 157 | + | |
| 158 | +#### 1.pre.2 — Se connecter sur le port détecté | |
| 159 | + | |
| 160 | +```bash | |
| 161 | +# Cas le plus probable : sshd est sur :22 par défaut | |
| 162 | +ssh <admin-user>@<your-server-ip> | |
| 163 | +``` | |
| 164 | + | |
| 165 | +#### 1.pre.3 — Une fois connecté, vérifier l'état sshd actuel | |
| 166 | + | |
| 167 | +```bash | |
| 168 | +# Sur quel(s) port(s) sshd écoute-t-il ? | |
| 169 | +sudo ss -tlnp | grep sshd | |
| 170 | + | |
| 171 | +# Contenu de la config | |
| 172 | +sudo grep -riE '^[[:space:]]*Port[[:space:]]+[0-9]+' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2>/dev/null | |
| 173 | + | |
| 174 | +# Statut du service | |
| 175 | +sudo systemctl status ssh --no-pager | |
| 176 | +``` | |
| 177 | + | |
| 178 | +### 1a. Session 1 : modifier la config sshd | |
| 179 | + | |
| 180 | +```bash | |
| 181 | +ssh <admin-user>@<your-server-ip> | |
| 182 | + | |
| 183 | +# Éditer /etc/ssh/sshd_config | |
| 184 | +sudo tee /etc/ssh/sshd_config.d/99-gitrust.conf <<'EOF' | |
| 185 | +Port 2022 | |
| 186 | +EOF | |
| 187 | + | |
| 188 | +# Vérifier la syntaxe | |
| 189 | +sudo sshd -t | |
| 190 | + | |
| 191 | +# Si OK, reload (ne déconnecte pas la session courante) | |
| 192 | +sudo systemctl reload ssh | |
| 193 | +sudo ss -tlnp | grep -E ':22\b|:2022\b' | |
| 194 | +# Attendu : sshd écoute sur 22 ET 2022 | |
| 195 | +``` | |
| 196 | + | |
| 197 | +### 1b. Session 2 : valider le nouveau port | |
| 198 | + | |
| 199 | +Depuis le poste de build, **dans un autre terminal** : | |
| 200 | + | |
| 201 | +```bash | |
| 202 | +ssh -p 2022 <admin-user>@<your-server-ip> 'echo "OK port 2022"' | |
| 203 | +# Doit afficher : OK port 2022 | |
| 204 | +``` | |
| 205 | + | |
| 206 | +### 1c. (Plus tard, après Phase 5) Fermer le port 22 du sshd système | |
| 207 | + | |
| 208 | +Une fois `nginx stream :22` actif et testé : | |
| 209 | + | |
| 210 | +```bash | |
| 211 | +ssh -p 2022 <admin-user>@<your-server-ip> | |
| 212 | +sudo sed -i 's/^Port 22$/# Port 22 (déplacé vers 2022, :22 utilisé par nginx stream)/' /etc/ssh/sshd_config | |
| 213 | +sudo systemctl restart ssh | |
| 214 | +``` | |
| 215 | + | |
| 216 | +### 1d. Firewall | |
| 217 | + | |
| 218 | +```bash | |
| 219 | +ssh -p 2022 <admin-user>@<your-server-ip> bash <<'EOF' | |
| 220 | +sudo ufw allow 80/tcp comment 'HTTP ACME + redirect' | |
| 221 | +sudo ufw allow 443/tcp comment 'HTTPS Gitrust' | |
| 222 | +sudo ufw allow 22/tcp comment 'SSH Git via nginx stream' | |
| 223 | +sudo ufw allow 2022/tcp comment 'SSH admin système' | |
| 224 | +sudo ufw status numbered | |
| 225 | +EOF | |
| 226 | +``` | |
| 227 | + | |
| 228 | +> Mettre à jour `~/.ssh/config` côté poste dev : | |
| 229 | +> ``` | |
| 230 | +> Host gitrust-host | |
| 231 | +> HostName <your-server-ip> | |
| 232 | +> User <admin-user> | |
| 233 | +> Port 2022 | |
| 234 | +> ``` | |
| 235 | +> Le reste du plan utilise `ssh gitrust-host`. | |
| 236 | + | |
| 237 | +--- | |
| 238 | + | |
| 239 | +## Phase 2 — PostgreSQL (Docker, loopback) | |
| 240 | + | |
| 241 | +```bash | |
| 242 | +scp -P 2022 database/docker-compose.yml <admin-user>@<your-server-ip>:/tmp/pg-compose.yml | |
| 243 | + | |
| 244 | +ssh gitrust-host bash <<EOF | |
| 245 | +sudo mkdir -p /opt/gitrust/database | |
| 246 | +sudo mv /tmp/pg-compose.yml /opt/gitrust/database/docker-compose.yml | |
| 247 | +echo 'POSTGRES_PASSWORD=${PG_PWD}' | sudo tee /opt/gitrust/database/.env >/dev/null | |
| 248 | +sudo chmod 600 /opt/gitrust/database/.env | |
| 249 | +cd /opt/gitrust/database && sudo docker compose up -d | |
| 250 | +sudo docker compose ps | |
| 251 | +EOF | |
| 252 | +``` | |
| 253 | + | |
| 254 | +Remplacer `${PG_PWD}` par la valeur réelle. Vérifier que le port n'est pas exposé publiquement : | |
| 255 | + | |
| 256 | +```bash | |
| 257 | +ssh gitrust-host 'sudo ss -tlnp | grep 5432' | |
| 258 | +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0 | |
| 259 | +``` | |
| 260 | + | |
| 261 | +--- | |
| 262 | + | |
| 263 | +## Phase 3 — Build + déploiement gitrust via `deploy.sh` | |
| 264 | + | |
| 265 | +### 3a. Préparer `deployment/deploy.conf` | |
| 266 | + | |
| 267 | +```bash | |
| 268 | +cp deployment/deploy.conf.example deployment/deploy.conf | |
| 269 | +# Éditer DEPLOY_TARGET=gitrust-host, DEPLOY_REMOTE_PATH=/opt/gitrust, DEPLOY_FQDN_INITIAL=<your-domain> | |
| 270 | +$EDITOR deployment/deploy.conf | |
| 271 | +chmod 600 deployment/deploy.conf | |
| 272 | +``` | |
| 273 | + | |
| 274 | +### 3b. Validation du build seul (optionnel) | |
| 275 | + | |
| 276 | +```bash | |
| 277 | +BUILD_ONLY=1 ./deployment/deploy.sh | |
| 278 | +``` | |
| 279 | + | |
| 280 | +### 3c. Déploiement | |
| 281 | + | |
| 282 | +```bash | |
| 283 | +# Sans argument : utilise DEPLOY_TARGET du deploy.conf (gitrust-host via ~/.ssh/config, port 2022) | |
| 284 | +./deployment/deploy.sh | |
| 285 | +``` | |
| 286 | + | |
| 287 | +Ce que fait `deploy.sh` : `cargo build --release`, `tailwindcss --minify`, adapte `gitrust.service` + `.env`, rsync, crée user `gitrust`, installe systemd, restart. | |
| 288 | + | |
| 289 | +À la fin : gitrust écoute sur `127.0.0.1:4000` (HTTP) et `127.0.0.1:2222` (SSH). | |
| 290 | + | |
| 291 | +```bash | |
| 292 | +ssh gitrust-host 'sudo systemctl status gitrust --no-pager && sudo ss -tlnp | grep -E "4000|2222"' | |
| 293 | +# Attendu : 127.0.0.1:4000 et 127.0.0.1:2222 (PAS 0.0.0.0) | |
| 294 | +``` | |
| 295 | + | |
| 296 | +--- | |
| 297 | + | |
| 298 | +## Phase 4 — Nginx HTTP + Let's Encrypt | |
| 299 | + | |
| 300 | +### 4a. Installer nginx + certbot | |
| 301 | + | |
| 302 | +```bash | |
| 303 | +ssh gitrust-host bash <<'EOF' | |
| 304 | +sudo apt update | |
| 305 | +sudo apt install -y nginx libnginx-mod-stream certbot python3-certbot-nginx | |
| 306 | +sudo systemctl enable --now nginx | |
| 307 | +EOF | |
| 308 | +``` | |
| 309 | + | |
| 310 | +### 4b. Déployer la conf Nginx | |
| 311 | + | |
| 312 | +```bash | |
| 313 | +scp -P 2022 deployment/nginx-gitrust.conf <admin-user>@<your-server-ip>:/tmp/gitrust-nginx.conf | |
| 314 | + | |
| 315 | +ssh gitrust-host bash <<EOF | |
| 316 | +sudo sed -i 's/gitrust.nuage.ebii/<your-domain>/g' /tmp/gitrust-nginx.conf | |
| 317 | +sudo mv /tmp/gitrust-nginx.conf /etc/nginx/sites-available/gitrust | |
| 318 | +sudo ln -sf /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust | |
| 319 | +sudo rm -f /etc/nginx/sites-enabled/default | |
| 320 | +sudo mkdir -p /var/www/html/.well-known/acme-challenge | |
| 321 | +sudo nginx -t && sudo systemctl reload nginx | |
| 322 | +EOF | |
| 323 | +``` | |
| 324 | + | |
| 325 | +### 4c. Émettre le certificat Let's Encrypt | |
| 326 | + | |
| 327 | +```bash | |
| 328 | +ssh gitrust-host 'sudo certbot --nginx \ | |
| 329 | + -d <your-domain> \ | |
| 330 | + --email <acme-email> \ | |
| 331 | + --agree-tos \ | |
| 332 | + --no-eff-email \ | |
| 333 | + --redirect' | |
| 334 | +``` | |
| 335 | + | |
| 336 | +### 4d. Vérifier le renouvellement automatique | |
| 337 | + | |
| 338 | +```bash | |
| 339 | +ssh gitrust-host 'sudo systemctl list-timers | grep certbot' | |
| 340 | +ssh gitrust-host 'sudo certbot renew --dry-run' | |
| 341 | +``` | |
| 342 | + | |
| 343 | +### 4e. Test HTTPS | |
| 344 | + | |
| 345 | +```bash | |
| 346 | +curl -I https://<your-domain>/ | |
| 347 | +# Attendu : HTTP/2 200 (ou 302 vers /login) | |
| 348 | + | |
| 349 | +# Vérifier HSTS | |
| 350 | +curl -sI https://<your-domain>/ | grep -i strict-transport | |
| 351 | +``` | |
| 352 | + | |
| 353 | +--- | |
| 354 | + | |
| 355 | +## Phase 5 — Exposer SSH Git sur :22 via Nginx stream | |
| 356 | + | |
| 357 | +### 5a. Ajouter le bloc stream | |
| 358 | + | |
| 359 | +```bash | |
| 360 | +ssh gitrust-host bash <<'EOF' | |
| 361 | +sudo nginx -V 2>&1 | grep -o with-stream | |
| 362 | + | |
| 363 | +sudo tee -a /etc/nginx/nginx.conf <<'NGINX' | |
| 364 | + | |
| 365 | +# --- Gitrust SSH (proxy :22 -> :2222) ----------------------------------------- | |
| 366 | +stream { | |
| 367 | + upstream gitrust_ssh { | |
| 368 | + server 127.0.0.1:2222; | |
| 369 | + } | |
| 370 | + server { | |
| 371 | + listen 22; | |
| 372 | + listen [::]:22; | |
| 373 | + proxy_pass gitrust_ssh; | |
| 374 | + proxy_timeout 1h; | |
| 375 | + proxy_connect_timeout 30s; | |
| 376 | + error_log /var/log/nginx/gitrust-ssh.log; | |
| 377 | + } | |
| 378 | +} | |
| 379 | +NGINX | |
| 380 | + | |
| 381 | +sudo nginx -t && sudo systemctl restart nginx | |
| 382 | +sudo ss -tlnp | grep -E ':22\b|:2222\b' | |
| 383 | +# Attendu : nginx :22, gitrust :2222 (loopback) | |
| 384 | +EOF | |
| 385 | +``` | |
| 386 | + | |
| 387 | +### 5b. Désactiver sshd système sur :22 (Phase 1c) | |
| 388 | + | |
| 389 | +```bash | |
| 390 | +ssh -p 2022 <admin-user>@<your-server-ip> bash <<'EOF' | |
| 391 | +sudo sed -i 's/^Port 22$/# Port 22 déplacé/' /etc/ssh/sshd_config 2>/dev/null || true | |
| 392 | +sudo systemctl restart ssh | |
| 393 | +sudo ss -tlnp | grep -E ':22\b|:2022\b' | |
| 394 | +# Attendu : nginx :22, sshd :2022 — plus de sshd:22 | |
| 395 | +EOF | |
| 396 | +``` | |
| 397 | + | |
| 398 | +### 5c. Test clone Git | |
| 399 | + | |
| 400 | +```bash | |
| 401 | +# Dans l'UI gitrust : Settings -> SSH keys -> coller ~/.ssh/id_ed25519.pub | |
| 402 | +# Créer un repo test admin/test-deploy via UI | |
| 403 | + | |
| 404 | +git clone git@<your-domain>:admin/test-deploy.git /tmp/test-deploy | |
| 405 | +cd /tmp/test-deploy | |
| 406 | +echo "# test" > README.md | |
| 407 | +git -c user.email=<acme-email> -c user.name=admin add . && \ | |
| 408 | + git -c user.email=<acme-email> -c user.name=admin commit -m "test deploy" && \ | |
| 409 | + git push origin main | |
| 410 | +``` | |
| 411 | + | |
| 412 | +--- | |
| 413 | + | |
| 414 | +## Phase 6 — Vérifications globales | |
| 415 | + | |
| 416 | +```bash | |
| 417 | +# Service systemd | |
| 418 | +ssh gitrust-host 'sudo systemctl status gitrust --no-pager' | |
| 419 | + | |
| 420 | +# Logs (recherche d'erreurs) | |
| 421 | +ssh gitrust-host 'sudo journalctl -u gitrust -n 100 --no-pager | grep -iE "error|warn|fail"' | |
| 422 | + | |
| 423 | +# Ports d'écoute (vue d'ensemble) | |
| 424 | +ssh gitrust-host 'sudo ss -tlnp' | |
| 425 | +# Attendu : | |
| 426 | +# :22 nginx | |
| 427 | +# :80 nginx | |
| 428 | +# :443 nginx | |
| 429 | +# :2022 sshd système | |
| 430 | +# 127.0.0.1:2222 gitrust | |
| 431 | +# 127.0.0.1:4000 gitrust | |
| 432 | +# 127.0.0.1:5432 docker-proxy | |
| 433 | + | |
| 434 | +# Renouvellement TLS automatique | |
| 435 | +ssh gitrust-host 'sudo systemctl status certbot.timer --no-pager' | |
| 436 | + | |
| 437 | +# Test E2E | |
| 438 | +curl -I https://<your-domain>/login | |
| 439 | +ssh -T git@<your-domain> || true # Banner SSH russh attendu | |
| 440 | +``` | |
| 441 | + | |
| 442 | +--- | |
| 443 | + | |
| 444 | +## Phase 7 — Durcissement : Fail2ban | |
| 445 | + | |
| 446 | +Voir `administration_manual/how-to/durcir-avec-fail2ban.md` pour la configuration complète. | |
| 447 | + | |
| 448 | +### 7a. Installation | |
| 449 | + | |
| 450 | +```bash | |
| 451 | +ssh gitrust-host bash <<'EOF' | |
| 452 | +sudo apt install -y fail2ban | |
| 453 | +sudo systemctl enable --now fail2ban | |
| 454 | +EOF | |
| 455 | +``` | |
| 456 | + | |
| 457 | +### 7b. Configuration minimale rapide | |
| 458 | + | |
| 459 | +```bash | |
| 460 | +ssh gitrust-host sudo tee /etc/fail2ban/jail.local <<'EOF' | |
| 461 | +[DEFAULT] | |
| 462 | +backend = systemd | |
| 463 | +bantime = 1h | |
| 464 | +findtime = 10m | |
| 465 | +maxretry = 5 | |
| 466 | +ignoreip = 127.0.0.1/8 ::1 | |
| 467 | +banaction = ufw | |
| 468 | +banaction_allports = ufw | |
| 469 | + | |
| 470 | +[sshd] | |
| 471 | +enabled = true | |
| 472 | +port = 2022 | |
| 473 | +filter = sshd | |
| 474 | +backend = %(sshd_backend)s | |
| 475 | +logpath = %(sshd_log)s | |
| 476 | +maxretry = 3 | |
| 477 | + | |
| 478 | +[nginx-http-auth] | |
| 479 | +enabled = true | |
| 480 | +port = http,https | |
| 481 | +filter = nginx-http-auth | |
| 482 | +logpath = /var/log/nginx/gitrust.error.log | |
| 483 | + | |
| 484 | +[gitrust-login] | |
| 485 | +enabled = true | |
| 486 | +port = http,https | |
| 487 | +filter = gitrust-login | |
| 488 | +logpath = /var/log/nginx/gitrust.access.log | |
| 489 | +maxretry = 5 | |
| 490 | + | |
| 491 | +[gitrust-ssh] | |
| 492 | +enabled = true | |
| 493 | +port = 22,2222 | |
| 494 | +filter = gitrust-ssh | |
| 495 | +backend = systemd | |
| 496 | +journalmatch = _SYSTEMD_UNIT=gitrust.service | |
| 497 | +maxretry = 5 | |
| 498 | + | |
| 499 | +[recidive] | |
| 500 | +enabled = true | |
| 501 | +logpath = /var/log/fail2ban.log | |
| 502 | +banaction = %(banaction_allports)s | |
| 503 | +bantime = 1w | |
| 504 | +findtime = 1d | |
| 505 | +maxretry = 3 | |
| 506 | +EOF | |
| 507 | +``` | |
| 508 | + | |
| 509 | +Créer les filtres gitrust-login et gitrust-ssh, puis : | |
| 510 | + | |
| 511 | +```bash | |
| 512 | +ssh gitrust-host 'sudo systemctl restart fail2ban && sudo fail2ban-client status' | |
| 513 | +``` | |
| 514 | + | |
| 515 | +--- | |
| 516 | + | |
| 517 | +## Phase 8 — Mise à jour vers un nouveau domaine (quand DNS prêt) | |
| 518 | + | |
| 519 | +### 8a. Ajouter le SAN au certificat existant | |
| 520 | + | |
| 521 | +```bash | |
| 522 | +ssh gitrust-host 'sudo certbot --nginx --expand \ | |
| 523 | + -d <your-domain> \ | |
| 524 | + -d <new-domain> \ | |
| 525 | + --email <acme-email> \ | |
| 526 | + --agree-tos --no-eff-email' | |
| 527 | +``` | |
| 528 | + | |
| 529 | +### 8b. Mettre à jour la conf Nginx | |
| 530 | + | |
| 531 | +```bash | |
| 532 | +ssh gitrust-host bash <<EOF | |
| 533 | +sudo sed -i 's/server_name <your-domain>;/server_name <your-domain> <new-domain>;/g' /etc/nginx/sites-available/gitrust | |
| 534 | +sudo nginx -t && sudo systemctl reload nginx | |
| 535 | +EOF | |
| 536 | +``` | |
| 537 | + | |
| 538 | +### 8c. Mettre à jour `.env.production` et redéployer | |
| 539 | + | |
| 540 | +```bash | |
| 541 | +sed -i 's|SSH_PUBLIC_HOST=.*|SSH_PUBLIC_HOST=<new-domain>|' .env.production | |
| 542 | +sed -i 's|EMAIL_BASE_URL=.*|EMAIL_BASE_URL=https://<new-domain>|' .env.production | |
| 543 | +./deployment/deploy.sh gitrust-host | |
| 544 | +``` | |
| 545 | + | |
| 546 | +--- | |
| 547 | + | |
| 548 | +## Phase 9 — Mises à jour ultérieures | |
| 549 | + | |
| 550 | +```bash | |
| 551 | +git pull | |
| 552 | +SKIP_ENV=1 SKIP_DB=1 ./deployment/deploy.sh | |
| 553 | +``` | |
| 554 | + | |
| 555 | +--- | |
| 556 | + | |
| 557 | +## Dépannage | |
| 558 | + | |
| 559 | +| Symptôme | Diagnostic | Fix | | |
| 560 | +|---|---|---| | |
| 561 | +| Lockout SSH après reload sshd | — | Console physique / KVM IPMI | | |
| 562 | +| Cert Let's Encrypt échoue (`Connection refused`) | `dig +short <your-domain>` ≠ IP publique | Corriger DNS, ou vérifier que :80 traverse bien le NAT | | |
| 563 | +| Cert échoue (`unauthorized`) | Nginx `:80` ne répond pas sur `/.well-known/acme-challenge/` | `curl http://<your-domain>/.well-known/acme-challenge/test` doit ne pas rediriger en 301 | | |
| 564 | +| Login boucle sur `/login` malgré HTTPS | `grep COOKIE_SECURE /opt/gitrust/.env` | Doit être `true` ; vérifier que Nginx forward bien `X-Forwarded-Proto https` | | |
| 565 | +| Push SSH `Connection closed` | `journalctl -u gitrust \| grep ssh` | Vérifier que gitrust écoute bien `127.0.0.1:2222` et que nginx stream forward | | |
| 566 | +| `nginx -t` : `unknown directive "stream"` | Module non chargé | `sudo apt install libnginx-mod-stream` puis `systemctl restart nginx` | | |
| 567 | +| Mixed content HTTPS | Templates qui hardcodent `http://` | Vérifier `EMAIL_BASE_URL=https://...` et headers `X-Forwarded-Proto` | | |
| 568 | +| Push gros repo timeout | Logs nginx `client intended to send too large body` | Augmenter `client_max_body_size 2G` (déjà fait pour `.git/`) | | |
| 569 | + | |
| 570 | +--- | |
| 571 | + | |
| 572 | +## Récapitulatif des ports | |
| 573 | + | |
| 574 | +| Port | Process | Exposition | Rôle | | |
| 575 | +|------|---------|------------|------| | |
| 576 | +| 22 | nginx (stream) | Public | SSH Git → forward vers :2222 | | |
| 577 | +| 80 | nginx | Public | ACME challenge + redirect HTTPS | | |
| 578 | +| 443 | nginx | Public | HTTPS → forward vers :4000 | | |
| 579 | +| 2022 | sshd système | Public | Admin SSH (à restreindre par firewall si possible) | | |
| 580 | +| 2222 | gitrust | Loopback | Backend SSH russh | | |
| 581 | +| 4000 | gitrust | Loopback | Backend HTTP axum | | |
| 582 | +| 5432 | docker-proxy | Loopback | PostgreSQL | |
A
administration_manual/tutorials/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Tutoriels | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
book.toml
+24
-0
@@ -0,0 +1,24 @@
| 1 | +[book] | |
| 2 | +title = "Documentation gitrust" | |
| 3 | +description = "Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust" | |
| 4 | +authors = ["L'équipe gitrust"] | |
| 5 | +language = "fr" | |
| 6 | +# multilingual = true # à activer en même temps que [preprocessor.gettext] (voir plus bas) | |
| 7 | +src = "src" | |
| 8 | + | |
| 9 | +[output.html] | |
| 10 | +default-theme = "light" | |
| 11 | +preferred-dark-theme = "navy" | |
| 12 | +# Lien vers le dépôt de la documentation sur l'instance de démo | |
| 13 | +# TODO : remplacer par l'URL définitive une fois le dépôt public créé | |
| 14 | +edit-url-template = "https://demo.gitrust.eu/gitrust/girust_doc/edit/main/{path}" | |
| 15 | +additional-js = ["theme/mermaid.min.js", "theme/mermaid-init.js"] | |
| 16 | + | |
| 17 | +[preprocessor.mermaid] | |
| 18 | +command = "mdbook-mermaid" | |
| 19 | + | |
| 20 | +# Traduction gettext via mdbook-i18n-helpers | |
| 21 | +# Désactivé tant que le binaire mdbook-xgettext n'est pas installé. | |
| 22 | +# Pour activer : `cargo install mdbook-i18n-helpers` puis décommenter le bloc suivant. | |
| 23 | +# [preprocessor.gettext] | |
| 24 | +# after = ["links"] |
A
book/.nojekyll
+1
-0
@@ -0,0 +1 @@
| 1 | +This file makes sure that Github Pages doesn't process mdBook's output. |
A
book/.omc/state/idle-notif-cooldown.json
+3
-0
@@ -0,0 +1,3 @@
| 1 | +{ | |
| 2 | + "lastSentAt": "2026-04-17T14:23:23.237Z" | |
| 3 | +} | |
| 3 | < \ No newline at end of file |
A
book/404.html
+227
-0
@@ -0,0 +1,227 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Page not found - Documentation gitrust</title> | |
| 7 | + <base href="/"> | |
| 8 | + | |
| 9 | + | |
| 10 | + <!-- Custom HTML head --> | |
| 11 | + | |
| 12 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 13 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 14 | + <meta name="theme-color" content="#ffffff"> | |
| 15 | + | |
| 16 | + <link rel="icon" href="favicon-de23e50b.svg"> | |
| 17 | + <link rel="shortcut icon" href="favicon-8114d1fc.png"> | |
| 18 | + <link rel="stylesheet" href="css/variables-8adf115d.css"> | |
| 19 | + <link rel="stylesheet" href="css/general-2459343d.css"> | |
| 20 | + <link rel="stylesheet" href="css/chrome-ae938929.css"> | |
| 21 | + <link rel="stylesheet" href="css/print-9e4910d8.css" media="print"> | |
| 22 | + | |
| 23 | + <!-- Fonts --> | |
| 24 | + <link rel="stylesheet" href="fonts/fonts-9644e21d.css"> | |
| 25 | + | |
| 26 | + <!-- Highlight.js Stylesheets --> | |
| 27 | + <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css"> | |
| 29 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css"> | |
| 30 | + | |
| 31 | + <!-- Custom theme stylesheets --> | |
| 32 | + | |
| 33 | + | |
| 34 | + <!-- Provide site root and default themes to javascript --> | |
| 35 | + <script> | |
| 36 | + const path_to_root = ""; | |
| 37 | + const default_light_theme = "light"; | |
| 38 | + const default_dark_theme = "navy"; | |
| 39 | + window.path_to_searchindex_js = "searchindex-2e4a517d.js"; | |
| 40 | + </script> | |
| 41 | + <!-- Start loading toc.js asap --> | |
| 42 | + <script src="toc-84dd2703.js"></script> | |
| 43 | + </head> | |
| 44 | + <body> | |
| 45 | + <div id="mdbook-help-container"> | |
| 46 | + <div id="mdbook-help-popup"> | |
| 47 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 48 | + <div> | |
| 49 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 50 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 51 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 52 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + </div> | |
| 56 | + <div id="mdbook-body-container"> | |
| 57 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 58 | + <script> | |
| 59 | + try { | |
| 60 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 61 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 62 | + | |
| 63 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 64 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 65 | + } | |
| 66 | + | |
| 67 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 68 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 69 | + } | |
| 70 | + } catch (e) { } | |
| 71 | + </script> | |
| 72 | + | |
| 73 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 74 | + <script> | |
| 75 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 76 | + let theme; | |
| 77 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 78 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 79 | + const html = document.documentElement; | |
| 80 | + html.classList.remove('light') | |
| 81 | + html.classList.add(theme); | |
| 82 | + html.classList.add("js"); | |
| 83 | + </script> | |
| 84 | + | |
| 85 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 86 | + | |
| 87 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 88 | + <script> | |
| 89 | + let sidebar = null; | |
| 90 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 91 | + if (document.body.clientWidth >= 1080) { | |
| 92 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 93 | + sidebar = sidebar || 'visible'; | |
| 94 | + } else { | |
| 95 | + sidebar = 'hidden'; | |
| 96 | + sidebar_toggle.checked = false; | |
| 97 | + } | |
| 98 | + if (sidebar === 'visible') { | |
| 99 | + sidebar_toggle.checked = true; | |
| 100 | + } else { | |
| 101 | + html.classList.remove('sidebar-visible'); | |
| 102 | + } | |
| 103 | + </script> | |
| 104 | + | |
| 105 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 106 | + <!-- populated by js --> | |
| 107 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 108 | + <noscript> | |
| 109 | + <iframe class="sidebar-iframe-outer" src="toc.html"></iframe> | |
| 110 | + </noscript> | |
| 111 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 112 | + <div class="sidebar-resize-indicator"></div> | |
| 113 | + </div> | |
| 114 | + </nav> | |
| 115 | + | |
| 116 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 117 | + | |
| 118 | + <div class="page"> | |
| 119 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 120 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 121 | + <div class="left-buttons"> | |
| 122 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 123 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 124 | + </label> | |
| 125 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 126 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 127 | + </button> | |
| 128 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 134 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 135 | + </ul> | |
| 136 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 137 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 138 | + </button> | |
| 139 | + </div> | |
| 140 | + | |
| 141 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 142 | + | |
| 143 | + <div class="right-buttons"> | |
| 144 | + <a href="print.html" title="Print this book" aria-label="Print this book"> | |
| 145 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 146 | + </a> | |
| 147 | + | |
| 148 | + </div> | |
| 149 | + </div> | |
| 150 | + | |
| 151 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 152 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 153 | + <div class="search-wrapper"> | |
| 154 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 155 | + <div class="spinner-wrapper"> | |
| 156 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 157 | + </div> | |
| 158 | + </div> | |
| 159 | + </form> | |
| 160 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 161 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 162 | + <ul id="mdbook-searchresults"> | |
| 163 | + </ul> | |
| 164 | + </div> | |
| 165 | + </div> | |
| 166 | + | |
| 167 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 168 | + <script> | |
| 169 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 170 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 171 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 172 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 173 | + }); | |
| 174 | + </script> | |
| 175 | + | |
| 176 | + <div id="mdbook-content" class="content"> | |
| 177 | + <main> | |
| 178 | + <h1 id="document-not-found-404"><a class="header" href="#document-not-found-404">Document not found (404)</a></h1> | |
| 179 | +<p>This URL is invalid, sorry. Please use the navigation bar or search to continue.</p> | |
| 180 | + | |
| 181 | + </main> | |
| 182 | + | |
| 183 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 184 | + <!-- Mobile navigation buttons --> | |
| 185 | + | |
| 186 | + | |
| 187 | + <div style="clear: both"></div> | |
| 188 | + </nav> | |
| 189 | + </div> | |
| 190 | + </div> | |
| 191 | + | |
| 192 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 193 | + | |
| 194 | + </nav> | |
| 195 | + | |
| 196 | + </div> | |
| 197 | + | |
| 198 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 199 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 200 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 201 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 202 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + <script> | |
| 207 | + window.playground_copyable = true; | |
| 208 | + </script> | |
| 209 | + | |
| 210 | + | |
| 211 | + <script src="elasticlunr-ef4e11c1.min.js"></script> | |
| 212 | + <script src="mark-09e88c2c.min.js"></script> | |
| 213 | + <script src="searcher-c2a407aa.js"></script> | |
| 214 | + | |
| 215 | + <script src="clipboard-1626706a.min.js"></script> | |
| 216 | + <script src="highlight-abc7f01d.js"></script> | |
| 217 | + <script src="book-a0b12cfe.js"></script> | |
| 218 | + | |
| 219 | + <!-- Custom JS scripts --> | |
| 220 | + <script src="theme/mermaid-eefea253.min.js"></script> | |
| 221 | + <script src="theme/mermaid-init-ccf746f1.js"></script> | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + </div> | |
| 226 | + </body> | |
| 227 | +</html> |
A
book/administration_manual/explanation/architecture-globale.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Architecture globale - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/explanation/architecture-globale.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="architecture-globale"><a class="header" href="#architecture-globale">Architecture globale</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/explanation/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/explanation/modele-deploiement.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/explanation/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/explanation/modele-deploiement.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/explanation/ci-dagger.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>CI Dagger : Easy Mode vs Power Mode - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/explanation/ci-dagger.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="ci-dagger--easy-mode-vs-power-mode"><a class="header" href="#ci-dagger--easy-mode-vs-power-mode">CI Dagger : Easy Mode vs Power Mode</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/explanation/modele-deploiement.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/explanation/strategie-sauvegarde.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/explanation/modele-deploiement.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/explanation/strategie-sauvegarde.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/explanation/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Explication - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/explanation/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="explication"><a class="header" href="#explication">Explication</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/reference/conformite-anssi-pa074.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/explanation/architecture-globale.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/reference/conformite-anssi-pa074.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/explanation/architecture-globale.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/explanation/modele-deploiement.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Modèle de déploiement - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/explanation/modele-deploiement.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="modèle-de-déploiement"><a class="header" href="#modèle-de-déploiement">Modèle de déploiement</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/explanation/architecture-globale.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/explanation/ci-dagger.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/explanation/architecture-globale.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/explanation/ci-dagger.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/explanation/strategie-sauvegarde.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Stratégie de sauvegarde - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/explanation/strategie-sauvegarde.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="stratégie-de-sauvegarde"><a class="header" href="#stratégie-de-sauvegarde">Stratégie de sauvegarde</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/explanation/ci-dagger.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/explanation/ci-dagger.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/how-to/auditer-instance.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Auditer une instance - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/auditer-instance.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="auditer-une-instance"><a class="header" href="#auditer-une-instance">Auditer une instance</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/how-to/gerer-utilisateurs-admin.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/reference/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/how-to/gerer-utilisateurs-admin.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/reference/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/how-to/configurer-ci-runner-remote.html
+479
-0
@@ -0,0 +1,479 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Configurer un runner CI distant - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/configurer-ci-runner-remote.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="configurer-le-runner-ci-distant"><a class="header" href="#configurer-le-runner-ci-distant">Configurer le runner CI distant</a></h1> | |
| 181 | +<p>Guide d’usage du script qui provisionne une machine distante pour exécuter les pipelines CI/CD de gitrust via SSH + rsync + Dagger.</p> | |
| 182 | +<hr> | |
| 183 | +<h2 id="1-rôle-du-script"><a class="header" href="#1-rôle-du-script">1. Rôle du script</a></h2> | |
| 184 | +<p><code>deployment/setup-remote-ci.sh</code> (disponible dans le dépôt source gitrust) prépare <strong>un serveur de build distant</strong> utilisé par le worker CI de gitrust. Il automatise 6 étapes :</p> | |
| 185 | +<ol> | |
| 186 | +<li>Vérifie la connectivité SSH vers le runner</li> | |
| 187 | +<li>Installe <strong>Docker</strong> (<code>curl https://get.docker.com | sh</code>) s’il est absent</li> | |
| 188 | +<li>Installe <strong>Dagger CLI</strong> (<code>curl https://dl.dagger.io/dagger/install.sh | sh</code>) s’il est absent</li> | |
| 189 | +<li>Crée le répertoire de travail distant (<code>CI_REMOTE_PATH</code>)</li> | |
| 190 | +<li>Synchronise le module <code>deployment/ci-engine/</code> (mode CI Easy) via <code>rsync -az --delete</code></li> | |
| 191 | +<li>Smoke test : affiche <code>docker --version</code> et <code>dagger version</code></li> | |
| 192 | +</ol> | |
| 193 | +<p>Le script est <strong>idempotent</strong> : rejoue sans dommage, skip ce qui existe déjà.</p> | |
| 194 | +<hr> | |
| 195 | +<h2 id="2-quand-lutiliser"><a class="header" href="#2-quand-lutiliser">2. Quand l’utiliser</a></h2> | |
| 196 | +<div class="table-wrapper"> | |
| 197 | +<table> | |
| 198 | +<thead> | |
| 199 | +<tr><th>Scénario</th><th>Besoin de <code>setup-remote-ci.sh</code> ?</th></tr> | |
| 200 | +</thead> | |
| 201 | +<tbody> | |
| 202 | +<tr><td>Dev local, CI sur la même machine que gitrust (<code>CI_REMOTE_HOST=localhost</code>)</td><td><strong>Non</strong> — Docker et Dagger déjà installés localement, le <code>ci-engine/</code> est lu depuis <code>deployment/ci-engine/</code> directement</td></tr> | |
| 203 | +<tr><td>Prod on-premise, un seul serveur (gitrust + CI colocalisés)</td><td><strong>Non</strong> — idem, un simple <code>curl get.docker.com | sh</code> suffit sur le serveur gitrust</td></tr> | |
| 204 | +<tr><td>Prod avec <strong>runner CI dédié</strong> (machine séparée)</td><td><strong>OUI</strong> — c’est le cas cible de ce script</td></tr> | |
| 205 | +<tr><td>Prod avec plusieurs instances gitrust partageant un runner</td><td><strong>OUI</strong> — le runner est provisionné une fois, chaque instance pointe dessus</td></tr> | |
| 206 | +<tr><td>CI dans Kubernetes / Nomad / runner managé cloud</td><td><strong>Non</strong> — ce script est pensé pour une VM Debian/Ubuntu classique</td></tr> | |
| 207 | +</tbody> | |
| 208 | +</table> | |
| 209 | +</div> | |
| 210 | +<hr> | |
| 211 | +<h2 id="3-architecture-cible"><a class="header" href="#3-architecture-cible">3. Architecture cible</a></h2> | |
| 212 | +<pre><code>+---------------------+ SSH + rsync +-----------------------+ | |
| 213 | +| Gitrust (web+SSH) |---------------------------| CI Runner (distant) | | |
| 214 | +| <your-server-ip> | CI_REMOTE_HOST/USER/KEY | <ci-runner-ip> | | |
| 215 | +| | | | | |
| 216 | +| Worker CI Tokio | push .gitrust-ci.yml | /opt/gitrust-ci/ | | |
| 217 | +| (dans gitrust.bin) | + code source checkout | ├── ci-engine/ | | |
| 218 | +| | | └── workspaces/ | | |
| 219 | +| | dagger call ... | | | |
| 220 | +| | | Docker + Dagger CLI | | |
| 221 | ++---------------------+ +-----------------------+ | |
| 222 | +</code></pre> | |
| 223 | +<p>Le worker CI de gitrust (tâche Tokio dans le binaire principal) ne fait <strong>pas tourner</strong> Docker localement — il délègue au runner via SSH. Cela permet d’isoler les workloads CPU/RAM gourmands (builds Rust, Node, Docker) du process web de gitrust.</p> | |
| 224 | +<hr> | |
| 225 | +<h2 id="4-pré-requis"><a class="header" href="#4-pré-requis">4. Pré-requis</a></h2> | |
| 226 | +<h3 id="sur-la-machine-dexécution-là-où-on-lance-le-script"><a class="header" href="#sur-la-machine-dexécution-là-où-on-lance-le-script">Sur la machine d’exécution (là où on lance le script)</a></h3> | |
| 227 | +<div class="table-wrapper"> | |
| 228 | +<table> | |
| 229 | +<thead> | |
| 230 | +<tr><th>Outil</th><th>Rôle</th></tr> | |
| 231 | +</thead> | |
| 232 | +<tbody> | |
| 233 | +<tr><td><code>bash</code> ≥ 4</td><td>Interpréteur</td></tr> | |
| 234 | +<tr><td><code>ssh</code>, <code>rsync</code></td><td>Transport et synchro</td></tr> | |
| 235 | +<tr><td><code>ssh-agent</code> chargé <strong>ou</strong> <code>CI_REMOTE_SSH_KEY</code> défini</td><td>Auth SSH sans mot de passe interactif (<code>BatchMode=yes</code>)</td></tr> | |
| 236 | +<tr><td>Fichier <code>.env</code> avec les variables CI_REMOTE_*</td><td>Config (voir section 5)</td></tr> | |
| 237 | +</tbody> | |
| 238 | +</table> | |
| 239 | +</div> | |
| 240 | +<h3 id="sur-le-runner-distant"><a class="header" href="#sur-le-runner-distant">Sur le runner distant</a></h3> | |
| 241 | +<div class="table-wrapper"> | |
| 242 | +<table> | |
| 243 | +<thead> | |
| 244 | +<tr><th>Pré-requis</th><th>Pourquoi</th></tr> | |
| 245 | +</thead> | |
| 246 | +<tbody> | |
| 247 | +<tr><td>OS Linux récent (Debian 12+, Ubuntu 22.04+)</td><td>Docker install script compatible</td></tr> | |
| 248 | +<tr><td>User avec <code>sudo</code> passwordless <strong>ou</strong> droits <code>docker</code></td><td><code>get.docker.com</code> fait <code>sudo</code> en interne</td></tr> | |
| 249 | +<tr><td>Clé SSH publique du user local dans <code>~/.ssh/authorized_keys</code></td><td>Auth SSH non-interactive</td></tr> | |
| 250 | +<tr><td>Réseau sortant autorisé vers <code>get.docker.com</code> et <code>dl.dagger.io</code></td><td>Installation des binaires</td></tr> | |
| 251 | +<tr><td>Au minimum ~5 Go libres dans <code>CI_REMOTE_PATH</code></td><td>Images Docker + workspaces</td></tr> | |
| 252 | +</tbody> | |
| 253 | +</table> | |
| 254 | +</div> | |
| 255 | +<hr> | |
| 256 | +<h2 id="5-variables-denvironnement-attendues-le-env"><a class="header" href="#5-variables-denvironnement-attendues-le-env">5. Variables d’environnement attendues (le <code>.env</code>)</a></h2> | |
| 257 | +<p>Le script <strong>source un fichier <code>.env</code></strong> dont le chemin est passé en argument, ou par défaut <code>../.env</code> (relatif au script, donc <code><racine_projet>/.env</code>).</p> | |
| 258 | +<h3 id="tableau-des-variables"><a class="header" href="#tableau-des-variables">Tableau des variables</a></h3> | |
| 259 | +<div class="table-wrapper"> | |
| 260 | +<table> | |
| 261 | +<thead> | |
| 262 | +<tr><th>Variable</th><th>Obligatoire</th><th>Défaut</th><th>Description</th></tr> | |
| 263 | +</thead> | |
| 264 | +<tbody> | |
| 265 | +<tr><td><code>CI_REMOTE_HOST</code></td><td><strong>OUI</strong></td><td>—</td><td>Hostname ou IP du runner (ex: <code>ci-runner.internal</code>)</td></tr> | |
| 266 | +<tr><td><code>CI_REMOTE_USER</code></td><td>non</td><td><code>$(whoami)</code> (user courant)</td><td>Compte SSH sur le runner</td></tr> | |
| 267 | +<tr><td><code>CI_REMOTE_SSH_PORT</code></td><td>non</td><td><code>22</code></td><td>Port SSH du runner</td></tr> | |
| 268 | +<tr><td><code>CI_REMOTE_PATH</code></td><td>non</td><td><code>/opt/gitrust-ci</code></td><td>Répertoire de travail distant (créé par le script)</td></tr> | |
| 269 | +<tr><td><code>CI_REMOTE_SSH_KEY</code></td><td>non</td><td>— (ssh-agent)</td><td>Chemin d’une clé privée SSH spécifique</td></tr> | |
| 270 | +</tbody> | |
| 271 | +</table> | |
| 272 | +</div> | |
| 273 | +<p>Ces variables sont les <strong>mêmes</strong> que celles lues par gitrust au runtime. Centraliser dans <code>.env</code> évite les divergences entre le provisionnement et le runtime.</p> | |
| 274 | +<h3 id="exemple-minimal-de-env-runner-dédié"><a class="header" href="#exemple-minimal-de-env-runner-dédié">Exemple minimal de <code>.env</code> (runner dédié)</a></h3> | |
| 275 | +<pre><code class="language-bash"># --- CI runner distant --- | |
| 276 | +CI_REMOTE_HOST=<ci-runner-ip> | |
| 277 | +CI_REMOTE_USER=ci-runner | |
| 278 | +CI_REMOTE_SSH_PORT=22 | |
| 279 | +CI_REMOTE_PATH=/opt/gitrust-ci | |
| 280 | +CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/ci_runner_ed25519 | |
| 281 | +</code></pre> | |
| 282 | +<h3 id="exemple-env-complet-coexistant-avec-config-gitrust"><a class="header" href="#exemple-env-complet-coexistant-avec-config-gitrust">Exemple <code>.env</code> complet coexistant avec config gitrust</a></h3> | |
| 283 | +<pre><code class="language-bash">DATABASE_URL=postgres://... | |
| 284 | +JWT_SECRET=... | |
| 285 | +# ... (voir .env.example pour le reste) | |
| 286 | + | |
| 287 | +# --- CI/CD (lu par gitrust ET par setup-remote-ci.sh) --- | |
| 288 | +CI_ENABLED=true | |
| 289 | +CI_MAX_CONCURRENT=4 | |
| 290 | +CI_REMOTE_HOST=ci-runner.internal | |
| 291 | +CI_REMOTE_USER=ci-runner | |
| 292 | +CI_REMOTE_PATH=/opt/gitrust-ci | |
| 293 | +CI_REMOTE_SSH_KEY=/opt/gitrust/data/ci_runner_key | |
| 294 | +</code></pre> | |
| 295 | +<h3 id="cas--runner-local--pas-besoin-du-script"><a class="header" href="#cas--runner-local--pas-besoin-du-script">Cas « runner local » (pas besoin du script)</a></h3> | |
| 296 | +<pre><code class="language-bash">CI_REMOTE_HOST=localhost | |
| 297 | +# Les autres CI_REMOTE_* sont ignorés | |
| 298 | +</code></pre> | |
| 299 | +<p>Dans ce cas, installer Docker et Dagger directement sur la machine gitrust, copier <code>deployment/ci-engine/</code> vers <code>CI_ENGINE_PATH</code> (défaut <code>/opt/gitrust/ci-engine</code>) et passer à la suite. <strong>Ne pas exécuter <code>setup-remote-ci.sh</code></strong> avec <code>CI_REMOTE_HOST=localhost</code>.</p> | |
| 300 | +<hr> | |
| 301 | +<h2 id="6-usage"><a class="header" href="#6-usage">6. Usage</a></h2> | |
| 302 | +<h3 id="depuis-la-racine-du-projet-par-défaut"><a class="header" href="#depuis-la-racine-du-projet-par-défaut">Depuis la racine du projet (par défaut)</a></h3> | |
| 303 | +<pre><code class="language-bash">cd /chemin/vers/gitrust | |
| 304 | + | |
| 305 | +# .env a la racine (défaut) : | |
| 306 | +./deployment/setup-remote-ci.sh | |
| 307 | +</code></pre> | |
| 308 | +<h3 id="avec-un-env-explicite"><a class="header" href="#avec-un-env-explicite">Avec un <code>.env</code> explicite</a></h3> | |
| 309 | +<pre><code class="language-bash">./deployment/setup-remote-ci.sh /chemin/vers/mon.env | |
| 310 | +# Utile si vous avez .env.production, .env.staging, etc. | |
| 311 | +./deployment/setup-remote-ci.sh .env.production | |
| 312 | +</code></pre> | |
| 313 | +<h3 id="sortie-attendue"><a class="header" href="#sortie-attendue">Sortie attendue</a></h3> | |
| 314 | +<pre><code>==> Configuration : | |
| 315 | + Serveur : ci-runner@<ci-runner-ip> | |
| 316 | + Port SSH : 22 | |
| 317 | + Chemin : /opt/gitrust-ci | |
| 318 | + | |
| 319 | +==> [1/6] Vérification de la connectivité SSH... | |
| 320 | +SSH OK | |
| 321 | + OK | |
| 322 | +==> [2/6] Vérification de Docker... | |
| 323 | + Docker déjà installé | |
| 324 | +==> [3/6] Vérification de Dagger CLI... | |
| 325 | + Installation de Dagger CLI... | |
| 326 | + Dagger installé | |
| 327 | +==> [4/6] Création du répertoire distant... | |
| 328 | + /opt/gitrust-ci créé | |
| 329 | +==> [5/6] Synchronisation du ci-engine... | |
| 330 | +sending incremental file list | |
| 331 | +ci-engine/ | |
| 332 | +ci-engine/profiles/ | |
| 333 | +... | |
| 334 | + ci-engine synchronisé vers /opt/gitrust-ci/ci-engine/ | |
| 335 | +==> [6/6] Smoke test... | |
| 336 | + Versions distantes : | |
| 337 | +Docker version 28.0.1, build abcd123 | |
| 338 | +dagger v0.19.2 (linux/amd64) | |
| 339 | + | |
| 340 | +==> Setup terminé. Le serveur ci-runner@<ci-runner-ip> est prêt pour l'exécution CI. | |
| 341 | + Pensez à configurer CI_EXECUTION_MODE=remote dans votre .env | |
| 342 | +</code></pre> | |
| 343 | +<hr> | |
| 344 | +<h2 id="7-ce-qui-se-retrouve-sur-le-runner"><a class="header" href="#7-ce-qui-se-retrouve-sur-le-runner">7. Ce qui se retrouve sur le runner</a></h2> | |
| 345 | +<p>Après exécution réussie :</p> | |
| 346 | +<pre><code>/opt/gitrust-ci/ <- CI_REMOTE_PATH | |
| 347 | +└── ci-engine/ <- synchronisé depuis deployment/ci-engine/ | |
| 348 | + ├── README.md | |
| 349 | + └── profiles/ <- templates par stack (Python, Node, Rust, ...) | |
| 350 | +</code></pre> | |
| 351 | +<p>Plus, installés globalement :</p> | |
| 352 | +<ul> | |
| 353 | +<li><code>/usr/bin/docker</code> (ou équivalent) + socket <code>/var/run/docker.sock</code></li> | |
| 354 | +<li><code>/usr/local/bin/dagger</code></li> | |
| 355 | +</ul> | |
| 356 | +<p>Les <strong>workspaces de pipelines</strong> (checkouts temporaires) sont créés par le worker CI de gitrust au moment de l’exécution sous <code>CI_WORKSPACE_PATH</code> (défaut <code>/tmp/gitrust-ci</code>) — <strong>pas par ce script</strong>.</p> | |
| 357 | +<hr> | |
| 358 | +<h2 id="8-vérifications-post-setup"><a class="header" href="#8-vérifications-post-setup">8. Vérifications post-setup</a></h2> | |
| 359 | +<h3 id="depuis-la-machine-gitrust"><a class="header" href="#depuis-la-machine-gitrust">Depuis la machine gitrust</a></h3> | |
| 360 | +<pre><code class="language-bash"># Source le .env | |
| 361 | +set -a; source .env.production; set +a | |
| 362 | + | |
| 363 | +# 1. SSH direct (doit passer sans prompt) | |
| 364 | +ssh -p ${CI_REMOTE_SSH_PORT:-22} \ | |
| 365 | + ${CI_REMOTE_SSH_KEY:+-i $CI_REMOTE_SSH_KEY} \ | |
| 366 | + $CI_REMOTE_USER@$CI_REMOTE_HOST 'docker info && dagger version' | |
| 367 | + | |
| 368 | +# 2. Rsync round-trip (lecture/écriture sur CI_REMOTE_PATH) | |
| 369 | +echo "test" | ssh $CI_REMOTE_USER@$CI_REMOTE_HOST \ | |
| 370 | + "cat > $CI_REMOTE_PATH/.gitrust-test && cat $CI_REMOTE_PATH/.gitrust-test && rm $CI_REMOTE_PATH/.gitrust-test" | |
| 371 | +# Attendu : "test" | |
| 372 | +</code></pre> | |
| 373 | +<h3 id="pipeline-de-test-via-gitrust"><a class="header" href="#pipeline-de-test-via-gitrust">Pipeline de test via gitrust</a></h3> | |
| 374 | +<p>Pousser un dépôt avec un <code>.gitrust-ci.yml</code> minimal :</p> | |
| 375 | +<pre><code class="language-yaml"># .gitrust-ci.yml | |
| 376 | +version: 1 | |
| 377 | +pipeline: | |
| 378 | + - name: smoke | |
| 379 | + image: alpine:3 | |
| 380 | + run: echo "CI runner OK" | |
| 381 | +</code></pre> | |
| 382 | +<p>Puis dans l’UI gitrust : onglet <code>Pipelines</code> → la pipeline doit passer au statut <code>success</code>.</p> | |
| 383 | +<hr> | |
| 384 | +<h2 id="9-mise-à-jour-après-modification-du-ci-engine"><a class="header" href="#9-mise-à-jour-après-modification-du-ci-engine">9. Mise à jour après modification du <code>ci-engine/</code></a></h2> | |
| 385 | +<p>Le <code>ci-engine/</code> synchronisé n’est pas « live-linké » : rejouer le script après modification côté source.</p> | |
| 386 | +<pre><code class="language-bash"># Modifier deployment/ci-engine/profiles/*.py ou similaire | |
| 387 | +./deployment/setup-remote-ci.sh | |
| 388 | +# Les étapes 2-3 sont skip (déjà installés), seule l'étape 5 refait le rsync | |
| 389 | +</code></pre> | |
| 390 | +<p><code>rsync -az --delete</code> <strong>supprime</strong> les fichiers côté runner qui n’existent plus localement — garantit la cohérence.</p> | |
| 391 | +<hr> | |
| 392 | +<h2 id="10-dépannage"><a class="header" href="#10-dépannage">10. Dépannage</a></h2> | |
| 393 | +<div class="table-wrapper"> | |
| 394 | +<table> | |
| 395 | +<thead> | |
| 396 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Fix</th></tr> | |
| 397 | +</thead> | |
| 398 | +<tbody> | |
| 399 | +<tr><td><code>ERREUR: fichier .env introuvable</code></td><td><code>.env</code> absent ou chemin incorrect</td><td><code>cp .env.example .env && $EDITOR .env</code> ou passer le chemin : <code>./setup-remote-ci.sh /path/to/.env</code></td></tr> | |
| 400 | +<tr><td><code>ERREUR: CI_REMOTE_HOST non défini</code></td><td>Variable commentée ou absente</td><td>Décommenter <code>CI_REMOTE_HOST=...</code> dans le <code>.env</code></td></tr> | |
| 401 | +<tr><td><code>ERREUR: impossible de se connecter</code></td><td>SSH bloqué, mauvais user, clé non autorisée</td><td>Tester manuellement : <code>ssh -v -p X user@host</code> ; vérifier <code>~/.ssh/authorized_keys</code> sur le runner</td></tr> | |
| 402 | +<tr><td><code>Permission denied (publickey)</code></td><td><code>BatchMode=yes</code> interdit les prompts, clé non chargée</td><td><code>ssh-add ~/.ssh/ci_runner_ed25519</code> ou définir <code>CI_REMOTE_SSH_KEY=/path/to/key</code></td></tr> | |
| 403 | +<tr><td><code>sudo: a password is required</code> pendant l’install Docker</td><td>User sans <code>NOPASSWD</code> sudo</td><td>Ajouter le user au <code>sudoers</code> : <code>ci-runner ALL=(ALL) NOPASSWD:ALL</code> (runner uniquement)</td></tr> | |
| 404 | +<tr><td><code>curl: (7) Failed to connect to get.docker.com</code></td><td>Réseau sortant du runner bloqué</td><td>Whitelist <code>get.docker.com</code> et <code>dl.dagger.io</code>, ou pré-installer Docker + Dagger manuellement</td></tr> | |
| 405 | +<tr><td><code>ATTENTION: ... ci-engine introuvable</code></td><td>Lancé hors du repo gitrust</td><td><code>cd</code> dans la racine du projet avant de lancer</td></tr> | |
| 406 | +<tr><td>Pipeline reste <code>queued</code> indéfiniment</td><td>Worker CI ne trouve pas le runner</td><td>Vérifier <code>CI_EXECUTION_MODE=remote</code> dans <code>.env</code> gitrust + logs : <code>journalctl -u gitrust | grep -i 'ci|dagger'</code></td></tr> | |
| 407 | +<tr><td><code>dagger: command not found</code> au smoke test</td><td><code>$PATH</code> du user SSH ne contient pas <code>/usr/local/bin</code></td><td><code>echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc</code> sur le runner, ou <code>CI_DAGGER_BIN=/usr/local/bin/dagger</code> côté gitrust</td></tr> | |
| 408 | +</tbody> | |
| 409 | +</table> | |
| 410 | +</div> | |
| 411 | +<hr> | |
| 412 | +<h2 id="11-sécurité"><a class="header" href="#11-sécurité">11. Sécurité</a></h2> | |
| 413 | +<ul> | |
| 414 | +<li>Le runner CI exécute du <strong>code arbitraire</strong> venant des dépôts hébergés. <strong>Ne jamais</strong> le colocaliser avec des secrets sensibles (PG prod, clés de prod).</li> | |
| 415 | +<li>Isoler réseau : bloquer l’accès sortant du runner vers le LAN privé (seul l’accès Internet pour <code>docker pull</code> est nécessaire).</li> | |
| 416 | +<li>Limiter <code>sudo NOPASSWD</code> au strict minimum sur le runner (idéalement : juste pour les commandes <code>docker</code> et <code>apt</code>).</li> | |
| 417 | +<li>Rotation régulière de la clé SSH <code>CI_REMOTE_SSH_KEY</code>. La révoquer dans <code>~/.ssh/authorized_keys</code> côté runner en cas de suspicion.</li> | |
| 418 | +<li>Le runner ne doit <strong>pas</strong> pouvoir se connecter en SSH à la machine gitrust (unidirectionnel).</li> | |
| 419 | +</ul> | |
| 420 | + | |
| 421 | + </main> | |
| 422 | + | |
| 423 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 424 | + <!-- Mobile navigation buttons --> | |
| 425 | + <a rel="prev" href="../../administration_manual/how-to/configurer-oauth.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 426 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 427 | + </a> | |
| 428 | + | |
| 429 | + <a rel="next prefetch" href="../../administration_manual/how-to/integrer-dependency-track.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 430 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 431 | + </a> | |
| 432 | + | |
| 433 | + <div style="clear: both"></div> | |
| 434 | + </nav> | |
| 435 | + </div> | |
| 436 | + </div> | |
| 437 | + | |
| 438 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 439 | + <a rel="prev" href="../../administration_manual/how-to/configurer-oauth.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 440 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 441 | + </a> | |
| 442 | + | |
| 443 | + <a rel="next prefetch" href="../../administration_manual/how-to/integrer-dependency-track.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 444 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 445 | + </a> | |
| 446 | + </nav> | |
| 447 | + | |
| 448 | + </div> | |
| 449 | + | |
| 450 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 451 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 452 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 453 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 454 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + <script> | |
| 459 | + window.playground_copyable = true; | |
| 460 | + </script> | |
| 461 | + | |
| 462 | + | |
| 463 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 464 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 465 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 466 | + | |
| 467 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 468 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 469 | + <script src="../../book-a0b12cfe.js"></script> | |
| 470 | + | |
| 471 | + <!-- Custom JS scripts --> | |
| 472 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 473 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + </div> | |
| 478 | + </body> | |
| 479 | +</html> |
A
book/administration_manual/how-to/configurer-oauth.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Configurer OAuth - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/configurer-oauth.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="configurer-oauth"><a class="header" href="#configurer-oauth">Configurer OAuth</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/how-to/configurer-smtp.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-ci-runner-remote.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/how-to/configurer-smtp.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-ci-runner-remote.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/how-to/configurer-smtp.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Configurer SMTP - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/configurer-smtp.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="configurer-smtp"><a class="header" href="#configurer-smtp">Configurer SMTP</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/how-to/mettre-a-jour.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-oauth.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/how-to/mettre-a-jour.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-oauth.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/how-to/depanner-ci.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Dépanner la CI - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/depanner-ci.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="dépanner-la-ci"><a class="header" href="#dépanner-la-ci">Dépanner la CI</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/how-to/depanner-ssh.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/how-to/gerer-utilisateurs-admin.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/how-to/depanner-ssh.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/how-to/gerer-utilisateurs-admin.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/how-to/depanner-ssh.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Dépanner SSH - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/depanner-ssh.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="dépanner-ssh"><a class="header" href="#dépanner-ssh">Dépanner SSH</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/how-to/forcer-2fa-globalement.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/how-to/depanner-ci.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/how-to/forcer-2fa-globalement.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/how-to/depanner-ci.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/how-to/durcir-avec-fail2ban.html
+726
-0
@@ -0,0 +1,726 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Durcir avec Fail2ban - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/durcir-avec-fail2ban.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="durcir-linstance-avec-fail2ban"><a class="header" href="#durcir-linstance-avec-fail2ban">Durcir l’instance avec Fail2ban</a></h1> | |
| 181 | +<p>Configuration complète pour protéger un déploiement gitrust exposant :</p> | |
| 182 | +<ul> | |
| 183 | +<li><strong>sshd système</strong> sur <code>:2022</code> (admin)</li> | |
| 184 | +<li><strong>Nginx</strong> en reverse proxy HTTPS <code>:443</code> + redirect <code>:80</code> + <code>stream :22 → :2222</code></li> | |
| 185 | +<li><strong>Gitrust</strong> (web <code>127.0.0.1:4000</code>, SSH russh <code>127.0.0.1:2222</code>)</li> | |
| 186 | +<li><strong>Dagger</strong> CI runner (local, pas d’exposition réseau directe)</li> | |
| 187 | +<li><strong>Dependency-Track</strong> API <code>:8081</code> + UI <code>:8080</code> (si exposés)</li> | |
| 188 | +<li><strong>PostgreSQL</strong> <code>127.0.0.1:5432</code> (défensif au cas où le bind fuit)</li> | |
| 189 | +</ul> | |
| 190 | +<hr> | |
| 191 | +<h2 id="1-installation"><a class="header" href="#1-installation">1. Installation</a></h2> | |
| 192 | +<pre><code class="language-bash">sudo apt install -y fail2ban | |
| 193 | +sudo systemctl enable --now fail2ban | |
| 194 | +fail2ban-client --version | |
| 195 | +</code></pre> | |
| 196 | +<p>Vérifier que <code>ufw</code> est actif (fournit <code>banaction = ufw</code> dans la config) :</p> | |
| 197 | +<pre><code class="language-bash">sudo ufw status | |
| 198 | +</code></pre> | |
| 199 | +<hr> | |
| 200 | +<h2 id="2-fichier-principal-etcfail2banjaillocal"><a class="header" href="#2-fichier-principal-etcfail2banjaillocal">2. Fichier principal <code>/etc/fail2ban/jail.local</code></a></h2> | |
| 201 | +<p>À placer via :</p> | |
| 202 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/jail.local <<'EOF' | |
| 203 | +[Le contenu ci-dessous] | |
| 204 | +EOF | |
| 205 | +</code></pre> | |
| 206 | +<pre><code class="language-ini"># ============================================================================= | |
| 207 | +# Défauts globaux | |
| 208 | +# ============================================================================= | |
| 209 | +[DEFAULT] | |
| 210 | +backend = systemd | |
| 211 | +bantime = 1h | |
| 212 | +findtime = 10m | |
| 213 | +maxretry = 5 | |
| 214 | + | |
| 215 | +# LAN privé et loopback jamais bannis | |
| 216 | +ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 | |
| 217 | + | |
| 218 | +# UFW | |
| 219 | +banaction = ufw | |
| 220 | +banaction_allports = ufw | |
| 221 | + | |
| 222 | +# Notifications (optionnel — nécessite un relay SMTP local) | |
| 223 | +# destemail = contact@gitrust.eu | |
| 224 | +# sender = fail2ban@votre-serveur.example.com | |
| 225 | +# action = %(action_mwl)s | |
| 226 | + | |
| 227 | +# ============================================================================= | |
| 228 | +# 1) sshd admin système — port 2022 | |
| 229 | +# ============================================================================= | |
| 230 | +[sshd] | |
| 231 | +enabled = true | |
| 232 | +port = 2022 | |
| 233 | +filter = sshd | |
| 234 | +backend = %(sshd_backend)s | |
| 235 | +logpath = %(sshd_log)s | |
| 236 | +maxretry = 3 | |
| 237 | +findtime = 10m | |
| 238 | +bantime = 1h | |
| 239 | + | |
| 240 | +# ============================================================================= | |
| 241 | +# 2) Nginx — 401/403 auth basic (si un jour activé sur /admin, /metrics, etc.) | |
| 242 | +# ============================================================================= | |
| 243 | +[nginx-http-auth] | |
| 244 | +enabled = true | |
| 245 | +port = http,https | |
| 246 | +filter = nginx-http-auth | |
| 247 | +logpath = /var/log/nginx/gitrust.error.log | |
| 248 | +maxretry = 5 | |
| 249 | + | |
| 250 | +# ============================================================================= | |
| 251 | +# 3) Nginx — scanners d'URL (wp-admin, .env, phpmyadmin, config.php, etc.) | |
| 252 | +# ============================================================================= | |
| 253 | +[nginx-botsearch] | |
| 254 | +enabled = true | |
| 255 | +port = http,https | |
| 256 | +filter = nginx-botsearch | |
| 257 | +logpath = /var/log/nginx/gitrust.access.log | |
| 258 | +maxretry = 2 | |
| 259 | +findtime = 10m | |
| 260 | +bantime = 24h | |
| 261 | + | |
| 262 | +# ============================================================================= | |
| 263 | +# 4) Nginx — bad user-agents (scanners agressifs, masscan, nikto, etc.) | |
| 264 | +# ============================================================================= | |
| 265 | +[nginx-badbots] | |
| 266 | +enabled = true | |
| 267 | +port = http,https | |
| 268 | +filter = nginx-badbots | |
| 269 | +logpath = /var/log/nginx/gitrust.access.log | |
| 270 | +maxretry = 2 | |
| 271 | +bantime = 24h | |
| 272 | + | |
| 273 | +# ============================================================================= | |
| 274 | +# 5) Nginx — dépassement limit_req (voir section 4 — zones HTTPS) | |
| 275 | +# ============================================================================= | |
| 276 | +[nginx-limit-req] | |
| 277 | +enabled = true | |
| 278 | +port = http,https | |
| 279 | +filter = nginx-limit-req | |
| 280 | +logpath = /var/log/nginx/gitrust.error.log | |
| 281 | +maxretry = 10 | |
| 282 | +findtime = 5m | |
| 283 | +bantime = 1h | |
| 284 | + | |
| 285 | +# ============================================================================= | |
| 286 | +# 6) Gitrust — brute force login (formulaire + API JWT) | |
| 287 | +# ============================================================================= | |
| 288 | +[gitrust-login] | |
| 289 | +enabled = true | |
| 290 | +port = http,https | |
| 291 | +filter = gitrust-login | |
| 292 | +logpath = /var/log/nginx/gitrust.access.log | |
| 293 | +maxretry = 5 | |
| 294 | +findtime = 10m | |
| 295 | +bantime = 1h | |
| 296 | + | |
| 297 | +# ============================================================================= | |
| 298 | +# 7) Gitrust — abus API (tokens personnels leaked, scrapers) | |
| 299 | +# ============================================================================= | |
| 300 | +[gitrust-api-abuse] | |
| 301 | +enabled = true | |
| 302 | +port = http,https | |
| 303 | +filter = gitrust-api-abuse | |
| 304 | +logpath = /var/log/nginx/gitrust.access.log | |
| 305 | +maxretry = 30 | |
| 306 | +findtime = 1m | |
| 307 | +bantime = 2h | |
| 308 | + | |
| 309 | +# ============================================================================= | |
| 310 | +# 8) Gitrust SSH (russh) — brute force clé publique | |
| 311 | +# ============================================================================= | |
| 312 | +[gitrust-ssh] | |
| 313 | +enabled = true | |
| 314 | +port = 22,2222 | |
| 315 | +filter = gitrust-ssh | |
| 316 | +backend = systemd | |
| 317 | +journalmatch = _SYSTEMD_UNIT=gitrust.service | |
| 318 | +maxretry = 5 | |
| 319 | +findtime = 10m | |
| 320 | +bantime = 1h | |
| 321 | + | |
| 322 | +# ============================================================================= | |
| 323 | +# 9) Gitrust import worker — tokens invalides sur clone de dépôts externes | |
| 324 | +# ============================================================================= | |
| 325 | +[gitrust-import] | |
| 326 | +enabled = true | |
| 327 | +port = http,https | |
| 328 | +filter = gitrust-import | |
| 329 | +backend = systemd | |
| 330 | +journalmatch = _SYSTEMD_UNIT=gitrust.service | |
| 331 | +maxretry = 3 | |
| 332 | +findtime = 5m | |
| 333 | +bantime = 30m | |
| 334 | + | |
| 335 | +# ============================================================================= | |
| 336 | +# 10) Dependency-Track UI — brute force login (port 8080) | |
| 337 | +# ============================================================================= | |
| 338 | +# Activer UNIQUEMENT si DTrack est exposé publiquement. | |
| 339 | +# Si DTrack est sur réseau privé/loopback, laisser enabled=false. | |
| 340 | +[dtrack-login] | |
| 341 | +enabled = false | |
| 342 | +port = 8080,http,https | |
| 343 | +filter = dtrack-login | |
| 344 | +logpath = /var/log/nginx/dtrack.access.log | |
| 345 | +maxretry = 5 | |
| 346 | +findtime = 10m | |
| 347 | +bantime = 2h | |
| 348 | + | |
| 349 | +# ============================================================================= | |
| 350 | +# 11) Dependency-Track API — abus clé API (port 8081) | |
| 351 | +# ============================================================================= | |
| 352 | +[dtrack-api] | |
| 353 | +enabled = false | |
| 354 | +port = 8081,http,https | |
| 355 | +filter = dtrack-api | |
| 356 | +logpath = /var/log/nginx/dtrack.access.log | |
| 357 | +maxretry = 10 | |
| 358 | +findtime = 5m | |
| 359 | +bantime = 1h | |
| 360 | + | |
| 361 | +# ============================================================================= | |
| 362 | +# 12) PostgreSQL — tentatives de connexion invalides (défensif) | |
| 363 | +# ============================================================================= | |
| 364 | +# PG doit binder 127.0.0.1 uniquement. Ce jail protège si la config fuit. | |
| 365 | +[postgresql] | |
| 366 | +enabled = true | |
| 367 | +port = 5432 | |
| 368 | +filter = postgresql | |
| 369 | +backend = systemd | |
| 370 | +journalmatch = _SYSTEMD_UNIT=postgresql.service + _SYSTEMD_UNIT=docker.service | |
| 371 | +maxretry = 5 | |
| 372 | +findtime = 10m | |
| 373 | +bantime = 1h | |
| 374 | + | |
| 375 | +# ============================================================================= | |
| 376 | +# 13) Récidive — ban long pour IPs bannies 3x en 24h, tous jails confondus | |
| 377 | +# ============================================================================= | |
| 378 | +[recidive] | |
| 379 | +enabled = true | |
| 380 | +logpath = /var/log/fail2ban.log | |
| 381 | +banaction = %(banaction_allports)s | |
| 382 | +bantime = 1w | |
| 383 | +findtime = 1d | |
| 384 | +maxretry = 3 | |
| 385 | +</code></pre> | |
| 386 | +<hr> | |
| 387 | +<h2 id="3-filtres-personnalisés"><a class="header" href="#3-filtres-personnalisés">3. Filtres personnalisés</a></h2> | |
| 388 | +<p>À placer dans <code>/etc/fail2ban/filter.d/</code> (un fichier par jail custom).</p> | |
| 389 | +<h3 id="31-gitrust-loginconf"><a class="header" href="#31-gitrust-loginconf">3.1 <code>gitrust-login.conf</code></a></h3> | |
| 390 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-login.conf <<'EOF' | |
| 391 | +[Definition] | |
| 392 | +# POST sur /login ou endpoints JWT avec code 4xx (401/403/422/429) | |
| 393 | +failregex = ^<HOST> .* "POST /(login|api/v1/auth/login|api/v1/auth/refresh|api/v1/auth/2fa)[^"]*" (401|403|422|429) .*$ | |
| 394 | +ignoreregex = | |
| 395 | +EOF | |
| 396 | +</code></pre> | |
| 397 | +<h3 id="32-gitrust-api-abuseconf"><a class="header" href="#32-gitrust-api-abuseconf">3.2 <code>gitrust-api-abuse.conf</code></a></h3> | |
| 398 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-api-abuse.conf <<'EOF' | |
| 399 | +[Definition] | |
| 400 | +# Abus API : 401/403 répétés sur /api/v1/* (hors auth déjà couvert par gitrust-login) | |
| 401 | +failregex = ^<HOST> .* "(GET|POST|PUT|DELETE|PATCH) /api/v1/(?!auth/)[^"]*" (401|403) .*$ | |
| 402 | +ignoreregex = | |
| 403 | +EOF | |
| 404 | +</code></pre> | |
| 405 | +<h3 id="33-gitrust-sshconf"><a class="header" href="#33-gitrust-sshconf">3.3 <code>gitrust-ssh.conf</code></a></h3> | |
| 406 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-ssh.conf <<'EOF' | |
| 407 | +[Definition] | |
| 408 | +# russh / gitrust-ssh : échecs d'authentification | |
| 409 | +# Regex à raffiner après observation des logs réels via : | |
| 410 | +# sudo fail2ban-regex <(journalctl -u gitrust --no-pager -n 2000) \ | |
| 411 | +# /etc/fail2ban/filter.d/gitrust-ssh.conf | |
| 412 | +failregex = ^.*ssh.*auth(entication)? (failed|failure).*from <HOST>.*$ | |
| 413 | + ^.*[Rr]ejected.*(public[_ ]?key|password).*from <HOST>.*$ | |
| 414 | + ^.*no matching (ssh|public) key.*from <HOST>.*$ | |
| 415 | + ^.*unknown user.*from <HOST>.*$ | |
| 416 | + ^.*gitrust.*auth.*refused.*<HOST>.*$ | |
| 417 | +ignoreregex = | |
| 418 | +EOF | |
| 419 | +</code></pre> | |
| 420 | +<h3 id="34-gitrust-importconf"><a class="header" href="#34-gitrust-importconf">3.4 <code>gitrust-import.conf</code></a></h3> | |
| 421 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-import.conf <<'EOF' | |
| 422 | +[Definition] | |
| 423 | +# Import worker : tokens OAuth/GitHub invalides sur clone de dépôts externes | |
| 424 | +failregex = ^.*import.*authentication failed.*from <HOST>.*$ | |
| 425 | + ^.*import.*invalid (token|credentials).*from <HOST>.*$ | |
| 426 | + ^.*import.*clone failed.*401.*from <HOST>.*$ | |
| 427 | +ignoreregex = | |
| 428 | +EOF | |
| 429 | +</code></pre> | |
| 430 | +<h3 id="35-dtrack-loginconf-si-dtrack-exposé"><a class="header" href="#35-dtrack-loginconf-si-dtrack-exposé">3.5 <code>dtrack-login.conf</code> (si DTrack exposé)</a></h3> | |
| 431 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/dtrack-login.conf <<'EOF' | |
| 432 | +[Definition] | |
| 433 | +# Dependency-Track : brute force du POST /api/v1/user/login | |
| 434 | +failregex = ^<HOST> .* "POST /api/v1/user/login[^"]*" (401|403) .*$ | |
| 435 | + ^<HOST> .* "POST /api/v1/user/forceChangePassword[^"]*" (401|403) .*$ | |
| 436 | +ignoreregex = | |
| 437 | +EOF | |
| 438 | +</code></pre> | |
| 439 | +<h3 id="36-dtrack-apiconf-si-dtrack-exposé"><a class="header" href="#36-dtrack-apiconf-si-dtrack-exposé">3.6 <code>dtrack-api.conf</code> (si DTrack exposé)</a></h3> | |
| 440 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/dtrack-api.conf <<'EOF' | |
| 441 | +[Definition] | |
| 442 | +# Dependency-Track API : abus de clé API ou requêtes non authentifiées | |
| 443 | +failregex = ^<HOST> .* "[^"]+ /api/v1/[^"]*" 401 .*$ | |
| 444 | + ^<HOST> .* "[^"]+ /api/v1/[^"]*" 403 .*$ | |
| 445 | +ignoreregex = | |
| 446 | +EOF | |
| 447 | +</code></pre> | |
| 448 | +<h3 id="37-postgresqlconf-créer-si-absent"><a class="header" href="#37-postgresqlconf-créer-si-absent">3.7 <code>postgresql.conf</code> (créer si absent)</a></h3> | |
| 449 | +<pre><code class="language-bash">if [ ! -f /etc/fail2ban/filter.d/postgresql.conf ]; then | |
| 450 | +sudo tee /etc/fail2ban/filter.d/postgresql.conf <<'EOF' | |
| 451 | +[Definition] | |
| 452 | +failregex = ^.*authentication failed for user.*host=<HOST>.*$ | |
| 453 | + ^.*FATAL:.*password authentication failed.*<HOST>.*$ | |
| 454 | + ^.*no pg_hba\.conf entry for host "<HOST>".*$ | |
| 455 | +ignoreregex = | |
| 456 | +EOF | |
| 457 | +fi | |
| 458 | +</code></pre> | |
| 459 | +<h3 id="38-nginx-limit-reqconf-créer-si-absent-sur-votre-distro"><a class="header" href="#38-nginx-limit-reqconf-créer-si-absent-sur-votre-distro">3.8 <code>nginx-limit-req.conf</code> (créer si absent sur votre distro)</a></h3> | |
| 460 | +<pre><code class="language-bash">if [ ! -f /etc/fail2ban/filter.d/nginx-limit-req.conf ]; then | |
| 461 | +sudo tee /etc/fail2ban/filter.d/nginx-limit-req.conf <<'EOF' | |
| 462 | +[Definition] | |
| 463 | +failregex = ^.*limiting requests, excess: .* by zone .*, client: <HOST>.*$ | |
| 464 | +ignoreregex = | |
| 465 | +EOF | |
| 466 | +fi | |
| 467 | +</code></pre> | |
| 468 | +<h3 id="39-nginx-badbotsconf--obligatoire-pas-fourni-par-debianubuntu"><a class="header" href="#39-nginx-badbotsconf--obligatoire-pas-fourni-par-debianubuntu">3.9 <code>nginx-badbots.conf</code> — OBLIGATOIRE (pas fourni par Debian/Ubuntu)</a></h3> | |
| 469 | +<p>Le paquet <code>fail2ban</code> Debian/Ubuntu fournit <code>apache-badbots.conf</code> mais PAS <code>nginx-badbots.conf</code>. Sans ce filter, <code>fail2ban-client reload</code> affiche :</p> | |
| 470 | +<pre><code>Found no accessible config files for 'filter.d/nginx-badbots' under /etc/fail2ban | |
| 471 | +</code></pre> | |
| 472 | +<p>Le filter ci-dessous réutilise la liste de bad user-agents de <code>apache-badbots</code> avec un <code>failregex</code> adapté au format <code>combined</code> de nginx :</p> | |
| 473 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/nginx-badbots.conf <<'EOF' | |
| 474 | +[Definition] | |
| 475 | +badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider | |
| 476 | +badbots = Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|ContentSmartz|DataCha0s/2\.0|DBrowse 1\.4b|DBrowse 1\.4d|Demo Bot DOT 16b|Demo Bot Z 16b|DSurf15a 01|DSurf15a 71|DSurf15a 81|DSurf15a VA|EBrowse 1\.4b|Educate Search VxB|EmailSiphon|EmailSpider|EmailWolf 1\.00|ExtractorPro|Franklin Locator 1\.8|Full Web Bot 0416B|Guestbook Auto Submitter|ISC Systems iRc Search 2\.1|LMQueueBot/0\.2|LWP\:\:Simple/5\.803|Microsoft URL Control - 6\.00\.8xxx|Missigua Locator 1\.9|Mozilla/4\.0 efp@gmx\.net|Nsauditor/1\.x|PBrowse 1\.4b|PEval 1\.4b|Poirot|psycheclone|sogou spider|sohu agent|VadixBot|WebVulnCrawl\.unknown/1\.0 libwww-perl/5\.803|Wells Search II|WEP Search 00 | |
| 477 | + | |
| 478 | +failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$ | |
| 479 | +ignoreregex = | |
| 480 | + | |
| 481 | +datepattern = ^[^\[]*\[({DATE}) | |
| 482 | + {^LN-BEG} | |
| 483 | +EOF | |
| 484 | +</code></pre> | |
| 485 | +<p><strong>Alternative</strong> : si vous ne voulez pas maintenir la liste, simplement désactiver le jail (<code>enabled = false</code> dans le <code>[nginx-badbots]</code>) — la combinaison <code>nginx-botsearch</code> + <code>nginx-limit-req</code> + <code>gitrust-api-abuse</code> couvre déjà l’essentiel.</p> | |
| 486 | +<hr> | |
| 487 | +<h2 id="4-rate-limiting-côté-nginx-requis-par-nginx-limit-req"><a class="header" href="#4-rate-limiting-côté-nginx-requis-par-nginx-limit-req">4. Rate limiting côté Nginx (requis par <code>nginx-limit-req</code>)</a></h2> | |
| 488 | +<h3 id="41-déclarer-les-zones-globales"><a class="header" href="#41-déclarer-les-zones-globales">4.1 Déclarer les zones globales</a></h3> | |
| 489 | +<pre><code class="language-bash">sudo tee /etc/nginx/conf.d/gitrust-limit.conf <<'EOF' | |
| 490 | +# Zones de rate limiting gitrust | |
| 491 | +limit_req_zone $binary_remote_addr zone=gitrust_login:10m rate=1r/s; | |
| 492 | +limit_req_zone $binary_remote_addr zone=gitrust_api:10m rate=10r/s; | |
| 493 | +limit_req_zone $binary_remote_addr zone=gitrust_git:10m rate=30r/s; | |
| 494 | +EOF | |
| 495 | +</code></pre> | |
| 496 | +<h3 id="42-ajouter-les-location-dans-etcnginxsites-availablegitrust"><a class="header" href="#42-ajouter-les-location-dans-etcnginxsites-availablegitrust">4.2 Ajouter les <code>location</code> dans <code>/etc/nginx/sites-available/gitrust</code></a></h3> | |
| 497 | +<p>Dans le bloc <code>server { listen 443 ssl; ... }</code>, <strong>avant</strong> <code>location /</code> finale :</p> | |
| 498 | +<pre><code class="language-nginx"># Protection brute force login (1 req/s par IP, burst 5) | |
| 499 | +location ~ ^/(login|api/v1/auth/) { | |
| 500 | + limit_req zone=gitrust_login burst=5 nodelay; | |
| 501 | + proxy_pass http://gitrust_backend; | |
| 502 | + proxy_set_header Host $host; | |
| 503 | + proxy_set_header X-Real-IP $remote_addr; | |
| 504 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 505 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 506 | +} | |
| 507 | + | |
| 508 | +# Protection API (10 req/s par IP, burst 20) | |
| 509 | +location ^~ /api/v1/ { | |
| 510 | + limit_req zone=gitrust_api burst=20 nodelay; | |
| 511 | + proxy_pass http://gitrust_backend; | |
| 512 | + proxy_set_header Host $host; | |
| 513 | + proxy_set_header X-Real-IP $remote_addr; | |
| 514 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 515 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 516 | +} | |
| 517 | + | |
| 518 | +# Protection Git smart HTTP (30 req/s — clone/push légitime peut être verbeux) | |
| 519 | +location ~ ^/[^/]+/[^/]+\.git/ { | |
| 520 | + limit_req zone=gitrust_git burst=50 nodelay; | |
| 521 | + proxy_pass http://gitrust_backend; | |
| 522 | + proxy_http_version 1.1; | |
| 523 | + proxy_set_header Host $host; | |
| 524 | + proxy_set_header X-Real-IP $remote_addr; | |
| 525 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 526 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 527 | + proxy_buffering off; | |
| 528 | + proxy_request_buffering off; | |
| 529 | + client_max_body_size 2G; | |
| 530 | +} | |
| 531 | +</code></pre> | |
| 532 | +<h3 id="43-reload"><a class="header" href="#43-reload">4.3 Reload</a></h3> | |
| 533 | +<pre><code class="language-bash">sudo nginx -t && sudo systemctl reload nginx | |
| 534 | +</code></pre> | |
| 535 | +<hr> | |
| 536 | +<h2 id="5-démarrage-et-validation"><a class="header" href="#5-démarrage-et-validation">5. Démarrage et validation</a></h2> | |
| 537 | +<pre><code class="language-bash">sudo systemctl restart fail2ban | |
| 538 | + | |
| 539 | +# Liste des jails actifs | |
| 540 | +sudo fail2ban-client status | |
| 541 | +# Attendu : | |
| 542 | +# sshd, nginx-http-auth, nginx-botsearch, nginx-badbots, nginx-limit-req, | |
| 543 | +# gitrust-login, gitrust-api-abuse, gitrust-ssh, gitrust-import, | |
| 544 | +# postgresql, recidive | |
| 545 | +# (+ dtrack-login, dtrack-api si activées) | |
| 546 | + | |
| 547 | +# Stats par jail | |
| 548 | +sudo fail2ban-client status gitrust-login | |
| 549 | +sudo fail2ban-client status sshd | |
| 550 | +</code></pre> | |
| 551 | +<h3 id="valider-chaque-filtre-custom"><a class="header" href="#valider-chaque-filtre-custom">Valider chaque filtre custom</a></h3> | |
| 552 | +<pre><code class="language-bash"># 1. gitrust-login contre l'access log nginx | |
| 553 | +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \ | |
| 554 | + /etc/fail2ban/filter.d/gitrust-login.conf | |
| 555 | + | |
| 556 | +# 2. gitrust-api-abuse | |
| 557 | +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \ | |
| 558 | + /etc/fail2ban/filter.d/gitrust-api-abuse.conf | |
| 559 | + | |
| 560 | +# 3. gitrust-ssh contre journald | |
| 561 | +journalctl -u gitrust --no-pager -n 5000 > /tmp/gitrust.log | |
| 562 | +sudo fail2ban-regex /tmp/gitrust.log \ | |
| 563 | + /etc/fail2ban/filter.d/gitrust-ssh.conf | |
| 564 | +rm /tmp/gitrust.log | |
| 565 | + | |
| 566 | +# 4. postgresql | |
| 567 | +journalctl -u docker --no-pager -n 5000 | grep -i postgres > /tmp/pg.log | |
| 568 | +sudo fail2ban-regex /tmp/pg.log \ | |
| 569 | + /etc/fail2ban/filter.d/postgresql.conf | |
| 570 | +</code></pre> | |
| 571 | +<p><code>0 failregex found</code> = regex à ajuster après observation des logs réels de chaque service.</p> | |
| 572 | +<h3 id="test-de-bannissement"><a class="header" href="#test-de-bannissement">Test de bannissement</a></h3> | |
| 573 | +<pre><code class="language-bash"># Depuis un host HORS LAN (sinon ignoreip s'applique) | |
| 574 | +for i in $(seq 1 10); do | |
| 575 | + curl -sk -o /dev/null -w "%{http_code}\n" \ | |
| 576 | + -X POST https://<votre-domaine>/login \ | |
| 577 | + -d 'username=admin&password=wrong' | |
| 578 | +done | |
| 579 | + | |
| 580 | +# Vérifier le ban | |
| 581 | +ssh gitrust-host 'sudo fail2ban-client status gitrust-login' | |
| 582 | +# Currently banned : 1 — Banned IP list : <IP test> | |
| 583 | + | |
| 584 | +# Débannir manuellement | |
| 585 | +ssh gitrust-host 'sudo fail2ban-client unban <IP>' | |
| 586 | +</code></pre> | |
| 587 | +<hr> | |
| 588 | +<h2 id="6-monitoring"><a class="header" href="#6-monitoring">6. Monitoring</a></h2> | |
| 589 | +<pre><code class="language-bash"># Logs fail2ban temps réel | |
| 590 | +sudo tail -f /var/log/fail2ban.log | |
| 591 | + | |
| 592 | +# Toutes les IPs bannies, tous jails confondus | |
| 593 | +sudo fail2ban-client banned | |
| 594 | + | |
| 595 | +# Stats détaillées d'un jail | |
| 596 | +sudo fail2ban-client status gitrust-ssh | |
| 597 | +# Currently failed : 2 | |
| 598 | +# Total failed : 47 | |
| 599 | +# Currently banned : 1 | |
| 600 | +# Total banned : 12 | |
| 601 | +# Banned IP list : 203.0.113.42 | |
| 602 | + | |
| 603 | +sudo grep "Ban " /var/log/fail2ban.log | tail -20 | |
| 604 | +</code></pre> | |
| 605 | +<hr> | |
| 606 | +<h2 id="7-matrice-récapitulative"><a class="header" href="#7-matrice-récapitulative">7. Matrice récapitulative</a></h2> | |
| 607 | +<div class="table-wrapper"> | |
| 608 | +<table> | |
| 609 | +<thead> | |
| 610 | +<tr><th>#</th><th>Jail</th><th>Port(s)</th><th>Source logs</th><th>Max retry</th><th>Ban time</th><th>Surface protégée</th></tr> | |
| 611 | +</thead> | |
| 612 | +<tbody> | |
| 613 | +<tr><td>1</td><td><code>sshd</code></td><td>2022</td><td>journald sshd</td><td>3</td><td>1h</td><td>SSH admin</td></tr> | |
| 614 | +<tr><td>2</td><td><code>nginx-http-auth</code></td><td>80,443</td><td>nginx error</td><td>5</td><td>1h</td><td>Basic auth (admin futur)</td></tr> | |
| 615 | +<tr><td>3</td><td><code>nginx-botsearch</code></td><td>80,443</td><td>nginx access</td><td>2</td><td>24h</td><td>Scanners WP/PHP</td></tr> | |
| 616 | +<tr><td>4</td><td><code>nginx-badbots</code></td><td>80,443</td><td>nginx access</td><td>2</td><td>24h</td><td>User-agents malveillants</td></tr> | |
| 617 | +<tr><td>5</td><td><code>nginx-limit-req</code></td><td>80,443</td><td>nginx error</td><td>10</td><td>1h</td><td>Flood global</td></tr> | |
| 618 | +<tr><td>6</td><td><code>gitrust-login</code></td><td>80,443</td><td>nginx access</td><td>5</td><td>1h</td><td>Brute force login UI + API</td></tr> | |
| 619 | +<tr><td>7</td><td><code>gitrust-api-abuse</code></td><td>80,443</td><td>nginx access</td><td>30</td><td>2h</td><td>Scrapers API (tokens fuités)</td></tr> | |
| 620 | +<tr><td>8</td><td><code>gitrust-ssh</code></td><td>22,2222</td><td>journald gitrust</td><td>5</td><td>1h</td><td>Brute force clé SSH Git</td></tr> | |
| 621 | +<tr><td>9</td><td><code>gitrust-import</code></td><td>80,443</td><td>journald gitrust</td><td>3</td><td>30m</td><td>Brute force PAT/OAuth import</td></tr> | |
| 622 | +<tr><td>10</td><td><code>dtrack-login</code></td><td>8080</td><td>nginx access</td><td>5</td><td>2h</td><td>Brute force UI Dep-Track</td></tr> | |
| 623 | +<tr><td>11</td><td><code>dtrack-api</code></td><td>8081</td><td>nginx access</td><td>10</td><td>1h</td><td>Abus clé API Dep-Track</td></tr> | |
| 624 | +<tr><td>12</td><td><code>postgresql</code></td><td>5432</td><td>journald</td><td>5</td><td>1h</td><td>Défense en profondeur PG</td></tr> | |
| 625 | +<tr><td>13</td><td><code>recidive</code></td><td>all</td><td>fail2ban.log</td><td>3</td><td>1w</td><td>Méta-ban 3×/24h</td></tr> | |
| 626 | +</tbody> | |
| 627 | +</table> | |
| 628 | +</div> | |
| 629 | +<p><strong>Ordre de déclenchement typique</strong> : brute force → jail spécifique (ban 1h) → si récidive 3x → recidive (ban 1 semaine, tous ports).</p> | |
| 630 | +<hr> | |
| 631 | +<h2 id="8-notes-spécifiques-à-la-stack-gitrust"><a class="header" href="#8-notes-spécifiques-à-la-stack-gitrust">8. Notes spécifiques à la stack gitrust</a></h2> | |
| 632 | +<h3 id="81-dagger-ci"><a class="header" href="#81-dagger-ci">8.1 Dagger (CI)</a></h3> | |
| 633 | +<p>Dagger s’exécute <strong>localement</strong> sur la machine gitrust (ou un runner distant — voir <code>administration_manual/how-to/configurer-ci-runner-remote.md</code>). <strong>Aucun port réseau ouvert</strong> → pas de jail dédié.</p> | |
| 634 | +<h3 id="82-dependency-track"><a class="header" href="#82-dependency-track">8.2 Dependency-Track</a></h3> | |
| 635 | +<p>Si DTrack est déployé sur le même serveur et <strong>exposé</strong>, activer les jails 10 et 11 en mettant <code>enabled = true</code> et en pointant <code>logpath</code> vers les logs nginx du vhost DTrack.</p> | |
| 636 | +<p>Si DTrack est <strong>interne</strong> (VPN, réseau privé), laisser <code>enabled = false</code> — le firewall suffit.</p> | |
| 637 | +<p>Config DTrack recommandée :</p> | |
| 638 | +<ul> | |
| 639 | +<li>Bind sur <code>127.0.0.1</code> via <code>dtrack.url.base=http://127.0.0.1:8080</code></li> | |
| 640 | +</ul> | |
| 641 | +<h3 id="83-postgresql"><a class="header" href="#83-postgresql">8.3 PostgreSQL</a></h3> | |
| 642 | +<p>Le jail <code>postgresql</code> est <strong>défensif</strong>. PG doit rester bindé sur <code>127.0.0.1:5432</code> via Docker. Vérifier :</p> | |
| 643 | +<pre><code class="language-bash">sudo ss -tlnp | grep 5432 | |
| 644 | +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0:5432 | |
| 645 | +</code></pre> | |
| 646 | +<h3 id="84-notifications"><a class="header" href="#84-notifications">8.4 Notifications</a></h3> | |
| 647 | +<p>Pour recevoir un mail à chaque ban :</p> | |
| 648 | +<ol> | |
| 649 | +<li>Installer un relay SMTP local : <code>sudo apt install msmtp-mta</code></li> | |
| 650 | +<li>Configurer <code>/etc/msmtprc</code> avec un compte SMTP</li> | |
| 651 | +<li>Décommenter dans <code>[DEFAULT]</code> : | |
| 652 | +<pre><code class="language-ini">destemail = contact@gitrust.eu | |
| 653 | +sender = fail2ban@votre-serveur.example.com | |
| 654 | +action = %(action_mwl)s | |
| 655 | +</code></pre> | |
| 656 | +</li> | |
| 657 | +<li><code>sudo systemctl restart fail2ban</code></li> | |
| 658 | +</ol> | |
| 659 | +<hr> | |
| 660 | +<h2 id="9-limites-et-évolutions"><a class="header" href="#9-limites-et-évolutions">9. Limites et évolutions</a></h2> | |
| 661 | +<ul> | |
| 662 | +<li><strong>IPv6</strong> : toutes les regex utilisent <code><HOST></code> qui matche IPv4 ET IPv6. Vérifier que UFW est configuré pour v6 également.</li> | |
| 663 | +<li><strong>CDN/Cloudflare devant</strong> : si un CDN est ajouté, <code>$remote_addr</code> côté Nginx sera l’IP du CDN — il faut récupérer la vraie IP via <code>X-Forwarded-For</code> et propager au logging Nginx. Changer <code>failregex</code> en conséquence. Sinon les jails banniront le CDN.</li> | |
| 664 | +<li><strong>Docker/Podman</strong> : si gitrust passe en conteneur, les logs de <code>gitrust.service</code> deviennent <code>docker.service</code> ou <code>podman.service</code> → mettre à jour <code>journalmatch</code> dans les jails 8 et 9.</li> | |
| 665 | +<li><strong>GeoIP</strong> : pour bloquer des pays entiers en amont, ajouter <code>geo $blocked_country</code> dans Nginx (module <code>ngx_http_geoip2_module</code>) — complémentaire à fail2ban.</li> | |
| 666 | +</ul> | |
| 667 | + | |
| 668 | + </main> | |
| 669 | + | |
| 670 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 671 | + <!-- Mobile navigation buttons --> | |
| 672 | + <a rel="prev" href="../../administration_manual/how-to/integrer-dependency-track.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 673 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 674 | + </a> | |
| 675 | + | |
| 676 | + <a rel="next prefetch" href="../../administration_manual/how-to/tuner-rate-limiting.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 677 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 678 | + </a> | |
| 679 | + | |
| 680 | + <div style="clear: both"></div> | |
| 681 | + </nav> | |
| 682 | + </div> | |
| 683 | + </div> | |
| 684 | + | |
| 685 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 686 | + <a rel="prev" href="../../administration_manual/how-to/integrer-dependency-track.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 687 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 688 | + </a> | |
| 689 | + | |
| 690 | + <a rel="next prefetch" href="../../administration_manual/how-to/tuner-rate-limiting.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 691 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 692 | + </a> | |
| 693 | + </nav> | |
| 694 | + | |
| 695 | + </div> | |
| 696 | + | |
| 697 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 698 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 699 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 700 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 701 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + <script> | |
| 706 | + window.playground_copyable = true; | |
| 707 | + </script> | |
| 708 | + | |
| 709 | + | |
| 710 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 711 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 712 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 713 | + | |
| 714 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 715 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 716 | + <script src="../../book-a0b12cfe.js"></script> | |
| 717 | + | |
| 718 | + <!-- Custom JS scripts --> | |
| 719 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 720 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + </div> | |
| 725 | + </body> | |
| 726 | +</html> |
A
book/administration_manual/how-to/forcer-2fa-globalement.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Forcer le 2FA sur toute l'instance - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/forcer-2fa-globalement.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="forcer-le-2fa-sur-toute-linstance"><a class="header" href="#forcer-le-2fa-sur-toute-linstance">Forcer le 2FA sur toute l’instance</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/how-to/tuner-rate-limiting.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/how-to/depanner-ssh.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/how-to/tuner-rate-limiting.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/how-to/depanner-ssh.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/how-to/gerer-utilisateurs-admin.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Gérer les utilisateurs (panel /admin) - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/gerer-utilisateurs-admin.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="gérer-les-utilisateurs-panel-admin"><a class="header" href="#gérer-les-utilisateurs-panel-admin">Gérer les utilisateurs (panel /admin)</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/how-to/depanner-ci.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/how-to/auditer-instance.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/how-to/depanner-ci.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/how-to/auditer-instance.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/how-to/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Guides pratiques - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="guides-pratiques"><a class="header" href="#guides-pratiques">Guides pratiques</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/tutorials/04-mise-en-production-192-168.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/how-to/sauvegarder-restaurer.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/tutorials/04-mise-en-production-192-168.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/how-to/sauvegarder-restaurer.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/how-to/integrer-dependency-track.html
+543
-0
@@ -0,0 +1,543 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Intégrer Dependency-Track (SBOM) - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/integrer-dependency-track.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="intégrer-la-ci-et-dependency-track"><a class="header" href="#intégrer-la-ci-et-dependency-track">Intégrer la CI et Dependency-Track</a></h1> | |
| 181 | +<p>Ce document explique comment activer et configurer les deux fonctionnalités de qualité/sécurité de gitrust :</p> | |
| 182 | +<ol> | |
| 183 | +<li><strong>La CI intégrée</strong> (Dagger) qui exécute les builds/tests/lints à chaque push.</li> | |
| 184 | +<li><strong>Le dependency tracker</strong> (Syft + Dependency-Track) qui scanne les composants du code à chaque push et détecte les vulnérabilités connues.</li> | |
| 185 | +</ol> | |
| 186 | +<p>Ces deux systèmes sont <strong>indépendants</strong> : on peut activer l’un sans l’autre.</p> | |
| 187 | +<hr> | |
| 188 | +<h2 id="1-architecture-générale"><a class="header" href="#1-architecture-générale">1. Architecture générale</a></h2> | |
| 189 | +<pre class="mermaid">flowchart TB | |
| 190 | + subgraph Client | |
| 191 | + Dev[Développeur] | |
| 192 | + end | |
| 193 | + subgraph Gitrust[Instance Gitrust] | |
| 194 | + HTTP[:4000 HTTP/Git] | |
| 195 | + SSH[:2222 SSH/Git] | |
| 196 | + Worker[CiWorker<br/>tokio task] | |
| 197 | + Sbom[SbomService<br/>tokio spawn] | |
| 198 | + DB[(PostgreSQL)] | |
| 199 | + end | |
| 200 | + subgraph Builder[Serveur de build] | |
| 201 | + Docker[Docker/Podman] | |
| 202 | + Dagger[Dagger CLI] | |
| 203 | + CiEngine[/opt/gitrust-ci/ci-engine/] | |
| 204 | + end | |
| 205 | + subgraph Security[Stack sécurité optionnelle] | |
| 206 | + Syft[syft] | |
| 207 | + Dtrack[Dependency-Track] | |
| 208 | + end | |
| 209 | + | |
| 210 | + Dev -->|git push| HTTP | |
| 211 | + Dev -->|git push| SSH | |
| 212 | + HTTP --> Worker | |
| 213 | + SSH --> Worker | |
| 214 | + HTTP --> Sbom | |
| 215 | + SSH --> Sbom | |
| 216 | + Worker -->|SSH + rsync| Builder | |
| 217 | + Builder -->|logs streamés| Worker | |
| 218 | + Worker --> DB | |
| 219 | + Sbom -->|scan workspace| Syft | |
| 220 | + Sbom -->|PUT BOM| Dtrack | |
| 221 | + Dtrack -->|findings| Sbom | |
| 222 | + Sbom --> DB | |
| 223 | +</pre> | |
| 224 | + | |
| 225 | +<p>Trois composants fonctionnent en parallèle :</p> | |
| 226 | +<ul> | |
| 227 | +<li><strong>CiWorker</strong> : tâche Tokio qui consomme des <code>CiTask</code> depuis un channel <code>mpsc</code>, limitée par un <code>Semaphore</code> à <code>CI_MAX_CONCURRENT</code> pipelines simultanés.</li> | |
| 228 | +<li><strong>SbomService</strong> : exécuté dans un <code>tokio::spawn</code> après chaque push, totalement découplé du CI.</li> | |
| 229 | +<li><strong>Serveur de build</strong> : machine distante (ou <code>localhost</code>) qui exécute Docker + Dagger. Gitrust y envoie le workspace par rsync et lance Dagger par SSH.</li> | |
| 230 | +</ul> | |
| 231 | +<hr> | |
| 232 | +<h2 id="2-mettre-en-place-la-ci"><a class="header" href="#2-mettre-en-place-la-ci">2. Mettre en place la CI</a></h2> | |
| 233 | +<h3 id="21-pré-requis-serveur-de-build"><a class="header" href="#21-pré-requis-serveur-de-build">2.1 Pré-requis serveur de build</a></h3> | |
| 234 | +<p>Le serveur de build peut être <strong>la même machine que Gitrust</strong> (<code>CI_REMOTE_HOST=localhost</code>) ou une machine dédiée. Il doit disposer de :</p> | |
| 235 | +<div class="table-wrapper"> | |
| 236 | +<table> | |
| 237 | +<thead> | |
| 238 | +<tr><th>Outil</th><th>Rôle</th></tr> | |
| 239 | +</thead> | |
| 240 | +<tbody> | |
| 241 | +<tr><td>Docker ou Podman</td><td>Containers Dagger</td></tr> | |
| 242 | +<tr><td>Dagger CLI</td><td>Moteur d’exécution</td></tr> | |
| 243 | +<tr><td>SSH (accès sortant depuis Gitrust)</td><td>Transport</td></tr> | |
| 244 | +<tr><td>rsync</td><td>Copie du workspace</td></tr> | |
| 245 | +<tr><td>git, tar</td><td>Extraction du tree du commit</td></tr> | |
| 246 | +</tbody> | |
| 247 | +</table> | |
| 248 | +</div> | |
| 249 | +<p>Installation automatique recommandée :</p> | |
| 250 | +<pre><code class="language-bash"># Depuis la machine Gitrust (l'utilisateur doit pouvoir SSH vers le builder) | |
| 251 | +./deployment/setup-remote-ci.sh .env | |
| 252 | +</code></pre> | |
| 253 | +<p>Le script exécute :</p> | |
| 254 | +<ol> | |
| 255 | +<li>Vérification de la connectivité SSH</li> | |
| 256 | +<li>Installation de Docker si absent</li> | |
| 257 | +<li>Installation de Dagger CLI si absent</li> | |
| 258 | +<li>Création du répertoire de travail distant</li> | |
| 259 | +<li>Synchronisation du <code>ci-engine</code></li> | |
| 260 | +<li>Smoke test (versions)</li> | |
| 261 | +</ol> | |
| 262 | +<h3 id="22-configuration-gitrust-fichier-env"><a class="header" href="#22-configuration-gitrust-fichier-env">2.2 Configuration Gitrust (fichier .env)</a></h3> | |
| 263 | +<p>Ajouter au <code>.env</code> de Gitrust :</p> | |
| 264 | +<pre><code class="language-env"># Activer globalement le CI | |
| 265 | +CI_ENABLED=true | |
| 266 | + | |
| 267 | +# Chemin du ci-engine sur le serveur de build | |
| 268 | +CI_ENGINE_PATH=/opt/gitrust-ci/ci-engine | |
| 269 | + | |
| 270 | +# Limite de parallélisme | |
| 271 | +CI_MAX_CONCURRENT=4 | |
| 272 | +CI_DEFAULT_TIMEOUT=3600 | |
| 273 | +CI_WORKSPACE_PATH=/tmp/gitrust-ci | |
| 274 | + | |
| 275 | +# Serveur de build (mettre localhost pour "même machine") | |
| 276 | +CI_REMOTE_HOST=builder.example.com | |
| 277 | +CI_REMOTE_USER=ci-runner | |
| 278 | +CI_REMOTE_PATH=/opt/gitrust-ci | |
| 279 | +CI_REMOTE_SSH_PORT=22 | |
| 280 | +# CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/id_ed25519 # si pas ssh-agent | |
| 281 | +</code></pre> | |
| 282 | +<p>Redémarrer Gitrust : <code>systemctl restart gitrust</code> (ou <code>cargo run --release</code>).</p> | |
| 283 | +<h3 id="23-activer-la-ci-sur-un-dépôt"><a class="header" href="#23-activer-la-ci-sur-un-dépôt">2.3 Activer la CI sur un dépôt</a></h3> | |
| 284 | +<p>Dans l’interface web : aller sur le dépôt → <strong>Settings</strong> → <strong>CI</strong>.</p> | |
| 285 | +<ul> | |
| 286 | +<li>Cocher <strong>CI enabled</strong> (requis — par défaut <code>false</code>)</li> | |
| 287 | +<li>Cocher <strong>Trigger on push</strong> (active l’exécution à chaque push)</li> | |
| 288 | +<li>Optionnel : <strong>Auto-cancel</strong> (annule les pipelines en cours quand un nouveau démarre)</li> | |
| 289 | +<li>Optionnel : <strong>Allowed branches</strong> (ex. <code>main,develop</code> — vide = toutes)</li> | |
| 290 | +</ul> | |
| 291 | +<h3 id="24-choisir-le-mode--easy-ou-power"><a class="header" href="#24-choisir-le-mode--easy-ou-power">2.4 Choisir le mode : Easy ou Power</a></h3> | |
| 292 | +<pre class="mermaid">flowchart LR | |
| 293 | + Push[Commit<br/>poussé] --> Tree{Arbre du<br/>commit contient ?} | |
| 294 | + Tree -->|.dagger/| Power[Mode Power<br/>dagger call -m .dagger/ ci] | |
| 295 | + Tree -->|.gitrust-ci.yml| Easy[Mode Easy<br/>dagger call -m ci-engine test-pr] | |
| 296 | + Tree -->|rien| None[Pas de pipeline] | |
| 297 | + Power --> Run[Exécution<br/>distante SSH] | |
| 298 | + Easy --> Run | |
| 299 | +</pre> | |
| 300 | + | |
| 301 | +<h4 id="mode-easy-recommandé-pour-commencer"><a class="header" href="#mode-easy-recommandé-pour-commencer">Mode Easy (recommandé pour commencer)</a></h4> | |
| 302 | +<p>Créer <code>.gitrust-ci.yml</code> à la racine du dépôt :</p> | |
| 303 | +<pre><code class="language-yaml"># Raccourci : charge un profil pré-configuré (rust | python | node) | |
| 304 | +language: rust | |
| 305 | + | |
| 306 | +build: | |
| 307 | + command: "cargo build --release" | |
| 308 | + | |
| 309 | +checks: | |
| 310 | + lint: "cargo clippy -- -D warnings" | |
| 311 | + format: "cargo fmt -- --check" | |
| 312 | + | |
| 313 | +tests: | |
| 314 | + command: "cargo test --release" | |
| 315 | +</code></pre> | |
| 316 | +<p>Les profils disponibles se trouvent dans <code>deployment/ci-engine/profiles/</code> (rust.yaml, python.yaml, node.yaml) dans le dépôt source.</p> | |
| 317 | +<h4 id="mode-power"><a class="header" href="#mode-power">Mode Power</a></h4> | |
| 318 | +<p>Pour les utilisateurs avancés, créer un module Dagger complet dans <code>.dagger/</code> :</p> | |
| 319 | +<pre><code>.dagger/ | |
| 320 | +├── dagger.json | |
| 321 | +├── src/ | |
| 322 | +│ └── main.py # ou Go/TypeScript | |
| 323 | +</code></pre> | |
| 324 | +<p>La fonction <code>ci</code> du module est appelée directement :</p> | |
| 325 | +<pre><code class="language-bash">dagger call -m .dagger/ ci | |
| 326 | +</code></pre> | |
| 327 | +<p>Avantage : accès au Daggerverse, composition, tests de pipeline. Voir la <a href="https://docs.dagger.io/">documentation Dagger</a>.</p> | |
| 328 | +<h3 id="25-suivi-dun-pipeline"><a class="header" href="#25-suivi-dun-pipeline">2.5 Suivi d’un pipeline</a></h3> | |
| 329 | +<p>Après un <code>git push</code>, une entrée apparaît dans l’onglet <strong>CI</strong> du dépôt :</p> | |
| 330 | +<pre class="mermaid">stateDiagram-v2 | |
| 331 | + [*] --> Pending: create_pipeline | |
| 332 | + Pending --> Running: worker picks CiTask | |
| 333 | + Running --> Success: exit 0 | |
| 334 | + Running --> Failure: exit != 0 | |
| 335 | + Running --> Cancelled: timeout / auto_cancel / manuel | |
| 336 | + Success --> [*] | |
| 337 | + Failure --> [*] | |
| 338 | + Cancelled --> [*] | |
| 339 | +</pre> | |
| 340 | + | |
| 341 | +<p>Les logs stdout/stderr sont streamés ligne par ligne dans la table <code>ci_logs</code> et visibles en direct dans l’UI. En cas d’échec, une notification est envoyée au propriétaire du dépôt.</p> | |
| 342 | +<hr> | |
| 343 | +<h2 id="3-mettre-en-place-le-dependency-tracker"><a class="header" href="#3-mettre-en-place-le-dependency-tracker">3. Mettre en place le Dependency Tracker</a></h2> | |
| 344 | +<p>Cette partie est totalement indépendante de la CI. Elle scanne le code poussé et produit un SBOM CycloneDX, puis (optionnellement) l’envoie à Dependency-Track pour une analyse de vulnérabilités.</p> | |
| 345 | +<h3 id="31-installer-syft"><a class="header" href="#31-installer-syft">3.1 Installer Syft</a></h3> | |
| 346 | +<p>Sur la machine Gitrust (le scan se fait localement, pas sur le builder) :</p> | |
| 347 | +<pre><code class="language-bash"># Installation officielle | |
| 348 | +curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh \ | |
| 349 | + | sh -s -- -b /usr/local/bin | |
| 350 | + | |
| 351 | +# Vérification | |
| 352 | +syft --version | |
| 353 | +</code></pre> | |
| 354 | +<p>Dans <code>.env</code> :</p> | |
| 355 | +<pre><code class="language-env">CI_SBOM_ENABLED=true | |
| 356 | +CI_SYFT_BIN=/usr/local/bin/syft # optionnel, défaut: syft dans PATH | |
| 357 | +</code></pre> | |
| 358 | +<p>À ce stade : à chaque push, un SBOM CycloneDX est généré et stocké (sans upload externe). Visible dans l’onglet <strong>Security</strong> du dépôt : nombre de composants, sha256 du BOM.</p> | |
| 359 | +<h3 id="32-déployer-dependency-track"><a class="header" href="#32-déployer-dependency-track">3.2 Déployer Dependency-Track</a></h3> | |
| 360 | +<p>Dependency-Track est une application Java qui stocke les SBOM et corrèle avec les bases CVE/OSV/NVD. Déploiement Docker recommandé :</p> | |
| 361 | +<pre><code class="language-bash">mkdir -p /opt/dtrack && cd /opt/dtrack | |
| 362 | +curl -L -o docker-compose.yml \ | |
| 363 | + https://dependencytrack.org/docker-compose.yml | |
| 364 | +docker compose up -d | |
| 365 | +</code></pre> | |
| 366 | +<p>L’API est disponible sur <code>http://localhost:8081</code> et l’UI sur <code>http://localhost:8080</code>. | |
| 367 | +Login initial : <code>admin</code> / <code>admin</code> (à changer immédiatement).</p> | |
| 368 | +<h3 id="33-créer-une-clé-api"><a class="header" href="#33-créer-une-clé-api">3.3 Créer une clé API</a></h3> | |
| 369 | +<p>Dans Dependency-Track → <strong>Administration</strong> → <strong>Access Management</strong> → <strong>Teams</strong> :</p> | |
| 370 | +<ol> | |
| 371 | +<li>Créer (ou réutiliser) une équipe <code>gitrust</code>.</li> | |
| 372 | +<li>Lui attribuer les permissions : | |
| 373 | +<ul> | |
| 374 | +<li><code>BOM_UPLOAD</code></li> | |
| 375 | +<li><code>PROJECT_CREATION_UPLOAD</code></li> | |
| 376 | +<li><code>VIEW_PORTFOLIO</code></li> | |
| 377 | +<li><code>VIEW_VULNERABILITY</code></li> | |
| 378 | +</ul> | |
| 379 | +</li> | |
| 380 | +<li>Générer une API key et la copier.</li> | |
| 381 | +</ol> | |
| 382 | +<h3 id="34-configurer-gitrust"><a class="header" href="#34-configurer-gitrust">3.4 Configurer Gitrust</a></h3> | |
| 383 | +<p>Ajouter au <code>.env</code> :</p> | |
| 384 | +<pre><code class="language-env">CI_DTRACK_ENABLED=true | |
| 385 | +CI_DTRACK_URL=http://localhost:8081 | |
| 386 | +CI_DTRACK_API_KEY=odt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | |
| 387 | +</code></pre> | |
| 388 | +<p>Redémarrer Gitrust. À chaque push :</p> | |
| 389 | +<pre class="mermaid">sequenceDiagram | |
| 390 | + participant Push as post-receive | |
| 391 | + participant Sbom as SbomService | |
| 392 | + participant Git as git archive | |
| 393 | + participant Syft | |
| 394 | + participant Dtrack as Dependency-Track | |
| 395 | + participant DB as sbom_reports | |
| 396 | + | |
| 397 | + Push->>Sbom: process_push(sha, ref) | |
| 398 | + Sbom->>DB: upsert status=pending | |
| 399 | + Sbom->>Git: archive sha | tar -x tmpdir | |
| 400 | + Sbom->>Syft: scan dir:tmpdir -o cyclonedx-json | |
| 401 | + Syft-->>Sbom: BOM bytes | |
| 402 | + Sbom->>DB: update sha256 | |
| 403 | + Sbom->>Dtrack: PUT /api/v1/bom (base64) | |
| 404 | + Dtrack-->>Sbom: token | |
| 405 | + loop max 30s | |
| 406 | + Sbom->>Dtrack: GET /api/v1/bom/token/{token} | |
| 407 | + Dtrack-->>Sbom: processing ? | |
| 408 | + end | |
| 409 | + Sbom->>Dtrack: GET /api/v1/finding/project/{uuid} | |
| 410 | + Dtrack-->>Sbom: findings[] | |
| 411 | + Sbom->>DB: update status=success<br/>+ critical/high/medium/low | |
| 412 | +</pre> | |
| 413 | + | |
| 414 | +<h3 id="35-lire-les-résultats"><a class="header" href="#35-lire-les-résultats">3.5 Lire les résultats</a></h3> | |
| 415 | +<p>Onglet <strong>Security</strong> du dépôt → encart SBOM :</p> | |
| 416 | +<ul> | |
| 417 | +<li>Nombre de composants détectés</li> | |
| 418 | +<li>Compteurs par sévérité : Critical / High / Medium / Low</li> | |
| 419 | +<li>Lien direct vers le projet dans Dependency-Track (si l’UUID est résolu)</li> | |
| 420 | +<li>Hash sha256 du BOM (traçabilité)</li> | |
| 421 | +</ul> | |
| 422 | +<p>Si Dependency-Track met plus de 30s à analyser, le status reste <code>processing</code> — un sweeper ultérieur ira rechercher les findings.</p> | |
| 423 | +<hr> | |
| 424 | +<h2 id="4-débogage"><a class="header" href="#4-débogage">4. Débogage</a></h2> | |
| 425 | +<h3 id="problèmes-ci-courants"><a class="header" href="#problèmes-ci-courants">Problèmes CI courants</a></h3> | |
| 426 | +<div class="table-wrapper"> | |
| 427 | +<table> | |
| 428 | +<thead> | |
| 429 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Vérifier</th></tr> | |
| 430 | +</thead> | |
| 431 | +<tbody> | |
| 432 | +<tr><td>Pipeline reste <code>pending</code></td><td>Worker non démarré, ou channel saturé</td><td>Logs <code>CI worker started</code>, <code>CI_MAX_CONCURRENT</code></td></tr> | |
| 433 | +<tr><td><code>Échec rsync vers le serveur de build</code></td><td>SSH bloqué, clé absente</td><td><code>ssh -p ${CI_REMOTE_SSH_PORT} ${CI_REMOTE_USER}@${CI_REMOTE_HOST}</code> manuel</td></tr> | |
| 434 | +<tr><td><code>dagger: command not found</code></td><td>Dagger non installé sur le builder</td><td>Relancer <code>setup-remote-ci.sh</code></td></tr> | |
| 435 | +<tr><td>Status <code>Cancelled</code> inattendu</td><td>Timeout (<code>CI_DEFAULT_TIMEOUT</code>) ou auto-cancel</td><td>Augmenter le timeout, vérifier pipelines concurrents</td></tr> | |
| 436 | +</tbody> | |
| 437 | +</table> | |
| 438 | +</div> | |
| 439 | +<h3 id="problèmes-sbom-courants"><a class="header" href="#problèmes-sbom-courants">Problèmes SBOM courants</a></h3> | |
| 440 | +<div class="table-wrapper"> | |
| 441 | +<table> | |
| 442 | +<thead> | |
| 443 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Vérifier</th></tr> | |
| 444 | +</thead> | |
| 445 | +<tbody> | |
| 446 | +<tr><td><code>SBOM generation disabled</code></td><td><code>CI_SBOM_ENABLED=false</code></td><td><code>.env</code></td></tr> | |
| 447 | +<tr><td><code>syft spawn failed</code></td><td>Binaire introuvable</td><td><code>which syft</code>, <code>CI_SYFT_BIN</code></td></tr> | |
| 448 | +<tr><td><code>invalid commit sha</code></td><td>SHA non hex 40 chars</td><td>Rare, signale un bug</td></tr> | |
| 449 | +<tr><td><code>Dtrack upload 401</code></td><td>API key invalide ou permissions manquantes</td><td>Régénérer, vérifier les 4 permissions</td></tr> | |
| 450 | +<tr><td>Status <code>processing</code> indéfiniment</td><td>Dtrack surchargé, analyse lente</td><td>Attendre, ou relancer un push</td></tr> | |
| 451 | +</tbody> | |
| 452 | +</table> | |
| 453 | +</div> | |
| 454 | +<h3 id="logs-utiles"><a class="header" href="#logs-utiles">Logs utiles</a></h3> | |
| 455 | +<pre><code class="language-bash"># Logs Gitrust (systemd) | |
| 456 | +journalctl -u gitrust -f | grep -E "CI|SBOM|sbom|pipeline" | |
| 457 | + | |
| 458 | +# Vérifier un pipeline en DB | |
| 459 | +psql $DATABASE_URL -c "SELECT id, status, commit_sha, created_at FROM ci_pipelines ORDER BY created_at DESC LIMIT 10;" | |
| 460 | + | |
| 461 | +# Vérifier un SBOM | |
| 462 | +psql $DATABASE_URL -c "SELECT commit_sha, status, components_count, critical_count, high_count FROM sbom_reports ORDER BY created_at DESC LIMIT 10;" | |
| 463 | +</code></pre> | |
| 464 | +<hr> | |
| 465 | +<h2 id="5-checklist-récapitulative"><a class="header" href="#5-checklist-récapitulative">5. Checklist récapitulative</a></h2> | |
| 466 | +<p><strong>CI :</strong></p> | |
| 467 | +<ul> | |
| 468 | +<li><input disabled="" type="checkbox"> Docker + Dagger installés sur le serveur de build (<code>setup-remote-ci.sh</code>)</li> | |
| 469 | +<li><input disabled="" type="checkbox"> <code>CI_ENABLED=true</code> et <code>CI_REMOTE_*</code> dans <code>.env</code></li> | |
| 470 | +<li><input disabled="" type="checkbox"> Gitrust redémarré</li> | |
| 471 | +<li><input disabled="" type="checkbox"> CI activée dans Settings → CI pour chaque dépôt</li> | |
| 472 | +<li><input disabled="" type="checkbox"> Fichier <code>.gitrust-ci.yml</code> (Easy) ou <code>.dagger/</code> (Power) commité</li> | |
| 473 | +<li><input disabled="" type="checkbox"> Push → pipeline visible dans l’onglet CI</li> | |
| 474 | +</ul> | |
| 475 | +<p><strong>Dependency Tracker :</strong></p> | |
| 476 | +<ul> | |
| 477 | +<li><input disabled="" type="checkbox"> Syft installé sur la machine Gitrust</li> | |
| 478 | +<li><input disabled="" type="checkbox"> <code>CI_SBOM_ENABLED=true</code> dans <code>.env</code></li> | |
| 479 | +<li><input disabled="" type="checkbox"> (Optionnel) Dependency-Track déployé + API key créée avec les 4 permissions</li> | |
| 480 | +<li><input disabled="" type="checkbox"> (Optionnel) <code>CI_DTRACK_ENABLED=true</code>, <code>CI_DTRACK_URL</code>, <code>CI_DTRACK_API_KEY</code> dans <code>.env</code></li> | |
| 481 | +<li><input disabled="" type="checkbox"> Gitrust redémarré</li> | |
| 482 | +<li><input disabled="" type="checkbox"> Push → SBOM visible dans l’onglet Security</li> | |
| 483 | +</ul> | |
| 484 | + | |
| 485 | + </main> | |
| 486 | + | |
| 487 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 488 | + <!-- Mobile navigation buttons --> | |
| 489 | + <a rel="prev" href="../../administration_manual/how-to/configurer-ci-runner-remote.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 490 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 491 | + </a> | |
| 492 | + | |
| 493 | + <a rel="next prefetch" href="../../administration_manual/how-to/durcir-avec-fail2ban.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 494 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 495 | + </a> | |
| 496 | + | |
| 497 | + <div style="clear: both"></div> | |
| 498 | + </nav> | |
| 499 | + </div> | |
| 500 | + </div> | |
| 501 | + | |
| 502 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 503 | + <a rel="prev" href="../../administration_manual/how-to/configurer-ci-runner-remote.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 504 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 505 | + </a> | |
| 506 | + | |
| 507 | + <a rel="next prefetch" href="../../administration_manual/how-to/durcir-avec-fail2ban.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 508 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 509 | + </a> | |
| 510 | + </nav> | |
| 511 | + | |
| 512 | + </div> | |
| 513 | + | |
| 514 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 515 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 516 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 517 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 518 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + <script> | |
| 523 | + window.playground_copyable = true; | |
| 524 | + </script> | |
| 525 | + | |
| 526 | + | |
| 527 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 528 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 529 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 530 | + | |
| 531 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 532 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 533 | + <script src="../../book-a0b12cfe.js"></script> | |
| 534 | + | |
| 535 | + <!-- Custom JS scripts --> | |
| 536 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 537 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + </div> | |
| 542 | + </body> | |
| 543 | +</html> |
A
book/administration_manual/how-to/mettre-a-jour.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Mettre à jour gitrust - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/mettre-a-jour.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="mettre-à-jour-gitrust"><a class="header" href="#mettre-à-jour-gitrust">Mettre à jour gitrust</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/how-to/sauvegarder-restaurer.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-smtp.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/how-to/sauvegarder-restaurer.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-smtp.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/how-to/sauvegarder-restaurer.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Sauvegarder et restaurer - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/sauvegarder-restaurer.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="sauvegarder-et-restaurer"><a class="header" href="#sauvegarder-et-restaurer">Sauvegarder et restaurer</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/how-to/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/how-to/mettre-a-jour.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/how-to/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/how-to/mettre-a-jour.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/how-to/tuner-rate-limiting.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Régler le rate limiting - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/tuner-rate-limiting.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="régler-le-rate-limiting"><a class="header" href="#régler-le-rate-limiting">Régler le rate limiting</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/how-to/durcir-avec-fail2ban.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/how-to/forcer-2fa-globalement.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/how-to/durcir-avec-fail2ban.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/how-to/forcer-2fa-globalement.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/index.html
+303
-0
@@ -0,0 +1,303 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Vue d'ensemble - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="manuel-dadministration"><a class="header" href="#manuel-dadministration">Manuel d’administration</a></h1> | |
| 181 | +<p>Ce manuel s’adresse aux opérateurs et self-hosters qui déploient, configurent et maintiennent une instance gitrust en production. Il couvre l’intégralité du cycle de vie d’une instance : premier démarrage, mise en production, sauvegarde, mise à jour et dépannage. Il suppose des connaissances en administration Linux, en réseau et en TLS — il n’explique pas ces prérequis.</p> | |
| 182 | +<h2 id="parcours-dapprentissage"><a class="header" href="#parcours-dapprentissage">Parcours d’apprentissage</a></h2> | |
| 183 | +<p>Le parcours administrateur est structuré en 4 tutoriels qui représentent environ 3 heures au total. L’étayage est dégressif : le premier tutoriel fournit tout clé en main, le dernier demande de composer soi-même à partir des recettes disponibles.</p> | |
| 184 | +<pre class="mermaid">graph LR | |
| 185 | + A[VM prête<br/>Docker installé] --> B[01-installation-docker<br/>30 min] | |
| 186 | + B --> C[02-installation-systemd<br/>45 min] | |
| 187 | + C --> D[03-premier-demarrage<br/>20 min] | |
| 188 | + D --> E[04-mise-en-production<br/>90 min] | |
| 189 | + E --> F[Admin opérationnel] | |
| 190 | +</pre> | |
| 191 | + | |
| 192 | +<blockquote> | |
| 193 | +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, vous devez avoir une instance gitrust accessible sur <code>http://localhost:4000</code> avec un compte administrateur fonctionnel. Si ce n’est pas le cas, relisez le tutoriel 01.</p> | |
| 194 | +</blockquote> | |
| 195 | +<blockquote> | |
| 196 | +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 04, vous devez avoir une instance démarrée avec une configuration SMTP et un reverse-proxy TLS opérationnel. Si ce n’est pas le cas, relisez le tutoriel 03.</p> | |
| 197 | +</blockquote> | |
| 198 | +<hr> | |
| 199 | +<h2 id="tutoriels--apprendre-en-faisant"><a class="header" href="#tutoriels--apprendre-en-faisant">Tutoriels — apprendre en faisant</a></h2> | |
| 200 | +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété.</p> | |
| 201 | +<ul> | |
| 202 | +<li><a href="tutorials/01-installation-docker.html">01 — Installation Docker : stack docker-compose complète</a> — ~30 min</li> | |
| 203 | +<li><a href="tutorials/02-installation-systemd.html">02 — Installation systemd : binaire natif + service</a> — ~45 min</li> | |
| 204 | +<li><a href="tutorials/03-premier-demarrage.html">03 — Premier démarrage : admin bootstrap, migrations</a> — ~20 min</li> | |
| 205 | +<li><a href="tutorials/04-mise-en-production-192-168.html">04 — Mise en production</a> — ~90 min</li> | |
| 206 | +</ul> | |
| 207 | +<hr> | |
| 208 | +<h2 id="how-to--recettes-pour-les-tâches-courantes"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes">How-to — recettes pour les tâches courantes</a></h2> | |
| 209 | +<p>Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin.</p> | |
| 210 | +<ul> | |
| 211 | +<li><a href="how-to/sauvegarder-restaurer.html">Sauvegarder et restaurer</a></li> | |
| 212 | +<li><a href="how-to/mettre-a-jour.html">Mettre à jour l’instance</a></li> | |
| 213 | +<li><a href="how-to/configurer-smtp.html">Configurer SMTP</a></li> | |
| 214 | +<li><a href="how-to/configurer-oauth.html">Configurer OAuth (Google, GitHub)</a></li> | |
| 215 | +<li><a href="how-to/configurer-ci-runner-remote.html">Configurer un CI runner distant</a></li> | |
| 216 | +<li><a href="how-to/integrer-dependency-track.html">Intégrer Dependency-Track (SBOM)</a></li> | |
| 217 | +<li><a href="how-to/durcir-avec-fail2ban.html">Durcir avec Fail2ban</a></li> | |
| 218 | +<li><a href="how-to/tuner-rate-limiting.html">Tuner le rate limiting</a></li> | |
| 219 | +<li><a href="how-to/forcer-2fa-globalement.html">Forcer la 2FA globalement</a></li> | |
| 220 | +<li><a href="how-to/depanner-ssh.html">Dépanner SSH</a></li> | |
| 221 | +<li><a href="how-to/depanner-ci.html">Dépanner la CI</a></li> | |
| 222 | +<li><a href="how-to/gerer-utilisateurs-admin.html">Gérer les utilisateurs depuis /admin</a></li> | |
| 223 | +<li><a href="how-to/auditer-instance.html">Auditer l’instance</a></li> | |
| 224 | +</ul> | |
| 225 | +<hr> | |
| 226 | +<h2 id="référence--informations-techniques-exactes"><a class="header" href="#référence--informations-techniques-exactes">Référence — informations techniques exactes</a></h2> | |
| 227 | +<p>La référence documente de façon exhaustive les paramètres, schémas et comportements. Elle est destinée à la consultation ponctuelle.</p> | |
| 228 | +<ul> | |
| 229 | +<li><a href="reference/variables-environnement.html">Variables d’environnement (.env)</a></li> | |
| 230 | +<li><a href="reference/parametres-dynamiques.html">Paramètres dynamiques (app_settings)</a></li> | |
| 231 | +<li><a href="reference/schema-base-de-donnees.html">Schéma de base de données</a></li> | |
| 232 | +<li><a href="reference/ports-et-services.html">Ports et services (4000 HTTP, 2222 SSH, 5432 PG)</a></li> | |
| 233 | +<li><a href="reference/conformite-anssi-pa074.html">Conformité ANSSI PA-074</a></li> | |
| 234 | +</ul> | |
| 235 | +<hr> | |
| 236 | +<h2 id="explication--comprendre-le-pourquoi"><a class="header" href="#explication--comprendre-le-pourquoi">Explication — comprendre le pourquoi</a></h2> | |
| 237 | +<p>Les explanations construisent les modèles mentaux nécessaires pour prendre de bonnes décisions d’exploitation. Lisez-les quand vous voulez comprendre les choix d’architecture, pas seulement les appliquer.</p> | |
| 238 | +<ul> | |
| 239 | +<li><a href="explanation/architecture-globale.html">Architecture globale de gitrust</a></li> | |
| 240 | +<li><a href="explanation/modele-deploiement.html">Modèle de déploiement : mono-machine vs HA</a></li> | |
| 241 | +<li><a href="explanation/ci-dagger.html">CI Dagger : pourquoi et comment</a></li> | |
| 242 | +<li><a href="explanation/strategie-sauvegarde.html">Stratégie de sauvegarde 3-2-1 adaptée gitrust</a></li> | |
| 243 | +</ul> | |
| 244 | + | |
| 245 | + </main> | |
| 246 | + | |
| 247 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 248 | + <!-- Mobile navigation buttons --> | |
| 249 | + <a rel="prev" href="../user_manual/explanation/cycle-vie-pull-request.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 250 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 251 | + </a> | |
| 252 | + | |
| 253 | + <a rel="next prefetch" href="../administration_manual/tutorials/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 254 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 255 | + </a> | |
| 256 | + | |
| 257 | + <div style="clear: both"></div> | |
| 258 | + </nav> | |
| 259 | + </div> | |
| 260 | + </div> | |
| 261 | + | |
| 262 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 263 | + <a rel="prev" href="../user_manual/explanation/cycle-vie-pull-request.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 264 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 265 | + </a> | |
| 266 | + | |
| 267 | + <a rel="next prefetch" href="../administration_manual/tutorials/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 268 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 269 | + </a> | |
| 270 | + </nav> | |
| 271 | + | |
| 272 | + </div> | |
| 273 | + | |
| 274 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 275 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 276 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 277 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 278 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + <script> | |
| 283 | + window.playground_copyable = true; | |
| 284 | + </script> | |
| 285 | + | |
| 286 | + | |
| 287 | + <script src="../elasticlunr-ef4e11c1.min.js"></script> | |
| 288 | + <script src="../mark-09e88c2c.min.js"></script> | |
| 289 | + <script src="../searcher-c2a407aa.js"></script> | |
| 290 | + | |
| 291 | + <script src="../clipboard-1626706a.min.js"></script> | |
| 292 | + <script src="../highlight-abc7f01d.js"></script> | |
| 293 | + <script src="../book-a0b12cfe.js"></script> | |
| 294 | + | |
| 295 | + <!-- Custom JS scripts --> | |
| 296 | + <script src="../theme/mermaid-eefea253.min.js"></script> | |
| 297 | + <script src="../theme/mermaid-init-ccf746f1.js"></script> | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + </div> | |
| 302 | + </body> | |
| 303 | +</html> |
A
book/administration_manual/reference/conformite-anssi-pa074.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Conformité ANSSI PA-074 - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/conformite-anssi-pa074.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="conformité-anssi-pa-074"><a class="header" href="#conformité-anssi-pa-074">Conformité ANSSI PA-074</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/reference/ports-et-services.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/explanation/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/reference/ports-et-services.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/explanation/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/reference/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Référence - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="référence"><a class="header" href="#référence">Référence</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/how-to/auditer-instance.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/reference/variables-environnement.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/how-to/auditer-instance.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/reference/variables-environnement.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/reference/parametres-dynamiques.html
+527
-0
@@ -0,0 +1,527 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Paramètres dynamiques - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/parametres-dynamiques.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="paramètres-dynamiques"><a class="header" href="#paramètres-dynamiques">Paramètres dynamiques</a></h1> | |
| 181 | +<p>Ce document explique comment fonctionne la configuration de la plateforme, les deux mécanismes en jeu, leur précédence, et les pièges à connaître.</p> | |
| 182 | +<hr> | |
| 183 | +<h2 id="vue-densemble--deux-systèmes-distincts"><a class="header" href="#vue-densemble--deux-systèmes-distincts">Vue d’ensemble : deux systèmes distincts</a></h2> | |
| 184 | +<p>Gitrust utilise <strong>deux systèmes de configuration</strong> indépendants :</p> | |
| 185 | +<div class="table-wrapper"> | |
| 186 | +<table> | |
| 187 | +<thead> | |
| 188 | +<tr><th>Système</th><th>Source</th><th style="text-align: center">Modifiable à chaud</th><th style="text-align: center">Visible dans l’UI admin</th></tr> | |
| 189 | +</thead> | |
| 190 | +<tbody> | |
| 191 | +<tr><td><strong>Configuration statique</strong></td><td>Fichier <code>.env</code> + variables d’environnement</td><td style="text-align: center">Non (restart requis)</td><td style="text-align: center">Non</td></tr> | |
| 192 | +<tr><td><strong>Configuration dynamique</strong></td><td>Table <code>app_settings</code> (PostgreSQL)</td><td style="text-align: center">Oui (effet immédiat)</td><td style="text-align: center">Oui (<code>/admin/settings</code>)</td></tr> | |
| 193 | +</tbody> | |
| 194 | +</table> | |
| 195 | +</div> | |
| 196 | +<p>Il existe un <strong>cas hybride</strong> pour OAuth (DB prioritaire, <code>.env</code> en fallback).</p> | |
| 197 | +<hr> | |
| 198 | +<h2 id="1-configuration-statique-env"><a class="header" href="#1-configuration-statique-env">1. Configuration statique (<code>.env</code>)</a></h2> | |
| 199 | +<h3 id="principe"><a class="header" href="#principe">Principe</a></h3> | |
| 200 | +<p>Les variables d’environnement sont chargées <strong>une seule fois au démarrage</strong> par <code>dotenvy::dotenv()</code> et stockées dans des structs Rust immuables. Elles ne sont jamais relues après le boot.</p> | |
| 201 | +<h3 id="fichiers-de-référence"><a class="header" href="#fichiers-de-référence">Fichiers de référence</a></h3> | |
| 202 | +<div class="table-wrapper"> | |
| 203 | +<table> | |
| 204 | +<thead> | |
| 205 | +<tr><th>Fichier</th><th>Rôle</th></tr> | |
| 206 | +</thead> | |
| 207 | +<tbody> | |
| 208 | +<tr><td><code>.env.example</code></td><td>Template documenté avec toutes les variables</td></tr> | |
| 209 | +<tr><td><code>.env</code></td><td>Configuration locale (gitignore)</td></tr> | |
| 210 | +<tr><td><code>.env.production</code></td><td>Configuration de déploiement</td></tr> | |
| 211 | +<tr><td><code>.env.test</code></td><td>Configuration de tests</td></tr> | |
| 212 | +</tbody> | |
| 213 | +</table> | |
| 214 | +</div> | |
| 215 | +<h3 id="structs-de-chargement"><a class="header" href="#structs-de-chargement">Structs de chargement</a></h3> | |
| 216 | +<div class="table-wrapper"> | |
| 217 | +<table> | |
| 218 | +<thead> | |
| 219 | +<tr><th>Struct</th><th>Variables concernées</th></tr> | |
| 220 | +</thead> | |
| 221 | +<tbody> | |
| 222 | +<tr><td><code>GitrustConfig</code></td><td><code>GIT_REPOS_BASE_PATH</code>, <code>SSH_PORT</code>, <code>SSH_LISTEN_ADDR</code>, <code>SSH_HOST_KEY_PATH</code>, <code>CI_*</code>, <code>IMPORT_*</code></td></tr> | |
| 223 | +<tr><td><code>AppConfig</code></td><td><code>APP_NAME</code>, <code>APP_THEME</code>, <code>APP_DEBUG</code></td></tr> | |
| 224 | +<tr><td><code>AuthConfig</code></td><td><code>JWT_SECRET</code>, <code>JWT_EXPIRATION_MINUTES</code>, <code>SESSION_*</code>, <code>RATE_LIMIT_*</code>, <code>COOKIE_*</code></td></tr> | |
| 225 | +<tr><td><code>EmailConfig</code></td><td><code>SMTP_*</code>, <code>EMAIL_*</code>, <code>IMAP_*</code></td></tr> | |
| 226 | +</tbody> | |
| 227 | +</table> | |
| 228 | +</div> | |
| 229 | +<h3 id="comportement"><a class="header" href="#comportement">Comportement</a></h3> | |
| 230 | +<ul> | |
| 231 | +<li>Chargées dans <code>RustwardenApp::build()</code> au démarrage</li> | |
| 232 | +<li>Stockées dans des <code>Arc<Config></code> partagés via l’état axum</li> | |
| 233 | +<li><strong>Modifier le <code>.env</code> sans redémarrer n’a aucun effet</strong></li> | |
| 234 | +<li><strong>Ces variables ne sont PAS affichées dans l’interface admin</strong></li> | |
| 235 | +</ul> | |
| 236 | +<h3 id="liste-des-variables-statiques-non-exhaustive"><a class="header" href="#liste-des-variables-statiques-non-exhaustive">Liste des variables statiques (non exhaustive)</a></h3> | |
| 237 | +<pre><code>DATABASE_URL, SERVER_HOST, SERVER_PORT, RUST_LOG, | |
| 238 | +SSH_HOST_KEY_PATH, SSH_PORT, SSH_LISTEN_ADDR, SSH_PUBLIC_HOST, | |
| 239 | +JWT_SECRET, JWT_EXPIRATION_MINUTES, JWT_ISSUER, | |
| 240 | +REFRESH_TOKEN_EXPIRATION_DAYS, REMEMBER_ME_EXPIRATION_DAYS, | |
| 241 | +SESSION_TIMEOUT_MINUTES, SESSION_BACKEND, | |
| 242 | +RATE_LIMIT_LOGIN_PER_MINUTE, RATE_LIMIT_REFRESH_PER_MINUTE, | |
| 243 | +RATE_LIMIT_GENERAL_PER_MINUTE, | |
| 244 | +APP_DEBUG, COOKIE_SECURE, COOKIE_SAME_SITE, | |
| 245 | +ADMIN_USERNAME, ADMIN_EMAIL, ADMIN_PASSWORD, | |
| 246 | +SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM, | |
| 247 | +EMAIL_BASE_URL, EMAIL_QUEUE_*, | |
| 248 | +APP_NAME, APP_THEME, DEFAULT_LOCALE, | |
| 249 | +GIT_REPOS_BASE_PATH, | |
| 250 | +CI_ENABLED, CI_MAX_CONCURRENT, CI_REMOTE_HOST, CI_WORKSPACE_PATH | |
| 251 | +</code></pre> | |
| 252 | +<hr> | |
| 253 | +<h2 id="2-configuration-dynamique-table-app_settings"><a class="header" href="#2-configuration-dynamique-table-app_settings">2. Configuration dynamique (table <code>app_settings</code>)</a></h2> | |
| 254 | +<h3 id="principe-1"><a class="header" href="#principe-1">Principe</a></h3> | |
| 255 | +<p>Les réglages dynamiques sont stockés en base PostgreSQL dans la table <code>app_settings</code> et lus <strong>à chaque requête</strong> via <code>AppSettingsService</code>. Ils sont modifiables à chaud par un administrateur depuis l’interface <code>/admin/settings</code>.</p> | |
| 256 | +<h3 id="schéma-de-la-table"><a class="header" href="#schéma-de-la-table">Schéma de la table</a></h3> | |
| 257 | +<pre><code class="language-sql">CREATE TABLE app_settings ( | |
| 258 | + id UUID PRIMARY KEY, | |
| 259 | + key VARCHAR(100) UNIQUE NOT NULL, | |
| 260 | + value TEXT NOT NULL, | |
| 261 | + description TEXT, | |
| 262 | + updated_by UUID REFERENCES users(id) ON DELETE SET NULL, | |
| 263 | + updated_at TIMESTAMPTZ NOT NULL | |
| 264 | +); | |
| 265 | +</code></pre> | |
| 266 | +<h3 id="initialisation-au-démarrage"><a class="header" href="#initialisation-au-démarrage">Initialisation au démarrage</a></h3> | |
| 267 | +<p>Au boot, <code>AppSettingsService::initialize_default_settings()</code> crée les réglages par défaut <strong>uniquement s’ils n’existent pas encore en base</strong> :</p> | |
| 268 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 269 | +</span><span class="boring">fn main() { | |
| 270 | +</span>let existing = Self::get_setting(db, key).await?; | |
| 271 | +if existing.is_none() { | |
| 272 | + // ... insert valeur par défaut | |
| 273 | +} | |
| 274 | +<span class="boring">}</span></code></pre> | |
| 275 | +<p><strong>Conséquence critique</strong> : une fois qu’un réglage existe en base (créé au premier démarrage ou modifié via l’UI), il n’est <strong>jamais écrasé</strong> par un redémarrage ultérieur.</p> | |
| 276 | +<h3 id="liste-des-réglages-dynamiques-et-leurs-valeurs-par-défaut"><a class="header" href="#liste-des-réglages-dynamiques-et-leurs-valeurs-par-défaut">Liste des réglages dynamiques et leurs valeurs par défaut</a></h3> | |
| 277 | +<div class="table-wrapper"> | |
| 278 | +<table> | |
| 279 | +<thead> | |
| 280 | +<tr><th>Clé</th><th>Défaut</th><th>Description</th></tr> | |
| 281 | +</thead> | |
| 282 | +<tbody> | |
| 283 | +<tr><td><code>app_domain</code></td><td><code>env::var("APP_DOMAIN")</code> ou <code>"localhost"</code></td><td>Domaine de l’application</td></tr> | |
| 284 | +<tr><td><code>allow_registration</code></td><td><code>false</code></td><td>Autoriser l’inscription publique</td></tr> | |
| 285 | +<tr><td><code>validation_email_required</code></td><td><code>true</code></td><td>Exiger la validation email</td></tr> | |
| 286 | +<tr><td><code>audit_log_level</code></td><td><code>INFO</code></td><td>Niveau de log d’audit</td></tr> | |
| 287 | +<tr><td><code>audit_log_actions</code></td><td><code>["create","update","delete","reset_password"]</code></td><td>Actions auditées</td></tr> | |
| 288 | +<tr><td><code>password_min_length</code></td><td><code>8</code></td><td>Longueur minimum mot de passe</td></tr> | |
| 289 | +<tr><td><code>password_require_uppercase</code></td><td><code>false</code></td><td>Exiger des majuscules</td></tr> | |
| 290 | +<tr><td><code>password_require_lowercase</code></td><td><code>false</code></td><td>Exiger des minuscules</td></tr> | |
| 291 | +<tr><td><code>password_require_digits</code></td><td><code>false</code></td><td>Exiger des chiffres</td></tr> | |
| 292 | +<tr><td><code>password_require_special</code></td><td><code>false</code></td><td>Exiger des caractères spéciaux</td></tr> | |
| 293 | +<tr><td><code>password_change_require_email</code></td><td><code>true</code></td><td>Confirmation email pour changement mdp</td></tr> | |
| 294 | +<tr><td><code>password_expiration_enabled</code></td><td><code>false</code></td><td>Activer l’expiration des mots de passe</td></tr> | |
| 295 | +<tr><td><code>password_expiration_days</code></td><td><code>0</code></td><td>Durée d’expiration (jours)</td></tr> | |
| 296 | +<tr><td><code>password_expiration_alert_enabled</code></td><td><code>false</code></td><td>Alerte email avant expiration</td></tr> | |
| 297 | +<tr><td><code>password_expiration_alert_days_before</code></td><td><code>7</code></td><td>Jours avant expiration pour alerter</td></tr> | |
| 298 | +<tr><td><code>oauth_enabled</code></td><td><code>false</code></td><td>Activer OAuth/SSO</td></tr> | |
| 299 | +<tr><td><code>oauth_google_enabled</code></td><td><code>false</code></td><td>Activer Google OAuth</td></tr> | |
| 300 | +<tr><td><code>oauth_github_enabled</code></td><td><code>false</code></td><td>Activer GitHub OAuth</td></tr> | |
| 301 | +<tr><td><code>oauth_discord_enabled</code></td><td><code>false</code></td><td>Activer Discord OAuth</td></tr> | |
| 302 | +<tr><td><code>oauth_microsoft_enabled</code></td><td><code>false</code></td><td>Activer Microsoft OAuth</td></tr> | |
| 303 | +<tr><td><code>oauth_redirect_base_url</code></td><td><code>""</code></td><td>URL de base pour les callbacks OAuth</td></tr> | |
| 304 | +<tr><td><code>oauth_auto_register</code></td><td><code>true</code></td><td>Créer un compte auto au premier login OAuth</td></tr> | |
| 305 | +<tr><td><code>oauth_link_existing_account</code></td><td><code>true</code></td><td>Lier un compte OAuth à un utilisateur existant</td></tr> | |
| 306 | +<tr><td><code>oauth_{provider}_client_id</code></td><td><code>""</code></td><td>Client ID du provider OAuth</td></tr> | |
| 307 | +<tr><td><code>oauth_{provider}_client_secret</code></td><td><code>""</code></td><td>Client secret (chiffré AES-256-GCM en base)</td></tr> | |
| 308 | +<tr><td><code>oauth_microsoft_tenant</code></td><td><code>""</code></td><td>Tenant Azure AD</td></tr> | |
| 309 | +</tbody> | |
| 310 | +</table> | |
| 311 | +</div> | |
| 312 | +<hr> | |
| 313 | +<h2 id="3-cas-hybride--oauth"><a class="header" href="#3-cas-hybride--oauth">3. Cas hybride : OAuth</a></h2> | |
| 314 | +<p>OAuth est le <strong>seul sous-système</strong> qui combine les deux sources. La logique dans <code>OAuthConfig::load()</code> :</p> | |
| 315 | +<pre><code>Pour chaque réglage OAuth : | |
| 316 | + 1. Chercher dans app_settings (DB) | |
| 317 | + → si trouvé et non vide : utiliser cette valeur | |
| 318 | + 2. Sinon : fallback sur la variable d'environnement | |
| 319 | + → si absente : utiliser la valeur par défaut codée en dur | |
| 320 | +</code></pre> | |
| 321 | +<p><strong>Important</strong> : <code>OAuthConfig::load()</code> est appelé au démarrage. Le résultat est stocké dans un <code>Arc</code> et n’est pas relu dynamiquement. Donc :</p> | |
| 322 | +<ul> | |
| 323 | +<li>Modifier un réglage OAuth <strong>via l’UI admin</strong> nécessite un <strong>redémarrage</strong> pour que <code>OAuthConfig</code> soit rechargé</li> | |
| 324 | +<li>Le <code>.env</code> n’est qu’un fallback si la DB n’a pas de valeur</li> | |
| 325 | +</ul> | |
| 326 | +<hr> | |
| 327 | +<h2 id="4-précédence-et-comportement-au-redémarrage"><a class="header" href="#4-précédence-et-comportement-au-redémarrage">4. Précédence et comportement au redémarrage</a></h2> | |
| 328 | +<h3 id="réglages-statiques-env-uniquement"><a class="header" href="#réglages-statiques-env-uniquement">Réglages statiques (<code>.env</code> uniquement)</a></h3> | |
| 329 | +<div class="table-wrapper"> | |
| 330 | +<table> | |
| 331 | +<thead> | |
| 332 | +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr> | |
| 333 | +</thead> | |
| 334 | +<tbody> | |
| 335 | +<tr><td>Modifier <code>.env</code></td><td style="text-align: center">Non</td><td style="text-align: center">Oui</td></tr> | |
| 336 | +</tbody> | |
| 337 | +</table> | |
| 338 | +</div> | |
| 339 | +<h3 id="réglages-dynamiques-db-uniquement"><a class="header" href="#réglages-dynamiques-db-uniquement">Réglages dynamiques (DB uniquement)</a></h3> | |
| 340 | +<div class="table-wrapper"> | |
| 341 | +<table> | |
| 342 | +<thead> | |
| 343 | +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr> | |
| 344 | +</thead> | |
| 345 | +<tbody> | |
| 346 | +<tr><td>Modifier via UI admin</td><td style="text-align: center">Oui</td><td style="text-align: center">Oui (valeur en DB persiste)</td></tr> | |
| 347 | +<tr><td>Modifier le <code>.env</code></td><td style="text-align: center">Aucun effet</td><td style="text-align: center">Aucun effet</td></tr> | |
| 348 | +</tbody> | |
| 349 | +</table> | |
| 350 | +</div> | |
| 351 | +<h3 id="réglages-hybrides-oauth"><a class="header" href="#réglages-hybrides-oauth">Réglages hybrides (OAuth)</a></h3> | |
| 352 | +<div class="table-wrapper"> | |
| 353 | +<table> | |
| 354 | +<thead> | |
| 355 | +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr> | |
| 356 | +</thead> | |
| 357 | +<tbody> | |
| 358 | +<tr><td>Modifier via UI admin</td><td style="text-align: center">Non (OAuthConfig est en Arc)</td><td style="text-align: center">Oui (DB prime sur .env)</td></tr> | |
| 359 | +<tr><td>Modifier <code>.env</code></td><td style="text-align: center">Non</td><td style="text-align: center">Seulement si aucune valeur en DB</td></tr> | |
| 360 | +</tbody> | |
| 361 | +</table> | |
| 362 | +</div> | |
| 363 | +<hr> | |
| 364 | +<h2 id="5-piège-principal--les-variables-env-fantômes"><a class="header" href="#5-piège-principal--les-variables-env-fantômes">5. Piège principal : les variables <code>.env</code> fantômes</a></h2> | |
| 365 | +<p>Certaines variables présentes dans <code>.env.example</code> donnent l’<strong>illusion</strong> de configurer des réglages qui sont en réalité gérés par la base de données :</p> | |
| 366 | +<div class="table-wrapper"> | |
| 367 | +<table> | |
| 368 | +<thead> | |
| 369 | +<tr><th>Variable <code>.env</code></th><th>Réglage DB correspondant</th><th style="text-align: center">La variable <code>.env</code> est-elle lue ?</th></tr> | |
| 370 | +</thead> | |
| 371 | +<tbody> | |
| 372 | +<tr><td><code>ALLOW_REGISTRATION=true</code></td><td><code>allow_registration</code></td><td style="text-align: center"><strong>Non</strong> — valeur par défaut codée en dur (<code>"false"</code>)</td></tr> | |
| 373 | +<tr><td><code>EMAIL_VALIDATION_REQUIRED=true</code></td><td><code>validation_email_required</code></td><td style="text-align: center"><strong>Non</strong> — valeur par défaut codée en dur (<code>"true"</code>)</td></tr> | |
| 374 | +<tr><td><code>OAUTH_ENABLED=true</code></td><td><code>oauth_enabled</code></td><td style="text-align: center">Oui, mais <strong>seulement en fallback</strong> si la DB n’a pas de valeur</td></tr> | |
| 375 | +</tbody> | |
| 376 | +</table> | |
| 377 | +</div> | |
| 378 | +<p>Pour <code>ALLOW_REGISTRATION</code> et <code>EMAIL_VALIDATION_REQUIRED</code> :</p> | |
| 379 | +<ul> | |
| 380 | +<li>La variable <code>.env</code> est documentée dans <code>.env.example</code> mais <strong>n’est jamais consultée</strong> par <code>initialize_default_settings()</code></li> | |
| 381 | +<li>La valeur initiale est <strong>codée en dur</strong> dans le service</li> | |
| 382 | +<li>Seule la valeur en base de données (modifiable via <code>/admin/settings</code>) fait foi</li> | |
| 383 | +</ul> | |
| 384 | +<p>Pour <code>app_domain</code>, c’est le seul réglage dynamique qui lit le <code>.env</code> comme seed initial.</p> | |
| 385 | +<hr> | |
| 386 | +<h2 id="6-diagramme-de-décision"><a class="header" href="#6-diagramme-de-décision">6. Diagramme de décision</a></h2> | |
| 387 | +<pre><code> ┌─────────────────────────────┐ | |
| 388 | + │ Quel type de réglage ? │ | |
| 389 | + └──────────┬──────────────────-┘ | |
| 390 | + │ | |
| 391 | + ┌────────────────┼────────────────┐ | |
| 392 | + ▼ ▼ ▼ | |
| 393 | + Infrastructure Fonctionnel OAuth | |
| 394 | + (port, JWT, SMTP) (inscription, (providers, | |
| 395 | + mots de passe) secrets) | |
| 396 | + │ │ │ | |
| 397 | + ▼ ▼ ▼ | |
| 398 | + .env seul DB seule DB + fallback .env | |
| 399 | + │ │ │ | |
| 400 | + ▼ ▼ ▼ | |
| 401 | + Restart requis Effet immédiat Restart requis | |
| 402 | + via /admin/ (OAuthConfig en Arc) | |
| 403 | + settings | |
| 404 | +</code></pre> | |
| 405 | +<hr> | |
| 406 | +<h2 id="7-guide-pour-les-administrateurs"><a class="header" href="#7-guide-pour-les-administrateurs">7. Guide pour les administrateurs</a></h2> | |
| 407 | +<h3 id="modifier-un-réglage-dinfrastructure"><a class="header" href="#modifier-un-réglage-dinfrastructure">Modifier un réglage d’infrastructure</a></h3> | |
| 408 | +<p>Éditer <code>.env</code> (ou <code>.env.production</code>) puis redémarrer le service :</p> | |
| 409 | +<pre><code class="language-bash"># Éditer | |
| 410 | +vim .env | |
| 411 | + | |
| 412 | +# Redémarrer | |
| 413 | +systemctl restart gitrust # production | |
| 414 | +# ou Ctrl+C + cargo run # dev | |
| 415 | +</code></pre> | |
| 416 | +<h3 id="modifier-un-réglage-fonctionnel"><a class="header" href="#modifier-un-réglage-fonctionnel">Modifier un réglage fonctionnel</a></h3> | |
| 417 | +<p>Se connecter en tant qu’administrateur, aller dans <code>/admin/settings</code>, modifier la valeur, et cliquer “Save”. L’effet est <strong>immédiat</strong>, aucun redémarrage nécessaire.</p> | |
| 418 | +<h3 id="modifier-un-réglage-oauth"><a class="header" href="#modifier-un-réglage-oauth">Modifier un réglage OAuth</a></h3> | |
| 419 | +<p>Via <code>/admin/settings</code>, modifier les valeurs OAuth puis <strong>redémarrer le service</strong> (la config OAuth est chargée en mémoire au boot et n’est pas relue dynamiquement).</p> | |
| 420 | +<h3 id="vérifier-la-valeur-effective-dun-réglage"><a class="header" href="#vérifier-la-valeur-effective-dun-réglage">Vérifier la valeur effective d’un réglage</a></h3> | |
| 421 | +<p>Pour les réglages dynamiques, interroger la base directement :</p> | |
| 422 | +<pre><code class="language-sql">SELECT key, value, updated_at, updated_by | |
| 423 | +FROM app_settings | |
| 424 | +WHERE key = 'allow_registration'; | |
| 425 | +</code></pre> | |
| 426 | +<p>Pour les réglages statiques, vérifier les logs au démarrage (<code>RUST_LOG=debug</code>).</p> | |
| 427 | +<hr> | |
| 428 | +<h2 id="8-guide-pour-les-développeurs"><a class="header" href="#8-guide-pour-les-développeurs">8. Guide pour les développeurs</a></h2> | |
| 429 | +<h3 id="ajouter-un-nouveau-réglage-dynamique"><a class="header" href="#ajouter-un-nouveau-réglage-dynamique">Ajouter un nouveau réglage dynamique</a></h3> | |
| 430 | +<ol> | |
| 431 | +<li> | |
| 432 | +<p>Ajouter le tuple <code>(clé, valeur_défaut, description)</code> dans <code>AppSettingsService::initialize_default_settings()</code> :</p> | |
| 433 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 434 | +</span><span class="boring">fn main() { | |
| 435 | +</span>("ma_nouvelle_cle", "valeur_par_defaut", Some("Description pour l'UI admin")), | |
| 436 | +<span class="boring">}</span></code></pre> | |
| 437 | +</li> | |
| 438 | +<li> | |
| 439 | +<p>Lire la valeur dans le code via le service :</p> | |
| 440 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 441 | +</span><span class="boring">fn main() { | |
| 442 | +</span>// Boolean avec défaut | |
| 443 | +let enabled = AppSettingsService::get_bool(&db, "ma_nouvelle_cle", false).await?; | |
| 444 | + | |
| 445 | +// String | |
| 446 | +let val = AppSettingsService::get_setting(&db, "ma_nouvelle_cle").await?; | |
| 447 | +<span class="boring">}</span></code></pre> | |
| 448 | +</li> | |
| 449 | +<li> | |
| 450 | +<p>La valeur apparaîtra automatiquement dans <code>/admin/settings</code>.</p> | |
| 451 | +</li> | |
| 452 | +</ol> | |
| 453 | +<h3 id="ajouter-un-nouveau-réglage-statique"><a class="header" href="#ajouter-un-nouveau-réglage-statique">Ajouter un nouveau réglage statique</a></h3> | |
| 454 | +<ol> | |
| 455 | +<li>Ajouter la variable dans <code>.env.example</code> avec documentation complète</li> | |
| 456 | +<li>Lire la variable dans le struct <code>Config</code> correspondant via <code>env::var()</code></li> | |
| 457 | +<li>La valeur ne sera <strong>pas</strong> visible dans l’interface admin</li> | |
| 458 | +</ol> | |
| 459 | +<h3 id="ajouter-un-réglage-hybride-db--fallback-env"><a class="header" href="#ajouter-un-réglage-hybride-db--fallback-env">Ajouter un réglage hybride (DB + fallback .env)</a></h3> | |
| 460 | +<p>Suivre le pattern OAuth dans <code>crates/rustwarden-core/src/config/oauth.rs</code> :</p> | |
| 461 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 462 | +</span><span class="boring">fn main() { | |
| 463 | +</span>let ma_valeur = match db_val("ma_cle").await { | |
| 464 | + Some(v) => v, | |
| 465 | + None => env::var("MA_CLE").unwrap_or_else(|_| "defaut".to_string()), | |
| 466 | +}; | |
| 467 | +<span class="boring">}</span></code></pre> | |
| 468 | + | |
| 469 | + </main> | |
| 470 | + | |
| 471 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 472 | + <!-- Mobile navigation buttons --> | |
| 473 | + <a rel="prev" href="../../administration_manual/reference/variables-environnement.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 474 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 475 | + </a> | |
| 476 | + | |
| 477 | + <a rel="next prefetch" href="../../administration_manual/reference/schema-base-de-donnees.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 478 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 479 | + </a> | |
| 480 | + | |
| 481 | + <div style="clear: both"></div> | |
| 482 | + </nav> | |
| 483 | + </div> | |
| 484 | + </div> | |
| 485 | + | |
| 486 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 487 | + <a rel="prev" href="../../administration_manual/reference/variables-environnement.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 488 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 489 | + </a> | |
| 490 | + | |
| 491 | + <a rel="next prefetch" href="../../administration_manual/reference/schema-base-de-donnees.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 492 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 493 | + </a> | |
| 494 | + </nav> | |
| 495 | + | |
| 496 | + </div> | |
| 497 | + | |
| 498 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 499 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 500 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 501 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 502 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + <script> | |
| 507 | + window.playground_copyable = true; | |
| 508 | + </script> | |
| 509 | + | |
| 510 | + | |
| 511 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 512 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 513 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 514 | + | |
| 515 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 516 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 517 | + <script src="../../book-a0b12cfe.js"></script> | |
| 518 | + | |
| 519 | + <!-- Custom JS scripts --> | |
| 520 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 521 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + </div> | |
| 526 | + </body> | |
| 527 | +</html> |
A
book/administration_manual/reference/ports-et-services.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Ports et services - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/ports-et-services.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="ports-et-services"><a class="header" href="#ports-et-services">Ports et services</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/reference/schema-base-de-donnees.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/reference/conformite-anssi-pa074.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/reference/schema-base-de-donnees.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/reference/conformite-anssi-pa074.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/reference/schema-base-de-donnees.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Schéma de la base de données - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/schema-base-de-donnees.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="schéma-de-la-base-de-données"><a class="header" href="#schéma-de-la-base-de-données">Schéma de la base de données</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/reference/parametres-dynamiques.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/reference/ports-et-services.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/reference/parametres-dynamiques.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/reference/ports-et-services.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/reference/variables-environnement.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Variables d'environnement - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/variables-environnement.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="variables-denvironnement"><a class="header" href="#variables-denvironnement">Variables d’environnement</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/reference/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/reference/parametres-dynamiques.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/reference/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/reference/parametres-dynamiques.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/tutorials/01-installation-docker.html
+488
-0
@@ -0,0 +1,488 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>01 — Installation avec Docker - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/tutorials/01-installation-docker.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose"><a class="header" href="#installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose">Installation Docker : démarrez gitrust en 30 minutes avec docker-compose</a></h1> | |
| 181 | +<h2 id="objectifs"><a class="header" href="#objectifs">Objectifs</a></h2> | |
| 182 | +<p>À la fin de ce tutoriel, vous saurez :</p> | |
| 183 | +<ul> | |
| 184 | +<li><strong>O1. Déployer</strong> la stack gitrust minimale (application + PostgreSQL) avec docker-compose</li> | |
| 185 | +<li><strong>O2. Vérifier</strong> que les trois services démarrent correctement et sont en bonne santé</li> | |
| 186 | +<li><strong>O3. Créer</strong> le premier compte administrateur et accéder à l’interface web</li> | |
| 187 | +</ul> | |
| 188 | +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2> | |
| 189 | +<ul> | |
| 190 | +<li><strong>Technique</strong> : une VM ou machine Linux (Debian 12 / Ubuntu 22.04 ou supérieur), Docker Engine ≥ 24 installé (<code>docker --version</code> répond), Docker Compose plugin installé (<code>docker compose version</code> répond), ports 4000 et 2222 libres sur la machine</li> | |
| 191 | +<li><strong>Pédagogique</strong> : aucun tutoriel gitrust préalable requis — c’est le point de départ du parcours administrateur</li> | |
| 192 | +<li><strong>Temps estimé</strong> : ~30 minutes</li> | |
| 193 | +</ul> | |
| 194 | +<h2 id="vue-densemble"><a class="header" href="#vue-densemble">Vue d’ensemble</a></h2> | |
| 195 | +<p>Avant de lancer la moindre commande, comprenons ce que docker-compose va orchestrer et pourquoi.</p> | |
| 196 | +<p>gitrust est composé de <strong>trois services principaux</strong> dans sa configuration minimale. Pensez-y comme trois pièces d’un appartement qui s’appellent entre elles via un réseau interne :</p> | |
| 197 | +<pre class="mermaid">graph TB | |
| 198 | + subgraph internet ["Internet / votre navigateur"] | |
| 199 | + B[Navigateur :4000] | |
| 200 | + S[Client git/SSH :2222] | |
| 201 | + end | |
| 202 | + | |
| 203 | + subgraph docker ["Réseau Docker gitrust_net"] | |
| 204 | + A["gitrust-app<br/>(Rust, port 4000 + 2222)<br/>Lit la config depuis .env"] | |
| 205 | + P["postgres<br/>(PostgreSQL 16, port 5432)<br/>Stocke comptes, dépôts, issues"] | |
| 206 | + R["redis (optionnel)<br/>(Redis 7, port 6379)<br/>Sessions web + cache"] | |
| 207 | + end | |
| 208 | + | |
| 209 | + B -->|HTTP| A | |
| 210 | + S -->|SSH| A | |
| 211 | + A -->|SQL| P | |
| 212 | + A -.->|sessions| R | |
| 213 | +</pre> | |
| 214 | + | |
| 215 | +<p><strong>gitrust-app</strong> est le cœur : serveur HTTP (<code>:4000</code>) + serveur SSH (<code>:2222</code>) compilé en Rust. Il lit sa configuration depuis un fichier <code>.env</code> et écrit les dépôts Git bare sur un volume Docker. <strong>PostgreSQL</strong> stocke toutes les données relationnelles (comptes, organisations, dépôts, issues, PRs). <strong>Redis</strong> est optionnel dans la configuration minimale — il gère les sessions web et le cache quand il est présent.</p> | |
| 216 | +<p>Dans ce tutoriel, nous utilisons la stack <strong>minimale</strong> (app + PostgreSQL) suffisante pour évaluer gitrust et démarrer une petite instance. La stack production avec Redis et SMTP se trouve dans <a href="../../template/docker/docker-compose.production.yml"><code>template/docker/docker-compose.production.yml</code></a>.</p> | |
| 217 | +<hr> | |
| 218 | +<h2 id="étape-1--créez-le-répertoire-de-travail-et-le-fichier-de-configuration"><a class="header" href="#étape-1--créez-le-répertoire-de-travail-et-le-fichier-de-configuration">Étape 1 : Créez le répertoire de travail et le fichier de configuration</a></h2> | |
| 219 | +<p>Créez un répertoire dédié à votre instance gitrust et positionnez-vous dedans :</p> | |
| 220 | +<pre><code class="language-bash">mkdir -p /opt/gitrust && cd /opt/gitrust | |
| 221 | +</code></pre> | |
| 222 | +<p>Créez le fichier de configuration <code>.env</code> avec les valeurs minimales. <strong>Changez impérativement</strong> les valeurs marquées <code>CHANGE_ME</code> :</p> | |
| 223 | +<pre><code class="language-bash">cat > .env << 'EOF' | |
| 224 | +# === gitrust — configuration minimale === | |
| 225 | +# Changez toutes les valeurs CHANGE_ME avant de démarrer | |
| 226 | + | |
| 227 | +# Clé secrète de l'application (générez avec : openssl rand -hex 32) | |
| 228 | +SECRET_KEY=CHANGE_ME_openssl_rand_hex_32 | |
| 229 | + | |
| 230 | +# URL publique de l'instance (sans slash final) | |
| 231 | +APP_URL=http://localhost:4000 | |
| 232 | + | |
| 233 | +# Base de données PostgreSQL | |
| 234 | +DATABASE_URL=postgres://gitrust:CHANGE_ME_db_password@postgres:5432/gitrust | |
| 235 | +POSTGRES_USER=gitrust | |
| 236 | +POSTGRES_PASSWORD=CHANGE_ME_db_password | |
| 237 | +POSTGRES_DB=gitrust | |
| 238 | + | |
| 239 | +# Serveur SSH (port exposé à l'extérieur) | |
| 240 | +SSH_PORT=2222 | |
| 241 | + | |
| 242 | +# Mode de l'application | |
| 243 | +RUST_LOG=info | |
| 244 | +APP_ENV=production | |
| 245 | +EOF | |
| 246 | +</code></pre> | |
| 247 | +<p>Générez maintenant une clé secrète robuste et remplacez la valeur dans <code>.env</code> :</p> | |
| 248 | +<pre><code class="language-bash">SECRET=$(openssl rand -hex 32) | |
| 249 | +sed -i "s/CHANGE_ME_openssl_rand_hex_32/$SECRET/" .env | |
| 250 | +</code></pre> | |
| 251 | +<p>Choisissez également un mot de passe pour PostgreSQL et remplacez les deux occurrences :</p> | |
| 252 | +<pre><code class="language-bash">DB_PASS=$(openssl rand -hex 16) | |
| 253 | +sed -i "s/CHANGE_ME_db_password/$DB_PASS/g" .env | |
| 254 | +</code></pre> | |
| 255 | +<p>Sortie attendue (vérification) :</p> | |
| 256 | +<pre><code class="language-bash">grep SECRET_KEY .env | |
| 257 | +# → SECRET_KEY=4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a | |
| 258 | +</code></pre> | |
| 259 | +<p><strong>Checkpoint</strong> : exécutez <code>grep CHANGE_ME .env</code> — la commande doit ne rien retourner. Si elle retourne des lignes, ces valeurs n’ont pas été remplacées et le démarrage échouera.</p> | |
| 260 | +<hr> | |
| 261 | +<h2 id="étape-2--créez-le-fichier-docker-composeyml"><a class="header" href="#étape-2--créez-le-fichier-docker-composeyml">Étape 2 : Créez le fichier docker-compose.yml</a></h2> | |
| 262 | +<p>Créez le fichier <code>docker-compose.yml</code> suivant dans <code>/opt/gitrust/</code>. Ce contenu correspond à la stack minimale gitrust — il est reproduit ici intégralement pour que vous puissiez démarrer sans dépendance externe :</p> | |
| 263 | +<pre><code class="language-bash">cat > docker-compose.yml << 'EOF' | |
| 264 | +# docker-compose.minimal.yml — Stack gitrust minimale (app + PostgreSQL) | |
| 265 | +# Cas d'usage : évaluation, développement, petite instance (<10 utilisateurs) | |
| 266 | +# Pour la production : utilisez docker-compose.production.yml (+ Redis + SMTP) | |
| 267 | +# | |
| 268 | +# Usage : | |
| 269 | +# docker compose up -d | |
| 270 | +# docker compose logs -f gitrust | |
| 271 | +# docker compose down | |
| 272 | + | |
| 273 | +version: "3.9" | |
| 274 | + | |
| 275 | +services: | |
| 276 | + # ── Base de données ─────────────────────────────────────────────────────── | |
| 277 | + postgres: | |
| 278 | + image: postgres:16-alpine | |
| 279 | + container_name: gitrust_postgres | |
| 280 | + restart: unless-stopped | |
| 281 | + environment: | |
| 282 | + POSTGRES_USER: ${POSTGRES_USER} | |
| 283 | + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} | |
| 284 | + POSTGRES_DB: ${POSTGRES_DB} | |
| 285 | + volumes: | |
| 286 | + # Données persistantes — ne supprimez pas ce volume sans sauvegarde | |
| 287 | + - postgres_data:/var/lib/postgresql/data | |
| 288 | + healthcheck: | |
| 289 | + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] | |
| 290 | + interval: 10s | |
| 291 | + timeout: 5s | |
| 292 | + retries: 5 | |
| 293 | + networks: | |
| 294 | + - gitrust_net | |
| 295 | + | |
| 296 | + # ── Application gitrust ─────────────────────────────────────────────────── | |
| 297 | + gitrust: | |
| 298 | + image: ghcr.io/gitrust/gitrust:latest | |
| 299 | + container_name: gitrust_app | |
| 300 | + restart: unless-stopped | |
| 301 | + depends_on: | |
| 302 | + postgres: | |
| 303 | + condition: service_healthy | |
| 304 | + env_file: | |
| 305 | + # Lit toutes les variables depuis .env — ne commitez jamais ce fichier | |
| 306 | + - .env | |
| 307 | + ports: | |
| 308 | + # Interface web — exposée sur toutes les interfaces de la machine hôte | |
| 309 | + - "4000:4000" | |
| 310 | + # Serveur SSH Git — exposé sur le port configuré dans .env | |
| 311 | + - "${SSH_PORT:-2222}:2222" | |
| 312 | + volumes: | |
| 313 | + # Dépôts Git bare — données critiques, sauvegardez ce volume | |
| 314 | + - git_repos:/var/lib/gitrust/repositories | |
| 315 | + # Clés SSH du serveur — générées au premier démarrage, persistez-les | |
| 316 | + - ssh_host_keys:/etc/gitrust/ssh | |
| 317 | + healthcheck: | |
| 318 | + test: ["CMD", "curl", "-f", "http://localhost:4000/health"] | |
| 319 | + interval: 30s | |
| 320 | + timeout: 10s | |
| 321 | + retries: 3 | |
| 322 | + start_period: 30s | |
| 323 | + networks: | |
| 324 | + - gitrust_net | |
| 325 | + | |
| 326 | +volumes: | |
| 327 | + # postgres_data : données relationnelles (comptes, dépôts, issues, PRs) | |
| 328 | + postgres_data: | |
| 329 | + # git_repos : dépôts Git bare (le contenu réel des commits) | |
| 330 | + git_repos: | |
| 331 | + # ssh_host_keys : clés SSH hôte (fingerprint de votre serveur) | |
| 332 | + ssh_host_keys: | |
| 333 | + | |
| 334 | +networks: | |
| 335 | + gitrust_net: | |
| 336 | + driver: bridge | |
| 337 | +EOF | |
| 338 | +</code></pre> | |
| 339 | +<p><strong>Checkpoint</strong> : vérifiez que les deux fichiers sont présents dans <code>/opt/gitrust/</code> :</p> | |
| 340 | +<pre><code class="language-bash">ls -la /opt/gitrust/ | |
| 341 | +</code></pre> | |
| 342 | +<p>Sortie attendue :</p> | |
| 343 | +<pre><code>total 16 | |
| 344 | +drwxr-xr-x 2 root root 4096 avr 17 10:00 . | |
| 345 | +drwxr-xr-x 8 root root 4096 avr 17 09:55 .. | |
| 346 | +-rw------- 1 root root 612 avr 17 10:00 .env | |
| 347 | +-rw-r--r-- 1 root root 2048 avr 17 10:00 docker-compose.yml | |
| 348 | +</code></pre> | |
| 349 | +<hr> | |
| 350 | +<h2 id="étape-3--démarrez-la-stack-et-suivez-les-logs"><a class="header" href="#étape-3--démarrez-la-stack-et-suivez-les-logs">Étape 3 : Démarrez la stack et suivez les logs</a></h2> | |
| 351 | +<p>Démarrez tous les services en arrière-plan :</p> | |
| 352 | +<pre><code class="language-bash">docker compose up -d | |
| 353 | +</code></pre> | |
| 354 | +<p>Sortie attendue :</p> | |
| 355 | +<pre><code>[+] Running 4/4 | |
| 356 | + ✔ Network gitrust_gitrust_net Created 0.1s | |
| 357 | + ✔ Volume "gitrust_postgres_data" Created 0.0s | |
| 358 | + ✔ Container gitrust_postgres Started 0.8s | |
| 359 | + ✔ Container gitrust_app Started 1.2s | |
| 360 | +</code></pre> | |
| 361 | +<p>Suivez les logs de l’application pour observer le démarrage (les migrations s’exécutent automatiquement) :</p> | |
| 362 | +<pre><code class="language-bash">docker compose logs -f gitrust | |
| 363 | +</code></pre> | |
| 364 | +<p>Sortie attendue (les 15-20 premières secondes) :</p> | |
| 365 | +<pre><code>gitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Starting gitrust v0.9.0 | |
| 366 | +gitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Connecting to database... | |
| 367 | +gitrust_app | 2026-04-17T10:00:16Z INFO gitrust > Running database migrations... | |
| 368 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Applied 42 migrations successfully | |
| 369 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Generating SSH host keys... | |
| 370 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH host key fingerprint: SHA256:xxxxxxxxxxxxxxxxxxxx | |
| 371 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > HTTP server listening on 0.0.0.0:4000 | |
| 372 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH server listening on 0.0.0.0:2222 | |
| 373 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > gitrust is ready | |
| 374 | +</code></pre> | |
| 375 | +<p>Appuyez sur <strong>Ctrl+C</strong> pour quitter le suivi des logs (les containers continuent de tourner).</p> | |
| 376 | +<p><strong>Checkpoint</strong> : vérifiez l’état de santé des services :</p> | |
| 377 | +<pre><code class="language-bash">docker compose ps | |
| 378 | +</code></pre> | |
| 379 | +<p>Sortie attendue :</p> | |
| 380 | +<pre><code>NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS | |
| 381 | +gitrust_app ghcr.io/gitrust/gitrust:latest "/usr/local/bin/gitr…" gitrust 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:4000->4000/tcp, 0.0.0.0:2222->2222/tcp | |
| 382 | +gitrust_postgres postgres:16-alpine "docker-entrypoint.s…" postgres 2 minutes ago Up 2 minutes (healthy) 5432/tcp | |
| 383 | +</code></pre> | |
| 384 | +<p>Les deux containers doivent afficher <code>(healthy)</code>. Si l’un affiche <code>(starting)</code>, attendez 30 secondes et relancez la commande. S’il affiche <code>(unhealthy)</code>, consultez les logs avec <code>docker compose logs gitrust</code> ou <code>docker compose logs postgres</code>.</p> | |
| 385 | +<hr> | |
| 386 | +<h2 id="étape-4--créez-le-premier-compte-administrateur"><a class="header" href="#étape-4--créez-le-premier-compte-administrateur">Étape 4 : Créez le premier compte administrateur</a></h2> | |
| 387 | +<p>Ouvrez votre navigateur et rendez-vous sur <code>http://localhost:4000</code>.</p> | |
| 388 | +<p>Vous devriez voir la page d’accueil gitrust avec un formulaire d’inscription. Comme l’instance est vierge, <strong>le premier compte créé devient automatiquement administrateur</strong>.</p> | |
| 389 | +<p>Remplissez le formulaire :</p> | |
| 390 | +<ul> | |
| 391 | +<li><strong>Pseudo</strong> : votre identifiant administrateur (ex. <code>admin</code>)</li> | |
| 392 | +<li><strong>E-mail</strong> : votre adresse e-mail</li> | |
| 393 | +<li><strong>Mot de passe</strong> : choisissez un mot de passe robuste (≥ 12 caractères)</li> | |
| 394 | +</ul> | |
| 395 | +<p>Cliquez sur <strong>Créer mon compte</strong>.</p> | |
| 396 | +<p>Sortie attendue dans les logs (visible avec <code>docker compose logs -f gitrust</code>) :</p> | |
| 397 | +<pre><code>gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::auth > New user registered: admin (id=1) | |
| 398 | +gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::admin > First user promoted to administrator: admin | |
| 399 | +</code></pre> | |
| 400 | +<p><strong>Checkpoint final</strong> : connectez-vous avec vos identifiants. Après la connexion, vérifiez que le menu en haut à droite affiche un lien <strong>Administration</strong> (ou naviguez vers <code>http://localhost:4000/admin</code>). Cette page n’est accessible qu’aux administrateurs — sa présence confirme que votre compte a bien le rôle admin.</p> | |
| 401 | +<p>L’URL de votre instance est <code>http://localhost:4000</code> et votre compte administrateur est opérationnel.</p> | |
| 402 | +<hr> | |
| 403 | +<h2 id="récapitulatif"><a class="header" href="#récapitulatif">Récapitulatif</a></h2> | |
| 404 | +<ul> | |
| 405 | +<li>✓ <strong>O1 accompli</strong> : la stack docker-compose est déployée — <code>docker compose ps</code> affiche deux containers <code>(healthy)</code></li> | |
| 406 | +<li>✓ <strong>O2 accompli</strong> : les trois services (app, PostgreSQL, réseau interne) démarrent correctement — les logs montrent « gitrust is ready » et les migrations sont appliquées</li> | |
| 407 | +<li>✓ <strong>O3 accompli</strong> : le premier compte administrateur est créé et la page <code>/admin</code> est accessible</li> | |
| 408 | +</ul> | |
| 409 | +<hr> | |
| 410 | +<h2 id="et-si-ça-ne-marche-pas"><a class="header" href="#et-si-ça-ne-marche-pas">Et si ça ne marche pas</a></h2> | |
| 411 | +<div class="table-wrapper"> | |
| 412 | +<table> | |
| 413 | +<thead> | |
| 414 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr> | |
| 415 | +</thead> | |
| 416 | +<tbody> | |
| 417 | +<tr><td><code>Error: port 4000 is already in use</code> au démarrage</td><td>Un autre service occupe le port 4000 sur la machine hôte</td><td>Identifiez le service avec <code>ss -tlnp | grep 4000</code> ou <code>lsof -i :4000</code>. Arrêtez-le ou changez le port dans <code>docker-compose.yml</code> : remplacez <code>"4000:4000"</code> par <code>"4001:4000"</code> et accédez sur <code>:4001</code></td></tr> | |
| 418 | +<tr><td>Le container <code>gitrust_app</code> affiche <code>(unhealthy)</code> ou redémarre en boucle</td><td>La variable <code>DATABASE_URL</code> est incorrecte ou <code>SECRET_KEY</code> contient des caractères spéciaux non échappés</td><td>Vérifiez avec <code>docker compose logs gitrust | grep ERROR</code>. Assurez-vous que <code>SECRET_KEY</code> est bien une chaîne hexadécimale sans guillemets. Rechargez avec <code>docker compose down && docker compose up -d</code></td></tr> | |
| 419 | +<tr><td>La page <code>http://localhost:4000</code> affiche « Connection refused »</td><td>Le container n’est pas encore en <code>(healthy)</code> ou le port n’est pas exposé</td><td>Attendez 30 secondes et rechargez. Si le problème persiste, vérifiez que votre pare-feu local (<code>ufw status</code>) autorise le port 4000</td></tr> | |
| 420 | +<tr><td><code>FATAL: password authentication failed for user "gitrust"</code> dans les logs postgres</td><td>Le mot de passe dans <code>DATABASE_URL</code> ne correspond pas à <code>POSTGRES_PASSWORD</code></td><td>Supprimez le volume PostgreSQL (<code>docker compose down -v</code>) et relancez — <strong>attention : supprime toutes les données</strong></td></tr> | |
| 421 | +</tbody> | |
| 422 | +</table> | |
| 423 | +</div> | |
| 424 | +<hr> | |
| 425 | +<h2 id="prochaine-étape"><a class="header" href="#prochaine-étape">Prochaine étape</a></h2> | |
| 426 | +<p>→ <a href="02-installation-systemd.html">02 — Installation systemd : binaire natif + service</a> : découvrez l’installation sans Docker pour un déploiement production avec hardening AppArmor (~45 min)</p> | |
| 427 | +<p>Ou si vous souhaitez rendre cette instance accessible depuis Internet :</p> | |
| 428 | +<p>→ <a href="04-mise-en-production-192-168.html">04 — Mise en production</a> : reverse-proxy TLS, SMTP, sauvegarde automatique (~90 min)</p> | |
| 429 | + | |
| 430 | + </main> | |
| 431 | + | |
| 432 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 433 | + <!-- Mobile navigation buttons --> | |
| 434 | + <a rel="prev" href="../../administration_manual/tutorials/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 435 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 436 | + </a> | |
| 437 | + | |
| 438 | + <a rel="next prefetch" href="../../administration_manual/tutorials/02-installation-systemd.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 439 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 440 | + </a> | |
| 441 | + | |
| 442 | + <div style="clear: both"></div> | |
| 443 | + </nav> | |
| 444 | + </div> | |
| 445 | + </div> | |
| 446 | + | |
| 447 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 448 | + <a rel="prev" href="../../administration_manual/tutorials/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 449 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 450 | + </a> | |
| 451 | + | |
| 452 | + <a rel="next prefetch" href="../../administration_manual/tutorials/02-installation-systemd.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 453 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 454 | + </a> | |
| 455 | + </nav> | |
| 456 | + | |
| 457 | + </div> | |
| 458 | + | |
| 459 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 460 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 461 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 462 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 463 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + <script> | |
| 468 | + window.playground_copyable = true; | |
| 469 | + </script> | |
| 470 | + | |
| 471 | + | |
| 472 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 473 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 474 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 475 | + | |
| 476 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 477 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 478 | + <script src="../../book-a0b12cfe.js"></script> | |
| 479 | + | |
| 480 | + <!-- Custom JS scripts --> | |
| 481 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 482 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + </div> | |
| 487 | + </body> | |
| 488 | +</html> |
A
book/administration_manual/tutorials/02-installation-systemd.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>02 — Installation avec systemd - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/tutorials/02-installation-systemd.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="02--installation-avec-systemd"><a class="header" href="#02--installation-avec-systemd">02 — Installation avec systemd</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/tutorials/01-installation-docker.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/tutorials/03-premier-demarrage.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/tutorials/01-installation-docker.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/tutorials/03-premier-demarrage.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/tutorials/03-premier-demarrage.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>03 — Premier démarrage - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/tutorials/03-premier-demarrage.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="03--premier-démarrage"><a class="header" href="#03--premier-démarrage">03 — Premier démarrage</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/tutorials/02-installation-systemd.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/tutorials/04-mise-en-production-192-168.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/tutorials/02-installation-systemd.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/tutorials/04-mise-en-production-192-168.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/administration_manual/tutorials/04-mise-en-production-192-168.html
+715
-0
@@ -0,0 +1,715 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>04 — Mise en production (réseau local) - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/tutorials/04-mise-en-production-192-168.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt"><a class="header" href="#mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt">Mise en production sur une machine Linux avec HTTPS Let’s Encrypt</a></h1> | |
| 181 | +<h2 id="contexte"><a class="header" href="#contexte">Contexte</a></h2> | |
| 182 | +<p>Procédure de référence pour déployer une instance gitrust sur une machine Linux à IP fixe, avec patte externe routée et HTTPS via Let’s Encrypt. Reproductible et testée en conditions réelles.</p> | |
| 183 | +<p>Adaptez les valeurs suivantes à votre environnement :</p> | |
| 184 | +<div class="table-wrapper"> | |
| 185 | +<table> | |
| 186 | +<thead> | |
| 187 | +<tr><th>Placeholder</th><th>Remplacez par</th></tr> | |
| 188 | +</thead> | |
| 189 | +<tbody> | |
| 190 | +<tr><td><code><your-server-ip></code></td><td>L’IP fixe de votre serveur (ex: <code>192.168.1.57</code> sur un LAN, ou une IP publique)</td></tr> | |
| 191 | +<tr><td><code><your-domain></code></td><td>Votre FQDN principal (ex: <code>gitrust.example.com</code>)</td></tr> | |
| 192 | +<tr><td><code><acme-email></code></td><td>L’email pour Let’s Encrypt (ex: <code>contact@example.com</code>)</td></tr> | |
| 193 | +<tr><td><code><admin-user></code></td><td>L’utilisateur SSH admin sur le serveur cible</td></tr> | |
| 194 | +</tbody> | |
| 195 | +</table> | |
| 196 | +</div> | |
| 197 | +<h3 id="les-trois-services-gitrust"><a class="header" href="#les-trois-services-gitrust">Les trois services gitrust</a></h3> | |
| 198 | +<div class="table-wrapper"> | |
| 199 | +<table> | |
| 200 | +<thead> | |
| 201 | +<tr><th>#</th><th>Service</th><th>Bind interne</th><th>Exposition publique</th><th>Variable</th></tr> | |
| 202 | +</thead> | |
| 203 | +<tbody> | |
| 204 | +<tr><td>1</td><td>Web HTTP (UI SSR + API)</td><td><code>127.0.0.1:4000</code></td><td><code>:443</code> HTTPS via Nginx</td><td><code>SERVER_PORT</code></td></tr> | |
| 205 | +<tr><td>2</td><td>SSH Git (russh)</td><td><code>127.0.0.1:2222</code></td><td><code>:22</code> via Nginx stream</td><td><code>SSH_PORT</code></td></tr> | |
| 206 | +<tr><td>3</td><td>Worker CI/CD (Dagger)</td><td>tâche Tokio in-process</td><td>— (déclenché par push)</td><td><code>CI_ENABLED</code></td></tr> | |
| 207 | +</tbody> | |
| 208 | +</table> | |
| 209 | +</div> | |
| 210 | +<p>PostgreSQL = dépendance, conteneur Docker bind loopback <code>127.0.0.1:5432</code>.</p> | |
| 211 | +<h3 id="topologie-réseau"><a class="header" href="#topologie-réseau">Topologie réseau</a></h3> | |
| 212 | +<pre><code>Internet | |
| 213 | + | | |
| 214 | + v | |
| 215 | +<your-server-ip> (patte externe) | |
| 216 | + | | |
| 217 | + +-- :22 Nginx stream --> 127.0.0.1:2222 (gitrust SSH) | |
| 218 | + +-- :80 Nginx HTTP --> 301 HTTPS (sauf /.well-known/acme-challenge) | |
| 219 | + +-- :443 Nginx HTTPS --> 127.0.0.1:4000 (gitrust HTTP) | |
| 220 | + +-- :2022 sshd système (accès admin, déplacé depuis :22) | |
| 221 | + | |
| 222 | + Loopback uniquement : | |
| 223 | + +-- 127.0.0.1:4000 gitrust web | |
| 224 | + +-- 127.0.0.1:2222 gitrust SSH | |
| 225 | + +-- 127.0.0.1:5432 postgres docker | |
| 226 | +</code></pre> | |
| 227 | +<h3 id="risque-critique--ordre-dexécution"><a class="header" href="#risque-critique--ordre-dexécution">Risque critique — ordre d’exécution</a></h3> | |
| 228 | +<p>Le déplacement de <code>sshd</code> système de <code>:22</code> vers <code>:2022</code> <strong>doit</strong> être fait avant la configuration <code>nginx stream</code>, et <strong>doit</strong> être validé depuis une <strong>deuxième session SSH</strong> avant fermeture de la première. Sinon : lockout total (besoin d’accès console physique).</p> | |
| 229 | +<hr> | |
| 230 | +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2> | |
| 231 | +<h3 id="poste-de-build-machine-locale-avec-le-code-source"><a class="header" href="#poste-de-build-machine-locale-avec-le-code-source">Poste de build (machine locale avec le code source)</a></h3> | |
| 232 | +<pre><code class="language-bash">rustup show && command -v rsync envsubst npx | |
| 233 | +# Installer si besoin : sudo apt install rsync gettext-base | |
| 234 | +</code></pre> | |
| 235 | +<h3 id="cible-your-server-ip"><a class="header" href="#cible-your-server-ip">Cible <code><your-server-ip></code></a></h3> | |
| 236 | +<ul> | |
| 237 | +<li>Debian/Ubuntu récent</li> | |
| 238 | +<li>Accès SSH avec <code>sudo</code></li> | |
| 239 | +<li>Docker + plugin compose (<code>docker compose version</code>)</li> | |
| 240 | +<li>Snap ou apt pour <code>certbot</code> + plugin nginx</li> | |
| 241 | +<li>DNS <code><your-domain></code> → IP publique de la patte externe (vérifier <code>dig +short <your-domain></code>)</li> | |
| 242 | +<li>Module <code>stream</code> Nginx disponible (paquet <code>libnginx-mod-stream</code> sur Debian)</li> | |
| 243 | +</ul> | |
| 244 | +<hr> | |
| 245 | +<h2 id="phase-0--générer-envproduction-poste-de-build-une-seule-fois"><a class="header" href="#phase-0--générer-envproduction-poste-de-build-une-seule-fois">Phase 0 — Générer <code>.env.production</code> (poste de build, une seule fois)</a></h2> | |
| 246 | +<pre><code class="language-bash">JWT=$(openssl rand -hex 64) | |
| 247 | +ADMIN_PWD=$(openssl rand -base64 24) | |
| 248 | +PG_PWD=$(openssl rand -base64 24) | |
| 249 | + | |
| 250 | +cat > .env.production <<EOF | |
| 251 | +# ---- Base de données ---- | |
| 252 | +DATABASE_URL=postgres://gitrust:${PG_PWD}@127.0.0.1:5432/gitrust | |
| 253 | + | |
| 254 | +# ---- Serveur HTTP (derrière Nginx HTTPS) ---- | |
| 255 | +SERVER_HOST=127.0.0.1 | |
| 256 | +SERVER_PORT=4000 | |
| 257 | + | |
| 258 | +# ---- Serveur SSH (derrière nginx stream :22) ---- | |
| 259 | +SSH_PORT=2222 | |
| 260 | +SSH_LISTEN_ADDR=127.0.0.1 | |
| 261 | +SSH_PUBLIC_HOST=<your-domain> | |
| 262 | +SSH_HOST_KEY_PATH=/opt/gitrust/data/ssh_host_ed25519_key | |
| 263 | + | |
| 264 | +# ---- Chemins (réécrits par deploy.sh) ---- | |
| 265 | +GIT_REPOS_BASE_PATH=/opt/gitrust/data/repos | |
| 266 | +STATIC_FILES_PATH=/opt/gitrust/static | |
| 267 | + | |
| 268 | +# ---- Sécurité — HTTPS actif ---- | |
| 269 | +JWT_SECRET=${JWT} | |
| 270 | +JWT_EXPIRATION_MINUTES=15 | |
| 271 | +REFRESH_TOKEN_EXPIRATION_DAYS=7 | |
| 272 | +COOKIE_SECURE=true # HTTPS via Nginx | |
| 273 | +COOKIE_SAME_SITE=Lax | |
| 274 | +APP_DEBUG=false | |
| 275 | +RUST_LOG=info | |
| 276 | + | |
| 277 | +# ---- Admin initial ---- | |
| 278 | +ADMIN_USERNAME=admin | |
| 279 | +ADMIN_EMAIL=<acme-email> | |
| 280 | +ADMIN_PASSWORD=${ADMIN_PWD} | |
| 281 | + | |
| 282 | +# ---- Inscription & UI ---- | |
| 283 | +ALLOW_REGISTRATION=false | |
| 284 | +APP_NAME=Gitrust | |
| 285 | +DEFAULT_LOCALE=fr | |
| 286 | + | |
| 287 | +# ---- Email ---- | |
| 288 | +EMAIL_VALIDATION_REQUIRED=false | |
| 289 | +EMAIL_BASE_URL=https://<your-domain> | |
| 290 | + | |
| 291 | +# ---- CI/CD Dagger (worker 3) ---- | |
| 292 | +CI_ENABLED=true | |
| 293 | +CI_MAX_CONCURRENT=4 | |
| 294 | +CI_DEFAULT_TIMEOUT=3600 | |
| 295 | +CI_WORKSPACE_PATH=/tmp/gitrust-ci | |
| 296 | +CI_REMOTE_HOST=localhost | |
| 297 | + | |
| 298 | +# ---- Worker import ---- | |
| 299 | +IMPORT_MAX_CONCURRENT=2 | |
| 300 | +IMPORT_TIMEOUT_SECS=1800 | |
| 301 | +DB_WORKER_POOL_SIZE=4 | |
| 302 | +EOF | |
| 303 | + | |
| 304 | +chmod 600 .env.production | |
| 305 | +echo "ADMIN_PASSWORD = ${ADMIN_PWD}" | |
| 306 | +echo "POSTGRES_PASSWORD = ${PG_PWD}" | |
| 307 | +</code></pre> | |
| 308 | +<blockquote> | |
| 309 | +<p><strong>Critique</strong> : noter <code>ADMIN_PASSWORD</code> et <code>POSTGRES_PASSWORD</code> dans un gestionnaire de mots de passe.</p> | |
| 310 | +</blockquote> | |
| 311 | +<hr> | |
| 312 | +<h2 id="phase-1--préparer-la-cible--déplacer-sshd-système-sur-2022"><a class="header" href="#phase-1--préparer-la-cible--déplacer-sshd-système-sur-2022">Phase 1 — Préparer la cible : déplacer sshd système sur :2022</a></h2> | |
| 313 | +<p><strong>À faire en gardant deux sessions SSH simultanées</strong>.</p> | |
| 314 | +<h3 id="1pre-diagnostic-de-létat-initial"><a class="header" href="#1pre-diagnostic-de-létat-initial">1.pre. Diagnostic de l’état initial</a></h3> | |
| 315 | +<h4 id="1pre1--trouver-le-port-ssh-ouvert-depuis-le-poste-de-build"><a class="header" href="#1pre1--trouver-le-port-ssh-ouvert-depuis-le-poste-de-build">1.pre.1 — Trouver le port SSH ouvert depuis le poste de build</a></h4> | |
| 316 | +<pre><code class="language-bash"># Depuis votre poste (sans être connecté) : | |
| 317 | +for p in 22 2022 2222 2200 22022; do | |
| 318 | + timeout 3 bash -c "echo >/dev/tcp/<your-server-ip>/$p" 2>/dev/null \ | |
| 319 | + && echo "Port $p : OUVERT" \ | |
| 320 | + || echo "Port $p : fermé/filtré" | |
| 321 | +done | |
| 322 | +</code></pre> | |
| 323 | +<h4 id="1pre2--se-connecter-sur-le-port-détecté"><a class="header" href="#1pre2--se-connecter-sur-le-port-détecté">1.pre.2 — Se connecter sur le port détecté</a></h4> | |
| 324 | +<pre><code class="language-bash"># Cas le plus probable : sshd est sur :22 par défaut | |
| 325 | +ssh <admin-user>@<your-server-ip> | |
| 326 | +</code></pre> | |
| 327 | +<h4 id="1pre3--une-fois-connecté-vérifier-létat-sshd-actuel"><a class="header" href="#1pre3--une-fois-connecté-vérifier-létat-sshd-actuel">1.pre.3 — Une fois connecté, vérifier l’état sshd actuel</a></h4> | |
| 328 | +<pre><code class="language-bash"># Sur quel(s) port(s) sshd écoute-t-il ? | |
| 329 | +sudo ss -tlnp | grep sshd | |
| 330 | + | |
| 331 | +# Contenu de la config | |
| 332 | +sudo grep -riE '^[[:space:]]*Port[[:space:]]+[0-9]+' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2>/dev/null | |
| 333 | + | |
| 334 | +# Statut du service | |
| 335 | +sudo systemctl status ssh --no-pager | |
| 336 | +</code></pre> | |
| 337 | +<h3 id="1a-session-1--modifier-la-config-sshd"><a class="header" href="#1a-session-1--modifier-la-config-sshd">1a. Session 1 : modifier la config sshd</a></h3> | |
| 338 | +<pre><code class="language-bash">ssh <admin-user>@<your-server-ip> | |
| 339 | + | |
| 340 | +# Éditer /etc/ssh/sshd_config | |
| 341 | +sudo tee /etc/ssh/sshd_config.d/99-gitrust.conf <<'EOF' | |
| 342 | +Port 2022 | |
| 343 | +EOF | |
| 344 | + | |
| 345 | +# Vérifier la syntaxe | |
| 346 | +sudo sshd -t | |
| 347 | + | |
| 348 | +# Si OK, reload (ne déconnecte pas la session courante) | |
| 349 | +sudo systemctl reload ssh | |
| 350 | +sudo ss -tlnp | grep -E ':22\b|:2022\b' | |
| 351 | +# Attendu : sshd écoute sur 22 ET 2022 | |
| 352 | +</code></pre> | |
| 353 | +<h3 id="1b-session-2--valider-le-nouveau-port"><a class="header" href="#1b-session-2--valider-le-nouveau-port">1b. Session 2 : valider le nouveau port</a></h3> | |
| 354 | +<p>Depuis le poste de build, <strong>dans un autre terminal</strong> :</p> | |
| 355 | +<pre><code class="language-bash">ssh -p 2022 <admin-user>@<your-server-ip> 'echo "OK port 2022"' | |
| 356 | +# Doit afficher : OK port 2022 | |
| 357 | +</code></pre> | |
| 358 | +<h3 id="1c-plus-tard-après-phase-5-fermer-le-port-22-du-sshd-système"><a class="header" href="#1c-plus-tard-après-phase-5-fermer-le-port-22-du-sshd-système">1c. (Plus tard, après Phase 5) Fermer le port 22 du sshd système</a></h3> | |
| 359 | +<p>Une fois <code>nginx stream :22</code> actif et testé :</p> | |
| 360 | +<pre><code class="language-bash">ssh -p 2022 <admin-user>@<your-server-ip> | |
| 361 | +sudo sed -i 's/^Port 22$/# Port 22 (déplacé vers 2022, :22 utilisé par nginx stream)/' /etc/ssh/sshd_config | |
| 362 | +sudo systemctl restart ssh | |
| 363 | +</code></pre> | |
| 364 | +<h3 id="1d-firewall"><a class="header" href="#1d-firewall">1d. Firewall</a></h3> | |
| 365 | +<pre><code class="language-bash">ssh -p 2022 <admin-user>@<your-server-ip> bash <<'EOF' | |
| 366 | +sudo ufw allow 80/tcp comment 'HTTP ACME + redirect' | |
| 367 | +sudo ufw allow 443/tcp comment 'HTTPS Gitrust' | |
| 368 | +sudo ufw allow 22/tcp comment 'SSH Git via nginx stream' | |
| 369 | +sudo ufw allow 2022/tcp comment 'SSH admin système' | |
| 370 | +sudo ufw status numbered | |
| 371 | +EOF | |
| 372 | +</code></pre> | |
| 373 | +<blockquote> | |
| 374 | +<p>Mettre à jour <code>~/.ssh/config</code> côté poste dev :</p> | |
| 375 | +<pre><code>Host gitrust-host | |
| 376 | + HostName <your-server-ip> | |
| 377 | + User <admin-user> | |
| 378 | + Port 2022 | |
| 379 | +</code></pre> | |
| 380 | +<p>Le reste du plan utilise <code>ssh gitrust-host</code>.</p> | |
| 381 | +</blockquote> | |
| 382 | +<hr> | |
| 383 | +<h2 id="phase-2--postgresql-docker-loopback"><a class="header" href="#phase-2--postgresql-docker-loopback">Phase 2 — PostgreSQL (Docker, loopback)</a></h2> | |
| 384 | +<pre><code class="language-bash">scp -P 2022 database/docker-compose.yml <admin-user>@<your-server-ip>:/tmp/pg-compose.yml | |
| 385 | + | |
| 386 | +ssh gitrust-host bash <<EOF | |
| 387 | +sudo mkdir -p /opt/gitrust/database | |
| 388 | +sudo mv /tmp/pg-compose.yml /opt/gitrust/database/docker-compose.yml | |
| 389 | +echo 'POSTGRES_PASSWORD=${PG_PWD}' | sudo tee /opt/gitrust/database/.env >/dev/null | |
| 390 | +sudo chmod 600 /opt/gitrust/database/.env | |
| 391 | +cd /opt/gitrust/database && sudo docker compose up -d | |
| 392 | +sudo docker compose ps | |
| 393 | +EOF | |
| 394 | +</code></pre> | |
| 395 | +<p>Remplacer <code>${PG_PWD}</code> par la valeur réelle. Vérifier que le port n’est pas exposé publiquement :</p> | |
| 396 | +<pre><code class="language-bash">ssh gitrust-host 'sudo ss -tlnp | grep 5432' | |
| 397 | +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0 | |
| 398 | +</code></pre> | |
| 399 | +<hr> | |
| 400 | +<h2 id="phase-3--build--déploiement-gitrust-via-deploysh"><a class="header" href="#phase-3--build--déploiement-gitrust-via-deploysh">Phase 3 — Build + déploiement gitrust via <code>deploy.sh</code></a></h2> | |
| 401 | +<h3 id="3a-préparer-deploymentdeployconf"><a class="header" href="#3a-préparer-deploymentdeployconf">3a. Préparer <code>deployment/deploy.conf</code></a></h3> | |
| 402 | +<pre><code class="language-bash">cp deployment/deploy.conf.example deployment/deploy.conf | |
| 403 | +# Éditer DEPLOY_TARGET=gitrust-host, DEPLOY_REMOTE_PATH=/opt/gitrust, DEPLOY_FQDN_INITIAL=<your-domain> | |
| 404 | +$EDITOR deployment/deploy.conf | |
| 405 | +chmod 600 deployment/deploy.conf | |
| 406 | +</code></pre> | |
| 407 | +<h3 id="3b-validation-du-build-seul-optionnel"><a class="header" href="#3b-validation-du-build-seul-optionnel">3b. Validation du build seul (optionnel)</a></h3> | |
| 408 | +<pre><code class="language-bash">BUILD_ONLY=1 ./deployment/deploy.sh | |
| 409 | +</code></pre> | |
| 410 | +<h3 id="3c-déploiement"><a class="header" href="#3c-déploiement">3c. Déploiement</a></h3> | |
| 411 | +<pre><code class="language-bash"># Sans argument : utilise DEPLOY_TARGET du deploy.conf (gitrust-host via ~/.ssh/config, port 2022) | |
| 412 | +./deployment/deploy.sh | |
| 413 | +</code></pre> | |
| 414 | +<p>Ce que fait <code>deploy.sh</code> : <code>cargo build --release</code>, <code>tailwindcss --minify</code>, adapte <code>gitrust.service</code> + <code>.env</code>, rsync, crée user <code>gitrust</code>, installe systemd, restart.</p> | |
| 415 | +<p>À la fin : gitrust écoute sur <code>127.0.0.1:4000</code> (HTTP) et <code>127.0.0.1:2222</code> (SSH).</p> | |
| 416 | +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl status gitrust --no-pager && sudo ss -tlnp | grep -E "4000|2222"' | |
| 417 | +# Attendu : 127.0.0.1:4000 et 127.0.0.1:2222 (PAS 0.0.0.0) | |
| 418 | +</code></pre> | |
| 419 | +<hr> | |
| 420 | +<h2 id="phase-4--nginx-http--lets-encrypt"><a class="header" href="#phase-4--nginx-http--lets-encrypt">Phase 4 — Nginx HTTP + Let’s Encrypt</a></h2> | |
| 421 | +<h3 id="4a-installer-nginx--certbot"><a class="header" href="#4a-installer-nginx--certbot">4a. Installer nginx + certbot</a></h3> | |
| 422 | +<pre><code class="language-bash">ssh gitrust-host bash <<'EOF' | |
| 423 | +sudo apt update | |
| 424 | +sudo apt install -y nginx libnginx-mod-stream certbot python3-certbot-nginx | |
| 425 | +sudo systemctl enable --now nginx | |
| 426 | +EOF | |
| 427 | +</code></pre> | |
| 428 | +<h3 id="4b-déployer-la-conf-nginx"><a class="header" href="#4b-déployer-la-conf-nginx">4b. Déployer la conf Nginx</a></h3> | |
| 429 | +<pre><code class="language-bash">scp -P 2022 deployment/nginx-gitrust.conf <admin-user>@<your-server-ip>:/tmp/gitrust-nginx.conf | |
| 430 | + | |
| 431 | +ssh gitrust-host bash <<EOF | |
| 432 | +sudo sed -i 's/gitrust.nuage.ebii/<your-domain>/g' /tmp/gitrust-nginx.conf | |
| 433 | +sudo mv /tmp/gitrust-nginx.conf /etc/nginx/sites-available/gitrust | |
| 434 | +sudo ln -sf /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust | |
| 435 | +sudo rm -f /etc/nginx/sites-enabled/default | |
| 436 | +sudo mkdir -p /var/www/html/.well-known/acme-challenge | |
| 437 | +sudo nginx -t && sudo systemctl reload nginx | |
| 438 | +EOF | |
| 439 | +</code></pre> | |
| 440 | +<h3 id="4c-émettre-le-certificat-lets-encrypt"><a class="header" href="#4c-émettre-le-certificat-lets-encrypt">4c. Émettre le certificat Let’s Encrypt</a></h3> | |
| 441 | +<pre><code class="language-bash">ssh gitrust-host 'sudo certbot --nginx \ | |
| 442 | + -d <your-domain> \ | |
| 443 | + --email <acme-email> \ | |
| 444 | + --agree-tos \ | |
| 445 | + --no-eff-email \ | |
| 446 | + --redirect' | |
| 447 | +</code></pre> | |
| 448 | +<h3 id="4d-vérifier-le-renouvellement-automatique"><a class="header" href="#4d-vérifier-le-renouvellement-automatique">4d. Vérifier le renouvellement automatique</a></h3> | |
| 449 | +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl list-timers | grep certbot' | |
| 450 | +ssh gitrust-host 'sudo certbot renew --dry-run' | |
| 451 | +</code></pre> | |
| 452 | +<h3 id="4e-test-https"><a class="header" href="#4e-test-https">4e. Test HTTPS</a></h3> | |
| 453 | +<pre><code class="language-bash">curl -I https://<your-domain>/ | |
| 454 | +# Attendu : HTTP/2 200 (ou 302 vers /login) | |
| 455 | + | |
| 456 | +# Vérifier HSTS | |
| 457 | +curl -sI https://<your-domain>/ | grep -i strict-transport | |
| 458 | +</code></pre> | |
| 459 | +<hr> | |
| 460 | +<h2 id="phase-5--exposer-ssh-git-sur-22-via-nginx-stream"><a class="header" href="#phase-5--exposer-ssh-git-sur-22-via-nginx-stream">Phase 5 — Exposer SSH Git sur :22 via Nginx stream</a></h2> | |
| 461 | +<h3 id="5a-ajouter-le-bloc-stream"><a class="header" href="#5a-ajouter-le-bloc-stream">5a. Ajouter le bloc stream</a></h3> | |
| 462 | +<pre><code class="language-bash">ssh gitrust-host bash <<'EOF' | |
| 463 | +sudo nginx -V 2>&1 | grep -o with-stream | |
| 464 | + | |
| 465 | +sudo tee -a /etc/nginx/nginx.conf <<'NGINX' | |
| 466 | + | |
| 467 | +# --- Gitrust SSH (proxy :22 -> :2222) ----------------------------------------- | |
| 468 | +stream { | |
| 469 | + upstream gitrust_ssh { | |
| 470 | + server 127.0.0.1:2222; | |
| 471 | + } | |
| 472 | + server { | |
| 473 | + listen 22; | |
| 474 | + listen [::]:22; | |
| 475 | + proxy_pass gitrust_ssh; | |
| 476 | + proxy_timeout 1h; | |
| 477 | + proxy_connect_timeout 30s; | |
| 478 | + error_log /var/log/nginx/gitrust-ssh.log; | |
| 479 | + } | |
| 480 | +} | |
| 481 | +NGINX | |
| 482 | + | |
| 483 | +sudo nginx -t && sudo systemctl restart nginx | |
| 484 | +sudo ss -tlnp | grep -E ':22\b|:2222\b' | |
| 485 | +# Attendu : nginx :22, gitrust :2222 (loopback) | |
| 486 | +EOF | |
| 487 | +</code></pre> | |
| 488 | +<h3 id="5b-désactiver-sshd-système-sur-22-phase-1c"><a class="header" href="#5b-désactiver-sshd-système-sur-22-phase-1c">5b. Désactiver sshd système sur :22 (Phase 1c)</a></h3> | |
| 489 | +<pre><code class="language-bash">ssh -p 2022 <admin-user>@<your-server-ip> bash <<'EOF' | |
| 490 | +sudo sed -i 's/^Port 22$/# Port 22 déplacé/' /etc/ssh/sshd_config 2>/dev/null || true | |
| 491 | +sudo systemctl restart ssh | |
| 492 | +sudo ss -tlnp | grep -E ':22\b|:2022\b' | |
| 493 | +# Attendu : nginx :22, sshd :2022 — plus de sshd:22 | |
| 494 | +EOF | |
| 495 | +</code></pre> | |
| 496 | +<h3 id="5c-test-clone-git"><a class="header" href="#5c-test-clone-git">5c. Test clone Git</a></h3> | |
| 497 | +<pre><code class="language-bash"># Dans l'UI gitrust : Settings -> SSH keys -> coller ~/.ssh/id_ed25519.pub | |
| 498 | +# Créer un repo test admin/test-deploy via UI | |
| 499 | + | |
| 500 | +git clone git@<your-domain>:admin/test-deploy.git /tmp/test-deploy | |
| 501 | +cd /tmp/test-deploy | |
| 502 | +echo "# test" > README.md | |
| 503 | +git -c user.email=<acme-email> -c user.name=admin add . && \ | |
| 504 | + git -c user.email=<acme-email> -c user.name=admin commit -m "test deploy" && \ | |
| 505 | + git push origin main | |
| 506 | +</code></pre> | |
| 507 | +<hr> | |
| 508 | +<h2 id="phase-6--vérifications-globales"><a class="header" href="#phase-6--vérifications-globales">Phase 6 — Vérifications globales</a></h2> | |
| 509 | +<pre><code class="language-bash"># Service systemd | |
| 510 | +ssh gitrust-host 'sudo systemctl status gitrust --no-pager' | |
| 511 | + | |
| 512 | +# Logs (recherche d'erreurs) | |
| 513 | +ssh gitrust-host 'sudo journalctl -u gitrust -n 100 --no-pager | grep -iE "error|warn|fail"' | |
| 514 | + | |
| 515 | +# Ports d'écoute (vue d'ensemble) | |
| 516 | +ssh gitrust-host 'sudo ss -tlnp' | |
| 517 | +# Attendu : | |
| 518 | +# :22 nginx | |
| 519 | +# :80 nginx | |
| 520 | +# :443 nginx | |
| 521 | +# :2022 sshd système | |
| 522 | +# 127.0.0.1:2222 gitrust | |
| 523 | +# 127.0.0.1:4000 gitrust | |
| 524 | +# 127.0.0.1:5432 docker-proxy | |
| 525 | + | |
| 526 | +# Renouvellement TLS automatique | |
| 527 | +ssh gitrust-host 'sudo systemctl status certbot.timer --no-pager' | |
| 528 | + | |
| 529 | +# Test E2E | |
| 530 | +curl -I https://<your-domain>/login | |
| 531 | +ssh -T git@<your-domain> || true # Banner SSH russh attendu | |
| 532 | +</code></pre> | |
| 533 | +<hr> | |
| 534 | +<h2 id="phase-7--durcissement--fail2ban"><a class="header" href="#phase-7--durcissement--fail2ban">Phase 7 — Durcissement : Fail2ban</a></h2> | |
| 535 | +<p>Voir <code>administration_manual/how-to/durcir-avec-fail2ban.md</code> pour la configuration complète.</p> | |
| 536 | +<h3 id="7a-installation"><a class="header" href="#7a-installation">7a. Installation</a></h3> | |
| 537 | +<pre><code class="language-bash">ssh gitrust-host bash <<'EOF' | |
| 538 | +sudo apt install -y fail2ban | |
| 539 | +sudo systemctl enable --now fail2ban | |
| 540 | +EOF | |
| 541 | +</code></pre> | |
| 542 | +<h3 id="7b-configuration-minimale-rapide"><a class="header" href="#7b-configuration-minimale-rapide">7b. Configuration minimale rapide</a></h3> | |
| 543 | +<pre><code class="language-bash">ssh gitrust-host sudo tee /etc/fail2ban/jail.local <<'EOF' | |
| 544 | +[DEFAULT] | |
| 545 | +backend = systemd | |
| 546 | +bantime = 1h | |
| 547 | +findtime = 10m | |
| 548 | +maxretry = 5 | |
| 549 | +ignoreip = 127.0.0.1/8 ::1 | |
| 550 | +banaction = ufw | |
| 551 | +banaction_allports = ufw | |
| 552 | + | |
| 553 | +[sshd] | |
| 554 | +enabled = true | |
| 555 | +port = 2022 | |
| 556 | +filter = sshd | |
| 557 | +backend = %(sshd_backend)s | |
| 558 | +logpath = %(sshd_log)s | |
| 559 | +maxretry = 3 | |
| 560 | + | |
| 561 | +[nginx-http-auth] | |
| 562 | +enabled = true | |
| 563 | +port = http,https | |
| 564 | +filter = nginx-http-auth | |
| 565 | +logpath = /var/log/nginx/gitrust.error.log | |
| 566 | + | |
| 567 | +[gitrust-login] | |
| 568 | +enabled = true | |
| 569 | +port = http,https | |
| 570 | +filter = gitrust-login | |
| 571 | +logpath = /var/log/nginx/gitrust.access.log | |
| 572 | +maxretry = 5 | |
| 573 | + | |
| 574 | +[gitrust-ssh] | |
| 575 | +enabled = true | |
| 576 | +port = 22,2222 | |
| 577 | +filter = gitrust-ssh | |
| 578 | +backend = systemd | |
| 579 | +journalmatch = _SYSTEMD_UNIT=gitrust.service | |
| 580 | +maxretry = 5 | |
| 581 | + | |
| 582 | +[recidive] | |
| 583 | +enabled = true | |
| 584 | +logpath = /var/log/fail2ban.log | |
| 585 | +banaction = %(banaction_allports)s | |
| 586 | +bantime = 1w | |
| 587 | +findtime = 1d | |
| 588 | +maxretry = 3 | |
| 589 | +EOF | |
| 590 | +</code></pre> | |
| 591 | +<p>Créer les filtres gitrust-login et gitrust-ssh, puis :</p> | |
| 592 | +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl restart fail2ban && sudo fail2ban-client status' | |
| 593 | +</code></pre> | |
| 594 | +<hr> | |
| 595 | +<h2 id="phase-8--mise-à-jour-vers-un-nouveau-domaine-quand-dns-prêt"><a class="header" href="#phase-8--mise-à-jour-vers-un-nouveau-domaine-quand-dns-prêt">Phase 8 — Mise à jour vers un nouveau domaine (quand DNS prêt)</a></h2> | |
| 596 | +<h3 id="8a-ajouter-le-san-au-certificat-existant"><a class="header" href="#8a-ajouter-le-san-au-certificat-existant">8a. Ajouter le SAN au certificat existant</a></h3> | |
| 597 | +<pre><code class="language-bash">ssh gitrust-host 'sudo certbot --nginx --expand \ | |
| 598 | + -d <your-domain> \ | |
| 599 | + -d <new-domain> \ | |
| 600 | + --email <acme-email> \ | |
| 601 | + --agree-tos --no-eff-email' | |
| 602 | +</code></pre> | |
| 603 | +<h3 id="8b-mettre-à-jour-la-conf-nginx"><a class="header" href="#8b-mettre-à-jour-la-conf-nginx">8b. Mettre à jour la conf Nginx</a></h3> | |
| 604 | +<pre><code class="language-bash">ssh gitrust-host bash <<EOF | |
| 605 | +sudo sed -i 's/server_name <your-domain>;/server_name <your-domain> <new-domain>;/g' /etc/nginx/sites-available/gitrust | |
| 606 | +sudo nginx -t && sudo systemctl reload nginx | |
| 607 | +EOF | |
| 608 | +</code></pre> | |
| 609 | +<h3 id="8c-mettre-à-jour-envproduction-et-redéployer"><a class="header" href="#8c-mettre-à-jour-envproduction-et-redéployer">8c. Mettre à jour <code>.env.production</code> et redéployer</a></h3> | |
| 610 | +<pre><code class="language-bash">sed -i 's|SSH_PUBLIC_HOST=.*|SSH_PUBLIC_HOST=<new-domain>|' .env.production | |
| 611 | +sed -i 's|EMAIL_BASE_URL=.*|EMAIL_BASE_URL=https://<new-domain>|' .env.production | |
| 612 | +./deployment/deploy.sh gitrust-host | |
| 613 | +</code></pre> | |
| 614 | +<hr> | |
| 615 | +<h2 id="phase-9--mises-à-jour-ultérieures"><a class="header" href="#phase-9--mises-à-jour-ultérieures">Phase 9 — Mises à jour ultérieures</a></h2> | |
| 616 | +<pre><code class="language-bash">git pull | |
| 617 | +SKIP_ENV=1 SKIP_DB=1 ./deployment/deploy.sh | |
| 618 | +</code></pre> | |
| 619 | +<hr> | |
| 620 | +<h2 id="dépannage"><a class="header" href="#dépannage">Dépannage</a></h2> | |
| 621 | +<div class="table-wrapper"> | |
| 622 | +<table> | |
| 623 | +<thead> | |
| 624 | +<tr><th>Symptôme</th><th>Diagnostic</th><th>Fix</th></tr> | |
| 625 | +</thead> | |
| 626 | +<tbody> | |
| 627 | +<tr><td>Lockout SSH après reload sshd</td><td>—</td><td>Console physique / KVM IPMI</td></tr> | |
| 628 | +<tr><td>Cert Let’s Encrypt échoue (<code>Connection refused</code>)</td><td><code>dig +short <your-domain></code> ≠ IP publique</td><td>Corriger DNS, ou vérifier que :80 traverse bien le NAT</td></tr> | |
| 629 | +<tr><td>Cert échoue (<code>unauthorized</code>)</td><td>Nginx <code>:80</code> ne répond pas sur <code>/.well-known/acme-challenge/</code></td><td><code>curl http://<your-domain>/.well-known/acme-challenge/test</code> doit ne pas rediriger en 301</td></tr> | |
| 630 | +<tr><td>Login boucle sur <code>/login</code> malgré HTTPS</td><td><code>grep COOKIE_SECURE /opt/gitrust/.env</code></td><td>Doit être <code>true</code> ; vérifier que Nginx forward bien <code>X-Forwarded-Proto https</code></td></tr> | |
| 631 | +<tr><td>Push SSH <code>Connection closed</code></td><td><code>journalctl -u gitrust | grep ssh</code></td><td>Vérifier que gitrust écoute bien <code>127.0.0.1:2222</code> et que nginx stream forward</td></tr> | |
| 632 | +<tr><td><code>nginx -t</code> : <code>unknown directive "stream"</code></td><td>Module non chargé</td><td><code>sudo apt install libnginx-mod-stream</code> puis <code>systemctl restart nginx</code></td></tr> | |
| 633 | +<tr><td>Mixed content HTTPS</td><td>Templates qui hardcodent <code>http://</code></td><td>Vérifier <code>EMAIL_BASE_URL=https://...</code> et headers <code>X-Forwarded-Proto</code></td></tr> | |
| 634 | +<tr><td>Push gros repo timeout</td><td>Logs nginx <code>client intended to send too large body</code></td><td>Augmenter <code>client_max_body_size 2G</code> (déjà fait pour <code>.git/</code>)</td></tr> | |
| 635 | +</tbody> | |
| 636 | +</table> | |
| 637 | +</div> | |
| 638 | +<hr> | |
| 639 | +<h2 id="récapitulatif-des-ports"><a class="header" href="#récapitulatif-des-ports">Récapitulatif des ports</a></h2> | |
| 640 | +<div class="table-wrapper"> | |
| 641 | +<table> | |
| 642 | +<thead> | |
| 643 | +<tr><th>Port</th><th>Process</th><th>Exposition</th><th>Rôle</th></tr> | |
| 644 | +</thead> | |
| 645 | +<tbody> | |
| 646 | +<tr><td>22</td><td>nginx (stream)</td><td>Public</td><td>SSH Git → forward vers :2222</td></tr> | |
| 647 | +<tr><td>80</td><td>nginx</td><td>Public</td><td>ACME challenge + redirect HTTPS</td></tr> | |
| 648 | +<tr><td>443</td><td>nginx</td><td>Public</td><td>HTTPS → forward vers :4000</td></tr> | |
| 649 | +<tr><td>2022</td><td>sshd système</td><td>Public</td><td>Admin SSH (à restreindre par firewall si possible)</td></tr> | |
| 650 | +<tr><td>2222</td><td>gitrust</td><td>Loopback</td><td>Backend SSH russh</td></tr> | |
| 651 | +<tr><td>4000</td><td>gitrust</td><td>Loopback</td><td>Backend HTTP axum</td></tr> | |
| 652 | +<tr><td>5432</td><td>docker-proxy</td><td>Loopback</td><td>PostgreSQL</td></tr> | |
| 653 | +</tbody> | |
| 654 | +</table> | |
| 655 | +</div> | |
| 656 | + | |
| 657 | + </main> | |
| 658 | + | |
| 659 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 660 | + <!-- Mobile navigation buttons --> | |
| 661 | + <a rel="prev" href="../../administration_manual/tutorials/03-premier-demarrage.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 662 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 663 | + </a> | |
| 664 | + | |
| 665 | + <a rel="next prefetch" href="../../administration_manual/how-to/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 666 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 667 | + </a> | |
| 668 | + | |
| 669 | + <div style="clear: both"></div> | |
| 670 | + </nav> | |
| 671 | + </div> | |
| 672 | + </div> | |
| 673 | + | |
| 674 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 675 | + <a rel="prev" href="../../administration_manual/tutorials/03-premier-demarrage.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 676 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 677 | + </a> | |
| 678 | + | |
| 679 | + <a rel="next prefetch" href="../../administration_manual/how-to/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 680 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 681 | + </a> | |
| 682 | + </nav> | |
| 683 | + | |
| 684 | + </div> | |
| 685 | + | |
| 686 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 687 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 688 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 689 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 690 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + <script> | |
| 695 | + window.playground_copyable = true; | |
| 696 | + </script> | |
| 697 | + | |
| 698 | + | |
| 699 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 700 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 701 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 702 | + | |
| 703 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 704 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 705 | + <script src="../../book-a0b12cfe.js"></script> | |
| 706 | + | |
| 707 | + <!-- Custom JS scripts --> | |
| 708 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 709 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + </div> | |
| 714 | + </body> | |
| 715 | +</html> |
A
book/administration_manual/tutorials/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Tutoriels - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/tutorials/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="tutoriels"><a class="header" href="#tutoriels">Tutoriels</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../administration_manual/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/tutorials/01-installation-docker.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../administration_manual/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/tutorials/01-installation-docker.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/ayu-highlight-3fdfc3ac.css
+77
-0
@@ -0,0 +1,77 @@
| 1 | +/* | |
| 2 | +Based off of the Ayu theme | |
| 3 | +Original by Dempfi (https://github.com/dempfi/ayu) | |
| 4 | +*/ | |
| 5 | + | |
| 6 | +.hljs { | |
| 7 | + display: block; | |
| 8 | + overflow-x: auto; | |
| 9 | + background: #191f26; | |
| 10 | + color: #e6e1cf; | |
| 11 | +} | |
| 12 | + | |
| 13 | +.hljs-comment, | |
| 14 | +.hljs-quote { | |
| 15 | + color: #5c6773; | |
| 16 | +} | |
| 17 | + | |
| 18 | +.hljs-variable, | |
| 19 | +.hljs-template-variable, | |
| 20 | +.hljs-attribute, | |
| 21 | +.hljs-attr, | |
| 22 | +.hljs-regexp, | |
| 23 | +.hljs-link, | |
| 24 | +.hljs-selector-id, | |
| 25 | +.hljs-selector-class { | |
| 26 | + color: #ff7733; | |
| 27 | +} | |
| 28 | + | |
| 29 | +.hljs-number, | |
| 30 | +.hljs-meta, | |
| 31 | +.hljs-builtin-name, | |
| 32 | +.hljs-literal, | |
| 33 | +.hljs-type, | |
| 34 | +.hljs-params { | |
| 35 | + color: #ffee99; | |
| 36 | +} | |
| 37 | + | |
| 38 | +.hljs-string, | |
| 39 | +.hljs-bullet { | |
| 40 | + color: #b8cc52; | |
| 41 | +} | |
| 42 | + | |
| 43 | +.hljs-title, | |
| 44 | +.hljs-built_in, | |
| 45 | +.hljs-section { | |
| 46 | + color: #ffb454; | |
| 47 | +} | |
| 48 | + | |
| 49 | +.hljs-keyword, | |
| 50 | +.hljs-selector-tag, | |
| 51 | +.hljs-symbol { | |
| 52 | + color: #ff7733; | |
| 53 | +} | |
| 54 | + | |
| 55 | +.hljs-name { | |
| 56 | + color: #36a3d9; | |
| 57 | +} | |
| 58 | + | |
| 59 | +.hljs-tag { | |
| 60 | + color: #00568d; | |
| 61 | +} | |
| 62 | + | |
| 63 | +.hljs-emphasis { | |
| 64 | + font-style: italic; | |
| 65 | +} | |
| 66 | + | |
| 67 | +.hljs-strong { | |
| 68 | + font-weight: bold; | |
| 69 | +} | |
| 70 | + | |
| 71 | +.hljs-addition { | |
| 72 | + color: #91b362; | |
| 73 | +} | |
| 74 | + | |
| 75 | +.hljs-deletion { | |
| 76 | + color: #d96c75; | |
| 77 | +} |
A
book/book-a0b12cfe.js
+843
-0
@@ -0,0 +1,843 @@
| 1 | +'use strict'; | |
| 2 | + | |
| 3 | +/* global default_theme, default_dark_theme, default_light_theme, hljs, ClipboardJS */ | |
| 4 | + | |
| 5 | +// Fix back button cache problem | |
| 6 | +window.onunload = function() { }; | |
| 7 | + | |
| 8 | +// Global variable, shared between modules | |
| 9 | +function playground_text(playground, hidden = true) { | |
| 10 | + const code_block = playground.querySelector('code'); | |
| 11 | + | |
| 12 | + if (window.ace && code_block.classList.contains('editable')) { | |
| 13 | + const editor = window.ace.edit(code_block); | |
| 14 | + return editor.getValue(); | |
| 15 | + } else if (hidden) { | |
| 16 | + return code_block.textContent; | |
| 17 | + } else { | |
| 18 | + return code_block.innerText; | |
| 19 | + } | |
| 20 | +} | |
| 21 | + | |
| 22 | +(function codeSnippets() { | |
| 23 | + function fetch_with_timeout(url, options, timeout = 6000) { | |
| 24 | + return Promise.race([ | |
| 25 | + fetch(url, options), | |
| 26 | + new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)), | |
| 27 | + ]); | |
| 28 | + } | |
| 29 | + | |
| 30 | + const playgrounds = Array.from(document.querySelectorAll('.playground')); | |
| 31 | + if (playgrounds.length > 0) { | |
| 32 | + fetch_with_timeout('https://play.rust-lang.org/meta/crates', { | |
| 33 | + headers: { | |
| 34 | + 'Content-Type': 'application/json', | |
| 35 | + }, | |
| 36 | + method: 'POST', | |
| 37 | + mode: 'cors', | |
| 38 | + }) | |
| 39 | + .then(response => response.json()) | |
| 40 | + .then(response => { | |
| 41 | + // get list of crates available in the rust playground | |
| 42 | + const playground_crates = response.crates.map(item => item['id']); | |
| 43 | + playgrounds.forEach(block => handle_crate_list_update(block, playground_crates)); | |
| 44 | + }); | |
| 45 | + } | |
| 46 | + | |
| 47 | + function handle_crate_list_update(playground_block, playground_crates) { | |
| 48 | + // update the play buttons after receiving the response | |
| 49 | + update_play_button(playground_block, playground_crates); | |
| 50 | + | |
| 51 | + // and install on change listener to dynamically update ACE editors | |
| 52 | + if (window.ace) { | |
| 53 | + const code_block = playground_block.querySelector('code'); | |
| 54 | + if (code_block.classList.contains('editable')) { | |
| 55 | + const editor = window.ace.edit(code_block); | |
| 56 | + editor.addEventListener('change', () => { | |
| 57 | + update_play_button(playground_block, playground_crates); | |
| 58 | + }); | |
| 59 | + // add Ctrl-Enter command to execute rust code | |
| 60 | + editor.commands.addCommand({ | |
| 61 | + name: 'run', | |
| 62 | + bindKey: { | |
| 63 | + win: 'Ctrl-Enter', | |
| 64 | + mac: 'Ctrl-Enter', | |
| 65 | + }, | |
| 66 | + exec: _editor => run_rust_code(playground_block), | |
| 67 | + }); | |
| 68 | + } | |
| 69 | + } | |
| 70 | + } | |
| 71 | + | |
| 72 | + // updates the visibility of play button based on `no_run` class and | |
| 73 | + // used crates vs ones available on https://play.rust-lang.org | |
| 74 | + function update_play_button(pre_block, playground_crates) { | |
| 75 | + const play_button = pre_block.querySelector('.play-button'); | |
| 76 | + | |
| 77 | + // skip if code is `no_run` | |
| 78 | + if (pre_block.querySelector('code').classList.contains('no_run')) { | |
| 79 | + play_button.classList.add('hidden'); | |
| 80 | + return; | |
| 81 | + } | |
| 82 | + | |
| 83 | + // get list of `extern crate`'s from snippet | |
| 84 | + const txt = playground_text(pre_block); | |
| 85 | + const re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g; | |
| 86 | + const snippet_crates = []; | |
| 87 | + let item; | |
| 88 | + while (item = re.exec(txt)) { | |
| 89 | + snippet_crates.push(item[1]); | |
| 90 | + } | |
| 91 | + | |
| 92 | + // check if all used crates are available on play.rust-lang.org | |
| 93 | + const all_available = snippet_crates.every(function(elem) { | |
| 94 | + return playground_crates.indexOf(elem) > -1; | |
| 95 | + }); | |
| 96 | + | |
| 97 | + if (all_available) { | |
| 98 | + play_button.classList.remove('hidden'); | |
| 99 | + play_button.hidden = false; | |
| 100 | + } else { | |
| 101 | + play_button.classList.add('hidden'); | |
| 102 | + } | |
| 103 | + } | |
| 104 | + | |
| 105 | + function run_rust_code(code_block) { | |
| 106 | + let result_block = code_block.querySelector('.result'); | |
| 107 | + if (!result_block) { | |
| 108 | + result_block = document.createElement('code'); | |
| 109 | + result_block.className = 'result hljs language-bash'; | |
| 110 | + | |
| 111 | + code_block.append(result_block); | |
| 112 | + } | |
| 113 | + | |
| 114 | + const text = playground_text(code_block); | |
| 115 | + const classes = code_block.querySelector('code').classList; | |
| 116 | + let edition = '2015'; | |
| 117 | + classes.forEach(className => { | |
| 118 | + if (className.startsWith('edition')) { | |
| 119 | + edition = className.slice(7); | |
| 120 | + } | |
| 121 | + }); | |
| 122 | + const params = { | |
| 123 | + version: 'stable', | |
| 124 | + optimize: '0', | |
| 125 | + code: text, | |
| 126 | + edition: edition, | |
| 127 | + }; | |
| 128 | + | |
| 129 | + if (text.indexOf('#![feature') !== -1) { | |
| 130 | + params.version = 'nightly'; | |
| 131 | + } | |
| 132 | + | |
| 133 | + result_block.innerText = 'Running...'; | |
| 134 | + | |
| 135 | + fetch_with_timeout('https://play.rust-lang.org/evaluate.json', { | |
| 136 | + headers: { | |
| 137 | + 'Content-Type': 'application/json', | |
| 138 | + }, | |
| 139 | + method: 'POST', | |
| 140 | + mode: 'cors', | |
| 141 | + body: JSON.stringify(params), | |
| 142 | + }) | |
| 143 | + .then(response => response.json()) | |
| 144 | + .then(response => { | |
| 145 | + if (response.result.trim() === '') { | |
| 146 | + result_block.innerText = 'No output'; | |
| 147 | + result_block.classList.add('result-no-output'); | |
| 148 | + } else { | |
| 149 | + result_block.innerText = response.result; | |
| 150 | + result_block.classList.remove('result-no-output'); | |
| 151 | + } | |
| 152 | + }) | |
| 153 | + .catch(error => result_block.innerText = 'Playground Communication: ' + error.message); | |
| 154 | + } | |
| 155 | + | |
| 156 | + // Syntax highlighting Configuration | |
| 157 | + hljs.configure({ | |
| 158 | + tabReplace: ' ', // 4 spaces | |
| 159 | + languages: [], // Languages used for auto-detection | |
| 160 | + }); | |
| 161 | + | |
| 162 | + const code_nodes = Array | |
| 163 | + .from(document.querySelectorAll('code')) | |
| 164 | + // Don't highlight `inline code` blocks in headers. | |
| 165 | + .filter(function(node) { | |
| 166 | + return !node.parentElement.classList.contains('header'); | |
| 167 | + }); | |
| 168 | + | |
| 169 | + if (window.ace) { | |
| 170 | + // language-rust class needs to be removed for editable | |
| 171 | + // blocks or highlightjs will capture events | |
| 172 | + code_nodes | |
| 173 | + .filter(function(node) { | |
| 174 | + return node.classList.contains('editable'); | |
| 175 | + }) | |
| 176 | + .forEach(function(block) { | |
| 177 | + block.classList.remove('language-rust'); | |
| 178 | + }); | |
| 179 | + | |
| 180 | + code_nodes | |
| 181 | + .filter(function(node) { | |
| 182 | + return !node.classList.contains('editable'); | |
| 183 | + }) | |
| 184 | + .forEach(function(block) { | |
| 185 | + hljs.highlightBlock(block); | |
| 186 | + }); | |
| 187 | + } else { | |
| 188 | + code_nodes.forEach(function(block) { | |
| 189 | + hljs.highlightBlock(block); | |
| 190 | + }); | |
| 191 | + } | |
| 192 | + | |
| 193 | + // Adding the hljs class gives code blocks the color css | |
| 194 | + // even if highlighting doesn't apply | |
| 195 | + code_nodes.forEach(function(block) { | |
| 196 | + block.classList.add('hljs'); | |
| 197 | + }); | |
| 198 | + | |
| 199 | + Array.from(document.querySelectorAll('code.hljs')).forEach(function(block) { | |
| 200 | + | |
| 201 | + const lines = Array.from(block.querySelectorAll('.boring')); | |
| 202 | + // If no lines were hidden, return | |
| 203 | + if (!lines.length) { | |
| 204 | + return; | |
| 205 | + } | |
| 206 | + block.classList.add('hide-boring'); | |
| 207 | + | |
| 208 | + const buttons = document.createElement('div'); | |
| 209 | + buttons.className = 'buttons'; | |
| 210 | + buttons.innerHTML = '<button title="Show hidden lines" \ | |
| 211 | +aria-label="Show hidden lines"></button>'; | |
| 212 | + buttons.firstChild.innerHTML = document.getElementById('fa-eye').innerHTML; | |
| 213 | + | |
| 214 | + // add expand button | |
| 215 | + const pre_block = block.parentNode; | |
| 216 | + pre_block.insertBefore(buttons, pre_block.firstChild); | |
| 217 | + | |
| 218 | + buttons.firstChild.addEventListener('click', function(e) { | |
| 219 | + if (this.title === 'Show hidden lines') { | |
| 220 | + this.innerHTML = document.getElementById('fa-eye-slash').innerHTML; | |
| 221 | + this.title = 'Hide lines'; | |
| 222 | + this.setAttribute('aria-label', e.target.title); | |
| 223 | + | |
| 224 | + block.classList.remove('hide-boring'); | |
| 225 | + } else if (this.title === 'Hide lines') { | |
| 226 | + this.innerHTML = document.getElementById('fa-eye').innerHTML; | |
| 227 | + this.title = 'Show hidden lines'; | |
| 228 | + this.setAttribute('aria-label', e.target.title); | |
| 229 | + | |
| 230 | + block.classList.add('hide-boring'); | |
| 231 | + } | |
| 232 | + }); | |
| 233 | + }); | |
| 234 | + | |
| 235 | + if (window.playground_copyable) { | |
| 236 | + Array.from(document.querySelectorAll('pre code')).forEach(function(block) { | |
| 237 | + const pre_block = block.parentNode; | |
| 238 | + if (!pre_block.classList.contains('playground')) { | |
| 239 | + let buttons = pre_block.querySelector('.buttons'); | |
| 240 | + if (!buttons) { | |
| 241 | + buttons = document.createElement('div'); | |
| 242 | + buttons.className = 'buttons'; | |
| 243 | + pre_block.insertBefore(buttons, pre_block.firstChild); | |
| 244 | + } | |
| 245 | + | |
| 246 | + const clipButton = document.createElement('button'); | |
| 247 | + clipButton.className = 'clip-button'; | |
| 248 | + clipButton.title = 'Copy to clipboard'; | |
| 249 | + clipButton.setAttribute('aria-label', clipButton.title); | |
| 250 | + clipButton.innerHTML = '<i class="tooltiptext"></i>'; | |
| 251 | + | |
| 252 | + buttons.insertBefore(clipButton, buttons.firstChild); | |
| 253 | + } | |
| 254 | + }); | |
| 255 | + } | |
| 256 | + | |
| 257 | + // Process playground code blocks | |
| 258 | + Array.from(document.querySelectorAll('.playground')).forEach(function(pre_block) { | |
| 259 | + // Add play button | |
| 260 | + let buttons = pre_block.querySelector('.buttons'); | |
| 261 | + if (!buttons) { | |
| 262 | + buttons = document.createElement('div'); | |
| 263 | + buttons.className = 'buttons'; | |
| 264 | + pre_block.insertBefore(buttons, pre_block.firstChild); | |
| 265 | + } | |
| 266 | + | |
| 267 | + const runCodeButton = document.createElement('button'); | |
| 268 | + runCodeButton.className = 'play-button'; | |
| 269 | + runCodeButton.hidden = true; | |
| 270 | + runCodeButton.title = 'Run this code'; | |
| 271 | + runCodeButton.setAttribute('aria-label', runCodeButton.title); | |
| 272 | + runCodeButton.innerHTML = document.getElementById('fa-play').innerHTML; | |
| 273 | + | |
| 274 | + buttons.insertBefore(runCodeButton, buttons.firstChild); | |
| 275 | + runCodeButton.addEventListener('click', () => { | |
| 276 | + run_rust_code(pre_block); | |
| 277 | + }); | |
| 278 | + | |
| 279 | + if (window.playground_copyable) { | |
| 280 | + const copyCodeClipboardButton = document.createElement('button'); | |
| 281 | + copyCodeClipboardButton.className = 'clip-button'; | |
| 282 | + copyCodeClipboardButton.innerHTML = '<i class="tooltiptext"></i>'; | |
| 283 | + copyCodeClipboardButton.title = 'Copy to clipboard'; | |
| 284 | + copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title); | |
| 285 | + | |
| 286 | + buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild); | |
| 287 | + } | |
| 288 | + | |
| 289 | + const code_block = pre_block.querySelector('code'); | |
| 290 | + if (window.ace && code_block.classList.contains('editable')) { | |
| 291 | + const undoChangesButton = document.createElement('button'); | |
| 292 | + undoChangesButton.className = 'reset-button'; | |
| 293 | + undoChangesButton.title = 'Undo changes'; | |
| 294 | + undoChangesButton.setAttribute('aria-label', undoChangesButton.title); | |
| 295 | + undoChangesButton.innerHTML += | |
| 296 | + document.getElementById('fa-clock-rotate-left').innerHTML; | |
| 297 | + | |
| 298 | + buttons.insertBefore(undoChangesButton, buttons.firstChild); | |
| 299 | + | |
| 300 | + undoChangesButton.addEventListener('click', function() { | |
| 301 | + const editor = window.ace.edit(code_block); | |
| 302 | + editor.setValue(editor.originalCode); | |
| 303 | + editor.clearSelection(); | |
| 304 | + }); | |
| 305 | + } | |
| 306 | + }); | |
| 307 | +})(); | |
| 308 | + | |
| 309 | +(function themes() { | |
| 310 | + const html = document.querySelector('html'); | |
| 311 | + const themeToggleButton = document.getElementById('mdbook-theme-toggle'); | |
| 312 | + const themePopup = document.getElementById('mdbook-theme-list'); | |
| 313 | + const themeColorMetaTag = document.querySelector('meta[name="theme-color"]'); | |
| 314 | + const themeIds = []; | |
| 315 | + themePopup.querySelectorAll('button.theme').forEach(function(el) { | |
| 316 | + themeIds.push(el.id); | |
| 317 | + }); | |
| 318 | + const stylesheets = { | |
| 319 | + ayuHighlight: document.querySelector('#mdbook-ayu-highlight-css'), | |
| 320 | + tomorrowNight: document.querySelector('#mdbook-tomorrow-night-css'), | |
| 321 | + highlight: document.querySelector('#mdbook-highlight-css'), | |
| 322 | + }; | |
| 323 | + | |
| 324 | + function showThemes() { | |
| 325 | + themePopup.style.display = 'block'; | |
| 326 | + themeToggleButton.setAttribute('aria-expanded', true); | |
| 327 | + themePopup.querySelector('button#mdbook-theme-' + get_theme()).focus(); | |
| 328 | + } | |
| 329 | + | |
| 330 | + function updateThemeSelected() { | |
| 331 | + themePopup.querySelectorAll('.theme-selected').forEach(function(el) { | |
| 332 | + el.classList.remove('theme-selected'); | |
| 333 | + }); | |
| 334 | + const selected = get_saved_theme() ?? 'default_theme'; | |
| 335 | + let element = themePopup.querySelector('button#mdbook-theme-' + selected); | |
| 336 | + if (element === null) { | |
| 337 | + // Fall back in case there is no "Default" item. | |
| 338 | + element = themePopup.querySelector('button#mdbook-theme-' + get_theme()); | |
| 339 | + } | |
| 340 | + element.classList.add('theme-selected'); | |
| 341 | + } | |
| 342 | + | |
| 343 | + function hideThemes() { | |
| 344 | + themePopup.style.display = 'none'; | |
| 345 | + themeToggleButton.setAttribute('aria-expanded', false); | |
| 346 | + themeToggleButton.focus(); | |
| 347 | + } | |
| 348 | + | |
| 349 | + function get_saved_theme() { | |
| 350 | + let theme = null; | |
| 351 | + try { | |
| 352 | + theme = localStorage.getItem('mdbook-theme'); | |
| 353 | + } catch { | |
| 354 | + // ignore error. | |
| 355 | + } | |
| 356 | + return theme; | |
| 357 | + } | |
| 358 | + | |
| 359 | + function delete_saved_theme() { | |
| 360 | + localStorage.removeItem('mdbook-theme'); | |
| 361 | + } | |
| 362 | + | |
| 363 | + function get_theme() { | |
| 364 | + const theme = get_saved_theme(); | |
| 365 | + if (theme === null || theme === undefined || !themeIds.includes('mdbook-theme-' + theme)) { | |
| 366 | + if (typeof default_dark_theme === 'undefined') { | |
| 367 | + // A customized index.hbs might not define this, so fall back to | |
| 368 | + // old behavior of determining the default on page load. | |
| 369 | + return default_theme; | |
| 370 | + } | |
| 371 | + return window.matchMedia('(prefers-color-scheme: dark)').matches | |
| 372 | + ? default_dark_theme | |
| 373 | + : default_light_theme; | |
| 374 | + } else { | |
| 375 | + return theme; | |
| 376 | + } | |
| 377 | + } | |
| 378 | + | |
| 379 | + let previousTheme = default_theme; | |
| 380 | + function set_theme(theme, store = true) { | |
| 381 | + let ace_theme; | |
| 382 | + | |
| 383 | + if (theme === 'coal' || theme === 'navy') { | |
| 384 | + stylesheets.ayuHighlight.disabled = true; | |
| 385 | + stylesheets.tomorrowNight.disabled = false; | |
| 386 | + stylesheets.highlight.disabled = true; | |
| 387 | + | |
| 388 | + ace_theme = 'ace/theme/tomorrow_night'; | |
| 389 | + } else if (theme === 'ayu') { | |
| 390 | + stylesheets.ayuHighlight.disabled = false; | |
| 391 | + stylesheets.tomorrowNight.disabled = true; | |
| 392 | + stylesheets.highlight.disabled = true; | |
| 393 | + ace_theme = 'ace/theme/tomorrow_night'; | |
| 394 | + } else { | |
| 395 | + stylesheets.ayuHighlight.disabled = true; | |
| 396 | + stylesheets.tomorrowNight.disabled = true; | |
| 397 | + stylesheets.highlight.disabled = false; | |
| 398 | + ace_theme = 'ace/theme/dawn'; | |
| 399 | + } | |
| 400 | + | |
| 401 | + setTimeout(function() { | |
| 402 | + themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor; | |
| 403 | + }, 1); | |
| 404 | + | |
| 405 | + if (window.ace && window.editors) { | |
| 406 | + window.editors.forEach(function(editor) { | |
| 407 | + editor.setTheme(ace_theme); | |
| 408 | + }); | |
| 409 | + } | |
| 410 | + | |
| 411 | + if (store) { | |
| 412 | + try { | |
| 413 | + localStorage.setItem('mdbook-theme', theme); | |
| 414 | + } catch { | |
| 415 | + // ignore error. | |
| 416 | + } | |
| 417 | + } | |
| 418 | + | |
| 419 | + html.classList.remove(previousTheme); | |
| 420 | + html.classList.add(theme); | |
| 421 | + previousTheme = theme; | |
| 422 | + updateThemeSelected(); | |
| 423 | + } | |
| 424 | + | |
| 425 | + const query = window.matchMedia('(prefers-color-scheme: dark)'); | |
| 426 | + query.onchange = function() { | |
| 427 | + set_theme(get_theme(), false); | |
| 428 | + }; | |
| 429 | + | |
| 430 | + // Set theme. | |
| 431 | + set_theme(get_theme(), false); | |
| 432 | + | |
| 433 | + themeToggleButton.addEventListener('click', function() { | |
| 434 | + if (themePopup.style.display === 'block') { | |
| 435 | + hideThemes(); | |
| 436 | + } else { | |
| 437 | + showThemes(); | |
| 438 | + } | |
| 439 | + }); | |
| 440 | + | |
| 441 | + themePopup.addEventListener('click', function(e) { | |
| 442 | + let theme; | |
| 443 | + if (e.target.className === 'theme') { | |
| 444 | + theme = e.target.id; | |
| 445 | + } else if (e.target.parentElement.className === 'theme') { | |
| 446 | + theme = e.target.parentElement.id; | |
| 447 | + } else { | |
| 448 | + return; | |
| 449 | + } | |
| 450 | + theme = theme.replace(/^mdbook-theme-/, ''); | |
| 451 | + | |
| 452 | + if (theme === 'default_theme' || theme === null) { | |
| 453 | + delete_saved_theme(); | |
| 454 | + set_theme(get_theme(), false); | |
| 455 | + } else { | |
| 456 | + set_theme(theme); | |
| 457 | + } | |
| 458 | + }); | |
| 459 | + | |
| 460 | + themePopup.addEventListener('focusout', function(e) { | |
| 461 | + // e.relatedTarget is null in Safari and Firefox on macOS (see workaround below) | |
| 462 | + if (!!e.relatedTarget && | |
| 463 | + !themeToggleButton.contains(e.relatedTarget) && | |
| 464 | + !themePopup.contains(e.relatedTarget) | |
| 465 | + ) { | |
| 466 | + hideThemes(); | |
| 467 | + } | |
| 468 | + }); | |
| 469 | + | |
| 470 | + // Should not be needed, but it works around an issue on macOS & iOS: | |
| 471 | + // https://github.com/rust-lang/mdBook/issues/628 | |
| 472 | + document.addEventListener('click', function(e) { | |
| 473 | + if (themePopup.style.display === 'block' && | |
| 474 | + !themeToggleButton.contains(e.target) && | |
| 475 | + !themePopup.contains(e.target) | |
| 476 | + ) { | |
| 477 | + hideThemes(); | |
| 478 | + } | |
| 479 | + }); | |
| 480 | + | |
| 481 | + document.addEventListener('keydown', function(e) { | |
| 482 | + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { | |
| 483 | + return; | |
| 484 | + } | |
| 485 | + if (!themePopup.contains(e.target)) { | |
| 486 | + return; | |
| 487 | + } | |
| 488 | + | |
| 489 | + let li; | |
| 490 | + switch (e.key) { | |
| 491 | + case 'Escape': | |
| 492 | + e.preventDefault(); | |
| 493 | + hideThemes(); | |
| 494 | + break; | |
| 495 | + case 'ArrowUp': | |
| 496 | + e.preventDefault(); | |
| 497 | + li = document.activeElement.parentElement; | |
| 498 | + if (li && li.previousElementSibling) { | |
| 499 | + li.previousElementSibling.querySelector('button').focus(); | |
| 500 | + } | |
| 501 | + break; | |
| 502 | + case 'ArrowDown': | |
| 503 | + e.preventDefault(); | |
| 504 | + li = document.activeElement.parentElement; | |
| 505 | + if (li && li.nextElementSibling) { | |
| 506 | + li.nextElementSibling.querySelector('button').focus(); | |
| 507 | + } | |
| 508 | + break; | |
| 509 | + case 'Home': | |
| 510 | + e.preventDefault(); | |
| 511 | + themePopup.querySelector('li:first-child button').focus(); | |
| 512 | + break; | |
| 513 | + case 'End': | |
| 514 | + e.preventDefault(); | |
| 515 | + themePopup.querySelector('li:last-child button').focus(); | |
| 516 | + break; | |
| 517 | + } | |
| 518 | + }); | |
| 519 | +})(); | |
| 520 | + | |
| 521 | +(function sidebar() { | |
| 522 | + const sidebar = document.getElementById('mdbook-sidebar'); | |
| 523 | + const sidebarLinks = document.querySelectorAll('#mdbook-sidebar a'); | |
| 524 | + const sidebarToggleButton = document.getElementById('mdbook-sidebar-toggle'); | |
| 525 | + const sidebarResizeHandle = document.getElementById('mdbook-sidebar-resize-handle'); | |
| 526 | + const sidebarCheckbox = document.getElementById('mdbook-sidebar-toggle-anchor'); | |
| 527 | + let firstContact = null; | |
| 528 | + | |
| 529 | + | |
| 530 | + /* Because we cannot change the `display` using only CSS after/before the transition, we | |
| 531 | + need JS to do it. We change the display to prevent the browsers search to find text inside | |
| 532 | + the collapsed sidebar. */ | |
| 533 | + if (!document.documentElement.classList.contains('sidebar-visible')) { | |
| 534 | + sidebar.style.display = 'none'; | |
| 535 | + } | |
| 536 | + sidebar.addEventListener('transitionend', () => { | |
| 537 | + /* We only change the display to "none" if we're collapsing the sidebar. */ | |
| 538 | + if (!sidebarCheckbox.checked) { | |
| 539 | + sidebar.style.display = 'none'; | |
| 540 | + } | |
| 541 | + }); | |
| 542 | + sidebarToggleButton.addEventListener('click', () => { | |
| 543 | + /* To allow the sidebar expansion animation, we first need to put back the display. */ | |
| 544 | + if (!sidebarCheckbox.checked) { | |
| 545 | + sidebar.style.display = ''; | |
| 546 | + // Workaround for Safari skipping the animation when changing | |
| 547 | + // `display` and a transform in the same event loop. This forces a | |
| 548 | + // reflow after updating the display. | |
| 549 | + sidebar.offsetHeight; | |
| 550 | + } | |
| 551 | + }); | |
| 552 | + | |
| 553 | + function showSidebar() { | |
| 554 | + document.documentElement.classList.add('sidebar-visible'); | |
| 555 | + Array.from(sidebarLinks).forEach(function(link) { | |
| 556 | + link.setAttribute('tabIndex', 0); | |
| 557 | + }); | |
| 558 | + sidebarToggleButton.setAttribute('aria-expanded', true); | |
| 559 | + sidebar.setAttribute('aria-hidden', false); | |
| 560 | + try { | |
| 561 | + localStorage.setItem('mdbook-sidebar', 'visible'); | |
| 562 | + } catch { | |
| 563 | + // Ignore error. | |
| 564 | + } | |
| 565 | + } | |
| 566 | + | |
| 567 | + function hideSidebar() { | |
| 568 | + document.documentElement.classList.remove('sidebar-visible'); | |
| 569 | + Array.from(sidebarLinks).forEach(function(link) { | |
| 570 | + link.setAttribute('tabIndex', -1); | |
| 571 | + }); | |
| 572 | + sidebarToggleButton.setAttribute('aria-expanded', false); | |
| 573 | + sidebar.setAttribute('aria-hidden', true); | |
| 574 | + try { | |
| 575 | + localStorage.setItem('mdbook-sidebar', 'hidden'); | |
| 576 | + } catch { | |
| 577 | + // Ignore error. | |
| 578 | + } | |
| 579 | + } | |
| 580 | + | |
| 581 | + // Toggle sidebar | |
| 582 | + sidebarCheckbox.addEventListener('change', function sidebarToggle() { | |
| 583 | + if (sidebarCheckbox.checked) { | |
| 584 | + const current_width = parseInt( | |
| 585 | + document.documentElement.style.getPropertyValue('--sidebar-target-width'), 10); | |
| 586 | + if (current_width < 150) { | |
| 587 | + document.documentElement.style.setProperty('--sidebar-target-width', '150px'); | |
| 588 | + } | |
| 589 | + showSidebar(); | |
| 590 | + } else { | |
| 591 | + hideSidebar(); | |
| 592 | + } | |
| 593 | + }); | |
| 594 | + | |
| 595 | + sidebarResizeHandle.addEventListener('mousedown', initResize, false); | |
| 596 | + | |
| 597 | + function initResize() { | |
| 598 | + window.addEventListener('mousemove', resize, false); | |
| 599 | + window.addEventListener('mouseup', stopResize, false); | |
| 600 | + document.documentElement.classList.add('sidebar-resizing'); | |
| 601 | + } | |
| 602 | + function resize(e) { | |
| 603 | + let pos = e.clientX - sidebar.offsetLeft; | |
| 604 | + if (pos < 20) { | |
| 605 | + hideSidebar(); | |
| 606 | + } else { | |
| 607 | + if (!document.documentElement.classList.contains('sidebar-visible')) { | |
| 608 | + showSidebar(); | |
| 609 | + } | |
| 610 | + pos = Math.min(pos, window.innerWidth - 100); | |
| 611 | + document.documentElement.style.setProperty('--sidebar-target-width', pos + 'px'); | |
| 612 | + } | |
| 613 | + } | |
| 614 | + //on mouseup remove windows functions mousemove & mouseup | |
| 615 | + function stopResize() { | |
| 616 | + document.documentElement.classList.remove('sidebar-resizing'); | |
| 617 | + window.removeEventListener('mousemove', resize, false); | |
| 618 | + window.removeEventListener('mouseup', stopResize, false); | |
| 619 | + } | |
| 620 | + | |
| 621 | + document.addEventListener('touchstart', function(e) { | |
| 622 | + firstContact = { | |
| 623 | + x: e.touches[0].clientX, | |
| 624 | + time: Date.now(), | |
| 625 | + }; | |
| 626 | + }, { passive: true }); | |
| 627 | + | |
| 628 | + document.addEventListener('touchmove', function(e) { | |
| 629 | + if (!firstContact) { | |
| 630 | + return; | |
| 631 | + } | |
| 632 | + | |
| 633 | + const curX = e.touches[0].clientX; | |
| 634 | + const xDiff = curX - firstContact.x, | |
| 635 | + tDiff = Date.now() - firstContact.time; | |
| 636 | + | |
| 637 | + if (tDiff < 250 && Math.abs(xDiff) >= 150) { | |
| 638 | + if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) { | |
| 639 | + showSidebar(); | |
| 640 | + } else if (xDiff < 0 && curX < 300) { | |
| 641 | + hideSidebar(); | |
| 642 | + } | |
| 643 | + | |
| 644 | + firstContact = null; | |
| 645 | + } | |
| 646 | + }, { passive: true }); | |
| 647 | +})(); | |
| 648 | + | |
| 649 | +(function chapterNavigation() { | |
| 650 | + document.addEventListener('keydown', function(e) { | |
| 651 | + if (e.altKey || e.ctrlKey || e.metaKey) { | |
| 652 | + return; | |
| 653 | + } | |
| 654 | + if (window.search && window.search.hasFocus()) { | |
| 655 | + return; | |
| 656 | + } | |
| 657 | + const html = document.querySelector('html'); | |
| 658 | + | |
| 659 | + function next() { | |
| 660 | + const nextButton = document.querySelector('.nav-chapters.next'); | |
| 661 | + if (nextButton) { | |
| 662 | + window.location.href = nextButton.href; | |
| 663 | + } | |
| 664 | + } | |
| 665 | + function prev() { | |
| 666 | + const previousButton = document.querySelector('.nav-chapters.previous'); | |
| 667 | + if (previousButton) { | |
| 668 | + window.location.href = previousButton.href; | |
| 669 | + } | |
| 670 | + } | |
| 671 | + function showHelp() { | |
| 672 | + const container = document.getElementById('mdbook-help-container'); | |
| 673 | + const overlay = document.getElementById('mdbook-help-popup'); | |
| 674 | + container.style.display = 'flex'; | |
| 675 | + | |
| 676 | + // Clicking outside the popup will dismiss it. | |
| 677 | + const mouseHandler = event => { | |
| 678 | + if (overlay.contains(event.target)) { | |
| 679 | + return; | |
| 680 | + } | |
| 681 | + if (event.button !== 0) { | |
| 682 | + return; | |
| 683 | + } | |
| 684 | + event.preventDefault(); | |
| 685 | + event.stopPropagation(); | |
| 686 | + document.removeEventListener('mousedown', mouseHandler); | |
| 687 | + hideHelp(); | |
| 688 | + }; | |
| 689 | + | |
| 690 | + // Pressing esc will dismiss the popup. | |
| 691 | + const escapeKeyHandler = event => { | |
| 692 | + if (event.key === 'Escape') { | |
| 693 | + event.preventDefault(); | |
| 694 | + event.stopPropagation(); | |
| 695 | + document.removeEventListener('keydown', escapeKeyHandler, true); | |
| 696 | + hideHelp(); | |
| 697 | + } | |
| 698 | + }; | |
| 699 | + document.addEventListener('keydown', escapeKeyHandler, true); | |
| 700 | + document.getElementById('mdbook-help-container') | |
| 701 | + .addEventListener('mousedown', mouseHandler); | |
| 702 | + } | |
| 703 | + function hideHelp() { | |
| 704 | + document.getElementById('mdbook-help-container').style.display = 'none'; | |
| 705 | + } | |
| 706 | + | |
| 707 | + // Usually needs the Shift key to be pressed | |
| 708 | + switch (e.key) { | |
| 709 | + case '?': | |
| 710 | + e.preventDefault(); | |
| 711 | + showHelp(); | |
| 712 | + break; | |
| 713 | + } | |
| 714 | + | |
| 715 | + // Rest of the keys are only active when the Shift key is not pressed | |
| 716 | + if (e.shiftKey) { | |
| 717 | + return; | |
| 718 | + } | |
| 719 | + | |
| 720 | + switch (e.key) { | |
| 721 | + case 'ArrowRight': | |
| 722 | + e.preventDefault(); | |
| 723 | + if (html.dir === 'rtl') { | |
| 724 | + prev(); | |
| 725 | + } else { | |
| 726 | + next(); | |
| 727 | + } | |
| 728 | + break; | |
| 729 | + case 'ArrowLeft': | |
| 730 | + e.preventDefault(); | |
| 731 | + if (html.dir === 'rtl') { | |
| 732 | + next(); | |
| 733 | + } else { | |
| 734 | + prev(); | |
| 735 | + } | |
| 736 | + break; | |
| 737 | + } | |
| 738 | + }); | |
| 739 | +})(); | |
| 740 | + | |
| 741 | +(function clipboard() { | |
| 742 | + const clipButtons = document.querySelectorAll('.clip-button'); | |
| 743 | + | |
| 744 | + function hideTooltip(elem) { | |
| 745 | + elem.firstChild.innerText = ''; | |
| 746 | + elem.className = 'clip-button'; | |
| 747 | + } | |
| 748 | + | |
| 749 | + function showTooltip(elem, msg) { | |
| 750 | + elem.firstChild.innerText = msg; | |
| 751 | + elem.className = 'clip-button tooltipped'; | |
| 752 | + } | |
| 753 | + | |
| 754 | + const clipboardSnippets = new ClipboardJS('.clip-button', { | |
| 755 | + text: function(trigger) { | |
| 756 | + hideTooltip(trigger); | |
| 757 | + const playground = trigger.closest('pre'); | |
| 758 | + return playground_text(playground, false); | |
| 759 | + }, | |
| 760 | + }); | |
| 761 | + | |
| 762 | + Array.from(clipButtons).forEach(function(clipButton) { | |
| 763 | + clipButton.addEventListener('mouseout', function(e) { | |
| 764 | + hideTooltip(e.currentTarget); | |
| 765 | + }); | |
| 766 | + }); | |
| 767 | + | |
| 768 | + clipboardSnippets.on('success', function(e) { | |
| 769 | + e.clearSelection(); | |
| 770 | + showTooltip(e.trigger, 'Copied!'); | |
| 771 | + }); | |
| 772 | + | |
| 773 | + clipboardSnippets.on('error', function(e) { | |
| 774 | + showTooltip(e.trigger, 'Clipboard error!'); | |
| 775 | + }); | |
| 776 | +})(); | |
| 777 | + | |
| 778 | +(function scrollToTop() { | |
| 779 | + const menuTitle = document.querySelector('.menu-title'); | |
| 780 | + | |
| 781 | + menuTitle.addEventListener('click', function() { | |
| 782 | + document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' }); | |
| 783 | + }); | |
| 784 | +})(); | |
| 785 | + | |
| 786 | +(function controllMenu() { | |
| 787 | + const menu = document.getElementById('mdbook-menu-bar'); | |
| 788 | + | |
| 789 | + (function controllPosition() { | |
| 790 | + let scrollTop = document.scrollingElement.scrollTop; | |
| 791 | + let prevScrollTop = scrollTop; | |
| 792 | + const minMenuY = -menu.clientHeight - 50; | |
| 793 | + // When the script loads, the page can be at any scroll (e.g. if you refresh it). | |
| 794 | + menu.style.top = scrollTop + 'px'; | |
| 795 | + // Same as parseInt(menu.style.top.slice(0, -2), but faster | |
| 796 | + let topCache = menu.style.top.slice(0, -2); | |
| 797 | + menu.classList.remove('sticky'); | |
| 798 | + let stickyCache = false; // Same as menu.classList.contains('sticky'), but faster | |
| 799 | + document.addEventListener('scroll', function() { | |
| 800 | + scrollTop = Math.max(document.scrollingElement.scrollTop, 0); | |
| 801 | + // `null` means that it doesn't need to be updated | |
| 802 | + let nextSticky = null; | |
| 803 | + let nextTop = null; | |
| 804 | + const scrollDown = scrollTop > prevScrollTop; | |
| 805 | + const menuPosAbsoluteY = topCache - scrollTop; | |
| 806 | + if (scrollDown) { | |
| 807 | + nextSticky = false; | |
| 808 | + if (menuPosAbsoluteY > 0) { | |
| 809 | + nextTop = prevScrollTop; | |
| 810 | + } | |
| 811 | + } else { | |
| 812 | + if (menuPosAbsoluteY > 0) { | |
| 813 | + nextSticky = true; | |
| 814 | + } else if (menuPosAbsoluteY < minMenuY) { | |
| 815 | + nextTop = prevScrollTop + minMenuY; | |
| 816 | + } | |
| 817 | + } | |
| 818 | + if (nextSticky === true && stickyCache === false) { | |
| 819 | + menu.classList.add('sticky'); | |
| 820 | + stickyCache = true; | |
| 821 | + } else if (nextSticky === false && stickyCache === true) { | |
| 822 | + menu.classList.remove('sticky'); | |
| 823 | + stickyCache = false; | |
| 824 | + } | |
| 825 | + if (nextTop !== null) { | |
| 826 | + menu.style.top = nextTop + 'px'; | |
| 827 | + topCache = nextTop; | |
| 828 | + } | |
| 829 | + prevScrollTop = scrollTop; | |
| 830 | + }, { passive: true }); | |
| 831 | + })(); | |
| 832 | + (function controllBorder() { | |
| 833 | + function updateBorder() { | |
| 834 | + if (menu.offsetTop === 0) { | |
| 835 | + menu.classList.remove('bordered'); | |
| 836 | + } else { | |
| 837 | + menu.classList.add('bordered'); | |
| 838 | + } | |
| 839 | + } | |
| 840 | + updateBorder(); | |
| 841 | + document.addEventListener('scroll', updateBorder, { passive: true }); | |
| 842 | + })(); | |
| 843 | +})(); |
A
book/clipboard-1626706a.min.js
+7
-0
@@ -0,0 +1,7 @@
| 1 | +/*! | |
| 2 | + * clipboard.js v2.0.4 | |
| 3 | + * https://zenorocha.github.io/clipboard.js | |
| 4 | + * | |
| 5 | + * Licensed MIT © Zeno Rocha | |
| 6 | + */ | |
| 7 | +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}}(),a=o(n(1)),c=o(n(3)),u=o(n(4));function o(t){return t&&t.__esModule?t:{default:t}}var l=function(t){function o(t,e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,o);var n=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(o.__proto__||Object.getPrototypeOf(o)).call(this));return n.resolveOptions(e),n.listenClick(t),n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,c.default),i(o,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,u.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new a.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return s("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),o}();function s(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=l},function(t,e,n){"use strict";var o,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}}(),a=n(2),c=(o=a)&&o.__esModule?o:{default:o};var u=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.resolveOptions(t),this.initSelection()}return i(e,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,c.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,c.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),e}();t.exports=u},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function r(){o.off(t,r),e.apply(n,arguments)}return r._=e,this.on(t,r,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],r=[];if(o&&e)for(var i=0,a=o.length;i<a;i++)o[i].fn!==e&&o[i].fn._!==e&&r.push(o[i]);return r.length?n[t]=r:delete n[t],this}},t.exports=n},function(t,e,n){var d=n(5),h=n(6);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!d.string(e))throw new TypeError("Second argument must be a String");if(!d.fn(n))throw new TypeError("Third argument must be a Function");if(d.node(t))return s=e,f=n,(l=t).addEventListener(s,f),{destroy:function(){l.removeEventListener(s,f)}};if(d.nodeList(t))return a=t,c=e,u=n,Array.prototype.forEach.call(a,function(t){t.addEventListener(c,u)}),{destroy:function(){Array.prototype.forEach.call(a,function(t){t.removeEventListener(c,u)})}};if(d.string(t))return o=t,r=e,i=n,h(document.body,o,r,i);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var o,r,i,a,c,u,l,s,f}},function(t,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e,n){var a=n(7);function i(t,e,n,o,r){var i=function(e,n,t,o){return function(t){t.delegateTarget=a(t.target,n),t.delegateTarget&&o.call(e,t)}}.apply(this,arguments);return t.addEventListener(n,i,r),{destroy:function(){t.removeEventListener(n,i,r)}}}t.exports=function(t,e,n,o,r){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return i(t,e,n,o,r)}))}},function(t,e){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}}])}); | |
| 7 | < \ No newline at end of file |
A
book/css/chrome-ae938929.css
+756
-0
@@ -0,0 +1,756 @@
| 1 | +/* CSS for UI elements (a.k.a. chrome) */ | |
| 2 | + | |
| 3 | +html { | |
| 4 | + scrollbar-color: var(--scrollbar) transparent; | |
| 5 | +} | |
| 6 | +#mdbook-searchresults a, | |
| 7 | +.content a:link, | |
| 8 | +a:visited, | |
| 9 | +a > .hljs { | |
| 10 | + color: var(--links); | |
| 11 | +} | |
| 12 | + | |
| 13 | +/* | |
| 14 | + mdbook-body-container is necessary because mobile browsers don't seem to like | |
| 15 | + overflow-x on the body tag when there is a <meta name="viewport"> tag. | |
| 16 | +*/ | |
| 17 | +#mdbook-body-container { | |
| 18 | + /* | |
| 19 | + This is used when the sidebar pushes the body content off the side of | |
| 20 | + the screen on small screens. Without it, dragging on mobile Safari | |
| 21 | + will want to reposition the viewport in a weird way. | |
| 22 | + */ | |
| 23 | + overflow-x: clip; | |
| 24 | +} | |
| 25 | + | |
| 26 | +/* Menu Bar */ | |
| 27 | + | |
| 28 | +#mdbook-menu-bar, | |
| 29 | +#mdbook-menu-bar-hover-placeholder { | |
| 30 | + z-index: 101; | |
| 31 | + margin: auto calc(0px - var(--page-padding)); | |
| 32 | +} | |
| 33 | +#mdbook-menu-bar { | |
| 34 | + position: relative; | |
| 35 | + display: flex; | |
| 36 | + flex-wrap: wrap; | |
| 37 | + background-color: var(--bg); | |
| 38 | + border-block-end-color: var(--bg); | |
| 39 | + border-block-end-width: 1px; | |
| 40 | + border-block-end-style: solid; | |
| 41 | +} | |
| 42 | +#mdbook-menu-bar.sticky, | |
| 43 | +#mdbook-menu-bar-hover-placeholder:hover + #mdbook-menu-bar, | |
| 44 | +#mdbook-menu-bar:hover, | |
| 45 | +html.sidebar-visible #mdbook-menu-bar { | |
| 46 | + position: -webkit-sticky; | |
| 47 | + position: sticky; | |
| 48 | + top: 0 !important; | |
| 49 | +} | |
| 50 | +#mdbook-menu-bar-hover-placeholder { | |
| 51 | + position: sticky; | |
| 52 | + position: -webkit-sticky; | |
| 53 | + top: 0; | |
| 54 | + height: var(--menu-bar-height); | |
| 55 | +} | |
| 56 | +#mdbook-menu-bar.bordered { | |
| 57 | + border-block-end-color: var(--table-border-color); | |
| 58 | +} | |
| 59 | +#mdbook-menu-bar .fa-svg, #mdbook-menu-bar .icon-button { | |
| 60 | + position: relative; | |
| 61 | + padding: 0 8px; | |
| 62 | + z-index: 10; | |
| 63 | + line-height: var(--menu-bar-height); | |
| 64 | + cursor: pointer; | |
| 65 | + transition: color 0.5s; | |
| 66 | +} | |
| 67 | +@media only screen and (max-width: 420px) { | |
| 68 | + #mdbook-menu-bar .fa-svg, #mdbook-menu-bar .icon-button { | |
| 69 | + padding: 0 5px; | |
| 70 | + } | |
| 71 | +} | |
| 72 | + | |
| 73 | +.icon-button { | |
| 74 | + border: none; | |
| 75 | + background: none; | |
| 76 | + padding: 0; | |
| 77 | + color: inherit; | |
| 78 | +} | |
| 79 | +.icon-button .fa-svg { | |
| 80 | + margin: 0; | |
| 81 | +} | |
| 82 | + | |
| 83 | +.right-buttons { | |
| 84 | + margin: 0 15px; | |
| 85 | +} | |
| 86 | +.right-buttons a { | |
| 87 | + text-decoration: none; | |
| 88 | +} | |
| 89 | + | |
| 90 | +.left-buttons { | |
| 91 | + display: flex; | |
| 92 | + margin: 0 5px; | |
| 93 | +} | |
| 94 | +html:not(.js) .left-buttons button { | |
| 95 | + display: none; | |
| 96 | +} | |
| 97 | + | |
| 98 | +.menu-title { | |
| 99 | + display: inline-block; | |
| 100 | + font-weight: 200; | |
| 101 | + font-size: 2.4rem; | |
| 102 | + line-height: var(--menu-bar-height); | |
| 103 | + text-align: center; | |
| 104 | + margin: 0; | |
| 105 | + flex: 1; | |
| 106 | + white-space: nowrap; | |
| 107 | + overflow: hidden; | |
| 108 | + text-overflow: ellipsis; | |
| 109 | +} | |
| 110 | +.menu-title { | |
| 111 | + cursor: pointer; | |
| 112 | +} | |
| 113 | + | |
| 114 | +.menu-bar, | |
| 115 | +.menu-bar:visited, | |
| 116 | +.nav-chapters, | |
| 117 | +.nav-chapters:visited, | |
| 118 | +.mobile-nav-chapters, | |
| 119 | +.mobile-nav-chapters:visited, | |
| 120 | +.menu-bar .icon-button, | |
| 121 | +.menu-bar a .fa-svg { | |
| 122 | + color: var(--icons); | |
| 123 | +} | |
| 124 | + | |
| 125 | +.menu-bar .fa-svg:hover, | |
| 126 | +.menu-bar .icon-button:hover, | |
| 127 | +.nav-chapters:hover, | |
| 128 | +.mobile-nav-chapters .fa-svg:hover { | |
| 129 | + color: var(--icons-hover); | |
| 130 | +} | |
| 131 | + | |
| 132 | +/* Nav Icons */ | |
| 133 | + | |
| 134 | +.nav-chapters { | |
| 135 | + font-size: 2.5em; | |
| 136 | + text-align: center; | |
| 137 | + text-decoration: none; | |
| 138 | + | |
| 139 | + position: fixed; | |
| 140 | + top: 0; | |
| 141 | + bottom: 0; | |
| 142 | + margin: 0; | |
| 143 | + max-width: 150px; | |
| 144 | + min-width: 90px; | |
| 145 | + | |
| 146 | + display: flex; | |
| 147 | + justify-content: center; | |
| 148 | + align-content: center; | |
| 149 | + flex-direction: column; | |
| 150 | + | |
| 151 | + transition: color 0.5s, background-color 0.5s; | |
| 152 | +} | |
| 153 | + | |
| 154 | +.nav-chapters:hover { | |
| 155 | + text-decoration: none; | |
| 156 | + background-color: var(--theme-hover); | |
| 157 | + transition: background-color 0.15s, color 0.15s; | |
| 158 | +} | |
| 159 | + | |
| 160 | +.nav-wrapper { | |
| 161 | + margin-block-start: 50px; | |
| 162 | + display: none; | |
| 163 | +} | |
| 164 | + | |
| 165 | +.mobile-nav-chapters { | |
| 166 | + font-size: 2.5em; | |
| 167 | + text-align: center; | |
| 168 | + text-decoration: none; | |
| 169 | + width: 90px; | |
| 170 | + border-radius: 5px; | |
| 171 | + background-color: var(--sidebar-bg); | |
| 172 | +} | |
| 173 | + | |
| 174 | +/* Only Firefox supports flow-relative values */ | |
| 175 | +.previous { float: left; } | |
| 176 | +[dir=rtl] .previous { float: right; } | |
| 177 | + | |
| 178 | +/* Only Firefox supports flow-relative values */ | |
| 179 | +.next { | |
| 180 | + float: right; | |
| 181 | + right: var(--page-padding); | |
| 182 | +} | |
| 183 | +[dir=rtl] .next { | |
| 184 | + float: left; | |
| 185 | + right: unset; | |
| 186 | + left: var(--page-padding); | |
| 187 | +} | |
| 188 | + | |
| 189 | +@media only screen and (max-width: 1080px) { | |
| 190 | + .nav-wide-wrapper { display: none; } | |
| 191 | + .nav-wrapper { display: block; } | |
| 192 | +} | |
| 193 | + | |
| 194 | +/* sidebar-visible */ | |
| 195 | +@media only screen and (max-width: 1380px) { | |
| 196 | + #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wide-wrapper { display: none; } | |
| 197 | + #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wrapper { display: block; } | |
| 198 | +} | |
| 199 | + | |
| 200 | +/* Inline code */ | |
| 201 | + | |
| 202 | +:not(pre) > .hljs { | |
| 203 | + display: inline; | |
| 204 | + padding: 0.1em 0.3em; | |
| 205 | + border-radius: 3px; | |
| 206 | +} | |
| 207 | + | |
| 208 | +:not(pre):not(a) > .hljs { | |
| 209 | + color: var(--inline-code-color); | |
| 210 | + overflow-x: initial; | |
| 211 | +} | |
| 212 | + | |
| 213 | +a:hover > .hljs { | |
| 214 | + text-decoration: underline; | |
| 215 | +} | |
| 216 | + | |
| 217 | +pre { | |
| 218 | + position: relative; | |
| 219 | +} | |
| 220 | +pre > .buttons { | |
| 221 | + position: absolute; | |
| 222 | + z-index: 100; | |
| 223 | + right: 0px; | |
| 224 | + top: 2px; | |
| 225 | + margin: 0px; | |
| 226 | + padding: 2px 0px; | |
| 227 | + | |
| 228 | + color: var(--sidebar-fg); | |
| 229 | + cursor: pointer; | |
| 230 | + visibility: hidden; | |
| 231 | + opacity: 0; | |
| 232 | + transition: visibility 0.1s linear, opacity 0.1s linear; | |
| 233 | +} | |
| 234 | +pre:hover > .buttons { | |
| 235 | + visibility: visible; | |
| 236 | + opacity: 1 | |
| 237 | +} | |
| 238 | +pre > .buttons :hover { | |
| 239 | + color: var(--sidebar-active); | |
| 240 | + border-color: var(--icons-hover); | |
| 241 | + background-color: var(--theme-hover); | |
| 242 | +} | |
| 243 | +pre > .buttons button { | |
| 244 | + cursor: inherit; | |
| 245 | + margin: 0px 5px; | |
| 246 | + padding: 2px 3px 0px 4px; | |
| 247 | + font-size: 23px; | |
| 248 | + | |
| 249 | + border-style: solid; | |
| 250 | + border-width: 1px; | |
| 251 | + border-radius: 4px; | |
| 252 | + border-color: var(--icons); | |
| 253 | + background-color: var(--theme-popup-bg); | |
| 254 | + transition: 100ms; | |
| 255 | + transition-property: color,border-color,background-color; | |
| 256 | + color: var(--icons); | |
| 257 | +} | |
| 258 | + | |
| 259 | +pre > .buttons button.clip-button { | |
| 260 | + padding: 2px 4px 0px 6px; | |
| 261 | +} | |
| 262 | +pre > .buttons button.clip-button::before { | |
| 263 | + /* clipboard image from octicons (https://github.com/primer/octicons/tree/v2.0.0) MIT license | |
| 264 | + */ | |
| 265 | + content: url('data:image/svg+xml,<svg width="21" height="20" viewBox="0 0 24 25" \ | |
| 266 | +xmlns="http://www.w3.org/2000/svg" aria-label="Copy to clipboard">\ | |
| 267 | +<path d="M18 20h2v3c0 1-1 2-2 2H2c-.998 0-2-1-2-2V5c0-.911.755-1.667 1.667-1.667h5A3.323 3.323 0 \ | |
| 268 | +0110 0a3.323 3.323 0 013.333 3.333h5C19.245 3.333 20 4.09 20 5v8.333h-2V9H2v14h16v-3zM3 \ | |
| 269 | +7h14c0-.911-.793-1.667-1.75-1.667H13.5c-.957 0-1.75-.755-1.75-1.666C11.75 2.755 10.957 2 10 \ | |
| 270 | +2s-1.75.755-1.75 1.667c0 .911-.793 1.666-1.75 1.666H4.75C3.793 5.333 3 6.09 3 7z"/>\ | |
| 271 | +<path d="M4 19h6v2H4zM12 11H4v2h8zM4 17h4v-2H4zM15 15v-3l-4.5 4.5L15 21v-3l8.027-.032L23 15z"/>\ | |
| 272 | +</svg>'); | |
| 273 | + filter: var(--copy-button-filter); | |
| 274 | +} | |
| 275 | +pre > .buttons button.clip-button:hover::before { | |
| 276 | + filter: var(--copy-button-filter-hover); | |
| 277 | +} | |
| 278 | + | |
| 279 | +@media (pointer: coarse) { | |
| 280 | + pre > .buttons button { | |
| 281 | + /* On mobile, make it easier to tap buttons. */ | |
| 282 | + padding: 0.3rem 1rem; | |
| 283 | + } | |
| 284 | + | |
| 285 | + .sidebar-resize-indicator { | |
| 286 | + /* Hide resize indicator on devices with limited accuracy */ | |
| 287 | + display: none; | |
| 288 | + } | |
| 289 | +} | |
| 290 | +pre > code { | |
| 291 | + display: block; | |
| 292 | + padding: 1rem; | |
| 293 | +} | |
| 294 | + | |
| 295 | +/* FIXME: ACE editors overlap their buttons because ACE does absolute | |
| 296 | + positioning within the code block which breaks padding. The only solution I | |
| 297 | + can think of is to move the padding to the outer pre tag (or insert a div | |
| 298 | + wrapper), but that would require fixing a whole bunch of CSS rules. | |
| 299 | +*/ | |
| 300 | +.hljs.ace_editor { | |
| 301 | + padding: 0rem 0rem; | |
| 302 | +} | |
| 303 | + | |
| 304 | +pre > .result { | |
| 305 | + margin-block-start: 10px; | |
| 306 | +} | |
| 307 | + | |
| 308 | +/* Search */ | |
| 309 | + | |
| 310 | +#mdbook-searchresults a { | |
| 311 | + text-decoration: none; | |
| 312 | +} | |
| 313 | + | |
| 314 | +mark { | |
| 315 | + border-radius: 2px; | |
| 316 | + padding-block-start: 0; | |
| 317 | + padding-block-end: 1px; | |
| 318 | + padding-inline-start: 3px; | |
| 319 | + padding-inline-end: 3px; | |
| 320 | + margin-block-start: 0; | |
| 321 | + margin-block-end: -1px; | |
| 322 | + margin-inline-start: -3px; | |
| 323 | + margin-inline-end: -3px; | |
| 324 | + background-color: var(--search-mark-bg); | |
| 325 | + transition: background-color 300ms linear; | |
| 326 | + cursor: pointer; | |
| 327 | +} | |
| 328 | + | |
| 329 | +mark.fade-out { | |
| 330 | + background-color: rgba(0,0,0,0) !important; | |
| 331 | + cursor: auto; | |
| 332 | +} | |
| 333 | + | |
| 334 | +.searchbar-outer { | |
| 335 | + margin-inline-start: auto; | |
| 336 | + margin-inline-end: auto; | |
| 337 | + max-width: var(--content-max-width); | |
| 338 | +} | |
| 339 | + | |
| 340 | +#mdbook-searchbar-outer.searching #mdbook-searchbar { | |
| 341 | + padding-right: 30px; | |
| 342 | +} | |
| 343 | +#mdbook-searchbar-outer .spinner-wrapper { | |
| 344 | + display: none; | |
| 345 | +} | |
| 346 | +#mdbook-searchbar-outer.searching .spinner-wrapper { | |
| 347 | + display: block; | |
| 348 | +} | |
| 349 | + | |
| 350 | +.search-wrapper { | |
| 351 | + position: relative; | |
| 352 | +} | |
| 353 | + | |
| 354 | +.spinner-wrapper { | |
| 355 | + --spinner-margin: 2px; | |
| 356 | + position: absolute; | |
| 357 | + margin-block-start: calc(var(--searchbar-margin-block-start) + var(--spinner-margin)); | |
| 358 | + right: var(--spinner-margin); | |
| 359 | + top: 0; | |
| 360 | + bottom: var(--spinner-margin); | |
| 361 | + padding: 6px; | |
| 362 | + background-color: var(--bg); | |
| 363 | +} | |
| 364 | + | |
| 365 | +#fa-spin { | |
| 366 | + animation: rotating 2s linear infinite; | |
| 367 | + display: inline-block; | |
| 368 | +} | |
| 369 | + | |
| 370 | +@keyframes rotating { | |
| 371 | + from { | |
| 372 | + transform: rotate(0deg); | |
| 373 | + } | |
| 374 | + to { | |
| 375 | + transform: rotate(360deg); | |
| 376 | + } | |
| 377 | +} | |
| 378 | + | |
| 379 | +#mdbook-searchbar { | |
| 380 | + width: 100%; | |
| 381 | + margin-block-start: var(--searchbar-margin-block-start); | |
| 382 | + margin-block-end: 0; | |
| 383 | + margin-inline-start: auto; | |
| 384 | + margin-inline-end: auto; | |
| 385 | + padding: 10px 16px; | |
| 386 | + transition: box-shadow 300ms ease-in-out; | |
| 387 | + border: 1px solid var(--searchbar-border-color); | |
| 388 | + border-radius: 3px; | |
| 389 | + background-color: var(--searchbar-bg); | |
| 390 | + color: var(--searchbar-fg); | |
| 391 | +} | |
| 392 | +#mdbook-searchbar:focus, | |
| 393 | +#mdbook-searchbar.active { | |
| 394 | + box-shadow: 0 0 3px var(--searchbar-shadow-color); | |
| 395 | +} | |
| 396 | + | |
| 397 | +.searchresults-header { | |
| 398 | + font-weight: bold; | |
| 399 | + font-size: 1em; | |
| 400 | + padding-block-start: 18px; | |
| 401 | + padding-block-end: 0; | |
| 402 | + padding-inline-start: 5px; | |
| 403 | + padding-inline-end: 0; | |
| 404 | + color: var(--searchresults-header-fg); | |
| 405 | +} | |
| 406 | + | |
| 407 | +.searchresults-outer { | |
| 408 | + margin-inline-start: auto; | |
| 409 | + margin-inline-end: auto; | |
| 410 | + max-width: var(--content-max-width); | |
| 411 | + border-block-end: 1px dashed var(--searchresults-border-color); | |
| 412 | +} | |
| 413 | + | |
| 414 | +ul#mdbook-searchresults { | |
| 415 | + list-style: none; | |
| 416 | + padding-inline-start: 20px; | |
| 417 | +} | |
| 418 | +ul#mdbook-searchresults li { | |
| 419 | + margin: 10px 0px; | |
| 420 | + padding: 2px; | |
| 421 | + border-radius: 2px; | |
| 422 | +} | |
| 423 | +ul#mdbook-searchresults li.focus { | |
| 424 | + background-color: var(--searchresults-li-bg); | |
| 425 | +} | |
| 426 | +ul#mdbook-searchresults span.teaser { | |
| 427 | + display: block; | |
| 428 | + clear: both; | |
| 429 | + margin-block-start: 5px; | |
| 430 | + margin-block-end: 0; | |
| 431 | + margin-inline-start: 20px; | |
| 432 | + margin-inline-end: 0; | |
| 433 | + font-size: 0.8em; | |
| 434 | +} | |
| 435 | +ul#mdbook-searchresults span.teaser em { | |
| 436 | + font-weight: bold; | |
| 437 | + font-style: normal; | |
| 438 | +} | |
| 439 | + | |
| 440 | +/* Sidebar */ | |
| 441 | + | |
| 442 | +.sidebar { | |
| 443 | + position: fixed; | |
| 444 | + left: 0; | |
| 445 | + top: 0; | |
| 446 | + bottom: 0; | |
| 447 | + width: var(--sidebar-width); | |
| 448 | + font-size: 0.875em; | |
| 449 | + box-sizing: border-box; | |
| 450 | + -webkit-overflow-scrolling: touch; | |
| 451 | + overscroll-behavior-y: contain; | |
| 452 | + background-color: var(--sidebar-bg); | |
| 453 | + color: var(--sidebar-fg); | |
| 454 | +} | |
| 455 | +.sidebar-iframe-inner { | |
| 456 | + --padding: 10px; | |
| 457 | + | |
| 458 | + background-color: var(--sidebar-bg); | |
| 459 | + padding: var(--padding); | |
| 460 | + margin: 0; | |
| 461 | + font-size: 1.4rem; | |
| 462 | + color: var(--sidebar-fg); | |
| 463 | + min-height: calc(100vh - var(--padding) * 2); | |
| 464 | +} | |
| 465 | +.sidebar-iframe-outer { | |
| 466 | + border: none; | |
| 467 | + height: 100%; | |
| 468 | + position: absolute; | |
| 469 | + top: 0; | |
| 470 | + bottom: 0; | |
| 471 | + left: 0; | |
| 472 | + right: 0; | |
| 473 | +} | |
| 474 | +[dir=rtl] .sidebar { left: unset; right: 0; } | |
| 475 | +.sidebar-resizing { | |
| 476 | + -moz-user-select: none; | |
| 477 | + -webkit-user-select: none; | |
| 478 | + -ms-user-select: none; | |
| 479 | + user-select: none; | |
| 480 | +} | |
| 481 | +html:not(.sidebar-resizing) .sidebar { | |
| 482 | + transition: transform 0.3s; /* Animation: slide away */ | |
| 483 | +} | |
| 484 | +.sidebar code { | |
| 485 | + line-height: 2em; | |
| 486 | +} | |
| 487 | +.sidebar .sidebar-scrollbox { | |
| 488 | + overflow-y: auto; | |
| 489 | + position: absolute; | |
| 490 | + top: 0; | |
| 491 | + bottom: 0; | |
| 492 | + left: 0; | |
| 493 | + right: 0; | |
| 494 | + padding: 10px 10px; | |
| 495 | +} | |
| 496 | +.sidebar .sidebar-resize-handle { | |
| 497 | + position: absolute; | |
| 498 | + cursor: col-resize; | |
| 499 | + width: 0; | |
| 500 | + right: calc(var(--sidebar-resize-indicator-width) * -1); | |
| 501 | + top: 0; | |
| 502 | + bottom: 0; | |
| 503 | + display: flex; | |
| 504 | + align-items: center; | |
| 505 | +} | |
| 506 | + | |
| 507 | +.sidebar-resize-handle .sidebar-resize-indicator { | |
| 508 | + width: 100%; | |
| 509 | + height: 16px; | |
| 510 | + color: var(--icons); | |
| 511 | + margin-inline-start: var(--sidebar-resize-indicator-space); | |
| 512 | + display: flex; | |
| 513 | + align-items: center; | |
| 514 | + justify-content: flex-start; | |
| 515 | +} | |
| 516 | +.sidebar-resize-handle .sidebar-resize-indicator::before { | |
| 517 | + content: ""; | |
| 518 | + width: 2px; | |
| 519 | + height: 12px; | |
| 520 | + border-left: dotted 2px currentColor; | |
| 521 | +} | |
| 522 | +.sidebar-resize-handle .sidebar-resize-indicator::after { | |
| 523 | + content: ""; | |
| 524 | + width: 2px; | |
| 525 | + height: 16px; | |
| 526 | + border-left: dotted 2px currentColor; | |
| 527 | +} | |
| 528 | + | |
| 529 | +[dir=rtl] .sidebar .sidebar-resize-handle { | |
| 530 | + left: calc(var(--sidebar-resize-indicator-width) * -1); | |
| 531 | + right: unset; | |
| 532 | +} | |
| 533 | +.js .sidebar .sidebar-resize-handle { | |
| 534 | + cursor: col-resize; | |
| 535 | + width: calc(var(--sidebar-resize-indicator-width) - var(--sidebar-resize-indicator-space)); | |
| 536 | +} | |
| 537 | + | |
| 538 | +html:not(.js) .sidebar-resize-handle { | |
| 539 | + display: none; | |
| 540 | +} | |
| 541 | + | |
| 542 | +/* sidebar-hidden */ | |
| 543 | +#mdbook-sidebar-toggle-anchor:not(:checked) ~ .sidebar { | |
| 544 | + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width))); | |
| 545 | +} | |
| 546 | +[dir=rtl] #mdbook-sidebar-toggle-anchor:not(:checked) ~ .sidebar { | |
| 547 | + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width))); | |
| 548 | +} | |
| 549 | +.sidebar::-webkit-scrollbar { | |
| 550 | + background: var(--sidebar-bg); | |
| 551 | +} | |
| 552 | +.sidebar::-webkit-scrollbar-thumb { | |
| 553 | + background: var(--scrollbar); | |
| 554 | +} | |
| 555 | + | |
| 556 | +/* sidebar-visible */ | |
| 557 | +#mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper { | |
| 558 | + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width))); | |
| 559 | +} | |
| 560 | +[dir=rtl] #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper { | |
| 561 | + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width))); | |
| 562 | +} | |
| 563 | +@media only screen and (min-width: 620px) { | |
| 564 | + #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper { | |
| 565 | + transform: none; | |
| 566 | + margin-inline-start: calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)); | |
| 567 | + } | |
| 568 | + [dir=rtl] #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper { | |
| 569 | + transform: none; | |
| 570 | + } | |
| 571 | +} | |
| 572 | + | |
| 573 | +.chapter { | |
| 574 | + list-style: none outside none; | |
| 575 | + padding-inline-start: 0; | |
| 576 | + line-height: 2.2em; | |
| 577 | +} | |
| 578 | + | |
| 579 | +.chapter li { | |
| 580 | + color: var(--sidebar-non-existant); | |
| 581 | +} | |
| 582 | + | |
| 583 | +/* This is a span wrapping the chapter link and the fold chevron. */ | |
| 584 | +.chapter-link-wrapper { | |
| 585 | + /* Used to position the chevron to the right, allowing the text to wrap before it. */ | |
| 586 | + display: flex; | |
| 587 | +} | |
| 588 | + | |
| 589 | +.chapter li a { | |
| 590 | + /* Remove underlines. */ | |
| 591 | + text-decoration: none; | |
| 592 | + color: var(--sidebar-fg); | |
| 593 | +} | |
| 594 | + | |
| 595 | +.chapter li a:hover { | |
| 596 | + color: var(--sidebar-active); | |
| 597 | +} | |
| 598 | + | |
| 599 | +.chapter li a.active { | |
| 600 | + color: var(--sidebar-active); | |
| 601 | +} | |
| 602 | + | |
| 603 | +/* This is the toggle chevron. */ | |
| 604 | +.chapter-fold-toggle { | |
| 605 | + cursor: pointer; | |
| 606 | + /* Positions the chevron to the side. */ | |
| 607 | + margin-inline-start: auto; | |
| 608 | + padding: 0 10px; | |
| 609 | + user-select: none; | |
| 610 | + opacity: 0.68; | |
| 611 | +} | |
| 612 | + | |
| 613 | +.chapter-fold-toggle div { | |
| 614 | + transition: transform 0.5s; | |
| 615 | +} | |
| 616 | + | |
| 617 | +/* collapse the section */ | |
| 618 | +.chapter li:not(.expanded) > ol { | |
| 619 | + display: none; | |
| 620 | +} | |
| 621 | + | |
| 622 | +.chapter li.chapter-item { | |
| 623 | + line-height: 1.5em; | |
| 624 | + margin-block-start: 0.6em; | |
| 625 | +} | |
| 626 | + | |
| 627 | +/* When expanded, rotate the chevron to point down. */ | |
| 628 | +.chapter li.expanded > span > .chapter-fold-toggle div { | |
| 629 | + transform: rotate(90deg); | |
| 630 | +} | |
| 631 | + | |
| 632 | +.chapter a.current-header { | |
| 633 | + color: var(--sidebar-active); | |
| 634 | +} | |
| 635 | + | |
| 636 | +.on-this-page { | |
| 637 | + margin-left: 22px; | |
| 638 | + border-inline-start: 4px solid var(--sidebar-header-border-color); | |
| 639 | + padding-left: 8px; | |
| 640 | +} | |
| 641 | + | |
| 642 | +.on-this-page > ol { | |
| 643 | + padding-left: 0; | |
| 644 | +} | |
| 645 | + | |
| 646 | +/* Horizontal line in chapter list. */ | |
| 647 | +.spacer { | |
| 648 | + width: 100%; | |
| 649 | + height: 3px; | |
| 650 | + margin: 5px 0px; | |
| 651 | +} | |
| 652 | +.chapter .spacer { | |
| 653 | + background-color: var(--sidebar-spacer); | |
| 654 | +} | |
| 655 | + | |
| 656 | +/* On touch devices, add more vertical spacing to make it easier to tap links. */ | |
| 657 | +@media (-moz-touch-enabled: 1), (pointer: coarse) { | |
| 658 | + .chapter li a { padding: 5px 0; } | |
| 659 | + .spacer { margin: 10px 0; } | |
| 660 | +} | |
| 661 | + | |
| 662 | +.section { | |
| 663 | + list-style: none outside none; | |
| 664 | + padding-inline-start: 20px; | |
| 665 | + line-height: 1.9em; | |
| 666 | +} | |
| 667 | + | |
| 668 | +/* Theme Menu Popup */ | |
| 669 | + | |
| 670 | +.theme-popup { | |
| 671 | + position: absolute; | |
| 672 | + left: 10px; | |
| 673 | + top: var(--menu-bar-height); | |
| 674 | + z-index: 1000; | |
| 675 | + border-radius: 4px; | |
| 676 | + font-size: 0.7em; | |
| 677 | + color: var(--fg); | |
| 678 | + background: var(--theme-popup-bg); | |
| 679 | + border: 1px solid var(--theme-popup-border); | |
| 680 | + margin: 0; | |
| 681 | + padding: 0; | |
| 682 | + list-style: none; | |
| 683 | + display: none; | |
| 684 | + /* Don't let the children's background extend past the rounded corners. */ | |
| 685 | + overflow: hidden; | |
| 686 | +} | |
| 687 | +[dir=rtl] .theme-popup { left: unset; right: 10px; } | |
| 688 | +.theme-popup .default { | |
| 689 | + color: var(--icons); | |
| 690 | +} | |
| 691 | +.theme-popup .theme { | |
| 692 | + width: 100%; | |
| 693 | + border: 0; | |
| 694 | + margin: 0; | |
| 695 | + padding: 2px 20px; | |
| 696 | + line-height: 25px; | |
| 697 | + white-space: nowrap; | |
| 698 | + text-align: start; | |
| 699 | + cursor: pointer; | |
| 700 | + color: inherit; | |
| 701 | + background: inherit; | |
| 702 | + font-size: inherit; | |
| 703 | +} | |
| 704 | +.theme-popup .theme:hover { | |
| 705 | + background-color: var(--theme-hover); | |
| 706 | +} | |
| 707 | + | |
| 708 | +.theme-selected::before { | |
| 709 | + display: inline-block; | |
| 710 | + content: "✓"; | |
| 711 | + margin-inline-start: -14px; | |
| 712 | + width: 14px; | |
| 713 | +} | |
| 714 | + | |
| 715 | +/* The container for the help popup that covers the whole window. */ | |
| 716 | +#mdbook-help-container { | |
| 717 | + /* Position and size for the whole window. */ | |
| 718 | + position: fixed; | |
| 719 | + top: 0; | |
| 720 | + left: 0; | |
| 721 | + right: 0; | |
| 722 | + bottom: 0; | |
| 723 | + /* This uses flex layout (which is set in book.js), and centers the popup | |
| 724 | + in the window.*/ | |
| 725 | + display: none; | |
| 726 | + align-items: center; | |
| 727 | + justify-content: center; | |
| 728 | + z-index: 1000; | |
| 729 | + /* Dim out the book while the popup is visible. */ | |
| 730 | + background: var(--overlay-bg); | |
| 731 | +} | |
| 732 | + | |
| 733 | +/* The popup help box. */ | |
| 734 | +#mdbook-help-popup { | |
| 735 | + box-shadow: 0 4px 24px rgba(0,0,0,0.15); | |
| 736 | + min-width: 300px; | |
| 737 | + max-width: 500px; | |
| 738 | + width: 100%; | |
| 739 | + box-sizing: border-box; | |
| 740 | + display: flex; | |
| 741 | + flex-direction: column; | |
| 742 | + align-items: center; | |
| 743 | + background-color: var(--bg); | |
| 744 | + color: var(--fg); | |
| 745 | + border-width: 1px; | |
| 746 | + border-color: var(--theme-popup-border); | |
| 747 | + border-style: solid; | |
| 748 | + border-radius: 8px; | |
| 749 | + padding: 10px; | |
| 750 | +} | |
| 751 | + | |
| 752 | +.mdbook-help-title { | |
| 753 | + text-align: center; | |
| 754 | + /* mdbook's margin for h2 is way too large. */ | |
| 755 | + margin: 10px; | |
| 756 | +} |
A
book/css/general-2459343d.css
+408
-0
@@ -0,0 +1,408 @@
| 1 | +/* Base styles and content styles */ | |
| 2 | + | |
| 3 | +:root { | |
| 4 | + /* Browser default font-size is 16px, this way 1 rem = 10px */ | |
| 5 | + font-size: 62.5%; | |
| 6 | + color-scheme: var(--color-scheme); | |
| 7 | +} | |
| 8 | + | |
| 9 | +html { | |
| 10 | + font-family: "Open Sans", sans-serif; | |
| 11 | + color: var(--fg); | |
| 12 | + background-color: var(--bg); | |
| 13 | + text-size-adjust: none; | |
| 14 | + -webkit-text-size-adjust: none; | |
| 15 | +} | |
| 16 | + | |
| 17 | +body { | |
| 18 | + margin: 0; | |
| 19 | + font-size: 1.6rem; | |
| 20 | + overflow-x: hidden; | |
| 21 | +} | |
| 22 | + | |
| 23 | +code { | |
| 24 | + font-family: var(--mono-font) !important; | |
| 25 | + font-size: var(--code-font-size); | |
| 26 | + direction: ltr !important; | |
| 27 | +} | |
| 28 | + | |
| 29 | +/* make long words/inline code not x overflow */ | |
| 30 | +main { | |
| 31 | + overflow-wrap: break-word; | |
| 32 | +} | |
| 33 | + | |
| 34 | +/* make wide tables scroll if they overflow */ | |
| 35 | +.table-wrapper { | |
| 36 | + overflow-x: auto; | |
| 37 | +} | |
| 38 | + | |
| 39 | +/* Don't change font size in headers. */ | |
| 40 | +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { | |
| 41 | + font-size: unset; | |
| 42 | +} | |
| 43 | + | |
| 44 | +.left { float: left; } | |
| 45 | +.right { float: right; } | |
| 46 | +.boring { opacity: 0.6; } | |
| 47 | +.hide-boring .boring { display: none; } | |
| 48 | +.hidden { display: none !important; } | |
| 49 | + | |
| 50 | +h2, h3 { margin-block-start: 2.5em; } | |
| 51 | +h4, h5 { margin-block-start: 2em; } | |
| 52 | + | |
| 53 | +.header + .header h3, | |
| 54 | +.header + .header h4, | |
| 55 | +.header + .header h5 { | |
| 56 | + margin-block-start: 1em; | |
| 57 | +} | |
| 58 | + | |
| 59 | +h1:target::before, | |
| 60 | +h2:target::before, | |
| 61 | +h3:target::before, | |
| 62 | +h4:target::before, | |
| 63 | +h5:target::before, | |
| 64 | +h6:target::before, | |
| 65 | +dt:target::before { | |
| 66 | + display: inline-block; | |
| 67 | + content: "»"; | |
| 68 | + margin-inline-start: -30px; | |
| 69 | + width: 30px; | |
| 70 | +} | |
| 71 | + | |
| 72 | +/* This is broken on Safari as of version 14, but is fixed | |
| 73 | + in Safari Technology Preview 117 which I think will be Safari 14.2. | |
| 74 | + https://bugs.webkit.org/show_bug.cgi?id=218076 | |
| 75 | +*/ | |
| 76 | +:target { | |
| 77 | + /* Safari does not support logical properties */ | |
| 78 | + scroll-margin-top: calc(var(--menu-bar-height) + 0.5em); | |
| 79 | +} | |
| 80 | + | |
| 81 | +.page { | |
| 82 | + outline: 0; | |
| 83 | + padding: 0 var(--page-padding); | |
| 84 | + margin-block-start: calc(0px - var(--menu-bar-height)); /* Compensate for the #mdbook-menu-bar-hover-placeholder */ | |
| 85 | +} | |
| 86 | +.page-wrapper { | |
| 87 | + box-sizing: border-box; | |
| 88 | + background-color: var(--bg); | |
| 89 | +} | |
| 90 | +html:not(.js) .page-wrapper, | |
| 91 | +.js:not(.sidebar-resizing) .page-wrapper { | |
| 92 | + transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */ | |
| 93 | +} | |
| 94 | +[dir=rtl]:not(.js) .page-wrapper, | |
| 95 | +[dir=rtl].js:not(.sidebar-resizing) .page-wrapper { | |
| 96 | + transition: margin-right 0.3s ease, transform 0.3s ease; /* Animation: slide away */ | |
| 97 | +} | |
| 98 | + | |
| 99 | +.content { | |
| 100 | + overflow-y: auto; | |
| 101 | + padding: 0 5px 50px 5px; | |
| 102 | +} | |
| 103 | +.content main { | |
| 104 | + margin-inline-start: auto; | |
| 105 | + margin-inline-end: auto; | |
| 106 | + max-width: var(--content-max-width); | |
| 107 | +} | |
| 108 | +.content p { line-height: 1.45em; } | |
| 109 | +.content ol { line-height: 1.45em; } | |
| 110 | +.content ul { line-height: 1.45em; } | |
| 111 | +.content a { text-decoration: none; } | |
| 112 | +.content a:hover { text-decoration: underline; } | |
| 113 | +.content img, .content video { max-width: 100%; } | |
| 114 | +.content .header:link, | |
| 115 | +.content .header:visited { | |
| 116 | + color: var(--fg); | |
| 117 | +} | |
| 118 | +.content .header:link, | |
| 119 | +.content .header:visited:hover { | |
| 120 | + text-decoration: none; | |
| 121 | +} | |
| 122 | + | |
| 123 | +table { | |
| 124 | + margin: 0 auto; | |
| 125 | + border-collapse: collapse; | |
| 126 | +} | |
| 127 | +table td { | |
| 128 | + padding: 3px 20px; | |
| 129 | + border: 1px var(--table-border-color) solid; | |
| 130 | +} | |
| 131 | +table thead { | |
| 132 | + background: var(--table-header-bg); | |
| 133 | +} | |
| 134 | +table thead td { | |
| 135 | + font-weight: 700; | |
| 136 | + border: none; | |
| 137 | +} | |
| 138 | +table thead th { | |
| 139 | + padding: 3px 20px; | |
| 140 | +} | |
| 141 | +table thead tr { | |
| 142 | + border: 1px var(--table-header-bg) solid; | |
| 143 | +} | |
| 144 | +/* Alternate background colors for rows */ | |
| 145 | +table tbody tr:nth-child(2n) { | |
| 146 | + background: var(--table-alternate-bg); | |
| 147 | +} | |
| 148 | + | |
| 149 | + | |
| 150 | +blockquote { | |
| 151 | + margin: 20px 0; | |
| 152 | + padding: 0 20px; | |
| 153 | + color: var(--fg); | |
| 154 | + background-color: var(--quote-bg); | |
| 155 | + border-block-start: .1em solid var(--quote-border); | |
| 156 | + border-block-end: .1em solid var(--quote-border); | |
| 157 | +} | |
| 158 | + | |
| 159 | +/* TODO: Remove .warning in a future version of mdbook, it is replaced by | |
| 160 | +blockquote tags. */ | |
| 161 | +.warning { | |
| 162 | + margin: 20px; | |
| 163 | + padding: 0 20px; | |
| 164 | + border-inline-start: 2px solid var(--warning-border); | |
| 165 | +} | |
| 166 | + | |
| 167 | +.warning:before { | |
| 168 | + position: absolute; | |
| 169 | + width: 3rem; | |
| 170 | + height: 3rem; | |
| 171 | + margin-inline-start: calc(-1.5rem - 21px); | |
| 172 | + content: "ⓘ"; | |
| 173 | + text-align: center; | |
| 174 | + background-color: var(--bg); | |
| 175 | + color: var(--warning-border); | |
| 176 | + font-weight: bold; | |
| 177 | + font-size: 2rem; | |
| 178 | +} | |
| 179 | + | |
| 180 | +blockquote .warning:before { | |
| 181 | + background-color: var(--quote-bg); | |
| 182 | +} | |
| 183 | + | |
| 184 | +kbd { | |
| 185 | + background-color: var(--table-border-color); | |
| 186 | + border-radius: 4px; | |
| 187 | + border: solid 1px var(--theme-popup-border); | |
| 188 | + box-shadow: inset 0 -1px 0 var(--theme-hover); | |
| 189 | + display: inline-block; | |
| 190 | + font-size: var(--code-font-size); | |
| 191 | + font-family: var(--mono-font); | |
| 192 | + line-height: 10px; | |
| 193 | + padding: 4px 5px; | |
| 194 | + vertical-align: middle; | |
| 195 | +} | |
| 196 | + | |
| 197 | +sup { | |
| 198 | + /* Set the line-height for superscript and footnote references so that there | |
| 199 | + isn't an awkward space appearing above lines that contain the footnote. | |
| 200 | + | |
| 201 | + See https://github.com/rust-lang/mdBook/pull/2443#discussion_r1813773583 | |
| 202 | + for an explanation. | |
| 203 | + */ | |
| 204 | + line-height: 0; | |
| 205 | +} | |
| 206 | + | |
| 207 | +.footnote-definition { | |
| 208 | + font-size: 0.9em; | |
| 209 | +} | |
| 210 | +/* The default spacing for a list is a little too large. */ | |
| 211 | +.footnote-definition ul, | |
| 212 | +.footnote-definition ol { | |
| 213 | + padding-left: 20px; | |
| 214 | +} | |
| 215 | +.footnote-definition > li { | |
| 216 | + /* Required to position the ::before target */ | |
| 217 | + position: relative; | |
| 218 | +} | |
| 219 | +.footnote-definition > li:target { | |
| 220 | + scroll-margin-top: 50vh; | |
| 221 | +} | |
| 222 | +.footnote-reference:target { | |
| 223 | + scroll-margin-top: 50vh; | |
| 224 | +} | |
| 225 | +/* Draws a border around the footnote (including the marker) when it is selected. | |
| 226 | + TODO: If there are multiple linkbacks, highlight which one you just came | |
| 227 | + from so you know which one to click. | |
| 228 | +*/ | |
| 229 | +.footnote-definition > li:target::before { | |
| 230 | + border: 2px solid var(--footnote-highlight); | |
| 231 | + border-radius: 6px; | |
| 232 | + position: absolute; | |
| 233 | + top: -8px; | |
| 234 | + right: -8px; | |
| 235 | + bottom: -8px; | |
| 236 | + left: -32px; | |
| 237 | + pointer-events: none; | |
| 238 | + content: ""; | |
| 239 | +} | |
| 240 | +/* Pulses the footnote reference so you can quickly see where you left off reading. | |
| 241 | + This could use some improvement. | |
| 242 | +*/ | |
| 243 | +@media not (prefers-reduced-motion) { | |
| 244 | + .footnote-reference:target { | |
| 245 | + animation: fn-highlight 0.8s; | |
| 246 | + border-radius: 2px; | |
| 247 | + } | |
| 248 | + | |
| 249 | + @keyframes fn-highlight { | |
| 250 | + from { | |
| 251 | + background-color: var(--footnote-highlight); | |
| 252 | + } | |
| 253 | + } | |
| 254 | +} | |
| 255 | + | |
| 256 | +.tooltiptext { | |
| 257 | + position: absolute; | |
| 258 | + visibility: hidden; | |
| 259 | + color: #fff; | |
| 260 | + background-color: #333; | |
| 261 | + transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */ | |
| 262 | + left: -8px; /* Half of the width of the icon */ | |
| 263 | + top: -35px; | |
| 264 | + font-size: 0.8em; | |
| 265 | + text-align: center; | |
| 266 | + border-radius: 6px; | |
| 267 | + padding: 5px 8px; | |
| 268 | + margin: 5px; | |
| 269 | + z-index: 1000; | |
| 270 | +} | |
| 271 | +.tooltipped .tooltiptext { | |
| 272 | + visibility: visible; | |
| 273 | +} | |
| 274 | + | |
| 275 | +.chapter li.part-title { | |
| 276 | + color: var(--sidebar-fg); | |
| 277 | + margin: 5px 0px; | |
| 278 | + font-weight: bold; | |
| 279 | +} | |
| 280 | + | |
| 281 | +.result-no-output { | |
| 282 | + font-style: italic; | |
| 283 | +} | |
| 284 | + | |
| 285 | +.fa-svg svg { | |
| 286 | + width: 1em; | |
| 287 | + height: 1em; | |
| 288 | + fill: currentColor; | |
| 289 | + margin-bottom: -0.1em; | |
| 290 | +} | |
| 291 | + | |
| 292 | +dt { | |
| 293 | + font-weight: bold; | |
| 294 | + margin-top: 0.5em; | |
| 295 | + margin-bottom: 0.1em; | |
| 296 | +} | |
| 297 | + | |
| 298 | +/* This uses a CSS counter to add numbers to definitions, but only if there is | |
| 299 | + more than one definition. */ | |
| 300 | +dl, dt { | |
| 301 | + counter-reset: dd-counter; | |
| 302 | +} | |
| 303 | + | |
| 304 | +/* When there is more than one definition, increment the counter. The first | |
| 305 | +selector selects the first definition, and the second one selects definitions | |
| 306 | +2 and beyond.*/ | |
| 307 | +dd:has(+ dd), dd + dd { | |
| 308 | + counter-increment: dd-counter; | |
| 309 | + /* Use flex display to help with positioning the numbers when there is a p | |
| 310 | + tag inside the definition. */ | |
| 311 | + display: flex; | |
| 312 | + align-items: flex-start; | |
| 313 | +} | |
| 314 | + | |
| 315 | +/* Shows the counter for definitions. The first selector selects the first | |
| 316 | +definition, and the second one selections definitions 2 and beyond.*/ | |
| 317 | +dd:has(+ dd)::before, dd + dd::before { | |
| 318 | + content: counter(dd-counter) ". "; | |
| 319 | + font-weight: 600; | |
| 320 | + display: inline-block; | |
| 321 | + margin-right: 0.5em; | |
| 322 | +} | |
| 323 | + | |
| 324 | +dd > p { | |
| 325 | + /* For loose definitions that have a p tag inside, don't add a bunch of | |
| 326 | + space before the definition. */ | |
| 327 | + margin-top: 0; | |
| 328 | +} | |
| 329 | + | |
| 330 | +/* Remove some excess space from the bottom. */ | |
| 331 | +.blockquote-tag p:last-child { | |
| 332 | + margin-bottom: 2px; | |
| 333 | +} | |
| 334 | + | |
| 335 | +.blockquote-tag { | |
| 336 | + /* Add some padding to make the vertical bar a little taller than the text.*/ | |
| 337 | + padding: 2px 0px 2px 20px; | |
| 338 | + /* Add a solid color bar on the left side. */ | |
| 339 | + border-inline-start-style: solid; | |
| 340 | + border-inline-start-width: 4px; | |
| 341 | + /* Disable the background color from normal blockquotes . */ | |
| 342 | + background-color: inherit; | |
| 343 | + /* Disable border blocks from blockquotes. */ | |
| 344 | + border-block-start: none; | |
| 345 | + border-block-end: none; | |
| 346 | +} | |
| 347 | + | |
| 348 | +.blockquote-tag-title svg { | |
| 349 | + fill: currentColor; | |
| 350 | + /* Add space between the icon and the title. */ | |
| 351 | + margin-right: 8px; | |
| 352 | +} | |
| 353 | + | |
| 354 | +.blockquote-tag-note { | |
| 355 | + border-inline-start-color: var(--blockquote-note-color); | |
| 356 | +} | |
| 357 | + | |
| 358 | +.blockquote-tag-tip { | |
| 359 | + border-inline-start-color: var(--blockquote-tip-color); | |
| 360 | +} | |
| 361 | + | |
| 362 | +.blockquote-tag-important { | |
| 363 | + border-inline-start-color: var(--blockquote-important-color); | |
| 364 | +} | |
| 365 | + | |
| 366 | +.blockquote-tag-warning { | |
| 367 | + border-inline-start-color: var(--blockquote-warning-color); | |
| 368 | +} | |
| 369 | + | |
| 370 | +.blockquote-tag-caution { | |
| 371 | + border-inline-start-color: var(--blockquote-caution-color); | |
| 372 | +} | |
| 373 | + | |
| 374 | +.blockquote-tag-note .blockquote-tag-title { | |
| 375 | + color: var(--blockquote-note-color); | |
| 376 | +} | |
| 377 | + | |
| 378 | +.blockquote-tag-tip .blockquote-tag-title { | |
| 379 | + color: var(--blockquote-tip-color); | |
| 380 | +} | |
| 381 | + | |
| 382 | +.blockquote-tag-important .blockquote-tag-title { | |
| 383 | + color: var(--blockquote-important-color); | |
| 384 | +} | |
| 385 | + | |
| 386 | +.blockquote-tag-warning .blockquote-tag-title { | |
| 387 | + color: var(--blockquote-warning-color); | |
| 388 | +} | |
| 389 | + | |
| 390 | +.blockquote-tag-caution .blockquote-tag-title { | |
| 391 | + color: var(--blockquote-caution-color); | |
| 392 | +} | |
| 393 | + | |
| 394 | +.blockquote-tag-title { | |
| 395 | + /* Slightly increase the weight for more emphasis. */ | |
| 396 | + font-weight: 600; | |
| 397 | + /* Vertically center the icon with the text. */ | |
| 398 | + display: flex; | |
| 399 | + align-items: center; | |
| 400 | + /* Remove default large margins for a more compact display. */ | |
| 401 | + margin: 2px 0 8px 0; | |
| 402 | +} | |
| 403 | + | |
| 404 | +.blockquote-tag-title .fa-svg { | |
| 405 | + fill: currentColor; | |
| 406 | + /* Add some space between the icon and the text. */ | |
| 407 | + margin-right: 8px; | |
| 408 | +} |
A
book/css/print-9e4910d8.css
+50
-0
@@ -0,0 +1,50 @@
| 1 | + | |
| 2 | +#mdbook-sidebar, | |
| 3 | +#mdbook-menu-bar, | |
| 4 | +.nav-chapters, | |
| 5 | +.mobile-nav-chapters { | |
| 6 | + display: none; | |
| 7 | +} | |
| 8 | + | |
| 9 | +#mdbook-page-wrapper.page-wrapper { | |
| 10 | + transform: none !important; | |
| 11 | + margin-inline-start: 0px; | |
| 12 | + overflow-y: initial; | |
| 13 | +} | |
| 14 | + | |
| 15 | +#mdbook-content { | |
| 16 | + max-width: none; | |
| 17 | + margin: 0; | |
| 18 | + padding: 0; | |
| 19 | +} | |
| 20 | + | |
| 21 | +.page { | |
| 22 | + overflow-y: initial; | |
| 23 | +} | |
| 24 | + | |
| 25 | +code { | |
| 26 | + direction: ltr !important; | |
| 27 | +} | |
| 28 | + | |
| 29 | +pre > .buttons { | |
| 30 | + z-index: 2; | |
| 31 | +} | |
| 32 | + | |
| 33 | +a, a:visited, a:active, a:hover { | |
| 34 | + color: #4183c4; | |
| 35 | + text-decoration: none; | |
| 36 | +} | |
| 37 | + | |
| 38 | +h1, h2, h3, h4, h5, h6 { | |
| 39 | + page-break-inside: avoid; | |
| 40 | + page-break-after: avoid; | |
| 41 | +} | |
| 42 | + | |
| 43 | +pre, code { | |
| 44 | + page-break-inside: avoid; | |
| 45 | + white-space: pre-wrap; | |
| 46 | +} | |
| 47 | + | |
| 48 | +.fa { | |
| 49 | + display: none !important; | |
| 50 | +} |
A
book/css/variables-8adf115d.css
+383
-0
@@ -0,0 +1,383 @@
| 1 | + | |
| 2 | +/* Globals */ | |
| 3 | + | |
| 4 | +:root { | |
| 5 | + --sidebar-target-width: 300px; | |
| 6 | + --sidebar-width: min(var(--sidebar-target-width), 80vw); | |
| 7 | + --sidebar-resize-indicator-width: 8px; | |
| 8 | + --sidebar-resize-indicator-space: 2px; | |
| 9 | + --page-padding: 15px; | |
| 10 | + --content-max-width: 750px; | |
| 11 | + --menu-bar-height: 50px; | |
| 12 | + --mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace; | |
| 13 | + --code-font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */ | |
| 14 | + --searchbar-margin-block-start: 5px; | |
| 15 | +} | |
| 16 | + | |
| 17 | +/* Themes */ | |
| 18 | + | |
| 19 | +.ayu { | |
| 20 | + --bg: hsl(210, 25%, 8%); | |
| 21 | + --fg: #c5c5c5; | |
| 22 | + | |
| 23 | + --sidebar-bg: #14191f; | |
| 24 | + --sidebar-fg: #c8c9db; | |
| 25 | + --sidebar-non-existant: #5c6773; | |
| 26 | + --sidebar-active: #ffb454; | |
| 27 | + --sidebar-spacer: #2d334f; | |
| 28 | + | |
| 29 | + --scrollbar: var(--sidebar-fg); | |
| 30 | + | |
| 31 | + --icons: #737480; | |
| 32 | + --icons-hover: #b7b9cc; | |
| 33 | + | |
| 34 | + --links: #0096cf; | |
| 35 | + | |
| 36 | + --inline-code-color: #ffb454; | |
| 37 | + | |
| 38 | + --theme-popup-bg: #14191f; | |
| 39 | + --theme-popup-border: #5c6773; | |
| 40 | + --theme-hover: #191f26; | |
| 41 | + | |
| 42 | + --quote-bg: hsl(226, 15%, 17%); | |
| 43 | + --quote-border: hsl(226, 15%, 22%); | |
| 44 | + | |
| 45 | + --warning-border: #ff8e00; | |
| 46 | + | |
| 47 | + --table-border-color: hsl(210, 25%, 13%); | |
| 48 | + --table-header-bg: hsl(210, 25%, 28%); | |
| 49 | + --table-alternate-bg: hsl(210, 25%, 11%); | |
| 50 | + | |
| 51 | + --searchbar-border-color: #848484; | |
| 52 | + --searchbar-bg: #424242; | |
| 53 | + --searchbar-fg: #fff; | |
| 54 | + --searchbar-shadow-color: #d4c89f; | |
| 55 | + --searchresults-header-fg: #666; | |
| 56 | + --searchresults-border-color: #888; | |
| 57 | + --searchresults-li-bg: #252932; | |
| 58 | + --search-mark-bg: #e3b171; | |
| 59 | + | |
| 60 | + --color-scheme: dark; | |
| 61 | + | |
| 62 | + /* Same as `--icons` */ | |
| 63 | + --copy-button-filter: invert(45%) sepia(6%) saturate(621%) hue-rotate(198deg) brightness(99%) contrast(85%); | |
| 64 | + /* Same as `--sidebar-active` */ | |
| 65 | + --copy-button-filter-hover: invert(68%) sepia(55%) saturate(531%) hue-rotate(341deg) brightness(104%) contrast(101%); | |
| 66 | + | |
| 67 | + --footnote-highlight: #2668a6; | |
| 68 | + | |
| 69 | + --overlay-bg: rgba(33, 40, 48, 0.4); | |
| 70 | + | |
| 71 | + --blockquote-note-color: #74b9ff; | |
| 72 | + --blockquote-tip-color: #09ca09; | |
| 73 | + --blockquote-important-color: #d3abff; | |
| 74 | + --blockquote-warning-color: #f0b72f; | |
| 75 | + --blockquote-caution-color: #f21424; | |
| 76 | + | |
| 77 | + --sidebar-header-border-color: #c18639; | |
| 78 | +} | |
| 79 | + | |
| 80 | +.coal { | |
| 81 | + --bg: hsl(200, 7%, 8%); | |
| 82 | + --fg: #98a3ad; | |
| 83 | + | |
| 84 | + --sidebar-bg: #292c2f; | |
| 85 | + --sidebar-fg: #a1adb8; | |
| 86 | + --sidebar-non-existant: #505254; | |
| 87 | + --sidebar-active: #3473ad; | |
| 88 | + --sidebar-spacer: #393939; | |
| 89 | + | |
| 90 | + --scrollbar: var(--sidebar-fg); | |
| 91 | + | |
| 92 | + --icons: #43484d; | |
| 93 | + --icons-hover: #b3c0cc; | |
| 94 | + | |
| 95 | + --links: #2b79a2; | |
| 96 | + | |
| 97 | + --inline-code-color: #c5c8c6; | |
| 98 | + | |
| 99 | + --theme-popup-bg: #141617; | |
| 100 | + --theme-popup-border: #43484d; | |
| 101 | + --theme-hover: #1f2124; | |
| 102 | + | |
| 103 | + --quote-bg: hsl(234, 21%, 18%); | |
| 104 | + --quote-border: hsl(234, 21%, 23%); | |
| 105 | + | |
| 106 | + --warning-border: #ff8e00; | |
| 107 | + | |
| 108 | + --table-border-color: hsl(200, 7%, 13%); | |
| 109 | + --table-header-bg: hsl(200, 7%, 28%); | |
| 110 | + --table-alternate-bg: hsl(200, 7%, 11%); | |
| 111 | + | |
| 112 | + --searchbar-border-color: #aaa; | |
| 113 | + --searchbar-bg: #b7b7b7; | |
| 114 | + --searchbar-fg: #000; | |
| 115 | + --searchbar-shadow-color: #aaa; | |
| 116 | + --searchresults-header-fg: #666; | |
| 117 | + --searchresults-border-color: #98a3ad; | |
| 118 | + --searchresults-li-bg: #2b2b2f; | |
| 119 | + --search-mark-bg: #355c7d; | |
| 120 | + | |
| 121 | + --color-scheme: dark; | |
| 122 | + | |
| 123 | + /* Same as `--icons` */ | |
| 124 | + --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%); | |
| 125 | + /* Same as `--sidebar-active` */ | |
| 126 | + --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%); | |
| 127 | + | |
| 128 | + --footnote-highlight: #4079ae; | |
| 129 | + | |
| 130 | + --overlay-bg: rgba(33, 40, 48, 0.4); | |
| 131 | + | |
| 132 | + --blockquote-note-color: #4493f8; | |
| 133 | + --blockquote-tip-color: #08ae08; | |
| 134 | + --blockquote-important-color: #ab7df8; | |
| 135 | + --blockquote-warning-color: #d29922; | |
| 136 | + --blockquote-caution-color: #d91b29; | |
| 137 | + | |
| 138 | + --sidebar-header-border-color: #3473ad; | |
| 139 | +} | |
| 140 | + | |
| 141 | +.light, html:not(.js) { | |
| 142 | + --bg: hsl(0, 0%, 100%); | |
| 143 | + --fg: hsl(0, 0%, 0%); | |
| 144 | + | |
| 145 | + --sidebar-bg: #fafafa; | |
| 146 | + --sidebar-fg: hsl(0, 0%, 0%); | |
| 147 | + --sidebar-non-existant: #aaaaaa; | |
| 148 | + --sidebar-active: #1f1fff; | |
| 149 | + --sidebar-spacer: #f4f4f4; | |
| 150 | + | |
| 151 | + --scrollbar: #8F8F8F; | |
| 152 | + | |
| 153 | + --icons: #747474; | |
| 154 | + --icons-hover: #000000; | |
| 155 | + | |
| 156 | + --links: #20609f; | |
| 157 | + | |
| 158 | + --inline-code-color: #301900; | |
| 159 | + | |
| 160 | + --theme-popup-bg: #fafafa; | |
| 161 | + --theme-popup-border: #cccccc; | |
| 162 | + --theme-hover: #e6e6e6; | |
| 163 | + | |
| 164 | + --quote-bg: hsl(197, 37%, 96%); | |
| 165 | + --quote-border: hsl(197, 37%, 91%); | |
| 166 | + | |
| 167 | + --warning-border: #ff8e00; | |
| 168 | + | |
| 169 | + --table-border-color: hsl(0, 0%, 95%); | |
| 170 | + --table-header-bg: hsl(0, 0%, 80%); | |
| 171 | + --table-alternate-bg: hsl(0, 0%, 97%); | |
| 172 | + | |
| 173 | + --searchbar-border-color: #aaa; | |
| 174 | + --searchbar-bg: #fafafa; | |
| 175 | + --searchbar-fg: #000; | |
| 176 | + --searchbar-shadow-color: #aaa; | |
| 177 | + --searchresults-header-fg: #666; | |
| 178 | + --searchresults-border-color: #888; | |
| 179 | + --searchresults-li-bg: #e4f2fe; | |
| 180 | + --search-mark-bg: #a2cff5; | |
| 181 | + | |
| 182 | + --color-scheme: light; | |
| 183 | + | |
| 184 | + /* Same as `--icons` */ | |
| 185 | + --copy-button-filter: invert(45.49%); | |
| 186 | + /* Same as `--sidebar-active` */ | |
| 187 | + --copy-button-filter-hover: invert(14%) sepia(93%) saturate(4250%) hue-rotate(243deg) brightness(99%) contrast(130%); | |
| 188 | + | |
| 189 | + --footnote-highlight: #7e7eff; | |
| 190 | + | |
| 191 | + --overlay-bg: rgba(200, 200, 205, 0.4); | |
| 192 | + | |
| 193 | + --blockquote-note-color: #0969da; | |
| 194 | + --blockquote-tip-color: #008000; | |
| 195 | + --blockquote-important-color: #8250df; | |
| 196 | + --blockquote-warning-color: #9a6700; | |
| 197 | + --blockquote-caution-color: #b52731; | |
| 198 | + | |
| 199 | + --sidebar-header-border-color: #6e6edb; | |
| 200 | +} | |
| 201 | + | |
| 202 | +.navy { | |
| 203 | + --bg: hsl(226, 23%, 11%); | |
| 204 | + --fg: #bcbdd0; | |
| 205 | + | |
| 206 | + --sidebar-bg: #282d3f; | |
| 207 | + --sidebar-fg: #c8c9db; | |
| 208 | + --sidebar-non-existant: #505274; | |
| 209 | + --sidebar-active: #2b79a2; | |
| 210 | + --sidebar-spacer: #2d334f; | |
| 211 | + | |
| 212 | + --scrollbar: var(--sidebar-fg); | |
| 213 | + | |
| 214 | + --icons: #737480; | |
| 215 | + --icons-hover: #b7b9cc; | |
| 216 | + | |
| 217 | + --links: #2b79a2; | |
| 218 | + | |
| 219 | + --inline-code-color: #c5c8c6; | |
| 220 | + | |
| 221 | + --theme-popup-bg: #161923; | |
| 222 | + --theme-popup-border: #737480; | |
| 223 | + --theme-hover: #282e40; | |
| 224 | + | |
| 225 | + --quote-bg: hsl(226, 15%, 17%); | |
| 226 | + --quote-border: hsl(226, 15%, 22%); | |
| 227 | + | |
| 228 | + --warning-border: #ff8e00; | |
| 229 | + | |
| 230 | + --table-border-color: hsl(226, 23%, 16%); | |
| 231 | + --table-header-bg: hsl(226, 23%, 31%); | |
| 232 | + --table-alternate-bg: hsl(226, 23%, 14%); | |
| 233 | + | |
| 234 | + --searchbar-border-color: #aaa; | |
| 235 | + --searchbar-bg: #aeaec6; | |
| 236 | + --searchbar-fg: #000; | |
| 237 | + --searchbar-shadow-color: #aaa; | |
| 238 | + --searchresults-header-fg: #5f5f71; | |
| 239 | + --searchresults-border-color: #5c5c68; | |
| 240 | + --searchresults-li-bg: #242430; | |
| 241 | + --search-mark-bg: #a2cff5; | |
| 242 | + | |
| 243 | + --color-scheme: dark; | |
| 244 | + | |
| 245 | + /* Same as `--icons` */ | |
| 246 | + --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%); | |
| 247 | + /* Same as `--sidebar-active` */ | |
| 248 | + --copy-button-filter-hover: invert(46%) sepia(20%) saturate(1537%) hue-rotate(156deg) brightness(85%) contrast(90%); | |
| 249 | + | |
| 250 | + --footnote-highlight: #4079ae; | |
| 251 | + | |
| 252 | + --overlay-bg: rgba(33, 40, 48, 0.4); | |
| 253 | + | |
| 254 | + --blockquote-note-color: #4493f8; | |
| 255 | + --blockquote-tip-color: #09ca09; | |
| 256 | + --blockquote-important-color: #ab7df8; | |
| 257 | + --blockquote-warning-color: #d29922; | |
| 258 | + --blockquote-caution-color: #f21424; | |
| 259 | + | |
| 260 | + --sidebar-header-border-color: #2f6ab5; | |
| 261 | +} | |
| 262 | + | |
| 263 | +.rust { | |
| 264 | + --bg: hsl(60, 9%, 87%); | |
| 265 | + --fg: #262625; | |
| 266 | + | |
| 267 | + --sidebar-bg: #3b2e2a; | |
| 268 | + --sidebar-fg: #c8c9db; | |
| 269 | + --sidebar-non-existant: #505254; | |
| 270 | + --sidebar-active: #e69f67; | |
| 271 | + --sidebar-spacer: #45373a; | |
| 272 | + | |
| 273 | + --scrollbar: var(--sidebar-fg); | |
| 274 | + | |
| 275 | + --icons: #737480; | |
| 276 | + --icons-hover: #262625; | |
| 277 | + | |
| 278 | + --links: #2b79a2; | |
| 279 | + | |
| 280 | + --inline-code-color: #6e6b5e; | |
| 281 | + | |
| 282 | + --theme-popup-bg: #e1e1db; | |
| 283 | + --theme-popup-border: #b38f6b; | |
| 284 | + --theme-hover: #99908a; | |
| 285 | + | |
| 286 | + --quote-bg: hsl(60, 5%, 75%); | |
| 287 | + --quote-border: hsl(60, 5%, 70%); | |
| 288 | + | |
| 289 | + --warning-border: #ff8e00; | |
| 290 | + | |
| 291 | + --table-border-color: hsl(60, 9%, 82%); | |
| 292 | + --table-header-bg: #b3a497; | |
| 293 | + --table-alternate-bg: hsl(60, 9%, 84%); | |
| 294 | + | |
| 295 | + --searchbar-border-color: #aaa; | |
| 296 | + --searchbar-bg: #fafafa; | |
| 297 | + --searchbar-fg: #000; | |
| 298 | + --searchbar-shadow-color: #aaa; | |
| 299 | + --searchresults-header-fg: #666; | |
| 300 | + --searchresults-border-color: #888; | |
| 301 | + --searchresults-li-bg: #dec2a2; | |
| 302 | + --search-mark-bg: #e69f67; | |
| 303 | + | |
| 304 | + /* Same as `--icons` */ | |
| 305 | + --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%); | |
| 306 | + /* Same as `--sidebar-active` */ | |
| 307 | + --copy-button-filter-hover: invert(77%) sepia(16%) saturate(1798%) hue-rotate(328deg) brightness(98%) contrast(83%); | |
| 308 | + | |
| 309 | + --footnote-highlight: #d3a17a; | |
| 310 | + | |
| 311 | + --overlay-bg: rgba(150, 150, 150, 0.25); | |
| 312 | + | |
| 313 | + --blockquote-note-color: #023b95; | |
| 314 | + --blockquote-tip-color: #007700; | |
| 315 | + --blockquote-important-color: #8250df; | |
| 316 | + --blockquote-warning-color: #603700; | |
| 317 | + --blockquote-caution-color: #aa1721; | |
| 318 | + | |
| 319 | + --sidebar-header-border-color: #8c391f; | |
| 320 | +} | |
| 321 | + | |
| 322 | +@media (prefers-color-scheme: dark) { | |
| 323 | + html:not(.js) { | |
| 324 | + --bg: hsl(200, 7%, 8%); | |
| 325 | + --fg: #98a3ad; | |
| 326 | + | |
| 327 | + --sidebar-bg: #292c2f; | |
| 328 | + --sidebar-fg: #a1adb8; | |
| 329 | + --sidebar-non-existant: #505254; | |
| 330 | + --sidebar-active: #3473ad; | |
| 331 | + --sidebar-spacer: #393939; | |
| 332 | + | |
| 333 | + --scrollbar: var(--sidebar-fg); | |
| 334 | + | |
| 335 | + --icons: #43484d; | |
| 336 | + --icons-hover: #b3c0cc; | |
| 337 | + | |
| 338 | + --links: #2b79a2; | |
| 339 | + | |
| 340 | + --inline-code-color: #c5c8c6; | |
| 341 | + | |
| 342 | + --theme-popup-bg: #141617; | |
| 343 | + --theme-popup-border: #43484d; | |
| 344 | + --theme-hover: #1f2124; | |
| 345 | + | |
| 346 | + --quote-bg: hsl(234, 21%, 18%); | |
| 347 | + --quote-border: hsl(234, 21%, 23%); | |
| 348 | + | |
| 349 | + --warning-border: #ff8e00; | |
| 350 | + | |
| 351 | + --table-border-color: hsl(200, 7%, 13%); | |
| 352 | + --table-header-bg: hsl(200, 7%, 28%); | |
| 353 | + --table-alternate-bg: hsl(200, 7%, 11%); | |
| 354 | + | |
| 355 | + --searchbar-border-color: #aaa; | |
| 356 | + --searchbar-bg: #b7b7b7; | |
| 357 | + --searchbar-fg: #000; | |
| 358 | + --searchbar-shadow-color: #aaa; | |
| 359 | + --searchresults-header-fg: #666; | |
| 360 | + --searchresults-border-color: #98a3ad; | |
| 361 | + --searchresults-li-bg: #2b2b2f; | |
| 362 | + --search-mark-bg: #355c7d; | |
| 363 | + | |
| 364 | + --color-scheme: dark; | |
| 365 | + | |
| 366 | + /* Same as `--icons` */ | |
| 367 | + --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%); | |
| 368 | + /* Same as `--sidebar-active` */ | |
| 369 | + --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%); | |
| 370 | + | |
| 371 | + --footnote-highlight: #4079ae; | |
| 372 | + | |
| 373 | + --overlay-bg: rgba(33, 40, 48, 0.4); | |
| 374 | + | |
| 375 | + --blockquote-note-color: #4493f8; | |
| 376 | + --blockquote-tip-color: #08ae08; | |
| 377 | + --blockquote-important-color: #ab7df8; | |
| 378 | + --blockquote-warning-color: #d29922; | |
| 379 | + --blockquote-caution-color: #d91b29; | |
| 380 | + | |
| 381 | + --sidebar-header-border-color: #3473ad; | |
| 382 | + } | |
| 383 | +} |
A
book/developer_manual/explanation/2fa-fonctionnement.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Fonctionnement du 2FA - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/2fa-fonctionnement.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="fonctionnement-du-2fa"><a class="header" href="#fonctionnement-du-2fa">Fonctionnement du 2FA</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/explanation/modele-permissions-rbac.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/explanation/hierarchie-labels.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/explanation/modele-permissions-rbac.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/explanation/hierarchie-labels.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/explanation/ci-dagger-easy-vs-power.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>CI Dagger : Easy Mode vs Power Mode - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/ci-dagger-easy-vs-power.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="ci-dagger--easy-mode-vs-power-mode"><a class="header" href="#ci-dagger--easy-mode-vs-power-mode">CI Dagger : Easy Mode vs Power Mode</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/explanation/hierarchie-labels.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/explanation/decisions-ui-htmx.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/explanation/hierarchie-labels.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/explanation/decisions-ui-htmx.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/explanation/decisions-ui-htmx.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Décisions UI (HTMX, DaisyUI) - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/decisions-ui-htmx.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="décisions-ui-htmx-daisyui"><a class="header" href="#décisions-ui-htmx-daisyui">Décisions UI (HTMX, DaisyUI)</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/explanation/ci-dagger-easy-vs-power.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/explanation/patron-worker-async.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/explanation/ci-dagger-easy-vs-power.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/explanation/patron-worker-async.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/explanation/flux-requetes.html
+498
-0
@@ -0,0 +1,498 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Flux de requêtes - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/flux-requetes.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="flux-de-requêtes"><a class="header" href="#flux-de-requêtes">Flux de requêtes</a></h1> | |
| 181 | +<p>Diagrammes de séquence couvrant les opérations principales de gitrust : création de dépôt, clone et push SSH, enregistrement de clé SSH, résolution des permissions, navigation web, inscription utilisateur.</p> | |
| 182 | +<h2 id="1-création-dun-dépôt-web"><a class="header" href="#1-création-dun-dépôt-web">1. Création d’un dépôt (Web)</a></h2> | |
| 183 | +<pre class="mermaid">sequenceDiagram | |
| 184 | + actor User as Utilisateur | |
| 185 | + participant Web as gitrust-web | |
| 186 | + participant RepoSvc as RepositoryService | |
| 187 | + participant ResSvc as ResourceService | |
| 188 | + participant DB as PostgreSQL | |
| 189 | + participant Git as gitrust-git | |
| 190 | + participant FS as Système de fichiers | |
| 191 | + | |
| 192 | + User->>Web: POST /new {name, description} | |
| 193 | + Web->>Web: Extraire user_id (session JWT) | |
| 194 | + | |
| 195 | + Web->>RepoSvc: create(db, owner_id, username, base_path, input) | |
| 196 | + RepoSvc->>RepoSvc: RepoSlug::from_name(input.name) | |
| 197 | + RepoSvc->>DB: SELECT ... WHERE owner_id AND slug | |
| 198 | + DB-->>RepoSvc: None (pas de doublon) | |
| 199 | + | |
| 200 | + RepoSvc->>RepoSvc: compute_disk_path(base, owner, slug) | |
| 201 | + Note over RepoSvc: Validation anti path-traversal | |
| 202 | + | |
| 203 | + RepoSvc->>ResSvc: register(db, "repository", repo_id, owner_id) | |
| 204 | + ResSvc->>DB: INSERT INTO resources | |
| 205 | + DB-->>ResSvc: Ok | |
| 206 | + | |
| 207 | + RepoSvc->>DB: INSERT INTO repositories | |
| 208 | + DB-->>RepoSvc: repository::Model | |
| 209 | + | |
| 210 | + RepoSvc-->>Web: RepositoryOutput | |
| 211 | + | |
| 212 | + Web->>Git: BareRepo::init(disk_path) | |
| 213 | + Git->>FS: git init --bare | |
| 214 | + FS-->>Git: Ok | |
| 215 | + Git-->>Web: Ok | |
| 216 | + | |
| 217 | + Web-->>User: 302 Redirect /{owner}/{slug} | |
| 218 | +</pre> | |
| 219 | + | |
| 220 | +<h2 id="2-clone-ssh-git-clone"><a class="header" href="#2-clone-ssh-git-clone">2. Clone SSH (git clone)</a></h2> | |
| 221 | +<pre class="mermaid">sequenceDiagram | |
| 222 | + actor Dev as Développeur | |
| 223 | + participant Client as Git CLI | |
| 224 | + participant SSH as gitrust-ssh | |
| 225 | + participant Auth as SshKeyService | |
| 226 | + participant Access as AccessService | |
| 227 | + participant Git as gitrust-git | |
| 228 | + participant DB as PostgreSQL | |
| 229 | + participant FS as Bare repo (.git) | |
| 230 | + | |
| 231 | + Dev->>Client: git clone ssh://git@host:2222/alice/my-repo.git | |
| 232 | + Client->>SSH: Connexion TCP :2222 | |
| 233 | + SSH-->>Client: Banner SSH + échange clés | |
| 234 | + | |
| 235 | + Client->>SSH: Auth publickey (signature) | |
| 236 | + SSH->>Auth: find_by_fingerprint(db, fingerprint) | |
| 237 | + Auth->>DB: SELECT FROM ssh_keys WHERE fingerprint = ? | |
| 238 | + DB-->>Auth: ssh_key::Model {user_id, ...} | |
| 239 | + Auth-->>SSH: user_id | |
| 240 | + | |
| 241 | + SSH->>Auth: update_last_used(db, key_id) | |
| 242 | + Auth->>DB: UPDATE ssh_keys SET last_used_at = now() | |
| 243 | + | |
| 244 | + SSH-->>Client: Auth OK | |
| 245 | + | |
| 246 | + Client->>SSH: exec "git-upload-pack 'alice/my-repo.git'" | |
| 247 | + SSH->>SSH: CommandHandler::parse("git-upload-pack alice/my-repo.git") | |
| 248 | + Note over SSH: Extraction owner=alice, repo=my-repo | |
| 249 | + | |
| 250 | + SSH->>Access: effective_role(db, user_id, repo_id) | |
| 251 | + Access->>DB: Check ownership + shares + teams | |
| 252 | + DB-->>Access: Role::Developer | |
| 253 | + Access-->>SSH: can_read = true | |
| 254 | + | |
| 255 | + SSH->>Git: pack_protocol::advertise_refs(repo_path) | |
| 256 | + Git->>FS: Lecture refs | |
| 257 | + FS-->>Git: refs/heads/main, ... | |
| 258 | + Git-->>SSH: advertise output | |
| 259 | + | |
| 260 | + SSH-->>Client: refs advertisement | |
| 261 | + Client->>SSH: want/have negotiation | |
| 262 | + | |
| 263 | + SSH->>Git: pack_protocol::serve_pack(repo_path, wants, haves) | |
| 264 | + Git->>FS: Pack objects | |
| 265 | + FS-->>Git: pack data | |
| 266 | + Git-->>SSH: pack stream | |
| 267 | + | |
| 268 | + SSH-->>Client: pack data | |
| 269 | + Client-->>Dev: Dépôt cloné avec succès | |
| 270 | +</pre> | |
| 271 | + | |
| 272 | +<h2 id="3-push-ssh-git-push"><a class="header" href="#3-push-ssh-git-push">3. Push SSH (git push)</a></h2> | |
| 273 | +<pre class="mermaid">sequenceDiagram | |
| 274 | + actor Dev as Développeur | |
| 275 | + participant Client as Git CLI | |
| 276 | + participant SSH as gitrust-ssh | |
| 277 | + participant Access as AccessService | |
| 278 | + participant Git as gitrust-git | |
| 279 | + participant Hooks as gitrust-hooks | |
| 280 | + participant DB as PostgreSQL | |
| 281 | + participant FS as Bare repo (.git) | |
| 282 | + | |
| 283 | + Note over Client,SSH: Session SSH déjà authentifiée | |
| 284 | + | |
| 285 | + Client->>SSH: exec "git-receive-pack 'alice/my-repo.git'" | |
| 286 | + SSH->>SSH: CommandHandler::parse(...) | |
| 287 | + Note over SSH: Extraction owner=alice, repo=my-repo | |
| 288 | + | |
| 289 | + SSH->>Access: effective_role(db, user_id, repo_id) | |
| 290 | + Access->>DB: Check ownership + shares + teams | |
| 291 | + DB-->>Access: Role::Developer | |
| 292 | + Access-->>SSH: can_push = true | |
| 293 | + | |
| 294 | + SSH->>Git: pack_protocol::advertise_refs(repo_path) | |
| 295 | + Git->>FS: Lecture refs | |
| 296 | + Git-->>SSH: refs advertisement | |
| 297 | + | |
| 298 | + SSH-->>Client: refs | |
| 299 | + Client->>SSH: pack data + commands | |
| 300 | + | |
| 301 | + SSH->>Git: pack_protocol::serve_pack(repo_path, receive-pack) | |
| 302 | + Git->>FS: Écriture objets + update refs | |
| 303 | + FS-->>Git: Ok | |
| 304 | + Git-->>SSH: Ok | |
| 305 | + | |
| 306 | + SSH->>DB: UPDATE repositories SET is_empty = false, updated_at = now() | |
| 307 | + | |
| 308 | + SSH-->>Client: Push OK | |
| 309 | + Client-->>Dev: Push réussi | |
| 310 | +</pre> | |
| 311 | + | |
| 312 | +<h2 id="4-enregistrement-dune-clé-ssh"><a class="header" href="#4-enregistrement-dune-clé-ssh">4. Enregistrement d’une clé SSH</a></h2> | |
| 313 | +<pre class="mermaid">sequenceDiagram | |
| 314 | + actor User as Utilisateur | |
| 315 | + participant Web as gitrust-web | |
| 316 | + participant Svc as SshKeyService | |
| 317 | + participant DB as PostgreSQL | |
| 318 | + | |
| 319 | + User->>Web: POST /settings/keys {title, key_data} | |
| 320 | + Web->>Web: Extraire user_id (session) | |
| 321 | + | |
| 322 | + Web->>Svc: create(db, user_id, input) | |
| 323 | + | |
| 324 | + Svc->>Svc: parse_public_key(key_data) | |
| 325 | + Note over Svc: Extraire type + décoder base64 | |
| 326 | + | |
| 327 | + Svc->>Svc: validate_key_type_and_size(type, bytes) | |
| 328 | + Note over Svc: ed25519 OK<br/>RSA >= 4096 bits<br/>ecdsa-p256/p384 OK | |
| 329 | + | |
| 330 | + Svc->>Svc: compute_fingerprint(bytes) | |
| 331 | + Note over Svc: SHA256(key_bytes) -> base64-no-pad | |
| 332 | + | |
| 333 | + Svc->>DB: SELECT FROM ssh_keys WHERE fingerprint = ? | |
| 334 | + DB-->>Svc: None (pas de doublon) | |
| 335 | + | |
| 336 | + Svc->>DB: INSERT INTO ssh_keys | |
| 337 | + DB-->>Svc: ssh_key::Model | |
| 338 | + | |
| 339 | + Svc-->>Web: SshKeyOutput | |
| 340 | + Web-->>User: 200 Clé ajoutée (fingerprint affiché) | |
| 341 | +</pre> | |
| 342 | + | |
| 343 | +<h2 id="5-résolution-des-permissions-accessservice"><a class="header" href="#5-résolution-des-permissions-accessservice">5. Résolution des permissions (AccessService)</a></h2> | |
| 344 | +<pre class="mermaid">sequenceDiagram | |
| 345 | + participant Caller as Handler / SSH Session | |
| 346 | + participant AS as AccessService | |
| 347 | + participant RS as ResourceService | |
| 348 | + participant DB as PostgreSQL | |
| 349 | + | |
| 350 | + Caller->>AS: effective_role(db, user_id, repo_id) | |
| 351 | + | |
| 352 | + AS->>RS: effective_permission(db, user_id, "repository", repo_id) | |
| 353 | + RS->>DB: SELECT FROM resources WHERE type AND id | |
| 354 | + DB-->>RS: resource {owner_id, is_public} | |
| 355 | + | |
| 356 | + alt user_id == owner_id | |
| 357 | + RS-->>AS: "owner" | |
| 358 | + else Share exists | |
| 359 | + RS->>DB: SELECT FROM resource_shares WHERE resource AND user | |
| 360 | + DB-->>RS: share {permission_level} | |
| 361 | + RS-->>AS: permission_level | |
| 362 | + else Resource is public | |
| 363 | + RS-->>AS: "read" | |
| 364 | + else No access | |
| 365 | + RS-->>AS: None | |
| 366 | + end | |
| 367 | + | |
| 368 | + AS->>AS: Role::from_permission(individual_level) | |
| 369 | + | |
| 370 | + AS->>DB: SELECT team_members + team_repository_access<br/>WHERE user_id AND repository_id | |
| 371 | + DB-->>AS: Vec<team_permission> | |
| 372 | + | |
| 373 | + AS->>AS: team_role = max(team_permissions) | |
| 374 | + AS->>AS: effective = max(individual_role, team_role) | |
| 375 | + | |
| 376 | + AS-->>Caller: Role (Reader / Developer / Maintainer / Owner) | |
| 377 | +</pre> | |
| 378 | + | |
| 379 | +<h2 id="6-navigation-dans-un-dépôt-web"><a class="header" href="#6-navigation-dans-un-dépôt-web">6. Navigation dans un dépôt (Web)</a></h2> | |
| 380 | +<pre class="mermaid">sequenceDiagram | |
| 381 | + actor User as Utilisateur | |
| 382 | + participant Web as gitrust-web | |
| 383 | + participant Ext as RepoExtractor | |
| 384 | + participant Access as AccessService | |
| 385 | + participant Git as gitrust-git | |
| 386 | + participant DB as PostgreSQL | |
| 387 | + participant FS as Bare repo | |
| 388 | + | |
| 389 | + User->>Web: GET /alice/my-repo/tree/main/src | |
| 390 | + Web->>Ext: RepoContext::extract(owner=alice, repo=my-repo, ref=main, path=src) | |
| 391 | + | |
| 392 | + Ext->>DB: SELECT user WHERE username = 'alice' | |
| 393 | + DB-->>Ext: user {id} | |
| 394 | + | |
| 395 | + Ext->>DB: SELECT repository WHERE owner_id AND slug | |
| 396 | + DB-->>Ext: repository::Model | |
| 397 | + | |
| 398 | + Ext->>Access: effective_role(db, visitor_id, repo_id) | |
| 399 | + Access-->>Ext: Role::Reader | |
| 400 | + | |
| 401 | + Ext-->>Web: RepoContext {repo, role, ref, path} | |
| 402 | + | |
| 403 | + Web->>Git: tree_browser::list_tree(repo_path, "main", "src") | |
| 404 | + Git->>FS: Resolve ref main -> commit -> tree -> src/ | |
| 405 | + FS-->>Git: Vec<TreeEntry> | |
| 406 | + | |
| 407 | + Git-->>Web: entries (fichiers + dossiers) | |
| 408 | + | |
| 409 | + Web->>Git: readme::find_readme(repo_path, "main", "src") | |
| 410 | + Git->>FS: Cherche README.md, README, readme.md | |
| 411 | + FS-->>Git: Option<BlobContent> | |
| 412 | + Git-->>Web: Option<readme_content> | |
| 413 | + | |
| 414 | + Web->>Web: Render template tree.html | |
| 415 | + Web-->>User: HTML (arbre + README) | |
| 416 | +</pre> | |
| 417 | + | |
| 418 | +<h2 id="7-inscription-utilisateur--création-répertoire"><a class="header" href="#7-inscription-utilisateur--création-répertoire">7. Inscription utilisateur + création répertoire</a></h2> | |
| 419 | +<pre class="mermaid">sequenceDiagram | |
| 420 | + actor User as Nouvel utilisateur | |
| 421 | + participant Web as rustwarden-core (auth) | |
| 422 | + participant Hook as GitrustHooks | |
| 423 | + participant DB as PostgreSQL | |
| 424 | + participant FS as Système de fichiers | |
| 425 | + | |
| 426 | + User->>Web: POST /register {username, email, password} | |
| 427 | + Web->>DB: INSERT INTO users | |
| 428 | + DB-->>Web: user {id, username} | |
| 429 | + | |
| 430 | + Web->>Hook: on_user_registered(db, user_id, username) | |
| 431 | + Hook->>Hook: Valider username (anti path-traversal) | |
| 432 | + Hook->>FS: create_dir_all(repos_base_path / username) | |
| 433 | + FS-->>Hook: Ok | |
| 434 | + Hook-->>Web: Ok | |
| 435 | + | |
| 436 | + Web-->>User: 302 Redirect /login | |
| 437 | +</pre> | |
| 438 | + | |
| 439 | + | |
| 440 | + </main> | |
| 441 | + | |
| 442 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 443 | + <!-- Mobile navigation buttons --> | |
| 444 | + <a rel="prev" href="../../developer_manual/explanation/vue-ensemble-architecture.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 445 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 446 | + </a> | |
| 447 | + | |
| 448 | + <a rel="next prefetch" href="../../developer_manual/explanation/modele-permissions-rbac.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 449 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 450 | + </a> | |
| 451 | + | |
| 452 | + <div style="clear: both"></div> | |
| 453 | + </nav> | |
| 454 | + </div> | |
| 455 | + </div> | |
| 456 | + | |
| 457 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 458 | + <a rel="prev" href="../../developer_manual/explanation/vue-ensemble-architecture.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 459 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 460 | + </a> | |
| 461 | + | |
| 462 | + <a rel="next prefetch" href="../../developer_manual/explanation/modele-permissions-rbac.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 463 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 464 | + </a> | |
| 465 | + </nav> | |
| 466 | + | |
| 467 | + </div> | |
| 468 | + | |
| 469 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 470 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 471 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 472 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 473 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + <script> | |
| 478 | + window.playground_copyable = true; | |
| 479 | + </script> | |
| 480 | + | |
| 481 | + | |
| 482 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 483 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 484 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 485 | + | |
| 486 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 487 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 488 | + <script src="../../book-a0b12cfe.js"></script> | |
| 489 | + | |
| 490 | + <!-- Custom JS scripts --> | |
| 491 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 492 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + </div> | |
| 497 | + </body> | |
| 498 | +</html> |
A
book/developer_manual/explanation/hierarchie-labels.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Hiérarchie des labels - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/hierarchie-labels.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="hiérarchie-des-labels"><a class="header" href="#hiérarchie-des-labels">Hiérarchie des labels</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/explanation/2fa-fonctionnement.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/explanation/ci-dagger-easy-vs-power.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/explanation/2fa-fonctionnement.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/explanation/ci-dagger-easy-vs-power.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/explanation/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Explication - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="explication"><a class="header" href="#explication">Explication</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/reference/rustwarden-core-api.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/explanation/vue-ensemble-architecture.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/reference/rustwarden-core-api.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/explanation/vue-ensemble-architecture.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/explanation/modele-permissions-rbac.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Modèle de permissions RBAC - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/modele-permissions-rbac.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="modèle-de-permissions-rbac"><a class="header" href="#modèle-de-permissions-rbac">Modèle de permissions RBAC</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/explanation/flux-requetes.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/explanation/2fa-fonctionnement.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/explanation/flux-requetes.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/explanation/2fa-fonctionnement.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/explanation/patron-worker-async.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Patron worker async - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/patron-worker-async.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="patron-worker-async"><a class="header" href="#patron-worker-async">Patron worker async</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/explanation/decisions-ui-htmx.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../template/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/explanation/decisions-ui-htmx.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../template/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/explanation/vue-ensemble-architecture.html
+372
-0
@@ -0,0 +1,372 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Vue d'ensemble de l'architecture - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/vue-ensemble-architecture.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="vue-densemble-de-larchitecture"><a class="header" href="#vue-densemble-de-larchitecture">Vue d’ensemble de l’architecture</a></h1> | |
| 181 | +<p>Gitrust est une plateforme d’hébergement Git auto-hébergée construite sur le framework <strong>rustwarden-core</strong>. L’application expose deux points d’entrée réseau (HTTP + SSH) et persiste ses données dans PostgreSQL.</p> | |
| 182 | +<h2 id="vue-densemble"><a class="header" href="#vue-densemble">Vue d’ensemble</a></h2> | |
| 183 | +<pre class="mermaid">graph TB | |
| 184 | + subgraph Clients | |
| 185 | + Browser["Navigateur Web"] | |
| 186 | + GitCLI["Git CLI (ssh/https)"] | |
| 187 | + end | |
| 188 | + | |
| 189 | + subgraph "Gitrust Binary (src/main.rs)" | |
| 190 | + Main["main()"] | |
| 191 | + end | |
| 192 | + | |
| 193 | + subgraph "Crates Gitrust" | |
| 194 | + Web["gitrust-web<br/><i>Routes HTTP, templates,<br/>handlers Axum</i>"] | |
| 195 | + SSH["gitrust-ssh<br/><i>Serveur SSH (russh),<br/>auth par clé, sessions</i>"] | |
| 196 | + Hooks["gitrust-hooks<br/><i>impl RustwardenHooks<br/>(on_user_registered, ...)</i>"] | |
| 197 | + Core["gitrust-core<br/><i>Models, services, migrations,<br/>rôles, types, DTOs</i>"] | |
| 198 | + Git["gitrust-git<br/><i>Bare repos, tree browser,<br/>pack protocol (git2)</i>"] | |
| 199 | + end | |
| 200 | + | |
| 201 | + subgraph "Framework" | |
| 202 | + RW["rustwarden-core<br/><i>Auth, users, JWT, sessions,<br/>ResourceService, i18n</i>"] | |
| 203 | + end | |
| 204 | + | |
| 205 | + subgraph "Stockage" | |
| 206 | + PG[(PostgreSQL)] | |
| 207 | + FS[("Système de fichiers<br/>bare repos .git")] | |
| 208 | + end | |
| 209 | + | |
| 210 | + subgraph "CI/CD (optionnel)" | |
| 211 | + CiWorker["CiWorker<br/><i>tokio::spawn, mpsc,<br/>sous-processus Dagger</i>"] | |
| 212 | + Dagger["Dagger Engine<br/><i>Containers isolés,<br/>cache, exécution</i>"] | |
| 213 | + CiEngine["ci-engine<br/><i>Module Dagger Python<br/>(Easy Mode)</i>"] | |
| 214 | + Syft["Syft (optionnel)<br/><i>Génération SBOM<br/>CycloneDX</i>"] | |
| 215 | + DTrack["Dependency-Track<br/>(optionnel)<br/><i>Analyse vulnérabilités</i>"] | |
| 216 | + end | |
| 217 | + | |
| 218 | + Browser -->|HTTP :4000| Web | |
| 219 | + GitCLI -->|SSH :2222| SSH | |
| 220 | + GitCLI -->|HTTPS :4000| Web | |
| 221 | + | |
| 222 | + Main --> Web | |
| 223 | + Main --> SSH | |
| 224 | + Main --> Hooks | |
| 225 | + Main -.->|"si CI_ENABLED"| CiWorker | |
| 226 | + | |
| 227 | + Web --> Core | |
| 228 | + Web --> Git | |
| 229 | + SSH --> Core | |
| 230 | + SSH --> Git | |
| 231 | + Hooks --> Core | |
| 232 | + | |
| 233 | + Core --> RW | |
| 234 | + Core --> PG | |
| 235 | + Git --> FS | |
| 236 | + | |
| 237 | + CiWorker --> Core | |
| 238 | + CiWorker -->|"dagger call"| Dagger | |
| 239 | + Dagger -->|"Easy Mode"| CiEngine | |
| 240 | + Dagger -->|"Power Mode"| FS | |
| 241 | + CiWorker -.->|"si CI_SBOM_ENABLED"| Syft | |
| 242 | + Syft -.->|"si CI_DTRACK_ENABLED"| DTrack | |
| 243 | +</pre> | |
| 244 | + | |
| 245 | +<hr> | |
| 246 | +<h2 id="démarrage-de-lapplication"><a class="header" href="#démarrage-de-lapplication">Démarrage de l’application</a></h2> | |
| 247 | +<p>Le diagramme suivant détaille la séquence d’initialisation depuis <code>main()</code> jusqu’au démarrage des serveurs HTTP et SSH.</p> | |
| 248 | +<pre class="mermaid">sequenceDiagram | |
| 249 | + participant Main as main() | |
| 250 | + participant Builder as RustwardenBuilder | |
| 251 | + participant App as RustwardenApp | |
| 252 | + participant Mig as AppMigrator | |
| 253 | + participant DB as PostgreSQL | |
| 254 | + participant SMTP as Serveur SMTP | |
| 255 | + | |
| 256 | + Main->>Main: GitrustConfig::from_env() | |
| 257 | + Main->>Main: Arc<GitrustHooks> (hooks FS) | |
| 258 | + | |
| 259 | + Main->>Builder: builder().from_env() | |
| 260 | + Note over Builder: Charge .env, init tracing | |
| 261 | + Main->>Builder: .headless().auto_migrate(false) | |
| 262 | + Main->>Builder: .merge_routes(app_routes(hooks)) | |
| 263 | + Note over Builder: Routes = framework API<br/>+ pages SSR gitrust<br/>+ Extension(hooks) | |
| 264 | + Main->>Builder: .build().await | |
| 265 | + Builder->>DB: Connexion pool | |
| 266 | + Builder->>DB: Migrations rustwarden-core | |
| 267 | + Builder->>SMTP: EmailQueueProcessor.start() | |
| 268 | + Note over SMTP: Worker de fond : dépile<br/>email_queue toutes les 30s | |
| 269 | + Builder-->>Main: RustwardenApp | |
| 270 | + | |
| 271 | + Main->>Mig: run_migrations(app.database()) | |
| 272 | + Mig->>DB: core_migrations() + gitrust_migrations() | |
| 273 | + Note over DB: Tables: users, resources,<br/>repositories, ssh_keys,<br/>teams, team_members,<br/>team_repository_access | |
| 274 | + Mig-->>Main: Ok | |
| 275 | + | |
| 276 | + Main->>Main: tokio::spawn(SSH server :2222) | |
| 277 | + | |
| 278 | + alt CI_ENABLED=true | |
| 279 | + Main->>Main: CiWorker::start(config.ci) | |
| 280 | + Note over Main: Vérifie dagger dans PATH<br/>Si CI_SBOM_ENABLED: vérifie syft<br/>Si CI_DTRACK_ENABLED: vérifie API DT | |
| 281 | + Main->>Main: tokio::spawn(CiWorker loop) | |
| 282 | + Note over Main: Écoute mpsc channel<br/>pour les jobs CI | |
| 283 | + end | |
| 284 | + | |
| 285 | + Main->>App: app.run().await | |
| 286 | + Note over App: HTTP :4000 démarre | |
| 287 | +</pre> | |
| 288 | + | |
| 289 | +<hr> | |
| 290 | +<h2 id="principes-de-conception"><a class="header" href="#principes-de-conception">Principes de conception</a></h2> | |
| 291 | +<h3 id="séparation-framework--métier-gitrust"><a class="header" href="#séparation-framework--métier-gitrust">Séparation framework / métier gitrust</a></h3> | |
| 292 | +<p>Gitrust est construit <strong>au-dessus</strong> de rustwarden-core, un framework Rust d’authentification et de gestion d’utilisateurs. Cette séparation est intentionnelle :</p> | |
| 293 | +<ul> | |
| 294 | +<li><strong>rustwarden-core</strong> gère : auth JWT, sessions, users, roles génériques, i18n, SMTP, OAuth, audit log générique.</li> | |
| 295 | +<li><strong>gitrust-core</strong> gère : tout ce qui est spécifique à la forge Git — dépôts, clés SSH, équipes, permissions RBAC à 4 niveaux, CI, import de dépôts.</li> | |
| 296 | +</ul> | |
| 297 | +<p>La règle fondamentale : <strong>ne jamais modifier <code>crates/rustwarden-core/</code></strong>. Toute extension passe par des wrappers, des hooks (<code>RustwardenHooks</code>) ou des traits implémentés côté gitrust.</p> | |
| 298 | +<h3 id="mode-headless"><a class="header" href="#mode-headless">Mode headless</a></h3> | |
| 299 | +<p>gitrust-web opère en mode <code>headless()</code> : les pages UI standard de rustwarden (login, register, settings) sont <strong>désactivées</strong> et réimplémentées entièrement dans <code>gitrust-web/templates/</code>. Cela permet un design cohérent (sidebar Git, DaisyUI) sans compromis avec l’UI générique du framework.</p> | |
| 300 | +<h3 id="ssr--htmx-zéro-cdn"><a class="header" href="#ssr--htmx-zéro-cdn">SSR + HTMX, zéro CDN</a></h3> | |
| 301 | +<p>L’interface est rendue côté serveur via Askama (templates Rust compilés). HTMX gère les interactions dynamiques (mises à jour partielles de page, SSE pour les notifications et les logs CI). Aucun asset externe : tout CSS/JS est servi depuis <code>static/</code> — imposé par la Content Security Policy du framework.</p> | |
| 302 | +<h3 id="bare-repos-sur-le-système-de-fichiers"><a class="header" href="#bare-repos-sur-le-système-de-fichiers">Bare repos sur le système de fichiers</a></h3> | |
| 303 | +<p>gitrust-git est <strong>découplé de la base de données</strong>. Les opérations Git (navigation d’arbre, lecture de blobs, pack protocol) travaillent directement sur les bare repos (<code>{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/</code>) via libgit2. La base ne stocke que les métadonnées (nom, description, visibilité, ownership). Ce découplage permet de remplacer ou tester gitrust-git indépendamment.</p> | |
| 304 | +<h3 id="ci-hybride--dagger-comme-abstraction-dexécution"><a class="header" href="#ci-hybride--dagger-comme-abstraction-dexécution">CI hybride : Dagger comme abstraction d’exécution</a></h3> | |
| 305 | +<p>Plutôt que d’implémenter un runner CI from scratch, gitrust délègue l’exécution à <strong>Dagger</strong>, qui garantit l’isolation (containers), la reproductibilité (cache) et la portabilité (local ou runner distant via SSH+rsync). Le <code>CiWorker</code> est une tâche Tokio dans le processus principal — pas un daemon séparé — ce qui simplifie le déploiement (un seul binaire).</p> | |
| 306 | +<hr> | |
| 307 | +<h2 id="pour-aller-plus-loin"><a class="header" href="#pour-aller-plus-loin">Pour aller plus loin</a></h2> | |
| 308 | +<ul> | |
| 309 | +<li>Référence structurelle complète (tables de modules, routes, dépendances) : <code>developer_manual/reference/architecture-crates.md</code></li> | |
| 310 | +<li>Diagrammes de séquence détaillés (clone SSH, push, permissions) : <code>developer_manual/explanation/flux-requetes.md</code></li> | |
| 311 | +<li>Règles de code et gates QA : <code>developer_manual/reference/regles-qa-anssi.md</code></li> | |
| 312 | +</ul> | |
| 313 | + | |
| 314 | + </main> | |
| 315 | + | |
| 316 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 317 | + <!-- Mobile navigation buttons --> | |
| 318 | + <a rel="prev" href="../../developer_manual/explanation/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 319 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 320 | + </a> | |
| 321 | + | |
| 322 | + <a rel="next prefetch" href="../../developer_manual/explanation/flux-requetes.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 323 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 324 | + </a> | |
| 325 | + | |
| 326 | + <div style="clear: both"></div> | |
| 327 | + </nav> | |
| 328 | + </div> | |
| 329 | + </div> | |
| 330 | + | |
| 331 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 332 | + <a rel="prev" href="../../developer_manual/explanation/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 333 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 334 | + </a> | |
| 335 | + | |
| 336 | + <a rel="next prefetch" href="../../developer_manual/explanation/flux-requetes.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 337 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 338 | + </a> | |
| 339 | + </nav> | |
| 340 | + | |
| 341 | + </div> | |
| 342 | + | |
| 343 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 344 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 345 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 346 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 347 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + <script> | |
| 352 | + window.playground_copyable = true; | |
| 353 | + </script> | |
| 354 | + | |
| 355 | + | |
| 356 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 357 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 358 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 359 | + | |
| 360 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 361 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 362 | + <script src="../../book-a0b12cfe.js"></script> | |
| 363 | + | |
| 364 | + <!-- Custom JS scripts --> | |
| 365 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 366 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + </div> | |
| 371 | + </body> | |
| 372 | +</html> |
A
book/developer_manual/how-to/ajouter-migration-db.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Ajouter une migration de base de données - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/ajouter-migration-db.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="ajouter-une-migration-de-base-de-données"><a class="header" href="#ajouter-une-migration-de-base-de-données">Ajouter une migration de base de données</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/how-to/ajouter-service-metier.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/how-to/implementer-webhooks.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/how-to/ajouter-service-metier.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/how-to/implementer-webhooks.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/how-to/ajouter-route-web.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Ajouter une route web - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/ajouter-route-web.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="ajouter-une-route-web"><a class="header" href="#ajouter-une-route-web">Ajouter une route web</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/how-to/lancer-tests-e2e.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-service-metier.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/how-to/lancer-tests-e2e.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-service-metier.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/how-to/ajouter-service-metier.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Ajouter un service métier - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/ajouter-service-metier.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="ajouter-un-service-métier"><a class="header" href="#ajouter-un-service-métier">Ajouter un service métier</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/how-to/ajouter-route-web.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-migration-db.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/how-to/ajouter-route-web.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-migration-db.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/how-to/contribuer-a-rustwarden.html
+288
-0
@@ -0,0 +1,288 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Contribuer à rustwarden upstream - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/contribuer-a-rustwarden.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="contribuer-à-rustwarden"><a class="header" href="#contribuer-à-rustwarden">Contribuer à rustwarden</a></h1> | |
| 181 | +<p>Ce document décrit les interactions entre gitrust et le framework rustwarden-core, et explique comment étendre le framework côté gitrust sans modifier ses sources.</p> | |
| 182 | +<h2 id="services-framework-utilisés"><a class="header" href="#services-framework-utilisés">Services framework utilisés</a></h2> | |
| 183 | +<div class="table-wrapper"> | |
| 184 | +<table> | |
| 185 | +<thead> | |
| 186 | +<tr><th>Service</th><th>Usage dans gitrust</th></tr> | |
| 187 | +</thead> | |
| 188 | +<tbody> | |
| 189 | +<tr><td><code>UserService</code></td><td>CRUD users, roles, <code>delete_user</code>, <code>admin_reset_password</code>, <code>change_password_direct</code>, <code>unassign_role_from_user</code></td></tr> | |
| 190 | +<tr><td><code>RoleService</code></td><td>Liste/création/suppression roles, <code>get_role_by_name</code></td></tr> | |
| 191 | +<tr><td><code>PasswordService</code></td><td><code>hash_password</code> (async), <code>verify_password</code> (async), <code>generate_secure_password</code></td></tr> | |
| 192 | +<tr><td><code>ResourceService</code></td><td><code>register</code>/<code>unregister</code> repos, <code>set_public</code>, <code>effective_permission</code>, <code>find_by_type_and_id</code></td></tr> | |
| 193 | +<tr><td><code>AuthService</code></td><td><code>authenticate_user</code> (login)</td></tr> | |
| 194 | +<tr><td><code>JwtService</code></td><td><code>generate_token</code> (login)</td></tr> | |
| 195 | +<tr><td><code>EmailValidationService</code></td><td>Vérification email</td></tr> | |
| 196 | +<tr><td><code>PasswordResetService</code></td><td>Flux “mot de passe oublié”</td></tr> | |
| 197 | +<tr><td><code>AppSettingsService</code></td><td><code>get_bool</code> pour <code>registration_enabled</code></td></tr> | |
| 198 | +</tbody> | |
| 199 | +</table> | |
| 200 | +</div> | |
| 201 | +<h2 id="hook-on_user_deleted-implémenté"><a class="header" href="#hook-on_user_deleted-implémenté">Hook <code>on_user_deleted</code> implémenté</a></h2> | |
| 202 | +<p>Le hook <code>on_user_deleted</code> dans <code>gitrust-hooks</code> supprime le répertoire utilisateur sur le filesystem (<code>repos_base_path/username/</code>) avant la cascade DB. Appelé automatiquement par <code>UserService::delete_user</code>.</p> | |
| 203 | +<h2 id="règle-fondamentale"><a class="header" href="#règle-fondamentale">Règle fondamentale</a></h2> | |
| 204 | +<p><strong>Ne jamais modifier <code>crates/rustwarden-core/</code>.</strong> Ce crate est le framework partagé. Toute extension passe par :</p> | |
| 205 | +<ul> | |
| 206 | +<li>Des <strong>wrappers</strong> côté <code>gitrust-core</code> (services qui délèguent au framework)</li> | |
| 207 | +<li>Des <strong>trait impls</strong> (<code>RustwardenHooks</code> dans <code>gitrust-hooks</code>)</li> | |
| 208 | +<li>Des <strong>extensions</strong> via les mécanismes d’injection Axum (<code>Extension</code>, <code>State</code>)</li> | |
| 209 | +</ul> | |
| 210 | +<h2 id="aucun-contournement-en-cours"><a class="header" href="#aucun-contournement-en-cours">Aucun contournement en cours</a></h2> | |
| 211 | +<p>Tous les anciens contournements (entités directes, hash manuels) ont été remplacés par les services du framework suite à la mise à jour du 2026-03-26.</p> | |
| 212 | +<h2 id="ajouter-une-fonctionnalité-nécessitant-un-service-framework-absent"><a class="header" href="#ajouter-une-fonctionnalité-nécessitant-un-service-framework-absent">Ajouter une fonctionnalité nécessitant un service framework absent</a></h2> | |
| 213 | +<p>Si un service nécessaire n’existe pas dans rustwarden-core :</p> | |
| 214 | +<ol> | |
| 215 | +<li>Implémenter le service côté <code>gitrust-core</code> en réutilisant les primitives du framework (ex: <code>PasswordService::hash_password</code> pour le hashage)</li> | |
| 216 | +<li>Si la fonctionnalité est générique et bénéficierait au framework lui-même, ouvrir une issue ou une PR upstream sur le dépôt rustwarden-core</li> | |
| 217 | +<li>Ne pas dupliquer la logique d’auth, de session, ou de JWT — ces domaines appartiennent exclusivement au framework</li> | |
| 218 | +</ol> | |
| 219 | +<h2 id="pattern-dextension-via-hooks"><a class="header" href="#pattern-dextension-via-hooks">Pattern d’extension via hooks</a></h2> | |
| 220 | +<p>Les hooks (<code>gitrust-hooks/src/lib.rs</code>) implémentent <code>RustwardenHooks</code> et sont injectés dans le routeur Axum au démarrage :</p> | |
| 221 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 222 | +</span><span class="boring">fn main() { | |
| 223 | +</span>// Dans main.rs | |
| 224 | +let hooks = Arc::new(GitrustHooks::new(config.clone())); | |
| 225 | +// Passé via .merge_routes(app_routes(hooks)) | |
| 226 | +// Puis disponible via axum::Extension dans les handlers | |
| 227 | +<span class="boring">}</span></code></pre> | |
| 228 | +<p>Pour réagir à un nouvel événement du framework, ajouter la méthode correspondante dans l’impl <code>RustwardenHooks</code> de <code>gitrust-hooks</code>, sans toucher au code du framework qui émet l’événement.</p> | |
| 229 | + | |
| 230 | + </main> | |
| 231 | + | |
| 232 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 233 | + <!-- Mobile navigation buttons --> | |
| 234 | + <a rel="prev" href="../../developer_manual/how-to/importer-depot-externe-code.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 235 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 236 | + </a> | |
| 237 | + | |
| 238 | + <a rel="next prefetch" href="../../developer_manual/how-to/passer-la-qa-avant-merge.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 239 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 240 | + </a> | |
| 241 | + | |
| 242 | + <div style="clear: both"></div> | |
| 243 | + </nav> | |
| 244 | + </div> | |
| 245 | + </div> | |
| 246 | + | |
| 247 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 248 | + <a rel="prev" href="../../developer_manual/how-to/importer-depot-externe-code.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 249 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 250 | + </a> | |
| 251 | + | |
| 252 | + <a rel="next prefetch" href="../../developer_manual/how-to/passer-la-qa-avant-merge.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 253 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 254 | + </a> | |
| 255 | + </nav> | |
| 256 | + | |
| 257 | + </div> | |
| 258 | + | |
| 259 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 260 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 261 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 262 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 263 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + <script> | |
| 268 | + window.playground_copyable = true; | |
| 269 | + </script> | |
| 270 | + | |
| 271 | + | |
| 272 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 273 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 274 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 275 | + | |
| 276 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 277 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 278 | + <script src="../../book-a0b12cfe.js"></script> | |
| 279 | + | |
| 280 | + <!-- Custom JS scripts --> | |
| 281 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 282 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + </div> | |
| 287 | + </body> | |
| 288 | +</html> |
A
book/developer_manual/how-to/contribuer-workflow-pr.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Workflow de contribution et PR - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/contribuer-workflow-pr.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="workflow-de-contribution-et-pr"><a class="header" href="#workflow-de-contribution-et-pr">Workflow de contribution et PR</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/how-to/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/how-to/lancer-tests-unitaires.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/how-to/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/how-to/lancer-tests-unitaires.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/how-to/implementer-endpoint-api.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Implémenter un endpoint API - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/implementer-endpoint-api.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="implémenter-un-endpoint-api"><a class="header" href="#implémenter-un-endpoint-api">Implémenter un endpoint API</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/how-to/implementer-webhooks.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/how-to/importer-depot-externe-code.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/how-to/implementer-webhooks.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/how-to/importer-depot-externe-code.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/how-to/implementer-webhooks.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Implémenter des webhooks - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/implementer-webhooks.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="implémenter-des-webhooks"><a class="header" href="#implémenter-des-webhooks">Implémenter des webhooks</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/how-to/ajouter-migration-db.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/how-to/implementer-endpoint-api.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/how-to/ajouter-migration-db.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/how-to/implementer-endpoint-api.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/how-to/importer-depot-externe-code.html
+422
-0
@@ -0,0 +1,422 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Importer un dépôt externe (code) - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/importer-depot-externe-code.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="importer-un-dépôt-externe"><a class="header" href="#importer-un-dépôt-externe">Importer un dépôt externe</a></h1> | |
| 181 | +<p>Référence du flux d’import de dépôts externes dans gitrust : rôle de la base de données, schéma de séquence complet et pistes d’optimisation.</p> | |
| 182 | +<h2 id="1-rôle-de-la-base-de-données"><a class="header" href="#1-rôle-de-la-base-de-données">1. Rôle de la base de données</a></h2> | |
| 183 | +<p>Pendant un import, la DB sert <strong>quatre fonctions distinctes</strong> :</p> | |
| 184 | +<div class="table-wrapper"> | |
| 185 | +<table> | |
| 186 | +<thead> | |
| 187 | +<tr><th>Rôle</th><th>Table</th><th>Fréquence</th></tr> | |
| 188 | +</thead> | |
| 189 | +<tbody> | |
| 190 | +<tr><td><strong>File d’attente persistante</strong></td><td><code>import_jobs</code></td><td>1 INSERT à la création</td></tr> | |
| 191 | +<tr><td><strong>Suivi d’état pour l’UI</strong></td><td><code>import_jobs</code></td><td>1 UPDATE toutes les ~1.5 s</td></tr> | |
| 192 | +<tr><td><strong>Enregistrement final du dépôt</strong></td><td><code>repositories</code> + <code>resources</code></td><td>2 INSERT à la fin</td></tr> | |
| 193 | +<tr><td><strong>Journal d’audit</strong></td><td><code>audit_log</code></td><td>1 INSERT à la fin</td></tr> | |
| 194 | +</tbody> | |
| 195 | +</table> | |
| 196 | +</div> | |
| 197 | +<p>Le clone lui-même ne passe <strong>jamais</strong> par la DB : seuls les métadonnées et compteurs de progression y transitent. Les objets Git sont écrits directement sur disque dans <code>{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/</code>.</p> | |
| 198 | +<h3 id="pourquoi-persister-létat-"><a class="header" href="#pourquoi-persister-létat-">Pourquoi persister l’état ?</a></h3> | |
| 199 | +<ul> | |
| 200 | +<li><strong>Reprise après redémarrage</strong> : le serveur peut crasher pendant un clone de plusieurs minutes. La table permet de marquer ces jobs comme <code>failed</code> au redémarrage.</li> | |
| 201 | +<li><strong>SSE</strong> : l’UI lit la progression via un endpoint SSE qui interroge la DB toutes les 2 s. Sans DB, il faudrait un canal in-memory plus un mécanisme de routage vers le bon client.</li> | |
| 202 | +<li><strong>Multi-navigateurs</strong> : si l’utilisateur ferme l’onglet puis le rouvre, il retrouve l’état exact du job.</li> | |
| 203 | +<li><strong>Audit / historique</strong> : conservation des imports passés avec leurs statistiques.</li> | |
| 204 | +</ul> | |
| 205 | +<h2 id="2-schéma-du-flux-actuel"><a class="header" href="#2-schéma-du-flux-actuel">2. Schéma du flux actuel</a></h2> | |
| 206 | +<pre class="mermaid">sequenceDiagram | |
| 207 | + autonumber | |
| 208 | + participant UI as Navigateur | |
| 209 | + participant H as Handler HTTP | |
| 210 | + participant Svc as ImportService | |
| 211 | + participant Chan as mpsc Channel | |
| 212 | + participant W as ImportWorker | |
| 213 | + participant G as git2 (libgit2) | |
| 214 | + participant DB as PostgreSQL | |
| 215 | + participant FS as Disque | |
| 216 | + | |
| 217 | + UI->>H: POST /import<br/>(url, slug, pat) | |
| 218 | + H->>Svc: create_job | |
| 219 | + Svc->>DB: INSERT import_jobs (pending) | |
| 220 | + H->>Chan: try_send(ImportTask+PAT) | |
| 221 | + H-->>UI: 302 /imports/{id} | |
| 222 | + | |
| 223 | + UI->>H: GET /imports/{id}/stream (SSE) | |
| 224 | + Note over UI,H: EventSource ouvert | |
| 225 | + | |
| 226 | + Chan->>W: ImportTask | |
| 227 | + W->>Svc: mark_running | |
| 228 | + Svc->>DB: SELECT import_jobs<br/>UPDATE status=running | |
| 229 | + | |
| 230 | + W->>G: RepoBuilder.bare(true).clone() | |
| 231 | + G->>FS: init_bare + fetch | |
| 232 | + loop callbacks transfer_progress (flood) | |
| 233 | + G-->>W: stats (objets/bytes) | |
| 234 | + alt throttle 1500 ms écoulé | |
| 235 | + W->>Svc: update_progress (tokio::spawn) | |
| 236 | + Svc->>DB: SELECT + UPDATE import_jobs | |
| 237 | + else dans le throttle | |
| 238 | + W--xW: ignore | |
| 239 | + end | |
| 240 | + end | |
| 241 | + | |
| 242 | + loop toutes les 2 s | |
| 243 | + H->>DB: SELECT import_jobs WHERE id=? | |
| 244 | + DB-->>H: état courant | |
| 245 | + H-->>UI: SSE event (JSON) | |
| 246 | + UI->>UI: bar.value = percent | |
| 247 | + end | |
| 248 | + | |
| 249 | + G-->>FS: objets écrits | |
| 250 | + G-->>W: Ok | |
| 251 | + | |
| 252 | + W->>Svc: check cancel (SELECT import_jobs) | |
| 253 | + W->>Svc: update_progress (Finalizing) | |
| 254 | + Svc->>DB: SELECT + UPDATE | |
| 255 | + | |
| 256 | + W->>RepositoryService: create | |
| 257 | + RepositoryService->>DB: INSERT resources<br/>INSERT repositories | |
| 258 | + W->>DB: UPDATE repositories<br/>(import_source_url, is_empty=false) | |
| 259 | + W->>Svc: mark_success | |
| 260 | + Svc->>DB: SELECT + UPDATE import_jobs<br/>(status=success, duration) | |
| 261 | + W->>AuditService: log REPO_IMPORTED | |
| 262 | + AuditService->>DB: INSERT audit_log | |
| 263 | + | |
| 264 | + H->>DB: SELECT (prochain tick SSE) | |
| 265 | + H-->>UI: terminal=true | |
| 266 | + UI->>UI: window.location.reload() | |
| 267 | +</pre> | |
| 268 | + | |
| 269 | +<h2 id="3-coût-db-par-import"><a class="header" href="#3-coût-db-par-import">3. Coût DB par import</a></h2> | |
| 270 | +<p>Pour un clone de <strong>90 secondes</strong> avec throttle 1500 ms :</p> | |
| 271 | +<div class="table-wrapper"> | |
| 272 | +<table> | |
| 273 | +<thead> | |
| 274 | +<tr><th>Étape</th><th>Opérations DB</th><th>Cumul</th></tr> | |
| 275 | +</thead> | |
| 276 | +<tbody> | |
| 277 | +<tr><td>create_job</td><td>1 INSERT</td><td>1</td></tr> | |
| 278 | +<tr><td>mark_running</td><td>1 SELECT + 1 UPDATE</td><td>3</td></tr> | |
| 279 | +<tr><td>update_progress pendant clone</td><td>~60 x (1 SELECT + 1 UPDATE)</td><td>123</td></tr> | |
| 280 | +<tr><td>check cancel</td><td>1 SELECT</td><td>124</td></tr> | |
| 281 | +<tr><td>update_progress finalizing</td><td>1 SELECT + 1 UPDATE</td><td>126</td></tr> | |
| 282 | +<tr><td>RepositoryService::create</td><td>2 INSERT (repo + resource)</td><td>128</td></tr> | |
| 283 | +<tr><td>update repositories</td><td>1 UPDATE</td><td>129</td></tr> | |
| 284 | +<tr><td>mark_success</td><td>1 SELECT + 1 UPDATE</td><td>131</td></tr> | |
| 285 | +<tr><td>audit log</td><td>1 INSERT</td><td>132</td></tr> | |
| 286 | +<tr><td>SSE stream (45 ticks à 2 s)</td><td>45 SELECT</td><td>177</td></tr> | |
| 287 | +</tbody> | |
| 288 | +</table> | |
| 289 | +</div> | |
| 290 | +<p><strong>~177 requêtes pour un import</strong>, dont <strong>120+ sont des progress updates</strong>.</p> | |
| 291 | +<h2 id="4-pistes-doptimisation-sans-changer-libgit2"><a class="header" href="#4-pistes-doptimisation-sans-changer-libgit2">4. Pistes d’optimisation (sans changer libgit2)</a></h2> | |
| 292 | +<h3 id="41-éliminer-le-select-avant-update-dans-update_progress"><a class="header" href="#41-éliminer-le-select-avant-update-dans-update_progress">4.1 Éliminer le SELECT avant UPDATE dans <code>update_progress</code></a></h3> | |
| 293 | +<p><code>update_progress</code> fait actuellement <code>load_model</code> (SELECT) puis <code>active.update(db)</code> (UPDATE + RETURNING). Le SELECT est redondant : on connaît l’ID, on veut juste patcher 4 colonnes.</p> | |
| 294 | +<p><strong>Gain</strong> : divise par 2 les requêtes de progression (~60 requêtes en moins pour un clone de 90 s).</p> | |
| 295 | +<p>Refonte suggérée avec <code>UpdateMany</code> (pattern déjà utilisé dans <code>ci_service.rs::cancel_running_pipelines</code>) :</p> | |
| 296 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 297 | +</span><span class="boring">fn main() { | |
| 298 | +</span>import_job::Entity::update_many() | |
| 299 | + .col_expr(Column::ReceivedObjects, Expr::value(received as i32)) | |
| 300 | + .col_expr(Column::TotalObjects, Expr::value(total as i32)) | |
| 301 | + .col_expr(Column::ReceivedBytes, Expr::value(bytes as i64)) | |
| 302 | + .col_expr(Column::Phase, Expr::value(phase.as_str())) | |
| 303 | + .col_expr(Column::UpdatedAt, Expr::value(Utc::now())) | |
| 304 | + .filter(Column::Id.eq(job_id)) | |
| 305 | + .exec(db) | |
| 306 | + .await?; | |
| 307 | +<span class="boring">}</span></code></pre> | |
| 308 | +<p>Même principe pour <code>mark_running</code>, <code>mark_success</code>, <code>mark_failed</code>, <code>mark_cancelled</code> → toutes divisent leurs aller-retours DB par 2.</p> | |
| 309 | +<h3 id="42-downsampler-la-progression-dans-le-worker-dédié"><a class="header" href="#42-downsampler-la-progression-dans-le-worker-dédié">4.2 Downsampler la progression dans le worker (dédié)</a></h3> | |
| 310 | +<p>Plan alternatif : le callback écrit simplement dans un <code>tokio::sync::watch<TransferStats></code> (en mémoire, zéro DB). Une <strong>tâche dédiée</strong> consomme ce channel et UPDATE la DB à 1 Hz seulement.</p> | |
| 311 | +<pre class="mermaid">flowchart LR | |
| 312 | + G[git2 callback] -->|watch::send<br/>très haute fréquence| W[watch channel] | |
| 313 | + W --> T[Tâche update<br/>ticker 1 Hz] | |
| 314 | + T -->|1 UPDATE / s| DB | |
| 315 | +</pre> | |
| 316 | + | |
| 317 | +<p><strong>Gains</strong> :</p> | |
| 318 | +<ul> | |
| 319 | +<li><strong>1 seul émetteur DB</strong> au lieu de N tokio::spawn concurrents → zéro contention sur le pool</li> | |
| 320 | +<li><strong>Fréquence déterministe</strong> (1 Hz) indépendante de la vitesse réseau</li> | |
| 321 | +<li>Code plus clair (la tâche est async, on peut <code>await</code> sans détour)</li> | |
| 322 | +</ul> | |
| 323 | +<h3 id="43-supprimer-le-returning-implicite-de-seaorm"><a class="header" href="#43-supprimer-le-returning-implicite-de-seaorm">4.3 Supprimer le <code>RETURNING</code> implicite de SeaORM</a></h3> | |
| 324 | +<p><code>ActiveModel::update(db)</code> renvoie le modèle complet via <code>... RETURNING *</code>. Pour les progress updates, on n’utilise pas le retour. <code>UpdateMany::exec</code> n’émet pas de <code>RETURNING</code> → moins de bytes sur le wire, moins de désérialisation.</p> | |
| 325 | +<h3 id="44-pool-db-dédié-pour-le-worker"><a class="header" href="#44-pool-db-dédié-pour-le-worker">4.4 Pool DB dédié pour le worker</a></h3> | |
| 326 | +<p>Aujourd’hui le worker partage le pool principal avec les handlers HTTP. Un pool de 4-8 connexions dédié au worker éviterait qu’un import sature le pool et fasse timeouter les requêtes utilisateur.</p> | |
| 327 | +<h3 id="45-debouncer-le-sse-côté-serveur"><a class="header" href="#45-debouncer-le-sse-côté-serveur">4.5 Debouncer le SSE côté serveur</a></h3> | |
| 328 | +<p>Le SSE SELECT toutes les 2 s même quand rien ne change. Alternative : <strong>PostgreSQL LISTEN/NOTIFY</strong> sur une chaîne <code>import_job_{uuid}</code>. Chaque UPDATE émet un NOTIFY, la connexion SSE fait LISTEN → push direct, zéro polling.</p> | |
| 329 | +<p><strong>Coût</strong> : nécessite une connexion DB dédiée par SSE (LISTEN est stateful). Compromis à évaluer.</p> | |
| 330 | +<h2 id="5-optimisation-majeure--shell-out-vers-git-clone---bare"><a class="header" href="#5-optimisation-majeure--shell-out-vers-git-clone---bare">5. Optimisation majeure : shell-out vers <code>git clone --bare</code></a></h2> | |
| 331 | +<p><strong>Indépendant des optimisations DB</strong> mais de loin le plus gros gain. libgit2 est structurellement 2-5x plus lent que <code>git</code> CLI sur gros clones HTTPS (pas de multiplexage, résolution de deltas mono-threadée, etc.).</p> | |
| 332 | +<pre class="mermaid">flowchart TB | |
| 333 | + subgraph Actuel[Flux actuel — libgit2] | |
| 334 | + A1[RepoBuilder::clone] --> A2[libgit2: fetch + resolve] | |
| 335 | + A2 -->|lent 2-5x| A3[bare repo] | |
| 336 | + end | |
| 337 | + subgraph Cible[Flux optimisé — git CLI] | |
| 338 | + B1[Command::new git] --> B2[git clone --bare --progress] | |
| 339 | + B2 -->|stderr| B3[Parser regex<br/>Receiving objects: X%] | |
| 340 | + B3 --> B4[update watch channel] | |
| 341 | + B2 -->|vitesse native| B5[bare repo] | |
| 342 | + end | |
| 343 | +</pre> | |
| 344 | + | |
| 345 | +<p>Avantages :</p> | |
| 346 | +<ul> | |
| 347 | +<li><strong>Vitesse native</strong> (parité avec <code>git</code> CLI)</li> | |
| 348 | +<li><strong>Progression native</strong> via stderr <code>Receiving objects: 42% (368/876), 1.10 MiB | 2.05 MiB/s</code></li> | |
| 349 | +<li><strong>HEAD correctement positionné</strong> (plus besoin du workaround <code>RepoBuilder</code>)</li> | |
| 350 | +<li><strong>Moins de dépendance sur libgit2</strong> pour le cas du clone initial</li> | |
| 351 | +</ul> | |
| 352 | +<p>Contrepartie : binaire <code>git</code> requis sur le serveur (déjà le cas — utilisé par <code>SbomService::git_archive</code>).</p> | |
| 353 | +<h2 id="6-priorités-recommandées"><a class="header" href="#6-priorités-recommandées">6. Priorités recommandées</a></h2> | |
| 354 | +<p>Si on voulait optimiser maintenant, ordre proposé :</p> | |
| 355 | +<ol> | |
| 356 | +<li><strong>Shell-out <code>git clone --bare</code></strong> — gain réel pour l’utilisateur (clone 3-5x plus rapide).</li> | |
| 357 | +<li><strong><code>update_many</code> pour <code>update_progress</code></strong> — divise la pression DB par 2, changement mécanique de ~20 lignes.</li> | |
| 358 | +<li><strong><code>watch</code> channel + tâche 1 Hz</strong> — architecture plus propre, élimine les problèmes de pool.</li> | |
| 359 | +<li><strong>Pool DB dédié worker</strong> — filet de sécurité opérationnel.</li> | |
| 360 | +<li>LISTEN/NOTIFY pour SSE — seulement si beaucoup de clients simultanés.</li> | |
| 361 | +</ol> | |
| 362 | +<p>Les gains 2-4 sont utiles même avec libgit2 ; le gain 1 est le plus visible pour l’utilisateur final.</p> | |
| 363 | + | |
| 364 | + </main> | |
| 365 | + | |
| 366 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 367 | + <!-- Mobile navigation buttons --> | |
| 368 | + <a rel="prev" href="../../developer_manual/how-to/implementer-endpoint-api.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 369 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 370 | + </a> | |
| 371 | + | |
| 372 | + <a rel="next prefetch" href="../../developer_manual/how-to/contribuer-a-rustwarden.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 373 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 374 | + </a> | |
| 375 | + | |
| 376 | + <div style="clear: both"></div> | |
| 377 | + </nav> | |
| 378 | + </div> | |
| 379 | + </div> | |
| 380 | + | |
| 381 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 382 | + <a rel="prev" href="../../developer_manual/how-to/implementer-endpoint-api.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 383 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 384 | + </a> | |
| 385 | + | |
| 386 | + <a rel="next prefetch" href="../../developer_manual/how-to/contribuer-a-rustwarden.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 387 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 388 | + </a> | |
| 389 | + </nav> | |
| 390 | + | |
| 391 | + </div> | |
| 392 | + | |
| 393 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 394 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 395 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 396 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 397 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + <script> | |
| 402 | + window.playground_copyable = true; | |
| 403 | + </script> | |
| 404 | + | |
| 405 | + | |
| 406 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 407 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 408 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 409 | + | |
| 410 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 411 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 412 | + <script src="../../book-a0b12cfe.js"></script> | |
| 413 | + | |
| 414 | + <!-- Custom JS scripts --> | |
| 415 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 416 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + </div> | |
| 421 | + </body> | |
| 422 | +</html> |
A
book/developer_manual/how-to/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Guides pratiques - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="guides-pratiques"><a class="header" href="#guides-pratiques">Guides pratiques</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/tutorials/03-creer-un-worker-async.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/how-to/contribuer-workflow-pr.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/tutorials/03-creer-un-worker-async.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/how-to/contribuer-workflow-pr.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/how-to/lancer-tests-e2e.html
+390
-0
@@ -0,0 +1,390 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Lancer les tests E2E - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/lancer-tests-e2e.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="lancer-les-tests-end-to-end-e2e"><a class="header" href="#lancer-les-tests-end-to-end-e2e">Lancer les tests end-to-end (E2E)</a></h1> | |
| 181 | +<p>Les tests E2E de gitrust utilisent <strong>Playwright</strong> pour piloter un navigateur Chromium contre une instance de l’application configurée avec une base de données et un répertoire de dépôts dédiés.</p> | |
| 182 | +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2> | |
| 183 | +<ul> | |
| 184 | +<li>Node.js (déjà présent pour Tailwind/DaisyUI)</li> | |
| 185 | +<li>PostgreSQL accessible en local (Docker via <code>database/docker-compose.yml</code>)</li> | |
| 186 | +<li><code>psql</code>, <code>createdb</code>, <code>dropdb</code> disponibles dans le PATH</li> | |
| 187 | +<li>Chromium installé via Playwright (<code>npx playwright install chromium</code>)</li> | |
| 188 | +</ul> | |
| 189 | +<h2 id="commandes"><a class="header" href="#commandes">Commandes</a></h2> | |
| 190 | +<pre><code class="language-bash"># Créer (ou remettre à zéro) la base de données de test | |
| 191 | +npm run test:e2e:setup | |
| 192 | + | |
| 193 | +# Lancer tous les tests E2E | |
| 194 | +npm run test:e2e | |
| 195 | + | |
| 196 | +# Mode debug interactif (inspecteur Playwright, pas-à-pas) | |
| 197 | +npm run test:e2e:debug | |
| 198 | + | |
| 199 | +# Mode UI (interface graphique Playwright) | |
| 200 | +npm run test:e2e:ui | |
| 201 | + | |
| 202 | +# Consulter le rapport HTML après exécution | |
| 203 | +npm run test:e2e:report | |
| 204 | +</code></pre> | |
| 205 | +<h2 id="architecture"><a class="header" href="#architecture">Architecture</a></h2> | |
| 206 | +<pre><code>.env.test # Variables d'environnement de test | |
| 207 | +playwright.config.ts # Configuration Playwright | |
| 208 | + | |
| 209 | +scripts/ | |
| 210 | + e2e-setup-db.sh # Crée la DB gitrust_test + nettoie depot_test | |
| 211 | + e2e-server.sh # Démarre l'app avec .env.test | |
| 212 | + | |
| 213 | +tests/e2e/ | |
| 214 | + fixtures.ts # Fixtures partagées (loginAs, credentials) | |
| 215 | + global-setup.ts # Seed : crée les utilisateurs via /register | |
| 216 | + global-teardown.ts # Nettoyage post-tests | |
| 217 | + auth.spec.ts # Tests d'authentification | |
| 218 | + repository.spec.ts # Tests de gestion des dépôts | |
| 219 | + admin.spec.ts # Tests du panneau d'administration | |
| 220 | + navigation.spec.ts # Tests de navigation et UI | |
| 221 | +</code></pre> | |
| 222 | +<h3 id="isolation-de-lenvironnement-de-test"><a class="header" href="#isolation-de-lenvironnement-de-test">Isolation de l’environnement de test</a></h3> | |
| 223 | +<div class="table-wrapper"> | |
| 224 | +<table> | |
| 225 | +<thead> | |
| 226 | +<tr><th>Ressource</th><th>Développement</th><th>Tests E2E</th></tr> | |
| 227 | +</thead> | |
| 228 | +<tbody> | |
| 229 | +<tr><td>Base de données</td><td><code>gitrust</code></td><td><code>gitrust_test</code></td></tr> | |
| 230 | +<tr><td>Port HTTP</td><td><code>4000</code></td><td><code>4001</code></td></tr> | |
| 231 | +<tr><td>Port SSH</td><td><code>2222</code></td><td><code>2223</code></td></tr> | |
| 232 | +<tr><td>Dépôts Git</td><td><code>./data/repos/</code></td><td><code>./depot_test/</code></td></tr> | |
| 233 | +<tr><td>Rate limiting</td><td>Standard</td><td>Relâché (×20)</td></tr> | |
| 234 | +<tr><td>Validation email</td><td>Activée</td><td>Désactivée</td></tr> | |
| 235 | +</tbody> | |
| 236 | +</table> | |
| 237 | +</div> | |
| 238 | +<h3 id="fonctionnement"><a class="header" href="#fonctionnement">Fonctionnement</a></h3> | |
| 239 | +<ol> | |
| 240 | +<li><strong><code>npm run test:e2e:setup</code></strong> supprime puis recrée la base <code>gitrust_test</code> et vide <code>depot_test/</code>.</li> | |
| 241 | +<li><strong>Playwright</strong> démarre automatiquement l’application via <code>scripts/e2e-server.sh</code>, qui charge les variables de <code>.env.test</code> avant d’exécuter <code>cargo run</code>.</li> | |
| 242 | +<li>Le <strong>global-setup</strong> crée les utilisateurs de test (alice, bob, charlie) en passant par le formulaire <code>/register</code> — approche 100% E2E, aucune insertion directe en base.</li> | |
| 243 | +<li>Les <strong>tests</strong> s’exécutent séquentiellement (un seul worker) pour éviter les conflits sur la DB partagée.</li> | |
| 244 | +<li>Le <strong>global-teardown</strong> est exécuté à la fin de la session.</li> | |
| 245 | +</ol> | |
| 246 | +<h3 id="fixtures"><a class="header" href="#fixtures">Fixtures</a></h3> | |
| 247 | +<p>Le fichier <code>fixtures.ts</code> fournit une fixture <code>loginAs</code> réutilisable dans tous les tests :</p> | |
| 248 | +<pre><code class="language-typescript">import { test, expect } from './fixtures'; | |
| 249 | + | |
| 250 | +test('mon test', async ({ page, loginAs }) => { | |
| 251 | + await loginAs('alice'); | |
| 252 | + // alice est connectée, on peut naviguer | |
| 253 | +}); | |
| 254 | +</code></pre> | |
| 255 | +<p>Utilisateurs disponibles : <code>admin</code>, <code>alice</code>, <code>bob</code>, <code>charlie</code>.</p> | |
| 256 | +<h2 id="liste-des-tests"><a class="header" href="#liste-des-tests">Liste des tests</a></h2> | |
| 257 | +<h3 id="authspects--authentification"><a class="header" href="#authspects--authentification"><code>auth.spec.ts</code> — Authentification</a></h3> | |
| 258 | +<div class="table-wrapper"> | |
| 259 | +<table> | |
| 260 | +<thead> | |
| 261 | +<tr><th>Test</th><th>Description</th></tr> | |
| 262 | +</thead> | |
| 263 | +<tbody> | |
| 264 | +<tr><td>login avec des identifiants valides</td><td>Vérifie le login standard et la redirection vers <code>/dashboard</code></td></tr> | |
| 265 | +<tr><td>login avec un mauvais mot de passe</td><td>Vérifie l’affichage d’un message d’erreur</td></tr> | |
| 266 | +<tr><td>login avec un utilisateur inexistant</td><td>Vérifie le rejet d’un username inconnu</td></tr> | |
| 267 | +<tr><td>logout déconnecte l’utilisateur</td><td>Vérifie la déconnexion et l’impossibilité d’accéder au dashboard</td></tr> | |
| 268 | +<tr><td>accès au dashboard sans login redirige vers login</td><td>Vérifie la protection des routes authentifiées</td></tr> | |
| 269 | +<tr><td>option remember me est présente</td><td>Vérifie la présence de la checkbox remember_me</td></tr> | |
| 270 | +<tr><td>formulaire d’inscription est accessible</td><td>Vérifie la présence de tous les champs du formulaire</td></tr> | |
| 271 | +<tr><td>inscription avec username déjà pris échoue</td><td>Vérifie l’unicité des usernames</td></tr> | |
| 272 | +<tr><td>inscription avec mots de passe différents échoue</td><td>Vérifie la validation de confirmation du mot de passe</td></tr> | |
| 273 | +</tbody> | |
| 274 | +</table> | |
| 275 | +</div> | |
| 276 | +<h3 id="repositoryspects--gestion-des-dépôts"><a class="header" href="#repositoryspects--gestion-des-dépôts"><code>repository.spec.ts</code> — Gestion des dépôts</a></h3> | |
| 277 | +<div class="table-wrapper"> | |
| 278 | +<table> | |
| 279 | +<thead> | |
| 280 | +<tr><th>Test</th><th>Description</th></tr> | |
| 281 | +</thead> | |
| 282 | +<tbody> | |
| 283 | +<tr><td>créer un dépôt avec nom et description</td><td>Crée un dépôt complet et vérifie la redirection</td></tr> | |
| 284 | +<tr><td>créer un dépôt sans description</td><td>Vérifie que la description est optionnelle</td></tr> | |
| 285 | +<tr><td>créer un dépôt avec un nom déjà pris échoue</td><td>Vérifie l’unicité des slugs par utilisateur</td></tr> | |
| 286 | +<tr><td>le formulaire de création nécessite un login</td><td>Vérifie la protection de la route <code>/new</code></td></tr> | |
| 287 | +<tr><td>le dashboard liste les dépôts de l’utilisateur</td><td>Vérifie l’affichage des dépôts sur le dashboard</td></tr> | |
| 288 | +<tr><td>un dépôt public est accessible sans login</td><td>Vérifie l’accès anonyme aux dépôts publics</td></tr> | |
| 289 | +</tbody> | |
| 290 | +</table> | |
| 291 | +</div> | |
| 292 | +<h3 id="adminspects--administration"><a class="header" href="#adminspects--administration"><code>admin.spec.ts</code> — Administration</a></h3> | |
| 293 | +<div class="table-wrapper"> | |
| 294 | +<table> | |
| 295 | +<thead> | |
| 296 | +<tr><th>Test</th><th>Description</th></tr> | |
| 297 | +</thead> | |
| 298 | +<tbody> | |
| 299 | +<tr><td>l’admin peut accéder au panneau d’administration</td><td>Vérifie l’accès admin à <code>/admin</code></td></tr> | |
| 300 | +<tr><td>un utilisateur normal ne peut pas accéder à l’admin</td><td>Vérifie le contrôle d’accès</td></tr> | |
| 301 | +<tr><td>lister les utilisateurs</td><td>Vérifie l’affichage de la liste des utilisateurs</td></tr> | |
| 302 | +<tr><td>créer un nouvel utilisateur via l’admin</td><td>Teste le formulaire de création d’utilisateur admin</td></tr> | |
| 303 | +<tr><td>créer un utilisateur avec un username déjà pris échoue</td><td>Vérifie la gestion des doublons côté admin</td></tr> | |
| 304 | +<tr><td>les liens du menu admin sont présents</td><td>Vérifie la navigation du panneau admin</td></tr> | |
| 305 | +</tbody> | |
| 306 | +</table> | |
| 307 | +</div> | |
| 308 | +<h3 id="navigationspects--navigation-et-ui"><a class="header" href="#navigationspects--navigation-et-ui"><code>navigation.spec.ts</code> — Navigation et UI</a></h3> | |
| 309 | +<div class="table-wrapper"> | |
| 310 | +<table> | |
| 311 | +<thead> | |
| 312 | +<tr><th>Test</th><th>Description</th></tr> | |
| 313 | +</thead> | |
| 314 | +<tbody> | |
| 315 | +<tr><td>la page de login est accessible</td><td>Vérifie le rendu de la page de login</td></tr> | |
| 316 | +<tr><td>la navbar est présente après login</td><td>Vérifie la présence de la barre de navigation</td></tr> | |
| 317 | +<tr><td>le sidebar est présent après login</td><td>Vérifie la présence du menu latéral</td></tr> | |
| 318 | +<tr><td>le lien vers le dashboard fonctionne</td><td>Vérifie la navigation vers le dashboard</td></tr> | |
| 319 | +<tr><td>le lien vers la création de dépôt fonctionne</td><td>Vérifie le lien <code>/new</code></td></tr> | |
| 320 | +<tr><td>la page utilise le thème DaisyUI</td><td>Vérifie la présence de l’attribut <code>data-theme</code></td></tr> | |
| 321 | +</tbody> | |
| 322 | +</table> | |
| 323 | +</div> | |
| 324 | +<h2 id="ajouter-un-nouveau-test"><a class="header" href="#ajouter-un-nouveau-test">Ajouter un nouveau test</a></h2> | |
| 325 | +<ol> | |
| 326 | +<li>Créer un fichier <code>tests/e2e/mon-module.spec.ts</code></li> | |
| 327 | +<li>Importer les fixtures : <code>import { test, expect } from './fixtures';</code></li> | |
| 328 | +<li>Utiliser <code>loginAs</code> pour les tests nécessitant une authentification</li> | |
| 329 | +<li>Lancer avec <code>npm run test:e2e</code> ou cibler le fichier : <code>npx playwright test mon-module</code></li> | |
| 330 | +</ol> | |
| 331 | + | |
| 332 | + </main> | |
| 333 | + | |
| 334 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 335 | + <!-- Mobile navigation buttons --> | |
| 336 | + <a rel="prev" href="../../developer_manual/how-to/lancer-tests-unitaires.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 337 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 338 | + </a> | |
| 339 | + | |
| 340 | + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-route-web.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 341 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 342 | + </a> | |
| 343 | + | |
| 344 | + <div style="clear: both"></div> | |
| 345 | + </nav> | |
| 346 | + </div> | |
| 347 | + </div> | |
| 348 | + | |
| 349 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 350 | + <a rel="prev" href="../../developer_manual/how-to/lancer-tests-unitaires.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 351 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 352 | + </a> | |
| 353 | + | |
| 354 | + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-route-web.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 355 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 356 | + </a> | |
| 357 | + </nav> | |
| 358 | + | |
| 359 | + </div> | |
| 360 | + | |
| 361 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 362 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 363 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 364 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 365 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + <script> | |
| 370 | + window.playground_copyable = true; | |
| 371 | + </script> | |
| 372 | + | |
| 373 | + | |
| 374 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 375 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 376 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 377 | + | |
| 378 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 379 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 380 | + <script src="../../book-a0b12cfe.js"></script> | |
| 381 | + | |
| 382 | + <!-- Custom JS scripts --> | |
| 383 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 384 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + </div> | |
| 389 | + </body> | |
| 390 | +</html> |
A
book/developer_manual/how-to/lancer-tests-unitaires.html
+431
-0
@@ -0,0 +1,431 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Lancer les tests unitaires - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/lancer-tests-unitaires.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="lancer-les-tests-unitaires"><a class="header" href="#lancer-les-tests-unitaires">Lancer les tests unitaires</a></h1> | |
| 181 | +<p>Référence des commandes et de la stratégie de tests pour gitrust.</p> | |
| 182 | +<h2 id="infrastructure-existante"><a class="header" href="#infrastructure-existante">Infrastructure existante</a></h2> | |
| 183 | +<h3 id="tests-unitaires-rust"><a class="header" href="#tests-unitaires-rust">Tests unitaires Rust</a></h3> | |
| 184 | +<pre><code class="language-bash">cargo test --workspace # Tous les tests | |
| 185 | +cargo test -p gitrust-core # Un crate spécifique | |
| 186 | +cargo test -p gitrust-git # Tests Git (tempdir) | |
| 187 | +</code></pre> | |
| 188 | +<p>Les tests unitaires sont intégrés dans chaque crate via <code>#[cfg(test)]</code>.</p> | |
| 189 | +<h3 id="tests-e2e-playwright"><a class="header" href="#tests-e2e-playwright">Tests e2e Playwright</a></h3> | |
| 190 | +<p>17 specs couvrant : auth, admin, repos, issues, labels, teams, tokens, settings, navigation.</p> | |
| 191 | +<pre><code class="language-bash"># Pré-requis (première fois) | |
| 192 | +npm install | |
| 193 | +./scripts/e2e-setup-db.sh # Crée la DB gitrust_test | |
| 194 | + | |
| 195 | +# Lancer les tests | |
| 196 | +npm run test:e2e # Mode headless | |
| 197 | +npm run test:e2e:ui # Mode interactif (navigateur visible) | |
| 198 | +npm run test:e2e:debug # Mode debug | |
| 199 | +npm run test:e2e:report # Voir le rapport HTML | |
| 200 | +</code></pre> | |
| 201 | +<p>Configuration : <code>playwright.config.ts</code> (port 4001, DB <code>gitrust_test</code>, locale <code>fr-FR</code>).</p> | |
| 202 | +<h3 id="structure-des-répertoires"><a class="header" href="#structure-des-répertoires">Structure des répertoires</a></h3> | |
| 203 | +<pre><code>tests/ | |
| 204 | + e2e/ # Specs Playwright (TypeScript) | |
| 205 | + global-setup.ts # Setup : lancer l'app, créer admin | |
| 206 | + global-teardown.ts # Teardown : arrêter l'app | |
| 207 | + fixtures.ts # Fixtures Playwright partagées | |
| 208 | + auth.spec.ts # Tests authentification | |
| 209 | + admin.spec.ts # Tests administration | |
| 210 | + issues.spec.ts # Tests issues | |
| 211 | + ... | |
| 212 | + integration/ # Tests d'intégration Rust (DB réelle) [à créer] | |
| 213 | + fixtures/ # Fichiers de test (repos, configs) [à créer] | |
| 214 | + seeds/ # Seeds Rust pour initialiser la DB de test | |
| 215 | + mod.rs | |
| 216 | + seed.rs | |
| 217 | +</code></pre> | |
| 218 | +<hr> | |
| 219 | +<h2 id="tests-à-ajouter"><a class="header" href="#tests-à-ajouter">Tests à ajouter</a></h2> | |
| 220 | +<h3 id="1-tests-fonctionnels-api-rest-intégration-rust"><a class="header" href="#1-tests-fonctionnels-api-rest-intégration-rust">1. Tests fonctionnels API REST (intégration Rust)</a></h3> | |
| 221 | +<p>Tests avec une DB PostgreSQL réelle pour vérifier les endpoints API.</p> | |
| 222 | +<p><strong>Emplacement</strong> : <code>tests/integration/</code> ou <code>crates/gitrust-web/tests/</code></p> | |
| 223 | +<p><strong>Approche recommandée</strong> : utiliser <code>reqwest</code> + un serveur de test :</p> | |
| 224 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 225 | +</span><span class="boring">fn main() { | |
| 226 | +</span>// tests/integration/api_test.rs | |
| 227 | +use reqwest::Client; | |
| 228 | + | |
| 229 | +#[tokio::test] | |
| 230 | +#[ignore] // Nécessite une DB + serveur running | |
| 231 | +async fn test_api_login() { | |
| 232 | + let client = Client::new(); | |
| 233 | + let res = client.post("http://localhost:4001/api/v1/auth/login") | |
| 234 | + .json(&serde_json::json!({ | |
| 235 | + "login": "admin", | |
| 236 | + "password": "test_password" | |
| 237 | + })) | |
| 238 | + .send() | |
| 239 | + .await | |
| 240 | + .unwrap(); | |
| 241 | + assert_eq!(res.status(), 200); | |
| 242 | +} | |
| 243 | +<span class="boring">}</span></code></pre> | |
| 244 | +<p><strong>Alternative</strong> : <code>axum::test</code> pour tester les handlers sans serveur HTTP :</p> | |
| 245 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 246 | +</span><span class="boring">fn main() { | |
| 247 | +</span>use axum::body::Body; | |
| 248 | +use axum::http::Request; | |
| 249 | +use tower::ServiceExt; | |
| 250 | + | |
| 251 | +#[tokio::test] | |
| 252 | +async fn test_health_check() { | |
| 253 | + let app = create_test_app().await; // Build router with test DB | |
| 254 | + let response = app | |
| 255 | + .oneshot(Request::builder().uri("/api/hello").body(Body::empty()).unwrap()) | |
| 256 | + .await | |
| 257 | + .unwrap(); | |
| 258 | + assert_eq!(response.status(), 200); | |
| 259 | +} | |
| 260 | +<span class="boring">}</span></code></pre> | |
| 261 | +<h3 id="2-tests-fonctionnels-ci"><a class="header" href="#2-tests-fonctionnels-ci">2. Tests fonctionnels CI</a></h3> | |
| 262 | +<div class="table-wrapper"> | |
| 263 | +<table> | |
| 264 | +<thead> | |
| 265 | +<tr><th>Test</th><th>Description</th><th>Priorité</th></tr> | |
| 266 | +</thead> | |
| 267 | +<tbody> | |
| 268 | +<tr><td>CI detection</td><td>Repo avec <code>.gitrust-ci.yml</code> -> Easy, <code>.dagger/</code> -> Power, rien -> None</td><td>Haute</td></tr> | |
| 269 | +<tr><td>Pipeline CRUD</td><td>Créer, lister, mettre à jour, annuler un pipeline</td><td>Haute</td></tr> | |
| 270 | +<tr><td>Config CI</td><td>Activer/désactiver CI, modifier triggers, vérifier effet</td><td>Haute</td></tr> | |
| 271 | +<tr><td>Variables héritage</td><td>Team var + repo var -> merge correct</td><td>Moyenne</td></tr> | |
| 272 | +<tr><td>Auto-cancel</td><td>Nouveau push annule les pipelines en cours</td><td>Moyenne</td></tr> | |
| 273 | +<tr><td>Logs streaming</td><td>Append logs + lecture paginée</td><td>Moyenne</td></tr> | |
| 274 | +<tr><td>Notifications CI</td><td>Pipeline échoue -> notification créée</td><td>Moyenne</td></tr> | |
| 275 | +</tbody> | |
| 276 | +</table> | |
| 277 | +</div> | |
| 278 | +<p><strong>Pour les tests CI</strong> : mocker <code>dagger</code> avec un script shell qui simule success/failure :</p> | |
| 279 | +<pre><code class="language-bash">#!/bin/bash | |
| 280 | +# tests/fixtures/mock-dagger.sh | |
| 281 | +echo "Step 1: Building..." | |
| 282 | +echo "Step 2: Testing..." | |
| 283 | +if [ "$MOCK_FAIL" = "true" ]; then | |
| 284 | + echo "FAILED" >&2 | |
| 285 | + exit 1 | |
| 286 | +fi | |
| 287 | +echo "All checks passed" | |
| 288 | +exit 0 | |
| 289 | +</code></pre> | |
| 290 | +<p>Configurer <code>CI_DAGGER_BIN=tests/fixtures/mock-dagger.sh</code> dans les tests.</p> | |
| 291 | +<h3 id="3-tests-e2e-playwright-à-ajouter"><a class="header" href="#3-tests-e2e-playwright-à-ajouter">3. Tests e2e Playwright à ajouter</a></h3> | |
| 292 | +<p>Nouvelles specs pour les fonctionnalités CI et notifications :</p> | |
| 293 | +<div class="table-wrapper"> | |
| 294 | +<table> | |
| 295 | +<thead> | |
| 296 | +<tr><th>Spec</th><th>Couverture</th></tr> | |
| 297 | +</thead> | |
| 298 | +<tbody> | |
| 299 | +<tr><td><code>ci-pipelines.spec.ts</code></td><td>Liste pipelines, détail, status badges</td></tr> | |
| 300 | +<tr><td><code>ci-config.spec.ts</code></td><td>Config CI (enable/disable, triggers, timeout)</td></tr> | |
| 301 | +<tr><td><code>ci-variables.spec.ts</code></td><td>CRUD variables CI, masquage secrets</td></tr> | |
| 302 | +<tr><td><code>notifications.spec.ts</code></td><td>Liste notifications, marquer lu, préférences</td></tr> | |
| 303 | +<tr><td><code>api-docs.spec.ts</code></td><td>Swagger UI accessible, spec chargée</td></tr> | |
| 304 | +<tr><td><code>i18n.spec.ts</code></td><td>Changement de langue, textes traduits</td></tr> | |
| 305 | +<tr><td><code>docker-smoke.spec.ts</code></td><td><code>docker compose up</code> + smoke test</td></tr> | |
| 306 | +</tbody> | |
| 307 | +</table> | |
| 308 | +</div> | |
| 309 | +<p><strong>Exemple de spec CI</strong> :</p> | |
| 310 | +<pre><code class="language-typescript">// tests/e2e/ci-pipelines.spec.ts | |
| 311 | +import { test, expect } from './fixtures'; | |
| 312 | + | |
| 313 | +test.describe('CI Pipelines', () => { | |
| 314 | + test('affiche la page CI vide', async ({ authenticatedPage }) => { | |
| 315 | + await authenticatedPage.goto('/admin/mon-repo/ci'); | |
| 316 | + await expect(authenticatedPage.locator('text=Aucun pipeline')).toBeVisible(); | |
| 317 | + }); | |
| 318 | + | |
| 319 | + test('bouton trigger CI visible pour le maintainer', async ({ authenticatedPage }) => { | |
| 320 | + await authenticatedPage.goto('/admin/mon-repo/ci'); | |
| 321 | + await expect(authenticatedPage.locator('text=Lancer CI')).toBeVisible(); | |
| 322 | + }); | |
| 323 | +}); | |
| 324 | +</code></pre> | |
| 325 | +<h3 id="4-tests-settings--comportement"><a class="header" href="#4-tests-settings--comportement">4. Tests settings ↔ comportement</a></h3> | |
| 326 | +<p>Les tests les plus critiques vérifient que <strong>changer un setting modifie le comportement observable</strong> :</p> | |
| 327 | +<div class="table-wrapper"> | |
| 328 | +<table> | |
| 329 | +<thead> | |
| 330 | +<tr><th>Setting</th><th>Action</th><th>Vérification</th></tr> | |
| 331 | +</thead> | |
| 332 | +<tbody> | |
| 333 | +<tr><td>PAT révoqué</td><td>Appel API</td><td>401 immédiatement</td></tr> | |
| 334 | +<tr><td><code>ci_enabled = false</code></td><td>Push</td><td>Pas de pipeline créé</td></tr> | |
| 335 | +<tr><td><code>trigger_on_push = false</code></td><td>Push</td><td>Pas de pipeline</td></tr> | |
| 336 | +<tr><td><code>auto_cancel = true</code></td><td>2 pushes rapides</td><td>1er pipeline annulé</td></tr> | |
| 337 | +<tr><td><code>email_on_pipeline_failure = false</code></td><td>Pipeline échoue</td><td>Pas d’email, notif in-app ok</td></tr> | |
| 338 | +<tr><td><code>DEFAULT_LOCALE = en</code></td><td>Charger page</td><td>Texte en anglais</td></tr> | |
| 339 | +</tbody> | |
| 340 | +</table> | |
| 341 | +</div> | |
| 342 | +<hr> | |
| 343 | +<h2 id="commandes-de-test"><a class="header" href="#commandes-de-test">Commandes de test</a></h2> | |
| 344 | +<pre><code class="language-bash"># Tests unitaires Rust | |
| 345 | +cargo test --workspace | |
| 346 | + | |
| 347 | +# Tests avec filtrage | |
| 348 | +cargo test -p gitrust-core -- ci_service | |
| 349 | +cargo test -p gitrust-core -- notification | |
| 350 | + | |
| 351 | +# Tests e2e Playwright | |
| 352 | +npm run test:e2e | |
| 353 | + | |
| 354 | +# Tests e2e spécifiques | |
| 355 | +npx playwright test tests/e2e/ci-pipelines.spec.ts | |
| 356 | +npx playwright test --grep "notifications" | |
| 357 | + | |
| 358 | +# Lint | |
| 359 | +cargo clippy --workspace -- -D warnings | |
| 360 | + | |
| 361 | +# Format check | |
| 362 | +cargo fmt --all -- --check | |
| 363 | +</code></pre> | |
| 364 | +<hr> | |
| 365 | +<h2 id="ci-locale-exécuter-avant-un-push"><a class="header" href="#ci-locale-exécuter-avant-un-push">CI locale (exécuter avant un push)</a></h2> | |
| 366 | +<pre><code class="language-bash"># Script rapide de vérification pré-push | |
| 367 | +cargo fmt --all -- --check && \ | |
| 368 | +cargo clippy --workspace -- -D warnings && \ | |
| 369 | +cargo test --workspace && \ | |
| 370 | +echo "All checks passed" | |
| 371 | +</code></pre> | |
| 372 | + | |
| 373 | + </main> | |
| 374 | + | |
| 375 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 376 | + <!-- Mobile navigation buttons --> | |
| 377 | + <a rel="prev" href="../../developer_manual/how-to/contribuer-workflow-pr.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 378 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 379 | + </a> | |
| 380 | + | |
| 381 | + <a rel="next prefetch" href="../../developer_manual/how-to/lancer-tests-e2e.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 382 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 383 | + </a> | |
| 384 | + | |
| 385 | + <div style="clear: both"></div> | |
| 386 | + </nav> | |
| 387 | + </div> | |
| 388 | + </div> | |
| 389 | + | |
| 390 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 391 | + <a rel="prev" href="../../developer_manual/how-to/contribuer-workflow-pr.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 392 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 393 | + </a> | |
| 394 | + | |
| 395 | + <a rel="next prefetch" href="../../developer_manual/how-to/lancer-tests-e2e.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 396 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 397 | + </a> | |
| 398 | + </nav> | |
| 399 | + | |
| 400 | + </div> | |
| 401 | + | |
| 402 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 403 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 404 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 405 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 406 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + <script> | |
| 411 | + window.playground_copyable = true; | |
| 412 | + </script> | |
| 413 | + | |
| 414 | + | |
| 415 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 416 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 417 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 418 | + | |
| 419 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 420 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 421 | + <script src="../../book-a0b12cfe.js"></script> | |
| 422 | + | |
| 423 | + <!-- Custom JS scripts --> | |
| 424 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 425 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + </div> | |
| 430 | + </body> | |
| 431 | +</html> |
A
book/developer_manual/how-to/passer-la-qa-avant-merge.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Passer la QA avant un merge - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/passer-la-qa-avant-merge.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="passer-la-qa-avant-un-merge"><a class="header" href="#passer-la-qa-avant-un-merge">Passer la QA avant un merge</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/how-to/contribuer-a-rustwarden.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/reference/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/how-to/contribuer-a-rustwarden.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/reference/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/index.html
+305
-0
@@ -0,0 +1,305 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Vue d'ensemble - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="manuel-développeur"><a class="header" href="#manuel-développeur">Manuel développeur</a></h1> | |
| 181 | +<p>Ce manuel s’adresse à deux publics : les contributeurs au code gitrust (core ou via fork rustwarden) et les développeurs externes qui construisent des intégrations sur l’API publique. Il fournit tout le nécessaire pour comprendre l’architecture des 6 crates, contribuer du code conforme aux standards du projet, ou bâtir un client qui parle à l’API gitrust. Il ne couvre pas l’installation d’une instance de production ni l’usage quotidien de la forge.</p> | |
| 182 | +<h2 id="parcours-dapprentissage--contributeur-core"><a class="header" href="#parcours-dapprentissage--contributeur-core">Parcours d’apprentissage — contributeur core</a></h2> | |
| 183 | +<p>Le parcours contributeur représente environ 4 heures au total, avec un étayage dégressif : le premier tutoriel est entièrement guidé, le troisième (capstone) demande de résoudre sans guide pas-à-pas.</p> | |
| 184 | +<pre class="mermaid">graph LR | |
| 185 | + A[Utilisateur autonome] --> B[01-getting-started<br/>45 min] | |
| 186 | + B --> C[02-premiere-contribution<br/>90 min] | |
| 187 | + C --> D[03-creer-un-worker-async<br/>capstone 120 min] | |
| 188 | + D --> E[Core contributor] | |
| 189 | +</pre> | |
| 190 | + | |
| 191 | +<blockquote> | |
| 192 | +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, vous devez avoir compilé gitrust localement, lancé les tests unitaires et obtenu une instance de développement fonctionnelle. Si ce n’est pas le cas, relisez le tutoriel 01.</p> | |
| 193 | +</blockquote> | |
| 194 | +<blockquote> | |
| 195 | +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 03 (capstone), vous devez avoir soumis une PR complète avec tests, passé la gate QA et reçu une review. Si ce n’est pas le cas, relisez le tutoriel 02.</p> | |
| 196 | +</blockquote> | |
| 197 | +<hr> | |
| 198 | +<h2 id="tutoriels--apprendre-en-faisant"><a class="header" href="#tutoriels--apprendre-en-faisant">Tutoriels — apprendre en faisant</a></h2> | |
| 199 | +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété.</p> | |
| 200 | +<ul> | |
| 201 | +<li><a href="tutorials/01-getting-started.html">01 — Getting started : build local, tests, instance de dev</a> — ~45 min</li> | |
| 202 | +<li><a href="tutorials/02-premiere-contribution.html">02 — Première contribution : clone, build, test, PR</a> — ~90 min</li> | |
| 203 | +<li><a href="tutorials/03-creer-un-worker-async.html">03 — Créer un worker async (capstone)</a> — ~120 min</li> | |
| 204 | +</ul> | |
| 205 | +<hr> | |
| 206 | +<h2 id="how-to--recettes-pour-les-tâches-courantes"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes">How-to — recettes pour les tâches courantes</a></h2> | |
| 207 | +<p>Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin.</p> | |
| 208 | +<ul> | |
| 209 | +<li><a href="how-to/contribuer-workflow-pr.html">Workflow de contribution : Git + review + QA</a></li> | |
| 210 | +<li><a href="how-to/lancer-tests-unitaires.html">Lancer les tests unitaires</a></li> | |
| 211 | +<li><a href="how-to/lancer-tests-e2e.html">Lancer les tests E2E (Playwright)</a></li> | |
| 212 | +<li><a href="how-to/ajouter-route-web.html">Ajouter une route web (patron rustwarden → axum)</a></li> | |
| 213 | +<li><a href="how-to/ajouter-service-metier.html">Ajouter un service métier</a></li> | |
| 214 | +<li><a href="how-to/ajouter-migration-db.html">Ajouter une migration de base de données</a></li> | |
| 215 | +<li><a href="how-to/implementer-webhooks.html">Implémenter des webhooks</a></li> | |
| 216 | +<li><a href="how-to/implementer-endpoint-api.html">Implémenter un endpoint API</a></li> | |
| 217 | +<li><a href="how-to/importer-depot-externe-code.html">Importer un dépôt externe (code)</a></li> | |
| 218 | +<li><a href="how-to/contribuer-a-rustwarden.html">Contribuer à rustwarden upstream</a></li> | |
| 219 | +<li><a href="how-to/passer-la-qa-avant-merge.html">Passer la QA avant merge</a></li> | |
| 220 | +</ul> | |
| 221 | +<hr> | |
| 222 | +<h2 id="référence--informations-techniques-exactes"><a class="header" href="#référence--informations-techniques-exactes">Référence — informations techniques exactes</a></h2> | |
| 223 | +<p>La référence documente de façon exhaustive l’architecture, les API internes, le schéma de données et les règles QA. Destinée à la consultation ponctuelle.</p> | |
| 224 | +<ul> | |
| 225 | +<li><a href="reference/architecture-crates.html">Architecture des 6 crates</a></li> | |
| 226 | +<li><a href="reference/services-api-interne.html">Services et API interne</a></li> | |
| 227 | +<li><a href="reference/schema-base-donnees.html">Schéma de base de données (ERD)</a></li> | |
| 228 | +<li><a href="reference/regles-qa-anssi.html">Règles QA et gates ANSSI</a></li> | |
| 229 | +<li><a href="reference/api-rest-v1.html">API REST v1 — auth, pagination, codes d’erreur</a></li> | |
| 230 | +<li><a href="reference/git-hooks-post-receive.html">Git hooks post-receive</a></li> | |
| 231 | +<li><a href="reference/rustwarden-core-api.html">rustwarden-core API — helpers, extracteurs, middleware</a></li> | |
| 232 | +</ul> | |
| 233 | +<hr> | |
| 234 | +<h2 id="explication--comprendre-le-pourquoi"><a class="header" href="#explication--comprendre-le-pourquoi">Explication — comprendre le pourquoi</a></h2> | |
| 235 | +<p>Les explanations construisent les modèles mentaux nécessaires pour contribuer de façon éclairée. Lisez-les quand vous voulez comprendre les décisions d’architecture, pas seulement les appliquer.</p> | |
| 236 | +<ul> | |
| 237 | +<li><a href="explanation/vue-ensemble-architecture.html">Vue d’ensemble de l’architecture gitrust</a></li> | |
| 238 | +<li><a href="explanation/flux-requetes.html">Flux de requêtes (diagrammes de séquence)</a></li> | |
| 239 | +<li><a href="explanation/modele-permissions-rbac.html">Modèle de permissions RBAC 4 niveaux</a></li> | |
| 240 | +<li><a href="explanation/2fa-fonctionnement.html">Fonctionnement de la 2FA</a></li> | |
| 241 | +<li><a href="explanation/hierarchie-labels.html">Hiérarchie des labels</a></li> | |
| 242 | +<li><a href="explanation/ci-dagger-easy-vs-power.html">CI Dagger : Easy Mode vs Power Mode</a></li> | |
| 243 | +<li><a href="explanation/decisions-ui-htmx.html">Décisions UI : HTMX + DaisyUI</a></li> | |
| 244 | +<li><a href="explanation/patron-worker-async.html">Patron worker async</a></li> | |
| 245 | +</ul> | |
| 246 | + | |
| 247 | + </main> | |
| 248 | + | |
| 249 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 250 | + <!-- Mobile navigation buttons --> | |
| 251 | + <a rel="prev" href="../administration_manual/explanation/strategie-sauvegarde.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 252 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 253 | + </a> | |
| 254 | + | |
| 255 | + <a rel="next prefetch" href="../developer_manual/tutorials/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 256 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 257 | + </a> | |
| 258 | + | |
| 259 | + <div style="clear: both"></div> | |
| 260 | + </nav> | |
| 261 | + </div> | |
| 262 | + </div> | |
| 263 | + | |
| 264 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 265 | + <a rel="prev" href="../administration_manual/explanation/strategie-sauvegarde.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 266 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 267 | + </a> | |
| 268 | + | |
| 269 | + <a rel="next prefetch" href="../developer_manual/tutorials/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 270 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 271 | + </a> | |
| 272 | + </nav> | |
| 273 | + | |
| 274 | + </div> | |
| 275 | + | |
| 276 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 277 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 278 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 279 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 280 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + <script> | |
| 285 | + window.playground_copyable = true; | |
| 286 | + </script> | |
| 287 | + | |
| 288 | + | |
| 289 | + <script src="../elasticlunr-ef4e11c1.min.js"></script> | |
| 290 | + <script src="../mark-09e88c2c.min.js"></script> | |
| 291 | + <script src="../searcher-c2a407aa.js"></script> | |
| 292 | + | |
| 293 | + <script src="../clipboard-1626706a.min.js"></script> | |
| 294 | + <script src="../highlight-abc7f01d.js"></script> | |
| 295 | + <script src="../book-a0b12cfe.js"></script> | |
| 296 | + | |
| 297 | + <!-- Custom JS scripts --> | |
| 298 | + <script src="../theme/mermaid-eefea253.min.js"></script> | |
| 299 | + <script src="../theme/mermaid-init-ccf746f1.js"></script> | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + </div> | |
| 304 | + </body> | |
| 305 | +</html> |
A
book/developer_manual/reference/api-rest-v1.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>API REST v1 - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/api-rest-v1.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="api-rest-v1"><a class="header" href="#api-rest-v1">API REST v1</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/reference/regles-qa-anssi.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/reference/git-hooks-post-receive.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/reference/regles-qa-anssi.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/reference/git-hooks-post-receive.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/reference/architecture-crates.html
+511
-0
@@ -0,0 +1,511 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Architecture des crates - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/architecture-crates.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="architecture-par-crates"><a class="header" href="#architecture-par-crates">Architecture par crates</a></h1> | |
| 181 | +<p>Référence structurelle de gitrust : crates, modules, routes, dépendances et composants CI.</p> | |
| 182 | +<h2 id="dépendances-entre-crates"><a class="header" href="#dépendances-entre-crates">Dépendances entre crates</a></h2> | |
| 183 | +<pre class="mermaid">graph LR | |
| 184 | + RW["rustwarden-core"] | |
| 185 | + | |
| 186 | + Git["gitrust-git"] | |
| 187 | + Core["gitrust-core"] | |
| 188 | + Hooks["gitrust-hooks"] | |
| 189 | + SSH["gitrust-ssh"] | |
| 190 | + Web["gitrust-web"] | |
| 191 | + Bin["gitrust (binaire)"] | |
| 192 | + | |
| 193 | + Core --> RW | |
| 194 | + Git -.->|"indépendant<br/>(git2, tokio)"| RW | |
| 195 | + | |
| 196 | + Hooks --> Core | |
| 197 | + Hooks --> RW | |
| 198 | + | |
| 199 | + SSH --> Core | |
| 200 | + SSH --> Git | |
| 201 | + | |
| 202 | + Web --> Core | |
| 203 | + Web --> Git | |
| 204 | + Web -.->|"CI pages"| Git | |
| 205 | + | |
| 206 | + Bin --> Core | |
| 207 | + Bin --> Git | |
| 208 | + Bin --> SSH | |
| 209 | + Bin --> Web | |
| 210 | + Bin --> Hooks | |
| 211 | + Bin --> RW | |
| 212 | + | |
| 213 | + subgraph "Externes CI (Phase 5b)" | |
| 214 | + Dagger["Dagger CLI"] | |
| 215 | + CiEng["ci-engine (Python)"] | |
| 216 | + Syft["Syft"] | |
| 217 | + DTrack["Dependency-Track"] | |
| 218 | + end | |
| 219 | + | |
| 220 | + Core -.->|"CiWorker<br/>sous-processus"| Dagger | |
| 221 | + Dagger -.-> CiEng | |
| 222 | + Core -.-> Syft | |
| 223 | + Syft -.-> DTrack | |
| 224 | +</pre> | |
| 225 | + | |
| 226 | +<hr> | |
| 227 | +<h2 id="crates--responsabilités"><a class="header" href="#crates--responsabilités">Crates — Responsabilités</a></h2> | |
| 228 | +<h3 id="gitrust-core"><a class="header" href="#gitrust-core">gitrust-core</a></h3> | |
| 229 | +<p>Cœur métier. Ne dépend que de rustwarden-core et des crates Rust standards.</p> | |
| 230 | +<div class="table-wrapper"> | |
| 231 | +<table> | |
| 232 | +<thead> | |
| 233 | +<tr><th>Module</th><th>Rôle</th></tr> | |
| 234 | +</thead> | |
| 235 | +<tbody> | |
| 236 | +<tr><td><code>config</code></td><td><code>GitrustConfig::from_env()</code> — ports SSH, chemin repos, limites</td></tr> | |
| 237 | +<tr><td><code>error</code></td><td><code>GitrustError</code> — erreurs domaine Git + <code>IntoResponse</code> HTTP</td></tr> | |
| 238 | +<tr><td><code>roles</code></td><td><code>enum Role { Reader, Developer, Maintainer, Owner }</code> avec <code>Ord</code></td></tr> | |
| 239 | +<tr><td><code>types</code></td><td>Newtypes validés : <code>RepoSlug</code>, <code>TeamSlug</code>, <code>Fingerprint</code>, <code>TokenHash</code></td></tr> | |
| 240 | +<tr><td><code>models/</code></td><td>Entités SeaORM : repository, ssh_key, team, team_member, team_repository_access, ci_pipeline, ci_job, ci_log, ci_config, ci_variable</td></tr> | |
| 241 | +<tr><td><code>migrations/</code></td><td>Migrations SeaORM (tables gitrust) combinées avec les migrations core</td></tr> | |
| 242 | +<tr><td><code>services/</code></td><td><code>SshKeyService</code>, <code>RepositoryService</code>, <code>TeamService</code>, <code>AccessService</code>, <code>CiService</code>, <code>CiVariableService</code>, <code>CiDetectionService</code>, <code>CiWorker</code>, <code>NotificationService</code></td></tr> | |
| 243 | +<tr><td><code>dto/</code></td><td>Structures d’entrée/sortie pour les services</td></tr> | |
| 244 | +</tbody> | |
| 245 | +</table> | |
| 246 | +</div> | |
| 247 | +<h3 id="gitrust-git"><a class="header" href="#gitrust-git">gitrust-git</a></h3> | |
| 248 | +<p>Opérations Git sur le système de fichiers. Utilise <code>git2</code> (libgit2). Pas de dépendance vers la base de données.</p> | |
| 249 | +<div class="table-wrapper"> | |
| 250 | +<table> | |
| 251 | +<thead> | |
| 252 | +<tr><th>Module</th><th>Rôle</th></tr> | |
| 253 | +</thead> | |
| 254 | +<tbody> | |
| 255 | +<tr><td><code>errors</code></td><td><code>enum GitError</code> (Git, RepoNotFound, RefNotFound, PathTraversal, …)</td></tr> | |
| 256 | +<tr><td><code>bare_repo</code></td><td>Init, open, delete, exists + validation chemin canonique sous base</td></tr> | |
| 257 | +<tr><td><code>branch</code> / <code>tag</code></td><td>Listing branches (BranchInfo) et tags (TagInfo, annotated/lightweight)</td></tr> | |
| 258 | +<tr><td><code>reference</code></td><td>resolve_ref (branch -> tag -> SHA -> revparse)</td></tr> | |
| 259 | +<tr><td><code>tree_browser</code></td><td>list_tree (dirs first, sorted), TreeEntry, EntryKind</td></tr> | |
| 260 | +<tr><td><code>blob_reader</code></td><td>read_blob -> Text/Binary, détection binaire (null bytes)</td></tr> | |
| 261 | +<tr><td><code>commit_log</code></td><td>list_commits (paginé), find_commit, CommitInfo</td></tr> | |
| 262 | +<tr><td><code>readme</code></td><td>find_readme (README.md > README > readme.md > …)</td></tr> | |
| 263 | +<tr><td><code>pack_protocol</code></td><td>advertise_refs, serve_pack (async, git-upload-pack/git-receive-pack)</td></tr> | |
| 264 | +</tbody> | |
| 265 | +</table> | |
| 266 | +</div> | |
| 267 | +<h3 id="gitrust-ssh"><a class="header" href="#gitrust-ssh">gitrust-ssh</a></h3> | |
| 268 | +<p>Serveur SSH basé sur <code>russh</code>. Authentification par clé publique.</p> | |
| 269 | +<div class="table-wrapper"> | |
| 270 | +<table> | |
| 271 | +<thead> | |
| 272 | +<tr><th>Module (prévu)</th><th>Rôle</th></tr> | |
| 273 | +</thead> | |
| 274 | +<tbody> | |
| 275 | +<tr><td><code>server</code></td><td>Démarrage, génération clé hôte Ed25519</td></tr> | |
| 276 | +<tr><td><code>auth</code></td><td>Authentification par fingerprint -> SshKeyService</td></tr> | |
| 277 | +<tr><td><code>session</code></td><td>Handler SSH (exec, shell)</td></tr> | |
| 278 | +<tr><td><code>command_handler</code></td><td>Parsing <code>git-upload-pack</code>/<code>git-receive-pack</code></td></tr> | |
| 279 | +</tbody> | |
| 280 | +</table> | |
| 281 | +</div> | |
| 282 | +<h3 id="gitrust-web"><a class="header" href="#gitrust-web">gitrust-web</a></h3> | |
| 283 | +<p>Interface web SSR (Server-Side Rendering) avec Askama (templates compilés) + HTMX (interactions dynamiques). Fonctionne en mode <code>headless()</code> : les pages UI du framework (<code>rustwarden-ui</code>) ne sont pas montées, gitrust-web réimplémente toutes les pages avec un design spécifique (sidebar contextuelle, navigation Git, DaisyUI).</p> | |
| 284 | +<p><strong>Architecture des routes :</strong></p> | |
| 285 | +<pre><code>gitrust (port 4000) | |
| 286 | +├── /api/v1/auth/* ← Routes API du framework (JSON) | |
| 287 | +│ ├── POST /login AuthService::authenticate_user | |
| 288 | +│ ├── POST /register UserService::create_user | |
| 289 | +│ ├── POST /refresh RefreshTokenService (rotation JWT) | |
| 290 | +│ ├── POST /logout JwtBlacklistService | |
| 291 | +│ ├── GET /me Claims extraction | |
| 292 | +│ ├── POST /forgot-password PasswordResetService::request_reset | |
| 293 | +│ ├── POST /reset-password PasswordResetService::reset_password | |
| 294 | +│ ├── GET /verify-email/{t} EmailValidationService::verify_email | |
| 295 | +│ └── POST /resend-verif EmailValidationService::resend | |
| 296 | +│ | |
| 297 | +├── /api/v1/* ← API REST Gitrust (JSON, auth JWT/PAT) | |
| 298 | +│ ├── /user, /user/repos Profil utilisateur | |
| 299 | +│ ├── /repos/{o}/{r} Détail dépôt, branches, tags, commits | |
| 300 | +│ ├── /repos/{o}/{r}/issues CRUD issues + commentaires | |
| 301 | +│ ├── /repos/{o}/{r}/pulls CRUD PRs + merge | |
| 302 | +│ └── /repos/{o}/{r}/ci/* Pipelines CI (list, trigger, cancel, logs) | |
| 303 | +│ | |
| 304 | +├── /* ← Pages SSR gitrust (HTML) | |
| 305 | +│ ├── /login, /register Pages formulaires (design gitrust) | |
| 306 | +│ ├── /dashboard, /teams Pages utilisateur | |
| 307 | +│ ├── /settings/* Profile, SSH keys, sessions, notifications | |
| 308 | +│ ├── /notifications Liste notifications + SSE stream | |
| 309 | +│ ├── /admin/* Administration (+ admin CI) | |
| 310 | +│ ├── /{owner}/{repo}/* Navigation dépôt Git | |
| 311 | +│ └── /{owner}/{repo}/ci/* Pages CI (pipelines, logs, config, variables) | |
| 312 | +│ | |
| 313 | +└── /static/* ← Assets locaux (CSS, JS, HTMX) | |
| 314 | +</code></pre> | |
| 315 | +<p>Les routes API du framework sont montées via <code>framework_api_routes()</code> dans <code>routes.rs</code>. Elles sont utilisées par :</p> | |
| 316 | +<ul> | |
| 317 | +<li>Les liens dans les emails (vérification, reset password)</li> | |
| 318 | +<li>Le refresh token (rotation JWT, session longue durée)</li> | |
| 319 | +<li>L’accès programmatique (GET /me, POST /logout)</li> | |
| 320 | +</ul> | |
| 321 | +<p>Les pages SSR et les routes API coexistent : les formulaires HTML soumettent aux handlers gitrust (SSR), tandis que les services framework génèrent des liens vers les routes API.</p> | |
| 322 | +<div class="table-wrapper"> | |
| 323 | +<table> | |
| 324 | +<thead> | |
| 325 | +<tr><th>Module</th><th>Rôle</th></tr> | |
| 326 | +</thead> | |
| 327 | +<tbody> | |
| 328 | +<tr><td><code>routes.rs</code></td><td>Routeur principal : framework API + API REST Gitrust + pages SSR + fichiers statiques</td></tr> | |
| 329 | +<tr><td><code>handlers/</code></td><td>Handlers Axum SSR (un fichier par domaine) + handlers API JSON</td></tr> | |
| 330 | +<tr><td><code>templates.rs</code></td><td>Structs Askama + SidebarContext + RepoNav</td></tr> | |
| 331 | +<tr><td><code>helpers.rs</code></td><td>require_auth, require_admin, sidebar_*, resolve_repo_access</td></tr> | |
| 332 | +<tr><td><code>templates/</code></td><td>Templates HTML (Askama, extends base.html)</td></tr> | |
| 333 | +<tr><td><code>static_files.rs</code></td><td>ServeDir pour /static</td></tr> | |
| 334 | +</tbody> | |
| 335 | +</table> | |
| 336 | +</div> | |
| 337 | +<h3 id="gitrust-hooks"><a class="header" href="#gitrust-hooks">gitrust-hooks</a></h3> | |
| 338 | +<p>Implémentation de <code>RustwardenHooks</code> pour réagir aux événements du framework. Les hooks sont injectés dans le routeur Axum via <code>Arc<dyn RustwardenHooks></code> + <code>axum::Extension</code> (dans <code>main.rs</code>).</p> | |
| 339 | +<div class="table-wrapper"> | |
| 340 | +<table> | |
| 341 | +<thead> | |
| 342 | +<tr><th>Hook</th><th>Action</th></tr> | |
| 343 | +</thead> | |
| 344 | +<tbody> | |
| 345 | +<tr><td><code>on_user_registered</code></td><td>Crée le répertoire utilisateur sur le FS (anti path-traversal)</td></tr> | |
| 346 | +<tr><td><code>on_user_deleted</code></td><td>Supprime le répertoire utilisateur + bare repos sur le FS</td></tr> | |
| 347 | +<tr><td><code>on_resource_shared</code></td><td>Audit log si resource_type = “repository”</td></tr> | |
| 348 | +<tr><td><code>on_resource_unshared</code></td><td>Audit log si resource_type = “repository”</td></tr> | |
| 349 | +</tbody> | |
| 350 | +</table> | |
| 351 | +</div> | |
| 352 | +<hr> | |
| 353 | +<h2 id="notifications"><a class="header" href="#notifications">Notifications</a></h2> | |
| 354 | +<p>Système de notification à deux canaux : <strong>in-app</strong> (SSE temps réel + page) et <strong>email</strong> (worker SMTP du framework).</p> | |
| 355 | +<pre><code>Événement (pipeline échoue, PR commentée, etc.) | |
| 356 | + │ | |
| 357 | + ▼ | |
| 358 | +NotificationService::notify(user_id, event_type, title, body, link) | |
| 359 | + │ | |
| 360 | + ├── INSERT INTO notifications (in-app) | |
| 361 | + │ → broadcast::Sender → SSE /notifications/stream | |
| 362 | + │ → Badge header mis à jour en temps réel (HTMX) | |
| 363 | + │ | |
| 364 | + └── if user.email_on_{event} = true: | |
| 365 | + EmailQueueService::enqueue() (framework SMTP worker) | |
| 366 | +</code></pre> | |
| 367 | +<p>Les préférences de notification sont par utilisateur (email on/off par type d’événement).</p> | |
| 368 | +<hr> | |
| 369 | +<h2 id="cicd--modes-et-composants"><a class="header" href="#cicd--modes-et-composants">CI/CD — Modes et composants</a></h2> | |
| 370 | +<p>Système CI hybride à deux niveaux, activé via <code>CI_ENABLED=true</code>.</p> | |
| 371 | +<h3 id="modes"><a class="header" href="#modes">Modes</a></h3> | |
| 372 | +<div class="table-wrapper"> | |
| 373 | +<table> | |
| 374 | +<thead> | |
| 375 | +<tr><th>Mode</th><th>Détection</th><th>Exécution</th></tr> | |
| 376 | +</thead> | |
| 377 | +<tbody> | |
| 378 | +<tr><td><strong>Easy</strong></td><td><code>.gitrust-ci.yml</code> à la racine du repo</td><td>Module Dagger Python générique (<code>ci-engine</code>) interprète le YAML</td></tr> | |
| 379 | +<tr><td><strong>Power</strong></td><td><code>.dagger/</code> à la racine du repo</td><td><code>dagger call -m .dagger/</code> exécute le module utilisateur directement</td></tr> | |
| 380 | +<tr><td>Aucun</td><td>Ni l’un ni l’autre</td><td>Pas de CI pour ce repo</td></tr> | |
| 381 | +</tbody> | |
| 382 | +</table> | |
| 383 | +</div> | |
| 384 | +<h3 id="architecture-ci"><a class="header" href="#architecture-ci">Architecture CI</a></h3> | |
| 385 | +<pre><code>git push (HTTP ou SSH) | |
| 386 | + │ | |
| 387 | + ▼ | |
| 388 | +receive-pack handler | |
| 389 | + │ | |
| 390 | + ├── CiDetectionService::detect(bare_repo, commit_sha) | |
| 391 | + │ → Easy / Power / None | |
| 392 | + │ | |
| 393 | + ├── CiService::create_pipeline(repo_id, sha, mode) | |
| 394 | + │ | |
| 395 | + └── mpsc::Sender.send(job) ──► CiWorker (tokio::spawn) | |
| 396 | + │ | |
| 397 | + ├── 1. Validation statique | |
| 398 | + │ Easy: schéma YAML, whitelist images/packages | |
| 399 | + │ Power: analyse code .dagger/ (si activé) | |
| 400 | + │ | |
| 401 | + ├── 2. SBOM Gate (si CI_SBOM_ENABLED) | |
| 402 | + │ syft scan → sbom.cdx.json | |
| 403 | + │ → Dependency-Track (si CI_DTRACK_ENABLED) | |
| 404 | + │ → PASS/FAIL selon politique | |
| 405 | + │ | |
| 406 | + ├── 3. Résolution variables (héritage team → repo) | |
| 407 | + │ CiVariableService::resolve_for_pipeline() | |
| 408 | + │ | |
| 409 | + ├── 4. Exécution Dagger (isolé, timeout, cgroups) | |
| 410 | + │ Easy: dagger call -m ci-engine test --profile=... | |
| 411 | + │ Power: dagger call -m .dagger/ <function> | |
| 412 | + │ | |
| 413 | + └── 5. Rapport + audit | |
| 414 | + Status, logs (broadcast SSE), ci_audit_log | |
| 415 | +</code></pre> | |
| 416 | +<h3 id="composants-externes-tous-optionnels-sauf-dagger"><a class="header" href="#composants-externes-tous-optionnels-sauf-dagger">Composants externes (tous optionnels sauf Dagger)</a></h3> | |
| 417 | +<div class="table-wrapper"> | |
| 418 | +<table> | |
| 419 | +<thead> | |
| 420 | +<tr><th>Composant</th><th>Rôle</th><th>Variable de contrôle</th></tr> | |
| 421 | +</thead> | |
| 422 | +<tbody> | |
| 423 | +<tr><td>Dagger Engine</td><td>Exécution des pipelines dans des containers isolés</td><td><code>CI_ENABLED</code></td></tr> | |
| 424 | +<tr><td>ci-engine (Python)</td><td>Moteur générique pour Easy Mode</td><td><code>CI_DAGGER_MODULE_PATH</code></td></tr> | |
| 425 | +<tr><td>Syft</td><td>Génération SBOM CycloneDX</td><td><code>CI_SBOM_ENABLED</code></td></tr> | |
| 426 | +<tr><td>Dependency-Track</td><td>Analyse de vulnérabilités sur les SBOM</td><td><code>CI_DTRACK_ENABLED</code></td></tr> | |
| 427 | +</tbody> | |
| 428 | +</table> | |
| 429 | +</div> | |
| 430 | +<h3 id="variables-et-secrets-ci"><a class="header" href="#variables-et-secrets-ci">Variables et secrets CI</a></h3> | |
| 431 | +<p>Héritage <strong>team → repo</strong> : les variables définies au niveau team sont partagées entre tous les repos de l’équipe. Le repo peut surcharger une clé team avec sa propre valeur. Les secrets sont chiffrés en base (AES-256-GCM) et masqués dans les logs (<code>***</code>).</p> | |
| 432 | +<hr> | |
| 433 | +<h2 id="sécurité-anssi-pa-074"><a class="header" href="#sécurité-anssi-pa-074">Sécurité (ANSSI PA-074)</a></h2> | |
| 434 | +<div class="table-wrapper"> | |
| 435 | +<table> | |
| 436 | +<thead> | |
| 437 | +<tr><th>Directive</th><th>Scope</th></tr> | |
| 438 | +</thead> | |
| 439 | +<tbody> | |
| 440 | +<tr><td><code>#![forbid(unsafe_code)]</code></td><td>gitrust-core, gitrust-web, gitrust-hooks</td></tr> | |
| 441 | +<tr><td><code>#![deny(unsafe_code)]</code></td><td>gitrust-git, gitrust-ssh (FFI libgit2/russh)</td></tr> | |
| 442 | +<tr><td><code>deny(clippy::unwrap_used, expect_used, panic)</code></td><td>Tous les crates</td></tr> | |
| 443 | +<tr><td><code>deny(clippy::indexing_slicing)</code></td><td>Tous les crates</td></tr> | |
| 444 | +<tr><td><code>deny(clippy::mem_forget)</code></td><td>Tous les crates</td></tr> | |
| 445 | +<tr><td><code>Zeroize</code> on drop</td><td><code>TokenHash</code> (ANSSI R23)</td></tr> | |
| 446 | +<tr><td>RSA minimum 4096 bits</td><td><code>SshKeyService</code></td></tr> | |
| 447 | +<tr><td>Path traversal validation</td><td><code>RepositoryService</code>, <code>gitrust-git</code></td></tr> | |
| 448 | +<tr><td>Slug validation + noms réservés</td><td><code>RepoSlug</code>, <code>TeamSlug</code></td></tr> | |
| 449 | +</tbody> | |
| 450 | +</table> | |
| 451 | +</div> | |
| 452 | + | |
| 453 | + </main> | |
| 454 | + | |
| 455 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 456 | + <!-- Mobile navigation buttons --> | |
| 457 | + <a rel="prev" href="../../developer_manual/reference/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 458 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 459 | + </a> | |
| 460 | + | |
| 461 | + <a rel="next prefetch" href="../../developer_manual/reference/services-api-interne.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 462 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 463 | + </a> | |
| 464 | + | |
| 465 | + <div style="clear: both"></div> | |
| 466 | + </nav> | |
| 467 | + </div> | |
| 468 | + </div> | |
| 469 | + | |
| 470 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 471 | + <a rel="prev" href="../../developer_manual/reference/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 472 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 473 | + </a> | |
| 474 | + | |
| 475 | + <a rel="next prefetch" href="../../developer_manual/reference/services-api-interne.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 476 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 477 | + </a> | |
| 478 | + </nav> | |
| 479 | + | |
| 480 | + </div> | |
| 481 | + | |
| 482 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 483 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 484 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 485 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 486 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + <script> | |
| 491 | + window.playground_copyable = true; | |
| 492 | + </script> | |
| 493 | + | |
| 494 | + | |
| 495 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 496 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 497 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 498 | + | |
| 499 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 500 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 501 | + <script src="../../book-a0b12cfe.js"></script> | |
| 502 | + | |
| 503 | + <!-- Custom JS scripts --> | |
| 504 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 505 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + </div> | |
| 510 | + </body> | |
| 511 | +</html> |
A
book/developer_manual/reference/git-hooks-post-receive.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Hooks Git post-receive - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/git-hooks-post-receive.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="hooks-git-post-receive"><a class="header" href="#hooks-git-post-receive">Hooks Git post-receive</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/reference/api-rest-v1.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/reference/rustwarden-core-api.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/reference/api-rest-v1.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/reference/rustwarden-core-api.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/reference/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Référence - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="référence"><a class="header" href="#référence">Référence</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/how-to/passer-la-qa-avant-merge.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/reference/architecture-crates.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/how-to/passer-la-qa-avant-merge.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/reference/architecture-crates.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/reference/regles-qa-anssi.html
+375
-0
@@ -0,0 +1,375 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Règles QA et conformité ANSSI - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/regles-qa-anssi.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="règles-qa--conformité-anssi"><a class="header" href="#règles-qa--conformité-anssi">Règles QA & conformité ANSSI</a></h1> | |
| 181 | +<p>Ce document définit les règles de qualité et de sécurité applicables à tout le projet gitrust. Chaque lot doit satisfaire ces règles avant merge.</p> | |
| 182 | +<hr> | |
| 183 | +<h2 id="1-gates-de-compilation-obligatoires"><a class="header" href="#1-gates-de-compilation-obligatoires">1. Gates de compilation obligatoires</a></h2> | |
| 184 | +<p>Toute modification doit passer ces 4 gates sans erreur :</p> | |
| 185 | +<div class="table-wrapper"> | |
| 186 | +<table> | |
| 187 | +<thead> | |
| 188 | +<tr><th>Gate</th><th>Commande</th><th>Critère</th></tr> | |
| 189 | +</thead> | |
| 190 | +<tbody> | |
| 191 | +<tr><td>Formatage</td><td><code>cargo fmt --all -- --check</code></td><td>Zéro diff</td></tr> | |
| 192 | +<tr><td>Linting</td><td><code>cargo clippy --workspace -- -D warnings</code></td><td>Zéro warning</td></tr> | |
| 193 | +<tr><td>Tests unitaires</td><td><code>cargo test --workspace</code></td><td>100% pass</td></tr> | |
| 194 | +<tr><td>Build CSS</td><td><code>npx tailwindcss -i static/css/input.css -o static/css/style.css --minify</code></td><td>Si templates modifiés</td></tr> | |
| 195 | +</tbody> | |
| 196 | +</table> | |
| 197 | +</div> | |
| 198 | +<h3 id="gates-supplémentaires-à-mettre-en-place"><a class="header" href="#gates-supplémentaires-à-mettre-en-place">Gates supplémentaires (à mettre en place)</a></h3> | |
| 199 | +<div class="table-wrapper"> | |
| 200 | +<table> | |
| 201 | +<thead> | |
| 202 | +<tr><th>Gate</th><th>Outil</th><th>Rôle</th></tr> | |
| 203 | +</thead> | |
| 204 | +<tbody> | |
| 205 | +<tr><td>Audit dépendances</td><td><code>cargo audit</code></td><td>Détection CVE dans les deps</td></tr> | |
| 206 | +<tr><td>Licences & bans</td><td><code>cargo deny check</code></td><td>Licences compatibles, pas de crate bannie</td></tr> | |
| 207 | +<tr><td>Secrets dans le code</td><td>Recherche de patterns sensibles</td><td>Pas de token/mot de passe en dur</td></tr> | |
| 208 | +</tbody> | |
| 209 | +</table> | |
| 210 | +</div> | |
| 211 | +<hr> | |
| 212 | +<h2 id="2-règles-de-sécurité-anssi-pa-074"><a class="header" href="#2-règles-de-sécurité-anssi-pa-074">2. Règles de sécurité (ANSSI PA-074)</a></h2> | |
| 213 | +<h3 id="21-lints-rust-obligatoires-déjà-en-place"><a class="header" href="#21-lints-rust-obligatoires-déjà-en-place">2.1 Lints Rust obligatoires (déjà en place)</a></h3> | |
| 214 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 215 | +</span>#![forbid(unsafe_code)] // core, web, hooks | |
| 216 | +#![deny(unsafe_code)] // git, ssh (FFI nécessaire) | |
| 217 | +#![deny(clippy::unwrap_used)] | |
| 218 | +#![deny(clippy::expect_used)] | |
| 219 | +#![deny(clippy::panic)] | |
| 220 | +#![deny(clippy::indexing_slicing)] | |
| 221 | +#![deny(clippy::mem_forget)] | |
| 222 | +<span class="boring">fn main() { | |
| 223 | +</span><span class="boring">}</span></code></pre> | |
| 224 | +<h3 id="22-checklist-sécurité-par-feature"><a class="header" href="#22-checklist-sécurité-par-feature">2.2 Checklist sécurité par feature</a></h3> | |
| 225 | +<p>Avant toute implémentation touchant l’authentification, les secrets ou les permissions, vérifier :</p> | |
| 226 | +<ul> | |
| 227 | +<li><input disabled="" type="checkbox"> <strong>Secrets jamais en clair en base</strong> — hash SHA-256 ou bcrypt</li> | |
| 228 | +<li><input disabled="" type="checkbox"> <strong>Secrets jamais loggés</strong> — vérifier <code>tracing::info/debug/warn</code>, <code>Display</code> et <code>Debug</code> impls ne révèlent pas le secret</li> | |
| 229 | +<li><input disabled="" type="checkbox"> <strong>Comparaison constant-time</strong> — <code>subtle::ConstantTimeEq</code> pour toute validation de secret (pas de <code>==</code> sur des hash)</li> | |
| 230 | +<li><input disabled="" type="checkbox"> <strong>Rate-limiting</strong> — endpoint d’authentification protégé</li> | |
| 231 | +<li><input disabled="" type="checkbox"> <strong>CSRF</strong> — token valide sur toute action mutante (POST/PUT/DELETE)</li> | |
| 232 | +<li><input disabled="" type="checkbox"> <strong>Ownership vérifiée (anti-IDOR)</strong> — le user ne peut agir que sur ses propres ressources (vérifier <code>user_id</code> côté serveur)</li> | |
| 233 | +<li><input disabled="" type="checkbox"> <strong>Expiration obligatoire</strong> — tout token/session a une durée de vie max</li> | |
| 234 | +<li><input disabled="" type="checkbox"> <strong>Audit log</strong> — création, révocation, utilisation suspecte tracées</li> | |
| 235 | +<li><input disabled="" type="checkbox"> <strong>Zeroize</strong> — types sensibles implémentent <code>Zeroize</code>/<code>ZeroizeOnDrop</code></li> | |
| 236 | +<li><input disabled="" type="checkbox"> <strong>Path traversal</strong> — validation des chemins disque (pas de <code>..</code>, <code>/</code>, <code>\</code>)</li> | |
| 237 | +</ul> | |
| 238 | +<h3 id="23-marqueurs-sec-"><a class="header" href="#23-marqueurs-sec-">2.3 Marqueurs SEC-</a></h3> | |
| 239 | +<p>Le code utilise des commentaires <code>// SEC-XX</code> pour tracer les décisions de sécurité. Tout nouveau contrôle doit être marqué avec le prochain numéro disponible dans sa catégorie :</p> | |
| 240 | +<div class="table-wrapper"> | |
| 241 | +<table> | |
| 242 | +<thead> | |
| 243 | +<tr><th>Préfixe</th><th>Catégorie</th><th>Exemples</th></tr> | |
| 244 | +</thead> | |
| 245 | +<tbody> | |
| 246 | +<tr><td>SEC-C</td><td>Cryptographie</td><td>Timing attack, CSRF, PKCE</td></tr> | |
| 247 | +<tr><td>SEC-H</td><td>HTTP/Headers</td><td>X-Forwarded-For, cookies, nonce</td></tr> | |
| 248 | +<tr><td>SEC-L</td><td>Logique métier</td><td>Hashing, validation, defaults</td></tr> | |
| 249 | +<tr><td>SEC-M</td><td>Mémoire/sessions</td><td>Rate-limit DoS, refresh tokens</td></tr> | |
| 250 | +</tbody> | |
| 251 | +</table> | |
| 252 | +</div> | |
| 253 | +<hr> | |
| 254 | +<h2 id="3-tests-requis-par-catégorie"><a class="header" href="#3-tests-requis-par-catégorie">3. Tests requis par catégorie</a></h2> | |
| 255 | +<h3 id="31-matrice-de-couverture"><a class="header" href="#31-matrice-de-couverture">3.1 Matrice de couverture</a></h3> | |
| 256 | +<div class="table-wrapper"> | |
| 257 | +<table> | |
| 258 | +<thead> | |
| 259 | +<tr><th>Catégorie</th><th>Quand appliquer</th><th>Exemples</th></tr> | |
| 260 | +</thead> | |
| 261 | +<tbody> | |
| 262 | +<tr><td><strong>Unitaire</strong></td><td>Logique pure (validation, parsing, conversion)</td><td><code>RepoSlug::new("../evil")</code> → erreur</td></tr> | |
| 263 | +<tr><td><strong>Intégration</strong></td><td>Service avec DB (CRUD, contraintes, transactions)</td><td><code>PatService::validate</code> token expiré → None</td></tr> | |
| 264 | +<tr><td><strong>Handler</strong></td><td>Endpoint HTTP (status, redirect, CSRF, auth)</td><td>POST sans CSRF → 403</td></tr> | |
| 265 | +<tr><td><strong>E2E Playwright</strong></td><td>Flow utilisateur complet</td><td>Créer token → copier → cloner un dépôt</td></tr> | |
| 266 | +<tr><td><strong>Sécurité négatif</strong></td><td>Tout bypass imaginable</td><td>Token user A sur ressource user B → 401</td></tr> | |
| 267 | +</tbody> | |
| 268 | +</table> | |
| 269 | +</div> | |
| 270 | +<h3 id="32-règles-de-tests"><a class="header" href="#32-règles-de-tests">3.2 Règles de tests</a></h3> | |
| 271 | +<ol> | |
| 272 | +<li><strong>Tests d’intégration sur vraie DB</strong> — pas de mocks pour la couche persistence (les mocks masquent les bugs de migration)</li> | |
| 273 | +<li><strong>Tests négatifs obligatoires</strong> — pour chaque chemin heureux, tester au moins : input invalide, non-authentifié, non-autorisé, expiré, révoqué</li> | |
| 274 | +<li><strong>Tests E2E en français</strong> — cohérent avec l’UI (locale <code>fr-FR</code>)</li> | |
| 275 | +<li><strong>Pas de <code>sleep()</code> dans les tests</strong> — utiliser des retry/poll avec timeout</li> | |
| 276 | +<li><strong>Données de test isolées</strong> — chaque test crée ses propres données (pas de dépendance sur l’ordre d’exécution)</li> | |
| 277 | +</ol> | |
| 278 | +<hr> | |
| 279 | +<h2 id="4-règles-de-code"><a class="header" href="#4-règles-de-code">4. Règles de code</a></h2> | |
| 280 | +<h3 id="41-framework-boundary"><a class="header" href="#41-framework-boundary">4.1 Framework boundary</a></h3> | |
| 281 | +<ul> | |
| 282 | +<li><strong>Ne jamais modifier</strong> <code>crates/rustwarden-core/</code></li> | |
| 283 | +<li>Réutiliser les services framework avant d’implémenter (auth, users, sessions, ResourceService, i18n, middleware)</li> | |
| 284 | +<li>Si un service manque, l’étendre côté gitrust (wrappers, trait impls)</li> | |
| 285 | +</ul> | |
| 286 | +<h3 id="42-assets"><a class="header" href="#42-assets">4.2 Assets</a></h3> | |
| 287 | +<ul> | |
| 288 | +<li><strong>Zéro CDN</strong> — tous les CSS/JS servis depuis <code>static/</code></li> | |
| 289 | +<li>La CSP du framework bloque les domaines externes</li> | |
| 290 | +</ul> | |
| 291 | +<h3 id="43-gestion-derreurs"><a class="header" href="#43-gestion-derreurs">4.3 Gestion d’erreurs</a></h3> | |
| 292 | +<ul> | |
| 293 | +<li><code>GitrustError</code> avec <code>IntoResponse</code> pour le mapping HTTP</li> | |
| 294 | +<li>Pas de <code>.unwrap()</code> / <code>.expect()</code> / <code>panic!()</code> / <code>[index]</code></li> | |
| 295 | +<li>Errors utilisateur : messages génériques (pas de leak d’info interne)</li> | |
| 296 | +</ul> | |
| 297 | +<h3 id="44-validation-aux-frontières"><a class="header" href="#44-validation-aux-frontières">4.4 Validation aux frontières</a></h3> | |
| 298 | +<ul> | |
| 299 | +<li>Valider les inputs utilisateur (formulaires, query params, headers)</li> | |
| 300 | +<li>Ne pas re-valider entre services internes</li> | |
| 301 | +<li>Newtypes avec validation à la construction (<code>RepoSlug</code>, <code>TeamSlug</code>, <code>Fingerprint</code>, <code>TokenHash</code>)</li> | |
| 302 | +</ul> | |
| 303 | +<hr> | |
| 304 | +<h2 id="5-checklist-pré-merge"><a class="header" href="#5-checklist-pré-merge">5. Checklist pré-merge</a></h2> | |
| 305 | +<p>Avant chaque merge de lot :</p> | |
| 306 | +<ul> | |
| 307 | +<li><input disabled="" type="checkbox"> <code>cargo fmt --all -- --check</code> passe</li> | |
| 308 | +<li><input disabled="" type="checkbox"> <code>cargo clippy --workspace -- -D warnings</code> passe</li> | |
| 309 | +<li><input disabled="" type="checkbox"> <code>cargo test --workspace</code> — tous les tests passent</li> | |
| 310 | +<li><input disabled="" type="checkbox"> Tests E2E Playwright passent (<code>npm run test:e2e</code>)</li> | |
| 311 | +<li><input disabled="" type="checkbox"> CSS rebuild si templates modifiés</li> | |
| 312 | +<li><input disabled="" type="checkbox"> Aucun secret en clair dans le code ou les logs</li> | |
| 313 | +<li><input disabled="" type="checkbox"> Checklist sécurité §2.2 validée (si applicable)</li> | |
| 314 | +<li><input disabled="" type="checkbox"> Pas de modification dans <code>crates/rustwarden-core/</code></li> | |
| 315 | +</ul> | |
| 316 | + | |
| 317 | + </main> | |
| 318 | + | |
| 319 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 320 | + <!-- Mobile navigation buttons --> | |
| 321 | + <a rel="prev" href="../../developer_manual/reference/schema-base-donnees.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 322 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 323 | + </a> | |
| 324 | + | |
| 325 | + <a rel="next prefetch" href="../../developer_manual/reference/api-rest-v1.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 326 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 327 | + </a> | |
| 328 | + | |
| 329 | + <div style="clear: both"></div> | |
| 330 | + </nav> | |
| 331 | + </div> | |
| 332 | + </div> | |
| 333 | + | |
| 334 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 335 | + <a rel="prev" href="../../developer_manual/reference/schema-base-donnees.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 336 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 337 | + </a> | |
| 338 | + | |
| 339 | + <a rel="next prefetch" href="../../developer_manual/reference/api-rest-v1.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 340 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 341 | + </a> | |
| 342 | + </nav> | |
| 343 | + | |
| 344 | + </div> | |
| 345 | + | |
| 346 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 347 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 348 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 349 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 350 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + <script> | |
| 355 | + window.playground_copyable = true; | |
| 356 | + </script> | |
| 357 | + | |
| 358 | + | |
| 359 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 360 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 361 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 362 | + | |
| 363 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 364 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 365 | + <script src="../../book-a0b12cfe.js"></script> | |
| 366 | + | |
| 367 | + <!-- Custom JS scripts --> | |
| 368 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 369 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + </div> | |
| 374 | + </body> | |
| 375 | +</html> |
A
book/developer_manual/reference/rustwarden-core-api.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>API rustwarden-core - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/rustwarden-core-api.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="api-rustwarden-core"><a class="header" href="#api-rustwarden-core">API rustwarden-core</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/reference/git-hooks-post-receive.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/explanation/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/reference/git-hooks-post-receive.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/explanation/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/reference/schema-base-donnees.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Schéma de la base de données - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/schema-base-donnees.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="schéma-de-la-base-de-données"><a class="header" href="#schéma-de-la-base-de-données">Schéma de la base de données</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/reference/services-api-interne.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/reference/regles-qa-anssi.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/reference/services-api-interne.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/reference/regles-qa-anssi.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/reference/services-api-interne.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Services et API interne - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/services-api-interne.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="services-et-api-interne"><a class="header" href="#services-et-api-interne">Services et API interne</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/reference/architecture-crates.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/reference/schema-base-donnees.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/reference/architecture-crates.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/reference/schema-base-donnees.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/tutorials/01-getting-started.html
+512
-0
@@ -0,0 +1,512 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>01 — Démarrer avec le code gitrust - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/tutorials/01-getting-started.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit"><a class="header" href="#premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit">Premiers pas avec gitrust : compilez, configurez et poussez votre premier commit</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Source</strong> : ce tutoriel intègre le contenu de <code>gitrust/docs/GETTING_STARTED.md</code> avec la structure pédagogique complète (objectifs Bloom, modèle mental, checkpoints observables, section « Et si ça ne marche pas »).</p> | |
| 183 | +</blockquote> | |
| 184 | +<h2 id="objectifs"><a class="header" href="#objectifs">Objectifs</a></h2> | |
| 185 | +<p>À la fin de ce tutoriel, vous saurez :</p> | |
| 186 | +<ul> | |
| 187 | +<li><strong>O1. Compiler</strong> gitrust depuis les sources et lancer l’instance de développement localement</li> | |
| 188 | +<li><strong>O2. Configurer</strong> l’environnement de développement (base de données, variables d’environnement, assets CSS)</li> | |
| 189 | +<li><strong>O3. Exécuter</strong> un premier push SSH vers votre instance locale et vérifier le résultat dans l’interface web</li> | |
| 190 | +</ul> | |
| 191 | +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2> | |
| 192 | +<ul> | |
| 193 | +<li><strong>Technique</strong> : Rust stable ≥ 1.80 (<code>rustc --version</code>), PostgreSQL ≥ 15 (<code>psql --version</code>), Node.js ≥ 18 (<code>node --version</code>), Git 2.x (<code>git --version</code>), Docker (optionnel, recommandé pour la base de données)</li> | |
| 194 | +<li><strong>Pédagogique</strong> : être un utilisateur autonome de gitrust (parcours <code>user_manual</code> complété ou équivalent) ; familiarité avec Rust (au moins 3 mois de pratique) et avec HTTP/PostgreSQL</li> | |
| 195 | +<li><strong>Temps estimé</strong> : ~45 minutes</li> | |
| 196 | +</ul> | |
| 197 | +<h2 id="vue-densemble"><a class="header" href="#vue-densemble">Vue d’ensemble</a></h2> | |
| 198 | +<p>Avant d’exécuter la première commande, prenons 3 minutes pour comprendre ce que vous allez monter et comment les pièces s’articulent.</p> | |
| 199 | +<p>gitrust est un <strong>monorepo Rust à 6 crates</strong> qui compile en un seul binaire. Quand vous lancez <code>cargo run</code>, ce binaire démarre deux serveurs simultanément : un serveur HTTP (<code>:4000</code>) pour l’interface web et l’API REST, et un serveur SSH (<code>:2222</code>) pour les opérations <code>git push/pull</code>. Ils partagent la même base de données PostgreSQL et le même stockage de dépôts bare sur disque.</p> | |
| 200 | +<pre class="mermaid">graph TB | |
| 201 | + subgraph sources ["Sources gitrust (monorepo Rust)"] | |
| 202 | + C1[rustwarden-core<br/>auth, sessions, middleware] | |
| 203 | + C2[gitrust-core<br/>modèles, services métier] | |
| 204 | + C3[gitrust-git<br/>opérations Git bare] | |
| 205 | + C4[gitrust-web<br/>handlers HTTP + templates] | |
| 206 | + C5[gitrust-ssh<br/>serveur SSH Git] | |
| 207 | + C6[gitrust-hooks<br/>post-receive, pre-receive] | |
| 208 | + end | |
| 209 | + | |
| 210 | + subgraph runtime ["Processus unique (cargo run)"] | |
| 211 | + HTTP["HTTP :4000<br/>UI + API REST"] | |
| 212 | + SSH["SSH :2222<br/>git push/pull"] | |
| 213 | + end | |
| 214 | + | |
| 215 | + subgraph storage ["Stockage"] | |
| 216 | + PG[(PostgreSQL<br/>comptes, dépôts,<br/>issues, PRs)] | |
| 217 | + REPOS[Dépôts bare<br/>data/repos/] | |
| 218 | + end | |
| 219 | + | |
| 220 | + C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| HTTP | |
| 221 | + C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| SSH | |
| 222 | + HTTP & SSH --> PG | |
| 223 | + HTTP & SSH --> REPOS | |
| 224 | +</pre> | |
| 225 | + | |
| 226 | +<p><strong>Ce que vous allez faire</strong> : cloner les sources → préparer PostgreSQL → copier et remplir <code>.env</code> → compiler les assets CSS → lancer <code>cargo run</code> → vérifier l’instance → pousser un premier commit via SSH.</p> | |
| 227 | +<hr> | |
| 228 | +<h2 id="étape-1--vérifiez-les-pré-requis-système"><a class="header" href="#étape-1--vérifiez-les-pré-requis-système">Étape 1 : Vérifiez les pré-requis système</a></h2> | |
| 229 | +<p>Avant de cloner quoi que ce soit, vérifiez que tous les outils nécessaires sont installés :</p> | |
| 230 | +<pre><code class="language-bash">rustc --version && cargo --version && psql --version && node --version && git --version | |
| 231 | +</code></pre> | |
| 232 | +<p>Sortie attendue (versions exactes peuvent varier) :</p> | |
| 233 | +<pre><code>rustc 1.82.0 (f6e511eec 2024-10-15) | |
| 234 | +cargo 1.82.0 (8f40fc59f 2024-10-15) | |
| 235 | +psql (PostgreSQL) 16.3 | |
| 236 | +v20.11.0 | |
| 237 | +git version 2.43.0 | |
| 238 | +</code></pre> | |
| 239 | +<p>Si des dépendances système manquent, installez-les :</p> | |
| 240 | +<pre><code class="language-bash"># Debian / Ubuntu | |
| 241 | +sudo apt install build-essential pkg-config libssl-dev libpq-dev cmake git | |
| 242 | + | |
| 243 | +# macOS | |
| 244 | +brew install postgresql openssl cmake | |
| 245 | +</code></pre> | |
| 246 | +<p><strong>Checkpoint</strong> : toutes les commandes de vérification doivent retourner un numéro de version sans erreur. Si <code>rustc</code> n’est pas trouvé, installez Rust via <code>curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh</code> puis rechargez votre shell.</p> | |
| 247 | +<hr> | |
| 248 | +<h2 id="étape-2--clonez-le-projet"><a class="header" href="#étape-2--clonez-le-projet">Étape 2 : Clonez le projet</a></h2> | |
| 249 | +<pre><code class="language-bash">git clone https://demo.gitrust.eu/gitrust/gitrust.git | |
| 250 | +cd gitrust | |
| 251 | +</code></pre> | |
| 252 | +<p>Sortie attendue :</p> | |
| 253 | +<pre><code>Cloning into 'gitrust'... | |
| 254 | +remote: Enumerating objects: 12847, done. | |
| 255 | +remote: Counting objects: 100% (12847/12847), done. | |
| 256 | +Receiving objects: 100% (12847/12847), 18.42 MiB | 4.20 MiB/s, done. | |
| 257 | +</code></pre> | |
| 258 | +<p><strong>Checkpoint</strong> : vérifiez que la structure de crates est présente :</p> | |
| 259 | +<pre><code class="language-bash">ls crates/ | |
| 260 | +</code></pre> | |
| 261 | +<p>Sortie attendue :</p> | |
| 262 | +<pre><code>gitrust-core gitrust-git gitrust-hooks gitrust-ssh gitrust-web rustwarden-core | |
| 263 | +</code></pre> | |
| 264 | +<hr> | |
| 265 | +<h2 id="étape-3--configurez-lenvironnement-env"><a class="header" href="#étape-3--configurez-lenvironnement-env">Étape 3 : Configurez l’environnement (.env)</a></h2> | |
| 266 | +<p>Copiez le fichier d’exemple et éditez les 5 valeurs essentielles :</p> | |
| 267 | +<pre><code class="language-bash">cp .env.example .env | |
| 268 | +</code></pre> | |
| 269 | +<p>Ouvrez <code>.env</code> dans votre éditeur et renseignez ces valeurs :</p> | |
| 270 | +<pre><code class="language-env"># Connexion à la base de données | |
| 271 | +DATABASE_URL=postgres://gitrust:motdepasse@localhost:5432/gitrust | |
| 272 | + | |
| 273 | +# Clé secrète JWT (générez-la avec : openssl rand -hex 32) | |
| 274 | +JWT_SECRET=votre_cle_secrete_64_caracteres | |
| 275 | + | |
| 276 | +# Compte administrateur créé au premier lancement | |
| 277 | +ADMIN_USERNAME=admin | |
| 278 | +ADMIN_EMAIL=admin@example.com | |
| 279 | +ADMIN_PASSWORD=MotDePasseFort123! | |
| 280 | +</code></pre> | |
| 281 | +<blockquote> | |
| 282 | +<p>Les autres variables ont des valeurs par défaut raisonnables pour le développement. Consultez <code>.env.example</code> pour la liste complète.</p> | |
| 283 | +</blockquote> | |
| 284 | +<p>Générez une vraie valeur pour <code>JWT_SECRET</code> :</p> | |
| 285 | +<pre><code class="language-bash">openssl rand -hex 32 | |
| 286 | +</code></pre> | |
| 287 | +<p>Sortie attendue (valeur différente à chaque exécution) :</p> | |
| 288 | +<pre><code>4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a | |
| 289 | +</code></pre> | |
| 290 | +<p>Copiez cette valeur dans <code>.env</code> pour <code>JWT_SECRET</code>.</p> | |
| 291 | +<p><strong>Checkpoint</strong> : vérifiez qu’aucune valeur d’exemple reste dans <code>.env</code> :</p> | |
| 292 | +<pre><code class="language-bash">grep -E "votre_cle|example\.com|MotDePasse" .env | |
| 293 | +</code></pre> | |
| 294 | +<p>La commande doit retourner vide (aucune ligne). Si elle retourne des lignes, ces valeurs placeholder sont encore présentes — l’application démarrera mais avec une configuration non sécurisée.</p> | |
| 295 | +<hr> | |
| 296 | +<h2 id="étape-4--préparez-la-base-de-données-postgresql"><a class="header" href="#étape-4--préparez-la-base-de-données-postgresql">Étape 4 : Préparez la base de données PostgreSQL</a></h2> | |
| 297 | +<p>Vous avez deux options :</p> | |
| 298 | +<p><strong>Option A — Docker (recommandé pour débuter) :</strong></p> | |
| 299 | +<pre><code class="language-bash">cd database && docker compose up -d && cd .. | |
| 300 | +</code></pre> | |
| 301 | +<p>Sortie attendue :</p> | |
| 302 | +<pre><code>[+] Running 2/2 | |
| 303 | + ✔ Container gitrust_postgres_dev Started 0.8s | |
| 304 | + ✔ Container gitrust_pgadmin Started 1.1s | |
| 305 | +</code></pre> | |
| 306 | +<p><strong>Option B — PostgreSQL existant sur la machine :</strong></p> | |
| 307 | +<pre><code class="language-bash">psql -U postgres << 'SQL' | |
| 308 | +CREATE USER gitrust WITH PASSWORD 'motdepasse'; | |
| 309 | +CREATE DATABASE gitrust OWNER gitrust; | |
| 310 | +SQL | |
| 311 | +</code></pre> | |
| 312 | +<p>Sortie attendue :</p> | |
| 313 | +<pre><code>CREATE ROLE | |
| 314 | +CREATE DATABASE | |
| 315 | +</code></pre> | |
| 316 | +<p>Adaptez le mot de passe dans <code>DATABASE_URL</code> dans <code>.env</code> si vous utilisez l’option B.</p> | |
| 317 | +<p><strong>Checkpoint</strong> : vérifiez que la base est accessible depuis l’application :</p> | |
| 318 | +<pre><code class="language-bash">psql "$DATABASE_URL" -c "SELECT version();" | |
| 319 | +</code></pre> | |
| 320 | +<p>Sortie attendue :</p> | |
| 321 | +<pre><code> version | |
| 322 | +------------------------------------------------------------------------------------------------------- | |
| 323 | + PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, 64-bit | |
| 324 | +(1 row) | |
| 325 | +</code></pre> | |
| 326 | +<p>Si vous obtenez <code>psql: error: connection to server failed</code>, vérifiez que PostgreSQL tourne et que <code>DATABASE_URL</code> correspond.</p> | |
| 327 | +<hr> | |
| 328 | +<h2 id="étape-5--compilez-les-assets-css"><a class="header" href="#étape-5--compilez-les-assets-css">Étape 5 : Compilez les assets CSS</a></h2> | |
| 329 | +<p>gitrust utilise Tailwind CSS + DaisyUI. Les assets doivent être compilés localement — aucun CDN, tous les fichiers sont servis depuis <code>static/</code> :</p> | |
| 330 | +<pre><code class="language-bash">npm install | |
| 331 | +npx tailwindcss -i static/css/input.css -o static/css/style.css --minify | |
| 332 | +</code></pre> | |
| 333 | +<p>Sortie attendue :</p> | |
| 334 | +<pre><code>added 98 packages in 3s | |
| 335 | + | |
| 336 | +Rebuilding... | |
| 337 | +Done in 1842ms. | |
| 338 | +</code></pre> | |
| 339 | +<p><strong>Checkpoint</strong> : vérifiez que le fichier CSS est généré :</p> | |
| 340 | +<pre><code class="language-bash">ls -lh static/css/style.css | |
| 341 | +</code></pre> | |
| 342 | +<p>Sortie attendue :</p> | |
| 343 | +<pre><code>-rw-r--r-- 1 vous vous 45K avr 17 10:15 static/css/style.css | |
| 344 | +</code></pre> | |
| 345 | +<p>Si le fichier fait 0 octet ou n’existe pas, la compilation a échoué — relancez <code>npm install</code> puis la commande <code>npx tailwindcss</code>.</p> | |
| 346 | +<hr> | |
| 347 | +<h2 id="étape-6--lancez-lapplication"><a class="header" href="#étape-6--lancez-lapplication">Étape 6 : Lancez l’application</a></h2> | |
| 348 | +<pre><code class="language-bash">cargo run | |
| 349 | +</code></pre> | |
| 350 | +<p>La première compilation prend 2 à 5 minutes (toutes les dépendances sont compilées). Les compilations suivantes sont incrémentales et beaucoup plus rapides.</p> | |
| 351 | +<p>Au premier lancement, gitrust exécute automatiquement :</p> | |
| 352 | +<ol> | |
| 353 | +<li>Les migrations de base de données (création de toutes les tables)</li> | |
| 354 | +<li>La création du compte administrateur (depuis <code>.env</code>)</li> | |
| 355 | +<li>La génération de la clé SSH host (<code>data/ssh_host_ed25519_key</code>)</li> | |
| 356 | +<li>La création du répertoire de stockage des dépôts (<code>data/repos/</code>)</li> | |
| 357 | +</ol> | |
| 358 | +<p>Sortie attendue (après compilation) :</p> | |
| 359 | +<pre><code> Compiling gitrust-web v0.9.0 (/home/vous/gitrust/crates/gitrust-web) | |
| 360 | + Finished `dev` profile [unoptimized + debuginfo] target(s) in 187.42s | |
| 361 | + Running `target/debug/gitrust` | |
| 362 | +2026-04-17T10:20:00Z INFO gitrust > Starting gitrust v0.9.0 | |
| 363 | +2026-04-17T10:20:00Z INFO gitrust > Running database migrations... applied 42 | |
| 364 | +2026-04-17T10:20:01Z INFO gitrust > Admin account created: admin | |
| 365 | +2026-04-17T10:20:01Z INFO gitrust > SSH host key: SHA256:xxxxxxxxxxxxxxxxxxxx | |
| 366 | +Server listening on http://0.0.0.0:4000 | |
| 367 | +</code></pre> | |
| 368 | +<p><strong>Checkpoint</strong> : ouvrez <code>http://localhost:4000</code> dans votre navigateur. Vous devez voir la page d’accueil gitrust. Connectez-vous avec les identifiants <code>ADMIN_USERNAME</code> / <code>ADMIN_PASSWORD</code> définis dans <code>.env</code>. Si la page ne charge pas, vérifiez que le message <code>Server listening on http://0.0.0.0:4000</code> est bien apparu dans les logs.</p> | |
| 369 | +<hr> | |
| 370 | +<h2 id="étape-7--créez-un-dépôt-et-poussez-votre-premier-commit"><a class="header" href="#étape-7--créez-un-dépôt-et-poussez-votre-premier-commit">Étape 7 : Créez un dépôt et poussez votre premier commit</a></h2> | |
| 371 | +<p>Dans l’interface web (<code>http://localhost:4000</code>), cliquez sur <strong>« New repository »</strong>, donnez un nom (ex. <code>mon-projet</code>) et cliquez <strong>Créer</strong>.</p> | |
| 372 | +<p>Ajoutez votre clé SSH publique dans <strong>Settings > SSH Keys</strong> en collant le contenu de <code>~/.ssh/id_ed25519.pub</code>.</p> | |
| 373 | +<p>Puis dans votre terminal :</p> | |
| 374 | +<pre><code class="language-bash">git clone ssh://git@localhost:2222/admin/mon-projet.git | |
| 375 | +cd mon-projet | |
| 376 | + | |
| 377 | +echo "# Mon projet" > README.md | |
| 378 | +git add README.md | |
| 379 | +git commit -m "Initial commit" | |
| 380 | +git push origin main | |
| 381 | +</code></pre> | |
| 382 | +<p>Sortie attendue :</p> | |
| 383 | +<pre><code>Cloning into 'mon-projet'... | |
| 384 | +warning: You appear to have cloned an empty repository. | |
| 385 | +[main (root-commit) a1b2c3d] Initial commit | |
| 386 | + 1 file changed, 1 insertion(+) | |
| 387 | + create mode 100644 README.md | |
| 388 | +Enumerating objects: 3, done. | |
| 389 | +Counting objects: 100% (3/3), done. | |
| 390 | +Writing objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done. | |
| 391 | +Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 | |
| 392 | +To ssh://localhost:2222/admin/mon-projet.git | |
| 393 | + * [new branch] main -> main | |
| 394 | +</code></pre> | |
| 395 | +<p><strong>Checkpoint</strong> : retournez dans le navigateur sur <code>http://localhost:4000/admin/mon-projet</code>. La page doit afficher le fichier <code>README.md</code> avec le contenu <code># Mon projet</code> et indiquer 1 commit sur la branche <code>main</code>.</p> | |
| 396 | +<hr> | |
| 397 | +<h2 id="fonctionnalités-supplémentaires-disponibles"><a class="header" href="#fonctionnalités-supplémentaires-disponibles">Fonctionnalités supplémentaires disponibles</a></h2> | |
| 398 | +<h3 id="ci-intégrée-optionnelle"><a class="header" href="#ci-intégrée-optionnelle">CI intégrée (optionnelle)</a></h3> | |
| 399 | +<p>La CI s’exécute sur un serveur de build via SSH + rsync. Configurez dans <code>.env</code> :</p> | |
| 400 | +<pre><code class="language-env"># Même machine (défaut pour le développement) | |
| 401 | +CI_REMOTE_HOST=localhost | |
| 402 | + | |
| 403 | +# Ou serveur dédié | |
| 404 | +CI_REMOTE_HOST=192.168.13.110 | |
| 405 | +CI_REMOTE_USER=ci-runner | |
| 406 | +</code></pre> | |
| 407 | +<p><strong>Easy Mode</strong> — ajoutez <code>.gitrust-ci.yml</code> à la racine de votre dépôt :</p> | |
| 408 | +<pre><code class="language-yaml">language: rust | |
| 409 | + | |
| 410 | +build: | |
| 411 | + command: "cargo build --release" | |
| 412 | + | |
| 413 | +tests: | |
| 414 | + command: "cargo test" | |
| 415 | +</code></pre> | |
| 416 | +<p><strong>Power Mode</strong> — placez un module Dagger dans <code>.dagger/</code> à la racine. gitrust exécutera <code>dagger call -m .dagger/ ci</code>.</p> | |
| 417 | +<h3 id="notifications"><a class="header" href="#notifications">Notifications</a></h3> | |
| 418 | +<p>Configurez SMTP dans <code>.env</code> pour les notifications e-mail :</p> | |
| 419 | +<pre><code class="language-env">SMTP_HOST=smtp.example.com | |
| 420 | +SMTP_PORT=587 | |
| 421 | +SMTP_USER=user | |
| 422 | +SMTP_PASSWORD=password | |
| 423 | +SMTP_FROM=noreply@gitrust.eu | |
| 424 | +</code></pre> | |
| 425 | +<h3 id="langue-de-linterface"><a class="header" href="#langue-de-linterface">Langue de l’interface</a></h3> | |
| 426 | +<p>gitrust est disponible en 6 langues (fr, en, de, es, pt, it). Définissez la langue par défaut de l’instance :</p> | |
| 427 | +<pre><code class="language-env">DEFAULT_LOCALE=fr | |
| 428 | +</code></pre> | |
| 429 | +<hr> | |
| 430 | +<h2 id="récapitulatif"><a class="header" href="#récapitulatif">Récapitulatif</a></h2> | |
| 431 | +<ul> | |
| 432 | +<li>✓ <strong>O1 accompli</strong> : gitrust est compilé depuis les sources et tourne localement — <code>cargo run</code> affiche « Server listening on http://0.0.0.0:4000 »</li> | |
| 433 | +<li>✓ <strong>O2 accompli</strong> : l’environnement est configuré — <code>.env</code> rempli, PostgreSQL connecté, assets CSS générés, migrations appliquées</li> | |
| 434 | +<li>✓ <strong>O3 accompli</strong> : un premier push SSH a réussi — le commit est visible dans l’interface web à <code>http://localhost:4000/admin/mon-projet</code></li> | |
| 435 | +</ul> | |
| 436 | +<hr> | |
| 437 | +<h2 id="et-si-ça-ne-marche-pas"><a class="header" href="#et-si-ça-ne-marche-pas">Et si ça ne marche pas</a></h2> | |
| 438 | +<div class="table-wrapper"> | |
| 439 | +<table> | |
| 440 | +<thead> | |
| 441 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr> | |
| 442 | +</thead> | |
| 443 | +<tbody> | |
| 444 | +<tr><td><code>error[E0463]: can't find crate for 'std'</code> à la compilation</td><td>Toolchain Rust manquante ou mauvaise version</td><td>Exécutez <code>rustup update stable && rustup default stable</code>. Vérifiez avec <code>rustc --version</code> ≥ 1.80</td></tr> | |
| 445 | +<tr><td><code>connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed</code></td><td>PostgreSQL non démarré ou <code>DATABASE_URL</code> incorrect</td><td>Démarrez PostgreSQL (<code>sudo systemctl start postgresql</code> ou <code>docker compose up -d</code> dans <code>database/</code>). Vérifiez que <code>DATABASE_URL</code> dans <code>.env</code> correspond</td></tr> | |
| 446 | +<tr><td><code>Permission denied (publickey)</code> lors du <code>git push</code></td><td>Clé SSH non enregistrée dans gitrust ou mauvais port</td><td>Vérifiez dans <em>Settings > SSH Keys</em> que la clé est présente. Testez avec <code>ssh -T git@localhost -p 2222</code> — vous devez voir « Vous êtes authentifié »</td></tr> | |
| 447 | +</tbody> | |
| 448 | +</table> | |
| 449 | +</div> | |
| 450 | +<hr> | |
| 451 | +<h2 id="prochaine-étape"><a class="header" href="#prochaine-étape">Prochaine étape</a></h2> | |
| 452 | +<p>→ <a href="02-premiere-contribution.html">02 — Première contribution : clone, build, test, PR</a> : apprenez à créer une feature branch, écrire des tests, et soumettre votre première pull request en suivant le workflow gitrust (~90 min)</p> | |
| 453 | + | |
| 454 | + </main> | |
| 455 | + | |
| 456 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 457 | + <!-- Mobile navigation buttons --> | |
| 458 | + <a rel="prev" href="../../developer_manual/tutorials/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 459 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 460 | + </a> | |
| 461 | + | |
| 462 | + <a rel="next prefetch" href="../../developer_manual/tutorials/02-premiere-contribution.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 463 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 464 | + </a> | |
| 465 | + | |
| 466 | + <div style="clear: both"></div> | |
| 467 | + </nav> | |
| 468 | + </div> | |
| 469 | + </div> | |
| 470 | + | |
| 471 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 472 | + <a rel="prev" href="../../developer_manual/tutorials/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 473 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 474 | + </a> | |
| 475 | + | |
| 476 | + <a rel="next prefetch" href="../../developer_manual/tutorials/02-premiere-contribution.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 477 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 478 | + </a> | |
| 479 | + </nav> | |
| 480 | + | |
| 481 | + </div> | |
| 482 | + | |
| 483 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 484 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 485 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 486 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 487 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + <script> | |
| 492 | + window.playground_copyable = true; | |
| 493 | + </script> | |
| 494 | + | |
| 495 | + | |
| 496 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 497 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 498 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 499 | + | |
| 500 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 501 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 502 | + <script src="../../book-a0b12cfe.js"></script> | |
| 503 | + | |
| 504 | + <!-- Custom JS scripts --> | |
| 505 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 506 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + </div> | |
| 511 | + </body> | |
| 512 | +</html> |
A
book/developer_manual/tutorials/02-premiere-contribution.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>02 — Première contribution - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/tutorials/02-premiere-contribution.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="02--première-contribution"><a class="header" href="#02--première-contribution">02 — Première contribution</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/tutorials/01-getting-started.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/tutorials/03-creer-un-worker-async.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/tutorials/01-getting-started.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/tutorials/03-creer-un-worker-async.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/tutorials/03-creer-un-worker-async.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>03 — Créer un worker async (capstone) - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/tutorials/03-creer-un-worker-async.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="03--créer-un-worker-async-capstone"><a class="header" href="#03--créer-un-worker-async-capstone">03 — Créer un worker async (capstone)</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/tutorials/02-premiere-contribution.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/how-to/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/tutorials/02-premiere-contribution.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/how-to/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/developer_manual/tutorials/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Tutoriels - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/tutorials/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="tutoriels"><a class="header" href="#tutoriels">Tutoriels</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../developer_manual/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../developer_manual/tutorials/01-getting-started.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../developer_manual/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../developer_manual/tutorials/01-getting-started.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/elasticlunr-ef4e11c1.min.js
+10
-0
@@ -0,0 +1,10 @@
| 1 | +/** | |
| 2 | + * elasticlunr - http://weixsong.github.io | |
| 3 | + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.5 | |
| 4 | + * | |
| 5 | + * Copyright (C) 2017 Oliver Nightingale | |
| 6 | + * Copyright (C) 2017 Wei Song | |
| 7 | + * MIT Licensed | |
| 8 | + * @license | |
| 9 | + */ | |
| 10 | +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u<s.length;u++){var a=s[u];r[a]=this.pipeline.run(t.tokenizer(e[a]))}var l={};for(var c in o){var d=r[c]||r.any;if(d){var f=this.fieldSearch(d,c,o),h=o[c].boost;for(var p in f)f[p]=f[p]*h;for(var p in f)p in l?l[p]+=f[p]:l[p]=f[p]}}var v,g=[];for(var p in l)v={ref:p,score:l[p]},this.documentStore.hasDoc(p)&&(v.doc=this.documentStore.getDoc(p)),g.push(v);return g.sort(function(e,t){return t.score-e.score}),g},t.Index.prototype.fieldSearch=function(e,t,n){var i=n[t].bool,o=n[t].expand,r=n[t].boost,s=null,u={};return 0!==r?(e.forEach(function(e){var n=[e];1==o&&(n=this.index[t].expandToken(e));var r={};n.forEach(function(n){var o=this.index[t].getDocs(n),a=this.idf(n,t);if(s&&"AND"==i){var l={};for(var c in s)c in o&&(l[c]=o[c]);o=l}n==e&&this.fieldSearchStats(u,n,o);for(var c in o){var d=this.index[t].getTermFrequency(n,c),f=this.documentStore.getFieldLength(c,t),h=1;0!=f&&(h=1/Math.sqrt(f));var p=1;n!=e&&(p=.15*(1-(n.length-e.length)/n.length));var v=d*a*h*p;c in r?r[c]+=v:r[c]=v}},this),s=this.mergeScores(s,r,i)},this),s=this.coordNorm(s,u,e.length)):void 0},t.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var i={};for(var o in t)o in e&&(i[o]=e[o]+t[o]);return i}for(var o in t)o in e?e[o]+=t[o]:e[o]=t[o];return e},t.Index.prototype.fieldSearchStats=function(e,t,n){for(var i in n)i in e?e[i].push(t):e[i]=[t]},t.Index.prototype.coordNorm=function(e,t,n){for(var i in e)if(i in t){var o=t[i].length;e[i]=e[i]*o/n}return e},t.Index.prototype.toJSON=function(){var e={};return this._fields.forEach(function(t){e[t]=this.index[t].toJSON()},this),{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:e,pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},t.DocumentStore=function(e){this._save=null===e||void 0===e?!0:e,this.docs={},this.docInfo={},this.length=0},t.DocumentStore.load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},t.DocumentStore.prototype.isDocStored=function(){return this._save},t.DocumentStore.prototype.addDoc=function(t,n){this.hasDoc(t)||this.length++,this.docs[t]=this._save===!0?e(n):null},t.DocumentStore.prototype.getDoc=function(e){return this.hasDoc(e)===!1?null:this.docs[e]},t.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},t.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},t.DocumentStore.prototype.addFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},t.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},t.DocumentStore.prototype.getFieldLength=function(e,t){return null===e||void 0===e?0:e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},t.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},t.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,u="^("+o+")?"+r+o+"("+r+")?$",a="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,c=new RegExp(s),d=new RegExp(a),f=new RegExp(u),h=new RegExp(l),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,x=new RegExp("([^aeiouylsz])\\1$"),w=new RegExp("^"+o+i+"[^aeiouwxy]$"),I=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,D=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,_=/^(.+?)e$/,P=/ll$/,k=new RegExp("^"+o+i+"[^aeiouwxy]$"),z=function(n){var i,o,r,s,u,a,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,u=v,s.test(n)?n=n.replace(s,"$1$2"):u.test(n)&&(n=n.replace(u,"$1$2")),s=g,u=m,s.test(n)){var z=s.exec(n);s=c,s.test(z[1])&&(s=y,n=n.replace(s,""))}else if(u.test(n)){var z=u.exec(n);i=z[1],u=h,u.test(i)&&(n=i,u=S,a=x,l=w,u.test(n)?n+="e":a.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=I,s.test(n)){var z=s.exec(n);i=z[1],n=i+"i"}if(s=b,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+e[o])}if(s=E,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+t[o])}if(s=D,u=F,s.test(n)){var z=s.exec(n);i=z[1],s=d,s.test(i)&&(n=i)}else if(u.test(n)){var z=u.exec(n);i=z[1]+z[2],u=d,u.test(i)&&(n=i)}if(s=_,s.test(n)){var z=s.exec(n);i=z[1],s=d,u=f,a=k,(s.test(i)||u.test(i)&&!a.test(i))&&(n=i)}return s=P,u=d,s.test(n)&&u.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return z}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==!0?e:void 0},t.clearStopWords=function(){t.stopWordFilter.stopWords={}},t.addStopWords=function(e){null!=e&&Array.isArray(e)!==!1&&e.forEach(function(e){t.stopWordFilter.stopWords[e]=!0},this)},t.resetStopWords=function(){t.stopWordFilter.stopWords=t.defaultStopWords},t.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,"do":!0,does:!0,either:!0,"else":!0,ever:!0,every:!0,"for":!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,"if":!0,"in":!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,"this":!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,"while":!0,who:!0,whom:!0,why:!0,will:!0,"with":!0,would:!0,yet:!0,you:!0,your:!0},t.stopWordFilter.stopWords=t.defaultStopWords,t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(e){if(null===e||void 0===e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.InvertedIndex=function(){this.root={docs:{},df:0}},t.InvertedIndex.load=function(e){var t=new this;return t.root=e.root,t},t.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,i=0;i<=e.length-1;){var o=e[i];o in n||(n[o]={docs:{},df:0}),i+=1,n=n[o]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},t.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},t.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},t.InvertedIndex.prototype.getDocs=function(e){var t=this.getNode(e);return null==t?{}:t.docs},t.InvertedIndex.prototype.getTermFrequency=function(e,t){var n=this.getNode(e);return null==n?0:t in n.docs?n.docs[t].tf:0},t.InvertedIndex.prototype.getDocFreq=function(e){var t=this.getNode(e);return null==t?0:t.df},t.InvertedIndex.prototype.removeToken=function(e,t){if(e){var n=this.getNode(e);null!=n&&t in n.docs&&(delete n.docs[t],n.df-=1)}},t.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];var t=t||[];if(void 0==n&&(n=this.getNode(e),null==n))return t;n.df>0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e<arguments.length;e++)t=arguments[e],~this.indexOf(t)||this.elements.splice(this.locationFor(t),0,t);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]<u[i]?n++:s[n]>u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o<r.length;o++)i.add(r[o]);return i},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.elasticlunr=t()}(this,function(){return t})}(); | |
| 10 | < \ No newline at end of file |
A
book/favicon-8114d1fc.png
+0
-0
A
book/favicon-de23e50b.svg
+22
-0
@@ -0,0 +1,22 @@
| 1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 199.7 184.2"> | |
| 2 | + <style> | |
| 3 | + @media (prefers-color-scheme: dark) { | |
| 4 | + svg { fill: white; } | |
| 5 | + } | |
| 6 | + </style> | |
| 7 | +<path d="M189.5,36.8c0.2,2.8,0,5.1-0.6,6.8L153,162c-0.6,2.1-2,3.7-4.2,5c-2.2,1.2-4.4,1.9-6.7,1.9H31.4c-9.6,0-15.3-2.8-17.3-8.4 | |
| 8 | + c-0.8-2.2-0.8-3.9,0.1-5.2c0.9-1.2,2.4-1.8,4.6-1.8H123c7.4,0,12.6-1.4,15.4-4.1s5.7-8.9,8.6-18.4l32.9-108.6 | |
| 9 | + c1.8-5.9,1-11.1-2.2-15.6S169.9,0,164,0H72.7c-1,0-3.1,0.4-6.1,1.1l0.1-0.4C64.5,0.2,62.6,0,61,0.1s-3,0.5-4.3,1.4 | |
| 10 | + c-1.3,0.9-2.4,1.8-3.2,2.8S52,6.5,51.2,8.1c-0.8,1.6-1.4,3-1.9,4.3s-1.1,2.7-1.8,4.2c-0.7,1.5-1.3,2.7-2,3.7c-0.5,0.6-1.2,1.5-2,2.5 | |
| 11 | + s-1.6,2-2.2,2.8s-0.9,1.5-1.1,2.2c-0.2,0.7-0.1,1.8,0.2,3.2c0.3,1.4,0.4,2.4,0.4,3.1c-0.3,3-1.4,6.9-3.3,11.6 | |
| 12 | + c-1.9,4.7-3.6,8.1-5.1,10.1c-0.3,0.4-1.2,1.3-2.6,2.7c-1.4,1.4-2.3,2.6-2.6,3.7c-0.3,0.4-0.3,1.5-0.1,3.4c0.3,1.8,0.4,3.1,0.3,3.8 | |
| 13 | + c-0.3,2.7-1.3,6.3-3,10.8c-1.7,4.5-3.4,8.2-5,11c-0.2,0.5-0.9,1.4-2,2.8c-1.1,1.4-1.8,2.5-2,3.4c-0.2,0.6-0.1,1.8,0.1,3.4 | |
| 14 | + c0.2,1.6,0.2,2.8-0.1,3.6c-0.6,3-1.8,6.7-3.6,11c-1.8,4.3-3.6,7.9-5.4,11c-0.5,0.8-1.1,1.7-2,2.8c-0.8,1.1-1.5,2-2,2.8 | |
| 15 | + s-0.8,1.6-1,2.5c-0.1,0.5,0,1.3,0.4,2.3c0.3,1.1,0.4,1.9,0.4,2.6c-0.1,1.1-0.2,2.6-0.5,4.4c-0.2,1.8-0.4,2.9-0.4,3.2 | |
| 16 | + c-1.8,4.8-1.7,9.9,0.2,15.2c2.2,6.2,6.2,11.5,11.9,15.8c5.7,4.3,11.7,6.4,17.8,6.4h110.7c5.2,0,10.1-1.7,14.7-5.2s7.7-7.8,9.2-12.9 | |
| 17 | + l33-108.6c1.8-5.8,1-10.9-2.2-15.5C194.9,39.7,192.6,38,189.5,36.8z M59.6,122.8L73.8,80c0,0,7,0,10.8,0s28.8-1.7,25.4,17.5 | |
| 18 | + c-3.4,19.2-18.8,25.2-36.8,25.4S59.6,122.8,59.6,122.8z M78.6,116.8c4.7-0.1,18.9-2.9,22.1-17.1S89.2,86.3,89.2,86.3l-8.9,0 | |
| 19 | + l-10.2,30.5C70.2,116.9,74,116.9,78.6,116.8z M75.3,68.7L89,26.2h9.8l0.8,34l23.6-34h9.9l-13.6,42.5h-7.1l12.5-35.4l-24.5,35.4h-6.8 | |
| 20 | + l-0.8-35L82,68.7H75.3z"/> | |
| 21 | +</svg> | |
| 22 | +<!-- Original image Copyright Dave Gandy — CC BY 4.0 License --> |
A
book/fonts/OPEN-SANS-LICENSE.txt
+202
-0
@@ -0,0 +1,202 @@
| 1 | + | |
| 2 | + Apache License | |
| 3 | + Version 2.0, January 2004 | |
| 4 | + http://www.apache.org/licenses/ | |
| 5 | + | |
| 6 | + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | |
| 7 | + | |
| 8 | + 1. Definitions. | |
| 9 | + | |
| 10 | + "License" shall mean the terms and conditions for use, reproduction, | |
| 11 | + and distribution as defined by Sections 1 through 9 of this document. | |
| 12 | + | |
| 13 | + "Licensor" shall mean the copyright owner or entity authorized by | |
| 14 | + the copyright owner that is granting the License. | |
| 15 | + | |
| 16 | + "Legal Entity" shall mean the union of the acting entity and all | |
| 17 | + other entities that control, are controlled by, or are under common | |
| 18 | + control with that entity. For the purposes of this definition, | |
| 19 | + "control" means (i) the power, direct or indirect, to cause the | |
| 20 | + direction or management of such entity, whether by contract or | |
| 21 | + otherwise, or (ii) ownership of fifty percent (50%) or more of the | |
| 22 | + outstanding shares, or (iii) beneficial ownership of such entity. | |
| 23 | + | |
| 24 | + "You" (or "Your") shall mean an individual or Legal Entity | |
| 25 | + exercising permissions granted by this License. | |
| 26 | + | |
| 27 | + "Source" form shall mean the preferred form for making modifications, | |
| 28 | + including but not limited to software source code, documentation | |
| 29 | + source, and configuration files. | |
| 30 | + | |
| 31 | + "Object" form shall mean any form resulting from mechanical | |
| 32 | + transformation or translation of a Source form, including but | |
| 33 | + not limited to compiled object code, generated documentation, | |
| 34 | + and conversions to other media types. | |
| 35 | + | |
| 36 | + "Work" shall mean the work of authorship, whether in Source or | |
| 37 | + Object form, made available under the License, as indicated by a | |
| 38 | + copyright notice that is included in or attached to the work | |
| 39 | + (an example is provided in the Appendix below). | |
| 40 | + | |
| 41 | + "Derivative Works" shall mean any work, whether in Source or Object | |
| 42 | + form, that is based on (or derived from) the Work and for which the | |
| 43 | + editorial revisions, annotations, elaborations, or other modifications | |
| 44 | + represent, as a whole, an original work of authorship. For the purposes | |
| 45 | + of this License, Derivative Works shall not include works that remain | |
| 46 | + separable from, or merely link (or bind by name) to the interfaces of, | |
| 47 | + the Work and Derivative Works thereof. | |
| 48 | + | |
| 49 | + "Contribution" shall mean any work of authorship, including | |
| 50 | + the original version of the Work and any modifications or additions | |
| 51 | + to that Work or Derivative Works thereof, that is intentionally | |
| 52 | + submitted to Licensor for inclusion in the Work by the copyright owner | |
| 53 | + or by an individual or Legal Entity authorized to submit on behalf of | |
| 54 | + the copyright owner. For the purposes of this definition, "submitted" | |
| 55 | + means any form of electronic, verbal, or written communication sent | |
| 56 | + to the Licensor or its representatives, including but not limited to | |
| 57 | + communication on electronic mailing lists, source code control systems, | |
| 58 | + and issue tracking systems that are managed by, or on behalf of, the | |
| 59 | + Licensor for the purpose of discussing and improving the Work, but | |
| 60 | + excluding communication that is conspicuously marked or otherwise | |
| 61 | + designated in writing by the copyright owner as "Not a Contribution." | |
| 62 | + | |
| 63 | + "Contributor" shall mean Licensor and any individual or Legal Entity | |
| 64 | + on behalf of whom a Contribution has been received by Licensor and | |
| 65 | + subsequently incorporated within the Work. | |
| 66 | + | |
| 67 | + 2. Grant of Copyright License. Subject to the terms and conditions of | |
| 68 | + this License, each Contributor hereby grants to You a perpetual, | |
| 69 | + worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |
| 70 | + copyright license to reproduce, prepare Derivative Works of, | |
| 71 | + publicly display, publicly perform, sublicense, and distribute the | |
| 72 | + Work and such Derivative Works in Source or Object form. | |
| 73 | + | |
| 74 | + 3. Grant of Patent License. Subject to the terms and conditions of | |
| 75 | + this License, each Contributor hereby grants to You a perpetual, | |
| 76 | + worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |
| 77 | + (except as stated in this section) patent license to make, have made, | |
| 78 | + use, offer to sell, sell, import, and otherwise transfer the Work, | |
| 79 | + where such license applies only to those patent claims licensable | |
| 80 | + by such Contributor that are necessarily infringed by their | |
| 81 | + Contribution(s) alone or by combination of their Contribution(s) | |
| 82 | + with the Work to which such Contribution(s) was submitted. If You | |
| 83 | + institute patent litigation against any entity (including a | |
| 84 | + cross-claim or counterclaim in a lawsuit) alleging that the Work | |
| 85 | + or a Contribution incorporated within the Work constitutes direct | |
| 86 | + or contributory patent infringement, then any patent licenses | |
| 87 | + granted to You under this License for that Work shall terminate | |
| 88 | + as of the date such litigation is filed. | |
| 89 | + | |
| 90 | + 4. Redistribution. You may reproduce and distribute copies of the | |
| 91 | + Work or Derivative Works thereof in any medium, with or without | |
| 92 | + modifications, and in Source or Object form, provided that You | |
| 93 | + meet the following conditions: | |
| 94 | + | |
| 95 | + (a) You must give any other recipients of the Work or | |
| 96 | + Derivative Works a copy of this License; and | |
| 97 | + | |
| 98 | + (b) You must cause any modified files to carry prominent notices | |
| 99 | + stating that You changed the files; and | |
| 100 | + | |
| 101 | + (c) You must retain, in the Source form of any Derivative Works | |
| 102 | + that You distribute, all copyright, patent, trademark, and | |
| 103 | + attribution notices from the Source form of the Work, | |
| 104 | + excluding those notices that do not pertain to any part of | |
| 105 | + the Derivative Works; and | |
| 106 | + | |
| 107 | + (d) If the Work includes a "NOTICE" text file as part of its | |
| 108 | + distribution, then any Derivative Works that You distribute must | |
| 109 | + include a readable copy of the attribution notices contained | |
| 110 | + within such NOTICE file, excluding those notices that do not | |
| 111 | + pertain to any part of the Derivative Works, in at least one | |
| 112 | + of the following places: within a NOTICE text file distributed | |
| 113 | + as part of the Derivative Works; within the Source form or | |
| 114 | + documentation, if provided along with the Derivative Works; or, | |
| 115 | + within a display generated by the Derivative Works, if and | |
| 116 | + wherever such third-party notices normally appear. The contents | |
| 117 | + of the NOTICE file are for informational purposes only and | |
| 118 | + do not modify the License. You may add Your own attribution | |
| 119 | + notices within Derivative Works that You distribute, alongside | |
| 120 | + or as an addendum to the NOTICE text from the Work, provided | |
| 121 | + that such additional attribution notices cannot be construed | |
| 122 | + as modifying the License. | |
| 123 | + | |
| 124 | + You may add Your own copyright statement to Your modifications and | |
| 125 | + may provide additional or different license terms and conditions | |
| 126 | + for use, reproduction, or distribution of Your modifications, or | |
| 127 | + for any such Derivative Works as a whole, provided Your use, | |
| 128 | + reproduction, and distribution of the Work otherwise complies with | |
| 129 | + the conditions stated in this License. | |
| 130 | + | |
| 131 | + 5. Submission of Contributions. Unless You explicitly state otherwise, | |
| 132 | + any Contribution intentionally submitted for inclusion in the Work | |
| 133 | + by You to the Licensor shall be under the terms and conditions of | |
| 134 | + this License, without any additional terms or conditions. | |
| 135 | + Notwithstanding the above, nothing herein shall supersede or modify | |
| 136 | + the terms of any separate license agreement you may have executed | |
| 137 | + with Licensor regarding such Contributions. | |
| 138 | + | |
| 139 | + 6. Trademarks. This License does not grant permission to use the trade | |
| 140 | + names, trademarks, service marks, or product names of the Licensor, | |
| 141 | + except as required for reasonable and customary use in describing the | |
| 142 | + origin of the Work and reproducing the content of the NOTICE file. | |
| 143 | + | |
| 144 | + 7. Disclaimer of Warranty. Unless required by applicable law or | |
| 145 | + agreed to in writing, Licensor provides the Work (and each | |
| 146 | + Contributor provides its Contributions) on an "AS IS" BASIS, | |
| 147 | + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | |
| 148 | + implied, including, without limitation, any warranties or conditions | |
| 149 | + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | |
| 150 | + PARTICULAR PURPOSE. You are solely responsible for determining the | |
| 151 | + appropriateness of using or redistributing the Work and assume any | |
| 152 | + risks associated with Your exercise of permissions under this License. | |
| 153 | + | |
| 154 | + 8. Limitation of Liability. In no event and under no legal theory, | |
| 155 | + whether in tort (including negligence), contract, or otherwise, | |
| 156 | + unless required by applicable law (such as deliberate and grossly | |
| 157 | + negligent acts) or agreed to in writing, shall any Contributor be | |
| 158 | + liable to You for damages, including any direct, indirect, special, | |
| 159 | + incidental, or consequential damages of any character arising as a | |
| 160 | + result of this License or out of the use or inability to use the | |
| 161 | + Work (including but not limited to damages for loss of goodwill, | |
| 162 | + work stoppage, computer failure or malfunction, or any and all | |
| 163 | + other commercial damages or losses), even if such Contributor | |
| 164 | + has been advised of the possibility of such damages. | |
| 165 | + | |
| 166 | + 9. Accepting Warranty or Additional Liability. While redistributing | |
| 167 | + the Work or Derivative Works thereof, You may choose to offer, | |
| 168 | + and charge a fee for, acceptance of support, warranty, indemnity, | |
| 169 | + or other liability obligations and/or rights consistent with this | |
| 170 | + License. However, in accepting such obligations, You may act only | |
| 171 | + on Your own behalf and on Your sole responsibility, not on behalf | |
| 172 | + of any other Contributor, and only if You agree to indemnify, | |
| 173 | + defend, and hold each Contributor harmless for any liability | |
| 174 | + incurred by, or claims asserted against, such Contributor by reason | |
| 175 | + of your accepting any such warranty or additional liability. | |
| 176 | + | |
| 177 | + END OF TERMS AND CONDITIONS | |
| 178 | + | |
| 179 | + APPENDIX: How to apply the Apache License to your work. | |
| 180 | + | |
| 181 | + To apply the Apache License to your work, attach the following | |
| 182 | + boilerplate notice, with the fields enclosed by brackets "[]" | |
| 183 | + replaced with your own identifying information. (Don't include | |
| 184 | + the brackets!) The text should be enclosed in the appropriate | |
| 185 | + comment syntax for the file format. We also recommend that a | |
| 186 | + file or class name and description of purpose be included on the | |
| 187 | + same "printed page" as the copyright notice for easier | |
| 188 | + identification within third-party archives. | |
| 189 | + | |
| 190 | + Copyright [yyyy] [name of copyright owner] | |
| 191 | + | |
| 192 | + Licensed under the Apache License, Version 2.0 (the "License"); | |
| 193 | + you may not use this file except in compliance with the License. | |
| 194 | + You may obtain a copy of the License at | |
| 195 | + | |
| 196 | + http://www.apache.org/licenses/LICENSE-2.0 | |
| 197 | + | |
| 198 | + Unless required by applicable law or agreed to in writing, software | |
| 199 | + distributed under the License is distributed on an "AS IS" BASIS, | |
| 200 | + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 201 | + See the License for the specific language governing permissions and | |
| 202 | + limitations under the License. |
A
book/fonts/SOURCE-CODE-PRO-LICENSE.txt
+93
-0
@@ -0,0 +1,93 @@
| 1 | +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. | |
| 2 | + | |
| 3 | +This Font Software is licensed under the SIL Open Font License, Version 1.1. | |
| 4 | +This license is copied below, and is also available with a FAQ at: | |
| 5 | +http://scripts.sil.org/OFL | |
| 6 | + | |
| 7 | + | |
| 8 | +----------------------------------------------------------- | |
| 9 | +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 | |
| 10 | +----------------------------------------------------------- | |
| 11 | + | |
| 12 | +PREAMBLE | |
| 13 | +The goals of the Open Font License (OFL) are to stimulate worldwide | |
| 14 | +development of collaborative font projects, to support the font creation | |
| 15 | +efforts of academic and linguistic communities, and to provide a free and | |
| 16 | +open framework in which fonts may be shared and improved in partnership | |
| 17 | +with others. | |
| 18 | + | |
| 19 | +The OFL allows the licensed fonts to be used, studied, modified and | |
| 20 | +redistributed freely as long as they are not sold by themselves. The | |
| 21 | +fonts, including any derivative works, can be bundled, embedded, | |
| 22 | +redistributed and/or sold with any software provided that any reserved | |
| 23 | +names are not used by derivative works. The fonts and derivatives, | |
| 24 | +however, cannot be released under any other type of license. The | |
| 25 | +requirement for fonts to remain under this license does not apply | |
| 26 | +to any document created using the fonts or their derivatives. | |
| 27 | + | |
| 28 | +DEFINITIONS | |
| 29 | +"Font Software" refers to the set of files released by the Copyright | |
| 30 | +Holder(s) under this license and clearly marked as such. This may | |
| 31 | +include source files, build scripts and documentation. | |
| 32 | + | |
| 33 | +"Reserved Font Name" refers to any names specified as such after the | |
| 34 | +copyright statement(s). | |
| 35 | + | |
| 36 | +"Original Version" refers to the collection of Font Software components as | |
| 37 | +distributed by the Copyright Holder(s). | |
| 38 | + | |
| 39 | +"Modified Version" refers to any derivative made by adding to, deleting, | |
| 40 | +or substituting -- in part or in whole -- any of the components of the | |
| 41 | +Original Version, by changing formats or by porting the Font Software to a | |
| 42 | +new environment. | |
| 43 | + | |
| 44 | +"Author" refers to any designer, engineer, programmer, technical | |
| 45 | +writer or other person who contributed to the Font Software. | |
| 46 | + | |
| 47 | +PERMISSION & CONDITIONS | |
| 48 | +Permission is hereby granted, free of charge, to any person obtaining | |
| 49 | +a copy of the Font Software, to use, study, copy, merge, embed, modify, | |
| 50 | +redistribute, and sell modified and unmodified copies of the Font | |
| 51 | +Software, subject to the following conditions: | |
| 52 | + | |
| 53 | +1) Neither the Font Software nor any of its individual components, | |
| 54 | +in Original or Modified Versions, may be sold by itself. | |
| 55 | + | |
| 56 | +2) Original or Modified Versions of the Font Software may be bundled, | |
| 57 | +redistributed and/or sold with any software, provided that each copy | |
| 58 | +contains the above copyright notice and this license. These can be | |
| 59 | +included either as stand-alone text files, human-readable headers or | |
| 60 | +in the appropriate machine-readable metadata fields within text or | |
| 61 | +binary files as long as those fields can be easily viewed by the user. | |
| 62 | + | |
| 63 | +3) No Modified Version of the Font Software may use the Reserved Font | |
| 64 | +Name(s) unless explicit written permission is granted by the corresponding | |
| 65 | +Copyright Holder. This restriction only applies to the primary font name as | |
| 66 | +presented to the users. | |
| 67 | + | |
| 68 | +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font | |
| 69 | +Software shall not be used to promote, endorse or advertise any | |
| 70 | +Modified Version, except to acknowledge the contribution(s) of the | |
| 71 | +Copyright Holder(s) and the Author(s) or with their explicit written | |
| 72 | +permission. | |
| 73 | + | |
| 74 | +5) The Font Software, modified or unmodified, in part or in whole, | |
| 75 | +must be distributed entirely under this license, and must not be | |
| 76 | +distributed under any other license. The requirement for fonts to | |
| 77 | +remain under this license does not apply to any document created | |
| 78 | +using the Font Software. | |
| 79 | + | |
| 80 | +TERMINATION | |
| 81 | +This license becomes null and void if any of the above conditions are | |
| 82 | +not met. | |
| 83 | + | |
| 84 | +DISCLAIMER | |
| 85 | +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
| 86 | +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF | |
| 87 | +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT | |
| 88 | +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE | |
| 89 | +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
| 90 | +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL | |
| 91 | +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |
| 92 | +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM | |
| 93 | +OTHER DEALINGS IN THE FONT SOFTWARE. |
A
book/fonts/fonts-9644e21d.css
+100
-0
@@ -0,0 +1,100 @@
| 1 | +/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */ | |
| 2 | +/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */ | |
| 3 | + | |
| 4 | +/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ | |
| 5 | +@font-face { | |
| 6 | + font-family: 'Open Sans'; | |
| 7 | + font-style: normal; | |
| 8 | + font-weight: 300; | |
| 9 | + src: local('Open Sans Light'), local('OpenSans-Light'), | |
| 10 | + url('../fonts/open-sans-v17-all-charsets-300-7736aa35.woff2') format('woff2'); | |
| 11 | +} | |
| 12 | + | |
| 13 | +/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ | |
| 14 | +@font-face { | |
| 15 | + font-family: 'Open Sans'; | |
| 16 | + font-style: italic; | |
| 17 | + font-weight: 300; | |
| 18 | + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), | |
| 19 | + url('../fonts/open-sans-v17-all-charsets-300italic-2c7b95c0.woff2') format('woff2'); | |
| 20 | +} | |
| 21 | + | |
| 22 | +/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ | |
| 23 | +@font-face { | |
| 24 | + font-family: 'Open Sans'; | |
| 25 | + font-style: normal; | |
| 26 | + font-weight: 400; | |
| 27 | + src: local('Open Sans Regular'), local('OpenSans-Regular'), | |
| 28 | + url('../fonts/open-sans-v17-all-charsets-regular-2e3b1d34.woff2') format('woff2'); | |
| 29 | +} | |
| 30 | + | |
| 31 | +/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ | |
| 32 | +@font-face { | |
| 33 | + font-family: 'Open Sans'; | |
| 34 | + font-style: italic; | |
| 35 | + font-weight: 400; | |
| 36 | + src: local('Open Sans Italic'), local('OpenSans-Italic'), | |
| 37 | + url('../fonts/open-sans-v17-all-charsets-italic-6c9463f7.woff2') format('woff2'); | |
| 38 | +} | |
| 39 | + | |
| 40 | +/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ | |
| 41 | +@font-face { | |
| 42 | + font-family: 'Open Sans'; | |
| 43 | + font-style: normal; | |
| 44 | + font-weight: 600; | |
| 45 | + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), | |
| 46 | + url('../fonts/open-sans-v17-all-charsets-600-486c6759.woff2') format('woff2'); | |
| 47 | +} | |
| 48 | + | |
| 49 | +/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ | |
| 50 | +@font-face { | |
| 51 | + font-family: 'Open Sans'; | |
| 52 | + font-style: italic; | |
| 53 | + font-weight: 600; | |
| 54 | + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), | |
| 55 | + url('../fonts/open-sans-v17-all-charsets-600italic-1a3e8659.woff2') format('woff2'); | |
| 56 | +} | |
| 57 | + | |
| 58 | +/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ | |
| 59 | +@font-face { | |
| 60 | + font-family: 'Open Sans'; | |
| 61 | + font-style: normal; | |
| 62 | + font-weight: 700; | |
| 63 | + src: local('Open Sans Bold'), local('OpenSans-Bold'), | |
| 64 | + url('../fonts/open-sans-v17-all-charsets-700-c22fe8c7.woff2') format('woff2'); | |
| 65 | +} | |
| 66 | + | |
| 67 | +/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ | |
| 68 | +@font-face { | |
| 69 | + font-family: 'Open Sans'; | |
| 70 | + font-style: italic; | |
| 71 | + font-weight: 700; | |
| 72 | + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), | |
| 73 | + url('../fonts/open-sans-v17-all-charsets-700italic-238ae959.woff2') format('woff2'); | |
| 74 | +} | |
| 75 | + | |
| 76 | +/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ | |
| 77 | +@font-face { | |
| 78 | + font-family: 'Open Sans'; | |
| 79 | + font-style: normal; | |
| 80 | + font-weight: 800; | |
| 81 | + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), | |
| 82 | + url('../fonts/open-sans-v17-all-charsets-800-3d2c812a.woff2') format('woff2'); | |
| 83 | +} | |
| 84 | + | |
| 85 | +/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ | |
| 86 | +@font-face { | |
| 87 | + font-family: 'Open Sans'; | |
| 88 | + font-style: italic; | |
| 89 | + font-weight: 800; | |
| 90 | + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), | |
| 91 | + url('../fonts/open-sans-v17-all-charsets-800italic-ba1521ec.woff2') format('woff2'); | |
| 92 | +} | |
| 93 | + | |
| 94 | +/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */ | |
| 95 | +@font-face { | |
| 96 | + font-family: 'Source Code Pro'; | |
| 97 | + font-style: normal; | |
| 98 | + font-weight: 500; | |
| 99 | + src: url('../fonts/source-code-pro-v11-all-charsets-500-2bdd9410.woff2') format('woff2'); | |
| 100 | +} |
A
book/fonts/open-sans-v17-all-charsets-300-7736aa35.woff2
+0
-0
A
book/fonts/open-sans-v17-all-charsets-300italic-2c7b95c0.woff2
+0
-0
A
book/fonts/open-sans-v17-all-charsets-600-486c6759.woff2
+0
-0
A
book/fonts/open-sans-v17-all-charsets-600italic-1a3e8659.woff2
+0
-0
A
book/fonts/open-sans-v17-all-charsets-700-c22fe8c7.woff2
+0
-0
A
book/fonts/open-sans-v17-all-charsets-700italic-238ae959.woff2
+0
-0
A
book/fonts/open-sans-v17-all-charsets-800-3d2c812a.woff2
+0
-0
A
book/fonts/open-sans-v17-all-charsets-800italic-ba1521ec.woff2
+0
-0
A
book/fonts/open-sans-v17-all-charsets-italic-6c9463f7.woff2
+0
-0
A
book/fonts/open-sans-v17-all-charsets-regular-2e3b1d34.woff2
+0
-0
A
book/fonts/source-code-pro-v11-all-charsets-500-2bdd9410.woff2
+0
-0
A
book/highlight-493f70e1.css
+83
-0
@@ -0,0 +1,83 @@
| 1 | +/* | |
| 2 | + * An increased contrast highlighting scheme loosely based on the | |
| 3 | + * "Base16 Atelier Dune Light" theme by Bram de Haan | |
| 4 | + * (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) | |
| 5 | + * Original Base16 color scheme by Chris Kempson | |
| 6 | + * (https://github.com/chriskempson/base16) | |
| 7 | + */ | |
| 8 | + | |
| 9 | +/* Comment */ | |
| 10 | +.hljs-comment, | |
| 11 | +.hljs-quote { | |
| 12 | + color: #575757; | |
| 13 | +} | |
| 14 | + | |
| 15 | +/* Red */ | |
| 16 | +.hljs-variable, | |
| 17 | +.hljs-template-variable, | |
| 18 | +.hljs-attribute, | |
| 19 | +.hljs-attr, | |
| 20 | +.hljs-tag, | |
| 21 | +.hljs-name, | |
| 22 | +.hljs-regexp, | |
| 23 | +.hljs-link, | |
| 24 | +.hljs-name, | |
| 25 | +.hljs-selector-id, | |
| 26 | +.hljs-selector-class { | |
| 27 | + color: #d70025; | |
| 28 | +} | |
| 29 | + | |
| 30 | +/* Orange */ | |
| 31 | +.hljs-number, | |
| 32 | +.hljs-meta, | |
| 33 | +.hljs-built_in, | |
| 34 | +.hljs-builtin-name, | |
| 35 | +.hljs-literal, | |
| 36 | +.hljs-type, | |
| 37 | +.hljs-params { | |
| 38 | + color: #b21e00; | |
| 39 | +} | |
| 40 | + | |
| 41 | +/* Green */ | |
| 42 | +.hljs-string, | |
| 43 | +.hljs-symbol, | |
| 44 | +.hljs-bullet { | |
| 45 | + color: #008200; | |
| 46 | +} | |
| 47 | + | |
| 48 | +/* Blue */ | |
| 49 | +.hljs-title, | |
| 50 | +.hljs-section { | |
| 51 | + color: #0030f2; | |
| 52 | +} | |
| 53 | + | |
| 54 | +/* Purple */ | |
| 55 | +.hljs-keyword, | |
| 56 | +.hljs-selector-tag { | |
| 57 | + color: #9d00ec; | |
| 58 | +} | |
| 59 | + | |
| 60 | +.hljs { | |
| 61 | + display: block; | |
| 62 | + overflow-x: auto; | |
| 63 | + background: #f6f7f6; | |
| 64 | + color: #000; | |
| 65 | +} | |
| 66 | + | |
| 67 | +.hljs-emphasis { | |
| 68 | + font-style: italic; | |
| 69 | +} | |
| 70 | + | |
| 71 | +.hljs-strong { | |
| 72 | + font-weight: bold; | |
| 73 | +} | |
| 74 | + | |
| 75 | +.hljs-addition { | |
| 76 | + color: #22863a; | |
| 77 | + background-color: #f0fff4; | |
| 78 | +} | |
| 79 | + | |
| 80 | +.hljs-deletion { | |
| 81 | + color: #b31d28; | |
| 82 | + background-color: #ffeef0; | |
| 83 | +} |
A
book/highlight-abc7f01d.js
+54
-0
@@ -0,0 +1,54 @@
| 1 | +/* | |
| 2 | + Highlight.js 10.1.1 (93fd0d73) | |
| 3 | + License: BSD-3-Clause | |
| 4 | + Copyright (c) 2006-2020, Ivan Sagalaev | |
| 5 | +*/ | |
| 6 | +var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:"start"===n[0].event?e:n:e.length?e:n}function c(e){s+="<"+a(e)+[].map.call(e.attributes,(function(e){return" "+e.nodeName+'="'+t(e.value)+'"'})).join("")+">"}function u(e){s+="</"+a(e)+">"}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="</span>",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=`<span class="${e}">`}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"<unnamed>")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i<e.length;i++){var s=r+=1,o=d(e[i]);for(i>0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?"<br>":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ /]*>/g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); | |
| 7 | +hljs.registerLanguage("apache",function(){"use strict";return function(e){var n={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"</?",end:">",contains:[n,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},n,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}}()); | |
| 8 | +hljs.registerLanguage("bash",function(){"use strict";return function(e){const s={};Object.assign(s,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[s]}]}]});const t={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]};t.contains.push(n);const a={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,s]},i=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b-?[a-z\._]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[i,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}}()); | |
| 9 | +hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"</",contains:[].concat(_,u,d,[s,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",end:">",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin:/</,end:/>/,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}()); | |
| 10 | +hljs.registerLanguage("c",function(){"use strict";return function(e){var n=e.getLanguage("c-like").rawDefinition();return n.name="C",n.aliases=["c","h"],n}}()); | |
| 11 | +hljs.registerLanguage("coffeescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((e=>n=>!e.includes(n))(["var","const","let","function","static"])).join(" "),literal:n.concat(["yes","no","on","off"]).join(" "),built_in:a.concat(["npm","print"]).join(" ")},i="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/}/,keywords:t},o=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[r.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+i},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=o;var c=r.inherit(r.TITLE_MODE,{begin:i}),l={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:o.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+i+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[c,l]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[l]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:i+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}}()); | |
| 12 | +hljs.registerLanguage("cpp",function(){"use strict";return function(e){var t=e.getLanguage("c-like").rawDefinition();return t.disableAutodetect=!1,t.name="C++",t.aliases=["cc","c++","h++","hpp","hh","hxx","cxx"],t}}()); | |
| 13 | +hljs.registerLanguage("csharp",function(){"use strict";return function(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},t=e.inherit(s,{illegal:/\n/}),l={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(l,{illegal:/\n/}),c={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},l]},g=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]});l.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[g,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},i]},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:"</?",end:">"}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},i,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[d,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}}()); | |
| 14 | +hljs.registerLanguage("css",function(){"use strict";return function(e){var n={begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{name:"CSS",case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,n]}]}}}()); | |
| 15 | +hljs.registerLanguage("diff",function(){"use strict";return function(e){return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}}()); | |
| 16 | +hljs.registerLanguage("go",function(){"use strict";return function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:n,illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:"number",variants:[{begin:e.C_NUMBER_RE+"[i]",relevance:1},e.C_NUMBER_MODE]},{begin:/:=/},{className:"function",beginKeywords:"func",end:"\\s*(\\{|$)",excludeEnd:!0,contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:n,illegal:/["']/}]}]}}}()); | |
| 17 | +hljs.registerLanguage("http",function(){"use strict";return function(e){var n="HTTP/[0-9\\.]+";return{name:"HTTP",aliases:["https"],illegal:"\\S",contains:[{begin:"^"+n,end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{begin:"^[A-Z]+ (.*?) "+n+"$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{begin:n},{className:"keyword",begin:"[A-Z]+"}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{end:"$",relevance:0}},{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}]}}}()); | |
| 18 | +hljs.registerLanguage("ini",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(...n){return n.map(n=>e(n)).join("")}return function(a){var s={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:a.NUMBER_RE}]},i=a.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var t={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,s,"self"],relevance:0},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map(n=>e(n)).join("|")+")";return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr",starts:{end:/$/,contains:[i,c,r,t,l,s]}}]}}}()); | |
| 19 | +hljs.registerLanguage("java",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(e){return a("(",e,")?")}function a(...n){return n.map(n=>e(n)).join("")}function s(...n){return"("+n.map(n=>e(n)).join("|")+")"}return function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i={className:"meta",begin:"@[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r=e=>a("[",e,"]+([",e,"_]*[",e,"]+)?"),c={className:"number",variants:[{begin:`\\b(0[bB]${r("01")})[lL]?`},{begin:`\\b(0${r("0-7")})[dDfFlL]?`},{begin:a(/\b0[xX]/,s(a(r("a-fA-F0-9"),/\./,r("a-fA-F0-9")),a(r("a-fA-F0-9"),/\.?/),a(/\./,r("a-fA-F0-9"))),/([pP][+-]?(\d+))?/,/[fFdDlL]?/)},{begin:a(/\b/,s(a(/\d*\./,r("\\d")),r("\\d")),/[eE][+-]?[\d]+[dDfF]?/)},{begin:a(/\b/,r(/\d/),n(/\.?/),n(r(/\d/)),/[dDfFlL]?/)}],relevance:0};return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},c,i]}}}()); | |
| 20 | +hljs.registerLanguage("javascript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function s(e){return r("(?=",e,")")}function r(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(t){var i="[A-Za-z$_][0-9A-Za-z$_]*",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},o={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.join(" "),literal:n.join(" "),built_in:a.join(" ")},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:t.C_NUMBER_RE+"n?"}],relevance:0},E={className:"subst",begin:"\\$\\{",end:"\\}",keywords:o,contains:[]},d={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"xml"}},g={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]};E.contains=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,l,t.REGEXP_MODE];var b=E.contains.concat([{begin:/\(/,end:/\)/,contains:["self"].concat(E.contains,[t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE])},t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:b};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:o,contains:[t.SHEBANG({binary:"node",relevance:5}),{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,l,{begin:r(/[{,\n]\s*/,s(r(/(((\/\/.*)|(\/\*(.|\n)*\*\/))\s*)*/,i+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:i+s("\\s*:"),relevance:0}]},{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:b}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:"</>"},{begin:c.begin,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[t.inherit(t.TITLE_MODE,{begin:i}),_],illegal:/\[|%/},{begin:/\$[(.]/},t.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0},{begin:"(get|set)\\s+(?="+i+"\\()",end:/{/,keywords:"get set",contains:[t.inherit(t.TITLE_MODE,{begin:i}),{begin:/\(\)/},_]}],illegal:/#(?!!)/}}}()); | |
| 21 | +hljs.registerLanguage("json",function(){"use strict";return function(n){var e={literal:"true false null"},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],t=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],a={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:e},l={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(a,{begin:/:/})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(a)],illegal:"\\S"};return t.push(l,s),i.forEach((function(n){t.push(n)})),{name:"JSON",contains:t,keywords:e,illegal:"\\S"}}}()); | |
| 22 | +hljs.registerLanguage("kotlin",function(){"use strict";return function(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},i={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},s={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[s,i]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,s,i]}]};i.contains.push(t);var r={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(t,{className:"meta-string"})]}]},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},d=o;return d.variants[1].contains=[o],o.variants[1].contains=[d],{name:"Kotlin",aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,r,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/</,end:/>/,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,r,l,t,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin:/</,end:/>/,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},r,l]},t,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},{className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0}]}}}()); | |
| 23 | +hljs.registerLanguage("less",function(){"use strict";return function(e){var n="([\\w-]+|@{[\\w-]+})",a=[],s=[],t=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,n,a){return{className:e,begin:n,relevance:a}},i={begin:"\\(",end:"\\)",contains:s,relevance:0};s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t("'"),t('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var c=s.concat({begin:"{",end:"}",contains:a}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(s)},o={begin:n+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:n,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]},g={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:s,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:c}},b={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:n,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag",n+"%?",0),r("selector-id","#"+n),r("selector-class","\\."+n,0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:c},{begin:"!important"}]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,d,o,b),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:a}}}()); | |
| 24 | +hljs.registerLanguage("lua",function(){"use strict";return function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},a=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}}()); | |
| 25 | +hljs.registerLanguage("makefile",function(){"use strict";return function(e){var i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%<?\^\+\*]/}]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i]},a={className:"variable",begin:/\$\([\w-]+\s/,end:/\)/,keywords:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},contains:[i]},r={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},s={className:"section",begin:/^[^\s]+:/,end:/$/,contains:[i]};return{name:"Makefile",aliases:["mk","mak"],keywords:{$pattern:/[\w-]+/,keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"},contains:[e.HASH_COMMENT_MODE,i,n,a,r,{className:"meta",begin:/^\.PHONY:/,end:/$/,keywords:{$pattern:/[\.\w]+/,"meta-keyword":".PHONY"}},s]}}}()); | |
| 26 | +hljs.registerLanguage("xml",function(){"use strict";return function(e){var n={className:"symbol",begin:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},a={begin:"\\s",contains:[{className:"meta-keyword",begin:"#?[a-z_][a-z1-9_-]+",illegal:"\\n"}]},s=e.inherit(a,{begin:"\\(",end:"\\)"}),t=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),i=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),c={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:"[A-Za-z0-9\\._:-]+",relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[n]},{begin:/'/,end:/'/,contains:[n]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"<![a-z]",end:">",relevance:10,contains:[a,i,t,s,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"<![a-z]",end:">",contains:[a,s,i,t]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:"<style(?=\\s|>)",end:">",keywords:{name:"style"},contains:[c],starts:{end:"</style>",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:"<script(?=\\s|>)",end:">",keywords:{name:"script"},contains:[c],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:"</?",end:"/?>",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},c]}]}}}()); | |
| 27 | +hljs.registerLanguage("markdown",function(){"use strict";return function(n){const e={begin:"<",end:">",subLanguage:"xml",relevance:0},a={begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},i={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};i.contains.push(s),s.contains.push(i);var c=[e,a];return i.contains=i.contains.concat(c),s.contains=s.contains.concat(c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:c=c.concat(i,s)},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:c}]}]},e,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:c,end:"$"},{className:"code",variants:[{begin:"(`{3,})(.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})(.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}}()); | |
| 28 | +hljs.registerLanguage("nginx",function(){"use strict";return function(e){var n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},a={endsWithParent:!0,keywords:{$pattern:"[a-z/_]+",literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}]"}}}()); | |
| 29 | +hljs.registerLanguage("objectivec",function(){"use strict";return function(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n,keyword:"@interface @class @protocol @implementation"};return{name:"Objective-C",aliases:["mm","objc","obj-c"],keywords:{$pattern:n,keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},illegal:"</",contains:[{className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"string",variants:[{begin:'@"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]}]},{className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+_.keyword.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:_,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}}()); | |
| 30 | +hljs.registerLanguage("perl",function(){"use strict";return function(e){var n={$pattern:/[\w.]+/,keyword:"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmget sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when"},t={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},s={begin:"->{",end:"}"},r={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,t,r],a=[r,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),s,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return t.contains=a,s.contains=a,{name:"Perl",aliases:["pl","pm"],keywords:n,contains:a}}}()); | |
| 31 | +hljs.registerLanguage("php",function(){"use strict";return function(e){var r={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:i,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",r,e.C_BLOCK_COMMENT_MODE,a,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},a,n]}}}()); | |
| 32 | +hljs.registerLanguage("php-template",function(){"use strict";return function(n){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}}()); | |
| 33 | +hljs.registerLanguage("plaintext",function(){"use strict";return function(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}}()); | |
| 34 | +hljs.registerLanguage("properties",function(){"use strict";return function(e){var n="[ \\t\\f]*",t="("+n+"[:=]"+n+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+t,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:s},{begin:a+t,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:a+n+"$"}]}}}()); | |
| 35 | +hljs.registerLanguage("python",function(){"use strict";return function(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},r={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},t={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",a,l,r,e.HASH_COMMENT_MODE]}]};return i.contains=[r,l,a],{name:"Python",aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,l,{beginKeywords:"if",relevance:0},r,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,t,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}}()); | |
| 36 | +hljs.registerLanguage("python-repl",function(){"use strict";return function(n){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}}()); | |
| 37 | +hljs.registerLanguage("ruby",function(){"use strict";return function(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},s={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},r=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^\\=begin","^\\=end",{contains:[s],relevance:10}),e.COMMENT("^__END__","\\n$")],c={className:"subst",begin:"#\\{",end:"}",keywords:a},t={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},b={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},d=[t,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(r)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),b].concat(r)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[t,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(r),relevance:0}].concat(r);c.contains=d,b.contains=d;var g=[{begin:/^\s*=>/,starts:{end:"$",contains:d}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:d}}];return{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:r.concat(g).concat(d)}}}()); | |
| 38 | +hljs.registerLanguage("rust",function(){"use strict";return function(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",t="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:t},illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{className:"string",variants:[{begin:/r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/}]},{className:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*/},{className:"number",variants:[{begin:"\\b0b([01_]+)"+n},{begin:"\\b0o([0-7_]+)"+n},{begin:"\\b0x([A-Fa-f0-9_]+)"+n},{begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+n}],relevance:0},{className:"function",beginKeywords:"fn",end:"(\\(|<)",excludeEnd:!0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"meta",begin:"#\\!?\\[",end:"\\]",contains:[{className:"meta-string",begin:/"/,end:/"/}]},{className:"class",beginKeywords:"type",end:";",contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{endsParent:!0})],illegal:"\\S"},{className:"class",beginKeywords:"trait enum struct union",end:"{",contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{endsParent:!0})],illegal:"[\\w\\d]"},{begin:e.IDENT_RE+"::",keywords:{built_in:t}},{begin:"->"}]}}}()); | |
| 39 | +hljs.registerLanguage("scss",function(){"use strict";return function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={className:"number",begin:"#[0-9A-Fa-f]+"};return e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,i,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,e.CSS_NUMBER_MODE]}]}}}()); | |
| 40 | +hljs.registerLanguage("shell",function(){"use strict";return function(s){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}}()); | |
| 41 | +hljs.registerLanguage("sql",function(){"use strict";return function(e){var t=e.COMMENT("--","$");return{name:"SQL",case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,keywords:{$pattern:/[\w\.]+/,keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}}()); | |
| 42 | +hljs.registerLanguage("swift",function(){"use strict";return function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c compactMap contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:i,contains:[]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},r={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[r],{name:"Swift",keywords:i,contains:[a,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},r,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin:/</,end:/>/},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:i,contains:["self",r,a,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:i,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\\b"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}}()); | |
| 43 | +hljs.registerLanguage("typescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]).join(" "),literal:n.join(" "),built_in:a.concat(["any","void","number","boolean","string","object","never","enum"]).join(" ")},s={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},i={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:r.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"css"}},E={className:"string",begin:"`",end:"`",contains:[r.BACKSLASH_ESCAPE,o]};o.contains=[r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,i,r.REGEXP_MODE];var d={begin:"\\(",end:/\)/,keywords:t,contains:["self",r.QUOTE_STRING_MODE,r.APOS_STRING_MODE,r.NUMBER_MODE]},u={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,s,d]};return{name:"TypeScript",aliases:["ts"],keywords:t,contains:[r.SHEBANG(),{className:"meta",begin:/^\s*['"]use strict['"]/},r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,i,{begin:"("+r.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,r.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+r.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:r.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:d.contains}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",r.inherit(r.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),u],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",u]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+r.IDENT_RE,relevance:0},s,d]}}}()); | |
| 44 | +hljs.registerLanguage("yaml",function(){"use strict";return function(e){var n="true false yes no null",a="[\\w#;/?:@&=+$,.~*\\'()[\\]]+",s={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]},i=e.inherit(s,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={end:",",endsWithParent:!0,excludeEnd:!0,contains:[],keywords:n,relevance:0},t={begin:"{",end:"}",contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t,g,s],c=[...b];return c.pop(),c.push(i),l.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml","YAML"],contains:b}}}()); | |
| 45 | +hljs.registerLanguage("armasm",function(){"use strict";return function(s){const e={variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),s.COMMENT("[;@]","$",{relevance:0}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},e,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}}()); | |
| 46 | +hljs.registerLanguage("d",function(){"use strict";return function(e){var a={$pattern:e.UNDERSCORE_IDENT_RE,keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},d="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",t={className:"number",begin:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},_={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",relevance:0},r={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},i={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{name:"D",keywords:a,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},i,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},_,t,r,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}}()); | |
| 47 | +hljs.registerLanguage("handlebars",function(){"use strict";function e(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(n){const a={"builtin-name":"action bindattr collection component concat debugger each each-in get hash if in input link-to loc log lookup mut outlet partial query-params render template textarea unbound unless view with yield"},t=/\[.*?\]/,s=/[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/,i=e("(",/'.*?'/,"|",/".*?"/,"|",t,"|",s,"|",/\.|\//,")+"),r=e("(",t,"|",s,")(?==)"),l={begin:i,lexemes:/[\w.\/]+/},c=n.inherit(l,{keywords:{literal:"true false undefined null"}}),o={begin:/\(/,end:/\)/},m={className:"attr",begin:r,relevance:0,starts:{begin:/=/,end:/=/,starts:{contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,c,o]}}},d={contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,{begin:/as\s+\|/,keywords:{keyword:"as"},end:/\|/,contains:[{begin:/\w+/}]},m,c,o],returnEnd:!0},g=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/\)/})});o.contains=[g];const u=n.inherit(l,{keywords:a,className:"name",starts:n.inherit(d,{end:/}}/})}),b=n.inherit(l,{keywords:a,className:"name"}),h=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/}}/})});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},n.COMMENT(/\{\{!--/,/--\}\}/),n.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[u],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[b]},{className:"template-tag",begin:/\{\{#/,end:/\}\}/,contains:[u]},{className:"template-tag",begin:/\{\{(?=else\}\})/,end:/\}\}/,keywords:"else"},{className:"template-tag",begin:/\{\{\//,end:/\}\}/,contains:[b]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,contains:[h]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[h]}]}}}()); | |
| 48 | +hljs.registerLanguage("haskell",function(){"use strict";return function(e){var n={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},i={className:"meta",begin:"{-#",end:"#-}"},a={className:"meta",begin:"^#",end:"$"},s={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},l={begin:"\\(",end:"\\)",illegal:'"',contains:[i,a,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),n]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[l,n],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[l,n],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[s,l,n]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[i,s,l,{begin:"{",end:"}",contains:l.contains},n]},{beginKeywords:"default",end:"$",contains:[s,l,n]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,n]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[s,e.QUOTE_STRING_MODE,n]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},i,a,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,s,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),n,{begin:"->|<-"}]}}}()); | |
| 49 | +hljs.registerLanguage("julia",function(){"use strict";return function(e){var r="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",t={$pattern:r,keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},a={keywords:t,illegal:/<\//},n={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},o={className:"variable",begin:"\\$"+r},i={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},l={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],begin:"`",end:"`"},s={className:"meta",begin:"@"+r};return a.name="Julia",a.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i,l,s,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],n.contains=a.contains,a}}()); | |
| 50 | +hljs.registerLanguage("nim",function(){"use strict";return function(e){return{name:"Nim",aliases:["nim"],keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from func generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},e.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HASH_COMMENT_MODE]}}}()); | |
| 51 | +hljs.registerLanguage("nix",function(){"use strict";return function(e){var n={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},i={className:"subst",begin:/\$\{/,end:/}/,keywords:n},t={className:"string",contains:[i],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},s=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return i.contains=s,{name:"Nix",aliases:["nixos"],keywords:n,contains:s}}}()); | |
| 52 | +hljs.registerLanguage("r",function(){"use strict";return function(e){var n="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{name:"R",contains:[e.HASH_COMMENT_MODE,{begin:n,keywords:{$pattern:n,keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}}()); | |
| 53 | +hljs.registerLanguage("scala",function(){"use strict";return function(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},a={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},s={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},i={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},t]},l={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},s,l,i,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}}()); | |
| 54 | +hljs.registerLanguage("x86asm",function(){"use strict";return function(s){return{name:"Intel x86 Assembly",case_insensitive:!0,keywords:{$pattern:"[.%]?"+s.IDENT_RE,keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[s.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}}()); | |
| 54 | < \ No newline at end of file |
A
book/index.html
+268
-0
@@ -0,0 +1,268 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Introduction - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = ""; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/introduction.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="introduction"><a class="header" href="#introduction">Introduction</a></h1> | |
| 181 | +<h2 id="quest-ce-que-gitrust-"><a class="header" href="#quest-ce-que-gitrust-">Qu’est-ce que gitrust ?</a></h2> | |
| 182 | +<p><strong>gitrust</strong> est une forge Git self-hosted écrite en Rust, conçue pour les équipes de 3 à 20 personnes qui souhaitent maîtriser leur infrastructure de développement. Elle offre un serveur HTTP (<code>:4000</code>) et SSH (<code>:2222</code>), une CI intégrée via Dagger, la génération de SBOM avec Syft et l’intégration Dependency-Track, une gestion fine des permissions (4 rôles), la double authentification, des labels hiérarchiques et une conformité ANSSI PA-074.</p> | |
| 183 | +<p>Une instance publique de démonstration est accessible sur <a href="https://demo.gitrust.eu">demo.gitrust.eu</a>.</p> | |
| 184 | +<h2 id="à-qui-sadresse-cette-documentation-"><a class="header" href="#à-qui-sadresse-cette-documentation-">À qui s’adresse cette documentation ?</a></h2> | |
| 185 | +<p>Cette documentation est organisée en quatre parties selon leurs publics respectifs :</p> | |
| 186 | +<ul> | |
| 187 | +<li><strong>Manuel utilisateur</strong> — pour les développeurs qui <em>utilisent</em> une instance gitrust existante : push/pull, pull requests, issues, CI, notifications. Prérequis : savoir utiliser Git en ligne de commande.</li> | |
| 188 | +<li><strong>Manuel d’administration</strong> — pour les ops et self-hosters qui déploient, configurent et maintiennent une instance en production. Prérequis : administration Linux, notions de réseau et TLS.</li> | |
| 189 | +<li><strong>Manuel développeur</strong> — pour les contributeurs au code gitrust et les développeurs qui construisent des intégrations sur l’API publique. Prérequis : Rust (pour contribuer) ou un langage client (pour l’API).</li> | |
| 190 | +<li><strong>Bibliothèque de templates</strong> — pour tous les profils, lorsqu’ils cherchent un point de départ prêt à l’emploi (fichiers <code>.env</code>, <code>docker-compose.yml</code>, configs reverse-proxy, scripts de backup, exemples de clients API).</li> | |
| 191 | +</ul> | |
| 192 | +<h2 id="comment-cette-documentation-est-elle-structurée-"><a class="header" href="#comment-cette-documentation-est-elle-structurée-">Comment cette documentation est-elle structurée ?</a></h2> | |
| 193 | +<p>Cette documentation suit le cadre <strong>Diátaxis</strong>, qui distingue quatre types de contenu selon le besoin du lecteur :</p> | |
| 194 | +<div class="table-wrapper"> | |
| 195 | +<table> | |
| 196 | +<thead> | |
| 197 | +<tr><th>Type</th><th>Quand l’utiliser</th><th>Exemples</th></tr> | |
| 198 | +</thead> | |
| 199 | +<tbody> | |
| 200 | +<tr><td><strong>Tutoriels</strong></td><td>Quand vous apprenez</td><td>Installer gitrust, créer votre premier dépôt</td></tr> | |
| 201 | +<tr><td><strong>Guides pratiques</strong></td><td>Quand vous résolvez un problème précis</td><td>Configurer SMTP, gérer les clés SSH</td></tr> | |
| 202 | +<tr><td><strong>Référence</strong></td><td>Quand vous cherchez une information technique</td><td>Variables d’environnement, schéma API REST</td></tr> | |
| 203 | +<tr><td><strong>Explication</strong></td><td>Quand vous voulez comprendre le pourquoi</td><td>Architecture des crates, modèle RBAC</td></tr> | |
| 204 | +</tbody> | |
| 205 | +</table> | |
| 206 | +</div> | |
| 207 | +<p>Chaque manuel (utilisateur, administration, développeur) contient ces quatre types de contenu organisés de manière indépendante.</p> | |
| 208 | +<h2 id="naviguer-dans-la-documentation"><a class="header" href="#naviguer-dans-la-documentation">Naviguer dans la documentation</a></h2> | |
| 209 | +<ul> | |
| 210 | +<li><a href="user_manual/index.html">Manuel utilisateur</a> — collaborer sur gitrust en tant que développeur</li> | |
| 211 | +<li><a href="administration_manual/index.html">Manuel d’administration</a> — déployer et exploiter une instance</li> | |
| 212 | +<li><a href="developer_manual/index.html">Manuel développeur</a> — contribuer au code ou consommer l’API</li> | |
| 213 | +<li><a href="template/index.html">Bibliothèque de templates</a> — configs et scripts copiables</li> | |
| 214 | +</ul> | |
| 215 | + | |
| 216 | + </main> | |
| 217 | + | |
| 218 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 219 | + <!-- Mobile navigation buttons --> | |
| 220 | + | |
| 221 | + <a rel="next prefetch" href="user_manual/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 222 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 223 | + </a> | |
| 224 | + | |
| 225 | + <div style="clear: both"></div> | |
| 226 | + </nav> | |
| 227 | + </div> | |
| 228 | + </div> | |
| 229 | + | |
| 230 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 231 | + | |
| 232 | + <a rel="next prefetch" href="user_manual/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 233 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 234 | + </a> | |
| 235 | + </nav> | |
| 236 | + | |
| 237 | + </div> | |
| 238 | + | |
| 239 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 240 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 241 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 242 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 243 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + <script> | |
| 248 | + window.playground_copyable = true; | |
| 249 | + </script> | |
| 250 | + | |
| 251 | + | |
| 252 | + <script src="elasticlunr-ef4e11c1.min.js"></script> | |
| 253 | + <script src="mark-09e88c2c.min.js"></script> | |
| 254 | + <script src="searcher-c2a407aa.js"></script> | |
| 255 | + | |
| 256 | + <script src="clipboard-1626706a.min.js"></script> | |
| 257 | + <script src="highlight-abc7f01d.js"></script> | |
| 258 | + <script src="book-a0b12cfe.js"></script> | |
| 259 | + | |
| 260 | + <!-- Custom JS scripts --> | |
| 261 | + <script src="theme/mermaid-eefea253.min.js"></script> | |
| 262 | + <script src="theme/mermaid-init-ccf746f1.js"></script> | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + </div> | |
| 267 | + </body> | |
| 268 | +</html> |
A
book/introduction.html
+268
-0
@@ -0,0 +1,268 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Introduction - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = ""; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/introduction.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="introduction"><a class="header" href="#introduction">Introduction</a></h1> | |
| 181 | +<h2 id="quest-ce-que-gitrust-"><a class="header" href="#quest-ce-que-gitrust-">Qu’est-ce que gitrust ?</a></h2> | |
| 182 | +<p><strong>gitrust</strong> est une forge Git self-hosted écrite en Rust, conçue pour les équipes de 3 à 20 personnes qui souhaitent maîtriser leur infrastructure de développement. Elle offre un serveur HTTP (<code>:4000</code>) et SSH (<code>:2222</code>), une CI intégrée via Dagger, la génération de SBOM avec Syft et l’intégration Dependency-Track, une gestion fine des permissions (4 rôles), la double authentification, des labels hiérarchiques et une conformité ANSSI PA-074.</p> | |
| 183 | +<p>Une instance publique de démonstration est accessible sur <a href="https://demo.gitrust.eu">demo.gitrust.eu</a>.</p> | |
| 184 | +<h2 id="à-qui-sadresse-cette-documentation-"><a class="header" href="#à-qui-sadresse-cette-documentation-">À qui s’adresse cette documentation ?</a></h2> | |
| 185 | +<p>Cette documentation est organisée en quatre parties selon leurs publics respectifs :</p> | |
| 186 | +<ul> | |
| 187 | +<li><strong>Manuel utilisateur</strong> — pour les développeurs qui <em>utilisent</em> une instance gitrust existante : push/pull, pull requests, issues, CI, notifications. Prérequis : savoir utiliser Git en ligne de commande.</li> | |
| 188 | +<li><strong>Manuel d’administration</strong> — pour les ops et self-hosters qui déploient, configurent et maintiennent une instance en production. Prérequis : administration Linux, notions de réseau et TLS.</li> | |
| 189 | +<li><strong>Manuel développeur</strong> — pour les contributeurs au code gitrust et les développeurs qui construisent des intégrations sur l’API publique. Prérequis : Rust (pour contribuer) ou un langage client (pour l’API).</li> | |
| 190 | +<li><strong>Bibliothèque de templates</strong> — pour tous les profils, lorsqu’ils cherchent un point de départ prêt à l’emploi (fichiers <code>.env</code>, <code>docker-compose.yml</code>, configs reverse-proxy, scripts de backup, exemples de clients API).</li> | |
| 191 | +</ul> | |
| 192 | +<h2 id="comment-cette-documentation-est-elle-structurée-"><a class="header" href="#comment-cette-documentation-est-elle-structurée-">Comment cette documentation est-elle structurée ?</a></h2> | |
| 193 | +<p>Cette documentation suit le cadre <strong>Diátaxis</strong>, qui distingue quatre types de contenu selon le besoin du lecteur :</p> | |
| 194 | +<div class="table-wrapper"> | |
| 195 | +<table> | |
| 196 | +<thead> | |
| 197 | +<tr><th>Type</th><th>Quand l’utiliser</th><th>Exemples</th></tr> | |
| 198 | +</thead> | |
| 199 | +<tbody> | |
| 200 | +<tr><td><strong>Tutoriels</strong></td><td>Quand vous apprenez</td><td>Installer gitrust, créer votre premier dépôt</td></tr> | |
| 201 | +<tr><td><strong>Guides pratiques</strong></td><td>Quand vous résolvez un problème précis</td><td>Configurer SMTP, gérer les clés SSH</td></tr> | |
| 202 | +<tr><td><strong>Référence</strong></td><td>Quand vous cherchez une information technique</td><td>Variables d’environnement, schéma API REST</td></tr> | |
| 203 | +<tr><td><strong>Explication</strong></td><td>Quand vous voulez comprendre le pourquoi</td><td>Architecture des crates, modèle RBAC</td></tr> | |
| 204 | +</tbody> | |
| 205 | +</table> | |
| 206 | +</div> | |
| 207 | +<p>Chaque manuel (utilisateur, administration, développeur) contient ces quatre types de contenu organisés de manière indépendante.</p> | |
| 208 | +<h2 id="naviguer-dans-la-documentation"><a class="header" href="#naviguer-dans-la-documentation">Naviguer dans la documentation</a></h2> | |
| 209 | +<ul> | |
| 210 | +<li><a href="user_manual/index.html">Manuel utilisateur</a> — collaborer sur gitrust en tant que développeur</li> | |
| 211 | +<li><a href="administration_manual/index.html">Manuel d’administration</a> — déployer et exploiter une instance</li> | |
| 212 | +<li><a href="developer_manual/index.html">Manuel développeur</a> — contribuer au code ou consommer l’API</li> | |
| 213 | +<li><a href="template/index.html">Bibliothèque de templates</a> — configs et scripts copiables</li> | |
| 214 | +</ul> | |
| 215 | + | |
| 216 | + </main> | |
| 217 | + | |
| 218 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 219 | + <!-- Mobile navigation buttons --> | |
| 220 | + | |
| 221 | + <a rel="next prefetch" href="user_manual/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 222 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 223 | + </a> | |
| 224 | + | |
| 225 | + <div style="clear: both"></div> | |
| 226 | + </nav> | |
| 227 | + </div> | |
| 228 | + </div> | |
| 229 | + | |
| 230 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 231 | + | |
| 232 | + <a rel="next prefetch" href="user_manual/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 233 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 234 | + </a> | |
| 235 | + </nav> | |
| 236 | + | |
| 237 | + </div> | |
| 238 | + | |
| 239 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 240 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 241 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 242 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 243 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + <script> | |
| 248 | + window.playground_copyable = true; | |
| 249 | + </script> | |
| 250 | + | |
| 251 | + | |
| 252 | + <script src="elasticlunr-ef4e11c1.min.js"></script> | |
| 253 | + <script src="mark-09e88c2c.min.js"></script> | |
| 254 | + <script src="searcher-c2a407aa.js"></script> | |
| 255 | + | |
| 256 | + <script src="clipboard-1626706a.min.js"></script> | |
| 257 | + <script src="highlight-abc7f01d.js"></script> | |
| 258 | + <script src="book-a0b12cfe.js"></script> | |
| 259 | + | |
| 260 | + <!-- Custom JS scripts --> | |
| 261 | + <script src="theme/mermaid-eefea253.min.js"></script> | |
| 262 | + <script src="theme/mermaid-init-ccf746f1.js"></script> | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + </div> | |
| 267 | + </body> | |
| 268 | +</html> |
A
book/mark-09e88c2c.min.js
+7
-0
@@ -0,0 +1,7 @@
| 1 | +/*!*************************************************** | |
| 2 | +* mark.js v8.11.1 | |
| 3 | +* https://markjs.io/ | |
| 4 | +* Copyright (c) 2014–2018, Julian Kühnel | |
| 5 | +* Released under the MIT license https://git.io/vwTVl | |
| 6 | +*****************************************************/ | |
| 7 | +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Mark=t()}(this,function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=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=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=i,this.iframesTimeout=o}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(function(t){var n=e.filter(function(e){return e.contains(t)}).length>0;-1!==e.indexOf(t)||n||e.push(t)}),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,i=!1,o=null,a=function a(){if(!i){i=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",a),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",a),o=setTimeout(a,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){--r||t()})},function(e){e||t()})}},{key:"forEachIframe",value:function(t,n,r){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=t.querySelectorAll("iframe"),s=a.length,c=0;a=Array.prototype.slice.call(a);var u=function(){--s<=0&&o(c)};s||u(),a.forEach(function(t){e.matches(t,i.exclude)?u():i.onIframeReady(t,function(e){n(t)&&(c++,r(e)),u()},u)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:null===t?e.nextNode():e.nextNode()&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var i=!1,o=!1;return r.forEach(function(e,t){e.val===n&&(i=t,o=e.handled)}),this.compareNodeIframe(e,t,n)?(!1!==i||o?!1===i||o||(r[i].handled=!0):r.push({val:n,handled:!0}),!0):(!1===i&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var i=this;e.forEach(function(e){e.handled||i.getIframeContents(e.val,function(e){i.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,i){for(var o,a=this,s=this.createIterator(t,e,r),c=[],u=[],l=void 0,h=void 0;void 0,o=a.getIteratorNode(s),h=o.prevNode,l=o.node;)this.iframes&&this.forEachIframe(t,function(e){return a.checkIframeFilter(l,h,e,c)},function(t){a.createInstanceOnIframe(t).forEachNode(e,function(e){return u.push(e)},r)}),u.push(l);u.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(c,e,n,r),i()}},{key:"forEachNode",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),a=o.length;a||i(),o.forEach(function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,function(){--a<=0&&i()})};r.iframes?r.waitForIframes(o,s):s()})}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var i=!1;return n.every(function(t){return!r.call(e,t)||(i=!0,!1)}),i}return!1}}]),e}(),o=function(){function e(n){t(this,e),this.opt=r({},{diacritics:!0,synonyms:{},accuracy:"partially",caseSensitive:!1,ignoreJoiners:!1,ignorePunctuation:[],wildcards:"disabled"},n)}return n(e,[{key:"create",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),new RegExp(e,"gm"+(this.opt.caseSensitive?"":"i"))}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var i in t)if(t.hasOwnProperty(i)){var o=t[i],a="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(i):this.escapeStr(i),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o);""!==a&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(a)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynonyms(a)+"|"+this.processSynonyms(s)+")"+r))}return e}},{key:"processSynonyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,function(e){return"\\"===e.charAt(0)?"?":""})).replace(/(?:\\)*\*/g,function(e){return"\\"===e.charAt(0)?"*":""})}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"],r=[];return e.split("").forEach(function(i){n.every(function(n){if(-1!==n.indexOf(i)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0})}),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,i="";switch(("string"==typeof n?[]:n.limiters).forEach(function(e){i+="|"+t.escapeStr(e)}),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿")))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach(function(e){t.opt.separateWordSearch?e.split(" ").forEach(function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)}):e.trim()&&-1===n.indexOf(e)&&n.push(e)}),{keywords:n.sort(function(e,t){return t.length-e.length}),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort(function(e,t){return e.start-t.start}).forEach(function(e){var i=t.callNoMatchOnInvalidRanges(e,r),o=i.start,a=i.end;i.valid&&(e.start=o,e.length=a-o,n.push(e),r=a)}),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,i=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?i=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:i}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,i=!0,o=n.length,a=t-o,s=parseInt(e.start,10)-a;return(r=(s=s>o?o:s)+parseInt(e.length,10))>o&&(r=o,this.log("End range automatically set to the max value of "+o)),s<0||r-s<0||s>o||r>o?(i=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:i}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})},function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){e({value:n,nodes:r})})}},{key:"matchesExclude",value:function(e){return i.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),o=i.splitText(n-t),a=document.createElement(r);return a.setAttribute("data-markjs","true"),this.opt.className&&a.setAttribute("class",this.opt.className),a.textContent=i.textContent,i.parentNode.replaceChild(a,i),o}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,i){var o=this;e.nodes.every(function(a,s){var c=e.nodes[s+1];if(void 0===c||c.start>t){if(!r(a.node))return!1;var u=t-a.start,l=(n>a.end?a.end:n)-a.start,h=e.value.substr(0,a.start),f=e.value.substr(l+a.start);if(a.node=o.wrapRangeInTextNode(a.node,u,l),e.value=h+f,e.nodes.forEach(function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=l),e.nodes[n].end-=l)}),n-=l,i(a.node.previousSibling,a.start),!(n>a.end))return!1;t=a.end}return!0})}},{key:"wrapGroups",value:function(e,t,n,r){return r((e=this.wrapRangeInTextNode(e,t,t+n)).previousSibling),e}},{key:"separateGroups",value:function(e,t,n,r,i){for(var o=t.length,a=1;a<o;a++){var s=e.textContent.indexOf(t[a]);t[a]&&s>-1&&r(t[a],e)&&(e=this.wrapGroups(e,s,t[a].length,i))}return e}},{key:"wrapMatches",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){t.nodes.forEach(function(t){t=t.node;for(var i=void 0;null!==(i=e.exec(t.textContent))&&""!==i[a];){if(o.opt.separateGroups)t=o.separateGroups(t,i,a,n,r);else{if(!n(i[a],t))continue;var s=i.index;if(0!==a)for(var c=1;c<a;c++)s+=i[c].length;t=o.wrapGroups(t,s,i[a].length,r)}e.lastIndex=0}}),i()})}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){for(var s=void 0;null!==(s=e.exec(t.value))&&""!==s[a];){var c=s.index;if(0!==a)for(var u=1;u<a;u++)c+=s[u].length;var l=c+s[a].length;o.wrapRangeInMappedTextNode(t,c,l,function(e){return n(s[a],e)},function(t,n){e.lastIndex=n,r(t)})}i()})}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var i=this;this.getTextNodes(function(o){var a=o.value.length;e.forEach(function(e,r){var s=i.checkWhitespaceRanges(e,a,o.value),c=s.start,u=s.end;s.valid&&i.wrapRangeInMappedTextNode(o,c,u,function(n){return t(n,e,o.value.substring(c,u),r)},function(t){n(t,e)})}),r()})}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,i="wrapMatches";this.opt.acrossElements&&(i="wrapMatchesAcrossElements"),this[i](e,this.opt.ignoreGroups,function(e,t){return n.opt.filter(t,e,r)},function(e){r++,n.opt.each(e)},function(){0===r&&n.opt.noMatch(e),n.opt.done(r)})}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,i="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),s=a.keywords,c=a.length;this.opt.acrossElements&&(i="wrapMatchesAcrossElements"),0===c?this.opt.done(r):function e(t){var a=new o(n.opt).create(t),u=0;n.log('Searching with expression "'+a+'"'),n[i](a,1,function(e,i){return n.opt.filter(i,t,r,u)},function(e){u++,r++,n.opt.each(e)},function(){0===u&&n.opt.noMatch(t),s[c-1]===t?n.opt.done(r):e(s[s.indexOf(t)+1])})}(s[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,i=this.checkRanges(e);i&&i.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(i)),this.wrapRangeFromIndex(i,function(e,t,r,i){return n.opt.filter(e,t,r,i)},function(e,t){r++,n.opt.each(e,t)},function(){n.opt.done(r)})):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,function(e){t.unwrapMatches(e)},function(e){var r=i.matches(e,n),o=t.matchesExclude(e);return!r||o?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,acrossElements:!1,ignoreGroups:0,each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new i(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();return function(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}}); |
A
book/print.html
+5298
-0
@@ -0,0 +1,5298 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Documentation gitrust</title> | |
| 7 | + <meta name="robots" content="noindex"> | |
| 8 | + | |
| 9 | + | |
| 10 | + <!-- Custom HTML head --> | |
| 11 | + | |
| 12 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 13 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 14 | + <meta name="theme-color" content="#ffffff"> | |
| 15 | + | |
| 16 | + <link rel="icon" href="favicon-de23e50b.svg"> | |
| 17 | + <link rel="shortcut icon" href="favicon-8114d1fc.png"> | |
| 18 | + <link rel="stylesheet" href="css/variables-8adf115d.css"> | |
| 19 | + <link rel="stylesheet" href="css/general-2459343d.css"> | |
| 20 | + <link rel="stylesheet" href="css/chrome-ae938929.css"> | |
| 21 | + <link rel="stylesheet" href="css/print-9e4910d8.css" media="print"> | |
| 22 | + | |
| 23 | + <!-- Fonts --> | |
| 24 | + <link rel="stylesheet" href="fonts/fonts-9644e21d.css"> | |
| 25 | + | |
| 26 | + <!-- Highlight.js Stylesheets --> | |
| 27 | + <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css"> | |
| 29 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css"> | |
| 30 | + | |
| 31 | + <!-- Custom theme stylesheets --> | |
| 32 | + | |
| 33 | + | |
| 34 | + <!-- Provide site root and default themes to javascript --> | |
| 35 | + <script> | |
| 36 | + const path_to_root = ""; | |
| 37 | + const default_light_theme = "light"; | |
| 38 | + const default_dark_theme = "navy"; | |
| 39 | + window.path_to_searchindex_js = "searchindex-2e4a517d.js"; | |
| 40 | + </script> | |
| 41 | + <!-- Start loading toc.js asap --> | |
| 42 | + <script src="toc-84dd2703.js"></script> | |
| 43 | + </head> | |
| 44 | + <body> | |
| 45 | + <div id="mdbook-help-container"> | |
| 46 | + <div id="mdbook-help-popup"> | |
| 47 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 48 | + <div> | |
| 49 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 50 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 51 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 52 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + </div> | |
| 56 | + <div id="mdbook-body-container"> | |
| 57 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 58 | + <script> | |
| 59 | + try { | |
| 60 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 61 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 62 | + | |
| 63 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 64 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 65 | + } | |
| 66 | + | |
| 67 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 68 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 69 | + } | |
| 70 | + } catch (e) { } | |
| 71 | + </script> | |
| 72 | + | |
| 73 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 74 | + <script> | |
| 75 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 76 | + let theme; | |
| 77 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 78 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 79 | + const html = document.documentElement; | |
| 80 | + html.classList.remove('light') | |
| 81 | + html.classList.add(theme); | |
| 82 | + html.classList.add("js"); | |
| 83 | + </script> | |
| 84 | + | |
| 85 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 86 | + | |
| 87 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 88 | + <script> | |
| 89 | + let sidebar = null; | |
| 90 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 91 | + if (document.body.clientWidth >= 1080) { | |
| 92 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 93 | + sidebar = sidebar || 'visible'; | |
| 94 | + } else { | |
| 95 | + sidebar = 'hidden'; | |
| 96 | + sidebar_toggle.checked = false; | |
| 97 | + } | |
| 98 | + if (sidebar === 'visible') { | |
| 99 | + sidebar_toggle.checked = true; | |
| 100 | + } else { | |
| 101 | + html.classList.remove('sidebar-visible'); | |
| 102 | + } | |
| 103 | + </script> | |
| 104 | + | |
| 105 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 106 | + <!-- populated by js --> | |
| 107 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 108 | + <noscript> | |
| 109 | + <iframe class="sidebar-iframe-outer" src="toc.html"></iframe> | |
| 110 | + </noscript> | |
| 111 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 112 | + <div class="sidebar-resize-indicator"></div> | |
| 113 | + </div> | |
| 114 | + </nav> | |
| 115 | + | |
| 116 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 117 | + | |
| 118 | + <div class="page"> | |
| 119 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 120 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 121 | + <div class="left-buttons"> | |
| 122 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 123 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 124 | + </label> | |
| 125 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 126 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 127 | + </button> | |
| 128 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 134 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 135 | + </ul> | |
| 136 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 137 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 138 | + </button> | |
| 139 | + </div> | |
| 140 | + | |
| 141 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 142 | + | |
| 143 | + <div class="right-buttons"> | |
| 144 | + <a href="print.html" title="Print this book" aria-label="Print this book"> | |
| 145 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 146 | + </a> | |
| 147 | + | |
| 148 | + </div> | |
| 149 | + </div> | |
| 150 | + | |
| 151 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 152 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 153 | + <div class="search-wrapper"> | |
| 154 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 155 | + <div class="spinner-wrapper"> | |
| 156 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 157 | + </div> | |
| 158 | + </div> | |
| 159 | + </form> | |
| 160 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 161 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 162 | + <ul id="mdbook-searchresults"> | |
| 163 | + </ul> | |
| 164 | + </div> | |
| 165 | + </div> | |
| 166 | + | |
| 167 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 168 | + <script> | |
| 169 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 170 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 171 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 172 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 173 | + }); | |
| 174 | + </script> | |
| 175 | + | |
| 176 | + <div id="mdbook-content" class="content"> | |
| 177 | + <main> | |
| 178 | + <h1 id="introduction"><a class="header" href="#introduction">Introduction</a></h1> | |
| 179 | +<h2 id="quest-ce-que-gitrust-"><a class="header" href="#quest-ce-que-gitrust-">Qu’est-ce que gitrust ?</a></h2> | |
| 180 | +<p><strong>gitrust</strong> est une forge Git self-hosted écrite en Rust, conçue pour les équipes de 3 à 20 personnes qui souhaitent maîtriser leur infrastructure de développement. Elle offre un serveur HTTP (<code>:4000</code>) et SSH (<code>:2222</code>), une CI intégrée via Dagger, la génération de SBOM avec Syft et l’intégration Dependency-Track, une gestion fine des permissions (4 rôles), la double authentification, des labels hiérarchiques et une conformité ANSSI PA-074.</p> | |
| 181 | +<p>Une instance publique de démonstration est accessible sur <a href="https://demo.gitrust.eu">demo.gitrust.eu</a>.</p> | |
| 182 | +<h2 id="à-qui-sadresse-cette-documentation-"><a class="header" href="#à-qui-sadresse-cette-documentation-">À qui s’adresse cette documentation ?</a></h2> | |
| 183 | +<p>Cette documentation est organisée en quatre parties selon leurs publics respectifs :</p> | |
| 184 | +<ul> | |
| 185 | +<li><strong>Manuel utilisateur</strong> — pour les développeurs qui <em>utilisent</em> une instance gitrust existante : push/pull, pull requests, issues, CI, notifications. Prérequis : savoir utiliser Git en ligne de commande.</li> | |
| 186 | +<li><strong>Manuel d’administration</strong> — pour les ops et self-hosters qui déploient, configurent et maintiennent une instance en production. Prérequis : administration Linux, notions de réseau et TLS.</li> | |
| 187 | +<li><strong>Manuel développeur</strong> — pour les contributeurs au code gitrust et les développeurs qui construisent des intégrations sur l’API publique. Prérequis : Rust (pour contribuer) ou un langage client (pour l’API).</li> | |
| 188 | +<li><strong>Bibliothèque de templates</strong> — pour tous les profils, lorsqu’ils cherchent un point de départ prêt à l’emploi (fichiers <code>.env</code>, <code>docker-compose.yml</code>, configs reverse-proxy, scripts de backup, exemples de clients API).</li> | |
| 189 | +</ul> | |
| 190 | +<h2 id="comment-cette-documentation-est-elle-structurée-"><a class="header" href="#comment-cette-documentation-est-elle-structurée-">Comment cette documentation est-elle structurée ?</a></h2> | |
| 191 | +<p>Cette documentation suit le cadre <strong>Diátaxis</strong>, qui distingue quatre types de contenu selon le besoin du lecteur :</p> | |
| 192 | +<div class="table-wrapper"> | |
| 193 | +<table> | |
| 194 | +<thead> | |
| 195 | +<tr><th>Type</th><th>Quand l’utiliser</th><th>Exemples</th></tr> | |
| 196 | +</thead> | |
| 197 | +<tbody> | |
| 198 | +<tr><td><strong>Tutoriels</strong></td><td>Quand vous apprenez</td><td>Installer gitrust, créer votre premier dépôt</td></tr> | |
| 199 | +<tr><td><strong>Guides pratiques</strong></td><td>Quand vous résolvez un problème précis</td><td>Configurer SMTP, gérer les clés SSH</td></tr> | |
| 200 | +<tr><td><strong>Référence</strong></td><td>Quand vous cherchez une information technique</td><td>Variables d’environnement, schéma API REST</td></tr> | |
| 201 | +<tr><td><strong>Explication</strong></td><td>Quand vous voulez comprendre le pourquoi</td><td>Architecture des crates, modèle RBAC</td></tr> | |
| 202 | +</tbody> | |
| 203 | +</table> | |
| 204 | +</div> | |
| 205 | +<p>Chaque manuel (utilisateur, administration, développeur) contient ces quatre types de contenu organisés de manière indépendante.</p> | |
| 206 | +<h2 id="naviguer-dans-la-documentation"><a class="header" href="#naviguer-dans-la-documentation">Naviguer dans la documentation</a></h2> | |
| 207 | +<ul> | |
| 208 | +<li><a href="#manuel-utilisateur">Manuel utilisateur</a> — collaborer sur gitrust en tant que développeur</li> | |
| 209 | +<li><a href="#manuel-dadministration">Manuel d’administration</a> — déployer et exploiter une instance</li> | |
| 210 | +<li><a href="#manuel-développeur">Manuel développeur</a> — contribuer au code ou consommer l’API</li> | |
| 211 | +<li><a href="#bibliothèque-de-templates-gitrust">Bibliothèque de templates</a> — configs et scripts copiables</li> | |
| 212 | +</ul> | |
| 213 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 214 | +<h1 id="manuel-utilisateur"><a class="header" href="#manuel-utilisateur">Manuel utilisateur</a></h1> | |
| 215 | +<p>Ce manuel t’accompagne depuis ta première connexion à une instance gitrust jusqu’à l’autonomie complète : pousser du code, collaborer via les pull requests, gérer les issues et automatiser tes workflows avec la CI intégrée. Tu n’as pas besoin d’administrer ni de comprendre l’architecture interne — ce manuel suppose seulement que tu sais utiliser Git en ligne de commande.</p> | |
| 216 | +<h2 id="parcours-dapprentissage"><a class="header" href="#parcours-dapprentissage">Parcours d’apprentissage</a></h2> | |
| 217 | +<p>Le manuel est structuré comme un <strong>parcours progressif</strong> de 4 tutoriels. Chaque tutoriel te laisse dans un état stable, vérifié, avant de passer au suivant. L’aide fournie recule d’un cran à chaque étape (du copier-coller intégral vers la composition autonome).</p> | |
| 218 | +<pre class="mermaid">graph LR | |
| 219 | + A[Compte créé] --> B[01-premier-pas<br/>20 min] | |
| 220 | + B --> C[02-cloner-pousser<br/>25 min] | |
| 221 | + C --> D[03-collaborer<br/>25 min] | |
| 222 | + D --> E[04-automatiser-ci<br/>20 min] | |
| 223 | + E --> F[Utilisateur autonome] | |
| 224 | +</pre> | |
| 225 | + | |
| 226 | +<blockquote> | |
| 227 | +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, tu dois pouvoir te connecter à gitrust, voir ton dépôt dans l’interface et l’accès SSH configuré. Si ce n’est pas le cas, relis le tutoriel 01.</p> | |
| 228 | +</blockquote> | |
| 229 | +<blockquote> | |
| 230 | +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 03, tu dois avoir poussé au moins un commit sur ta branche via SSH. Si ce n’est pas le cas, relis le tutoriel 02.</p> | |
| 231 | +</blockquote> | |
| 232 | +<blockquote> | |
| 233 | +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 04, tu dois avoir ouvert et mergé une pull request. Si ce n’est pas le cas, relis le tutoriel 03.</p> | |
| 234 | +</blockquote> | |
| 235 | +<hr> | |
| 236 | +<h2 id="tutoriels--apprendre-en-faisant"><a class="header" href="#tutoriels--apprendre-en-faisant">Tutoriels — apprendre en faisant</a></h2> | |
| 237 | +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suis-les dans l’ordre — chacun suppose le précédent complété.</p> | |
| 238 | +<ul> | |
| 239 | +<li><a href="#premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt">01 — Premiers pas : 2FA, clé SSH, premier dépôt</a> — ~20 min</li> | |
| 240 | +<li><a href="#02--cloner-et-pousser-du-code">02 — Cloner et pousser du code</a> — ~25 min</li> | |
| 241 | +<li><a href="#03--collaborer--équipes-issues-pull-requests">03 — Collaborer : équipes, issues, pull requests</a> — ~25 min</li> | |
| 242 | +<li><a href="#04--automatiser-avec-la-ci">04 — Automatiser avec la CI</a> — ~20 min</li> | |
| 243 | +</ul> | |
| 244 | +<hr> | |
| 245 | +<h2 id="how-to--recettes-pour-les-tâches-courantes"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes">How-to — recettes pour les tâches courantes</a></h2> | |
| 246 | +<p>Les how-to répondent à « comment faire X » sans explication de fond. Tu peux les consulter dans n’importe quel ordre selon ton besoin immédiat.</p> | |
| 247 | +<p>Ces guides supposent que tu as suivi le parcours tutoriels. Ils ne répètent pas les étapes de base.</p> | |
| 248 | +<ul> | |
| 249 | +<li><a href="#gérer-ses-clés-ssh">Gérer ses clés SSH</a></li> | |
| 250 | +<li><a href="#configurer-la-double-authentification-2fa">Configurer la 2FA</a></li> | |
| 251 | +<li><a href="#créer-un-personal-access-token">Créer un Personal Access Token</a></li> | |
| 252 | +<li><a href="#gérer-les-équipes-et-les-permissions">Gérer les équipes et permissions</a></li> | |
| 253 | +<li><a href="#ouvrir-une-pull-request">Ouvrir une pull request</a></li> | |
| 254 | +<li><a href="#stratégies-de-fusion-ff--squash--merge-commit">Fusionner : fast-forward, squash, merge commit</a></li> | |
| 255 | +<li><a href="#utiliser-les-labels-et-les-issues">Utiliser les labels hiérarchiques</a></li> | |
| 256 | +<li><a href="#importer-un-dépôt-externe">Importer un dépôt externe</a></li> | |
| 257 | +<li><a href="#consulter-le-sbom-dun-dépôt">Consulter le SBOM de ton projet</a></li> | |
| 258 | +</ul> | |
| 259 | +<hr> | |
| 260 | +<h2 id="référence--informations-techniques-exactes"><a class="header" href="#référence--informations-techniques-exactes">Référence — informations techniques exactes</a></h2> | |
| 261 | +<p>La référence est destinée à la consultation ponctuelle, pas à la lecture linéaire. Elle documente les formats, schémas et comportements exacts.</p> | |
| 262 | +<ul> | |
| 263 | +<li><a href="#modèle-de-permissions-4-rôles">Modèle de permissions (4 rôles)</a></li> | |
| 264 | +<li><a href="#api-rest-v1">API REST v1 — authentification, pagination, codes d’erreur</a></li> | |
| 265 | +<li><a href="#schéma-du-fichier-gitrust-ciyml">Schéma YAML <code>.gitrust-ci.yml</code> (Easy Mode)</a></li> | |
| 266 | +<li><a href="#markdown-et-syntaxe-supportée">Syntaxe Markdown supportée</a></li> | |
| 267 | +<li><a href="#notifications">Notifications : SSE, e-mail, préférences</a></li> | |
| 268 | +</ul> | |
| 269 | +<hr> | |
| 270 | +<h2 id="explication--comprendre-le-pourquoi"><a class="header" href="#explication--comprendre-le-pourquoi">Explication — comprendre le pourquoi</a></h2> | |
| 271 | +<p>Les explanations t’aident à construire des modèles mentaux durables. Lis-les quand tu veux comprendre <em>pourquoi</em> gitrust fonctionne ainsi, pas seulement <em>comment</em>.</p> | |
| 272 | +<ul> | |
| 273 | +<li><a href="#modèle-de-collaboration-sur-gitrust">Modèle de collaboration gitrust</a></li> | |
| 274 | +<li><a href="#sécurité-côté-utilisateur">Sécurité utilisateur : 2FA, PAT, audit log</a></li> | |
| 275 | +<li><a href="#cycle-de-vie-dune-pull-request">Cycle de vie d’une pull request</a></li> | |
| 276 | +</ul> | |
| 277 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 278 | +<h1 id="tutoriels"><a class="header" href="#tutoriels">Tutoriels</a></h1> | |
| 279 | +<blockquote> | |
| 280 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 281 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 282 | +</blockquote> | |
| 283 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 284 | +<ul> | |
| 285 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 286 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 287 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 288 | +</ul> | |
| 289 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 290 | +<h1 id="premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt"><a class="header" href="#premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt">Premiers pas : active la 2FA, ajoute ta clé SSH et crée ton premier dépôt</a></h1> | |
| 291 | +<h2 id="objectifs"><a class="header" href="#objectifs">Objectifs</a></h2> | |
| 292 | +<p>À la fin de ce tutoriel, tu sauras :</p> | |
| 293 | +<ul> | |
| 294 | +<li><strong>O1. Activer</strong> l’authentification à deux facteurs (2FA) sur ton compte gitrust</li> | |
| 295 | +<li><strong>O2. Enregistrer</strong> une clé SSH publique dans ton profil pour te connecter sans mot de passe</li> | |
| 296 | +<li><strong>O3. Créer</strong> un dépôt vide et vérifier qu’il est accessible à l’URL attendue</li> | |
| 297 | +</ul> | |
| 298 | +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2> | |
| 299 | +<ul> | |
| 300 | +<li><strong>Technique</strong> : un compte gitrust existant (e-mail + mot de passe), Git installé (<code>git --version</code> répond), une paire de clés SSH générée ou à générer (<code>ssh-keygen</code>)</li> | |
| 301 | +<li><strong>Pédagogique</strong> : aucun tutoriel préalable requis — c’est le point de départ du parcours</li> | |
| 302 | +<li><strong>Temps estimé</strong> : ~20 minutes</li> | |
| 303 | +</ul> | |
| 304 | +<h2 id="vue-densemble"><a class="header" href="#vue-densemble">Vue d’ensemble</a></h2> | |
| 305 | +<p>Avant de taper la première commande, prenons 2 minutes pour comprendre ce que tu vas faire et pourquoi.</p> | |
| 306 | +<p><strong>Un dépôt</strong> (<em>repository</em>), c’est comme un dossier de projet avec tout l’historique de ses modifications — une boîte d’archives vivante que Git surveille. Sur gitrust, ce dossier vit sur le serveur et peut être partagé avec ton équipe.</p> | |
| 307 | +<p><strong>Une clé SSH</strong> fonctionne comme une serrure et une clé : tu gardes la clé privée sur ta machine (ne la partage jamais), et tu déposes la clé publique dans ton profil gitrust. Ensuite, Git se connecte automatiquement sans te redemander de mot de passe — gitrust reconnaît ta machine.</p> | |
| 308 | +<p><strong>La 2FA</strong> (authentification à deux facteurs) ajoute un second verrou à ton compte : même si quelqu’un vole ton mot de passe, il ne peut pas se connecter sans le code de ton téléphone. C’est une protection essentielle pour tout compte qui héberge du code.</p> | |
| 309 | +<p>Voici le flux que tu vas configurer :</p> | |
| 310 | +<pre class="mermaid">sequenceDiagram | |
| 311 | + participant T as Ton navigateur | |
| 312 | + participant G as gitrust (HTTPS :4000) | |
| 313 | + participant S as Ton terminal (SSH :2222) | |
| 314 | + | |
| 315 | + T->>G: Connexion avec e-mail + mdp + code 2FA | |
| 316 | + T->>G: Dépôt de la clé SSH publique | |
| 317 | + S->>G: git push via SSH (authentifié par clé) | |
| 318 | + G-->>T: Dépôt visible dans l'interface web | |
| 319 | +</pre> | |
| 320 | + | |
| 321 | +<hr> | |
| 322 | +<h2 id="étape-1--connecte-toi-et-accède-aux-paramètres-de-sécurité"><a class="header" href="#étape-1--connecte-toi-et-accède-aux-paramètres-de-sécurité">Étape 1 : Connecte-toi et accède aux paramètres de sécurité</a></h2> | |
| 323 | +<p>Ouvre ton navigateur et va sur l’URL de ton instance gitrust (par exemple <code>https://demo.gitrust.eu</code>). Connecte-toi avec ton e-mail et ton mot de passe.</p> | |
| 324 | +<p>Une fois connecté, clique sur ton avatar en haut à droite, puis sur <strong>Paramètres</strong> (<code>/settings</code>). Dans le menu de gauche, sélectionne <strong>Sécurité</strong>.</p> | |
| 325 | +<p><strong>Checkpoint</strong> : tu dois voir la page <em>Sécurité</em> avec une section « Authentification à deux facteurs » et le statut « Désactivée ». Si tu ne la vois pas, vérifie que tu es bien connecté avec le bon compte.</p> | |
| 326 | +<hr> | |
| 327 | +<h2 id="étape-2--active-la-2fa-avec-une-application-dauthentification"><a class="header" href="#étape-2--active-la-2fa-avec-une-application-dauthentification">Étape 2 : Active la 2FA avec une application d’authentification</a></h2> | |
| 328 | +<p>Sur la page <em>Sécurité</em>, clique sur <strong>Activer la 2FA</strong>. gitrust affiche un QR code.</p> | |
| 329 | +<ol> | |
| 330 | +<li>Ouvre ton application d’authentification (Google Authenticator, Authy, ou tout équivalent compatible TOTP).</li> | |
| 331 | +<li>Scanne le QR code avec l’application.</li> | |
| 332 | +<li>L’application affiche un code à 6 chiffres qui change toutes les 30 secondes.</li> | |
| 333 | +<li>Saisis ce code dans le champ <strong>Code de vérification</strong> et clique <strong>Confirmer</strong>.</li> | |
| 334 | +</ol> | |
| 335 | +<p>Sortie attendue (message dans l’interface) :</p> | |
| 336 | +<pre><code>La 2FA a été activée avec succès. | |
| 337 | +Conservez vos codes de secours dans un endroit sûr. | |
| 338 | +</code></pre> | |
| 339 | +<p>gitrust affiche également <strong>10 codes de secours</strong> (format <code>XXXX-XXXX</code>). Copie-les et conserve-les hors ligne — ils te permettent de récupérer l’accès si tu perds ton téléphone.</p> | |
| 340 | +<p><strong>Checkpoint</strong> : retourne sur <em>Paramètres → Sécurité</em>. La section 2FA doit maintenant afficher « <strong>Activée</strong> » en vert. Si elle affiche toujours « Désactivée », recommence l’étape en t’assurant que le code à 6 chiffres est saisi avant qu’il expire.</p> | |
| 341 | +<hr> | |
| 342 | +<h2 id="étape-3--génère-ou-localise-ta-clé-ssh"><a class="header" href="#étape-3--génère-ou-localise-ta-clé-ssh">Étape 3 : Génère ou localise ta clé SSH</a></h2> | |
| 343 | +<p>Si tu n’as pas encore de paire de clés SSH, génère-en une maintenant dans ton terminal :</p> | |
| 344 | +<pre><code class="language-bash">ssh-keygen -t ed25519 -C "mon-compte@example.com" | |
| 345 | +</code></pre> | |
| 346 | +<p>Sortie attendue :</p> | |
| 347 | +<pre><code>Generating public/private ed25519 key pair. | |
| 348 | +Enter file in which to save the key (/home/toi/.ssh/id_ed25519): | |
| 349 | +Enter passphrase (empty for no passphrase): | |
| 350 | +Enter same passphrase again: | |
| 351 | +Your identification has been saved in /home/toi/.ssh/id_ed25519 | |
| 352 | +Your public key has been saved in /home/toi/.ssh/id_ed25519.pub | |
| 353 | +The key fingerprint is: | |
| 354 | +SHA256:xXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx mon-compte@example.com | |
| 355 | +</code></pre> | |
| 356 | +<p>Appuie sur Entrée pour accepter le chemin par défaut. Tu peux choisir une passphrase ou laisser vide (appuie deux fois sur Entrée). Une passphrase ajoute une couche de sécurité.</p> | |
| 357 | +<p>Affiche maintenant ta <strong>clé publique</strong> (le fichier <code>.pub</code> — celui-ci est fait pour être partagé) :</p> | |
| 358 | +<pre><code class="language-bash">cat ~/.ssh/id_ed25519.pub | |
| 359 | +</code></pre> | |
| 360 | +<p>Sortie attendue (une seule ligne) :</p> | |
| 361 | +<pre><code>ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mon-compte@example.com | |
| 362 | +</code></pre> | |
| 363 | +<p>Copie cette ligne entière dans le presse-papier.</p> | |
| 364 | +<p><strong>Checkpoint</strong> : la commande <code>cat</code> doit afficher une ligne commençant par <code>ssh-ed25519</code> (ou <code>ssh-rsa</code> si tu as une clé plus ancienne). Si elle affiche « No such file or directory », la génération n’a pas abouti — relance <code>ssh-keygen</code>.</p> | |
| 365 | +<hr> | |
| 366 | +<h2 id="étape-4--enregistre-la-clé-ssh-dans-ton-profil-gitrust"><a class="header" href="#étape-4--enregistre-la-clé-ssh-dans-ton-profil-gitrust">Étape 4 : Enregistre la clé SSH dans ton profil gitrust</a></h2> | |
| 367 | +<p>Dans ton navigateur, retourne sur <em>Paramètres</em> et clique sur <strong>Clés SSH</strong> dans le menu de gauche.</p> | |
| 368 | +<p>Clique sur <strong>Ajouter une clé SSH</strong>. Un formulaire apparaît :</p> | |
| 369 | +<ul> | |
| 370 | +<li><strong>Titre</strong> : donne un nom descriptif à cette clé (ex. <code>laptop-perso-2026</code>, <code>poste-bureau</code>)</li> | |
| 371 | +<li><strong>Clé</strong> : colle la ligne copiée à l’étape précédente</li> | |
| 372 | +</ul> | |
| 373 | +<p>Clique <strong>Enregistrer la clé</strong>.</p> | |
| 374 | +<p>Sortie attendue (message dans l’interface) :</p> | |
| 375 | +<pre><code>Clé SSH ajoutée avec succès. | |
| 376 | +</code></pre> | |
| 377 | +<p>Teste maintenant la connexion SSH depuis ton terminal :</p> | |
| 378 | +<pre><code class="language-bash">ssh -T git@demo.gitrust.eu -p 2222 | |
| 379 | +</code></pre> | |
| 380 | +<p>Sortie attendue :</p> | |
| 381 | +<pre><code>Bonjour tonpseudo ! Vous êtes authentifié, mais gitrust ne fournit pas d'accès shell. | |
| 382 | +</code></pre> | |
| 383 | +<p><strong>Checkpoint</strong> : si tu obtiens ce message, ta clé SSH est correctement enregistrée. Si tu obtiens <code>Permission denied (publickey)</code>, vérifie que tu as bien copié la clé <strong>publique</strong> (<code>.pub</code>) et non la clé privée. Consulte la section « Et si ça ne marche pas » ci-dessous.</p> | |
| 384 | +<hr> | |
| 385 | +<h2 id="étape-5--crée-ton-premier-dépôt-vide"><a class="header" href="#étape-5--crée-ton-premier-dépôt-vide">Étape 5 : Crée ton premier dépôt vide</a></h2> | |
| 386 | +<p>Dans ton navigateur, clique sur le <strong>+</strong> en haut à droite (ou navigue vers <code>/repo/new</code>).</p> | |
| 387 | +<p>Remplis le formulaire :</p> | |
| 388 | +<ul> | |
| 389 | +<li><strong>Propriétaire</strong> : ton pseudo</li> | |
| 390 | +<li><strong>Nom du dépôt</strong> : <code>mon-premier-depot</code> (lettres, chiffres, tirets uniquement)</li> | |
| 391 | +<li><strong>Visibilité</strong> : Privé (ou Public selon ta préférence)</li> | |
| 392 | +<li><strong>Initialiser le dépôt</strong> : coche « Ajouter un README »</li> | |
| 393 | +</ul> | |
| 394 | +<p>Clique sur <strong>Créer le dépôt</strong>.</p> | |
| 395 | +<p>Sortie attendue : gitrust te redirige vers la page du dépôt à l’URL :</p> | |
| 396 | +<pre><code>https://demo.gitrust.eu/tonpseudo/mon-premier-depot | |
| 397 | +</code></pre> | |
| 398 | +<p>La page affiche un fichier <code>README.md</code> avec le nom du dépôt, et la barre latérale montre 1 commit, 1 branche (<code>main</code>).</p> | |
| 399 | +<p><strong>Checkpoint</strong> : note l’URL affichée dans la barre d’adresse de ton navigateur. Elle doit correspondre au patron <code>https://<instance>/<pseudo>/<nom-depot></code>. Si tu vois une erreur 404 ou 500, relis le formulaire de création.</p> | |
| 400 | +<hr> | |
| 401 | +<h2 id="récapitulatif"><a class="header" href="#récapitulatif">Récapitulatif</a></h2> | |
| 402 | +<ul> | |
| 403 | +<li>✓ <strong>O1 accompli</strong> : la 2FA est activée sur ton compte — tu l’as vérifiée sur la page <em>Sécurité</em> qui affiche « Activée »</li> | |
| 404 | +<li>✓ <strong>O2 accompli</strong> : ta clé SSH publique est enregistrée — tu l’as confirmée avec <code>ssh -T git@... -p 2222</code> qui a répondu « Vous êtes authentifié »</li> | |
| 405 | +<li>✓ <strong>O3 accompli</strong> : ton premier dépôt est créé et visible à l’URL <code>/<pseudo>/mon-premier-depot</code></li> | |
| 406 | +</ul> | |
| 407 | +<hr> | |
| 408 | +<h2 id="et-si-ça-ne-marche-pas"><a class="header" href="#et-si-ça-ne-marche-pas">Et si ça ne marche pas</a></h2> | |
| 409 | +<div class="table-wrapper"> | |
| 410 | +<table> | |
| 411 | +<thead> | |
| 412 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr> | |
| 413 | +</thead> | |
| 414 | +<tbody> | |
| 415 | +<tr><td><code>Permission denied (publickey)</code> lors du test SSH</td><td>Tu as collé la clé privée au lieu de la clé publique, ou le fichier <code>.pub</code> ne correspond pas à la clé active</td><td>Dans gitrust, supprime la clé ajoutée. Retourne au terminal et exécute <code>ssh-add -l</code> pour voir les clés actives. Recopie la bonne clé <code>.pub</code> avec <code>cat ~/.ssh/id_ed25519.pub</code></td></tr> | |
| 416 | +<tr><td><code>Connection refused</code> lors du test SSH</td><td>Le port SSH de l’instance est différent de 2222, ou l’instance est inaccessible</td><td>Vérifie avec l’administrateur le port SSH réel. Essaie <code>ssh -T git@<instance> -p 22</code> en alternative</td></tr> | |
| 417 | +<tr><td>Le code 2FA est refusé alors qu’il semble correct</td><td>L’horloge de ton téléphone est désynchronisée (décalage > 30 s)</td><td>Active la synchronisation automatique de l’heure sur ton téléphone (<em>Paramètres → Date et heure → Automatique</em>). Réessaie immédiatement après</td></tr> | |
| 418 | +<tr><td>Le dépôt redirige vers une erreur 422 lors de la création</td><td>Le nom contient des caractères interdits (espaces, accents, <code>/</code>)</td><td>Utilise uniquement des lettres non accentuées, chiffres et tirets. Évite les points en début ou fin de nom</td></tr> | |
| 419 | +</tbody> | |
| 420 | +</table> | |
| 421 | +</div> | |
| 422 | +<hr> | |
| 423 | +<h2 id="prochaine-étape"><a class="header" href="#prochaine-étape">Prochaine étape</a></h2> | |
| 424 | +<p>→ <a href="#02--cloner-et-pousser-du-code">02 — Cloner et pousser du code</a> : clone ton dépôt en local avec SSH, fais ton premier commit et pousse-le sur gitrust (~25 min)</p> | |
| 425 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 426 | +<h1 id="02--cloner-et-pousser-du-code"><a class="header" href="#02--cloner-et-pousser-du-code">02 — Cloner et pousser du code</a></h1> | |
| 427 | +<blockquote> | |
| 428 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 429 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 430 | +</blockquote> | |
| 431 | +<h2 id="todo-1"><a class="header" href="#todo-1">TODO</a></h2> | |
| 432 | +<ul> | |
| 433 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 434 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 435 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 436 | +</ul> | |
| 437 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 438 | +<h1 id="03--collaborer--équipes-issues-pull-requests"><a class="header" href="#03--collaborer--équipes-issues-pull-requests">03 — Collaborer : équipes, issues, pull requests</a></h1> | |
| 439 | +<blockquote> | |
| 440 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 441 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 442 | +</blockquote> | |
| 443 | +<h2 id="todo-2"><a class="header" href="#todo-2">TODO</a></h2> | |
| 444 | +<ul> | |
| 445 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 446 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 447 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 448 | +</ul> | |
| 449 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 450 | +<h1 id="04--automatiser-avec-la-ci"><a class="header" href="#04--automatiser-avec-la-ci">04 — Automatiser avec la CI</a></h1> | |
| 451 | +<blockquote> | |
| 452 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 453 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 454 | +</blockquote> | |
| 455 | +<h2 id="todo-3"><a class="header" href="#todo-3">TODO</a></h2> | |
| 456 | +<ul> | |
| 457 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 458 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 459 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 460 | +</ul> | |
| 461 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 462 | +<h1 id="guides-pratiques"><a class="header" href="#guides-pratiques">Guides pratiques</a></h1> | |
| 463 | +<blockquote> | |
| 464 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 465 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 466 | +</blockquote> | |
| 467 | +<h2 id="todo-4"><a class="header" href="#todo-4">TODO</a></h2> | |
| 468 | +<ul> | |
| 469 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 470 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 471 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 472 | +</ul> | |
| 473 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 474 | +<h1 id="gérer-ses-clés-ssh"><a class="header" href="#gérer-ses-clés-ssh">Gérer ses clés SSH</a></h1> | |
| 475 | +<blockquote> | |
| 476 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 477 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 478 | +</blockquote> | |
| 479 | +<h2 id="todo-5"><a class="header" href="#todo-5">TODO</a></h2> | |
| 480 | +<ul> | |
| 481 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 482 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 483 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 484 | +</ul> | |
| 485 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 486 | +<h1 id="configurer-la-double-authentification-2fa"><a class="header" href="#configurer-la-double-authentification-2fa">Configurer la double authentification (2FA)</a></h1> | |
| 487 | +<blockquote> | |
| 488 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 489 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 490 | +</blockquote> | |
| 491 | +<h2 id="todo-6"><a class="header" href="#todo-6">TODO</a></h2> | |
| 492 | +<ul> | |
| 493 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 494 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 495 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 496 | +</ul> | |
| 497 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 498 | +<h1 id="créer-un-personal-access-token"><a class="header" href="#créer-un-personal-access-token">Créer un Personal Access Token</a></h1> | |
| 499 | +<blockquote> | |
| 500 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 501 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 502 | +</blockquote> | |
| 503 | +<h2 id="todo-7"><a class="header" href="#todo-7">TODO</a></h2> | |
| 504 | +<ul> | |
| 505 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 506 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 507 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 508 | +</ul> | |
| 509 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 510 | +<h1 id="gérer-les-équipes-et-les-permissions"><a class="header" href="#gérer-les-équipes-et-les-permissions">Gérer les équipes et les permissions</a></h1> | |
| 511 | +<blockquote> | |
| 512 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 513 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 514 | +</blockquote> | |
| 515 | +<h2 id="todo-8"><a class="header" href="#todo-8">TODO</a></h2> | |
| 516 | +<ul> | |
| 517 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 518 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 519 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 520 | +</ul> | |
| 521 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 522 | +<h1 id="ouvrir-une-pull-request"><a class="header" href="#ouvrir-une-pull-request">Ouvrir une pull request</a></h1> | |
| 523 | +<blockquote> | |
| 524 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 525 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 526 | +</blockquote> | |
| 527 | +<h2 id="todo-9"><a class="header" href="#todo-9">TODO</a></h2> | |
| 528 | +<ul> | |
| 529 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 530 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 531 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 532 | +</ul> | |
| 533 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 534 | +<h1 id="stratégies-de-fusion-ff--squash--merge-commit"><a class="header" href="#stratégies-de-fusion-ff--squash--merge-commit">Stratégies de fusion (ff / squash / merge commit)</a></h1> | |
| 535 | +<blockquote> | |
| 536 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 537 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 538 | +</blockquote> | |
| 539 | +<h2 id="todo-10"><a class="header" href="#todo-10">TODO</a></h2> | |
| 540 | +<ul> | |
| 541 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 542 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 543 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 544 | +</ul> | |
| 545 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 546 | +<h1 id="utiliser-les-labels-et-les-issues"><a class="header" href="#utiliser-les-labels-et-les-issues">Utiliser les labels et les issues</a></h1> | |
| 547 | +<blockquote> | |
| 548 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 549 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 550 | +</blockquote> | |
| 551 | +<h2 id="todo-11"><a class="header" href="#todo-11">TODO</a></h2> | |
| 552 | +<ul> | |
| 553 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 554 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 555 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 556 | +</ul> | |
| 557 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 558 | +<h1 id="importer-un-dépôt-externe"><a class="header" href="#importer-un-dépôt-externe">Importer un dépôt externe</a></h1> | |
| 559 | +<blockquote> | |
| 560 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 561 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 562 | +</blockquote> | |
| 563 | +<h2 id="todo-12"><a class="header" href="#todo-12">TODO</a></h2> | |
| 564 | +<ul> | |
| 565 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 566 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 567 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 568 | +</ul> | |
| 569 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 570 | +<h1 id="consulter-le-sbom-dun-dépôt"><a class="header" href="#consulter-le-sbom-dun-dépôt">Consulter le SBOM d’un dépôt</a></h1> | |
| 571 | +<blockquote> | |
| 572 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 573 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 574 | +</blockquote> | |
| 575 | +<h2 id="todo-13"><a class="header" href="#todo-13">TODO</a></h2> | |
| 576 | +<ul> | |
| 577 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 578 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 579 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 580 | +</ul> | |
| 581 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 582 | +<h1 id="référence"><a class="header" href="#référence">Référence</a></h1> | |
| 583 | +<blockquote> | |
| 584 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 585 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 586 | +</blockquote> | |
| 587 | +<h2 id="todo-14"><a class="header" href="#todo-14">TODO</a></h2> | |
| 588 | +<ul> | |
| 589 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 590 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 591 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 592 | +</ul> | |
| 593 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 594 | +<h1 id="modèle-de-permissions-4-rôles"><a class="header" href="#modèle-de-permissions-4-rôles">Modèle de permissions (4 rôles)</a></h1> | |
| 595 | +<blockquote> | |
| 596 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 597 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 598 | +</blockquote> | |
| 599 | +<h2 id="todo-15"><a class="header" href="#todo-15">TODO</a></h2> | |
| 600 | +<ul> | |
| 601 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 602 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 603 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 604 | +</ul> | |
| 605 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 606 | +<h1 id="api-rest-v1"><a class="header" href="#api-rest-v1">API REST v1</a></h1> | |
| 607 | +<blockquote> | |
| 608 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 609 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 610 | +</blockquote> | |
| 611 | +<h2 id="todo-16"><a class="header" href="#todo-16">TODO</a></h2> | |
| 612 | +<ul> | |
| 613 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 614 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 615 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 616 | +</ul> | |
| 617 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 618 | +<h1 id="schéma-du-fichier-gitrust-ciyml"><a class="header" href="#schéma-du-fichier-gitrust-ciyml">Schéma du fichier .gitrust-ci.yml</a></h1> | |
| 619 | +<blockquote> | |
| 620 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 621 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 622 | +</blockquote> | |
| 623 | +<h2 id="todo-17"><a class="header" href="#todo-17">TODO</a></h2> | |
| 624 | +<ul> | |
| 625 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 626 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 627 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 628 | +</ul> | |
| 629 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 630 | +<h1 id="markdown-et-syntaxe-supportée"><a class="header" href="#markdown-et-syntaxe-supportée">Markdown et syntaxe supportée</a></h1> | |
| 631 | +<blockquote> | |
| 632 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 633 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 634 | +</blockquote> | |
| 635 | +<h2 id="todo-18"><a class="header" href="#todo-18">TODO</a></h2> | |
| 636 | +<ul> | |
| 637 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 638 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 639 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 640 | +</ul> | |
| 641 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 642 | +<h1 id="notifications"><a class="header" href="#notifications">Notifications</a></h1> | |
| 643 | +<blockquote> | |
| 644 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 645 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 646 | +</blockquote> | |
| 647 | +<h2 id="todo-19"><a class="header" href="#todo-19">TODO</a></h2> | |
| 648 | +<ul> | |
| 649 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 650 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 651 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 652 | +</ul> | |
| 653 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 654 | +<h1 id="explication"><a class="header" href="#explication">Explication</a></h1> | |
| 655 | +<blockquote> | |
| 656 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 657 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 658 | +</blockquote> | |
| 659 | +<h2 id="todo-20"><a class="header" href="#todo-20">TODO</a></h2> | |
| 660 | +<ul> | |
| 661 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 662 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 663 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 664 | +</ul> | |
| 665 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 666 | +<h1 id="modèle-de-collaboration-sur-gitrust"><a class="header" href="#modèle-de-collaboration-sur-gitrust">Modèle de collaboration sur gitrust</a></h1> | |
| 667 | +<blockquote> | |
| 668 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 669 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 670 | +</blockquote> | |
| 671 | +<h2 id="todo-21"><a class="header" href="#todo-21">TODO</a></h2> | |
| 672 | +<ul> | |
| 673 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 674 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 675 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 676 | +</ul> | |
| 677 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 678 | +<h1 id="sécurité-côté-utilisateur"><a class="header" href="#sécurité-côté-utilisateur">Sécurité côté utilisateur</a></h1> | |
| 679 | +<blockquote> | |
| 680 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 681 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 682 | +</blockquote> | |
| 683 | +<h2 id="todo-22"><a class="header" href="#todo-22">TODO</a></h2> | |
| 684 | +<ul> | |
| 685 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 686 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 687 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 688 | +</ul> | |
| 689 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 690 | +<h1 id="cycle-de-vie-dune-pull-request"><a class="header" href="#cycle-de-vie-dune-pull-request">Cycle de vie d’une pull request</a></h1> | |
| 691 | +<blockquote> | |
| 692 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 693 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 694 | +</blockquote> | |
| 695 | +<h2 id="todo-23"><a class="header" href="#todo-23">TODO</a></h2> | |
| 696 | +<ul> | |
| 697 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 698 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 699 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 700 | +</ul> | |
| 701 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 702 | +<h1 id="manuel-dadministration"><a class="header" href="#manuel-dadministration">Manuel d’administration</a></h1> | |
| 703 | +<p>Ce manuel s’adresse aux opérateurs et self-hosters qui déploient, configurent et maintiennent une instance gitrust en production. Il couvre l’intégralité du cycle de vie d’une instance : premier démarrage, mise en production, sauvegarde, mise à jour et dépannage. Il suppose des connaissances en administration Linux, en réseau et en TLS — il n’explique pas ces prérequis.</p> | |
| 704 | +<h2 id="parcours-dapprentissage-1"><a class="header" href="#parcours-dapprentissage-1">Parcours d’apprentissage</a></h2> | |
| 705 | +<p>Le parcours administrateur est structuré en 4 tutoriels qui représentent environ 3 heures au total. L’étayage est dégressif : le premier tutoriel fournit tout clé en main, le dernier demande de composer soi-même à partir des recettes disponibles.</p> | |
| 706 | +<pre class="mermaid">graph LR | |
| 707 | + A[VM prête<br/>Docker installé] --> B[01-installation-docker<br/>30 min] | |
| 708 | + B --> C[02-installation-systemd<br/>45 min] | |
| 709 | + C --> D[03-premier-demarrage<br/>20 min] | |
| 710 | + D --> E[04-mise-en-production<br/>90 min] | |
| 711 | + E --> F[Admin opérationnel] | |
| 712 | +</pre> | |
| 713 | + | |
| 714 | +<blockquote> | |
| 715 | +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, vous devez avoir une instance gitrust accessible sur <code>http://localhost:4000</code> avec un compte administrateur fonctionnel. Si ce n’est pas le cas, relisez le tutoriel 01.</p> | |
| 716 | +</blockquote> | |
| 717 | +<blockquote> | |
| 718 | +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 04, vous devez avoir une instance démarrée avec une configuration SMTP et un reverse-proxy TLS opérationnel. Si ce n’est pas le cas, relisez le tutoriel 03.</p> | |
| 719 | +</blockquote> | |
| 720 | +<hr> | |
| 721 | +<h2 id="tutoriels--apprendre-en-faisant-1"><a class="header" href="#tutoriels--apprendre-en-faisant-1">Tutoriels — apprendre en faisant</a></h2> | |
| 722 | +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété.</p> | |
| 723 | +<ul> | |
| 724 | +<li><a href="#installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose">01 — Installation Docker : stack docker-compose complète</a> — ~30 min</li> | |
| 725 | +<li><a href="#02--installation-avec-systemd">02 — Installation systemd : binaire natif + service</a> — ~45 min</li> | |
| 726 | +<li><a href="#03--premier-démarrage">03 — Premier démarrage : admin bootstrap, migrations</a> — ~20 min</li> | |
| 727 | +<li><a href="#mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt">04 — Mise en production</a> — ~90 min</li> | |
| 728 | +</ul> | |
| 729 | +<hr> | |
| 730 | +<h2 id="how-to--recettes-pour-les-tâches-courantes-1"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes-1">How-to — recettes pour les tâches courantes</a></h2> | |
| 731 | +<p>Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin.</p> | |
| 732 | +<ul> | |
| 733 | +<li><a href="#sauvegarder-et-restaurer">Sauvegarder et restaurer</a></li> | |
| 734 | +<li><a href="#mettre-à-jour-gitrust">Mettre à jour l’instance</a></li> | |
| 735 | +<li><a href="#configurer-smtp">Configurer SMTP</a></li> | |
| 736 | +<li><a href="#configurer-oauth">Configurer OAuth (Google, GitHub)</a></li> | |
| 737 | +<li><a href="#configurer-le-runner-ci-distant">Configurer un CI runner distant</a></li> | |
| 738 | +<li><a href="#intégrer-la-ci-et-dependency-track">Intégrer Dependency-Track (SBOM)</a></li> | |
| 739 | +<li><a href="#durcir-linstance-avec-fail2ban">Durcir avec Fail2ban</a></li> | |
| 740 | +<li><a href="#régler-le-rate-limiting">Tuner le rate limiting</a></li> | |
| 741 | +<li><a href="#forcer-le-2fa-sur-toute-linstance">Forcer la 2FA globalement</a></li> | |
| 742 | +<li><a href="#dépanner-ssh">Dépanner SSH</a></li> | |
| 743 | +<li><a href="#dépanner-la-ci">Dépanner la CI</a></li> | |
| 744 | +<li><a href="#gérer-les-utilisateurs-panel-admin">Gérer les utilisateurs depuis /admin</a></li> | |
| 745 | +<li><a href="#auditer-une-instance">Auditer l’instance</a></li> | |
| 746 | +</ul> | |
| 747 | +<hr> | |
| 748 | +<h2 id="référence--informations-techniques-exactes-1"><a class="header" href="#référence--informations-techniques-exactes-1">Référence — informations techniques exactes</a></h2> | |
| 749 | +<p>La référence documente de façon exhaustive les paramètres, schémas et comportements. Elle est destinée à la consultation ponctuelle.</p> | |
| 750 | +<ul> | |
| 751 | +<li><a href="#variables-denvironnement">Variables d’environnement (.env)</a></li> | |
| 752 | +<li><a href="#paramètres-dynamiques">Paramètres dynamiques (app_settings)</a></li> | |
| 753 | +<li><a href="#schéma-de-la-base-de-données">Schéma de base de données</a></li> | |
| 754 | +<li><a href="#ports-et-services">Ports et services (4000 HTTP, 2222 SSH, 5432 PG)</a></li> | |
| 755 | +<li><a href="#conformité-anssi-pa-074">Conformité ANSSI PA-074</a></li> | |
| 756 | +</ul> | |
| 757 | +<hr> | |
| 758 | +<h2 id="explication--comprendre-le-pourquoi-1"><a class="header" href="#explication--comprendre-le-pourquoi-1">Explication — comprendre le pourquoi</a></h2> | |
| 759 | +<p>Les explanations construisent les modèles mentaux nécessaires pour prendre de bonnes décisions d’exploitation. Lisez-les quand vous voulez comprendre les choix d’architecture, pas seulement les appliquer.</p> | |
| 760 | +<ul> | |
| 761 | +<li><a href="#architecture-globale">Architecture globale de gitrust</a></li> | |
| 762 | +<li><a href="#modèle-de-déploiement">Modèle de déploiement : mono-machine vs HA</a></li> | |
| 763 | +<li><a href="#ci-dagger--easy-mode-vs-power-mode">CI Dagger : pourquoi et comment</a></li> | |
| 764 | +<li><a href="#stratégie-de-sauvegarde">Stratégie de sauvegarde 3-2-1 adaptée gitrust</a></li> | |
| 765 | +</ul> | |
| 766 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 767 | +<h1 id="tutoriels-1"><a class="header" href="#tutoriels-1">Tutoriels</a></h1> | |
| 768 | +<blockquote> | |
| 769 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 770 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 771 | +</blockquote> | |
| 772 | +<h2 id="todo-24"><a class="header" href="#todo-24">TODO</a></h2> | |
| 773 | +<ul> | |
| 774 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 775 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 776 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 777 | +</ul> | |
| 778 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 779 | +<h1 id="installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose"><a class="header" href="#installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose">Installation Docker : démarrez gitrust en 30 minutes avec docker-compose</a></h1> | |
| 780 | +<h2 id="objectifs-1"><a class="header" href="#objectifs-1">Objectifs</a></h2> | |
| 781 | +<p>À la fin de ce tutoriel, vous saurez :</p> | |
| 782 | +<ul> | |
| 783 | +<li><strong>O1. Déployer</strong> la stack gitrust minimale (application + PostgreSQL) avec docker-compose</li> | |
| 784 | +<li><strong>O2. Vérifier</strong> que les trois services démarrent correctement et sont en bonne santé</li> | |
| 785 | +<li><strong>O3. Créer</strong> le premier compte administrateur et accéder à l’interface web</li> | |
| 786 | +</ul> | |
| 787 | +<h2 id="pré-requis-1"><a class="header" href="#pré-requis-1">Pré-requis</a></h2> | |
| 788 | +<ul> | |
| 789 | +<li><strong>Technique</strong> : une VM ou machine Linux (Debian 12 / Ubuntu 22.04 ou supérieur), Docker Engine ≥ 24 installé (<code>docker --version</code> répond), Docker Compose plugin installé (<code>docker compose version</code> répond), ports 4000 et 2222 libres sur la machine</li> | |
| 790 | +<li><strong>Pédagogique</strong> : aucun tutoriel gitrust préalable requis — c’est le point de départ du parcours administrateur</li> | |
| 791 | +<li><strong>Temps estimé</strong> : ~30 minutes</li> | |
| 792 | +</ul> | |
| 793 | +<h2 id="vue-densemble-1"><a class="header" href="#vue-densemble-1">Vue d’ensemble</a></h2> | |
| 794 | +<p>Avant de lancer la moindre commande, comprenons ce que docker-compose va orchestrer et pourquoi.</p> | |
| 795 | +<p>gitrust est composé de <strong>trois services principaux</strong> dans sa configuration minimale. Pensez-y comme trois pièces d’un appartement qui s’appellent entre elles via un réseau interne :</p> | |
| 796 | +<pre class="mermaid">graph TB | |
| 797 | + subgraph internet ["Internet / votre navigateur"] | |
| 798 | + B[Navigateur :4000] | |
| 799 | + S[Client git/SSH :2222] | |
| 800 | + end | |
| 801 | + | |
| 802 | + subgraph docker ["Réseau Docker gitrust_net"] | |
| 803 | + A["gitrust-app<br/>(Rust, port 4000 + 2222)<br/>Lit la config depuis .env"] | |
| 804 | + P["postgres<br/>(PostgreSQL 16, port 5432)<br/>Stocke comptes, dépôts, issues"] | |
| 805 | + R["redis (optionnel)<br/>(Redis 7, port 6379)<br/>Sessions web + cache"] | |
| 806 | + end | |
| 807 | + | |
| 808 | + B -->|HTTP| A | |
| 809 | + S -->|SSH| A | |
| 810 | + A -->|SQL| P | |
| 811 | + A -.->|sessions| R | |
| 812 | +</pre> | |
| 813 | + | |
| 814 | +<p><strong>gitrust-app</strong> est le cœur : serveur HTTP (<code>:4000</code>) + serveur SSH (<code>:2222</code>) compilé en Rust. Il lit sa configuration depuis un fichier <code>.env</code> et écrit les dépôts Git bare sur un volume Docker. <strong>PostgreSQL</strong> stocke toutes les données relationnelles (comptes, organisations, dépôts, issues, PRs). <strong>Redis</strong> est optionnel dans la configuration minimale — il gère les sessions web et le cache quand il est présent.</p> | |
| 815 | +<p>Dans ce tutoriel, nous utilisons la stack <strong>minimale</strong> (app + PostgreSQL) suffisante pour évaluer gitrust et démarrer une petite instance. La stack production avec Redis et SMTP se trouve dans <a href="template/docker/docker-compose.production.yml"><code>template/docker/docker-compose.production.yml</code></a>.</p> | |
| 816 | +<hr> | |
| 817 | +<h2 id="étape-1--créez-le-répertoire-de-travail-et-le-fichier-de-configuration"><a class="header" href="#étape-1--créez-le-répertoire-de-travail-et-le-fichier-de-configuration">Étape 1 : Créez le répertoire de travail et le fichier de configuration</a></h2> | |
| 818 | +<p>Créez un répertoire dédié à votre instance gitrust et positionnez-vous dedans :</p> | |
| 819 | +<pre><code class="language-bash">mkdir -p /opt/gitrust && cd /opt/gitrust | |
| 820 | +</code></pre> | |
| 821 | +<p>Créez le fichier de configuration <code>.env</code> avec les valeurs minimales. <strong>Changez impérativement</strong> les valeurs marquées <code>CHANGE_ME</code> :</p> | |
| 822 | +<pre><code class="language-bash">cat > .env << 'EOF' | |
| 823 | +# === gitrust — configuration minimale === | |
| 824 | +# Changez toutes les valeurs CHANGE_ME avant de démarrer | |
| 825 | + | |
| 826 | +# Clé secrète de l'application (générez avec : openssl rand -hex 32) | |
| 827 | +SECRET_KEY=CHANGE_ME_openssl_rand_hex_32 | |
| 828 | + | |
| 829 | +# URL publique de l'instance (sans slash final) | |
| 830 | +APP_URL=http://localhost:4000 | |
| 831 | + | |
| 832 | +# Base de données PostgreSQL | |
| 833 | +DATABASE_URL=postgres://gitrust:CHANGE_ME_db_password@postgres:5432/gitrust | |
| 834 | +POSTGRES_USER=gitrust | |
| 835 | +POSTGRES_PASSWORD=CHANGE_ME_db_password | |
| 836 | +POSTGRES_DB=gitrust | |
| 837 | + | |
| 838 | +# Serveur SSH (port exposé à l'extérieur) | |
| 839 | +SSH_PORT=2222 | |
| 840 | + | |
| 841 | +# Mode de l'application | |
| 842 | +RUST_LOG=info | |
| 843 | +APP_ENV=production | |
| 844 | +EOF | |
| 845 | +</code></pre> | |
| 846 | +<p>Générez maintenant une clé secrète robuste et remplacez la valeur dans <code>.env</code> :</p> | |
| 847 | +<pre><code class="language-bash">SECRET=$(openssl rand -hex 32) | |
| 848 | +sed -i "s/CHANGE_ME_openssl_rand_hex_32/$SECRET/" .env | |
| 849 | +</code></pre> | |
| 850 | +<p>Choisissez également un mot de passe pour PostgreSQL et remplacez les deux occurrences :</p> | |
| 851 | +<pre><code class="language-bash">DB_PASS=$(openssl rand -hex 16) | |
| 852 | +sed -i "s/CHANGE_ME_db_password/$DB_PASS/g" .env | |
| 853 | +</code></pre> | |
| 854 | +<p>Sortie attendue (vérification) :</p> | |
| 855 | +<pre><code class="language-bash">grep SECRET_KEY .env | |
| 856 | +# → SECRET_KEY=4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a | |
| 857 | +</code></pre> | |
| 858 | +<p><strong>Checkpoint</strong> : exécutez <code>grep CHANGE_ME .env</code> — la commande doit ne rien retourner. Si elle retourne des lignes, ces valeurs n’ont pas été remplacées et le démarrage échouera.</p> | |
| 859 | +<hr> | |
| 860 | +<h2 id="étape-2--créez-le-fichier-docker-composeyml"><a class="header" href="#étape-2--créez-le-fichier-docker-composeyml">Étape 2 : Créez le fichier docker-compose.yml</a></h2> | |
| 861 | +<p>Créez le fichier <code>docker-compose.yml</code> suivant dans <code>/opt/gitrust/</code>. Ce contenu correspond à la stack minimale gitrust — il est reproduit ici intégralement pour que vous puissiez démarrer sans dépendance externe :</p> | |
| 862 | +<pre><code class="language-bash">cat > docker-compose.yml << 'EOF' | |
| 863 | +# docker-compose.minimal.yml — Stack gitrust minimale (app + PostgreSQL) | |
| 864 | +# Cas d'usage : évaluation, développement, petite instance (<10 utilisateurs) | |
| 865 | +# Pour la production : utilisez docker-compose.production.yml (+ Redis + SMTP) | |
| 866 | +# | |
| 867 | +# Usage : | |
| 868 | +# docker compose up -d | |
| 869 | +# docker compose logs -f gitrust | |
| 870 | +# docker compose down | |
| 871 | + | |
| 872 | +version: "3.9" | |
| 873 | + | |
| 874 | +services: | |
| 875 | + # ── Base de données ─────────────────────────────────────────────────────── | |
| 876 | + postgres: | |
| 877 | + image: postgres:16-alpine | |
| 878 | + container_name: gitrust_postgres | |
| 879 | + restart: unless-stopped | |
| 880 | + environment: | |
| 881 | + POSTGRES_USER: ${POSTGRES_USER} | |
| 882 | + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} | |
| 883 | + POSTGRES_DB: ${POSTGRES_DB} | |
| 884 | + volumes: | |
| 885 | + # Données persistantes — ne supprimez pas ce volume sans sauvegarde | |
| 886 | + - postgres_data:/var/lib/postgresql/data | |
| 887 | + healthcheck: | |
| 888 | + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] | |
| 889 | + interval: 10s | |
| 890 | + timeout: 5s | |
| 891 | + retries: 5 | |
| 892 | + networks: | |
| 893 | + - gitrust_net | |
| 894 | + | |
| 895 | + # ── Application gitrust ─────────────────────────────────────────────────── | |
| 896 | + gitrust: | |
| 897 | + image: ghcr.io/gitrust/gitrust:latest | |
| 898 | + container_name: gitrust_app | |
| 899 | + restart: unless-stopped | |
| 900 | + depends_on: | |
| 901 | + postgres: | |
| 902 | + condition: service_healthy | |
| 903 | + env_file: | |
| 904 | + # Lit toutes les variables depuis .env — ne commitez jamais ce fichier | |
| 905 | + - .env | |
| 906 | + ports: | |
| 907 | + # Interface web — exposée sur toutes les interfaces de la machine hôte | |
| 908 | + - "4000:4000" | |
| 909 | + # Serveur SSH Git — exposé sur le port configuré dans .env | |
| 910 | + - "${SSH_PORT:-2222}:2222" | |
| 911 | + volumes: | |
| 912 | + # Dépôts Git bare — données critiques, sauvegardez ce volume | |
| 913 | + - git_repos:/var/lib/gitrust/repositories | |
| 914 | + # Clés SSH du serveur — générées au premier démarrage, persistez-les | |
| 915 | + - ssh_host_keys:/etc/gitrust/ssh | |
| 916 | + healthcheck: | |
| 917 | + test: ["CMD", "curl", "-f", "http://localhost:4000/health"] | |
| 918 | + interval: 30s | |
| 919 | + timeout: 10s | |
| 920 | + retries: 3 | |
| 921 | + start_period: 30s | |
| 922 | + networks: | |
| 923 | + - gitrust_net | |
| 924 | + | |
| 925 | +volumes: | |
| 926 | + # postgres_data : données relationnelles (comptes, dépôts, issues, PRs) | |
| 927 | + postgres_data: | |
| 928 | + # git_repos : dépôts Git bare (le contenu réel des commits) | |
| 929 | + git_repos: | |
| 930 | + # ssh_host_keys : clés SSH hôte (fingerprint de votre serveur) | |
| 931 | + ssh_host_keys: | |
| 932 | + | |
| 933 | +networks: | |
| 934 | + gitrust_net: | |
| 935 | + driver: bridge | |
| 936 | +EOF | |
| 937 | +</code></pre> | |
| 938 | +<p><strong>Checkpoint</strong> : vérifiez que les deux fichiers sont présents dans <code>/opt/gitrust/</code> :</p> | |
| 939 | +<pre><code class="language-bash">ls -la /opt/gitrust/ | |
| 940 | +</code></pre> | |
| 941 | +<p>Sortie attendue :</p> | |
| 942 | +<pre><code>total 16 | |
| 943 | +drwxr-xr-x 2 root root 4096 avr 17 10:00 . | |
| 944 | +drwxr-xr-x 8 root root 4096 avr 17 09:55 .. | |
| 945 | +-rw------- 1 root root 612 avr 17 10:00 .env | |
| 946 | +-rw-r--r-- 1 root root 2048 avr 17 10:00 docker-compose.yml | |
| 947 | +</code></pre> | |
| 948 | +<hr> | |
| 949 | +<h2 id="étape-3--démarrez-la-stack-et-suivez-les-logs"><a class="header" href="#étape-3--démarrez-la-stack-et-suivez-les-logs">Étape 3 : Démarrez la stack et suivez les logs</a></h2> | |
| 950 | +<p>Démarrez tous les services en arrière-plan :</p> | |
| 951 | +<pre><code class="language-bash">docker compose up -d | |
| 952 | +</code></pre> | |
| 953 | +<p>Sortie attendue :</p> | |
| 954 | +<pre><code>[+] Running 4/4 | |
| 955 | + ✔ Network gitrust_gitrust_net Created 0.1s | |
| 956 | + ✔ Volume "gitrust_postgres_data" Created 0.0s | |
| 957 | + ✔ Container gitrust_postgres Started 0.8s | |
| 958 | + ✔ Container gitrust_app Started 1.2s | |
| 959 | +</code></pre> | |
| 960 | +<p>Suivez les logs de l’application pour observer le démarrage (les migrations s’exécutent automatiquement) :</p> | |
| 961 | +<pre><code class="language-bash">docker compose logs -f gitrust | |
| 962 | +</code></pre> | |
| 963 | +<p>Sortie attendue (les 15-20 premières secondes) :</p> | |
| 964 | +<pre><code>gitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Starting gitrust v0.9.0 | |
| 965 | +gitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Connecting to database... | |
| 966 | +gitrust_app | 2026-04-17T10:00:16Z INFO gitrust > Running database migrations... | |
| 967 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Applied 42 migrations successfully | |
| 968 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Generating SSH host keys... | |
| 969 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH host key fingerprint: SHA256:xxxxxxxxxxxxxxxxxxxx | |
| 970 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > HTTP server listening on 0.0.0.0:4000 | |
| 971 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH server listening on 0.0.0.0:2222 | |
| 972 | +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > gitrust is ready | |
| 973 | +</code></pre> | |
| 974 | +<p>Appuyez sur <strong>Ctrl+C</strong> pour quitter le suivi des logs (les containers continuent de tourner).</p> | |
| 975 | +<p><strong>Checkpoint</strong> : vérifiez l’état de santé des services :</p> | |
| 976 | +<pre><code class="language-bash">docker compose ps | |
| 977 | +</code></pre> | |
| 978 | +<p>Sortie attendue :</p> | |
| 979 | +<pre><code>NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS | |
| 980 | +gitrust_app ghcr.io/gitrust/gitrust:latest "/usr/local/bin/gitr…" gitrust 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:4000->4000/tcp, 0.0.0.0:2222->2222/tcp | |
| 981 | +gitrust_postgres postgres:16-alpine "docker-entrypoint.s…" postgres 2 minutes ago Up 2 minutes (healthy) 5432/tcp | |
| 982 | +</code></pre> | |
| 983 | +<p>Les deux containers doivent afficher <code>(healthy)</code>. Si l’un affiche <code>(starting)</code>, attendez 30 secondes et relancez la commande. S’il affiche <code>(unhealthy)</code>, consultez les logs avec <code>docker compose logs gitrust</code> ou <code>docker compose logs postgres</code>.</p> | |
| 984 | +<hr> | |
| 985 | +<h2 id="étape-4--créez-le-premier-compte-administrateur"><a class="header" href="#étape-4--créez-le-premier-compte-administrateur">Étape 4 : Créez le premier compte administrateur</a></h2> | |
| 986 | +<p>Ouvrez votre navigateur et rendez-vous sur <code>http://localhost:4000</code>.</p> | |
| 987 | +<p>Vous devriez voir la page d’accueil gitrust avec un formulaire d’inscription. Comme l’instance est vierge, <strong>le premier compte créé devient automatiquement administrateur</strong>.</p> | |
| 988 | +<p>Remplissez le formulaire :</p> | |
| 989 | +<ul> | |
| 990 | +<li><strong>Pseudo</strong> : votre identifiant administrateur (ex. <code>admin</code>)</li> | |
| 991 | +<li><strong>E-mail</strong> : votre adresse e-mail</li> | |
| 992 | +<li><strong>Mot de passe</strong> : choisissez un mot de passe robuste (≥ 12 caractères)</li> | |
| 993 | +</ul> | |
| 994 | +<p>Cliquez sur <strong>Créer mon compte</strong>.</p> | |
| 995 | +<p>Sortie attendue dans les logs (visible avec <code>docker compose logs -f gitrust</code>) :</p> | |
| 996 | +<pre><code>gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::auth > New user registered: admin (id=1) | |
| 997 | +gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::admin > First user promoted to administrator: admin | |
| 998 | +</code></pre> | |
| 999 | +<p><strong>Checkpoint final</strong> : connectez-vous avec vos identifiants. Après la connexion, vérifiez que le menu en haut à droite affiche un lien <strong>Administration</strong> (ou naviguez vers <code>http://localhost:4000/admin</code>). Cette page n’est accessible qu’aux administrateurs — sa présence confirme que votre compte a bien le rôle admin.</p> | |
| 1000 | +<p>L’URL de votre instance est <code>http://localhost:4000</code> et votre compte administrateur est opérationnel.</p> | |
| 1001 | +<hr> | |
| 1002 | +<h2 id="récapitulatif-1"><a class="header" href="#récapitulatif-1">Récapitulatif</a></h2> | |
| 1003 | +<ul> | |
| 1004 | +<li>✓ <strong>O1 accompli</strong> : la stack docker-compose est déployée — <code>docker compose ps</code> affiche deux containers <code>(healthy)</code></li> | |
| 1005 | +<li>✓ <strong>O2 accompli</strong> : les trois services (app, PostgreSQL, réseau interne) démarrent correctement — les logs montrent « gitrust is ready » et les migrations sont appliquées</li> | |
| 1006 | +<li>✓ <strong>O3 accompli</strong> : le premier compte administrateur est créé et la page <code>/admin</code> est accessible</li> | |
| 1007 | +</ul> | |
| 1008 | +<hr> | |
| 1009 | +<h2 id="et-si-ça-ne-marche-pas-1"><a class="header" href="#et-si-ça-ne-marche-pas-1">Et si ça ne marche pas</a></h2> | |
| 1010 | +<div class="table-wrapper"> | |
| 1011 | +<table> | |
| 1012 | +<thead> | |
| 1013 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr> | |
| 1014 | +</thead> | |
| 1015 | +<tbody> | |
| 1016 | +<tr><td><code>Error: port 4000 is already in use</code> au démarrage</td><td>Un autre service occupe le port 4000 sur la machine hôte</td><td>Identifiez le service avec <code>ss -tlnp | grep 4000</code> ou <code>lsof -i :4000</code>. Arrêtez-le ou changez le port dans <code>docker-compose.yml</code> : remplacez <code>"4000:4000"</code> par <code>"4001:4000"</code> et accédez sur <code>:4001</code></td></tr> | |
| 1017 | +<tr><td>Le container <code>gitrust_app</code> affiche <code>(unhealthy)</code> ou redémarre en boucle</td><td>La variable <code>DATABASE_URL</code> est incorrecte ou <code>SECRET_KEY</code> contient des caractères spéciaux non échappés</td><td>Vérifiez avec <code>docker compose logs gitrust | grep ERROR</code>. Assurez-vous que <code>SECRET_KEY</code> est bien une chaîne hexadécimale sans guillemets. Rechargez avec <code>docker compose down && docker compose up -d</code></td></tr> | |
| 1018 | +<tr><td>La page <code>http://localhost:4000</code> affiche « Connection refused »</td><td>Le container n’est pas encore en <code>(healthy)</code> ou le port n’est pas exposé</td><td>Attendez 30 secondes et rechargez. Si le problème persiste, vérifiez que votre pare-feu local (<code>ufw status</code>) autorise le port 4000</td></tr> | |
| 1019 | +<tr><td><code>FATAL: password authentication failed for user "gitrust"</code> dans les logs postgres</td><td>Le mot de passe dans <code>DATABASE_URL</code> ne correspond pas à <code>POSTGRES_PASSWORD</code></td><td>Supprimez le volume PostgreSQL (<code>docker compose down -v</code>) et relancez — <strong>attention : supprime toutes les données</strong></td></tr> | |
| 1020 | +</tbody> | |
| 1021 | +</table> | |
| 1022 | +</div> | |
| 1023 | +<hr> | |
| 1024 | +<h2 id="prochaine-étape-1"><a class="header" href="#prochaine-étape-1">Prochaine étape</a></h2> | |
| 1025 | +<p>→ <a href="#02--installation-avec-systemd">02 — Installation systemd : binaire natif + service</a> : découvrez l’installation sans Docker pour un déploiement production avec hardening AppArmor (~45 min)</p> | |
| 1026 | +<p>Ou si vous souhaitez rendre cette instance accessible depuis Internet :</p> | |
| 1027 | +<p>→ <a href="#mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt">04 — Mise en production</a> : reverse-proxy TLS, SMTP, sauvegarde automatique (~90 min)</p> | |
| 1028 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 1029 | +<h1 id="02--installation-avec-systemd"><a class="header" href="#02--installation-avec-systemd">02 — Installation avec systemd</a></h1> | |
| 1030 | +<blockquote> | |
| 1031 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 1032 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 1033 | +</blockquote> | |
| 1034 | +<h2 id="todo-25"><a class="header" href="#todo-25">TODO</a></h2> | |
| 1035 | +<ul> | |
| 1036 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 1037 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 1038 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 1039 | +</ul> | |
| 1040 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 1041 | +<h1 id="03--premier-démarrage"><a class="header" href="#03--premier-démarrage">03 — Premier démarrage</a></h1> | |
| 1042 | +<blockquote> | |
| 1043 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 1044 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 1045 | +</blockquote> | |
| 1046 | +<h2 id="todo-26"><a class="header" href="#todo-26">TODO</a></h2> | |
| 1047 | +<ul> | |
| 1048 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 1049 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 1050 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 1051 | +</ul> | |
| 1052 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 1053 | +<h1 id="mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt"><a class="header" href="#mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt">Mise en production sur une machine Linux avec HTTPS Let’s Encrypt</a></h1> | |
| 1054 | +<h2 id="contexte"><a class="header" href="#contexte">Contexte</a></h2> | |
| 1055 | +<p>Procédure de référence pour déployer une instance gitrust sur une machine Linux à IP fixe, avec patte externe routée et HTTPS via Let’s Encrypt. Reproductible et testée en conditions réelles.</p> | |
| 1056 | +<p>Adaptez les valeurs suivantes à votre environnement :</p> | |
| 1057 | +<div class="table-wrapper"> | |
| 1058 | +<table> | |
| 1059 | +<thead> | |
| 1060 | +<tr><th>Placeholder</th><th>Remplacez par</th></tr> | |
| 1061 | +</thead> | |
| 1062 | +<tbody> | |
| 1063 | +<tr><td><code><your-server-ip></code></td><td>L’IP fixe de votre serveur (ex: <code>192.168.1.57</code> sur un LAN, ou une IP publique)</td></tr> | |
| 1064 | +<tr><td><code><your-domain></code></td><td>Votre FQDN principal (ex: <code>gitrust.example.com</code>)</td></tr> | |
| 1065 | +<tr><td><code><acme-email></code></td><td>L’email pour Let’s Encrypt (ex: <code>contact@example.com</code>)</td></tr> | |
| 1066 | +<tr><td><code><admin-user></code></td><td>L’utilisateur SSH admin sur le serveur cible</td></tr> | |
| 1067 | +</tbody> | |
| 1068 | +</table> | |
| 1069 | +</div> | |
| 1070 | +<h3 id="les-trois-services-gitrust"><a class="header" href="#les-trois-services-gitrust">Les trois services gitrust</a></h3> | |
| 1071 | +<div class="table-wrapper"> | |
| 1072 | +<table> | |
| 1073 | +<thead> | |
| 1074 | +<tr><th>#</th><th>Service</th><th>Bind interne</th><th>Exposition publique</th><th>Variable</th></tr> | |
| 1075 | +</thead> | |
| 1076 | +<tbody> | |
| 1077 | +<tr><td>1</td><td>Web HTTP (UI SSR + API)</td><td><code>127.0.0.1:4000</code></td><td><code>:443</code> HTTPS via Nginx</td><td><code>SERVER_PORT</code></td></tr> | |
| 1078 | +<tr><td>2</td><td>SSH Git (russh)</td><td><code>127.0.0.1:2222</code></td><td><code>:22</code> via Nginx stream</td><td><code>SSH_PORT</code></td></tr> | |
| 1079 | +<tr><td>3</td><td>Worker CI/CD (Dagger)</td><td>tâche Tokio in-process</td><td>— (déclenché par push)</td><td><code>CI_ENABLED</code></td></tr> | |
| 1080 | +</tbody> | |
| 1081 | +</table> | |
| 1082 | +</div> | |
| 1083 | +<p>PostgreSQL = dépendance, conteneur Docker bind loopback <code>127.0.0.1:5432</code>.</p> | |
| 1084 | +<h3 id="topologie-réseau"><a class="header" href="#topologie-réseau">Topologie réseau</a></h3> | |
| 1085 | +<pre><code>Internet | |
| 1086 | + | | |
| 1087 | + v | |
| 1088 | +<your-server-ip> (patte externe) | |
| 1089 | + | | |
| 1090 | + +-- :22 Nginx stream --> 127.0.0.1:2222 (gitrust SSH) | |
| 1091 | + +-- :80 Nginx HTTP --> 301 HTTPS (sauf /.well-known/acme-challenge) | |
| 1092 | + +-- :443 Nginx HTTPS --> 127.0.0.1:4000 (gitrust HTTP) | |
| 1093 | + +-- :2022 sshd système (accès admin, déplacé depuis :22) | |
| 1094 | + | |
| 1095 | + Loopback uniquement : | |
| 1096 | + +-- 127.0.0.1:4000 gitrust web | |
| 1097 | + +-- 127.0.0.1:2222 gitrust SSH | |
| 1098 | + +-- 127.0.0.1:5432 postgres docker | |
| 1099 | +</code></pre> | |
| 1100 | +<h3 id="risque-critique--ordre-dexécution"><a class="header" href="#risque-critique--ordre-dexécution">Risque critique — ordre d’exécution</a></h3> | |
| 1101 | +<p>Le déplacement de <code>sshd</code> système de <code>:22</code> vers <code>:2022</code> <strong>doit</strong> être fait avant la configuration <code>nginx stream</code>, et <strong>doit</strong> être validé depuis une <strong>deuxième session SSH</strong> avant fermeture de la première. Sinon : lockout total (besoin d’accès console physique).</p> | |
| 1102 | +<hr> | |
| 1103 | +<h2 id="pré-requis-2"><a class="header" href="#pré-requis-2">Pré-requis</a></h2> | |
| 1104 | +<h3 id="poste-de-build-machine-locale-avec-le-code-source"><a class="header" href="#poste-de-build-machine-locale-avec-le-code-source">Poste de build (machine locale avec le code source)</a></h3> | |
| 1105 | +<pre><code class="language-bash">rustup show && command -v rsync envsubst npx | |
| 1106 | +# Installer si besoin : sudo apt install rsync gettext-base | |
| 1107 | +</code></pre> | |
| 1108 | +<h3 id="cible-your-server-ip"><a class="header" href="#cible-your-server-ip">Cible <code><your-server-ip></code></a></h3> | |
| 1109 | +<ul> | |
| 1110 | +<li>Debian/Ubuntu récent</li> | |
| 1111 | +<li>Accès SSH avec <code>sudo</code></li> | |
| 1112 | +<li>Docker + plugin compose (<code>docker compose version</code>)</li> | |
| 1113 | +<li>Snap ou apt pour <code>certbot</code> + plugin nginx</li> | |
| 1114 | +<li>DNS <code><your-domain></code> → IP publique de la patte externe (vérifier <code>dig +short <your-domain></code>)</li> | |
| 1115 | +<li>Module <code>stream</code> Nginx disponible (paquet <code>libnginx-mod-stream</code> sur Debian)</li> | |
| 1116 | +</ul> | |
| 1117 | +<hr> | |
| 1118 | +<h2 id="phase-0--générer-envproduction-poste-de-build-une-seule-fois"><a class="header" href="#phase-0--générer-envproduction-poste-de-build-une-seule-fois">Phase 0 — Générer <code>.env.production</code> (poste de build, une seule fois)</a></h2> | |
| 1119 | +<pre><code class="language-bash">JWT=$(openssl rand -hex 64) | |
| 1120 | +ADMIN_PWD=$(openssl rand -base64 24) | |
| 1121 | +PG_PWD=$(openssl rand -base64 24) | |
| 1122 | + | |
| 1123 | +cat > .env.production <<EOF | |
| 1124 | +# ---- Base de données ---- | |
| 1125 | +DATABASE_URL=postgres://gitrust:${PG_PWD}@127.0.0.1:5432/gitrust | |
| 1126 | + | |
| 1127 | +# ---- Serveur HTTP (derrière Nginx HTTPS) ---- | |
| 1128 | +SERVER_HOST=127.0.0.1 | |
| 1129 | +SERVER_PORT=4000 | |
| 1130 | + | |
| 1131 | +# ---- Serveur SSH (derrière nginx stream :22) ---- | |
| 1132 | +SSH_PORT=2222 | |
| 1133 | +SSH_LISTEN_ADDR=127.0.0.1 | |
| 1134 | +SSH_PUBLIC_HOST=<your-domain> | |
| 1135 | +SSH_HOST_KEY_PATH=/opt/gitrust/data/ssh_host_ed25519_key | |
| 1136 | + | |
| 1137 | +# ---- Chemins (réécrits par deploy.sh) ---- | |
| 1138 | +GIT_REPOS_BASE_PATH=/opt/gitrust/data/repos | |
| 1139 | +STATIC_FILES_PATH=/opt/gitrust/static | |
| 1140 | + | |
| 1141 | +# ---- Sécurité — HTTPS actif ---- | |
| 1142 | +JWT_SECRET=${JWT} | |
| 1143 | +JWT_EXPIRATION_MINUTES=15 | |
| 1144 | +REFRESH_TOKEN_EXPIRATION_DAYS=7 | |
| 1145 | +COOKIE_SECURE=true # HTTPS via Nginx | |
| 1146 | +COOKIE_SAME_SITE=Lax | |
| 1147 | +APP_DEBUG=false | |
| 1148 | +RUST_LOG=info | |
| 1149 | + | |
| 1150 | +# ---- Admin initial ---- | |
| 1151 | +ADMIN_USERNAME=admin | |
| 1152 | +ADMIN_EMAIL=<acme-email> | |
| 1153 | +ADMIN_PASSWORD=${ADMIN_PWD} | |
| 1154 | + | |
| 1155 | +# ---- Inscription & UI ---- | |
| 1156 | +ALLOW_REGISTRATION=false | |
| 1157 | +APP_NAME=Gitrust | |
| 1158 | +DEFAULT_LOCALE=fr | |
| 1159 | + | |
| 1160 | +# ---- Email ---- | |
| 1161 | +EMAIL_VALIDATION_REQUIRED=false | |
| 1162 | +EMAIL_BASE_URL=https://<your-domain> | |
| 1163 | + | |
| 1164 | +# ---- CI/CD Dagger (worker 3) ---- | |
| 1165 | +CI_ENABLED=true | |
| 1166 | +CI_MAX_CONCURRENT=4 | |
| 1167 | +CI_DEFAULT_TIMEOUT=3600 | |
| 1168 | +CI_WORKSPACE_PATH=/tmp/gitrust-ci | |
| 1169 | +CI_REMOTE_HOST=localhost | |
| 1170 | + | |
| 1171 | +# ---- Worker import ---- | |
| 1172 | +IMPORT_MAX_CONCURRENT=2 | |
| 1173 | +IMPORT_TIMEOUT_SECS=1800 | |
| 1174 | +DB_WORKER_POOL_SIZE=4 | |
| 1175 | +EOF | |
| 1176 | + | |
| 1177 | +chmod 600 .env.production | |
| 1178 | +echo "ADMIN_PASSWORD = ${ADMIN_PWD}" | |
| 1179 | +echo "POSTGRES_PASSWORD = ${PG_PWD}" | |
| 1180 | +</code></pre> | |
| 1181 | +<blockquote> | |
| 1182 | +<p><strong>Critique</strong> : noter <code>ADMIN_PASSWORD</code> et <code>POSTGRES_PASSWORD</code> dans un gestionnaire de mots de passe.</p> | |
| 1183 | +</blockquote> | |
| 1184 | +<hr> | |
| 1185 | +<h2 id="phase-1--préparer-la-cible--déplacer-sshd-système-sur-2022"><a class="header" href="#phase-1--préparer-la-cible--déplacer-sshd-système-sur-2022">Phase 1 — Préparer la cible : déplacer sshd système sur :2022</a></h2> | |
| 1186 | +<p><strong>À faire en gardant deux sessions SSH simultanées</strong>.</p> | |
| 1187 | +<h3 id="1pre-diagnostic-de-létat-initial"><a class="header" href="#1pre-diagnostic-de-létat-initial">1.pre. Diagnostic de l’état initial</a></h3> | |
| 1188 | +<h4 id="1pre1--trouver-le-port-ssh-ouvert-depuis-le-poste-de-build"><a class="header" href="#1pre1--trouver-le-port-ssh-ouvert-depuis-le-poste-de-build">1.pre.1 — Trouver le port SSH ouvert depuis le poste de build</a></h4> | |
| 1189 | +<pre><code class="language-bash"># Depuis votre poste (sans être connecté) : | |
| 1190 | +for p in 22 2022 2222 2200 22022; do | |
| 1191 | + timeout 3 bash -c "echo >/dev/tcp/<your-server-ip>/$p" 2>/dev/null \ | |
| 1192 | + && echo "Port $p : OUVERT" \ | |
| 1193 | + || echo "Port $p : fermé/filtré" | |
| 1194 | +done | |
| 1195 | +</code></pre> | |
| 1196 | +<h4 id="1pre2--se-connecter-sur-le-port-détecté"><a class="header" href="#1pre2--se-connecter-sur-le-port-détecté">1.pre.2 — Se connecter sur le port détecté</a></h4> | |
| 1197 | +<pre><code class="language-bash"># Cas le plus probable : sshd est sur :22 par défaut | |
| 1198 | +ssh <admin-user>@<your-server-ip> | |
| 1199 | +</code></pre> | |
| 1200 | +<h4 id="1pre3--une-fois-connecté-vérifier-létat-sshd-actuel"><a class="header" href="#1pre3--une-fois-connecté-vérifier-létat-sshd-actuel">1.pre.3 — Une fois connecté, vérifier l’état sshd actuel</a></h4> | |
| 1201 | +<pre><code class="language-bash"># Sur quel(s) port(s) sshd écoute-t-il ? | |
| 1202 | +sudo ss -tlnp | grep sshd | |
| 1203 | + | |
| 1204 | +# Contenu de la config | |
| 1205 | +sudo grep -riE '^[[:space:]]*Port[[:space:]]+[0-9]+' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2>/dev/null | |
| 1206 | + | |
| 1207 | +# Statut du service | |
| 1208 | +sudo systemctl status ssh --no-pager | |
| 1209 | +</code></pre> | |
| 1210 | +<h3 id="1a-session-1--modifier-la-config-sshd"><a class="header" href="#1a-session-1--modifier-la-config-sshd">1a. Session 1 : modifier la config sshd</a></h3> | |
| 1211 | +<pre><code class="language-bash">ssh <admin-user>@<your-server-ip> | |
| 1212 | + | |
| 1213 | +# Éditer /etc/ssh/sshd_config | |
| 1214 | +sudo tee /etc/ssh/sshd_config.d/99-gitrust.conf <<'EOF' | |
| 1215 | +Port 2022 | |
| 1216 | +EOF | |
| 1217 | + | |
| 1218 | +# Vérifier la syntaxe | |
| 1219 | +sudo sshd -t | |
| 1220 | + | |
| 1221 | +# Si OK, reload (ne déconnecte pas la session courante) | |
| 1222 | +sudo systemctl reload ssh | |
| 1223 | +sudo ss -tlnp | grep -E ':22\b|:2022\b' | |
| 1224 | +# Attendu : sshd écoute sur 22 ET 2022 | |
| 1225 | +</code></pre> | |
| 1226 | +<h3 id="1b-session-2--valider-le-nouveau-port"><a class="header" href="#1b-session-2--valider-le-nouveau-port">1b. Session 2 : valider le nouveau port</a></h3> | |
| 1227 | +<p>Depuis le poste de build, <strong>dans un autre terminal</strong> :</p> | |
| 1228 | +<pre><code class="language-bash">ssh -p 2022 <admin-user>@<your-server-ip> 'echo "OK port 2022"' | |
| 1229 | +# Doit afficher : OK port 2022 | |
| 1230 | +</code></pre> | |
| 1231 | +<h3 id="1c-plus-tard-après-phase-5-fermer-le-port-22-du-sshd-système"><a class="header" href="#1c-plus-tard-après-phase-5-fermer-le-port-22-du-sshd-système">1c. (Plus tard, après Phase 5) Fermer le port 22 du sshd système</a></h3> | |
| 1232 | +<p>Une fois <code>nginx stream :22</code> actif et testé :</p> | |
| 1233 | +<pre><code class="language-bash">ssh -p 2022 <admin-user>@<your-server-ip> | |
| 1234 | +sudo sed -i 's/^Port 22$/# Port 22 (déplacé vers 2022, :22 utilisé par nginx stream)/' /etc/ssh/sshd_config | |
| 1235 | +sudo systemctl restart ssh | |
| 1236 | +</code></pre> | |
| 1237 | +<h3 id="1d-firewall"><a class="header" href="#1d-firewall">1d. Firewall</a></h3> | |
| 1238 | +<pre><code class="language-bash">ssh -p 2022 <admin-user>@<your-server-ip> bash <<'EOF' | |
| 1239 | +sudo ufw allow 80/tcp comment 'HTTP ACME + redirect' | |
| 1240 | +sudo ufw allow 443/tcp comment 'HTTPS Gitrust' | |
| 1241 | +sudo ufw allow 22/tcp comment 'SSH Git via nginx stream' | |
| 1242 | +sudo ufw allow 2022/tcp comment 'SSH admin système' | |
| 1243 | +sudo ufw status numbered | |
| 1244 | +EOF | |
| 1245 | +</code></pre> | |
| 1246 | +<blockquote> | |
| 1247 | +<p>Mettre à jour <code>~/.ssh/config</code> côté poste dev :</p> | |
| 1248 | +<pre><code>Host gitrust-host | |
| 1249 | + HostName <your-server-ip> | |
| 1250 | + User <admin-user> | |
| 1251 | + Port 2022 | |
| 1252 | +</code></pre> | |
| 1253 | +<p>Le reste du plan utilise <code>ssh gitrust-host</code>.</p> | |
| 1254 | +</blockquote> | |
| 1255 | +<hr> | |
| 1256 | +<h2 id="phase-2--postgresql-docker-loopback"><a class="header" href="#phase-2--postgresql-docker-loopback">Phase 2 — PostgreSQL (Docker, loopback)</a></h2> | |
| 1257 | +<pre><code class="language-bash">scp -P 2022 database/docker-compose.yml <admin-user>@<your-server-ip>:/tmp/pg-compose.yml | |
| 1258 | + | |
| 1259 | +ssh gitrust-host bash <<EOF | |
| 1260 | +sudo mkdir -p /opt/gitrust/database | |
| 1261 | +sudo mv /tmp/pg-compose.yml /opt/gitrust/database/docker-compose.yml | |
| 1262 | +echo 'POSTGRES_PASSWORD=${PG_PWD}' | sudo tee /opt/gitrust/database/.env >/dev/null | |
| 1263 | +sudo chmod 600 /opt/gitrust/database/.env | |
| 1264 | +cd /opt/gitrust/database && sudo docker compose up -d | |
| 1265 | +sudo docker compose ps | |
| 1266 | +EOF | |
| 1267 | +</code></pre> | |
| 1268 | +<p>Remplacer <code>${PG_PWD}</code> par la valeur réelle. Vérifier que le port n’est pas exposé publiquement :</p> | |
| 1269 | +<pre><code class="language-bash">ssh gitrust-host 'sudo ss -tlnp | grep 5432' | |
| 1270 | +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0 | |
| 1271 | +</code></pre> | |
| 1272 | +<hr> | |
| 1273 | +<h2 id="phase-3--build--déploiement-gitrust-via-deploysh"><a class="header" href="#phase-3--build--déploiement-gitrust-via-deploysh">Phase 3 — Build + déploiement gitrust via <code>deploy.sh</code></a></h2> | |
| 1274 | +<h3 id="3a-préparer-deploymentdeployconf"><a class="header" href="#3a-préparer-deploymentdeployconf">3a. Préparer <code>deployment/deploy.conf</code></a></h3> | |
| 1275 | +<pre><code class="language-bash">cp deployment/deploy.conf.example deployment/deploy.conf | |
| 1276 | +# Éditer DEPLOY_TARGET=gitrust-host, DEPLOY_REMOTE_PATH=/opt/gitrust, DEPLOY_FQDN_INITIAL=<your-domain> | |
| 1277 | +$EDITOR deployment/deploy.conf | |
| 1278 | +chmod 600 deployment/deploy.conf | |
| 1279 | +</code></pre> | |
| 1280 | +<h3 id="3b-validation-du-build-seul-optionnel"><a class="header" href="#3b-validation-du-build-seul-optionnel">3b. Validation du build seul (optionnel)</a></h3> | |
| 1281 | +<pre><code class="language-bash">BUILD_ONLY=1 ./deployment/deploy.sh | |
| 1282 | +</code></pre> | |
| 1283 | +<h3 id="3c-déploiement"><a class="header" href="#3c-déploiement">3c. Déploiement</a></h3> | |
| 1284 | +<pre><code class="language-bash"># Sans argument : utilise DEPLOY_TARGET du deploy.conf (gitrust-host via ~/.ssh/config, port 2022) | |
| 1285 | +./deployment/deploy.sh | |
| 1286 | +</code></pre> | |
| 1287 | +<p>Ce que fait <code>deploy.sh</code> : <code>cargo build --release</code>, <code>tailwindcss --minify</code>, adapte <code>gitrust.service</code> + <code>.env</code>, rsync, crée user <code>gitrust</code>, installe systemd, restart.</p> | |
| 1288 | +<p>À la fin : gitrust écoute sur <code>127.0.0.1:4000</code> (HTTP) et <code>127.0.0.1:2222</code> (SSH).</p> | |
| 1289 | +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl status gitrust --no-pager && sudo ss -tlnp | grep -E "4000|2222"' | |
| 1290 | +# Attendu : 127.0.0.1:4000 et 127.0.0.1:2222 (PAS 0.0.0.0) | |
| 1291 | +</code></pre> | |
| 1292 | +<hr> | |
| 1293 | +<h2 id="phase-4--nginx-http--lets-encrypt"><a class="header" href="#phase-4--nginx-http--lets-encrypt">Phase 4 — Nginx HTTP + Let’s Encrypt</a></h2> | |
| 1294 | +<h3 id="4a-installer-nginx--certbot"><a class="header" href="#4a-installer-nginx--certbot">4a. Installer nginx + certbot</a></h3> | |
| 1295 | +<pre><code class="language-bash">ssh gitrust-host bash <<'EOF' | |
| 1296 | +sudo apt update | |
| 1297 | +sudo apt install -y nginx libnginx-mod-stream certbot python3-certbot-nginx | |
| 1298 | +sudo systemctl enable --now nginx | |
| 1299 | +EOF | |
| 1300 | +</code></pre> | |
| 1301 | +<h3 id="4b-déployer-la-conf-nginx"><a class="header" href="#4b-déployer-la-conf-nginx">4b. Déployer la conf Nginx</a></h3> | |
| 1302 | +<pre><code class="language-bash">scp -P 2022 deployment/nginx-gitrust.conf <admin-user>@<your-server-ip>:/tmp/gitrust-nginx.conf | |
| 1303 | + | |
| 1304 | +ssh gitrust-host bash <<EOF | |
| 1305 | +sudo sed -i 's/gitrust.nuage.ebii/<your-domain>/g' /tmp/gitrust-nginx.conf | |
| 1306 | +sudo mv /tmp/gitrust-nginx.conf /etc/nginx/sites-available/gitrust | |
| 1307 | +sudo ln -sf /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust | |
| 1308 | +sudo rm -f /etc/nginx/sites-enabled/default | |
| 1309 | +sudo mkdir -p /var/www/html/.well-known/acme-challenge | |
| 1310 | +sudo nginx -t && sudo systemctl reload nginx | |
| 1311 | +EOF | |
| 1312 | +</code></pre> | |
| 1313 | +<h3 id="4c-émettre-le-certificat-lets-encrypt"><a class="header" href="#4c-émettre-le-certificat-lets-encrypt">4c. Émettre le certificat Let’s Encrypt</a></h3> | |
| 1314 | +<pre><code class="language-bash">ssh gitrust-host 'sudo certbot --nginx \ | |
| 1315 | + -d <your-domain> \ | |
| 1316 | + --email <acme-email> \ | |
| 1317 | + --agree-tos \ | |
| 1318 | + --no-eff-email \ | |
| 1319 | + --redirect' | |
| 1320 | +</code></pre> | |
| 1321 | +<h3 id="4d-vérifier-le-renouvellement-automatique"><a class="header" href="#4d-vérifier-le-renouvellement-automatique">4d. Vérifier le renouvellement automatique</a></h3> | |
| 1322 | +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl list-timers | grep certbot' | |
| 1323 | +ssh gitrust-host 'sudo certbot renew --dry-run' | |
| 1324 | +</code></pre> | |
| 1325 | +<h3 id="4e-test-https"><a class="header" href="#4e-test-https">4e. Test HTTPS</a></h3> | |
| 1326 | +<pre><code class="language-bash">curl -I https://<your-domain>/ | |
| 1327 | +# Attendu : HTTP/2 200 (ou 302 vers /login) | |
| 1328 | + | |
| 1329 | +# Vérifier HSTS | |
| 1330 | +curl -sI https://<your-domain>/ | grep -i strict-transport | |
| 1331 | +</code></pre> | |
| 1332 | +<hr> | |
| 1333 | +<h2 id="phase-5--exposer-ssh-git-sur-22-via-nginx-stream"><a class="header" href="#phase-5--exposer-ssh-git-sur-22-via-nginx-stream">Phase 5 — Exposer SSH Git sur :22 via Nginx stream</a></h2> | |
| 1334 | +<h3 id="5a-ajouter-le-bloc-stream"><a class="header" href="#5a-ajouter-le-bloc-stream">5a. Ajouter le bloc stream</a></h3> | |
| 1335 | +<pre><code class="language-bash">ssh gitrust-host bash <<'EOF' | |
| 1336 | +sudo nginx -V 2>&1 | grep -o with-stream | |
| 1337 | + | |
| 1338 | +sudo tee -a /etc/nginx/nginx.conf <<'NGINX' | |
| 1339 | + | |
| 1340 | +# --- Gitrust SSH (proxy :22 -> :2222) ----------------------------------------- | |
| 1341 | +stream { | |
| 1342 | + upstream gitrust_ssh { | |
| 1343 | + server 127.0.0.1:2222; | |
| 1344 | + } | |
| 1345 | + server { | |
| 1346 | + listen 22; | |
| 1347 | + listen [::]:22; | |
| 1348 | + proxy_pass gitrust_ssh; | |
| 1349 | + proxy_timeout 1h; | |
| 1350 | + proxy_connect_timeout 30s; | |
| 1351 | + error_log /var/log/nginx/gitrust-ssh.log; | |
| 1352 | + } | |
| 1353 | +} | |
| 1354 | +NGINX | |
| 1355 | + | |
| 1356 | +sudo nginx -t && sudo systemctl restart nginx | |
| 1357 | +sudo ss -tlnp | grep -E ':22\b|:2222\b' | |
| 1358 | +# Attendu : nginx :22, gitrust :2222 (loopback) | |
| 1359 | +EOF | |
| 1360 | +</code></pre> | |
| 1361 | +<h3 id="5b-désactiver-sshd-système-sur-22-phase-1c"><a class="header" href="#5b-désactiver-sshd-système-sur-22-phase-1c">5b. Désactiver sshd système sur :22 (Phase 1c)</a></h3> | |
| 1362 | +<pre><code class="language-bash">ssh -p 2022 <admin-user>@<your-server-ip> bash <<'EOF' | |
| 1363 | +sudo sed -i 's/^Port 22$/# Port 22 déplacé/' /etc/ssh/sshd_config 2>/dev/null || true | |
| 1364 | +sudo systemctl restart ssh | |
| 1365 | +sudo ss -tlnp | grep -E ':22\b|:2022\b' | |
| 1366 | +# Attendu : nginx :22, sshd :2022 — plus de sshd:22 | |
| 1367 | +EOF | |
| 1368 | +</code></pre> | |
| 1369 | +<h3 id="5c-test-clone-git"><a class="header" href="#5c-test-clone-git">5c. Test clone Git</a></h3> | |
| 1370 | +<pre><code class="language-bash"># Dans l'UI gitrust : Settings -> SSH keys -> coller ~/.ssh/id_ed25519.pub | |
| 1371 | +# Créer un repo test admin/test-deploy via UI | |
| 1372 | + | |
| 1373 | +git clone git@<your-domain>:admin/test-deploy.git /tmp/test-deploy | |
| 1374 | +cd /tmp/test-deploy | |
| 1375 | +echo "# test" > README.md | |
| 1376 | +git -c user.email=<acme-email> -c user.name=admin add . && \ | |
| 1377 | + git -c user.email=<acme-email> -c user.name=admin commit -m "test deploy" && \ | |
| 1378 | + git push origin main | |
| 1379 | +</code></pre> | |
| 1380 | +<hr> | |
| 1381 | +<h2 id="phase-6--vérifications-globales"><a class="header" href="#phase-6--vérifications-globales">Phase 6 — Vérifications globales</a></h2> | |
| 1382 | +<pre><code class="language-bash"># Service systemd | |
| 1383 | +ssh gitrust-host 'sudo systemctl status gitrust --no-pager' | |
| 1384 | + | |
| 1385 | +# Logs (recherche d'erreurs) | |
| 1386 | +ssh gitrust-host 'sudo journalctl -u gitrust -n 100 --no-pager | grep -iE "error|warn|fail"' | |
| 1387 | + | |
| 1388 | +# Ports d'écoute (vue d'ensemble) | |
| 1389 | +ssh gitrust-host 'sudo ss -tlnp' | |
| 1390 | +# Attendu : | |
| 1391 | +# :22 nginx | |
| 1392 | +# :80 nginx | |
| 1393 | +# :443 nginx | |
| 1394 | +# :2022 sshd système | |
| 1395 | +# 127.0.0.1:2222 gitrust | |
| 1396 | +# 127.0.0.1:4000 gitrust | |
| 1397 | +# 127.0.0.1:5432 docker-proxy | |
| 1398 | + | |
| 1399 | +# Renouvellement TLS automatique | |
| 1400 | +ssh gitrust-host 'sudo systemctl status certbot.timer --no-pager' | |
| 1401 | + | |
| 1402 | +# Test E2E | |
| 1403 | +curl -I https://<your-domain>/login | |
| 1404 | +ssh -T git@<your-domain> || true # Banner SSH russh attendu | |
| 1405 | +</code></pre> | |
| 1406 | +<hr> | |
| 1407 | +<h2 id="phase-7--durcissement--fail2ban"><a class="header" href="#phase-7--durcissement--fail2ban">Phase 7 — Durcissement : Fail2ban</a></h2> | |
| 1408 | +<p>Voir <code>administration_manual/how-to/durcir-avec-fail2ban.md</code> pour la configuration complète.</p> | |
| 1409 | +<h3 id="7a-installation"><a class="header" href="#7a-installation">7a. Installation</a></h3> | |
| 1410 | +<pre><code class="language-bash">ssh gitrust-host bash <<'EOF' | |
| 1411 | +sudo apt install -y fail2ban | |
| 1412 | +sudo systemctl enable --now fail2ban | |
| 1413 | +EOF | |
| 1414 | +</code></pre> | |
| 1415 | +<h3 id="7b-configuration-minimale-rapide"><a class="header" href="#7b-configuration-minimale-rapide">7b. Configuration minimale rapide</a></h3> | |
| 1416 | +<pre><code class="language-bash">ssh gitrust-host sudo tee /etc/fail2ban/jail.local <<'EOF' | |
| 1417 | +[DEFAULT] | |
| 1418 | +backend = systemd | |
| 1419 | +bantime = 1h | |
| 1420 | +findtime = 10m | |
| 1421 | +maxretry = 5 | |
| 1422 | +ignoreip = 127.0.0.1/8 ::1 | |
| 1423 | +banaction = ufw | |
| 1424 | +banaction_allports = ufw | |
| 1425 | + | |
| 1426 | +[sshd] | |
| 1427 | +enabled = true | |
| 1428 | +port = 2022 | |
| 1429 | +filter = sshd | |
| 1430 | +backend = %(sshd_backend)s | |
| 1431 | +logpath = %(sshd_log)s | |
| 1432 | +maxretry = 3 | |
| 1433 | + | |
| 1434 | +[nginx-http-auth] | |
| 1435 | +enabled = true | |
| 1436 | +port = http,https | |
| 1437 | +filter = nginx-http-auth | |
| 1438 | +logpath = /var/log/nginx/gitrust.error.log | |
| 1439 | + | |
| 1440 | +[gitrust-login] | |
| 1441 | +enabled = true | |
| 1442 | +port = http,https | |
| 1443 | +filter = gitrust-login | |
| 1444 | +logpath = /var/log/nginx/gitrust.access.log | |
| 1445 | +maxretry = 5 | |
| 1446 | + | |
| 1447 | +[gitrust-ssh] | |
| 1448 | +enabled = true | |
| 1449 | +port = 22,2222 | |
| 1450 | +filter = gitrust-ssh | |
| 1451 | +backend = systemd | |
| 1452 | +journalmatch = _SYSTEMD_UNIT=gitrust.service | |
| 1453 | +maxretry = 5 | |
| 1454 | + | |
| 1455 | +[recidive] | |
| 1456 | +enabled = true | |
| 1457 | +logpath = /var/log/fail2ban.log | |
| 1458 | +banaction = %(banaction_allports)s | |
| 1459 | +bantime = 1w | |
| 1460 | +findtime = 1d | |
| 1461 | +maxretry = 3 | |
| 1462 | +EOF | |
| 1463 | +</code></pre> | |
| 1464 | +<p>Créer les filtres gitrust-login et gitrust-ssh, puis :</p> | |
| 1465 | +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl restart fail2ban && sudo fail2ban-client status' | |
| 1466 | +</code></pre> | |
| 1467 | +<hr> | |
| 1468 | +<h2 id="phase-8--mise-à-jour-vers-un-nouveau-domaine-quand-dns-prêt"><a class="header" href="#phase-8--mise-à-jour-vers-un-nouveau-domaine-quand-dns-prêt">Phase 8 — Mise à jour vers un nouveau domaine (quand DNS prêt)</a></h2> | |
| 1469 | +<h3 id="8a-ajouter-le-san-au-certificat-existant"><a class="header" href="#8a-ajouter-le-san-au-certificat-existant">8a. Ajouter le SAN au certificat existant</a></h3> | |
| 1470 | +<pre><code class="language-bash">ssh gitrust-host 'sudo certbot --nginx --expand \ | |
| 1471 | + -d <your-domain> \ | |
| 1472 | + -d <new-domain> \ | |
| 1473 | + --email <acme-email> \ | |
| 1474 | + --agree-tos --no-eff-email' | |
| 1475 | +</code></pre> | |
| 1476 | +<h3 id="8b-mettre-à-jour-la-conf-nginx"><a class="header" href="#8b-mettre-à-jour-la-conf-nginx">8b. Mettre à jour la conf Nginx</a></h3> | |
| 1477 | +<pre><code class="language-bash">ssh gitrust-host bash <<EOF | |
| 1478 | +sudo sed -i 's/server_name <your-domain>;/server_name <your-domain> <new-domain>;/g' /etc/nginx/sites-available/gitrust | |
| 1479 | +sudo nginx -t && sudo systemctl reload nginx | |
| 1480 | +EOF | |
| 1481 | +</code></pre> | |
| 1482 | +<h3 id="8c-mettre-à-jour-envproduction-et-redéployer"><a class="header" href="#8c-mettre-à-jour-envproduction-et-redéployer">8c. Mettre à jour <code>.env.production</code> et redéployer</a></h3> | |
| 1483 | +<pre><code class="language-bash">sed -i 's|SSH_PUBLIC_HOST=.*|SSH_PUBLIC_HOST=<new-domain>|' .env.production | |
| 1484 | +sed -i 's|EMAIL_BASE_URL=.*|EMAIL_BASE_URL=https://<new-domain>|' .env.production | |
| 1485 | +./deployment/deploy.sh gitrust-host | |
| 1486 | +</code></pre> | |
| 1487 | +<hr> | |
| 1488 | +<h2 id="phase-9--mises-à-jour-ultérieures"><a class="header" href="#phase-9--mises-à-jour-ultérieures">Phase 9 — Mises à jour ultérieures</a></h2> | |
| 1489 | +<pre><code class="language-bash">git pull | |
| 1490 | +SKIP_ENV=1 SKIP_DB=1 ./deployment/deploy.sh | |
| 1491 | +</code></pre> | |
| 1492 | +<hr> | |
| 1493 | +<h2 id="dépannage"><a class="header" href="#dépannage">Dépannage</a></h2> | |
| 1494 | +<div class="table-wrapper"> | |
| 1495 | +<table> | |
| 1496 | +<thead> | |
| 1497 | +<tr><th>Symptôme</th><th>Diagnostic</th><th>Fix</th></tr> | |
| 1498 | +</thead> | |
| 1499 | +<tbody> | |
| 1500 | +<tr><td>Lockout SSH après reload sshd</td><td>—</td><td>Console physique / KVM IPMI</td></tr> | |
| 1501 | +<tr><td>Cert Let’s Encrypt échoue (<code>Connection refused</code>)</td><td><code>dig +short <your-domain></code> ≠ IP publique</td><td>Corriger DNS, ou vérifier que :80 traverse bien le NAT</td></tr> | |
| 1502 | +<tr><td>Cert échoue (<code>unauthorized</code>)</td><td>Nginx <code>:80</code> ne répond pas sur <code>/.well-known/acme-challenge/</code></td><td><code>curl http://<your-domain>/.well-known/acme-challenge/test</code> doit ne pas rediriger en 301</td></tr> | |
| 1503 | +<tr><td>Login boucle sur <code>/login</code> malgré HTTPS</td><td><code>grep COOKIE_SECURE /opt/gitrust/.env</code></td><td>Doit être <code>true</code> ; vérifier que Nginx forward bien <code>X-Forwarded-Proto https</code></td></tr> | |
| 1504 | +<tr><td>Push SSH <code>Connection closed</code></td><td><code>journalctl -u gitrust | grep ssh</code></td><td>Vérifier que gitrust écoute bien <code>127.0.0.1:2222</code> et que nginx stream forward</td></tr> | |
| 1505 | +<tr><td><code>nginx -t</code> : <code>unknown directive "stream"</code></td><td>Module non chargé</td><td><code>sudo apt install libnginx-mod-stream</code> puis <code>systemctl restart nginx</code></td></tr> | |
| 1506 | +<tr><td>Mixed content HTTPS</td><td>Templates qui hardcodent <code>http://</code></td><td>Vérifier <code>EMAIL_BASE_URL=https://...</code> et headers <code>X-Forwarded-Proto</code></td></tr> | |
| 1507 | +<tr><td>Push gros repo timeout</td><td>Logs nginx <code>client intended to send too large body</code></td><td>Augmenter <code>client_max_body_size 2G</code> (déjà fait pour <code>.git/</code>)</td></tr> | |
| 1508 | +</tbody> | |
| 1509 | +</table> | |
| 1510 | +</div> | |
| 1511 | +<hr> | |
| 1512 | +<h2 id="récapitulatif-des-ports"><a class="header" href="#récapitulatif-des-ports">Récapitulatif des ports</a></h2> | |
| 1513 | +<div class="table-wrapper"> | |
| 1514 | +<table> | |
| 1515 | +<thead> | |
| 1516 | +<tr><th>Port</th><th>Process</th><th>Exposition</th><th>Rôle</th></tr> | |
| 1517 | +</thead> | |
| 1518 | +<tbody> | |
| 1519 | +<tr><td>22</td><td>nginx (stream)</td><td>Public</td><td>SSH Git → forward vers :2222</td></tr> | |
| 1520 | +<tr><td>80</td><td>nginx</td><td>Public</td><td>ACME challenge + redirect HTTPS</td></tr> | |
| 1521 | +<tr><td>443</td><td>nginx</td><td>Public</td><td>HTTPS → forward vers :4000</td></tr> | |
| 1522 | +<tr><td>2022</td><td>sshd système</td><td>Public</td><td>Admin SSH (à restreindre par firewall si possible)</td></tr> | |
| 1523 | +<tr><td>2222</td><td>gitrust</td><td>Loopback</td><td>Backend SSH russh</td></tr> | |
| 1524 | +<tr><td>4000</td><td>gitrust</td><td>Loopback</td><td>Backend HTTP axum</td></tr> | |
| 1525 | +<tr><td>5432</td><td>docker-proxy</td><td>Loopback</td><td>PostgreSQL</td></tr> | |
| 1526 | +</tbody> | |
| 1527 | +</table> | |
| 1528 | +</div> | |
| 1529 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 1530 | +<h1 id="guides-pratiques-1"><a class="header" href="#guides-pratiques-1">Guides pratiques</a></h1> | |
| 1531 | +<blockquote> | |
| 1532 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 1533 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 1534 | +</blockquote> | |
| 1535 | +<h2 id="todo-27"><a class="header" href="#todo-27">TODO</a></h2> | |
| 1536 | +<ul> | |
| 1537 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 1538 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 1539 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 1540 | +</ul> | |
| 1541 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 1542 | +<h1 id="sauvegarder-et-restaurer"><a class="header" href="#sauvegarder-et-restaurer">Sauvegarder et restaurer</a></h1> | |
| 1543 | +<blockquote> | |
| 1544 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 1545 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 1546 | +</blockquote> | |
| 1547 | +<h2 id="todo-28"><a class="header" href="#todo-28">TODO</a></h2> | |
| 1548 | +<ul> | |
| 1549 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 1550 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 1551 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 1552 | +</ul> | |
| 1553 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 1554 | +<h1 id="mettre-à-jour-gitrust"><a class="header" href="#mettre-à-jour-gitrust">Mettre à jour gitrust</a></h1> | |
| 1555 | +<blockquote> | |
| 1556 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 1557 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 1558 | +</blockquote> | |
| 1559 | +<h2 id="todo-29"><a class="header" href="#todo-29">TODO</a></h2> | |
| 1560 | +<ul> | |
| 1561 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 1562 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 1563 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 1564 | +</ul> | |
| 1565 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 1566 | +<h1 id="configurer-smtp"><a class="header" href="#configurer-smtp">Configurer SMTP</a></h1> | |
| 1567 | +<blockquote> | |
| 1568 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 1569 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 1570 | +</blockquote> | |
| 1571 | +<h2 id="todo-30"><a class="header" href="#todo-30">TODO</a></h2> | |
| 1572 | +<ul> | |
| 1573 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 1574 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 1575 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 1576 | +</ul> | |
| 1577 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 1578 | +<h1 id="configurer-oauth"><a class="header" href="#configurer-oauth">Configurer OAuth</a></h1> | |
| 1579 | +<blockquote> | |
| 1580 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 1581 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 1582 | +</blockquote> | |
| 1583 | +<h2 id="todo-31"><a class="header" href="#todo-31">TODO</a></h2> | |
| 1584 | +<ul> | |
| 1585 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 1586 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 1587 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 1588 | +</ul> | |
| 1589 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 1590 | +<h1 id="configurer-le-runner-ci-distant"><a class="header" href="#configurer-le-runner-ci-distant">Configurer le runner CI distant</a></h1> | |
| 1591 | +<p>Guide d’usage du script qui provisionne une machine distante pour exécuter les pipelines CI/CD de gitrust via SSH + rsync + Dagger.</p> | |
| 1592 | +<hr> | |
| 1593 | +<h2 id="1-rôle-du-script"><a class="header" href="#1-rôle-du-script">1. Rôle du script</a></h2> | |
| 1594 | +<p><code>deployment/setup-remote-ci.sh</code> (disponible dans le dépôt source gitrust) prépare <strong>un serveur de build distant</strong> utilisé par le worker CI de gitrust. Il automatise 6 étapes :</p> | |
| 1595 | +<ol> | |
| 1596 | +<li>Vérifie la connectivité SSH vers le runner</li> | |
| 1597 | +<li>Installe <strong>Docker</strong> (<code>curl https://get.docker.com | sh</code>) s’il est absent</li> | |
| 1598 | +<li>Installe <strong>Dagger CLI</strong> (<code>curl https://dl.dagger.io/dagger/install.sh | sh</code>) s’il est absent</li> | |
| 1599 | +<li>Crée le répertoire de travail distant (<code>CI_REMOTE_PATH</code>)</li> | |
| 1600 | +<li>Synchronise le module <code>deployment/ci-engine/</code> (mode CI Easy) via <code>rsync -az --delete</code></li> | |
| 1601 | +<li>Smoke test : affiche <code>docker --version</code> et <code>dagger version</code></li> | |
| 1602 | +</ol> | |
| 1603 | +<p>Le script est <strong>idempotent</strong> : rejoue sans dommage, skip ce qui existe déjà.</p> | |
| 1604 | +<hr> | |
| 1605 | +<h2 id="2-quand-lutiliser"><a class="header" href="#2-quand-lutiliser">2. Quand l’utiliser</a></h2> | |
| 1606 | +<div class="table-wrapper"> | |
| 1607 | +<table> | |
| 1608 | +<thead> | |
| 1609 | +<tr><th>Scénario</th><th>Besoin de <code>setup-remote-ci.sh</code> ?</th></tr> | |
| 1610 | +</thead> | |
| 1611 | +<tbody> | |
| 1612 | +<tr><td>Dev local, CI sur la même machine que gitrust (<code>CI_REMOTE_HOST=localhost</code>)</td><td><strong>Non</strong> — Docker et Dagger déjà installés localement, le <code>ci-engine/</code> est lu depuis <code>deployment/ci-engine/</code> directement</td></tr> | |
| 1613 | +<tr><td>Prod on-premise, un seul serveur (gitrust + CI colocalisés)</td><td><strong>Non</strong> — idem, un simple <code>curl get.docker.com | sh</code> suffit sur le serveur gitrust</td></tr> | |
| 1614 | +<tr><td>Prod avec <strong>runner CI dédié</strong> (machine séparée)</td><td><strong>OUI</strong> — c’est le cas cible de ce script</td></tr> | |
| 1615 | +<tr><td>Prod avec plusieurs instances gitrust partageant un runner</td><td><strong>OUI</strong> — le runner est provisionné une fois, chaque instance pointe dessus</td></tr> | |
| 1616 | +<tr><td>CI dans Kubernetes / Nomad / runner managé cloud</td><td><strong>Non</strong> — ce script est pensé pour une VM Debian/Ubuntu classique</td></tr> | |
| 1617 | +</tbody> | |
| 1618 | +</table> | |
| 1619 | +</div> | |
| 1620 | +<hr> | |
| 1621 | +<h2 id="3-architecture-cible"><a class="header" href="#3-architecture-cible">3. Architecture cible</a></h2> | |
| 1622 | +<pre><code>+---------------------+ SSH + rsync +-----------------------+ | |
| 1623 | +| Gitrust (web+SSH) |---------------------------| CI Runner (distant) | | |
| 1624 | +| <your-server-ip> | CI_REMOTE_HOST/USER/KEY | <ci-runner-ip> | | |
| 1625 | +| | | | | |
| 1626 | +| Worker CI Tokio | push .gitrust-ci.yml | /opt/gitrust-ci/ | | |
| 1627 | +| (dans gitrust.bin) | + code source checkout | ├── ci-engine/ | | |
| 1628 | +| | | └── workspaces/ | | |
| 1629 | +| | dagger call ... | | | |
| 1630 | +| | | Docker + Dagger CLI | | |
| 1631 | ++---------------------+ +-----------------------+ | |
| 1632 | +</code></pre> | |
| 1633 | +<p>Le worker CI de gitrust (tâche Tokio dans le binaire principal) ne fait <strong>pas tourner</strong> Docker localement — il délègue au runner via SSH. Cela permet d’isoler les workloads CPU/RAM gourmands (builds Rust, Node, Docker) du process web de gitrust.</p> | |
| 1634 | +<hr> | |
| 1635 | +<h2 id="4-pré-requis"><a class="header" href="#4-pré-requis">4. Pré-requis</a></h2> | |
| 1636 | +<h3 id="sur-la-machine-dexécution-là-où-on-lance-le-script"><a class="header" href="#sur-la-machine-dexécution-là-où-on-lance-le-script">Sur la machine d’exécution (là où on lance le script)</a></h3> | |
| 1637 | +<div class="table-wrapper"> | |
| 1638 | +<table> | |
| 1639 | +<thead> | |
| 1640 | +<tr><th>Outil</th><th>Rôle</th></tr> | |
| 1641 | +</thead> | |
| 1642 | +<tbody> | |
| 1643 | +<tr><td><code>bash</code> ≥ 4</td><td>Interpréteur</td></tr> | |
| 1644 | +<tr><td><code>ssh</code>, <code>rsync</code></td><td>Transport et synchro</td></tr> | |
| 1645 | +<tr><td><code>ssh-agent</code> chargé <strong>ou</strong> <code>CI_REMOTE_SSH_KEY</code> défini</td><td>Auth SSH sans mot de passe interactif (<code>BatchMode=yes</code>)</td></tr> | |
| 1646 | +<tr><td>Fichier <code>.env</code> avec les variables CI_REMOTE_*</td><td>Config (voir section 5)</td></tr> | |
| 1647 | +</tbody> | |
| 1648 | +</table> | |
| 1649 | +</div> | |
| 1650 | +<h3 id="sur-le-runner-distant"><a class="header" href="#sur-le-runner-distant">Sur le runner distant</a></h3> | |
| 1651 | +<div class="table-wrapper"> | |
| 1652 | +<table> | |
| 1653 | +<thead> | |
| 1654 | +<tr><th>Pré-requis</th><th>Pourquoi</th></tr> | |
| 1655 | +</thead> | |
| 1656 | +<tbody> | |
| 1657 | +<tr><td>OS Linux récent (Debian 12+, Ubuntu 22.04+)</td><td>Docker install script compatible</td></tr> | |
| 1658 | +<tr><td>User avec <code>sudo</code> passwordless <strong>ou</strong> droits <code>docker</code></td><td><code>get.docker.com</code> fait <code>sudo</code> en interne</td></tr> | |
| 1659 | +<tr><td>Clé SSH publique du user local dans <code>~/.ssh/authorized_keys</code></td><td>Auth SSH non-interactive</td></tr> | |
| 1660 | +<tr><td>Réseau sortant autorisé vers <code>get.docker.com</code> et <code>dl.dagger.io</code></td><td>Installation des binaires</td></tr> | |
| 1661 | +<tr><td>Au minimum ~5 Go libres dans <code>CI_REMOTE_PATH</code></td><td>Images Docker + workspaces</td></tr> | |
| 1662 | +</tbody> | |
| 1663 | +</table> | |
| 1664 | +</div> | |
| 1665 | +<hr> | |
| 1666 | +<h2 id="5-variables-denvironnement-attendues-le-env"><a class="header" href="#5-variables-denvironnement-attendues-le-env">5. Variables d’environnement attendues (le <code>.env</code>)</a></h2> | |
| 1667 | +<p>Le script <strong>source un fichier <code>.env</code></strong> dont le chemin est passé en argument, ou par défaut <code>../.env</code> (relatif au script, donc <code><racine_projet>/.env</code>).</p> | |
| 1668 | +<h3 id="tableau-des-variables"><a class="header" href="#tableau-des-variables">Tableau des variables</a></h3> | |
| 1669 | +<div class="table-wrapper"> | |
| 1670 | +<table> | |
| 1671 | +<thead> | |
| 1672 | +<tr><th>Variable</th><th>Obligatoire</th><th>Défaut</th><th>Description</th></tr> | |
| 1673 | +</thead> | |
| 1674 | +<tbody> | |
| 1675 | +<tr><td><code>CI_REMOTE_HOST</code></td><td><strong>OUI</strong></td><td>—</td><td>Hostname ou IP du runner (ex: <code>ci-runner.internal</code>)</td></tr> | |
| 1676 | +<tr><td><code>CI_REMOTE_USER</code></td><td>non</td><td><code>$(whoami)</code> (user courant)</td><td>Compte SSH sur le runner</td></tr> | |
| 1677 | +<tr><td><code>CI_REMOTE_SSH_PORT</code></td><td>non</td><td><code>22</code></td><td>Port SSH du runner</td></tr> | |
| 1678 | +<tr><td><code>CI_REMOTE_PATH</code></td><td>non</td><td><code>/opt/gitrust-ci</code></td><td>Répertoire de travail distant (créé par le script)</td></tr> | |
| 1679 | +<tr><td><code>CI_REMOTE_SSH_KEY</code></td><td>non</td><td>— (ssh-agent)</td><td>Chemin d’une clé privée SSH spécifique</td></tr> | |
| 1680 | +</tbody> | |
| 1681 | +</table> | |
| 1682 | +</div> | |
| 1683 | +<p>Ces variables sont les <strong>mêmes</strong> que celles lues par gitrust au runtime. Centraliser dans <code>.env</code> évite les divergences entre le provisionnement et le runtime.</p> | |
| 1684 | +<h3 id="exemple-minimal-de-env-runner-dédié"><a class="header" href="#exemple-minimal-de-env-runner-dédié">Exemple minimal de <code>.env</code> (runner dédié)</a></h3> | |
| 1685 | +<pre><code class="language-bash"># --- CI runner distant --- | |
| 1686 | +CI_REMOTE_HOST=<ci-runner-ip> | |
| 1687 | +CI_REMOTE_USER=ci-runner | |
| 1688 | +CI_REMOTE_SSH_PORT=22 | |
| 1689 | +CI_REMOTE_PATH=/opt/gitrust-ci | |
| 1690 | +CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/ci_runner_ed25519 | |
| 1691 | +</code></pre> | |
| 1692 | +<h3 id="exemple-env-complet-coexistant-avec-config-gitrust"><a class="header" href="#exemple-env-complet-coexistant-avec-config-gitrust">Exemple <code>.env</code> complet coexistant avec config gitrust</a></h3> | |
| 1693 | +<pre><code class="language-bash">DATABASE_URL=postgres://... | |
| 1694 | +JWT_SECRET=... | |
| 1695 | +# ... (voir .env.example pour le reste) | |
| 1696 | + | |
| 1697 | +# --- CI/CD (lu par gitrust ET par setup-remote-ci.sh) --- | |
| 1698 | +CI_ENABLED=true | |
| 1699 | +CI_MAX_CONCURRENT=4 | |
| 1700 | +CI_REMOTE_HOST=ci-runner.internal | |
| 1701 | +CI_REMOTE_USER=ci-runner | |
| 1702 | +CI_REMOTE_PATH=/opt/gitrust-ci | |
| 1703 | +CI_REMOTE_SSH_KEY=/opt/gitrust/data/ci_runner_key | |
| 1704 | +</code></pre> | |
| 1705 | +<h3 id="cas--runner-local--pas-besoin-du-script"><a class="header" href="#cas--runner-local--pas-besoin-du-script">Cas « runner local » (pas besoin du script)</a></h3> | |
| 1706 | +<pre><code class="language-bash">CI_REMOTE_HOST=localhost | |
| 1707 | +# Les autres CI_REMOTE_* sont ignorés | |
| 1708 | +</code></pre> | |
| 1709 | +<p>Dans ce cas, installer Docker et Dagger directement sur la machine gitrust, copier <code>deployment/ci-engine/</code> vers <code>CI_ENGINE_PATH</code> (défaut <code>/opt/gitrust/ci-engine</code>) et passer à la suite. <strong>Ne pas exécuter <code>setup-remote-ci.sh</code></strong> avec <code>CI_REMOTE_HOST=localhost</code>.</p> | |
| 1710 | +<hr> | |
| 1711 | +<h2 id="6-usage"><a class="header" href="#6-usage">6. Usage</a></h2> | |
| 1712 | +<h3 id="depuis-la-racine-du-projet-par-défaut"><a class="header" href="#depuis-la-racine-du-projet-par-défaut">Depuis la racine du projet (par défaut)</a></h3> | |
| 1713 | +<pre><code class="language-bash">cd /chemin/vers/gitrust | |
| 1714 | + | |
| 1715 | +# .env a la racine (défaut) : | |
| 1716 | +./deployment/setup-remote-ci.sh | |
| 1717 | +</code></pre> | |
| 1718 | +<h3 id="avec-un-env-explicite"><a class="header" href="#avec-un-env-explicite">Avec un <code>.env</code> explicite</a></h3> | |
| 1719 | +<pre><code class="language-bash">./deployment/setup-remote-ci.sh /chemin/vers/mon.env | |
| 1720 | +# Utile si vous avez .env.production, .env.staging, etc. | |
| 1721 | +./deployment/setup-remote-ci.sh .env.production | |
| 1722 | +</code></pre> | |
| 1723 | +<h3 id="sortie-attendue"><a class="header" href="#sortie-attendue">Sortie attendue</a></h3> | |
| 1724 | +<pre><code>==> Configuration : | |
| 1725 | + Serveur : ci-runner@<ci-runner-ip> | |
| 1726 | + Port SSH : 22 | |
| 1727 | + Chemin : /opt/gitrust-ci | |
| 1728 | + | |
| 1729 | +==> [1/6] Vérification de la connectivité SSH... | |
| 1730 | +SSH OK | |
| 1731 | + OK | |
| 1732 | +==> [2/6] Vérification de Docker... | |
| 1733 | + Docker déjà installé | |
| 1734 | +==> [3/6] Vérification de Dagger CLI... | |
| 1735 | + Installation de Dagger CLI... | |
| 1736 | + Dagger installé | |
| 1737 | +==> [4/6] Création du répertoire distant... | |
| 1738 | + /opt/gitrust-ci créé | |
| 1739 | +==> [5/6] Synchronisation du ci-engine... | |
| 1740 | +sending incremental file list | |
| 1741 | +ci-engine/ | |
| 1742 | +ci-engine/profiles/ | |
| 1743 | +... | |
| 1744 | + ci-engine synchronisé vers /opt/gitrust-ci/ci-engine/ | |
| 1745 | +==> [6/6] Smoke test... | |
| 1746 | + Versions distantes : | |
| 1747 | +Docker version 28.0.1, build abcd123 | |
| 1748 | +dagger v0.19.2 (linux/amd64) | |
| 1749 | + | |
| 1750 | +==> Setup terminé. Le serveur ci-runner@<ci-runner-ip> est prêt pour l'exécution CI. | |
| 1751 | + Pensez à configurer CI_EXECUTION_MODE=remote dans votre .env | |
| 1752 | +</code></pre> | |
| 1753 | +<hr> | |
| 1754 | +<h2 id="7-ce-qui-se-retrouve-sur-le-runner"><a class="header" href="#7-ce-qui-se-retrouve-sur-le-runner">7. Ce qui se retrouve sur le runner</a></h2> | |
| 1755 | +<p>Après exécution réussie :</p> | |
| 1756 | +<pre><code>/opt/gitrust-ci/ <- CI_REMOTE_PATH | |
| 1757 | +└── ci-engine/ <- synchronisé depuis deployment/ci-engine/ | |
| 1758 | + ├── README.md | |
| 1759 | + └── profiles/ <- templates par stack (Python, Node, Rust, ...) | |
| 1760 | +</code></pre> | |
| 1761 | +<p>Plus, installés globalement :</p> | |
| 1762 | +<ul> | |
| 1763 | +<li><code>/usr/bin/docker</code> (ou équivalent) + socket <code>/var/run/docker.sock</code></li> | |
| 1764 | +<li><code>/usr/local/bin/dagger</code></li> | |
| 1765 | +</ul> | |
| 1766 | +<p>Les <strong>workspaces de pipelines</strong> (checkouts temporaires) sont créés par le worker CI de gitrust au moment de l’exécution sous <code>CI_WORKSPACE_PATH</code> (défaut <code>/tmp/gitrust-ci</code>) — <strong>pas par ce script</strong>.</p> | |
| 1767 | +<hr> | |
| 1768 | +<h2 id="8-vérifications-post-setup"><a class="header" href="#8-vérifications-post-setup">8. Vérifications post-setup</a></h2> | |
| 1769 | +<h3 id="depuis-la-machine-gitrust"><a class="header" href="#depuis-la-machine-gitrust">Depuis la machine gitrust</a></h3> | |
| 1770 | +<pre><code class="language-bash"># Source le .env | |
| 1771 | +set -a; source .env.production; set +a | |
| 1772 | + | |
| 1773 | +# 1. SSH direct (doit passer sans prompt) | |
| 1774 | +ssh -p ${CI_REMOTE_SSH_PORT:-22} \ | |
| 1775 | + ${CI_REMOTE_SSH_KEY:+-i $CI_REMOTE_SSH_KEY} \ | |
| 1776 | + $CI_REMOTE_USER@$CI_REMOTE_HOST 'docker info && dagger version' | |
| 1777 | + | |
| 1778 | +# 2. Rsync round-trip (lecture/écriture sur CI_REMOTE_PATH) | |
| 1779 | +echo "test" | ssh $CI_REMOTE_USER@$CI_REMOTE_HOST \ | |
| 1780 | + "cat > $CI_REMOTE_PATH/.gitrust-test && cat $CI_REMOTE_PATH/.gitrust-test && rm $CI_REMOTE_PATH/.gitrust-test" | |
| 1781 | +# Attendu : "test" | |
| 1782 | +</code></pre> | |
| 1783 | +<h3 id="pipeline-de-test-via-gitrust"><a class="header" href="#pipeline-de-test-via-gitrust">Pipeline de test via gitrust</a></h3> | |
| 1784 | +<p>Pousser un dépôt avec un <code>.gitrust-ci.yml</code> minimal :</p> | |
| 1785 | +<pre><code class="language-yaml"># .gitrust-ci.yml | |
| 1786 | +version: 1 | |
| 1787 | +pipeline: | |
| 1788 | + - name: smoke | |
| 1789 | + image: alpine:3 | |
| 1790 | + run: echo "CI runner OK" | |
| 1791 | +</code></pre> | |
| 1792 | +<p>Puis dans l’UI gitrust : onglet <code>Pipelines</code> → la pipeline doit passer au statut <code>success</code>.</p> | |
| 1793 | +<hr> | |
| 1794 | +<h2 id="9-mise-à-jour-après-modification-du-ci-engine"><a class="header" href="#9-mise-à-jour-après-modification-du-ci-engine">9. Mise à jour après modification du <code>ci-engine/</code></a></h2> | |
| 1795 | +<p>Le <code>ci-engine/</code> synchronisé n’est pas « live-linké » : rejouer le script après modification côté source.</p> | |
| 1796 | +<pre><code class="language-bash"># Modifier deployment/ci-engine/profiles/*.py ou similaire | |
| 1797 | +./deployment/setup-remote-ci.sh | |
| 1798 | +# Les étapes 2-3 sont skip (déjà installés), seule l'étape 5 refait le rsync | |
| 1799 | +</code></pre> | |
| 1800 | +<p><code>rsync -az --delete</code> <strong>supprime</strong> les fichiers côté runner qui n’existent plus localement — garantit la cohérence.</p> | |
| 1801 | +<hr> | |
| 1802 | +<h2 id="10-dépannage"><a class="header" href="#10-dépannage">10. Dépannage</a></h2> | |
| 1803 | +<div class="table-wrapper"> | |
| 1804 | +<table> | |
| 1805 | +<thead> | |
| 1806 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Fix</th></tr> | |
| 1807 | +</thead> | |
| 1808 | +<tbody> | |
| 1809 | +<tr><td><code>ERREUR: fichier .env introuvable</code></td><td><code>.env</code> absent ou chemin incorrect</td><td><code>cp .env.example .env && $EDITOR .env</code> ou passer le chemin : <code>./setup-remote-ci.sh /path/to/.env</code></td></tr> | |
| 1810 | +<tr><td><code>ERREUR: CI_REMOTE_HOST non défini</code></td><td>Variable commentée ou absente</td><td>Décommenter <code>CI_REMOTE_HOST=...</code> dans le <code>.env</code></td></tr> | |
| 1811 | +<tr><td><code>ERREUR: impossible de se connecter</code></td><td>SSH bloqué, mauvais user, clé non autorisée</td><td>Tester manuellement : <code>ssh -v -p X user@host</code> ; vérifier <code>~/.ssh/authorized_keys</code> sur le runner</td></tr> | |
| 1812 | +<tr><td><code>Permission denied (publickey)</code></td><td><code>BatchMode=yes</code> interdit les prompts, clé non chargée</td><td><code>ssh-add ~/.ssh/ci_runner_ed25519</code> ou définir <code>CI_REMOTE_SSH_KEY=/path/to/key</code></td></tr> | |
| 1813 | +<tr><td><code>sudo: a password is required</code> pendant l’install Docker</td><td>User sans <code>NOPASSWD</code> sudo</td><td>Ajouter le user au <code>sudoers</code> : <code>ci-runner ALL=(ALL) NOPASSWD:ALL</code> (runner uniquement)</td></tr> | |
| 1814 | +<tr><td><code>curl: (7) Failed to connect to get.docker.com</code></td><td>Réseau sortant du runner bloqué</td><td>Whitelist <code>get.docker.com</code> et <code>dl.dagger.io</code>, ou pré-installer Docker + Dagger manuellement</td></tr> | |
| 1815 | +<tr><td><code>ATTENTION: ... ci-engine introuvable</code></td><td>Lancé hors du repo gitrust</td><td><code>cd</code> dans la racine du projet avant de lancer</td></tr> | |
| 1816 | +<tr><td>Pipeline reste <code>queued</code> indéfiniment</td><td>Worker CI ne trouve pas le runner</td><td>Vérifier <code>CI_EXECUTION_MODE=remote</code> dans <code>.env</code> gitrust + logs : <code>journalctl -u gitrust | grep -i 'ci|dagger'</code></td></tr> | |
| 1817 | +<tr><td><code>dagger: command not found</code> au smoke test</td><td><code>$PATH</code> du user SSH ne contient pas <code>/usr/local/bin</code></td><td><code>echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc</code> sur le runner, ou <code>CI_DAGGER_BIN=/usr/local/bin/dagger</code> côté gitrust</td></tr> | |
| 1818 | +</tbody> | |
| 1819 | +</table> | |
| 1820 | +</div> | |
| 1821 | +<hr> | |
| 1822 | +<h2 id="11-sécurité"><a class="header" href="#11-sécurité">11. Sécurité</a></h2> | |
| 1823 | +<ul> | |
| 1824 | +<li>Le runner CI exécute du <strong>code arbitraire</strong> venant des dépôts hébergés. <strong>Ne jamais</strong> le colocaliser avec des secrets sensibles (PG prod, clés de prod).</li> | |
| 1825 | +<li>Isoler réseau : bloquer l’accès sortant du runner vers le LAN privé (seul l’accès Internet pour <code>docker pull</code> est nécessaire).</li> | |
| 1826 | +<li>Limiter <code>sudo NOPASSWD</code> au strict minimum sur le runner (idéalement : juste pour les commandes <code>docker</code> et <code>apt</code>).</li> | |
| 1827 | +<li>Rotation régulière de la clé SSH <code>CI_REMOTE_SSH_KEY</code>. La révoquer dans <code>~/.ssh/authorized_keys</code> côté runner en cas de suspicion.</li> | |
| 1828 | +<li>Le runner ne doit <strong>pas</strong> pouvoir se connecter en SSH à la machine gitrust (unidirectionnel).</li> | |
| 1829 | +</ul> | |
| 1830 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 1831 | +<h1 id="intégrer-la-ci-et-dependency-track"><a class="header" href="#intégrer-la-ci-et-dependency-track">Intégrer la CI et Dependency-Track</a></h1> | |
| 1832 | +<p>Ce document explique comment activer et configurer les deux fonctionnalités de qualité/sécurité de gitrust :</p> | |
| 1833 | +<ol> | |
| 1834 | +<li><strong>La CI intégrée</strong> (Dagger) qui exécute les builds/tests/lints à chaque push.</li> | |
| 1835 | +<li><strong>Le dependency tracker</strong> (Syft + Dependency-Track) qui scanne les composants du code à chaque push et détecte les vulnérabilités connues.</li> | |
| 1836 | +</ol> | |
| 1837 | +<p>Ces deux systèmes sont <strong>indépendants</strong> : on peut activer l’un sans l’autre.</p> | |
| 1838 | +<hr> | |
| 1839 | +<h2 id="1-architecture-générale"><a class="header" href="#1-architecture-générale">1. Architecture générale</a></h2> | |
| 1840 | +<pre class="mermaid">flowchart TB | |
| 1841 | + subgraph Client | |
| 1842 | + Dev[Développeur] | |
| 1843 | + end | |
| 1844 | + subgraph Gitrust[Instance Gitrust] | |
| 1845 | + HTTP[:4000 HTTP/Git] | |
| 1846 | + SSH[:2222 SSH/Git] | |
| 1847 | + Worker[CiWorker<br/>tokio task] | |
| 1848 | + Sbom[SbomService<br/>tokio spawn] | |
| 1849 | + DB[(PostgreSQL)] | |
| 1850 | + end | |
| 1851 | + subgraph Builder[Serveur de build] | |
| 1852 | + Docker[Docker/Podman] | |
| 1853 | + Dagger[Dagger CLI] | |
| 1854 | + CiEngine[/opt/gitrust-ci/ci-engine/] | |
| 1855 | + end | |
| 1856 | + subgraph Security[Stack sécurité optionnelle] | |
| 1857 | + Syft[syft] | |
| 1858 | + Dtrack[Dependency-Track] | |
| 1859 | + end | |
| 1860 | + | |
| 1861 | + Dev -->|git push| HTTP | |
| 1862 | + Dev -->|git push| SSH | |
| 1863 | + HTTP --> Worker | |
| 1864 | + SSH --> Worker | |
| 1865 | + HTTP --> Sbom | |
| 1866 | + SSH --> Sbom | |
| 1867 | + Worker -->|SSH + rsync| Builder | |
| 1868 | + Builder -->|logs streamés| Worker | |
| 1869 | + Worker --> DB | |
| 1870 | + Sbom -->|scan workspace| Syft | |
| 1871 | + Sbom -->|PUT BOM| Dtrack | |
| 1872 | + Dtrack -->|findings| Sbom | |
| 1873 | + Sbom --> DB | |
| 1874 | +</pre> | |
| 1875 | + | |
| 1876 | +<p>Trois composants fonctionnent en parallèle :</p> | |
| 1877 | +<ul> | |
| 1878 | +<li><strong>CiWorker</strong> : tâche Tokio qui consomme des <code>CiTask</code> depuis un channel <code>mpsc</code>, limitée par un <code>Semaphore</code> à <code>CI_MAX_CONCURRENT</code> pipelines simultanés.</li> | |
| 1879 | +<li><strong>SbomService</strong> : exécuté dans un <code>tokio::spawn</code> après chaque push, totalement découplé du CI.</li> | |
| 1880 | +<li><strong>Serveur de build</strong> : machine distante (ou <code>localhost</code>) qui exécute Docker + Dagger. Gitrust y envoie le workspace par rsync et lance Dagger par SSH.</li> | |
| 1881 | +</ul> | |
| 1882 | +<hr> | |
| 1883 | +<h2 id="2-mettre-en-place-la-ci"><a class="header" href="#2-mettre-en-place-la-ci">2. Mettre en place la CI</a></h2> | |
| 1884 | +<h3 id="21-pré-requis-serveur-de-build"><a class="header" href="#21-pré-requis-serveur-de-build">2.1 Pré-requis serveur de build</a></h3> | |
| 1885 | +<p>Le serveur de build peut être <strong>la même machine que Gitrust</strong> (<code>CI_REMOTE_HOST=localhost</code>) ou une machine dédiée. Il doit disposer de :</p> | |
| 1886 | +<div class="table-wrapper"> | |
| 1887 | +<table> | |
| 1888 | +<thead> | |
| 1889 | +<tr><th>Outil</th><th>Rôle</th></tr> | |
| 1890 | +</thead> | |
| 1891 | +<tbody> | |
| 1892 | +<tr><td>Docker ou Podman</td><td>Containers Dagger</td></tr> | |
| 1893 | +<tr><td>Dagger CLI</td><td>Moteur d’exécution</td></tr> | |
| 1894 | +<tr><td>SSH (accès sortant depuis Gitrust)</td><td>Transport</td></tr> | |
| 1895 | +<tr><td>rsync</td><td>Copie du workspace</td></tr> | |
| 1896 | +<tr><td>git, tar</td><td>Extraction du tree du commit</td></tr> | |
| 1897 | +</tbody> | |
| 1898 | +</table> | |
| 1899 | +</div> | |
| 1900 | +<p>Installation automatique recommandée :</p> | |
| 1901 | +<pre><code class="language-bash"># Depuis la machine Gitrust (l'utilisateur doit pouvoir SSH vers le builder) | |
| 1902 | +./deployment/setup-remote-ci.sh .env | |
| 1903 | +</code></pre> | |
| 1904 | +<p>Le script exécute :</p> | |
| 1905 | +<ol> | |
| 1906 | +<li>Vérification de la connectivité SSH</li> | |
| 1907 | +<li>Installation de Docker si absent</li> | |
| 1908 | +<li>Installation de Dagger CLI si absent</li> | |
| 1909 | +<li>Création du répertoire de travail distant</li> | |
| 1910 | +<li>Synchronisation du <code>ci-engine</code></li> | |
| 1911 | +<li>Smoke test (versions)</li> | |
| 1912 | +</ol> | |
| 1913 | +<h3 id="22-configuration-gitrust-fichier-env"><a class="header" href="#22-configuration-gitrust-fichier-env">2.2 Configuration Gitrust (fichier .env)</a></h3> | |
| 1914 | +<p>Ajouter au <code>.env</code> de Gitrust :</p> | |
| 1915 | +<pre><code class="language-env"># Activer globalement le CI | |
| 1916 | +CI_ENABLED=true | |
| 1917 | + | |
| 1918 | +# Chemin du ci-engine sur le serveur de build | |
| 1919 | +CI_ENGINE_PATH=/opt/gitrust-ci/ci-engine | |
| 1920 | + | |
| 1921 | +# Limite de parallélisme | |
| 1922 | +CI_MAX_CONCURRENT=4 | |
| 1923 | +CI_DEFAULT_TIMEOUT=3600 | |
| 1924 | +CI_WORKSPACE_PATH=/tmp/gitrust-ci | |
| 1925 | + | |
| 1926 | +# Serveur de build (mettre localhost pour "même machine") | |
| 1927 | +CI_REMOTE_HOST=builder.example.com | |
| 1928 | +CI_REMOTE_USER=ci-runner | |
| 1929 | +CI_REMOTE_PATH=/opt/gitrust-ci | |
| 1930 | +CI_REMOTE_SSH_PORT=22 | |
| 1931 | +# CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/id_ed25519 # si pas ssh-agent | |
| 1932 | +</code></pre> | |
| 1933 | +<p>Redémarrer Gitrust : <code>systemctl restart gitrust</code> (ou <code>cargo run --release</code>).</p> | |
| 1934 | +<h3 id="23-activer-la-ci-sur-un-dépôt"><a class="header" href="#23-activer-la-ci-sur-un-dépôt">2.3 Activer la CI sur un dépôt</a></h3> | |
| 1935 | +<p>Dans l’interface web : aller sur le dépôt → <strong>Settings</strong> → <strong>CI</strong>.</p> | |
| 1936 | +<ul> | |
| 1937 | +<li>Cocher <strong>CI enabled</strong> (requis — par défaut <code>false</code>)</li> | |
| 1938 | +<li>Cocher <strong>Trigger on push</strong> (active l’exécution à chaque push)</li> | |
| 1939 | +<li>Optionnel : <strong>Auto-cancel</strong> (annule les pipelines en cours quand un nouveau démarre)</li> | |
| 1940 | +<li>Optionnel : <strong>Allowed branches</strong> (ex. <code>main,develop</code> — vide = toutes)</li> | |
| 1941 | +</ul> | |
| 1942 | +<h3 id="24-choisir-le-mode--easy-ou-power"><a class="header" href="#24-choisir-le-mode--easy-ou-power">2.4 Choisir le mode : Easy ou Power</a></h3> | |
| 1943 | +<pre class="mermaid">flowchart LR | |
| 1944 | + Push[Commit<br/>poussé] --> Tree{Arbre du<br/>commit contient ?} | |
| 1945 | + Tree -->|.dagger/| Power[Mode Power<br/>dagger call -m .dagger/ ci] | |
| 1946 | + Tree -->|.gitrust-ci.yml| Easy[Mode Easy<br/>dagger call -m ci-engine test-pr] | |
| 1947 | + Tree -->|rien| None[Pas de pipeline] | |
| 1948 | + Power --> Run[Exécution<br/>distante SSH] | |
| 1949 | + Easy --> Run | |
| 1950 | +</pre> | |
| 1951 | + | |
| 1952 | +<h4 id="mode-easy-recommandé-pour-commencer"><a class="header" href="#mode-easy-recommandé-pour-commencer">Mode Easy (recommandé pour commencer)</a></h4> | |
| 1953 | +<p>Créer <code>.gitrust-ci.yml</code> à la racine du dépôt :</p> | |
| 1954 | +<pre><code class="language-yaml"># Raccourci : charge un profil pré-configuré (rust | python | node) | |
| 1955 | +language: rust | |
| 1956 | + | |
| 1957 | +build: | |
| 1958 | + command: "cargo build --release" | |
| 1959 | + | |
| 1960 | +checks: | |
| 1961 | + lint: "cargo clippy -- -D warnings" | |
| 1962 | + format: "cargo fmt -- --check" | |
| 1963 | + | |
| 1964 | +tests: | |
| 1965 | + command: "cargo test --release" | |
| 1966 | +</code></pre> | |
| 1967 | +<p>Les profils disponibles se trouvent dans <code>deployment/ci-engine/profiles/</code> (rust.yaml, python.yaml, node.yaml) dans le dépôt source.</p> | |
| 1968 | +<h4 id="mode-power"><a class="header" href="#mode-power">Mode Power</a></h4> | |
| 1969 | +<p>Pour les utilisateurs avancés, créer un module Dagger complet dans <code>.dagger/</code> :</p> | |
| 1970 | +<pre><code>.dagger/ | |
| 1971 | +├── dagger.json | |
| 1972 | +├── src/ | |
| 1973 | +│ └── main.py # ou Go/TypeScript | |
| 1974 | +</code></pre> | |
| 1975 | +<p>La fonction <code>ci</code> du module est appelée directement :</p> | |
| 1976 | +<pre><code class="language-bash">dagger call -m .dagger/ ci | |
| 1977 | +</code></pre> | |
| 1978 | +<p>Avantage : accès au Daggerverse, composition, tests de pipeline. Voir la <a href="https://docs.dagger.io/">documentation Dagger</a>.</p> | |
| 1979 | +<h3 id="25-suivi-dun-pipeline"><a class="header" href="#25-suivi-dun-pipeline">2.5 Suivi d’un pipeline</a></h3> | |
| 1980 | +<p>Après un <code>git push</code>, une entrée apparaît dans l’onglet <strong>CI</strong> du dépôt :</p> | |
| 1981 | +<pre class="mermaid">stateDiagram-v2 | |
| 1982 | + [*] --> Pending: create_pipeline | |
| 1983 | + Pending --> Running: worker picks CiTask | |
| 1984 | + Running --> Success: exit 0 | |
| 1985 | + Running --> Failure: exit != 0 | |
| 1986 | + Running --> Cancelled: timeout / auto_cancel / manuel | |
| 1987 | + Success --> [*] | |
| 1988 | + Failure --> [*] | |
| 1989 | + Cancelled --> [*] | |
| 1990 | +</pre> | |
| 1991 | + | |
| 1992 | +<p>Les logs stdout/stderr sont streamés ligne par ligne dans la table <code>ci_logs</code> et visibles en direct dans l’UI. En cas d’échec, une notification est envoyée au propriétaire du dépôt.</p> | |
| 1993 | +<hr> | |
| 1994 | +<h2 id="3-mettre-en-place-le-dependency-tracker"><a class="header" href="#3-mettre-en-place-le-dependency-tracker">3. Mettre en place le Dependency Tracker</a></h2> | |
| 1995 | +<p>Cette partie est totalement indépendante de la CI. Elle scanne le code poussé et produit un SBOM CycloneDX, puis (optionnellement) l’envoie à Dependency-Track pour une analyse de vulnérabilités.</p> | |
| 1996 | +<h3 id="31-installer-syft"><a class="header" href="#31-installer-syft">3.1 Installer Syft</a></h3> | |
| 1997 | +<p>Sur la machine Gitrust (le scan se fait localement, pas sur le builder) :</p> | |
| 1998 | +<pre><code class="language-bash"># Installation officielle | |
| 1999 | +curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh \ | |
| 2000 | + | sh -s -- -b /usr/local/bin | |
| 2001 | + | |
| 2002 | +# Vérification | |
| 2003 | +syft --version | |
| 2004 | +</code></pre> | |
| 2005 | +<p>Dans <code>.env</code> :</p> | |
| 2006 | +<pre><code class="language-env">CI_SBOM_ENABLED=true | |
| 2007 | +CI_SYFT_BIN=/usr/local/bin/syft # optionnel, défaut: syft dans PATH | |
| 2008 | +</code></pre> | |
| 2009 | +<p>À ce stade : à chaque push, un SBOM CycloneDX est généré et stocké (sans upload externe). Visible dans l’onglet <strong>Security</strong> du dépôt : nombre de composants, sha256 du BOM.</p> | |
| 2010 | +<h3 id="32-déployer-dependency-track"><a class="header" href="#32-déployer-dependency-track">3.2 Déployer Dependency-Track</a></h3> | |
| 2011 | +<p>Dependency-Track est une application Java qui stocke les SBOM et corrèle avec les bases CVE/OSV/NVD. Déploiement Docker recommandé :</p> | |
| 2012 | +<pre><code class="language-bash">mkdir -p /opt/dtrack && cd /opt/dtrack | |
| 2013 | +curl -L -o docker-compose.yml \ | |
| 2014 | + https://dependencytrack.org/docker-compose.yml | |
| 2015 | +docker compose up -d | |
| 2016 | +</code></pre> | |
| 2017 | +<p>L’API est disponible sur <code>http://localhost:8081</code> et l’UI sur <code>http://localhost:8080</code>. | |
| 2018 | +Login initial : <code>admin</code> / <code>admin</code> (à changer immédiatement).</p> | |
| 2019 | +<h3 id="33-créer-une-clé-api"><a class="header" href="#33-créer-une-clé-api">3.3 Créer une clé API</a></h3> | |
| 2020 | +<p>Dans Dependency-Track → <strong>Administration</strong> → <strong>Access Management</strong> → <strong>Teams</strong> :</p> | |
| 2021 | +<ol> | |
| 2022 | +<li>Créer (ou réutiliser) une équipe <code>gitrust</code>.</li> | |
| 2023 | +<li>Lui attribuer les permissions : | |
| 2024 | +<ul> | |
| 2025 | +<li><code>BOM_UPLOAD</code></li> | |
| 2026 | +<li><code>PROJECT_CREATION_UPLOAD</code></li> | |
| 2027 | +<li><code>VIEW_PORTFOLIO</code></li> | |
| 2028 | +<li><code>VIEW_VULNERABILITY</code></li> | |
| 2029 | +</ul> | |
| 2030 | +</li> | |
| 2031 | +<li>Générer une API key et la copier.</li> | |
| 2032 | +</ol> | |
| 2033 | +<h3 id="34-configurer-gitrust"><a class="header" href="#34-configurer-gitrust">3.4 Configurer Gitrust</a></h3> | |
| 2034 | +<p>Ajouter au <code>.env</code> :</p> | |
| 2035 | +<pre><code class="language-env">CI_DTRACK_ENABLED=true | |
| 2036 | +CI_DTRACK_URL=http://localhost:8081 | |
| 2037 | +CI_DTRACK_API_KEY=odt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | |
| 2038 | +</code></pre> | |
| 2039 | +<p>Redémarrer Gitrust. À chaque push :</p> | |
| 2040 | +<pre class="mermaid">sequenceDiagram | |
| 2041 | + participant Push as post-receive | |
| 2042 | + participant Sbom as SbomService | |
| 2043 | + participant Git as git archive | |
| 2044 | + participant Syft | |
| 2045 | + participant Dtrack as Dependency-Track | |
| 2046 | + participant DB as sbom_reports | |
| 2047 | + | |
| 2048 | + Push->>Sbom: process_push(sha, ref) | |
| 2049 | + Sbom->>DB: upsert status=pending | |
| 2050 | + Sbom->>Git: archive sha | tar -x tmpdir | |
| 2051 | + Sbom->>Syft: scan dir:tmpdir -o cyclonedx-json | |
| 2052 | + Syft-->>Sbom: BOM bytes | |
| 2053 | + Sbom->>DB: update sha256 | |
| 2054 | + Sbom->>Dtrack: PUT /api/v1/bom (base64) | |
| 2055 | + Dtrack-->>Sbom: token | |
| 2056 | + loop max 30s | |
| 2057 | + Sbom->>Dtrack: GET /api/v1/bom/token/{token} | |
| 2058 | + Dtrack-->>Sbom: processing ? | |
| 2059 | + end | |
| 2060 | + Sbom->>Dtrack: GET /api/v1/finding/project/{uuid} | |
| 2061 | + Dtrack-->>Sbom: findings[] | |
| 2062 | + Sbom->>DB: update status=success<br/>+ critical/high/medium/low | |
| 2063 | +</pre> | |
| 2064 | + | |
| 2065 | +<h3 id="35-lire-les-résultats"><a class="header" href="#35-lire-les-résultats">3.5 Lire les résultats</a></h3> | |
| 2066 | +<p>Onglet <strong>Security</strong> du dépôt → encart SBOM :</p> | |
| 2067 | +<ul> | |
| 2068 | +<li>Nombre de composants détectés</li> | |
| 2069 | +<li>Compteurs par sévérité : Critical / High / Medium / Low</li> | |
| 2070 | +<li>Lien direct vers le projet dans Dependency-Track (si l’UUID est résolu)</li> | |
| 2071 | +<li>Hash sha256 du BOM (traçabilité)</li> | |
| 2072 | +</ul> | |
| 2073 | +<p>Si Dependency-Track met plus de 30s à analyser, le status reste <code>processing</code> — un sweeper ultérieur ira rechercher les findings.</p> | |
| 2074 | +<hr> | |
| 2075 | +<h2 id="4-débogage"><a class="header" href="#4-débogage">4. Débogage</a></h2> | |
| 2076 | +<h3 id="problèmes-ci-courants"><a class="header" href="#problèmes-ci-courants">Problèmes CI courants</a></h3> | |
| 2077 | +<div class="table-wrapper"> | |
| 2078 | +<table> | |
| 2079 | +<thead> | |
| 2080 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Vérifier</th></tr> | |
| 2081 | +</thead> | |
| 2082 | +<tbody> | |
| 2083 | +<tr><td>Pipeline reste <code>pending</code></td><td>Worker non démarré, ou channel saturé</td><td>Logs <code>CI worker started</code>, <code>CI_MAX_CONCURRENT</code></td></tr> | |
| 2084 | +<tr><td><code>Échec rsync vers le serveur de build</code></td><td>SSH bloqué, clé absente</td><td><code>ssh -p ${CI_REMOTE_SSH_PORT} ${CI_REMOTE_USER}@${CI_REMOTE_HOST}</code> manuel</td></tr> | |
| 2085 | +<tr><td><code>dagger: command not found</code></td><td>Dagger non installé sur le builder</td><td>Relancer <code>setup-remote-ci.sh</code></td></tr> | |
| 2086 | +<tr><td>Status <code>Cancelled</code> inattendu</td><td>Timeout (<code>CI_DEFAULT_TIMEOUT</code>) ou auto-cancel</td><td>Augmenter le timeout, vérifier pipelines concurrents</td></tr> | |
| 2087 | +</tbody> | |
| 2088 | +</table> | |
| 2089 | +</div> | |
| 2090 | +<h3 id="problèmes-sbom-courants"><a class="header" href="#problèmes-sbom-courants">Problèmes SBOM courants</a></h3> | |
| 2091 | +<div class="table-wrapper"> | |
| 2092 | +<table> | |
| 2093 | +<thead> | |
| 2094 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Vérifier</th></tr> | |
| 2095 | +</thead> | |
| 2096 | +<tbody> | |
| 2097 | +<tr><td><code>SBOM generation disabled</code></td><td><code>CI_SBOM_ENABLED=false</code></td><td><code>.env</code></td></tr> | |
| 2098 | +<tr><td><code>syft spawn failed</code></td><td>Binaire introuvable</td><td><code>which syft</code>, <code>CI_SYFT_BIN</code></td></tr> | |
| 2099 | +<tr><td><code>invalid commit sha</code></td><td>SHA non hex 40 chars</td><td>Rare, signale un bug</td></tr> | |
| 2100 | +<tr><td><code>Dtrack upload 401</code></td><td>API key invalide ou permissions manquantes</td><td>Régénérer, vérifier les 4 permissions</td></tr> | |
| 2101 | +<tr><td>Status <code>processing</code> indéfiniment</td><td>Dtrack surchargé, analyse lente</td><td>Attendre, ou relancer un push</td></tr> | |
| 2102 | +</tbody> | |
| 2103 | +</table> | |
| 2104 | +</div> | |
| 2105 | +<h3 id="logs-utiles"><a class="header" href="#logs-utiles">Logs utiles</a></h3> | |
| 2106 | +<pre><code class="language-bash"># Logs Gitrust (systemd) | |
| 2107 | +journalctl -u gitrust -f | grep -E "CI|SBOM|sbom|pipeline" | |
| 2108 | + | |
| 2109 | +# Vérifier un pipeline en DB | |
| 2110 | +psql $DATABASE_URL -c "SELECT id, status, commit_sha, created_at FROM ci_pipelines ORDER BY created_at DESC LIMIT 10;" | |
| 2111 | + | |
| 2112 | +# Vérifier un SBOM | |
| 2113 | +psql $DATABASE_URL -c "SELECT commit_sha, status, components_count, critical_count, high_count FROM sbom_reports ORDER BY created_at DESC LIMIT 10;" | |
| 2114 | +</code></pre> | |
| 2115 | +<hr> | |
| 2116 | +<h2 id="5-checklist-récapitulative"><a class="header" href="#5-checklist-récapitulative">5. Checklist récapitulative</a></h2> | |
| 2117 | +<p><strong>CI :</strong></p> | |
| 2118 | +<ul> | |
| 2119 | +<li><input disabled="" type="checkbox"> Docker + Dagger installés sur le serveur de build (<code>setup-remote-ci.sh</code>)</li> | |
| 2120 | +<li><input disabled="" type="checkbox"> <code>CI_ENABLED=true</code> et <code>CI_REMOTE_*</code> dans <code>.env</code></li> | |
| 2121 | +<li><input disabled="" type="checkbox"> Gitrust redémarré</li> | |
| 2122 | +<li><input disabled="" type="checkbox"> CI activée dans Settings → CI pour chaque dépôt</li> | |
| 2123 | +<li><input disabled="" type="checkbox"> Fichier <code>.gitrust-ci.yml</code> (Easy) ou <code>.dagger/</code> (Power) commité</li> | |
| 2124 | +<li><input disabled="" type="checkbox"> Push → pipeline visible dans l’onglet CI</li> | |
| 2125 | +</ul> | |
| 2126 | +<p><strong>Dependency Tracker :</strong></p> | |
| 2127 | +<ul> | |
| 2128 | +<li><input disabled="" type="checkbox"> Syft installé sur la machine Gitrust</li> | |
| 2129 | +<li><input disabled="" type="checkbox"> <code>CI_SBOM_ENABLED=true</code> dans <code>.env</code></li> | |
| 2130 | +<li><input disabled="" type="checkbox"> (Optionnel) Dependency-Track déployé + API key créée avec les 4 permissions</li> | |
| 2131 | +<li><input disabled="" type="checkbox"> (Optionnel) <code>CI_DTRACK_ENABLED=true</code>, <code>CI_DTRACK_URL</code>, <code>CI_DTRACK_API_KEY</code> dans <code>.env</code></li> | |
| 2132 | +<li><input disabled="" type="checkbox"> Gitrust redémarré</li> | |
| 2133 | +<li><input disabled="" type="checkbox"> Push → SBOM visible dans l’onglet Security</li> | |
| 2134 | +</ul> | |
| 2135 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 2136 | +<h1 id="durcir-linstance-avec-fail2ban"><a class="header" href="#durcir-linstance-avec-fail2ban">Durcir l’instance avec Fail2ban</a></h1> | |
| 2137 | +<p>Configuration complète pour protéger un déploiement gitrust exposant :</p> | |
| 2138 | +<ul> | |
| 2139 | +<li><strong>sshd système</strong> sur <code>:2022</code> (admin)</li> | |
| 2140 | +<li><strong>Nginx</strong> en reverse proxy HTTPS <code>:443</code> + redirect <code>:80</code> + <code>stream :22 → :2222</code></li> | |
| 2141 | +<li><strong>Gitrust</strong> (web <code>127.0.0.1:4000</code>, SSH russh <code>127.0.0.1:2222</code>)</li> | |
| 2142 | +<li><strong>Dagger</strong> CI runner (local, pas d’exposition réseau directe)</li> | |
| 2143 | +<li><strong>Dependency-Track</strong> API <code>:8081</code> + UI <code>:8080</code> (si exposés)</li> | |
| 2144 | +<li><strong>PostgreSQL</strong> <code>127.0.0.1:5432</code> (défensif au cas où le bind fuit)</li> | |
| 2145 | +</ul> | |
| 2146 | +<hr> | |
| 2147 | +<h2 id="1-installation"><a class="header" href="#1-installation">1. Installation</a></h2> | |
| 2148 | +<pre><code class="language-bash">sudo apt install -y fail2ban | |
| 2149 | +sudo systemctl enable --now fail2ban | |
| 2150 | +fail2ban-client --version | |
| 2151 | +</code></pre> | |
| 2152 | +<p>Vérifier que <code>ufw</code> est actif (fournit <code>banaction = ufw</code> dans la config) :</p> | |
| 2153 | +<pre><code class="language-bash">sudo ufw status | |
| 2154 | +</code></pre> | |
| 2155 | +<hr> | |
| 2156 | +<h2 id="2-fichier-principal-etcfail2banjaillocal"><a class="header" href="#2-fichier-principal-etcfail2banjaillocal">2. Fichier principal <code>/etc/fail2ban/jail.local</code></a></h2> | |
| 2157 | +<p>À placer via :</p> | |
| 2158 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/jail.local <<'EOF' | |
| 2159 | +[Le contenu ci-dessous] | |
| 2160 | +EOF | |
| 2161 | +</code></pre> | |
| 2162 | +<pre><code class="language-ini"># ============================================================================= | |
| 2163 | +# Défauts globaux | |
| 2164 | +# ============================================================================= | |
| 2165 | +[DEFAULT] | |
| 2166 | +backend = systemd | |
| 2167 | +bantime = 1h | |
| 2168 | +findtime = 10m | |
| 2169 | +maxretry = 5 | |
| 2170 | + | |
| 2171 | +# LAN privé et loopback jamais bannis | |
| 2172 | +ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 | |
| 2173 | + | |
| 2174 | +# UFW | |
| 2175 | +banaction = ufw | |
| 2176 | +banaction_allports = ufw | |
| 2177 | + | |
| 2178 | +# Notifications (optionnel — nécessite un relay SMTP local) | |
| 2179 | +# destemail = contact@gitrust.eu | |
| 2180 | +# sender = fail2ban@votre-serveur.example.com | |
| 2181 | +# action = %(action_mwl)s | |
| 2182 | + | |
| 2183 | +# ============================================================================= | |
| 2184 | +# 1) sshd admin système — port 2022 | |
| 2185 | +# ============================================================================= | |
| 2186 | +[sshd] | |
| 2187 | +enabled = true | |
| 2188 | +port = 2022 | |
| 2189 | +filter = sshd | |
| 2190 | +backend = %(sshd_backend)s | |
| 2191 | +logpath = %(sshd_log)s | |
| 2192 | +maxretry = 3 | |
| 2193 | +findtime = 10m | |
| 2194 | +bantime = 1h | |
| 2195 | + | |
| 2196 | +# ============================================================================= | |
| 2197 | +# 2) Nginx — 401/403 auth basic (si un jour activé sur /admin, /metrics, etc.) | |
| 2198 | +# ============================================================================= | |
| 2199 | +[nginx-http-auth] | |
| 2200 | +enabled = true | |
| 2201 | +port = http,https | |
| 2202 | +filter = nginx-http-auth | |
| 2203 | +logpath = /var/log/nginx/gitrust.error.log | |
| 2204 | +maxretry = 5 | |
| 2205 | + | |
| 2206 | +# ============================================================================= | |
| 2207 | +# 3) Nginx — scanners d'URL (wp-admin, .env, phpmyadmin, config.php, etc.) | |
| 2208 | +# ============================================================================= | |
| 2209 | +[nginx-botsearch] | |
| 2210 | +enabled = true | |
| 2211 | +port = http,https | |
| 2212 | +filter = nginx-botsearch | |
| 2213 | +logpath = /var/log/nginx/gitrust.access.log | |
| 2214 | +maxretry = 2 | |
| 2215 | +findtime = 10m | |
| 2216 | +bantime = 24h | |
| 2217 | + | |
| 2218 | +# ============================================================================= | |
| 2219 | +# 4) Nginx — bad user-agents (scanners agressifs, masscan, nikto, etc.) | |
| 2220 | +# ============================================================================= | |
| 2221 | +[nginx-badbots] | |
| 2222 | +enabled = true | |
| 2223 | +port = http,https | |
| 2224 | +filter = nginx-badbots | |
| 2225 | +logpath = /var/log/nginx/gitrust.access.log | |
| 2226 | +maxretry = 2 | |
| 2227 | +bantime = 24h | |
| 2228 | + | |
| 2229 | +# ============================================================================= | |
| 2230 | +# 5) Nginx — dépassement limit_req (voir section 4 — zones HTTPS) | |
| 2231 | +# ============================================================================= | |
| 2232 | +[nginx-limit-req] | |
| 2233 | +enabled = true | |
| 2234 | +port = http,https | |
| 2235 | +filter = nginx-limit-req | |
| 2236 | +logpath = /var/log/nginx/gitrust.error.log | |
| 2237 | +maxretry = 10 | |
| 2238 | +findtime = 5m | |
| 2239 | +bantime = 1h | |
| 2240 | + | |
| 2241 | +# ============================================================================= | |
| 2242 | +# 6) Gitrust — brute force login (formulaire + API JWT) | |
| 2243 | +# ============================================================================= | |
| 2244 | +[gitrust-login] | |
| 2245 | +enabled = true | |
| 2246 | +port = http,https | |
| 2247 | +filter = gitrust-login | |
| 2248 | +logpath = /var/log/nginx/gitrust.access.log | |
| 2249 | +maxretry = 5 | |
| 2250 | +findtime = 10m | |
| 2251 | +bantime = 1h | |
| 2252 | + | |
| 2253 | +# ============================================================================= | |
| 2254 | +# 7) Gitrust — abus API (tokens personnels leaked, scrapers) | |
| 2255 | +# ============================================================================= | |
| 2256 | +[gitrust-api-abuse] | |
| 2257 | +enabled = true | |
| 2258 | +port = http,https | |
| 2259 | +filter = gitrust-api-abuse | |
| 2260 | +logpath = /var/log/nginx/gitrust.access.log | |
| 2261 | +maxretry = 30 | |
| 2262 | +findtime = 1m | |
| 2263 | +bantime = 2h | |
| 2264 | + | |
| 2265 | +# ============================================================================= | |
| 2266 | +# 8) Gitrust SSH (russh) — brute force clé publique | |
| 2267 | +# ============================================================================= | |
| 2268 | +[gitrust-ssh] | |
| 2269 | +enabled = true | |
| 2270 | +port = 22,2222 | |
| 2271 | +filter = gitrust-ssh | |
| 2272 | +backend = systemd | |
| 2273 | +journalmatch = _SYSTEMD_UNIT=gitrust.service | |
| 2274 | +maxretry = 5 | |
| 2275 | +findtime = 10m | |
| 2276 | +bantime = 1h | |
| 2277 | + | |
| 2278 | +# ============================================================================= | |
| 2279 | +# 9) Gitrust import worker — tokens invalides sur clone de dépôts externes | |
| 2280 | +# ============================================================================= | |
| 2281 | +[gitrust-import] | |
| 2282 | +enabled = true | |
| 2283 | +port = http,https | |
| 2284 | +filter = gitrust-import | |
| 2285 | +backend = systemd | |
| 2286 | +journalmatch = _SYSTEMD_UNIT=gitrust.service | |
| 2287 | +maxretry = 3 | |
| 2288 | +findtime = 5m | |
| 2289 | +bantime = 30m | |
| 2290 | + | |
| 2291 | +# ============================================================================= | |
| 2292 | +# 10) Dependency-Track UI — brute force login (port 8080) | |
| 2293 | +# ============================================================================= | |
| 2294 | +# Activer UNIQUEMENT si DTrack est exposé publiquement. | |
| 2295 | +# Si DTrack est sur réseau privé/loopback, laisser enabled=false. | |
| 2296 | +[dtrack-login] | |
| 2297 | +enabled = false | |
| 2298 | +port = 8080,http,https | |
| 2299 | +filter = dtrack-login | |
| 2300 | +logpath = /var/log/nginx/dtrack.access.log | |
| 2301 | +maxretry = 5 | |
| 2302 | +findtime = 10m | |
| 2303 | +bantime = 2h | |
| 2304 | + | |
| 2305 | +# ============================================================================= | |
| 2306 | +# 11) Dependency-Track API — abus clé API (port 8081) | |
| 2307 | +# ============================================================================= | |
| 2308 | +[dtrack-api] | |
| 2309 | +enabled = false | |
| 2310 | +port = 8081,http,https | |
| 2311 | +filter = dtrack-api | |
| 2312 | +logpath = /var/log/nginx/dtrack.access.log | |
| 2313 | +maxretry = 10 | |
| 2314 | +findtime = 5m | |
| 2315 | +bantime = 1h | |
| 2316 | + | |
| 2317 | +# ============================================================================= | |
| 2318 | +# 12) PostgreSQL — tentatives de connexion invalides (défensif) | |
| 2319 | +# ============================================================================= | |
| 2320 | +# PG doit binder 127.0.0.1 uniquement. Ce jail protège si la config fuit. | |
| 2321 | +[postgresql] | |
| 2322 | +enabled = true | |
| 2323 | +port = 5432 | |
| 2324 | +filter = postgresql | |
| 2325 | +backend = systemd | |
| 2326 | +journalmatch = _SYSTEMD_UNIT=postgresql.service + _SYSTEMD_UNIT=docker.service | |
| 2327 | +maxretry = 5 | |
| 2328 | +findtime = 10m | |
| 2329 | +bantime = 1h | |
| 2330 | + | |
| 2331 | +# ============================================================================= | |
| 2332 | +# 13) Récidive — ban long pour IPs bannies 3x en 24h, tous jails confondus | |
| 2333 | +# ============================================================================= | |
| 2334 | +[recidive] | |
| 2335 | +enabled = true | |
| 2336 | +logpath = /var/log/fail2ban.log | |
| 2337 | +banaction = %(banaction_allports)s | |
| 2338 | +bantime = 1w | |
| 2339 | +findtime = 1d | |
| 2340 | +maxretry = 3 | |
| 2341 | +</code></pre> | |
| 2342 | +<hr> | |
| 2343 | +<h2 id="3-filtres-personnalisés"><a class="header" href="#3-filtres-personnalisés">3. Filtres personnalisés</a></h2> | |
| 2344 | +<p>À placer dans <code>/etc/fail2ban/filter.d/</code> (un fichier par jail custom).</p> | |
| 2345 | +<h3 id="31-gitrust-loginconf"><a class="header" href="#31-gitrust-loginconf">3.1 <code>gitrust-login.conf</code></a></h3> | |
| 2346 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-login.conf <<'EOF' | |
| 2347 | +[Definition] | |
| 2348 | +# POST sur /login ou endpoints JWT avec code 4xx (401/403/422/429) | |
| 2349 | +failregex = ^<HOST> .* "POST /(login|api/v1/auth/login|api/v1/auth/refresh|api/v1/auth/2fa)[^"]*" (401|403|422|429) .*$ | |
| 2350 | +ignoreregex = | |
| 2351 | +EOF | |
| 2352 | +</code></pre> | |
| 2353 | +<h3 id="32-gitrust-api-abuseconf"><a class="header" href="#32-gitrust-api-abuseconf">3.2 <code>gitrust-api-abuse.conf</code></a></h3> | |
| 2354 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-api-abuse.conf <<'EOF' | |
| 2355 | +[Definition] | |
| 2356 | +# Abus API : 401/403 répétés sur /api/v1/* (hors auth déjà couvert par gitrust-login) | |
| 2357 | +failregex = ^<HOST> .* "(GET|POST|PUT|DELETE|PATCH) /api/v1/(?!auth/)[^"]*" (401|403) .*$ | |
| 2358 | +ignoreregex = | |
| 2359 | +EOF | |
| 2360 | +</code></pre> | |
| 2361 | +<h3 id="33-gitrust-sshconf"><a class="header" href="#33-gitrust-sshconf">3.3 <code>gitrust-ssh.conf</code></a></h3> | |
| 2362 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-ssh.conf <<'EOF' | |
| 2363 | +[Definition] | |
| 2364 | +# russh / gitrust-ssh : échecs d'authentification | |
| 2365 | +# Regex à raffiner après observation des logs réels via : | |
| 2366 | +# sudo fail2ban-regex <(journalctl -u gitrust --no-pager -n 2000) \ | |
| 2367 | +# /etc/fail2ban/filter.d/gitrust-ssh.conf | |
| 2368 | +failregex = ^.*ssh.*auth(entication)? (failed|failure).*from <HOST>.*$ | |
| 2369 | + ^.*[Rr]ejected.*(public[_ ]?key|password).*from <HOST>.*$ | |
| 2370 | + ^.*no matching (ssh|public) key.*from <HOST>.*$ | |
| 2371 | + ^.*unknown user.*from <HOST>.*$ | |
| 2372 | + ^.*gitrust.*auth.*refused.*<HOST>.*$ | |
| 2373 | +ignoreregex = | |
| 2374 | +EOF | |
| 2375 | +</code></pre> | |
| 2376 | +<h3 id="34-gitrust-importconf"><a class="header" href="#34-gitrust-importconf">3.4 <code>gitrust-import.conf</code></a></h3> | |
| 2377 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-import.conf <<'EOF' | |
| 2378 | +[Definition] | |
| 2379 | +# Import worker : tokens OAuth/GitHub invalides sur clone de dépôts externes | |
| 2380 | +failregex = ^.*import.*authentication failed.*from <HOST>.*$ | |
| 2381 | + ^.*import.*invalid (token|credentials).*from <HOST>.*$ | |
| 2382 | + ^.*import.*clone failed.*401.*from <HOST>.*$ | |
| 2383 | +ignoreregex = | |
| 2384 | +EOF | |
| 2385 | +</code></pre> | |
| 2386 | +<h3 id="35-dtrack-loginconf-si-dtrack-exposé"><a class="header" href="#35-dtrack-loginconf-si-dtrack-exposé">3.5 <code>dtrack-login.conf</code> (si DTrack exposé)</a></h3> | |
| 2387 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/dtrack-login.conf <<'EOF' | |
| 2388 | +[Definition] | |
| 2389 | +# Dependency-Track : brute force du POST /api/v1/user/login | |
| 2390 | +failregex = ^<HOST> .* "POST /api/v1/user/login[^"]*" (401|403) .*$ | |
| 2391 | + ^<HOST> .* "POST /api/v1/user/forceChangePassword[^"]*" (401|403) .*$ | |
| 2392 | +ignoreregex = | |
| 2393 | +EOF | |
| 2394 | +</code></pre> | |
| 2395 | +<h3 id="36-dtrack-apiconf-si-dtrack-exposé"><a class="header" href="#36-dtrack-apiconf-si-dtrack-exposé">3.6 <code>dtrack-api.conf</code> (si DTrack exposé)</a></h3> | |
| 2396 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/dtrack-api.conf <<'EOF' | |
| 2397 | +[Definition] | |
| 2398 | +# Dependency-Track API : abus de clé API ou requêtes non authentifiées | |
| 2399 | +failregex = ^<HOST> .* "[^"]+ /api/v1/[^"]*" 401 .*$ | |
| 2400 | + ^<HOST> .* "[^"]+ /api/v1/[^"]*" 403 .*$ | |
| 2401 | +ignoreregex = | |
| 2402 | +EOF | |
| 2403 | +</code></pre> | |
| 2404 | +<h3 id="37-postgresqlconf-créer-si-absent"><a class="header" href="#37-postgresqlconf-créer-si-absent">3.7 <code>postgresql.conf</code> (créer si absent)</a></h3> | |
| 2405 | +<pre><code class="language-bash">if [ ! -f /etc/fail2ban/filter.d/postgresql.conf ]; then | |
| 2406 | +sudo tee /etc/fail2ban/filter.d/postgresql.conf <<'EOF' | |
| 2407 | +[Definition] | |
| 2408 | +failregex = ^.*authentication failed for user.*host=<HOST>.*$ | |
| 2409 | + ^.*FATAL:.*password authentication failed.*<HOST>.*$ | |
| 2410 | + ^.*no pg_hba\.conf entry for host "<HOST>".*$ | |
| 2411 | +ignoreregex = | |
| 2412 | +EOF | |
| 2413 | +fi | |
| 2414 | +</code></pre> | |
| 2415 | +<h3 id="38-nginx-limit-reqconf-créer-si-absent-sur-votre-distro"><a class="header" href="#38-nginx-limit-reqconf-créer-si-absent-sur-votre-distro">3.8 <code>nginx-limit-req.conf</code> (créer si absent sur votre distro)</a></h3> | |
| 2416 | +<pre><code class="language-bash">if [ ! -f /etc/fail2ban/filter.d/nginx-limit-req.conf ]; then | |
| 2417 | +sudo tee /etc/fail2ban/filter.d/nginx-limit-req.conf <<'EOF' | |
| 2418 | +[Definition] | |
| 2419 | +failregex = ^.*limiting requests, excess: .* by zone .*, client: <HOST>.*$ | |
| 2420 | +ignoreregex = | |
| 2421 | +EOF | |
| 2422 | +fi | |
| 2423 | +</code></pre> | |
| 2424 | +<h3 id="39-nginx-badbotsconf--obligatoire-pas-fourni-par-debianubuntu"><a class="header" href="#39-nginx-badbotsconf--obligatoire-pas-fourni-par-debianubuntu">3.9 <code>nginx-badbots.conf</code> — OBLIGATOIRE (pas fourni par Debian/Ubuntu)</a></h3> | |
| 2425 | +<p>Le paquet <code>fail2ban</code> Debian/Ubuntu fournit <code>apache-badbots.conf</code> mais PAS <code>nginx-badbots.conf</code>. Sans ce filter, <code>fail2ban-client reload</code> affiche :</p> | |
| 2426 | +<pre><code>Found no accessible config files for 'filter.d/nginx-badbots' under /etc/fail2ban | |
| 2427 | +</code></pre> | |
| 2428 | +<p>Le filter ci-dessous réutilise la liste de bad user-agents de <code>apache-badbots</code> avec un <code>failregex</code> adapté au format <code>combined</code> de nginx :</p> | |
| 2429 | +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/nginx-badbots.conf <<'EOF' | |
| 2430 | +[Definition] | |
| 2431 | +badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider | |
| 2432 | +badbots = Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|ContentSmartz|DataCha0s/2\.0|DBrowse 1\.4b|DBrowse 1\.4d|Demo Bot DOT 16b|Demo Bot Z 16b|DSurf15a 01|DSurf15a 71|DSurf15a 81|DSurf15a VA|EBrowse 1\.4b|Educate Search VxB|EmailSiphon|EmailSpider|EmailWolf 1\.00|ExtractorPro|Franklin Locator 1\.8|Full Web Bot 0416B|Guestbook Auto Submitter|ISC Systems iRc Search 2\.1|LMQueueBot/0\.2|LWP\:\:Simple/5\.803|Microsoft URL Control - 6\.00\.8xxx|Missigua Locator 1\.9|Mozilla/4\.0 efp@gmx\.net|Nsauditor/1\.x|PBrowse 1\.4b|PEval 1\.4b|Poirot|psycheclone|sogou spider|sohu agent|VadixBot|WebVulnCrawl\.unknown/1\.0 libwww-perl/5\.803|Wells Search II|WEP Search 00 | |
| 2433 | + | |
| 2434 | +failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$ | |
| 2435 | +ignoreregex = | |
| 2436 | + | |
| 2437 | +datepattern = ^[^\[]*\[({DATE}) | |
| 2438 | + {^LN-BEG} | |
| 2439 | +EOF | |
| 2440 | +</code></pre> | |
| 2441 | +<p><strong>Alternative</strong> : si vous ne voulez pas maintenir la liste, simplement désactiver le jail (<code>enabled = false</code> dans le <code>[nginx-badbots]</code>) — la combinaison <code>nginx-botsearch</code> + <code>nginx-limit-req</code> + <code>gitrust-api-abuse</code> couvre déjà l’essentiel.</p> | |
| 2442 | +<hr> | |
| 2443 | +<h2 id="4-rate-limiting-côté-nginx-requis-par-nginx-limit-req"><a class="header" href="#4-rate-limiting-côté-nginx-requis-par-nginx-limit-req">4. Rate limiting côté Nginx (requis par <code>nginx-limit-req</code>)</a></h2> | |
| 2444 | +<h3 id="41-déclarer-les-zones-globales"><a class="header" href="#41-déclarer-les-zones-globales">4.1 Déclarer les zones globales</a></h3> | |
| 2445 | +<pre><code class="language-bash">sudo tee /etc/nginx/conf.d/gitrust-limit.conf <<'EOF' | |
| 2446 | +# Zones de rate limiting gitrust | |
| 2447 | +limit_req_zone $binary_remote_addr zone=gitrust_login:10m rate=1r/s; | |
| 2448 | +limit_req_zone $binary_remote_addr zone=gitrust_api:10m rate=10r/s; | |
| 2449 | +limit_req_zone $binary_remote_addr zone=gitrust_git:10m rate=30r/s; | |
| 2450 | +EOF | |
| 2451 | +</code></pre> | |
| 2452 | +<h3 id="42-ajouter-les-location-dans-etcnginxsites-availablegitrust"><a class="header" href="#42-ajouter-les-location-dans-etcnginxsites-availablegitrust">4.2 Ajouter les <code>location</code> dans <code>/etc/nginx/sites-available/gitrust</code></a></h3> | |
| 2453 | +<p>Dans le bloc <code>server { listen 443 ssl; ... }</code>, <strong>avant</strong> <code>location /</code> finale :</p> | |
| 2454 | +<pre><code class="language-nginx"># Protection brute force login (1 req/s par IP, burst 5) | |
| 2455 | +location ~ ^/(login|api/v1/auth/) { | |
| 2456 | + limit_req zone=gitrust_login burst=5 nodelay; | |
| 2457 | + proxy_pass http://gitrust_backend; | |
| 2458 | + proxy_set_header Host $host; | |
| 2459 | + proxy_set_header X-Real-IP $remote_addr; | |
| 2460 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 2461 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 2462 | +} | |
| 2463 | + | |
| 2464 | +# Protection API (10 req/s par IP, burst 20) | |
| 2465 | +location ^~ /api/v1/ { | |
| 2466 | + limit_req zone=gitrust_api burst=20 nodelay; | |
| 2467 | + proxy_pass http://gitrust_backend; | |
| 2468 | + proxy_set_header Host $host; | |
| 2469 | + proxy_set_header X-Real-IP $remote_addr; | |
| 2470 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 2471 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 2472 | +} | |
| 2473 | + | |
| 2474 | +# Protection Git smart HTTP (30 req/s — clone/push légitime peut être verbeux) | |
| 2475 | +location ~ ^/[^/]+/[^/]+\.git/ { | |
| 2476 | + limit_req zone=gitrust_git burst=50 nodelay; | |
| 2477 | + proxy_pass http://gitrust_backend; | |
| 2478 | + proxy_http_version 1.1; | |
| 2479 | + proxy_set_header Host $host; | |
| 2480 | + proxy_set_header X-Real-IP $remote_addr; | |
| 2481 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 2482 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 2483 | + proxy_buffering off; | |
| 2484 | + proxy_request_buffering off; | |
| 2485 | + client_max_body_size 2G; | |
| 2486 | +} | |
| 2487 | +</code></pre> | |
| 2488 | +<h3 id="43-reload"><a class="header" href="#43-reload">4.3 Reload</a></h3> | |
| 2489 | +<pre><code class="language-bash">sudo nginx -t && sudo systemctl reload nginx | |
| 2490 | +</code></pre> | |
| 2491 | +<hr> | |
| 2492 | +<h2 id="5-démarrage-et-validation"><a class="header" href="#5-démarrage-et-validation">5. Démarrage et validation</a></h2> | |
| 2493 | +<pre><code class="language-bash">sudo systemctl restart fail2ban | |
| 2494 | + | |
| 2495 | +# Liste des jails actifs | |
| 2496 | +sudo fail2ban-client status | |
| 2497 | +# Attendu : | |
| 2498 | +# sshd, nginx-http-auth, nginx-botsearch, nginx-badbots, nginx-limit-req, | |
| 2499 | +# gitrust-login, gitrust-api-abuse, gitrust-ssh, gitrust-import, | |
| 2500 | +# postgresql, recidive | |
| 2501 | +# (+ dtrack-login, dtrack-api si activées) | |
| 2502 | + | |
| 2503 | +# Stats par jail | |
| 2504 | +sudo fail2ban-client status gitrust-login | |
| 2505 | +sudo fail2ban-client status sshd | |
| 2506 | +</code></pre> | |
| 2507 | +<h3 id="valider-chaque-filtre-custom"><a class="header" href="#valider-chaque-filtre-custom">Valider chaque filtre custom</a></h3> | |
| 2508 | +<pre><code class="language-bash"># 1. gitrust-login contre l'access log nginx | |
| 2509 | +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \ | |
| 2510 | + /etc/fail2ban/filter.d/gitrust-login.conf | |
| 2511 | + | |
| 2512 | +# 2. gitrust-api-abuse | |
| 2513 | +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \ | |
| 2514 | + /etc/fail2ban/filter.d/gitrust-api-abuse.conf | |
| 2515 | + | |
| 2516 | +# 3. gitrust-ssh contre journald | |
| 2517 | +journalctl -u gitrust --no-pager -n 5000 > /tmp/gitrust.log | |
| 2518 | +sudo fail2ban-regex /tmp/gitrust.log \ | |
| 2519 | + /etc/fail2ban/filter.d/gitrust-ssh.conf | |
| 2520 | +rm /tmp/gitrust.log | |
| 2521 | + | |
| 2522 | +# 4. postgresql | |
| 2523 | +journalctl -u docker --no-pager -n 5000 | grep -i postgres > /tmp/pg.log | |
| 2524 | +sudo fail2ban-regex /tmp/pg.log \ | |
| 2525 | + /etc/fail2ban/filter.d/postgresql.conf | |
| 2526 | +</code></pre> | |
| 2527 | +<p><code>0 failregex found</code> = regex à ajuster après observation des logs réels de chaque service.</p> | |
| 2528 | +<h3 id="test-de-bannissement"><a class="header" href="#test-de-bannissement">Test de bannissement</a></h3> | |
| 2529 | +<pre><code class="language-bash"># Depuis un host HORS LAN (sinon ignoreip s'applique) | |
| 2530 | +for i in $(seq 1 10); do | |
| 2531 | + curl -sk -o /dev/null -w "%{http_code}\n" \ | |
| 2532 | + -X POST https://<votre-domaine>/login \ | |
| 2533 | + -d 'username=admin&password=wrong' | |
| 2534 | +done | |
| 2535 | + | |
| 2536 | +# Vérifier le ban | |
| 2537 | +ssh gitrust-host 'sudo fail2ban-client status gitrust-login' | |
| 2538 | +# Currently banned : 1 — Banned IP list : <IP test> | |
| 2539 | + | |
| 2540 | +# Débannir manuellement | |
| 2541 | +ssh gitrust-host 'sudo fail2ban-client unban <IP>' | |
| 2542 | +</code></pre> | |
| 2543 | +<hr> | |
| 2544 | +<h2 id="6-monitoring"><a class="header" href="#6-monitoring">6. Monitoring</a></h2> | |
| 2545 | +<pre><code class="language-bash"># Logs fail2ban temps réel | |
| 2546 | +sudo tail -f /var/log/fail2ban.log | |
| 2547 | + | |
| 2548 | +# Toutes les IPs bannies, tous jails confondus | |
| 2549 | +sudo fail2ban-client banned | |
| 2550 | + | |
| 2551 | +# Stats détaillées d'un jail | |
| 2552 | +sudo fail2ban-client status gitrust-ssh | |
| 2553 | +# Currently failed : 2 | |
| 2554 | +# Total failed : 47 | |
| 2555 | +# Currently banned : 1 | |
| 2556 | +# Total banned : 12 | |
| 2557 | +# Banned IP list : 203.0.113.42 | |
| 2558 | + | |
| 2559 | +sudo grep "Ban " /var/log/fail2ban.log | tail -20 | |
| 2560 | +</code></pre> | |
| 2561 | +<hr> | |
| 2562 | +<h2 id="7-matrice-récapitulative"><a class="header" href="#7-matrice-récapitulative">7. Matrice récapitulative</a></h2> | |
| 2563 | +<div class="table-wrapper"> | |
| 2564 | +<table> | |
| 2565 | +<thead> | |
| 2566 | +<tr><th>#</th><th>Jail</th><th>Port(s)</th><th>Source logs</th><th>Max retry</th><th>Ban time</th><th>Surface protégée</th></tr> | |
| 2567 | +</thead> | |
| 2568 | +<tbody> | |
| 2569 | +<tr><td>1</td><td><code>sshd</code></td><td>2022</td><td>journald sshd</td><td>3</td><td>1h</td><td>SSH admin</td></tr> | |
| 2570 | +<tr><td>2</td><td><code>nginx-http-auth</code></td><td>80,443</td><td>nginx error</td><td>5</td><td>1h</td><td>Basic auth (admin futur)</td></tr> | |
| 2571 | +<tr><td>3</td><td><code>nginx-botsearch</code></td><td>80,443</td><td>nginx access</td><td>2</td><td>24h</td><td>Scanners WP/PHP</td></tr> | |
| 2572 | +<tr><td>4</td><td><code>nginx-badbots</code></td><td>80,443</td><td>nginx access</td><td>2</td><td>24h</td><td>User-agents malveillants</td></tr> | |
| 2573 | +<tr><td>5</td><td><code>nginx-limit-req</code></td><td>80,443</td><td>nginx error</td><td>10</td><td>1h</td><td>Flood global</td></tr> | |
| 2574 | +<tr><td>6</td><td><code>gitrust-login</code></td><td>80,443</td><td>nginx access</td><td>5</td><td>1h</td><td>Brute force login UI + API</td></tr> | |
| 2575 | +<tr><td>7</td><td><code>gitrust-api-abuse</code></td><td>80,443</td><td>nginx access</td><td>30</td><td>2h</td><td>Scrapers API (tokens fuités)</td></tr> | |
| 2576 | +<tr><td>8</td><td><code>gitrust-ssh</code></td><td>22,2222</td><td>journald gitrust</td><td>5</td><td>1h</td><td>Brute force clé SSH Git</td></tr> | |
| 2577 | +<tr><td>9</td><td><code>gitrust-import</code></td><td>80,443</td><td>journald gitrust</td><td>3</td><td>30m</td><td>Brute force PAT/OAuth import</td></tr> | |
| 2578 | +<tr><td>10</td><td><code>dtrack-login</code></td><td>8080</td><td>nginx access</td><td>5</td><td>2h</td><td>Brute force UI Dep-Track</td></tr> | |
| 2579 | +<tr><td>11</td><td><code>dtrack-api</code></td><td>8081</td><td>nginx access</td><td>10</td><td>1h</td><td>Abus clé API Dep-Track</td></tr> | |
| 2580 | +<tr><td>12</td><td><code>postgresql</code></td><td>5432</td><td>journald</td><td>5</td><td>1h</td><td>Défense en profondeur PG</td></tr> | |
| 2581 | +<tr><td>13</td><td><code>recidive</code></td><td>all</td><td>fail2ban.log</td><td>3</td><td>1w</td><td>Méta-ban 3×/24h</td></tr> | |
| 2582 | +</tbody> | |
| 2583 | +</table> | |
| 2584 | +</div> | |
| 2585 | +<p><strong>Ordre de déclenchement typique</strong> : brute force → jail spécifique (ban 1h) → si récidive 3x → recidive (ban 1 semaine, tous ports).</p> | |
| 2586 | +<hr> | |
| 2587 | +<h2 id="8-notes-spécifiques-à-la-stack-gitrust"><a class="header" href="#8-notes-spécifiques-à-la-stack-gitrust">8. Notes spécifiques à la stack gitrust</a></h2> | |
| 2588 | +<h3 id="81-dagger-ci"><a class="header" href="#81-dagger-ci">8.1 Dagger (CI)</a></h3> | |
| 2589 | +<p>Dagger s’exécute <strong>localement</strong> sur la machine gitrust (ou un runner distant — voir <code>administration_manual/how-to/configurer-ci-runner-remote.md</code>). <strong>Aucun port réseau ouvert</strong> → pas de jail dédié.</p> | |
| 2590 | +<h3 id="82-dependency-track"><a class="header" href="#82-dependency-track">8.2 Dependency-Track</a></h3> | |
| 2591 | +<p>Si DTrack est déployé sur le même serveur et <strong>exposé</strong>, activer les jails 10 et 11 en mettant <code>enabled = true</code> et en pointant <code>logpath</code> vers les logs nginx du vhost DTrack.</p> | |
| 2592 | +<p>Si DTrack est <strong>interne</strong> (VPN, réseau privé), laisser <code>enabled = false</code> — le firewall suffit.</p> | |
| 2593 | +<p>Config DTrack recommandée :</p> | |
| 2594 | +<ul> | |
| 2595 | +<li>Bind sur <code>127.0.0.1</code> via <code>dtrack.url.base=http://127.0.0.1:8080</code></li> | |
| 2596 | +</ul> | |
| 2597 | +<h3 id="83-postgresql"><a class="header" href="#83-postgresql">8.3 PostgreSQL</a></h3> | |
| 2598 | +<p>Le jail <code>postgresql</code> est <strong>défensif</strong>. PG doit rester bindé sur <code>127.0.0.1:5432</code> via Docker. Vérifier :</p> | |
| 2599 | +<pre><code class="language-bash">sudo ss -tlnp | grep 5432 | |
| 2600 | +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0:5432 | |
| 2601 | +</code></pre> | |
| 2602 | +<h3 id="84-notifications"><a class="header" href="#84-notifications">8.4 Notifications</a></h3> | |
| 2603 | +<p>Pour recevoir un mail à chaque ban :</p> | |
| 2604 | +<ol> | |
| 2605 | +<li>Installer un relay SMTP local : <code>sudo apt install msmtp-mta</code></li> | |
| 2606 | +<li>Configurer <code>/etc/msmtprc</code> avec un compte SMTP</li> | |
| 2607 | +<li>Décommenter dans <code>[DEFAULT]</code> : | |
| 2608 | +<pre><code class="language-ini">destemail = contact@gitrust.eu | |
| 2609 | +sender = fail2ban@votre-serveur.example.com | |
| 2610 | +action = %(action_mwl)s | |
| 2611 | +</code></pre> | |
| 2612 | +</li> | |
| 2613 | +<li><code>sudo systemctl restart fail2ban</code></li> | |
| 2614 | +</ol> | |
| 2615 | +<hr> | |
| 2616 | +<h2 id="9-limites-et-évolutions"><a class="header" href="#9-limites-et-évolutions">9. Limites et évolutions</a></h2> | |
| 2617 | +<ul> | |
| 2618 | +<li><strong>IPv6</strong> : toutes les regex utilisent <code><HOST></code> qui matche IPv4 ET IPv6. Vérifier que UFW est configuré pour v6 également.</li> | |
| 2619 | +<li><strong>CDN/Cloudflare devant</strong> : si un CDN est ajouté, <code>$remote_addr</code> côté Nginx sera l’IP du CDN — il faut récupérer la vraie IP via <code>X-Forwarded-For</code> et propager au logging Nginx. Changer <code>failregex</code> en conséquence. Sinon les jails banniront le CDN.</li> | |
| 2620 | +<li><strong>Docker/Podman</strong> : si gitrust passe en conteneur, les logs de <code>gitrust.service</code> deviennent <code>docker.service</code> ou <code>podman.service</code> → mettre à jour <code>journalmatch</code> dans les jails 8 et 9.</li> | |
| 2621 | +<li><strong>GeoIP</strong> : pour bloquer des pays entiers en amont, ajouter <code>geo $blocked_country</code> dans Nginx (module <code>ngx_http_geoip2_module</code>) — complémentaire à fail2ban.</li> | |
| 2622 | +</ul> | |
| 2623 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 2624 | +<h1 id="régler-le-rate-limiting"><a class="header" href="#régler-le-rate-limiting">Régler le rate limiting</a></h1> | |
| 2625 | +<blockquote> | |
| 2626 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 2627 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 2628 | +</blockquote> | |
| 2629 | +<h2 id="todo-32"><a class="header" href="#todo-32">TODO</a></h2> | |
| 2630 | +<ul> | |
| 2631 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 2632 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 2633 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 2634 | +</ul> | |
| 2635 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 2636 | +<h1 id="forcer-le-2fa-sur-toute-linstance"><a class="header" href="#forcer-le-2fa-sur-toute-linstance">Forcer le 2FA sur toute l’instance</a></h1> | |
| 2637 | +<blockquote> | |
| 2638 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 2639 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 2640 | +</blockquote> | |
| 2641 | +<h2 id="todo-33"><a class="header" href="#todo-33">TODO</a></h2> | |
| 2642 | +<ul> | |
| 2643 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 2644 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 2645 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 2646 | +</ul> | |
| 2647 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 2648 | +<h1 id="dépanner-ssh"><a class="header" href="#dépanner-ssh">Dépanner SSH</a></h1> | |
| 2649 | +<blockquote> | |
| 2650 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 2651 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 2652 | +</blockquote> | |
| 2653 | +<h2 id="todo-34"><a class="header" href="#todo-34">TODO</a></h2> | |
| 2654 | +<ul> | |
| 2655 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 2656 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 2657 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 2658 | +</ul> | |
| 2659 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 2660 | +<h1 id="dépanner-la-ci"><a class="header" href="#dépanner-la-ci">Dépanner la CI</a></h1> | |
| 2661 | +<blockquote> | |
| 2662 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 2663 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 2664 | +</blockquote> | |
| 2665 | +<h2 id="todo-35"><a class="header" href="#todo-35">TODO</a></h2> | |
| 2666 | +<ul> | |
| 2667 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 2668 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 2669 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 2670 | +</ul> | |
| 2671 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 2672 | +<h1 id="gérer-les-utilisateurs-panel-admin"><a class="header" href="#gérer-les-utilisateurs-panel-admin">Gérer les utilisateurs (panel /admin)</a></h1> | |
| 2673 | +<blockquote> | |
| 2674 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 2675 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 2676 | +</blockquote> | |
| 2677 | +<h2 id="todo-36"><a class="header" href="#todo-36">TODO</a></h2> | |
| 2678 | +<ul> | |
| 2679 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 2680 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 2681 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 2682 | +</ul> | |
| 2683 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 2684 | +<h1 id="auditer-une-instance"><a class="header" href="#auditer-une-instance">Auditer une instance</a></h1> | |
| 2685 | +<blockquote> | |
| 2686 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 2687 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 2688 | +</blockquote> | |
| 2689 | +<h2 id="todo-37"><a class="header" href="#todo-37">TODO</a></h2> | |
| 2690 | +<ul> | |
| 2691 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 2692 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 2693 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 2694 | +</ul> | |
| 2695 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 2696 | +<h1 id="référence-1"><a class="header" href="#référence-1">Référence</a></h1> | |
| 2697 | +<blockquote> | |
| 2698 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 2699 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 2700 | +</blockquote> | |
| 2701 | +<h2 id="todo-38"><a class="header" href="#todo-38">TODO</a></h2> | |
| 2702 | +<ul> | |
| 2703 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 2704 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 2705 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 2706 | +</ul> | |
| 2707 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 2708 | +<h1 id="variables-denvironnement"><a class="header" href="#variables-denvironnement">Variables d’environnement</a></h1> | |
| 2709 | +<blockquote> | |
| 2710 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 2711 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 2712 | +</blockquote> | |
| 2713 | +<h2 id="todo-39"><a class="header" href="#todo-39">TODO</a></h2> | |
| 2714 | +<ul> | |
| 2715 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 2716 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 2717 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 2718 | +</ul> | |
| 2719 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 2720 | +<h1 id="paramètres-dynamiques"><a class="header" href="#paramètres-dynamiques">Paramètres dynamiques</a></h1> | |
| 2721 | +<p>Ce document explique comment fonctionne la configuration de la plateforme, les deux mécanismes en jeu, leur précédence, et les pièges à connaître.</p> | |
| 2722 | +<hr> | |
| 2723 | +<h2 id="vue-densemble--deux-systèmes-distincts"><a class="header" href="#vue-densemble--deux-systèmes-distincts">Vue d’ensemble : deux systèmes distincts</a></h2> | |
| 2724 | +<p>Gitrust utilise <strong>deux systèmes de configuration</strong> indépendants :</p> | |
| 2725 | +<div class="table-wrapper"> | |
| 2726 | +<table> | |
| 2727 | +<thead> | |
| 2728 | +<tr><th>Système</th><th>Source</th><th style="text-align: center">Modifiable à chaud</th><th style="text-align: center">Visible dans l’UI admin</th></tr> | |
| 2729 | +</thead> | |
| 2730 | +<tbody> | |
| 2731 | +<tr><td><strong>Configuration statique</strong></td><td>Fichier <code>.env</code> + variables d’environnement</td><td style="text-align: center">Non (restart requis)</td><td style="text-align: center">Non</td></tr> | |
| 2732 | +<tr><td><strong>Configuration dynamique</strong></td><td>Table <code>app_settings</code> (PostgreSQL)</td><td style="text-align: center">Oui (effet immédiat)</td><td style="text-align: center">Oui (<code>/admin/settings</code>)</td></tr> | |
| 2733 | +</tbody> | |
| 2734 | +</table> | |
| 2735 | +</div> | |
| 2736 | +<p>Il existe un <strong>cas hybride</strong> pour OAuth (DB prioritaire, <code>.env</code> en fallback).</p> | |
| 2737 | +<hr> | |
| 2738 | +<h2 id="1-configuration-statique-env"><a class="header" href="#1-configuration-statique-env">1. Configuration statique (<code>.env</code>)</a></h2> | |
| 2739 | +<h3 id="principe"><a class="header" href="#principe">Principe</a></h3> | |
| 2740 | +<p>Les variables d’environnement sont chargées <strong>une seule fois au démarrage</strong> par <code>dotenvy::dotenv()</code> et stockées dans des structs Rust immuables. Elles ne sont jamais relues après le boot.</p> | |
| 2741 | +<h3 id="fichiers-de-référence"><a class="header" href="#fichiers-de-référence">Fichiers de référence</a></h3> | |
| 2742 | +<div class="table-wrapper"> | |
| 2743 | +<table> | |
| 2744 | +<thead> | |
| 2745 | +<tr><th>Fichier</th><th>Rôle</th></tr> | |
| 2746 | +</thead> | |
| 2747 | +<tbody> | |
| 2748 | +<tr><td><code>.env.example</code></td><td>Template documenté avec toutes les variables</td></tr> | |
| 2749 | +<tr><td><code>.env</code></td><td>Configuration locale (gitignore)</td></tr> | |
| 2750 | +<tr><td><code>.env.production</code></td><td>Configuration de déploiement</td></tr> | |
| 2751 | +<tr><td><code>.env.test</code></td><td>Configuration de tests</td></tr> | |
| 2752 | +</tbody> | |
| 2753 | +</table> | |
| 2754 | +</div> | |
| 2755 | +<h3 id="structs-de-chargement"><a class="header" href="#structs-de-chargement">Structs de chargement</a></h3> | |
| 2756 | +<div class="table-wrapper"> | |
| 2757 | +<table> | |
| 2758 | +<thead> | |
| 2759 | +<tr><th>Struct</th><th>Variables concernées</th></tr> | |
| 2760 | +</thead> | |
| 2761 | +<tbody> | |
| 2762 | +<tr><td><code>GitrustConfig</code></td><td><code>GIT_REPOS_BASE_PATH</code>, <code>SSH_PORT</code>, <code>SSH_LISTEN_ADDR</code>, <code>SSH_HOST_KEY_PATH</code>, <code>CI_*</code>, <code>IMPORT_*</code></td></tr> | |
| 2763 | +<tr><td><code>AppConfig</code></td><td><code>APP_NAME</code>, <code>APP_THEME</code>, <code>APP_DEBUG</code></td></tr> | |
| 2764 | +<tr><td><code>AuthConfig</code></td><td><code>JWT_SECRET</code>, <code>JWT_EXPIRATION_MINUTES</code>, <code>SESSION_*</code>, <code>RATE_LIMIT_*</code>, <code>COOKIE_*</code></td></tr> | |
| 2765 | +<tr><td><code>EmailConfig</code></td><td><code>SMTP_*</code>, <code>EMAIL_*</code>, <code>IMAP_*</code></td></tr> | |
| 2766 | +</tbody> | |
| 2767 | +</table> | |
| 2768 | +</div> | |
| 2769 | +<h3 id="comportement"><a class="header" href="#comportement">Comportement</a></h3> | |
| 2770 | +<ul> | |
| 2771 | +<li>Chargées dans <code>RustwardenApp::build()</code> au démarrage</li> | |
| 2772 | +<li>Stockées dans des <code>Arc<Config></code> partagés via l’état axum</li> | |
| 2773 | +<li><strong>Modifier le <code>.env</code> sans redémarrer n’a aucun effet</strong></li> | |
| 2774 | +<li><strong>Ces variables ne sont PAS affichées dans l’interface admin</strong></li> | |
| 2775 | +</ul> | |
| 2776 | +<h3 id="liste-des-variables-statiques-non-exhaustive"><a class="header" href="#liste-des-variables-statiques-non-exhaustive">Liste des variables statiques (non exhaustive)</a></h3> | |
| 2777 | +<pre><code>DATABASE_URL, SERVER_HOST, SERVER_PORT, RUST_LOG, | |
| 2778 | +SSH_HOST_KEY_PATH, SSH_PORT, SSH_LISTEN_ADDR, SSH_PUBLIC_HOST, | |
| 2779 | +JWT_SECRET, JWT_EXPIRATION_MINUTES, JWT_ISSUER, | |
| 2780 | +REFRESH_TOKEN_EXPIRATION_DAYS, REMEMBER_ME_EXPIRATION_DAYS, | |
| 2781 | +SESSION_TIMEOUT_MINUTES, SESSION_BACKEND, | |
| 2782 | +RATE_LIMIT_LOGIN_PER_MINUTE, RATE_LIMIT_REFRESH_PER_MINUTE, | |
| 2783 | +RATE_LIMIT_GENERAL_PER_MINUTE, | |
| 2784 | +APP_DEBUG, COOKIE_SECURE, COOKIE_SAME_SITE, | |
| 2785 | +ADMIN_USERNAME, ADMIN_EMAIL, ADMIN_PASSWORD, | |
| 2786 | +SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM, | |
| 2787 | +EMAIL_BASE_URL, EMAIL_QUEUE_*, | |
| 2788 | +APP_NAME, APP_THEME, DEFAULT_LOCALE, | |
| 2789 | +GIT_REPOS_BASE_PATH, | |
| 2790 | +CI_ENABLED, CI_MAX_CONCURRENT, CI_REMOTE_HOST, CI_WORKSPACE_PATH | |
| 2791 | +</code></pre> | |
| 2792 | +<hr> | |
| 2793 | +<h2 id="2-configuration-dynamique-table-app_settings"><a class="header" href="#2-configuration-dynamique-table-app_settings">2. Configuration dynamique (table <code>app_settings</code>)</a></h2> | |
| 2794 | +<h3 id="principe-1"><a class="header" href="#principe-1">Principe</a></h3> | |
| 2795 | +<p>Les réglages dynamiques sont stockés en base PostgreSQL dans la table <code>app_settings</code> et lus <strong>à chaque requête</strong> via <code>AppSettingsService</code>. Ils sont modifiables à chaud par un administrateur depuis l’interface <code>/admin/settings</code>.</p> | |
| 2796 | +<h3 id="schéma-de-la-table"><a class="header" href="#schéma-de-la-table">Schéma de la table</a></h3> | |
| 2797 | +<pre><code class="language-sql">CREATE TABLE app_settings ( | |
| 2798 | + id UUID PRIMARY KEY, | |
| 2799 | + key VARCHAR(100) UNIQUE NOT NULL, | |
| 2800 | + value TEXT NOT NULL, | |
| 2801 | + description TEXT, | |
| 2802 | + updated_by UUID REFERENCES users(id) ON DELETE SET NULL, | |
| 2803 | + updated_at TIMESTAMPTZ NOT NULL | |
| 2804 | +); | |
| 2805 | +</code></pre> | |
| 2806 | +<h3 id="initialisation-au-démarrage"><a class="header" href="#initialisation-au-démarrage">Initialisation au démarrage</a></h3> | |
| 2807 | +<p>Au boot, <code>AppSettingsService::initialize_default_settings()</code> crée les réglages par défaut <strong>uniquement s’ils n’existent pas encore en base</strong> :</p> | |
| 2808 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 2809 | +</span><span class="boring">fn main() { | |
| 2810 | +</span>let existing = Self::get_setting(db, key).await?; | |
| 2811 | +if existing.is_none() { | |
| 2812 | + // ... insert valeur par défaut | |
| 2813 | +} | |
| 2814 | +<span class="boring">}</span></code></pre> | |
| 2815 | +<p><strong>Conséquence critique</strong> : une fois qu’un réglage existe en base (créé au premier démarrage ou modifié via l’UI), il n’est <strong>jamais écrasé</strong> par un redémarrage ultérieur.</p> | |
| 2816 | +<h3 id="liste-des-réglages-dynamiques-et-leurs-valeurs-par-défaut"><a class="header" href="#liste-des-réglages-dynamiques-et-leurs-valeurs-par-défaut">Liste des réglages dynamiques et leurs valeurs par défaut</a></h3> | |
| 2817 | +<div class="table-wrapper"> | |
| 2818 | +<table> | |
| 2819 | +<thead> | |
| 2820 | +<tr><th>Clé</th><th>Défaut</th><th>Description</th></tr> | |
| 2821 | +</thead> | |
| 2822 | +<tbody> | |
| 2823 | +<tr><td><code>app_domain</code></td><td><code>env::var("APP_DOMAIN")</code> ou <code>"localhost"</code></td><td>Domaine de l’application</td></tr> | |
| 2824 | +<tr><td><code>allow_registration</code></td><td><code>false</code></td><td>Autoriser l’inscription publique</td></tr> | |
| 2825 | +<tr><td><code>validation_email_required</code></td><td><code>true</code></td><td>Exiger la validation email</td></tr> | |
| 2826 | +<tr><td><code>audit_log_level</code></td><td><code>INFO</code></td><td>Niveau de log d’audit</td></tr> | |
| 2827 | +<tr><td><code>audit_log_actions</code></td><td><code>["create","update","delete","reset_password"]</code></td><td>Actions auditées</td></tr> | |
| 2828 | +<tr><td><code>password_min_length</code></td><td><code>8</code></td><td>Longueur minimum mot de passe</td></tr> | |
| 2829 | +<tr><td><code>password_require_uppercase</code></td><td><code>false</code></td><td>Exiger des majuscules</td></tr> | |
| 2830 | +<tr><td><code>password_require_lowercase</code></td><td><code>false</code></td><td>Exiger des minuscules</td></tr> | |
| 2831 | +<tr><td><code>password_require_digits</code></td><td><code>false</code></td><td>Exiger des chiffres</td></tr> | |
| 2832 | +<tr><td><code>password_require_special</code></td><td><code>false</code></td><td>Exiger des caractères spéciaux</td></tr> | |
| 2833 | +<tr><td><code>password_change_require_email</code></td><td><code>true</code></td><td>Confirmation email pour changement mdp</td></tr> | |
| 2834 | +<tr><td><code>password_expiration_enabled</code></td><td><code>false</code></td><td>Activer l’expiration des mots de passe</td></tr> | |
| 2835 | +<tr><td><code>password_expiration_days</code></td><td><code>0</code></td><td>Durée d’expiration (jours)</td></tr> | |
| 2836 | +<tr><td><code>password_expiration_alert_enabled</code></td><td><code>false</code></td><td>Alerte email avant expiration</td></tr> | |
| 2837 | +<tr><td><code>password_expiration_alert_days_before</code></td><td><code>7</code></td><td>Jours avant expiration pour alerter</td></tr> | |
| 2838 | +<tr><td><code>oauth_enabled</code></td><td><code>false</code></td><td>Activer OAuth/SSO</td></tr> | |
| 2839 | +<tr><td><code>oauth_google_enabled</code></td><td><code>false</code></td><td>Activer Google OAuth</td></tr> | |
| 2840 | +<tr><td><code>oauth_github_enabled</code></td><td><code>false</code></td><td>Activer GitHub OAuth</td></tr> | |
| 2841 | +<tr><td><code>oauth_discord_enabled</code></td><td><code>false</code></td><td>Activer Discord OAuth</td></tr> | |
| 2842 | +<tr><td><code>oauth_microsoft_enabled</code></td><td><code>false</code></td><td>Activer Microsoft OAuth</td></tr> | |
| 2843 | +<tr><td><code>oauth_redirect_base_url</code></td><td><code>""</code></td><td>URL de base pour les callbacks OAuth</td></tr> | |
| 2844 | +<tr><td><code>oauth_auto_register</code></td><td><code>true</code></td><td>Créer un compte auto au premier login OAuth</td></tr> | |
| 2845 | +<tr><td><code>oauth_link_existing_account</code></td><td><code>true</code></td><td>Lier un compte OAuth à un utilisateur existant</td></tr> | |
| 2846 | +<tr><td><code>oauth_{provider}_client_id</code></td><td><code>""</code></td><td>Client ID du provider OAuth</td></tr> | |
| 2847 | +<tr><td><code>oauth_{provider}_client_secret</code></td><td><code>""</code></td><td>Client secret (chiffré AES-256-GCM en base)</td></tr> | |
| 2848 | +<tr><td><code>oauth_microsoft_tenant</code></td><td><code>""</code></td><td>Tenant Azure AD</td></tr> | |
| 2849 | +</tbody> | |
| 2850 | +</table> | |
| 2851 | +</div> | |
| 2852 | +<hr> | |
| 2853 | +<h2 id="3-cas-hybride--oauth"><a class="header" href="#3-cas-hybride--oauth">3. Cas hybride : OAuth</a></h2> | |
| 2854 | +<p>OAuth est le <strong>seul sous-système</strong> qui combine les deux sources. La logique dans <code>OAuthConfig::load()</code> :</p> | |
| 2855 | +<pre><code>Pour chaque réglage OAuth : | |
| 2856 | + 1. Chercher dans app_settings (DB) | |
| 2857 | + → si trouvé et non vide : utiliser cette valeur | |
| 2858 | + 2. Sinon : fallback sur la variable d'environnement | |
| 2859 | + → si absente : utiliser la valeur par défaut codée en dur | |
| 2860 | +</code></pre> | |
| 2861 | +<p><strong>Important</strong> : <code>OAuthConfig::load()</code> est appelé au démarrage. Le résultat est stocké dans un <code>Arc</code> et n’est pas relu dynamiquement. Donc :</p> | |
| 2862 | +<ul> | |
| 2863 | +<li>Modifier un réglage OAuth <strong>via l’UI admin</strong> nécessite un <strong>redémarrage</strong> pour que <code>OAuthConfig</code> soit rechargé</li> | |
| 2864 | +<li>Le <code>.env</code> n’est qu’un fallback si la DB n’a pas de valeur</li> | |
| 2865 | +</ul> | |
| 2866 | +<hr> | |
| 2867 | +<h2 id="4-précédence-et-comportement-au-redémarrage"><a class="header" href="#4-précédence-et-comportement-au-redémarrage">4. Précédence et comportement au redémarrage</a></h2> | |
| 2868 | +<h3 id="réglages-statiques-env-uniquement"><a class="header" href="#réglages-statiques-env-uniquement">Réglages statiques (<code>.env</code> uniquement)</a></h3> | |
| 2869 | +<div class="table-wrapper"> | |
| 2870 | +<table> | |
| 2871 | +<thead> | |
| 2872 | +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr> | |
| 2873 | +</thead> | |
| 2874 | +<tbody> | |
| 2875 | +<tr><td>Modifier <code>.env</code></td><td style="text-align: center">Non</td><td style="text-align: center">Oui</td></tr> | |
| 2876 | +</tbody> | |
| 2877 | +</table> | |
| 2878 | +</div> | |
| 2879 | +<h3 id="réglages-dynamiques-db-uniquement"><a class="header" href="#réglages-dynamiques-db-uniquement">Réglages dynamiques (DB uniquement)</a></h3> | |
| 2880 | +<div class="table-wrapper"> | |
| 2881 | +<table> | |
| 2882 | +<thead> | |
| 2883 | +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr> | |
| 2884 | +</thead> | |
| 2885 | +<tbody> | |
| 2886 | +<tr><td>Modifier via UI admin</td><td style="text-align: center">Oui</td><td style="text-align: center">Oui (valeur en DB persiste)</td></tr> | |
| 2887 | +<tr><td>Modifier le <code>.env</code></td><td style="text-align: center">Aucun effet</td><td style="text-align: center">Aucun effet</td></tr> | |
| 2888 | +</tbody> | |
| 2889 | +</table> | |
| 2890 | +</div> | |
| 2891 | +<h3 id="réglages-hybrides-oauth"><a class="header" href="#réglages-hybrides-oauth">Réglages hybrides (OAuth)</a></h3> | |
| 2892 | +<div class="table-wrapper"> | |
| 2893 | +<table> | |
| 2894 | +<thead> | |
| 2895 | +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr> | |
| 2896 | +</thead> | |
| 2897 | +<tbody> | |
| 2898 | +<tr><td>Modifier via UI admin</td><td style="text-align: center">Non (OAuthConfig est en Arc)</td><td style="text-align: center">Oui (DB prime sur .env)</td></tr> | |
| 2899 | +<tr><td>Modifier <code>.env</code></td><td style="text-align: center">Non</td><td style="text-align: center">Seulement si aucune valeur en DB</td></tr> | |
| 2900 | +</tbody> | |
| 2901 | +</table> | |
| 2902 | +</div> | |
| 2903 | +<hr> | |
| 2904 | +<h2 id="5-piège-principal--les-variables-env-fantômes"><a class="header" href="#5-piège-principal--les-variables-env-fantômes">5. Piège principal : les variables <code>.env</code> fantômes</a></h2> | |
| 2905 | +<p>Certaines variables présentes dans <code>.env.example</code> donnent l’<strong>illusion</strong> de configurer des réglages qui sont en réalité gérés par la base de données :</p> | |
| 2906 | +<div class="table-wrapper"> | |
| 2907 | +<table> | |
| 2908 | +<thead> | |
| 2909 | +<tr><th>Variable <code>.env</code></th><th>Réglage DB correspondant</th><th style="text-align: center">La variable <code>.env</code> est-elle lue ?</th></tr> | |
| 2910 | +</thead> | |
| 2911 | +<tbody> | |
| 2912 | +<tr><td><code>ALLOW_REGISTRATION=true</code></td><td><code>allow_registration</code></td><td style="text-align: center"><strong>Non</strong> — valeur par défaut codée en dur (<code>"false"</code>)</td></tr> | |
| 2913 | +<tr><td><code>EMAIL_VALIDATION_REQUIRED=true</code></td><td><code>validation_email_required</code></td><td style="text-align: center"><strong>Non</strong> — valeur par défaut codée en dur (<code>"true"</code>)</td></tr> | |
| 2914 | +<tr><td><code>OAUTH_ENABLED=true</code></td><td><code>oauth_enabled</code></td><td style="text-align: center">Oui, mais <strong>seulement en fallback</strong> si la DB n’a pas de valeur</td></tr> | |
| 2915 | +</tbody> | |
| 2916 | +</table> | |
| 2917 | +</div> | |
| 2918 | +<p>Pour <code>ALLOW_REGISTRATION</code> et <code>EMAIL_VALIDATION_REQUIRED</code> :</p> | |
| 2919 | +<ul> | |
| 2920 | +<li>La variable <code>.env</code> est documentée dans <code>.env.example</code> mais <strong>n’est jamais consultée</strong> par <code>initialize_default_settings()</code></li> | |
| 2921 | +<li>La valeur initiale est <strong>codée en dur</strong> dans le service</li> | |
| 2922 | +<li>Seule la valeur en base de données (modifiable via <code>/admin/settings</code>) fait foi</li> | |
| 2923 | +</ul> | |
| 2924 | +<p>Pour <code>app_domain</code>, c’est le seul réglage dynamique qui lit le <code>.env</code> comme seed initial.</p> | |
| 2925 | +<hr> | |
| 2926 | +<h2 id="6-diagramme-de-décision"><a class="header" href="#6-diagramme-de-décision">6. Diagramme de décision</a></h2> | |
| 2927 | +<pre><code> ┌─────────────────────────────┐ | |
| 2928 | + │ Quel type de réglage ? │ | |
| 2929 | + └──────────┬──────────────────-┘ | |
| 2930 | + │ | |
| 2931 | + ┌────────────────┼────────────────┐ | |
| 2932 | + ▼ ▼ ▼ | |
| 2933 | + Infrastructure Fonctionnel OAuth | |
| 2934 | + (port, JWT, SMTP) (inscription, (providers, | |
| 2935 | + mots de passe) secrets) | |
| 2936 | + │ │ │ | |
| 2937 | + ▼ ▼ ▼ | |
| 2938 | + .env seul DB seule DB + fallback .env | |
| 2939 | + │ │ │ | |
| 2940 | + ▼ ▼ ▼ | |
| 2941 | + Restart requis Effet immédiat Restart requis | |
| 2942 | + via /admin/ (OAuthConfig en Arc) | |
| 2943 | + settings | |
| 2944 | +</code></pre> | |
| 2945 | +<hr> | |
| 2946 | +<h2 id="7-guide-pour-les-administrateurs"><a class="header" href="#7-guide-pour-les-administrateurs">7. Guide pour les administrateurs</a></h2> | |
| 2947 | +<h3 id="modifier-un-réglage-dinfrastructure"><a class="header" href="#modifier-un-réglage-dinfrastructure">Modifier un réglage d’infrastructure</a></h3> | |
| 2948 | +<p>Éditer <code>.env</code> (ou <code>.env.production</code>) puis redémarrer le service :</p> | |
| 2949 | +<pre><code class="language-bash"># Éditer | |
| 2950 | +vim .env | |
| 2951 | + | |
| 2952 | +# Redémarrer | |
| 2953 | +systemctl restart gitrust # production | |
| 2954 | +# ou Ctrl+C + cargo run # dev | |
| 2955 | +</code></pre> | |
| 2956 | +<h3 id="modifier-un-réglage-fonctionnel"><a class="header" href="#modifier-un-réglage-fonctionnel">Modifier un réglage fonctionnel</a></h3> | |
| 2957 | +<p>Se connecter en tant qu’administrateur, aller dans <code>/admin/settings</code>, modifier la valeur, et cliquer “Save”. L’effet est <strong>immédiat</strong>, aucun redémarrage nécessaire.</p> | |
| 2958 | +<h3 id="modifier-un-réglage-oauth"><a class="header" href="#modifier-un-réglage-oauth">Modifier un réglage OAuth</a></h3> | |
| 2959 | +<p>Via <code>/admin/settings</code>, modifier les valeurs OAuth puis <strong>redémarrer le service</strong> (la config OAuth est chargée en mémoire au boot et n’est pas relue dynamiquement).</p> | |
| 2960 | +<h3 id="vérifier-la-valeur-effective-dun-réglage"><a class="header" href="#vérifier-la-valeur-effective-dun-réglage">Vérifier la valeur effective d’un réglage</a></h3> | |
| 2961 | +<p>Pour les réglages dynamiques, interroger la base directement :</p> | |
| 2962 | +<pre><code class="language-sql">SELECT key, value, updated_at, updated_by | |
| 2963 | +FROM app_settings | |
| 2964 | +WHERE key = 'allow_registration'; | |
| 2965 | +</code></pre> | |
| 2966 | +<p>Pour les réglages statiques, vérifier les logs au démarrage (<code>RUST_LOG=debug</code>).</p> | |
| 2967 | +<hr> | |
| 2968 | +<h2 id="8-guide-pour-les-développeurs"><a class="header" href="#8-guide-pour-les-développeurs">8. Guide pour les développeurs</a></h2> | |
| 2969 | +<h3 id="ajouter-un-nouveau-réglage-dynamique"><a class="header" href="#ajouter-un-nouveau-réglage-dynamique">Ajouter un nouveau réglage dynamique</a></h3> | |
| 2970 | +<ol> | |
| 2971 | +<li> | |
| 2972 | +<p>Ajouter le tuple <code>(clé, valeur_défaut, description)</code> dans <code>AppSettingsService::initialize_default_settings()</code> :</p> | |
| 2973 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 2974 | +</span><span class="boring">fn main() { | |
| 2975 | +</span>("ma_nouvelle_cle", "valeur_par_defaut", Some("Description pour l'UI admin")), | |
| 2976 | +<span class="boring">}</span></code></pre> | |
| 2977 | +</li> | |
| 2978 | +<li> | |
| 2979 | +<p>Lire la valeur dans le code via le service :</p> | |
| 2980 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 2981 | +</span><span class="boring">fn main() { | |
| 2982 | +</span>// Boolean avec défaut | |
| 2983 | +let enabled = AppSettingsService::get_bool(&db, "ma_nouvelle_cle", false).await?; | |
| 2984 | + | |
| 2985 | +// String | |
| 2986 | +let val = AppSettingsService::get_setting(&db, "ma_nouvelle_cle").await?; | |
| 2987 | +<span class="boring">}</span></code></pre> | |
| 2988 | +</li> | |
| 2989 | +<li> | |
| 2990 | +<p>La valeur apparaîtra automatiquement dans <code>/admin/settings</code>.</p> | |
| 2991 | +</li> | |
| 2992 | +</ol> | |
| 2993 | +<h3 id="ajouter-un-nouveau-réglage-statique"><a class="header" href="#ajouter-un-nouveau-réglage-statique">Ajouter un nouveau réglage statique</a></h3> | |
| 2994 | +<ol> | |
| 2995 | +<li>Ajouter la variable dans <code>.env.example</code> avec documentation complète</li> | |
| 2996 | +<li>Lire la variable dans le struct <code>Config</code> correspondant via <code>env::var()</code></li> | |
| 2997 | +<li>La valeur ne sera <strong>pas</strong> visible dans l’interface admin</li> | |
| 2998 | +</ol> | |
| 2999 | +<h3 id="ajouter-un-réglage-hybride-db--fallback-env"><a class="header" href="#ajouter-un-réglage-hybride-db--fallback-env">Ajouter un réglage hybride (DB + fallback .env)</a></h3> | |
| 3000 | +<p>Suivre le pattern OAuth dans <code>crates/rustwarden-core/src/config/oauth.rs</code> :</p> | |
| 3001 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 3002 | +</span><span class="boring">fn main() { | |
| 3003 | +</span>let ma_valeur = match db_val("ma_cle").await { | |
| 3004 | + Some(v) => v, | |
| 3005 | + None => env::var("MA_CLE").unwrap_or_else(|_| "defaut".to_string()), | |
| 3006 | +}; | |
| 3007 | +<span class="boring">}</span></code></pre> | |
| 3008 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3009 | +<h1 id="schéma-de-la-base-de-données"><a class="header" href="#schéma-de-la-base-de-données">Schéma de la base de données</a></h1> | |
| 3010 | +<blockquote> | |
| 3011 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3012 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3013 | +</blockquote> | |
| 3014 | +<h2 id="todo-40"><a class="header" href="#todo-40">TODO</a></h2> | |
| 3015 | +<ul> | |
| 3016 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3017 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3018 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3019 | +</ul> | |
| 3020 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3021 | +<h1 id="ports-et-services"><a class="header" href="#ports-et-services">Ports et services</a></h1> | |
| 3022 | +<blockquote> | |
| 3023 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3024 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3025 | +</blockquote> | |
| 3026 | +<h2 id="todo-41"><a class="header" href="#todo-41">TODO</a></h2> | |
| 3027 | +<ul> | |
| 3028 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3029 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3030 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3031 | +</ul> | |
| 3032 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3033 | +<h1 id="conformité-anssi-pa-074"><a class="header" href="#conformité-anssi-pa-074">Conformité ANSSI PA-074</a></h1> | |
| 3034 | +<blockquote> | |
| 3035 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3036 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3037 | +</blockquote> | |
| 3038 | +<h2 id="todo-42"><a class="header" href="#todo-42">TODO</a></h2> | |
| 3039 | +<ul> | |
| 3040 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3041 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3042 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3043 | +</ul> | |
| 3044 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3045 | +<h1 id="explication-1"><a class="header" href="#explication-1">Explication</a></h1> | |
| 3046 | +<blockquote> | |
| 3047 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3048 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3049 | +</blockquote> | |
| 3050 | +<h2 id="todo-43"><a class="header" href="#todo-43">TODO</a></h2> | |
| 3051 | +<ul> | |
| 3052 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3053 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3054 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3055 | +</ul> | |
| 3056 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3057 | +<h1 id="architecture-globale"><a class="header" href="#architecture-globale">Architecture globale</a></h1> | |
| 3058 | +<blockquote> | |
| 3059 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3060 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3061 | +</blockquote> | |
| 3062 | +<h2 id="todo-44"><a class="header" href="#todo-44">TODO</a></h2> | |
| 3063 | +<ul> | |
| 3064 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3065 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3066 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3067 | +</ul> | |
| 3068 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3069 | +<h1 id="modèle-de-déploiement"><a class="header" href="#modèle-de-déploiement">Modèle de déploiement</a></h1> | |
| 3070 | +<blockquote> | |
| 3071 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3072 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3073 | +</blockquote> | |
| 3074 | +<h2 id="todo-45"><a class="header" href="#todo-45">TODO</a></h2> | |
| 3075 | +<ul> | |
| 3076 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3077 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3078 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3079 | +</ul> | |
| 3080 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3081 | +<h1 id="ci-dagger--easy-mode-vs-power-mode"><a class="header" href="#ci-dagger--easy-mode-vs-power-mode">CI Dagger : Easy Mode vs Power Mode</a></h1> | |
| 3082 | +<blockquote> | |
| 3083 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3084 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3085 | +</blockquote> | |
| 3086 | +<h2 id="todo-46"><a class="header" href="#todo-46">TODO</a></h2> | |
| 3087 | +<ul> | |
| 3088 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3089 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3090 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3091 | +</ul> | |
| 3092 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3093 | +<h1 id="stratégie-de-sauvegarde"><a class="header" href="#stratégie-de-sauvegarde">Stratégie de sauvegarde</a></h1> | |
| 3094 | +<blockquote> | |
| 3095 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3096 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3097 | +</blockquote> | |
| 3098 | +<h2 id="todo-47"><a class="header" href="#todo-47">TODO</a></h2> | |
| 3099 | +<ul> | |
| 3100 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3101 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3102 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3103 | +</ul> | |
| 3104 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3105 | +<h1 id="manuel-développeur"><a class="header" href="#manuel-développeur">Manuel développeur</a></h1> | |
| 3106 | +<p>Ce manuel s’adresse à deux publics : les contributeurs au code gitrust (core ou via fork rustwarden) et les développeurs externes qui construisent des intégrations sur l’API publique. Il fournit tout le nécessaire pour comprendre l’architecture des 6 crates, contribuer du code conforme aux standards du projet, ou bâtir un client qui parle à l’API gitrust. Il ne couvre pas l’installation d’une instance de production ni l’usage quotidien de la forge.</p> | |
| 3107 | +<h2 id="parcours-dapprentissage--contributeur-core"><a class="header" href="#parcours-dapprentissage--contributeur-core">Parcours d’apprentissage — contributeur core</a></h2> | |
| 3108 | +<p>Le parcours contributeur représente environ 4 heures au total, avec un étayage dégressif : le premier tutoriel est entièrement guidé, le troisième (capstone) demande de résoudre sans guide pas-à-pas.</p> | |
| 3109 | +<pre class="mermaid">graph LR | |
| 3110 | + A[Utilisateur autonome] --> B[01-getting-started<br/>45 min] | |
| 3111 | + B --> C[02-premiere-contribution<br/>90 min] | |
| 3112 | + C --> D[03-creer-un-worker-async<br/>capstone 120 min] | |
| 3113 | + D --> E[Core contributor] | |
| 3114 | +</pre> | |
| 3115 | + | |
| 3116 | +<blockquote> | |
| 3117 | +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, vous devez avoir compilé gitrust localement, lancé les tests unitaires et obtenu une instance de développement fonctionnelle. Si ce n’est pas le cas, relisez le tutoriel 01.</p> | |
| 3118 | +</blockquote> | |
| 3119 | +<blockquote> | |
| 3120 | +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 03 (capstone), vous devez avoir soumis une PR complète avec tests, passé la gate QA et reçu une review. Si ce n’est pas le cas, relisez le tutoriel 02.</p> | |
| 3121 | +</blockquote> | |
| 3122 | +<hr> | |
| 3123 | +<h2 id="tutoriels--apprendre-en-faisant-2"><a class="header" href="#tutoriels--apprendre-en-faisant-2">Tutoriels — apprendre en faisant</a></h2> | |
| 3124 | +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété.</p> | |
| 3125 | +<ul> | |
| 3126 | +<li><a href="#premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit">01 — Getting started : build local, tests, instance de dev</a> — ~45 min</li> | |
| 3127 | +<li><a href="#02--première-contribution">02 — Première contribution : clone, build, test, PR</a> — ~90 min</li> | |
| 3128 | +<li><a href="#03--créer-un-worker-async-capstone">03 — Créer un worker async (capstone)</a> — ~120 min</li> | |
| 3129 | +</ul> | |
| 3130 | +<hr> | |
| 3131 | +<h2 id="how-to--recettes-pour-les-tâches-courantes-2"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes-2">How-to — recettes pour les tâches courantes</a></h2> | |
| 3132 | +<p>Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin.</p> | |
| 3133 | +<ul> | |
| 3134 | +<li><a href="#workflow-de-contribution-et-pr">Workflow de contribution : Git + review + QA</a></li> | |
| 3135 | +<li><a href="#lancer-les-tests-unitaires">Lancer les tests unitaires</a></li> | |
| 3136 | +<li><a href="#lancer-les-tests-end-to-end-e2e">Lancer les tests E2E (Playwright)</a></li> | |
| 3137 | +<li><a href="#ajouter-une-route-web">Ajouter une route web (patron rustwarden → axum)</a></li> | |
| 3138 | +<li><a href="#ajouter-un-service-métier">Ajouter un service métier</a></li> | |
| 3139 | +<li><a href="#ajouter-une-migration-de-base-de-données">Ajouter une migration de base de données</a></li> | |
| 3140 | +<li><a href="#implémenter-des-webhooks">Implémenter des webhooks</a></li> | |
| 3141 | +<li><a href="#implémenter-un-endpoint-api">Implémenter un endpoint API</a></li> | |
| 3142 | +<li><a href="#importer-un-dépôt-externe-1">Importer un dépôt externe (code)</a></li> | |
| 3143 | +<li><a href="#contribuer-à-rustwarden">Contribuer à rustwarden upstream</a></li> | |
| 3144 | +<li><a href="#passer-la-qa-avant-un-merge">Passer la QA avant merge</a></li> | |
| 3145 | +</ul> | |
| 3146 | +<hr> | |
| 3147 | +<h2 id="référence--informations-techniques-exactes-2"><a class="header" href="#référence--informations-techniques-exactes-2">Référence — informations techniques exactes</a></h2> | |
| 3148 | +<p>La référence documente de façon exhaustive l’architecture, les API internes, le schéma de données et les règles QA. Destinée à la consultation ponctuelle.</p> | |
| 3149 | +<ul> | |
| 3150 | +<li><a href="#architecture-par-crates">Architecture des 6 crates</a></li> | |
| 3151 | +<li><a href="#services-et-api-interne">Services et API interne</a></li> | |
| 3152 | +<li><a href="#schéma-de-la-base-de-données-1">Schéma de base de données (ERD)</a></li> | |
| 3153 | +<li><a href="#règles-qa--conformité-anssi">Règles QA et gates ANSSI</a></li> | |
| 3154 | +<li><a href="#api-rest-v1-1">API REST v1 — auth, pagination, codes d’erreur</a></li> | |
| 3155 | +<li><a href="#hooks-git-post-receive">Git hooks post-receive</a></li> | |
| 3156 | +<li><a href="#api-rustwarden-core">rustwarden-core API — helpers, extracteurs, middleware</a></li> | |
| 3157 | +</ul> | |
| 3158 | +<hr> | |
| 3159 | +<h2 id="explication--comprendre-le-pourquoi-2"><a class="header" href="#explication--comprendre-le-pourquoi-2">Explication — comprendre le pourquoi</a></h2> | |
| 3160 | +<p>Les explanations construisent les modèles mentaux nécessaires pour contribuer de façon éclairée. Lisez-les quand vous voulez comprendre les décisions d’architecture, pas seulement les appliquer.</p> | |
| 3161 | +<ul> | |
| 3162 | +<li><a href="#vue-densemble-de-larchitecture">Vue d’ensemble de l’architecture gitrust</a></li> | |
| 3163 | +<li><a href="#flux-de-requêtes">Flux de requêtes (diagrammes de séquence)</a></li> | |
| 3164 | +<li><a href="#modèle-de-permissions-rbac">Modèle de permissions RBAC 4 niveaux</a></li> | |
| 3165 | +<li><a href="#fonctionnement-du-2fa">Fonctionnement de la 2FA</a></li> | |
| 3166 | +<li><a href="#hiérarchie-des-labels">Hiérarchie des labels</a></li> | |
| 3167 | +<li><a href="#ci-dagger--easy-mode-vs-power-mode-1">CI Dagger : Easy Mode vs Power Mode</a></li> | |
| 3168 | +<li><a href="#décisions-ui-htmx-daisyui">Décisions UI : HTMX + DaisyUI</a></li> | |
| 3169 | +<li><a href="#patron-worker-async">Patron worker async</a></li> | |
| 3170 | +</ul> | |
| 3171 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3172 | +<h1 id="tutoriels-2"><a class="header" href="#tutoriels-2">Tutoriels</a></h1> | |
| 3173 | +<blockquote> | |
| 3174 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3175 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3176 | +</blockquote> | |
| 3177 | +<h2 id="todo-48"><a class="header" href="#todo-48">TODO</a></h2> | |
| 3178 | +<ul> | |
| 3179 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3180 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3181 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3182 | +</ul> | |
| 3183 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3184 | +<h1 id="premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit"><a class="header" href="#premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit">Premiers pas avec gitrust : compilez, configurez et poussez votre premier commit</a></h1> | |
| 3185 | +<blockquote> | |
| 3186 | +<p><strong>Source</strong> : ce tutoriel intègre le contenu de <code>gitrust/docs/GETTING_STARTED.md</code> avec la structure pédagogique complète (objectifs Bloom, modèle mental, checkpoints observables, section « Et si ça ne marche pas »).</p> | |
| 3187 | +</blockquote> | |
| 3188 | +<h2 id="objectifs-2"><a class="header" href="#objectifs-2">Objectifs</a></h2> | |
| 3189 | +<p>À la fin de ce tutoriel, vous saurez :</p> | |
| 3190 | +<ul> | |
| 3191 | +<li><strong>O1. Compiler</strong> gitrust depuis les sources et lancer l’instance de développement localement</li> | |
| 3192 | +<li><strong>O2. Configurer</strong> l’environnement de développement (base de données, variables d’environnement, assets CSS)</li> | |
| 3193 | +<li><strong>O3. Exécuter</strong> un premier push SSH vers votre instance locale et vérifier le résultat dans l’interface web</li> | |
| 3194 | +</ul> | |
| 3195 | +<h2 id="pré-requis-3"><a class="header" href="#pré-requis-3">Pré-requis</a></h2> | |
| 3196 | +<ul> | |
| 3197 | +<li><strong>Technique</strong> : Rust stable ≥ 1.80 (<code>rustc --version</code>), PostgreSQL ≥ 15 (<code>psql --version</code>), Node.js ≥ 18 (<code>node --version</code>), Git 2.x (<code>git --version</code>), Docker (optionnel, recommandé pour la base de données)</li> | |
| 3198 | +<li><strong>Pédagogique</strong> : être un utilisateur autonome de gitrust (parcours <code>user_manual</code> complété ou équivalent) ; familiarité avec Rust (au moins 3 mois de pratique) et avec HTTP/PostgreSQL</li> | |
| 3199 | +<li><strong>Temps estimé</strong> : ~45 minutes</li> | |
| 3200 | +</ul> | |
| 3201 | +<h2 id="vue-densemble-2"><a class="header" href="#vue-densemble-2">Vue d’ensemble</a></h2> | |
| 3202 | +<p>Avant d’exécuter la première commande, prenons 3 minutes pour comprendre ce que vous allez monter et comment les pièces s’articulent.</p> | |
| 3203 | +<p>gitrust est un <strong>monorepo Rust à 6 crates</strong> qui compile en un seul binaire. Quand vous lancez <code>cargo run</code>, ce binaire démarre deux serveurs simultanément : un serveur HTTP (<code>:4000</code>) pour l’interface web et l’API REST, et un serveur SSH (<code>:2222</code>) pour les opérations <code>git push/pull</code>. Ils partagent la même base de données PostgreSQL et le même stockage de dépôts bare sur disque.</p> | |
| 3204 | +<pre class="mermaid">graph TB | |
| 3205 | + subgraph sources ["Sources gitrust (monorepo Rust)"] | |
| 3206 | + C1[rustwarden-core<br/>auth, sessions, middleware] | |
| 3207 | + C2[gitrust-core<br/>modèles, services métier] | |
| 3208 | + C3[gitrust-git<br/>opérations Git bare] | |
| 3209 | + C4[gitrust-web<br/>handlers HTTP + templates] | |
| 3210 | + C5[gitrust-ssh<br/>serveur SSH Git] | |
| 3211 | + C6[gitrust-hooks<br/>post-receive, pre-receive] | |
| 3212 | + end | |
| 3213 | + | |
| 3214 | + subgraph runtime ["Processus unique (cargo run)"] | |
| 3215 | + HTTP["HTTP :4000<br/>UI + API REST"] | |
| 3216 | + SSH["SSH :2222<br/>git push/pull"] | |
| 3217 | + end | |
| 3218 | + | |
| 3219 | + subgraph storage ["Stockage"] | |
| 3220 | + PG[(PostgreSQL<br/>comptes, dépôts,<br/>issues, PRs)] | |
| 3221 | + REPOS[Dépôts bare<br/>data/repos/] | |
| 3222 | + end | |
| 3223 | + | |
| 3224 | + C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| HTTP | |
| 3225 | + C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| SSH | |
| 3226 | + HTTP & SSH --> PG | |
| 3227 | + HTTP & SSH --> REPOS | |
| 3228 | +</pre> | |
| 3229 | + | |
| 3230 | +<p><strong>Ce que vous allez faire</strong> : cloner les sources → préparer PostgreSQL → copier et remplir <code>.env</code> → compiler les assets CSS → lancer <code>cargo run</code> → vérifier l’instance → pousser un premier commit via SSH.</p> | |
| 3231 | +<hr> | |
| 3232 | +<h2 id="étape-1--vérifiez-les-pré-requis-système"><a class="header" href="#étape-1--vérifiez-les-pré-requis-système">Étape 1 : Vérifiez les pré-requis système</a></h2> | |
| 3233 | +<p>Avant de cloner quoi que ce soit, vérifiez que tous les outils nécessaires sont installés :</p> | |
| 3234 | +<pre><code class="language-bash">rustc --version && cargo --version && psql --version && node --version && git --version | |
| 3235 | +</code></pre> | |
| 3236 | +<p>Sortie attendue (versions exactes peuvent varier) :</p> | |
| 3237 | +<pre><code>rustc 1.82.0 (f6e511eec 2024-10-15) | |
| 3238 | +cargo 1.82.0 (8f40fc59f 2024-10-15) | |
| 3239 | +psql (PostgreSQL) 16.3 | |
| 3240 | +v20.11.0 | |
| 3241 | +git version 2.43.0 | |
| 3242 | +</code></pre> | |
| 3243 | +<p>Si des dépendances système manquent, installez-les :</p> | |
| 3244 | +<pre><code class="language-bash"># Debian / Ubuntu | |
| 3245 | +sudo apt install build-essential pkg-config libssl-dev libpq-dev cmake git | |
| 3246 | + | |
| 3247 | +# macOS | |
| 3248 | +brew install postgresql openssl cmake | |
| 3249 | +</code></pre> | |
| 3250 | +<p><strong>Checkpoint</strong> : toutes les commandes de vérification doivent retourner un numéro de version sans erreur. Si <code>rustc</code> n’est pas trouvé, installez Rust via <code>curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh</code> puis rechargez votre shell.</p> | |
| 3251 | +<hr> | |
| 3252 | +<h2 id="étape-2--clonez-le-projet"><a class="header" href="#étape-2--clonez-le-projet">Étape 2 : Clonez le projet</a></h2> | |
| 3253 | +<pre><code class="language-bash">git clone https://demo.gitrust.eu/gitrust/gitrust.git | |
| 3254 | +cd gitrust | |
| 3255 | +</code></pre> | |
| 3256 | +<p>Sortie attendue :</p> | |
| 3257 | +<pre><code>Cloning into 'gitrust'... | |
| 3258 | +remote: Enumerating objects: 12847, done. | |
| 3259 | +remote: Counting objects: 100% (12847/12847), done. | |
| 3260 | +Receiving objects: 100% (12847/12847), 18.42 MiB | 4.20 MiB/s, done. | |
| 3261 | +</code></pre> | |
| 3262 | +<p><strong>Checkpoint</strong> : vérifiez que la structure de crates est présente :</p> | |
| 3263 | +<pre><code class="language-bash">ls crates/ | |
| 3264 | +</code></pre> | |
| 3265 | +<p>Sortie attendue :</p> | |
| 3266 | +<pre><code>gitrust-core gitrust-git gitrust-hooks gitrust-ssh gitrust-web rustwarden-core | |
| 3267 | +</code></pre> | |
| 3268 | +<hr> | |
| 3269 | +<h2 id="étape-3--configurez-lenvironnement-env"><a class="header" href="#étape-3--configurez-lenvironnement-env">Étape 3 : Configurez l’environnement (.env)</a></h2> | |
| 3270 | +<p>Copiez le fichier d’exemple et éditez les 5 valeurs essentielles :</p> | |
| 3271 | +<pre><code class="language-bash">cp .env.example .env | |
| 3272 | +</code></pre> | |
| 3273 | +<p>Ouvrez <code>.env</code> dans votre éditeur et renseignez ces valeurs :</p> | |
| 3274 | +<pre><code class="language-env"># Connexion à la base de données | |
| 3275 | +DATABASE_URL=postgres://gitrust:motdepasse@localhost:5432/gitrust | |
| 3276 | + | |
| 3277 | +# Clé secrète JWT (générez-la avec : openssl rand -hex 32) | |
| 3278 | +JWT_SECRET=votre_cle_secrete_64_caracteres | |
| 3279 | + | |
| 3280 | +# Compte administrateur créé au premier lancement | |
| 3281 | +ADMIN_USERNAME=admin | |
| 3282 | +ADMIN_EMAIL=admin@example.com | |
| 3283 | +ADMIN_PASSWORD=MotDePasseFort123! | |
| 3284 | +</code></pre> | |
| 3285 | +<blockquote> | |
| 3286 | +<p>Les autres variables ont des valeurs par défaut raisonnables pour le développement. Consultez <code>.env.example</code> pour la liste complète.</p> | |
| 3287 | +</blockquote> | |
| 3288 | +<p>Générez une vraie valeur pour <code>JWT_SECRET</code> :</p> | |
| 3289 | +<pre><code class="language-bash">openssl rand -hex 32 | |
| 3290 | +</code></pre> | |
| 3291 | +<p>Sortie attendue (valeur différente à chaque exécution) :</p> | |
| 3292 | +<pre><code>4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a | |
| 3293 | +</code></pre> | |
| 3294 | +<p>Copiez cette valeur dans <code>.env</code> pour <code>JWT_SECRET</code>.</p> | |
| 3295 | +<p><strong>Checkpoint</strong> : vérifiez qu’aucune valeur d’exemple reste dans <code>.env</code> :</p> | |
| 3296 | +<pre><code class="language-bash">grep -E "votre_cle|example\.com|MotDePasse" .env | |
| 3297 | +</code></pre> | |
| 3298 | +<p>La commande doit retourner vide (aucune ligne). Si elle retourne des lignes, ces valeurs placeholder sont encore présentes — l’application démarrera mais avec une configuration non sécurisée.</p> | |
| 3299 | +<hr> | |
| 3300 | +<h2 id="étape-4--préparez-la-base-de-données-postgresql"><a class="header" href="#étape-4--préparez-la-base-de-données-postgresql">Étape 4 : Préparez la base de données PostgreSQL</a></h2> | |
| 3301 | +<p>Vous avez deux options :</p> | |
| 3302 | +<p><strong>Option A — Docker (recommandé pour débuter) :</strong></p> | |
| 3303 | +<pre><code class="language-bash">cd database && docker compose up -d && cd .. | |
| 3304 | +</code></pre> | |
| 3305 | +<p>Sortie attendue :</p> | |
| 3306 | +<pre><code>[+] Running 2/2 | |
| 3307 | + ✔ Container gitrust_postgres_dev Started 0.8s | |
| 3308 | + ✔ Container gitrust_pgadmin Started 1.1s | |
| 3309 | +</code></pre> | |
| 3310 | +<p><strong>Option B — PostgreSQL existant sur la machine :</strong></p> | |
| 3311 | +<pre><code class="language-bash">psql -U postgres << 'SQL' | |
| 3312 | +CREATE USER gitrust WITH PASSWORD 'motdepasse'; | |
| 3313 | +CREATE DATABASE gitrust OWNER gitrust; | |
| 3314 | +SQL | |
| 3315 | +</code></pre> | |
| 3316 | +<p>Sortie attendue :</p> | |
| 3317 | +<pre><code>CREATE ROLE | |
| 3318 | +CREATE DATABASE | |
| 3319 | +</code></pre> | |
| 3320 | +<p>Adaptez le mot de passe dans <code>DATABASE_URL</code> dans <code>.env</code> si vous utilisez l’option B.</p> | |
| 3321 | +<p><strong>Checkpoint</strong> : vérifiez que la base est accessible depuis l’application :</p> | |
| 3322 | +<pre><code class="language-bash">psql "$DATABASE_URL" -c "SELECT version();" | |
| 3323 | +</code></pre> | |
| 3324 | +<p>Sortie attendue :</p> | |
| 3325 | +<pre><code> version | |
| 3326 | +------------------------------------------------------------------------------------------------------- | |
| 3327 | + PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, 64-bit | |
| 3328 | +(1 row) | |
| 3329 | +</code></pre> | |
| 3330 | +<p>Si vous obtenez <code>psql: error: connection to server failed</code>, vérifiez que PostgreSQL tourne et que <code>DATABASE_URL</code> correspond.</p> | |
| 3331 | +<hr> | |
| 3332 | +<h2 id="étape-5--compilez-les-assets-css"><a class="header" href="#étape-5--compilez-les-assets-css">Étape 5 : Compilez les assets CSS</a></h2> | |
| 3333 | +<p>gitrust utilise Tailwind CSS + DaisyUI. Les assets doivent être compilés localement — aucun CDN, tous les fichiers sont servis depuis <code>static/</code> :</p> | |
| 3334 | +<pre><code class="language-bash">npm install | |
| 3335 | +npx tailwindcss -i static/css/input.css -o static/css/style.css --minify | |
| 3336 | +</code></pre> | |
| 3337 | +<p>Sortie attendue :</p> | |
| 3338 | +<pre><code>added 98 packages in 3s | |
| 3339 | + | |
| 3340 | +Rebuilding... | |
| 3341 | +Done in 1842ms. | |
| 3342 | +</code></pre> | |
| 3343 | +<p><strong>Checkpoint</strong> : vérifiez que le fichier CSS est généré :</p> | |
| 3344 | +<pre><code class="language-bash">ls -lh static/css/style.css | |
| 3345 | +</code></pre> | |
| 3346 | +<p>Sortie attendue :</p> | |
| 3347 | +<pre><code>-rw-r--r-- 1 vous vous 45K avr 17 10:15 static/css/style.css | |
| 3348 | +</code></pre> | |
| 3349 | +<p>Si le fichier fait 0 octet ou n’existe pas, la compilation a échoué — relancez <code>npm install</code> puis la commande <code>npx tailwindcss</code>.</p> | |
| 3350 | +<hr> | |
| 3351 | +<h2 id="étape-6--lancez-lapplication"><a class="header" href="#étape-6--lancez-lapplication">Étape 6 : Lancez l’application</a></h2> | |
| 3352 | +<pre><code class="language-bash">cargo run | |
| 3353 | +</code></pre> | |
| 3354 | +<p>La première compilation prend 2 à 5 minutes (toutes les dépendances sont compilées). Les compilations suivantes sont incrémentales et beaucoup plus rapides.</p> | |
| 3355 | +<p>Au premier lancement, gitrust exécute automatiquement :</p> | |
| 3356 | +<ol> | |
| 3357 | +<li>Les migrations de base de données (création de toutes les tables)</li> | |
| 3358 | +<li>La création du compte administrateur (depuis <code>.env</code>)</li> | |
| 3359 | +<li>La génération de la clé SSH host (<code>data/ssh_host_ed25519_key</code>)</li> | |
| 3360 | +<li>La création du répertoire de stockage des dépôts (<code>data/repos/</code>)</li> | |
| 3361 | +</ol> | |
| 3362 | +<p>Sortie attendue (après compilation) :</p> | |
| 3363 | +<pre><code> Compiling gitrust-web v0.9.0 (/home/vous/gitrust/crates/gitrust-web) | |
| 3364 | + Finished `dev` profile [unoptimized + debuginfo] target(s) in 187.42s | |
| 3365 | + Running `target/debug/gitrust` | |
| 3366 | +2026-04-17T10:20:00Z INFO gitrust > Starting gitrust v0.9.0 | |
| 3367 | +2026-04-17T10:20:00Z INFO gitrust > Running database migrations... applied 42 | |
| 3368 | +2026-04-17T10:20:01Z INFO gitrust > Admin account created: admin | |
| 3369 | +2026-04-17T10:20:01Z INFO gitrust > SSH host key: SHA256:xxxxxxxxxxxxxxxxxxxx | |
| 3370 | +Server listening on http://0.0.0.0:4000 | |
| 3371 | +</code></pre> | |
| 3372 | +<p><strong>Checkpoint</strong> : ouvrez <code>http://localhost:4000</code> dans votre navigateur. Vous devez voir la page d’accueil gitrust. Connectez-vous avec les identifiants <code>ADMIN_USERNAME</code> / <code>ADMIN_PASSWORD</code> définis dans <code>.env</code>. Si la page ne charge pas, vérifiez que le message <code>Server listening on http://0.0.0.0:4000</code> est bien apparu dans les logs.</p> | |
| 3373 | +<hr> | |
| 3374 | +<h2 id="étape-7--créez-un-dépôt-et-poussez-votre-premier-commit"><a class="header" href="#étape-7--créez-un-dépôt-et-poussez-votre-premier-commit">Étape 7 : Créez un dépôt et poussez votre premier commit</a></h2> | |
| 3375 | +<p>Dans l’interface web (<code>http://localhost:4000</code>), cliquez sur <strong>« New repository »</strong>, donnez un nom (ex. <code>mon-projet</code>) et cliquez <strong>Créer</strong>.</p> | |
| 3376 | +<p>Ajoutez votre clé SSH publique dans <strong>Settings > SSH Keys</strong> en collant le contenu de <code>~/.ssh/id_ed25519.pub</code>.</p> | |
| 3377 | +<p>Puis dans votre terminal :</p> | |
| 3378 | +<pre><code class="language-bash">git clone ssh://git@localhost:2222/admin/mon-projet.git | |
| 3379 | +cd mon-projet | |
| 3380 | + | |
| 3381 | +echo "# Mon projet" > README.md | |
| 3382 | +git add README.md | |
| 3383 | +git commit -m "Initial commit" | |
| 3384 | +git push origin main | |
| 3385 | +</code></pre> | |
| 3386 | +<p>Sortie attendue :</p> | |
| 3387 | +<pre><code>Cloning into 'mon-projet'... | |
| 3388 | +warning: You appear to have cloned an empty repository. | |
| 3389 | +[main (root-commit) a1b2c3d] Initial commit | |
| 3390 | + 1 file changed, 1 insertion(+) | |
| 3391 | + create mode 100644 README.md | |
| 3392 | +Enumerating objects: 3, done. | |
| 3393 | +Counting objects: 100% (3/3), done. | |
| 3394 | +Writing objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done. | |
| 3395 | +Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 | |
| 3396 | +To ssh://localhost:2222/admin/mon-projet.git | |
| 3397 | + * [new branch] main -> main | |
| 3398 | +</code></pre> | |
| 3399 | +<p><strong>Checkpoint</strong> : retournez dans le navigateur sur <code>http://localhost:4000/admin/mon-projet</code>. La page doit afficher le fichier <code>README.md</code> avec le contenu <code># Mon projet</code> et indiquer 1 commit sur la branche <code>main</code>.</p> | |
| 3400 | +<hr> | |
| 3401 | +<h2 id="fonctionnalités-supplémentaires-disponibles"><a class="header" href="#fonctionnalités-supplémentaires-disponibles">Fonctionnalités supplémentaires disponibles</a></h2> | |
| 3402 | +<h3 id="ci-intégrée-optionnelle"><a class="header" href="#ci-intégrée-optionnelle">CI intégrée (optionnelle)</a></h3> | |
| 3403 | +<p>La CI s’exécute sur un serveur de build via SSH + rsync. Configurez dans <code>.env</code> :</p> | |
| 3404 | +<pre><code class="language-env"># Même machine (défaut pour le développement) | |
| 3405 | +CI_REMOTE_HOST=localhost | |
| 3406 | + | |
| 3407 | +# Ou serveur dédié | |
| 3408 | +CI_REMOTE_HOST=192.168.13.110 | |
| 3409 | +CI_REMOTE_USER=ci-runner | |
| 3410 | +</code></pre> | |
| 3411 | +<p><strong>Easy Mode</strong> — ajoutez <code>.gitrust-ci.yml</code> à la racine de votre dépôt :</p> | |
| 3412 | +<pre><code class="language-yaml">language: rust | |
| 3413 | + | |
| 3414 | +build: | |
| 3415 | + command: "cargo build --release" | |
| 3416 | + | |
| 3417 | +tests: | |
| 3418 | + command: "cargo test" | |
| 3419 | +</code></pre> | |
| 3420 | +<p><strong>Power Mode</strong> — placez un module Dagger dans <code>.dagger/</code> à la racine. gitrust exécutera <code>dagger call -m .dagger/ ci</code>.</p> | |
| 3421 | +<h3 id="notifications-1"><a class="header" href="#notifications-1">Notifications</a></h3> | |
| 3422 | +<p>Configurez SMTP dans <code>.env</code> pour les notifications e-mail :</p> | |
| 3423 | +<pre><code class="language-env">SMTP_HOST=smtp.example.com | |
| 3424 | +SMTP_PORT=587 | |
| 3425 | +SMTP_USER=user | |
| 3426 | +SMTP_PASSWORD=password | |
| 3427 | +SMTP_FROM=noreply@gitrust.eu | |
| 3428 | +</code></pre> | |
| 3429 | +<h3 id="langue-de-linterface"><a class="header" href="#langue-de-linterface">Langue de l’interface</a></h3> | |
| 3430 | +<p>gitrust est disponible en 6 langues (fr, en, de, es, pt, it). Définissez la langue par défaut de l’instance :</p> | |
| 3431 | +<pre><code class="language-env">DEFAULT_LOCALE=fr | |
| 3432 | +</code></pre> | |
| 3433 | +<hr> | |
| 3434 | +<h2 id="récapitulatif-2"><a class="header" href="#récapitulatif-2">Récapitulatif</a></h2> | |
| 3435 | +<ul> | |
| 3436 | +<li>✓ <strong>O1 accompli</strong> : gitrust est compilé depuis les sources et tourne localement — <code>cargo run</code> affiche « Server listening on http://0.0.0.0:4000 »</li> | |
| 3437 | +<li>✓ <strong>O2 accompli</strong> : l’environnement est configuré — <code>.env</code> rempli, PostgreSQL connecté, assets CSS générés, migrations appliquées</li> | |
| 3438 | +<li>✓ <strong>O3 accompli</strong> : un premier push SSH a réussi — le commit est visible dans l’interface web à <code>http://localhost:4000/admin/mon-projet</code></li> | |
| 3439 | +</ul> | |
| 3440 | +<hr> | |
| 3441 | +<h2 id="et-si-ça-ne-marche-pas-2"><a class="header" href="#et-si-ça-ne-marche-pas-2">Et si ça ne marche pas</a></h2> | |
| 3442 | +<div class="table-wrapper"> | |
| 3443 | +<table> | |
| 3444 | +<thead> | |
| 3445 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr> | |
| 3446 | +</thead> | |
| 3447 | +<tbody> | |
| 3448 | +<tr><td><code>error[E0463]: can't find crate for 'std'</code> à la compilation</td><td>Toolchain Rust manquante ou mauvaise version</td><td>Exécutez <code>rustup update stable && rustup default stable</code>. Vérifiez avec <code>rustc --version</code> ≥ 1.80</td></tr> | |
| 3449 | +<tr><td><code>connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed</code></td><td>PostgreSQL non démarré ou <code>DATABASE_URL</code> incorrect</td><td>Démarrez PostgreSQL (<code>sudo systemctl start postgresql</code> ou <code>docker compose up -d</code> dans <code>database/</code>). Vérifiez que <code>DATABASE_URL</code> dans <code>.env</code> correspond</td></tr> | |
| 3450 | +<tr><td><code>Permission denied (publickey)</code> lors du <code>git push</code></td><td>Clé SSH non enregistrée dans gitrust ou mauvais port</td><td>Vérifiez dans <em>Settings > SSH Keys</em> que la clé est présente. Testez avec <code>ssh -T git@localhost -p 2222</code> — vous devez voir « Vous êtes authentifié »</td></tr> | |
| 3451 | +</tbody> | |
| 3452 | +</table> | |
| 3453 | +</div> | |
| 3454 | +<hr> | |
| 3455 | +<h2 id="prochaine-étape-2"><a class="header" href="#prochaine-étape-2">Prochaine étape</a></h2> | |
| 3456 | +<p>→ <a href="#02--première-contribution">02 — Première contribution : clone, build, test, PR</a> : apprenez à créer une feature branch, écrire des tests, et soumettre votre première pull request en suivant le workflow gitrust (~90 min)</p> | |
| 3457 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3458 | +<h1 id="02--première-contribution"><a class="header" href="#02--première-contribution">02 — Première contribution</a></h1> | |
| 3459 | +<blockquote> | |
| 3460 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3461 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3462 | +</blockquote> | |
| 3463 | +<h2 id="todo-49"><a class="header" href="#todo-49">TODO</a></h2> | |
| 3464 | +<ul> | |
| 3465 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3466 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3467 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3468 | +</ul> | |
| 3469 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3470 | +<h1 id="03--créer-un-worker-async-capstone"><a class="header" href="#03--créer-un-worker-async-capstone">03 — Créer un worker async (capstone)</a></h1> | |
| 3471 | +<blockquote> | |
| 3472 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3473 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3474 | +</blockquote> | |
| 3475 | +<h2 id="todo-50"><a class="header" href="#todo-50">TODO</a></h2> | |
| 3476 | +<ul> | |
| 3477 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3478 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3479 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3480 | +</ul> | |
| 3481 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3482 | +<h1 id="guides-pratiques-2"><a class="header" href="#guides-pratiques-2">Guides pratiques</a></h1> | |
| 3483 | +<blockquote> | |
| 3484 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3485 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3486 | +</blockquote> | |
| 3487 | +<h2 id="todo-51"><a class="header" href="#todo-51">TODO</a></h2> | |
| 3488 | +<ul> | |
| 3489 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3490 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3491 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3492 | +</ul> | |
| 3493 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3494 | +<h1 id="workflow-de-contribution-et-pr"><a class="header" href="#workflow-de-contribution-et-pr">Workflow de contribution et PR</a></h1> | |
| 3495 | +<blockquote> | |
| 3496 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3497 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3498 | +</blockquote> | |
| 3499 | +<h2 id="todo-52"><a class="header" href="#todo-52">TODO</a></h2> | |
| 3500 | +<ul> | |
| 3501 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3502 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3503 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3504 | +</ul> | |
| 3505 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3506 | +<h1 id="lancer-les-tests-unitaires"><a class="header" href="#lancer-les-tests-unitaires">Lancer les tests unitaires</a></h1> | |
| 3507 | +<p>Référence des commandes et de la stratégie de tests pour gitrust.</p> | |
| 3508 | +<h2 id="infrastructure-existante"><a class="header" href="#infrastructure-existante">Infrastructure existante</a></h2> | |
| 3509 | +<h3 id="tests-unitaires-rust"><a class="header" href="#tests-unitaires-rust">Tests unitaires Rust</a></h3> | |
| 3510 | +<pre><code class="language-bash">cargo test --workspace # Tous les tests | |
| 3511 | +cargo test -p gitrust-core # Un crate spécifique | |
| 3512 | +cargo test -p gitrust-git # Tests Git (tempdir) | |
| 3513 | +</code></pre> | |
| 3514 | +<p>Les tests unitaires sont intégrés dans chaque crate via <code>#[cfg(test)]</code>.</p> | |
| 3515 | +<h3 id="tests-e2e-playwright"><a class="header" href="#tests-e2e-playwright">Tests e2e Playwright</a></h3> | |
| 3516 | +<p>17 specs couvrant : auth, admin, repos, issues, labels, teams, tokens, settings, navigation.</p> | |
| 3517 | +<pre><code class="language-bash"># Pré-requis (première fois) | |
| 3518 | +npm install | |
| 3519 | +./scripts/e2e-setup-db.sh # Crée la DB gitrust_test | |
| 3520 | + | |
| 3521 | +# Lancer les tests | |
| 3522 | +npm run test:e2e # Mode headless | |
| 3523 | +npm run test:e2e:ui # Mode interactif (navigateur visible) | |
| 3524 | +npm run test:e2e:debug # Mode debug | |
| 3525 | +npm run test:e2e:report # Voir le rapport HTML | |
| 3526 | +</code></pre> | |
| 3527 | +<p>Configuration : <code>playwright.config.ts</code> (port 4001, DB <code>gitrust_test</code>, locale <code>fr-FR</code>).</p> | |
| 3528 | +<h3 id="structure-des-répertoires"><a class="header" href="#structure-des-répertoires">Structure des répertoires</a></h3> | |
| 3529 | +<pre><code>tests/ | |
| 3530 | + e2e/ # Specs Playwright (TypeScript) | |
| 3531 | + global-setup.ts # Setup : lancer l'app, créer admin | |
| 3532 | + global-teardown.ts # Teardown : arrêter l'app | |
| 3533 | + fixtures.ts # Fixtures Playwright partagées | |
| 3534 | + auth.spec.ts # Tests authentification | |
| 3535 | + admin.spec.ts # Tests administration | |
| 3536 | + issues.spec.ts # Tests issues | |
| 3537 | + ... | |
| 3538 | + integration/ # Tests d'intégration Rust (DB réelle) [à créer] | |
| 3539 | + fixtures/ # Fichiers de test (repos, configs) [à créer] | |
| 3540 | + seeds/ # Seeds Rust pour initialiser la DB de test | |
| 3541 | + mod.rs | |
| 3542 | + seed.rs | |
| 3543 | +</code></pre> | |
| 3544 | +<hr> | |
| 3545 | +<h2 id="tests-à-ajouter"><a class="header" href="#tests-à-ajouter">Tests à ajouter</a></h2> | |
| 3546 | +<h3 id="1-tests-fonctionnels-api-rest-intégration-rust"><a class="header" href="#1-tests-fonctionnels-api-rest-intégration-rust">1. Tests fonctionnels API REST (intégration Rust)</a></h3> | |
| 3547 | +<p>Tests avec une DB PostgreSQL réelle pour vérifier les endpoints API.</p> | |
| 3548 | +<p><strong>Emplacement</strong> : <code>tests/integration/</code> ou <code>crates/gitrust-web/tests/</code></p> | |
| 3549 | +<p><strong>Approche recommandée</strong> : utiliser <code>reqwest</code> + un serveur de test :</p> | |
| 3550 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 3551 | +</span><span class="boring">fn main() { | |
| 3552 | +</span>// tests/integration/api_test.rs | |
| 3553 | +use reqwest::Client; | |
| 3554 | + | |
| 3555 | +#[tokio::test] | |
| 3556 | +#[ignore] // Nécessite une DB + serveur running | |
| 3557 | +async fn test_api_login() { | |
| 3558 | + let client = Client::new(); | |
| 3559 | + let res = client.post("http://localhost:4001/api/v1/auth/login") | |
| 3560 | + .json(&serde_json::json!({ | |
| 3561 | + "login": "admin", | |
| 3562 | + "password": "test_password" | |
| 3563 | + })) | |
| 3564 | + .send() | |
| 3565 | + .await | |
| 3566 | + .unwrap(); | |
| 3567 | + assert_eq!(res.status(), 200); | |
| 3568 | +} | |
| 3569 | +<span class="boring">}</span></code></pre> | |
| 3570 | +<p><strong>Alternative</strong> : <code>axum::test</code> pour tester les handlers sans serveur HTTP :</p> | |
| 3571 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 3572 | +</span><span class="boring">fn main() { | |
| 3573 | +</span>use axum::body::Body; | |
| 3574 | +use axum::http::Request; | |
| 3575 | +use tower::ServiceExt; | |
| 3576 | + | |
| 3577 | +#[tokio::test] | |
| 3578 | +async fn test_health_check() { | |
| 3579 | + let app = create_test_app().await; // Build router with test DB | |
| 3580 | + let response = app | |
| 3581 | + .oneshot(Request::builder().uri("/api/hello").body(Body::empty()).unwrap()) | |
| 3582 | + .await | |
| 3583 | + .unwrap(); | |
| 3584 | + assert_eq!(response.status(), 200); | |
| 3585 | +} | |
| 3586 | +<span class="boring">}</span></code></pre> | |
| 3587 | +<h3 id="2-tests-fonctionnels-ci"><a class="header" href="#2-tests-fonctionnels-ci">2. Tests fonctionnels CI</a></h3> | |
| 3588 | +<div class="table-wrapper"> | |
| 3589 | +<table> | |
| 3590 | +<thead> | |
| 3591 | +<tr><th>Test</th><th>Description</th><th>Priorité</th></tr> | |
| 3592 | +</thead> | |
| 3593 | +<tbody> | |
| 3594 | +<tr><td>CI detection</td><td>Repo avec <code>.gitrust-ci.yml</code> -> Easy, <code>.dagger/</code> -> Power, rien -> None</td><td>Haute</td></tr> | |
| 3595 | +<tr><td>Pipeline CRUD</td><td>Créer, lister, mettre à jour, annuler un pipeline</td><td>Haute</td></tr> | |
| 3596 | +<tr><td>Config CI</td><td>Activer/désactiver CI, modifier triggers, vérifier effet</td><td>Haute</td></tr> | |
| 3597 | +<tr><td>Variables héritage</td><td>Team var + repo var -> merge correct</td><td>Moyenne</td></tr> | |
| 3598 | +<tr><td>Auto-cancel</td><td>Nouveau push annule les pipelines en cours</td><td>Moyenne</td></tr> | |
| 3599 | +<tr><td>Logs streaming</td><td>Append logs + lecture paginée</td><td>Moyenne</td></tr> | |
| 3600 | +<tr><td>Notifications CI</td><td>Pipeline échoue -> notification créée</td><td>Moyenne</td></tr> | |
| 3601 | +</tbody> | |
| 3602 | +</table> | |
| 3603 | +</div> | |
| 3604 | +<p><strong>Pour les tests CI</strong> : mocker <code>dagger</code> avec un script shell qui simule success/failure :</p> | |
| 3605 | +<pre><code class="language-bash">#!/bin/bash | |
| 3606 | +# tests/fixtures/mock-dagger.sh | |
| 3607 | +echo "Step 1: Building..." | |
| 3608 | +echo "Step 2: Testing..." | |
| 3609 | +if [ "$MOCK_FAIL" = "true" ]; then | |
| 3610 | + echo "FAILED" >&2 | |
| 3611 | + exit 1 | |
| 3612 | +fi | |
| 3613 | +echo "All checks passed" | |
| 3614 | +exit 0 | |
| 3615 | +</code></pre> | |
| 3616 | +<p>Configurer <code>CI_DAGGER_BIN=tests/fixtures/mock-dagger.sh</code> dans les tests.</p> | |
| 3617 | +<h3 id="3-tests-e2e-playwright-à-ajouter"><a class="header" href="#3-tests-e2e-playwright-à-ajouter">3. Tests e2e Playwright à ajouter</a></h3> | |
| 3618 | +<p>Nouvelles specs pour les fonctionnalités CI et notifications :</p> | |
| 3619 | +<div class="table-wrapper"> | |
| 3620 | +<table> | |
| 3621 | +<thead> | |
| 3622 | +<tr><th>Spec</th><th>Couverture</th></tr> | |
| 3623 | +</thead> | |
| 3624 | +<tbody> | |
| 3625 | +<tr><td><code>ci-pipelines.spec.ts</code></td><td>Liste pipelines, détail, status badges</td></tr> | |
| 3626 | +<tr><td><code>ci-config.spec.ts</code></td><td>Config CI (enable/disable, triggers, timeout)</td></tr> | |
| 3627 | +<tr><td><code>ci-variables.spec.ts</code></td><td>CRUD variables CI, masquage secrets</td></tr> | |
| 3628 | +<tr><td><code>notifications.spec.ts</code></td><td>Liste notifications, marquer lu, préférences</td></tr> | |
| 3629 | +<tr><td><code>api-docs.spec.ts</code></td><td>Swagger UI accessible, spec chargée</td></tr> | |
| 3630 | +<tr><td><code>i18n.spec.ts</code></td><td>Changement de langue, textes traduits</td></tr> | |
| 3631 | +<tr><td><code>docker-smoke.spec.ts</code></td><td><code>docker compose up</code> + smoke test</td></tr> | |
| 3632 | +</tbody> | |
| 3633 | +</table> | |
| 3634 | +</div> | |
| 3635 | +<p><strong>Exemple de spec CI</strong> :</p> | |
| 3636 | +<pre><code class="language-typescript">// tests/e2e/ci-pipelines.spec.ts | |
| 3637 | +import { test, expect } from './fixtures'; | |
| 3638 | + | |
| 3639 | +test.describe('CI Pipelines', () => { | |
| 3640 | + test('affiche la page CI vide', async ({ authenticatedPage }) => { | |
| 3641 | + await authenticatedPage.goto('/admin/mon-repo/ci'); | |
| 3642 | + await expect(authenticatedPage.locator('text=Aucun pipeline')).toBeVisible(); | |
| 3643 | + }); | |
| 3644 | + | |
| 3645 | + test('bouton trigger CI visible pour le maintainer', async ({ authenticatedPage }) => { | |
| 3646 | + await authenticatedPage.goto('/admin/mon-repo/ci'); | |
| 3647 | + await expect(authenticatedPage.locator('text=Lancer CI')).toBeVisible(); | |
| 3648 | + }); | |
| 3649 | +}); | |
| 3650 | +</code></pre> | |
| 3651 | +<h3 id="4-tests-settings--comportement"><a class="header" href="#4-tests-settings--comportement">4. Tests settings ↔ comportement</a></h3> | |
| 3652 | +<p>Les tests les plus critiques vérifient que <strong>changer un setting modifie le comportement observable</strong> :</p> | |
| 3653 | +<div class="table-wrapper"> | |
| 3654 | +<table> | |
| 3655 | +<thead> | |
| 3656 | +<tr><th>Setting</th><th>Action</th><th>Vérification</th></tr> | |
| 3657 | +</thead> | |
| 3658 | +<tbody> | |
| 3659 | +<tr><td>PAT révoqué</td><td>Appel API</td><td>401 immédiatement</td></tr> | |
| 3660 | +<tr><td><code>ci_enabled = false</code></td><td>Push</td><td>Pas de pipeline créé</td></tr> | |
| 3661 | +<tr><td><code>trigger_on_push = false</code></td><td>Push</td><td>Pas de pipeline</td></tr> | |
| 3662 | +<tr><td><code>auto_cancel = true</code></td><td>2 pushes rapides</td><td>1er pipeline annulé</td></tr> | |
| 3663 | +<tr><td><code>email_on_pipeline_failure = false</code></td><td>Pipeline échoue</td><td>Pas d’email, notif in-app ok</td></tr> | |
| 3664 | +<tr><td><code>DEFAULT_LOCALE = en</code></td><td>Charger page</td><td>Texte en anglais</td></tr> | |
| 3665 | +</tbody> | |
| 3666 | +</table> | |
| 3667 | +</div> | |
| 3668 | +<hr> | |
| 3669 | +<h2 id="commandes-de-test"><a class="header" href="#commandes-de-test">Commandes de test</a></h2> | |
| 3670 | +<pre><code class="language-bash"># Tests unitaires Rust | |
| 3671 | +cargo test --workspace | |
| 3672 | + | |
| 3673 | +# Tests avec filtrage | |
| 3674 | +cargo test -p gitrust-core -- ci_service | |
| 3675 | +cargo test -p gitrust-core -- notification | |
| 3676 | + | |
| 3677 | +# Tests e2e Playwright | |
| 3678 | +npm run test:e2e | |
| 3679 | + | |
| 3680 | +# Tests e2e spécifiques | |
| 3681 | +npx playwright test tests/e2e/ci-pipelines.spec.ts | |
| 3682 | +npx playwright test --grep "notifications" | |
| 3683 | + | |
| 3684 | +# Lint | |
| 3685 | +cargo clippy --workspace -- -D warnings | |
| 3686 | + | |
| 3687 | +# Format check | |
| 3688 | +cargo fmt --all -- --check | |
| 3689 | +</code></pre> | |
| 3690 | +<hr> | |
| 3691 | +<h2 id="ci-locale-exécuter-avant-un-push"><a class="header" href="#ci-locale-exécuter-avant-un-push">CI locale (exécuter avant un push)</a></h2> | |
| 3692 | +<pre><code class="language-bash"># Script rapide de vérification pré-push | |
| 3693 | +cargo fmt --all -- --check && \ | |
| 3694 | +cargo clippy --workspace -- -D warnings && \ | |
| 3695 | +cargo test --workspace && \ | |
| 3696 | +echo "All checks passed" | |
| 3697 | +</code></pre> | |
| 3698 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3699 | +<h1 id="lancer-les-tests-end-to-end-e2e"><a class="header" href="#lancer-les-tests-end-to-end-e2e">Lancer les tests end-to-end (E2E)</a></h1> | |
| 3700 | +<p>Les tests E2E de gitrust utilisent <strong>Playwright</strong> pour piloter un navigateur Chromium contre une instance de l’application configurée avec une base de données et un répertoire de dépôts dédiés.</p> | |
| 3701 | +<h2 id="pré-requis-4"><a class="header" href="#pré-requis-4">Pré-requis</a></h2> | |
| 3702 | +<ul> | |
| 3703 | +<li>Node.js (déjà présent pour Tailwind/DaisyUI)</li> | |
| 3704 | +<li>PostgreSQL accessible en local (Docker via <code>database/docker-compose.yml</code>)</li> | |
| 3705 | +<li><code>psql</code>, <code>createdb</code>, <code>dropdb</code> disponibles dans le PATH</li> | |
| 3706 | +<li>Chromium installé via Playwright (<code>npx playwright install chromium</code>)</li> | |
| 3707 | +</ul> | |
| 3708 | +<h2 id="commandes"><a class="header" href="#commandes">Commandes</a></h2> | |
| 3709 | +<pre><code class="language-bash"># Créer (ou remettre à zéro) la base de données de test | |
| 3710 | +npm run test:e2e:setup | |
| 3711 | + | |
| 3712 | +# Lancer tous les tests E2E | |
| 3713 | +npm run test:e2e | |
| 3714 | + | |
| 3715 | +# Mode debug interactif (inspecteur Playwright, pas-à-pas) | |
| 3716 | +npm run test:e2e:debug | |
| 3717 | + | |
| 3718 | +# Mode UI (interface graphique Playwright) | |
| 3719 | +npm run test:e2e:ui | |
| 3720 | + | |
| 3721 | +# Consulter le rapport HTML après exécution | |
| 3722 | +npm run test:e2e:report | |
| 3723 | +</code></pre> | |
| 3724 | +<h2 id="architecture"><a class="header" href="#architecture">Architecture</a></h2> | |
| 3725 | +<pre><code>.env.test # Variables d'environnement de test | |
| 3726 | +playwright.config.ts # Configuration Playwright | |
| 3727 | + | |
| 3728 | +scripts/ | |
| 3729 | + e2e-setup-db.sh # Crée la DB gitrust_test + nettoie depot_test | |
| 3730 | + e2e-server.sh # Démarre l'app avec .env.test | |
| 3731 | + | |
| 3732 | +tests/e2e/ | |
| 3733 | + fixtures.ts # Fixtures partagées (loginAs, credentials) | |
| 3734 | + global-setup.ts # Seed : crée les utilisateurs via /register | |
| 3735 | + global-teardown.ts # Nettoyage post-tests | |
| 3736 | + auth.spec.ts # Tests d'authentification | |
| 3737 | + repository.spec.ts # Tests de gestion des dépôts | |
| 3738 | + admin.spec.ts # Tests du panneau d'administration | |
| 3739 | + navigation.spec.ts # Tests de navigation et UI | |
| 3740 | +</code></pre> | |
| 3741 | +<h3 id="isolation-de-lenvironnement-de-test"><a class="header" href="#isolation-de-lenvironnement-de-test">Isolation de l’environnement de test</a></h3> | |
| 3742 | +<div class="table-wrapper"> | |
| 3743 | +<table> | |
| 3744 | +<thead> | |
| 3745 | +<tr><th>Ressource</th><th>Développement</th><th>Tests E2E</th></tr> | |
| 3746 | +</thead> | |
| 3747 | +<tbody> | |
| 3748 | +<tr><td>Base de données</td><td><code>gitrust</code></td><td><code>gitrust_test</code></td></tr> | |
| 3749 | +<tr><td>Port HTTP</td><td><code>4000</code></td><td><code>4001</code></td></tr> | |
| 3750 | +<tr><td>Port SSH</td><td><code>2222</code></td><td><code>2223</code></td></tr> | |
| 3751 | +<tr><td>Dépôts Git</td><td><code>./data/repos/</code></td><td><code>./depot_test/</code></td></tr> | |
| 3752 | +<tr><td>Rate limiting</td><td>Standard</td><td>Relâché (×20)</td></tr> | |
| 3753 | +<tr><td>Validation email</td><td>Activée</td><td>Désactivée</td></tr> | |
| 3754 | +</tbody> | |
| 3755 | +</table> | |
| 3756 | +</div> | |
| 3757 | +<h3 id="fonctionnement"><a class="header" href="#fonctionnement">Fonctionnement</a></h3> | |
| 3758 | +<ol> | |
| 3759 | +<li><strong><code>npm run test:e2e:setup</code></strong> supprime puis recrée la base <code>gitrust_test</code> et vide <code>depot_test/</code>.</li> | |
| 3760 | +<li><strong>Playwright</strong> démarre automatiquement l’application via <code>scripts/e2e-server.sh</code>, qui charge les variables de <code>.env.test</code> avant d’exécuter <code>cargo run</code>.</li> | |
| 3761 | +<li>Le <strong>global-setup</strong> crée les utilisateurs de test (alice, bob, charlie) en passant par le formulaire <code>/register</code> — approche 100% E2E, aucune insertion directe en base.</li> | |
| 3762 | +<li>Les <strong>tests</strong> s’exécutent séquentiellement (un seul worker) pour éviter les conflits sur la DB partagée.</li> | |
| 3763 | +<li>Le <strong>global-teardown</strong> est exécuté à la fin de la session.</li> | |
| 3764 | +</ol> | |
| 3765 | +<h3 id="fixtures"><a class="header" href="#fixtures">Fixtures</a></h3> | |
| 3766 | +<p>Le fichier <code>fixtures.ts</code> fournit une fixture <code>loginAs</code> réutilisable dans tous les tests :</p> | |
| 3767 | +<pre><code class="language-typescript">import { test, expect } from './fixtures'; | |
| 3768 | + | |
| 3769 | +test('mon test', async ({ page, loginAs }) => { | |
| 3770 | + await loginAs('alice'); | |
| 3771 | + // alice est connectée, on peut naviguer | |
| 3772 | +}); | |
| 3773 | +</code></pre> | |
| 3774 | +<p>Utilisateurs disponibles : <code>admin</code>, <code>alice</code>, <code>bob</code>, <code>charlie</code>.</p> | |
| 3775 | +<h2 id="liste-des-tests"><a class="header" href="#liste-des-tests">Liste des tests</a></h2> | |
| 3776 | +<h3 id="authspects--authentification"><a class="header" href="#authspects--authentification"><code>auth.spec.ts</code> — Authentification</a></h3> | |
| 3777 | +<div class="table-wrapper"> | |
| 3778 | +<table> | |
| 3779 | +<thead> | |
| 3780 | +<tr><th>Test</th><th>Description</th></tr> | |
| 3781 | +</thead> | |
| 3782 | +<tbody> | |
| 3783 | +<tr><td>login avec des identifiants valides</td><td>Vérifie le login standard et la redirection vers <code>/dashboard</code></td></tr> | |
| 3784 | +<tr><td>login avec un mauvais mot de passe</td><td>Vérifie l’affichage d’un message d’erreur</td></tr> | |
| 3785 | +<tr><td>login avec un utilisateur inexistant</td><td>Vérifie le rejet d’un username inconnu</td></tr> | |
| 3786 | +<tr><td>logout déconnecte l’utilisateur</td><td>Vérifie la déconnexion et l’impossibilité d’accéder au dashboard</td></tr> | |
| 3787 | +<tr><td>accès au dashboard sans login redirige vers login</td><td>Vérifie la protection des routes authentifiées</td></tr> | |
| 3788 | +<tr><td>option remember me est présente</td><td>Vérifie la présence de la checkbox remember_me</td></tr> | |
| 3789 | +<tr><td>formulaire d’inscription est accessible</td><td>Vérifie la présence de tous les champs du formulaire</td></tr> | |
| 3790 | +<tr><td>inscription avec username déjà pris échoue</td><td>Vérifie l’unicité des usernames</td></tr> | |
| 3791 | +<tr><td>inscription avec mots de passe différents échoue</td><td>Vérifie la validation de confirmation du mot de passe</td></tr> | |
| 3792 | +</tbody> | |
| 3793 | +</table> | |
| 3794 | +</div> | |
| 3795 | +<h3 id="repositoryspects--gestion-des-dépôts"><a class="header" href="#repositoryspects--gestion-des-dépôts"><code>repository.spec.ts</code> — Gestion des dépôts</a></h3> | |
| 3796 | +<div class="table-wrapper"> | |
| 3797 | +<table> | |
| 3798 | +<thead> | |
| 3799 | +<tr><th>Test</th><th>Description</th></tr> | |
| 3800 | +</thead> | |
| 3801 | +<tbody> | |
| 3802 | +<tr><td>créer un dépôt avec nom et description</td><td>Crée un dépôt complet et vérifie la redirection</td></tr> | |
| 3803 | +<tr><td>créer un dépôt sans description</td><td>Vérifie que la description est optionnelle</td></tr> | |
| 3804 | +<tr><td>créer un dépôt avec un nom déjà pris échoue</td><td>Vérifie l’unicité des slugs par utilisateur</td></tr> | |
| 3805 | +<tr><td>le formulaire de création nécessite un login</td><td>Vérifie la protection de la route <code>/new</code></td></tr> | |
| 3806 | +<tr><td>le dashboard liste les dépôts de l’utilisateur</td><td>Vérifie l’affichage des dépôts sur le dashboard</td></tr> | |
| 3807 | +<tr><td>un dépôt public est accessible sans login</td><td>Vérifie l’accès anonyme aux dépôts publics</td></tr> | |
| 3808 | +</tbody> | |
| 3809 | +</table> | |
| 3810 | +</div> | |
| 3811 | +<h3 id="adminspects--administration"><a class="header" href="#adminspects--administration"><code>admin.spec.ts</code> — Administration</a></h3> | |
| 3812 | +<div class="table-wrapper"> | |
| 3813 | +<table> | |
| 3814 | +<thead> | |
| 3815 | +<tr><th>Test</th><th>Description</th></tr> | |
| 3816 | +</thead> | |
| 3817 | +<tbody> | |
| 3818 | +<tr><td>l’admin peut accéder au panneau d’administration</td><td>Vérifie l’accès admin à <code>/admin</code></td></tr> | |
| 3819 | +<tr><td>un utilisateur normal ne peut pas accéder à l’admin</td><td>Vérifie le contrôle d’accès</td></tr> | |
| 3820 | +<tr><td>lister les utilisateurs</td><td>Vérifie l’affichage de la liste des utilisateurs</td></tr> | |
| 3821 | +<tr><td>créer un nouvel utilisateur via l’admin</td><td>Teste le formulaire de création d’utilisateur admin</td></tr> | |
| 3822 | +<tr><td>créer un utilisateur avec un username déjà pris échoue</td><td>Vérifie la gestion des doublons côté admin</td></tr> | |
| 3823 | +<tr><td>les liens du menu admin sont présents</td><td>Vérifie la navigation du panneau admin</td></tr> | |
| 3824 | +</tbody> | |
| 3825 | +</table> | |
| 3826 | +</div> | |
| 3827 | +<h3 id="navigationspects--navigation-et-ui"><a class="header" href="#navigationspects--navigation-et-ui"><code>navigation.spec.ts</code> — Navigation et UI</a></h3> | |
| 3828 | +<div class="table-wrapper"> | |
| 3829 | +<table> | |
| 3830 | +<thead> | |
| 3831 | +<tr><th>Test</th><th>Description</th></tr> | |
| 3832 | +</thead> | |
| 3833 | +<tbody> | |
| 3834 | +<tr><td>la page de login est accessible</td><td>Vérifie le rendu de la page de login</td></tr> | |
| 3835 | +<tr><td>la navbar est présente après login</td><td>Vérifie la présence de la barre de navigation</td></tr> | |
| 3836 | +<tr><td>le sidebar est présent après login</td><td>Vérifie la présence du menu latéral</td></tr> | |
| 3837 | +<tr><td>le lien vers le dashboard fonctionne</td><td>Vérifie la navigation vers le dashboard</td></tr> | |
| 3838 | +<tr><td>le lien vers la création de dépôt fonctionne</td><td>Vérifie le lien <code>/new</code></td></tr> | |
| 3839 | +<tr><td>la page utilise le thème DaisyUI</td><td>Vérifie la présence de l’attribut <code>data-theme</code></td></tr> | |
| 3840 | +</tbody> | |
| 3841 | +</table> | |
| 3842 | +</div> | |
| 3843 | +<h2 id="ajouter-un-nouveau-test"><a class="header" href="#ajouter-un-nouveau-test">Ajouter un nouveau test</a></h2> | |
| 3844 | +<ol> | |
| 3845 | +<li>Créer un fichier <code>tests/e2e/mon-module.spec.ts</code></li> | |
| 3846 | +<li>Importer les fixtures : <code>import { test, expect } from './fixtures';</code></li> | |
| 3847 | +<li>Utiliser <code>loginAs</code> pour les tests nécessitant une authentification</li> | |
| 3848 | +<li>Lancer avec <code>npm run test:e2e</code> ou cibler le fichier : <code>npx playwright test mon-module</code></li> | |
| 3849 | +</ol> | |
| 3850 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3851 | +<h1 id="ajouter-une-route-web"><a class="header" href="#ajouter-une-route-web">Ajouter une route web</a></h1> | |
| 3852 | +<blockquote> | |
| 3853 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3854 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3855 | +</blockquote> | |
| 3856 | +<h2 id="todo-53"><a class="header" href="#todo-53">TODO</a></h2> | |
| 3857 | +<ul> | |
| 3858 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3859 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3860 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3861 | +</ul> | |
| 3862 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3863 | +<h1 id="ajouter-un-service-métier"><a class="header" href="#ajouter-un-service-métier">Ajouter un service métier</a></h1> | |
| 3864 | +<blockquote> | |
| 3865 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3866 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3867 | +</blockquote> | |
| 3868 | +<h2 id="todo-54"><a class="header" href="#todo-54">TODO</a></h2> | |
| 3869 | +<ul> | |
| 3870 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3871 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3872 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3873 | +</ul> | |
| 3874 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3875 | +<h1 id="ajouter-une-migration-de-base-de-données"><a class="header" href="#ajouter-une-migration-de-base-de-données">Ajouter une migration de base de données</a></h1> | |
| 3876 | +<blockquote> | |
| 3877 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3878 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3879 | +</blockquote> | |
| 3880 | +<h2 id="todo-55"><a class="header" href="#todo-55">TODO</a></h2> | |
| 3881 | +<ul> | |
| 3882 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3883 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3884 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3885 | +</ul> | |
| 3886 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3887 | +<h1 id="implémenter-des-webhooks"><a class="header" href="#implémenter-des-webhooks">Implémenter des webhooks</a></h1> | |
| 3888 | +<blockquote> | |
| 3889 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3890 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3891 | +</blockquote> | |
| 3892 | +<h2 id="todo-56"><a class="header" href="#todo-56">TODO</a></h2> | |
| 3893 | +<ul> | |
| 3894 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3895 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3896 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3897 | +</ul> | |
| 3898 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3899 | +<h1 id="implémenter-un-endpoint-api"><a class="header" href="#implémenter-un-endpoint-api">Implémenter un endpoint API</a></h1> | |
| 3900 | +<blockquote> | |
| 3901 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 3902 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 3903 | +</blockquote> | |
| 3904 | +<h2 id="todo-57"><a class="header" href="#todo-57">TODO</a></h2> | |
| 3905 | +<ul> | |
| 3906 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 3907 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 3908 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 3909 | +</ul> | |
| 3910 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 3911 | +<h1 id="importer-un-dépôt-externe-1"><a class="header" href="#importer-un-dépôt-externe-1">Importer un dépôt externe</a></h1> | |
| 3912 | +<p>Référence du flux d’import de dépôts externes dans gitrust : rôle de la base de données, schéma de séquence complet et pistes d’optimisation.</p> | |
| 3913 | +<h2 id="1-rôle-de-la-base-de-données"><a class="header" href="#1-rôle-de-la-base-de-données">1. Rôle de la base de données</a></h2> | |
| 3914 | +<p>Pendant un import, la DB sert <strong>quatre fonctions distinctes</strong> :</p> | |
| 3915 | +<div class="table-wrapper"> | |
| 3916 | +<table> | |
| 3917 | +<thead> | |
| 3918 | +<tr><th>Rôle</th><th>Table</th><th>Fréquence</th></tr> | |
| 3919 | +</thead> | |
| 3920 | +<tbody> | |
| 3921 | +<tr><td><strong>File d’attente persistante</strong></td><td><code>import_jobs</code></td><td>1 INSERT à la création</td></tr> | |
| 3922 | +<tr><td><strong>Suivi d’état pour l’UI</strong></td><td><code>import_jobs</code></td><td>1 UPDATE toutes les ~1.5 s</td></tr> | |
| 3923 | +<tr><td><strong>Enregistrement final du dépôt</strong></td><td><code>repositories</code> + <code>resources</code></td><td>2 INSERT à la fin</td></tr> | |
| 3924 | +<tr><td><strong>Journal d’audit</strong></td><td><code>audit_log</code></td><td>1 INSERT à la fin</td></tr> | |
| 3925 | +</tbody> | |
| 3926 | +</table> | |
| 3927 | +</div> | |
| 3928 | +<p>Le clone lui-même ne passe <strong>jamais</strong> par la DB : seuls les métadonnées et compteurs de progression y transitent. Les objets Git sont écrits directement sur disque dans <code>{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/</code>.</p> | |
| 3929 | +<h3 id="pourquoi-persister-létat-"><a class="header" href="#pourquoi-persister-létat-">Pourquoi persister l’état ?</a></h3> | |
| 3930 | +<ul> | |
| 3931 | +<li><strong>Reprise après redémarrage</strong> : le serveur peut crasher pendant un clone de plusieurs minutes. La table permet de marquer ces jobs comme <code>failed</code> au redémarrage.</li> | |
| 3932 | +<li><strong>SSE</strong> : l’UI lit la progression via un endpoint SSE qui interroge la DB toutes les 2 s. Sans DB, il faudrait un canal in-memory plus un mécanisme de routage vers le bon client.</li> | |
| 3933 | +<li><strong>Multi-navigateurs</strong> : si l’utilisateur ferme l’onglet puis le rouvre, il retrouve l’état exact du job.</li> | |
| 3934 | +<li><strong>Audit / historique</strong> : conservation des imports passés avec leurs statistiques.</li> | |
| 3935 | +</ul> | |
| 3936 | +<h2 id="2-schéma-du-flux-actuel"><a class="header" href="#2-schéma-du-flux-actuel">2. Schéma du flux actuel</a></h2> | |
| 3937 | +<pre class="mermaid">sequenceDiagram | |
| 3938 | + autonumber | |
| 3939 | + participant UI as Navigateur | |
| 3940 | + participant H as Handler HTTP | |
| 3941 | + participant Svc as ImportService | |
| 3942 | + participant Chan as mpsc Channel | |
| 3943 | + participant W as ImportWorker | |
| 3944 | + participant G as git2 (libgit2) | |
| 3945 | + participant DB as PostgreSQL | |
| 3946 | + participant FS as Disque | |
| 3947 | + | |
| 3948 | + UI->>H: POST /import<br/>(url, slug, pat) | |
| 3949 | + H->>Svc: create_job | |
| 3950 | + Svc->>DB: INSERT import_jobs (pending) | |
| 3951 | + H->>Chan: try_send(ImportTask+PAT) | |
| 3952 | + H-->>UI: 302 /imports/{id} | |
| 3953 | + | |
| 3954 | + UI->>H: GET /imports/{id}/stream (SSE) | |
| 3955 | + Note over UI,H: EventSource ouvert | |
| 3956 | + | |
| 3957 | + Chan->>W: ImportTask | |
| 3958 | + W->>Svc: mark_running | |
| 3959 | + Svc->>DB: SELECT import_jobs<br/>UPDATE status=running | |
| 3960 | + | |
| 3961 | + W->>G: RepoBuilder.bare(true).clone() | |
| 3962 | + G->>FS: init_bare + fetch | |
| 3963 | + loop callbacks transfer_progress (flood) | |
| 3964 | + G-->>W: stats (objets/bytes) | |
| 3965 | + alt throttle 1500 ms écoulé | |
| 3966 | + W->>Svc: update_progress (tokio::spawn) | |
| 3967 | + Svc->>DB: SELECT + UPDATE import_jobs | |
| 3968 | + else dans le throttle | |
| 3969 | + W--xW: ignore | |
| 3970 | + end | |
| 3971 | + end | |
| 3972 | + | |
| 3973 | + loop toutes les 2 s | |
| 3974 | + H->>DB: SELECT import_jobs WHERE id=? | |
| 3975 | + DB-->>H: état courant | |
| 3976 | + H-->>UI: SSE event (JSON) | |
| 3977 | + UI->>UI: bar.value = percent | |
| 3978 | + end | |
| 3979 | + | |
| 3980 | + G-->>FS: objets écrits | |
| 3981 | + G-->>W: Ok | |
| 3982 | + | |
| 3983 | + W->>Svc: check cancel (SELECT import_jobs) | |
| 3984 | + W->>Svc: update_progress (Finalizing) | |
| 3985 | + Svc->>DB: SELECT + UPDATE | |
| 3986 | + | |
| 3987 | + W->>RepositoryService: create | |
| 3988 | + RepositoryService->>DB: INSERT resources<br/>INSERT repositories | |
| 3989 | + W->>DB: UPDATE repositories<br/>(import_source_url, is_empty=false) | |
| 3990 | + W->>Svc: mark_success | |
| 3991 | + Svc->>DB: SELECT + UPDATE import_jobs<br/>(status=success, duration) | |
| 3992 | + W->>AuditService: log REPO_IMPORTED | |
| 3993 | + AuditService->>DB: INSERT audit_log | |
| 3994 | + | |
| 3995 | + H->>DB: SELECT (prochain tick SSE) | |
| 3996 | + H-->>UI: terminal=true | |
| 3997 | + UI->>UI: window.location.reload() | |
| 3998 | +</pre> | |
| 3999 | + | |
| 4000 | +<h2 id="3-coût-db-par-import"><a class="header" href="#3-coût-db-par-import">3. Coût DB par import</a></h2> | |
| 4001 | +<p>Pour un clone de <strong>90 secondes</strong> avec throttle 1500 ms :</p> | |
| 4002 | +<div class="table-wrapper"> | |
| 4003 | +<table> | |
| 4004 | +<thead> | |
| 4005 | +<tr><th>Étape</th><th>Opérations DB</th><th>Cumul</th></tr> | |
| 4006 | +</thead> | |
| 4007 | +<tbody> | |
| 4008 | +<tr><td>create_job</td><td>1 INSERT</td><td>1</td></tr> | |
| 4009 | +<tr><td>mark_running</td><td>1 SELECT + 1 UPDATE</td><td>3</td></tr> | |
| 4010 | +<tr><td>update_progress pendant clone</td><td>~60 x (1 SELECT + 1 UPDATE)</td><td>123</td></tr> | |
| 4011 | +<tr><td>check cancel</td><td>1 SELECT</td><td>124</td></tr> | |
| 4012 | +<tr><td>update_progress finalizing</td><td>1 SELECT + 1 UPDATE</td><td>126</td></tr> | |
| 4013 | +<tr><td>RepositoryService::create</td><td>2 INSERT (repo + resource)</td><td>128</td></tr> | |
| 4014 | +<tr><td>update repositories</td><td>1 UPDATE</td><td>129</td></tr> | |
| 4015 | +<tr><td>mark_success</td><td>1 SELECT + 1 UPDATE</td><td>131</td></tr> | |
| 4016 | +<tr><td>audit log</td><td>1 INSERT</td><td>132</td></tr> | |
| 4017 | +<tr><td>SSE stream (45 ticks à 2 s)</td><td>45 SELECT</td><td>177</td></tr> | |
| 4018 | +</tbody> | |
| 4019 | +</table> | |
| 4020 | +</div> | |
| 4021 | +<p><strong>~177 requêtes pour un import</strong>, dont <strong>120+ sont des progress updates</strong>.</p> | |
| 4022 | +<h2 id="4-pistes-doptimisation-sans-changer-libgit2"><a class="header" href="#4-pistes-doptimisation-sans-changer-libgit2">4. Pistes d’optimisation (sans changer libgit2)</a></h2> | |
| 4023 | +<h3 id="41-éliminer-le-select-avant-update-dans-update_progress"><a class="header" href="#41-éliminer-le-select-avant-update-dans-update_progress">4.1 Éliminer le SELECT avant UPDATE dans <code>update_progress</code></a></h3> | |
| 4024 | +<p><code>update_progress</code> fait actuellement <code>load_model</code> (SELECT) puis <code>active.update(db)</code> (UPDATE + RETURNING). Le SELECT est redondant : on connaît l’ID, on veut juste patcher 4 colonnes.</p> | |
| 4025 | +<p><strong>Gain</strong> : divise par 2 les requêtes de progression (~60 requêtes en moins pour un clone de 90 s).</p> | |
| 4026 | +<p>Refonte suggérée avec <code>UpdateMany</code> (pattern déjà utilisé dans <code>ci_service.rs::cancel_running_pipelines</code>) :</p> | |
| 4027 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 4028 | +</span><span class="boring">fn main() { | |
| 4029 | +</span>import_job::Entity::update_many() | |
| 4030 | + .col_expr(Column::ReceivedObjects, Expr::value(received as i32)) | |
| 4031 | + .col_expr(Column::TotalObjects, Expr::value(total as i32)) | |
| 4032 | + .col_expr(Column::ReceivedBytes, Expr::value(bytes as i64)) | |
| 4033 | + .col_expr(Column::Phase, Expr::value(phase.as_str())) | |
| 4034 | + .col_expr(Column::UpdatedAt, Expr::value(Utc::now())) | |
| 4035 | + .filter(Column::Id.eq(job_id)) | |
| 4036 | + .exec(db) | |
| 4037 | + .await?; | |
| 4038 | +<span class="boring">}</span></code></pre> | |
| 4039 | +<p>Même principe pour <code>mark_running</code>, <code>mark_success</code>, <code>mark_failed</code>, <code>mark_cancelled</code> → toutes divisent leurs aller-retours DB par 2.</p> | |
| 4040 | +<h3 id="42-downsampler-la-progression-dans-le-worker-dédié"><a class="header" href="#42-downsampler-la-progression-dans-le-worker-dédié">4.2 Downsampler la progression dans le worker (dédié)</a></h3> | |
| 4041 | +<p>Plan alternatif : le callback écrit simplement dans un <code>tokio::sync::watch<TransferStats></code> (en mémoire, zéro DB). Une <strong>tâche dédiée</strong> consomme ce channel et UPDATE la DB à 1 Hz seulement.</p> | |
| 4042 | +<pre class="mermaid">flowchart LR | |
| 4043 | + G[git2 callback] -->|watch::send<br/>très haute fréquence| W[watch channel] | |
| 4044 | + W --> T[Tâche update<br/>ticker 1 Hz] | |
| 4045 | + T -->|1 UPDATE / s| DB | |
| 4046 | +</pre> | |
| 4047 | + | |
| 4048 | +<p><strong>Gains</strong> :</p> | |
| 4049 | +<ul> | |
| 4050 | +<li><strong>1 seul émetteur DB</strong> au lieu de N tokio::spawn concurrents → zéro contention sur le pool</li> | |
| 4051 | +<li><strong>Fréquence déterministe</strong> (1 Hz) indépendante de la vitesse réseau</li> | |
| 4052 | +<li>Code plus clair (la tâche est async, on peut <code>await</code> sans détour)</li> | |
| 4053 | +</ul> | |
| 4054 | +<h3 id="43-supprimer-le-returning-implicite-de-seaorm"><a class="header" href="#43-supprimer-le-returning-implicite-de-seaorm">4.3 Supprimer le <code>RETURNING</code> implicite de SeaORM</a></h3> | |
| 4055 | +<p><code>ActiveModel::update(db)</code> renvoie le modèle complet via <code>... RETURNING *</code>. Pour les progress updates, on n’utilise pas le retour. <code>UpdateMany::exec</code> n’émet pas de <code>RETURNING</code> → moins de bytes sur le wire, moins de désérialisation.</p> | |
| 4056 | +<h3 id="44-pool-db-dédié-pour-le-worker"><a class="header" href="#44-pool-db-dédié-pour-le-worker">4.4 Pool DB dédié pour le worker</a></h3> | |
| 4057 | +<p>Aujourd’hui le worker partage le pool principal avec les handlers HTTP. Un pool de 4-8 connexions dédié au worker éviterait qu’un import sature le pool et fasse timeouter les requêtes utilisateur.</p> | |
| 4058 | +<h3 id="45-debouncer-le-sse-côté-serveur"><a class="header" href="#45-debouncer-le-sse-côté-serveur">4.5 Debouncer le SSE côté serveur</a></h3> | |
| 4059 | +<p>Le SSE SELECT toutes les 2 s même quand rien ne change. Alternative : <strong>PostgreSQL LISTEN/NOTIFY</strong> sur une chaîne <code>import_job_{uuid}</code>. Chaque UPDATE émet un NOTIFY, la connexion SSE fait LISTEN → push direct, zéro polling.</p> | |
| 4060 | +<p><strong>Coût</strong> : nécessite une connexion DB dédiée par SSE (LISTEN est stateful). Compromis à évaluer.</p> | |
| 4061 | +<h2 id="5-optimisation-majeure--shell-out-vers-git-clone---bare"><a class="header" href="#5-optimisation-majeure--shell-out-vers-git-clone---bare">5. Optimisation majeure : shell-out vers <code>git clone --bare</code></a></h2> | |
| 4062 | +<p><strong>Indépendant des optimisations DB</strong> mais de loin le plus gros gain. libgit2 est structurellement 2-5x plus lent que <code>git</code> CLI sur gros clones HTTPS (pas de multiplexage, résolution de deltas mono-threadée, etc.).</p> | |
| 4063 | +<pre class="mermaid">flowchart TB | |
| 4064 | + subgraph Actuel[Flux actuel — libgit2] | |
| 4065 | + A1[RepoBuilder::clone] --> A2[libgit2: fetch + resolve] | |
| 4066 | + A2 -->|lent 2-5x| A3[bare repo] | |
| 4067 | + end | |
| 4068 | + subgraph Cible[Flux optimisé — git CLI] | |
| 4069 | + B1[Command::new git] --> B2[git clone --bare --progress] | |
| 4070 | + B2 -->|stderr| B3[Parser regex<br/>Receiving objects: X%] | |
| 4071 | + B3 --> B4[update watch channel] | |
| 4072 | + B2 -->|vitesse native| B5[bare repo] | |
| 4073 | + end | |
| 4074 | +</pre> | |
| 4075 | + | |
| 4076 | +<p>Avantages :</p> | |
| 4077 | +<ul> | |
| 4078 | +<li><strong>Vitesse native</strong> (parité avec <code>git</code> CLI)</li> | |
| 4079 | +<li><strong>Progression native</strong> via stderr <code>Receiving objects: 42% (368/876), 1.10 MiB | 2.05 MiB/s</code></li> | |
| 4080 | +<li><strong>HEAD correctement positionné</strong> (plus besoin du workaround <code>RepoBuilder</code>)</li> | |
| 4081 | +<li><strong>Moins de dépendance sur libgit2</strong> pour le cas du clone initial</li> | |
| 4082 | +</ul> | |
| 4083 | +<p>Contrepartie : binaire <code>git</code> requis sur le serveur (déjà le cas — utilisé par <code>SbomService::git_archive</code>).</p> | |
| 4084 | +<h2 id="6-priorités-recommandées"><a class="header" href="#6-priorités-recommandées">6. Priorités recommandées</a></h2> | |
| 4085 | +<p>Si on voulait optimiser maintenant, ordre proposé :</p> | |
| 4086 | +<ol> | |
| 4087 | +<li><strong>Shell-out <code>git clone --bare</code></strong> — gain réel pour l’utilisateur (clone 3-5x plus rapide).</li> | |
| 4088 | +<li><strong><code>update_many</code> pour <code>update_progress</code></strong> — divise la pression DB par 2, changement mécanique de ~20 lignes.</li> | |
| 4089 | +<li><strong><code>watch</code> channel + tâche 1 Hz</strong> — architecture plus propre, élimine les problèmes de pool.</li> | |
| 4090 | +<li><strong>Pool DB dédié worker</strong> — filet de sécurité opérationnel.</li> | |
| 4091 | +<li>LISTEN/NOTIFY pour SSE — seulement si beaucoup de clients simultanés.</li> | |
| 4092 | +</ol> | |
| 4093 | +<p>Les gains 2-4 sont utiles même avec libgit2 ; le gain 1 est le plus visible pour l’utilisateur final.</p> | |
| 4094 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4095 | +<h1 id="contribuer-à-rustwarden"><a class="header" href="#contribuer-à-rustwarden">Contribuer à rustwarden</a></h1> | |
| 4096 | +<p>Ce document décrit les interactions entre gitrust et le framework rustwarden-core, et explique comment étendre le framework côté gitrust sans modifier ses sources.</p> | |
| 4097 | +<h2 id="services-framework-utilisés"><a class="header" href="#services-framework-utilisés">Services framework utilisés</a></h2> | |
| 4098 | +<div class="table-wrapper"> | |
| 4099 | +<table> | |
| 4100 | +<thead> | |
| 4101 | +<tr><th>Service</th><th>Usage dans gitrust</th></tr> | |
| 4102 | +</thead> | |
| 4103 | +<tbody> | |
| 4104 | +<tr><td><code>UserService</code></td><td>CRUD users, roles, <code>delete_user</code>, <code>admin_reset_password</code>, <code>change_password_direct</code>, <code>unassign_role_from_user</code></td></tr> | |
| 4105 | +<tr><td><code>RoleService</code></td><td>Liste/création/suppression roles, <code>get_role_by_name</code></td></tr> | |
| 4106 | +<tr><td><code>PasswordService</code></td><td><code>hash_password</code> (async), <code>verify_password</code> (async), <code>generate_secure_password</code></td></tr> | |
| 4107 | +<tr><td><code>ResourceService</code></td><td><code>register</code>/<code>unregister</code> repos, <code>set_public</code>, <code>effective_permission</code>, <code>find_by_type_and_id</code></td></tr> | |
| 4108 | +<tr><td><code>AuthService</code></td><td><code>authenticate_user</code> (login)</td></tr> | |
| 4109 | +<tr><td><code>JwtService</code></td><td><code>generate_token</code> (login)</td></tr> | |
| 4110 | +<tr><td><code>EmailValidationService</code></td><td>Vérification email</td></tr> | |
| 4111 | +<tr><td><code>PasswordResetService</code></td><td>Flux “mot de passe oublié”</td></tr> | |
| 4112 | +<tr><td><code>AppSettingsService</code></td><td><code>get_bool</code> pour <code>registration_enabled</code></td></tr> | |
| 4113 | +</tbody> | |
| 4114 | +</table> | |
| 4115 | +</div> | |
| 4116 | +<h2 id="hook-on_user_deleted-implémenté"><a class="header" href="#hook-on_user_deleted-implémenté">Hook <code>on_user_deleted</code> implémenté</a></h2> | |
| 4117 | +<p>Le hook <code>on_user_deleted</code> dans <code>gitrust-hooks</code> supprime le répertoire utilisateur sur le filesystem (<code>repos_base_path/username/</code>) avant la cascade DB. Appelé automatiquement par <code>UserService::delete_user</code>.</p> | |
| 4118 | +<h2 id="règle-fondamentale"><a class="header" href="#règle-fondamentale">Règle fondamentale</a></h2> | |
| 4119 | +<p><strong>Ne jamais modifier <code>crates/rustwarden-core/</code>.</strong> Ce crate est le framework partagé. Toute extension passe par :</p> | |
| 4120 | +<ul> | |
| 4121 | +<li>Des <strong>wrappers</strong> côté <code>gitrust-core</code> (services qui délèguent au framework)</li> | |
| 4122 | +<li>Des <strong>trait impls</strong> (<code>RustwardenHooks</code> dans <code>gitrust-hooks</code>)</li> | |
| 4123 | +<li>Des <strong>extensions</strong> via les mécanismes d’injection Axum (<code>Extension</code>, <code>State</code>)</li> | |
| 4124 | +</ul> | |
| 4125 | +<h2 id="aucun-contournement-en-cours"><a class="header" href="#aucun-contournement-en-cours">Aucun contournement en cours</a></h2> | |
| 4126 | +<p>Tous les anciens contournements (entités directes, hash manuels) ont été remplacés par les services du framework suite à la mise à jour du 2026-03-26.</p> | |
| 4127 | +<h2 id="ajouter-une-fonctionnalité-nécessitant-un-service-framework-absent"><a class="header" href="#ajouter-une-fonctionnalité-nécessitant-un-service-framework-absent">Ajouter une fonctionnalité nécessitant un service framework absent</a></h2> | |
| 4128 | +<p>Si un service nécessaire n’existe pas dans rustwarden-core :</p> | |
| 4129 | +<ol> | |
| 4130 | +<li>Implémenter le service côté <code>gitrust-core</code> en réutilisant les primitives du framework (ex: <code>PasswordService::hash_password</code> pour le hashage)</li> | |
| 4131 | +<li>Si la fonctionnalité est générique et bénéficierait au framework lui-même, ouvrir une issue ou une PR upstream sur le dépôt rustwarden-core</li> | |
| 4132 | +<li>Ne pas dupliquer la logique d’auth, de session, ou de JWT — ces domaines appartiennent exclusivement au framework</li> | |
| 4133 | +</ol> | |
| 4134 | +<h2 id="pattern-dextension-via-hooks"><a class="header" href="#pattern-dextension-via-hooks">Pattern d’extension via hooks</a></h2> | |
| 4135 | +<p>Les hooks (<code>gitrust-hooks/src/lib.rs</code>) implémentent <code>RustwardenHooks</code> et sont injectés dans le routeur Axum au démarrage :</p> | |
| 4136 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 4137 | +</span><span class="boring">fn main() { | |
| 4138 | +</span>// Dans main.rs | |
| 4139 | +let hooks = Arc::new(GitrustHooks::new(config.clone())); | |
| 4140 | +// Passé via .merge_routes(app_routes(hooks)) | |
| 4141 | +// Puis disponible via axum::Extension dans les handlers | |
| 4142 | +<span class="boring">}</span></code></pre> | |
| 4143 | +<p>Pour réagir à un nouvel événement du framework, ajouter la méthode correspondante dans l’impl <code>RustwardenHooks</code> de <code>gitrust-hooks</code>, sans toucher au code du framework qui émet l’événement.</p> | |
| 4144 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4145 | +<h1 id="passer-la-qa-avant-un-merge"><a class="header" href="#passer-la-qa-avant-un-merge">Passer la QA avant un merge</a></h1> | |
| 4146 | +<blockquote> | |
| 4147 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 4148 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 4149 | +</blockquote> | |
| 4150 | +<h2 id="todo-58"><a class="header" href="#todo-58">TODO</a></h2> | |
| 4151 | +<ul> | |
| 4152 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 4153 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 4154 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 4155 | +</ul> | |
| 4156 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4157 | +<h1 id="référence-2"><a class="header" href="#référence-2">Référence</a></h1> | |
| 4158 | +<blockquote> | |
| 4159 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 4160 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 4161 | +</blockquote> | |
| 4162 | +<h2 id="todo-59"><a class="header" href="#todo-59">TODO</a></h2> | |
| 4163 | +<ul> | |
| 4164 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 4165 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 4166 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 4167 | +</ul> | |
| 4168 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4169 | +<h1 id="architecture-par-crates"><a class="header" href="#architecture-par-crates">Architecture par crates</a></h1> | |
| 4170 | +<p>Référence structurelle de gitrust : crates, modules, routes, dépendances et composants CI.</p> | |
| 4171 | +<h2 id="dépendances-entre-crates"><a class="header" href="#dépendances-entre-crates">Dépendances entre crates</a></h2> | |
| 4172 | +<pre class="mermaid">graph LR | |
| 4173 | + RW["rustwarden-core"] | |
| 4174 | + | |
| 4175 | + Git["gitrust-git"] | |
| 4176 | + Core["gitrust-core"] | |
| 4177 | + Hooks["gitrust-hooks"] | |
| 4178 | + SSH["gitrust-ssh"] | |
| 4179 | + Web["gitrust-web"] | |
| 4180 | + Bin["gitrust (binaire)"] | |
| 4181 | + | |
| 4182 | + Core --> RW | |
| 4183 | + Git -.->|"indépendant<br/>(git2, tokio)"| RW | |
| 4184 | + | |
| 4185 | + Hooks --> Core | |
| 4186 | + Hooks --> RW | |
| 4187 | + | |
| 4188 | + SSH --> Core | |
| 4189 | + SSH --> Git | |
| 4190 | + | |
| 4191 | + Web --> Core | |
| 4192 | + Web --> Git | |
| 4193 | + Web -.->|"CI pages"| Git | |
| 4194 | + | |
| 4195 | + Bin --> Core | |
| 4196 | + Bin --> Git | |
| 4197 | + Bin --> SSH | |
| 4198 | + Bin --> Web | |
| 4199 | + Bin --> Hooks | |
| 4200 | + Bin --> RW | |
| 4201 | + | |
| 4202 | + subgraph "Externes CI (Phase 5b)" | |
| 4203 | + Dagger["Dagger CLI"] | |
| 4204 | + CiEng["ci-engine (Python)"] | |
| 4205 | + Syft["Syft"] | |
| 4206 | + DTrack["Dependency-Track"] | |
| 4207 | + end | |
| 4208 | + | |
| 4209 | + Core -.->|"CiWorker<br/>sous-processus"| Dagger | |
| 4210 | + Dagger -.-> CiEng | |
| 4211 | + Core -.-> Syft | |
| 4212 | + Syft -.-> DTrack | |
| 4213 | +</pre> | |
| 4214 | + | |
| 4215 | +<hr> | |
| 4216 | +<h2 id="crates--responsabilités"><a class="header" href="#crates--responsabilités">Crates — Responsabilités</a></h2> | |
| 4217 | +<h3 id="gitrust-core"><a class="header" href="#gitrust-core">gitrust-core</a></h3> | |
| 4218 | +<p>Cœur métier. Ne dépend que de rustwarden-core et des crates Rust standards.</p> | |
| 4219 | +<div class="table-wrapper"> | |
| 4220 | +<table> | |
| 4221 | +<thead> | |
| 4222 | +<tr><th>Module</th><th>Rôle</th></tr> | |
| 4223 | +</thead> | |
| 4224 | +<tbody> | |
| 4225 | +<tr><td><code>config</code></td><td><code>GitrustConfig::from_env()</code> — ports SSH, chemin repos, limites</td></tr> | |
| 4226 | +<tr><td><code>error</code></td><td><code>GitrustError</code> — erreurs domaine Git + <code>IntoResponse</code> HTTP</td></tr> | |
| 4227 | +<tr><td><code>roles</code></td><td><code>enum Role { Reader, Developer, Maintainer, Owner }</code> avec <code>Ord</code></td></tr> | |
| 4228 | +<tr><td><code>types</code></td><td>Newtypes validés : <code>RepoSlug</code>, <code>TeamSlug</code>, <code>Fingerprint</code>, <code>TokenHash</code></td></tr> | |
| 4229 | +<tr><td><code>models/</code></td><td>Entités SeaORM : repository, ssh_key, team, team_member, team_repository_access, ci_pipeline, ci_job, ci_log, ci_config, ci_variable</td></tr> | |
| 4230 | +<tr><td><code>migrations/</code></td><td>Migrations SeaORM (tables gitrust) combinées avec les migrations core</td></tr> | |
| 4231 | +<tr><td><code>services/</code></td><td><code>SshKeyService</code>, <code>RepositoryService</code>, <code>TeamService</code>, <code>AccessService</code>, <code>CiService</code>, <code>CiVariableService</code>, <code>CiDetectionService</code>, <code>CiWorker</code>, <code>NotificationService</code></td></tr> | |
| 4232 | +<tr><td><code>dto/</code></td><td>Structures d’entrée/sortie pour les services</td></tr> | |
| 4233 | +</tbody> | |
| 4234 | +</table> | |
| 4235 | +</div> | |
| 4236 | +<h3 id="gitrust-git"><a class="header" href="#gitrust-git">gitrust-git</a></h3> | |
| 4237 | +<p>Opérations Git sur le système de fichiers. Utilise <code>git2</code> (libgit2). Pas de dépendance vers la base de données.</p> | |
| 4238 | +<div class="table-wrapper"> | |
| 4239 | +<table> | |
| 4240 | +<thead> | |
| 4241 | +<tr><th>Module</th><th>Rôle</th></tr> | |
| 4242 | +</thead> | |
| 4243 | +<tbody> | |
| 4244 | +<tr><td><code>errors</code></td><td><code>enum GitError</code> (Git, RepoNotFound, RefNotFound, PathTraversal, …)</td></tr> | |
| 4245 | +<tr><td><code>bare_repo</code></td><td>Init, open, delete, exists + validation chemin canonique sous base</td></tr> | |
| 4246 | +<tr><td><code>branch</code> / <code>tag</code></td><td>Listing branches (BranchInfo) et tags (TagInfo, annotated/lightweight)</td></tr> | |
| 4247 | +<tr><td><code>reference</code></td><td>resolve_ref (branch -> tag -> SHA -> revparse)</td></tr> | |
| 4248 | +<tr><td><code>tree_browser</code></td><td>list_tree (dirs first, sorted), TreeEntry, EntryKind</td></tr> | |
| 4249 | +<tr><td><code>blob_reader</code></td><td>read_blob -> Text/Binary, détection binaire (null bytes)</td></tr> | |
| 4250 | +<tr><td><code>commit_log</code></td><td>list_commits (paginé), find_commit, CommitInfo</td></tr> | |
| 4251 | +<tr><td><code>readme</code></td><td>find_readme (README.md > README > readme.md > …)</td></tr> | |
| 4252 | +<tr><td><code>pack_protocol</code></td><td>advertise_refs, serve_pack (async, git-upload-pack/git-receive-pack)</td></tr> | |
| 4253 | +</tbody> | |
| 4254 | +</table> | |
| 4255 | +</div> | |
| 4256 | +<h3 id="gitrust-ssh"><a class="header" href="#gitrust-ssh">gitrust-ssh</a></h3> | |
| 4257 | +<p>Serveur SSH basé sur <code>russh</code>. Authentification par clé publique.</p> | |
| 4258 | +<div class="table-wrapper"> | |
| 4259 | +<table> | |
| 4260 | +<thead> | |
| 4261 | +<tr><th>Module (prévu)</th><th>Rôle</th></tr> | |
| 4262 | +</thead> | |
| 4263 | +<tbody> | |
| 4264 | +<tr><td><code>server</code></td><td>Démarrage, génération clé hôte Ed25519</td></tr> | |
| 4265 | +<tr><td><code>auth</code></td><td>Authentification par fingerprint -> SshKeyService</td></tr> | |
| 4266 | +<tr><td><code>session</code></td><td>Handler SSH (exec, shell)</td></tr> | |
| 4267 | +<tr><td><code>command_handler</code></td><td>Parsing <code>git-upload-pack</code>/<code>git-receive-pack</code></td></tr> | |
| 4268 | +</tbody> | |
| 4269 | +</table> | |
| 4270 | +</div> | |
| 4271 | +<h3 id="gitrust-web"><a class="header" href="#gitrust-web">gitrust-web</a></h3> | |
| 4272 | +<p>Interface web SSR (Server-Side Rendering) avec Askama (templates compilés) + HTMX (interactions dynamiques). Fonctionne en mode <code>headless()</code> : les pages UI du framework (<code>rustwarden-ui</code>) ne sont pas montées, gitrust-web réimplémente toutes les pages avec un design spécifique (sidebar contextuelle, navigation Git, DaisyUI).</p> | |
| 4273 | +<p><strong>Architecture des routes :</strong></p> | |
| 4274 | +<pre><code>gitrust (port 4000) | |
| 4275 | +├── /api/v1/auth/* ← Routes API du framework (JSON) | |
| 4276 | +│ ├── POST /login AuthService::authenticate_user | |
| 4277 | +│ ├── POST /register UserService::create_user | |
| 4278 | +│ ├── POST /refresh RefreshTokenService (rotation JWT) | |
| 4279 | +│ ├── POST /logout JwtBlacklistService | |
| 4280 | +│ ├── GET /me Claims extraction | |
| 4281 | +│ ├── POST /forgot-password PasswordResetService::request_reset | |
| 4282 | +│ ├── POST /reset-password PasswordResetService::reset_password | |
| 4283 | +│ ├── GET /verify-email/{t} EmailValidationService::verify_email | |
| 4284 | +│ └── POST /resend-verif EmailValidationService::resend | |
| 4285 | +│ | |
| 4286 | +├── /api/v1/* ← API REST Gitrust (JSON, auth JWT/PAT) | |
| 4287 | +│ ├── /user, /user/repos Profil utilisateur | |
| 4288 | +│ ├── /repos/{o}/{r} Détail dépôt, branches, tags, commits | |
| 4289 | +│ ├── /repos/{o}/{r}/issues CRUD issues + commentaires | |
| 4290 | +│ ├── /repos/{o}/{r}/pulls CRUD PRs + merge | |
| 4291 | +│ └── /repos/{o}/{r}/ci/* Pipelines CI (list, trigger, cancel, logs) | |
| 4292 | +│ | |
| 4293 | +├── /* ← Pages SSR gitrust (HTML) | |
| 4294 | +│ ├── /login, /register Pages formulaires (design gitrust) | |
| 4295 | +│ ├── /dashboard, /teams Pages utilisateur | |
| 4296 | +│ ├── /settings/* Profile, SSH keys, sessions, notifications | |
| 4297 | +│ ├── /notifications Liste notifications + SSE stream | |
| 4298 | +│ ├── /admin/* Administration (+ admin CI) | |
| 4299 | +│ ├── /{owner}/{repo}/* Navigation dépôt Git | |
| 4300 | +│ └── /{owner}/{repo}/ci/* Pages CI (pipelines, logs, config, variables) | |
| 4301 | +│ | |
| 4302 | +└── /static/* ← Assets locaux (CSS, JS, HTMX) | |
| 4303 | +</code></pre> | |
| 4304 | +<p>Les routes API du framework sont montées via <code>framework_api_routes()</code> dans <code>routes.rs</code>. Elles sont utilisées par :</p> | |
| 4305 | +<ul> | |
| 4306 | +<li>Les liens dans les emails (vérification, reset password)</li> | |
| 4307 | +<li>Le refresh token (rotation JWT, session longue durée)</li> | |
| 4308 | +<li>L’accès programmatique (GET /me, POST /logout)</li> | |
| 4309 | +</ul> | |
| 4310 | +<p>Les pages SSR et les routes API coexistent : les formulaires HTML soumettent aux handlers gitrust (SSR), tandis que les services framework génèrent des liens vers les routes API.</p> | |
| 4311 | +<div class="table-wrapper"> | |
| 4312 | +<table> | |
| 4313 | +<thead> | |
| 4314 | +<tr><th>Module</th><th>Rôle</th></tr> | |
| 4315 | +</thead> | |
| 4316 | +<tbody> | |
| 4317 | +<tr><td><code>routes.rs</code></td><td>Routeur principal : framework API + API REST Gitrust + pages SSR + fichiers statiques</td></tr> | |
| 4318 | +<tr><td><code>handlers/</code></td><td>Handlers Axum SSR (un fichier par domaine) + handlers API JSON</td></tr> | |
| 4319 | +<tr><td><code>templates.rs</code></td><td>Structs Askama + SidebarContext + RepoNav</td></tr> | |
| 4320 | +<tr><td><code>helpers.rs</code></td><td>require_auth, require_admin, sidebar_*, resolve_repo_access</td></tr> | |
| 4321 | +<tr><td><code>templates/</code></td><td>Templates HTML (Askama, extends base.html)</td></tr> | |
| 4322 | +<tr><td><code>static_files.rs</code></td><td>ServeDir pour /static</td></tr> | |
| 4323 | +</tbody> | |
| 4324 | +</table> | |
| 4325 | +</div> | |
| 4326 | +<h3 id="gitrust-hooks"><a class="header" href="#gitrust-hooks">gitrust-hooks</a></h3> | |
| 4327 | +<p>Implémentation de <code>RustwardenHooks</code> pour réagir aux événements du framework. Les hooks sont injectés dans le routeur Axum via <code>Arc<dyn RustwardenHooks></code> + <code>axum::Extension</code> (dans <code>main.rs</code>).</p> | |
| 4328 | +<div class="table-wrapper"> | |
| 4329 | +<table> | |
| 4330 | +<thead> | |
| 4331 | +<tr><th>Hook</th><th>Action</th></tr> | |
| 4332 | +</thead> | |
| 4333 | +<tbody> | |
| 4334 | +<tr><td><code>on_user_registered</code></td><td>Crée le répertoire utilisateur sur le FS (anti path-traversal)</td></tr> | |
| 4335 | +<tr><td><code>on_user_deleted</code></td><td>Supprime le répertoire utilisateur + bare repos sur le FS</td></tr> | |
| 4336 | +<tr><td><code>on_resource_shared</code></td><td>Audit log si resource_type = “repository”</td></tr> | |
| 4337 | +<tr><td><code>on_resource_unshared</code></td><td>Audit log si resource_type = “repository”</td></tr> | |
| 4338 | +</tbody> | |
| 4339 | +</table> | |
| 4340 | +</div> | |
| 4341 | +<hr> | |
| 4342 | +<h2 id="notifications-2"><a class="header" href="#notifications-2">Notifications</a></h2> | |
| 4343 | +<p>Système de notification à deux canaux : <strong>in-app</strong> (SSE temps réel + page) et <strong>email</strong> (worker SMTP du framework).</p> | |
| 4344 | +<pre><code>Événement (pipeline échoue, PR commentée, etc.) | |
| 4345 | + │ | |
| 4346 | + ▼ | |
| 4347 | +NotificationService::notify(user_id, event_type, title, body, link) | |
| 4348 | + │ | |
| 4349 | + ├── INSERT INTO notifications (in-app) | |
| 4350 | + │ → broadcast::Sender → SSE /notifications/stream | |
| 4351 | + │ → Badge header mis à jour en temps réel (HTMX) | |
| 4352 | + │ | |
| 4353 | + └── if user.email_on_{event} = true: | |
| 4354 | + EmailQueueService::enqueue() (framework SMTP worker) | |
| 4355 | +</code></pre> | |
| 4356 | +<p>Les préférences de notification sont par utilisateur (email on/off par type d’événement).</p> | |
| 4357 | +<hr> | |
| 4358 | +<h2 id="cicd--modes-et-composants"><a class="header" href="#cicd--modes-et-composants">CI/CD — Modes et composants</a></h2> | |
| 4359 | +<p>Système CI hybride à deux niveaux, activé via <code>CI_ENABLED=true</code>.</p> | |
| 4360 | +<h3 id="modes"><a class="header" href="#modes">Modes</a></h3> | |
| 4361 | +<div class="table-wrapper"> | |
| 4362 | +<table> | |
| 4363 | +<thead> | |
| 4364 | +<tr><th>Mode</th><th>Détection</th><th>Exécution</th></tr> | |
| 4365 | +</thead> | |
| 4366 | +<tbody> | |
| 4367 | +<tr><td><strong>Easy</strong></td><td><code>.gitrust-ci.yml</code> à la racine du repo</td><td>Module Dagger Python générique (<code>ci-engine</code>) interprète le YAML</td></tr> | |
| 4368 | +<tr><td><strong>Power</strong></td><td><code>.dagger/</code> à la racine du repo</td><td><code>dagger call -m .dagger/</code> exécute le module utilisateur directement</td></tr> | |
| 4369 | +<tr><td>Aucun</td><td>Ni l’un ni l’autre</td><td>Pas de CI pour ce repo</td></tr> | |
| 4370 | +</tbody> | |
| 4371 | +</table> | |
| 4372 | +</div> | |
| 4373 | +<h3 id="architecture-ci"><a class="header" href="#architecture-ci">Architecture CI</a></h3> | |
| 4374 | +<pre><code>git push (HTTP ou SSH) | |
| 4375 | + │ | |
| 4376 | + ▼ | |
| 4377 | +receive-pack handler | |
| 4378 | + │ | |
| 4379 | + ├── CiDetectionService::detect(bare_repo, commit_sha) | |
| 4380 | + │ → Easy / Power / None | |
| 4381 | + │ | |
| 4382 | + ├── CiService::create_pipeline(repo_id, sha, mode) | |
| 4383 | + │ | |
| 4384 | + └── mpsc::Sender.send(job) ──► CiWorker (tokio::spawn) | |
| 4385 | + │ | |
| 4386 | + ├── 1. Validation statique | |
| 4387 | + │ Easy: schéma YAML, whitelist images/packages | |
| 4388 | + │ Power: analyse code .dagger/ (si activé) | |
| 4389 | + │ | |
| 4390 | + ├── 2. SBOM Gate (si CI_SBOM_ENABLED) | |
| 4391 | + │ syft scan → sbom.cdx.json | |
| 4392 | + │ → Dependency-Track (si CI_DTRACK_ENABLED) | |
| 4393 | + │ → PASS/FAIL selon politique | |
| 4394 | + │ | |
| 4395 | + ├── 3. Résolution variables (héritage team → repo) | |
| 4396 | + │ CiVariableService::resolve_for_pipeline() | |
| 4397 | + │ | |
| 4398 | + ├── 4. Exécution Dagger (isolé, timeout, cgroups) | |
| 4399 | + │ Easy: dagger call -m ci-engine test --profile=... | |
| 4400 | + │ Power: dagger call -m .dagger/ <function> | |
| 4401 | + │ | |
| 4402 | + └── 5. Rapport + audit | |
| 4403 | + Status, logs (broadcast SSE), ci_audit_log | |
| 4404 | +</code></pre> | |
| 4405 | +<h3 id="composants-externes-tous-optionnels-sauf-dagger"><a class="header" href="#composants-externes-tous-optionnels-sauf-dagger">Composants externes (tous optionnels sauf Dagger)</a></h3> | |
| 4406 | +<div class="table-wrapper"> | |
| 4407 | +<table> | |
| 4408 | +<thead> | |
| 4409 | +<tr><th>Composant</th><th>Rôle</th><th>Variable de contrôle</th></tr> | |
| 4410 | +</thead> | |
| 4411 | +<tbody> | |
| 4412 | +<tr><td>Dagger Engine</td><td>Exécution des pipelines dans des containers isolés</td><td><code>CI_ENABLED</code></td></tr> | |
| 4413 | +<tr><td>ci-engine (Python)</td><td>Moteur générique pour Easy Mode</td><td><code>CI_DAGGER_MODULE_PATH</code></td></tr> | |
| 4414 | +<tr><td>Syft</td><td>Génération SBOM CycloneDX</td><td><code>CI_SBOM_ENABLED</code></td></tr> | |
| 4415 | +<tr><td>Dependency-Track</td><td>Analyse de vulnérabilités sur les SBOM</td><td><code>CI_DTRACK_ENABLED</code></td></tr> | |
| 4416 | +</tbody> | |
| 4417 | +</table> | |
| 4418 | +</div> | |
| 4419 | +<h3 id="variables-et-secrets-ci"><a class="header" href="#variables-et-secrets-ci">Variables et secrets CI</a></h3> | |
| 4420 | +<p>Héritage <strong>team → repo</strong> : les variables définies au niveau team sont partagées entre tous les repos de l’équipe. Le repo peut surcharger une clé team avec sa propre valeur. Les secrets sont chiffrés en base (AES-256-GCM) et masqués dans les logs (<code>***</code>).</p> | |
| 4421 | +<hr> | |
| 4422 | +<h2 id="sécurité-anssi-pa-074"><a class="header" href="#sécurité-anssi-pa-074">Sécurité (ANSSI PA-074)</a></h2> | |
| 4423 | +<div class="table-wrapper"> | |
| 4424 | +<table> | |
| 4425 | +<thead> | |
| 4426 | +<tr><th>Directive</th><th>Scope</th></tr> | |
| 4427 | +</thead> | |
| 4428 | +<tbody> | |
| 4429 | +<tr><td><code>#![forbid(unsafe_code)]</code></td><td>gitrust-core, gitrust-web, gitrust-hooks</td></tr> | |
| 4430 | +<tr><td><code>#![deny(unsafe_code)]</code></td><td>gitrust-git, gitrust-ssh (FFI libgit2/russh)</td></tr> | |
| 4431 | +<tr><td><code>deny(clippy::unwrap_used, expect_used, panic)</code></td><td>Tous les crates</td></tr> | |
| 4432 | +<tr><td><code>deny(clippy::indexing_slicing)</code></td><td>Tous les crates</td></tr> | |
| 4433 | +<tr><td><code>deny(clippy::mem_forget)</code></td><td>Tous les crates</td></tr> | |
| 4434 | +<tr><td><code>Zeroize</code> on drop</td><td><code>TokenHash</code> (ANSSI R23)</td></tr> | |
| 4435 | +<tr><td>RSA minimum 4096 bits</td><td><code>SshKeyService</code></td></tr> | |
| 4436 | +<tr><td>Path traversal validation</td><td><code>RepositoryService</code>, <code>gitrust-git</code></td></tr> | |
| 4437 | +<tr><td>Slug validation + noms réservés</td><td><code>RepoSlug</code>, <code>TeamSlug</code></td></tr> | |
| 4438 | +</tbody> | |
| 4439 | +</table> | |
| 4440 | +</div> | |
| 4441 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4442 | +<h1 id="services-et-api-interne"><a class="header" href="#services-et-api-interne">Services et API interne</a></h1> | |
| 4443 | +<blockquote> | |
| 4444 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 4445 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 4446 | +</blockquote> | |
| 4447 | +<h2 id="todo-60"><a class="header" href="#todo-60">TODO</a></h2> | |
| 4448 | +<ul> | |
| 4449 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 4450 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 4451 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 4452 | +</ul> | |
| 4453 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4454 | +<h1 id="schéma-de-la-base-de-données-1"><a class="header" href="#schéma-de-la-base-de-données-1">Schéma de la base de données</a></h1> | |
| 4455 | +<blockquote> | |
| 4456 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 4457 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 4458 | +</blockquote> | |
| 4459 | +<h2 id="todo-61"><a class="header" href="#todo-61">TODO</a></h2> | |
| 4460 | +<ul> | |
| 4461 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 4462 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 4463 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 4464 | +</ul> | |
| 4465 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4466 | +<h1 id="règles-qa--conformité-anssi"><a class="header" href="#règles-qa--conformité-anssi">Règles QA & conformité ANSSI</a></h1> | |
| 4467 | +<p>Ce document définit les règles de qualité et de sécurité applicables à tout le projet gitrust. Chaque lot doit satisfaire ces règles avant merge.</p> | |
| 4468 | +<hr> | |
| 4469 | +<h2 id="1-gates-de-compilation-obligatoires"><a class="header" href="#1-gates-de-compilation-obligatoires">1. Gates de compilation obligatoires</a></h2> | |
| 4470 | +<p>Toute modification doit passer ces 4 gates sans erreur :</p> | |
| 4471 | +<div class="table-wrapper"> | |
| 4472 | +<table> | |
| 4473 | +<thead> | |
| 4474 | +<tr><th>Gate</th><th>Commande</th><th>Critère</th></tr> | |
| 4475 | +</thead> | |
| 4476 | +<tbody> | |
| 4477 | +<tr><td>Formatage</td><td><code>cargo fmt --all -- --check</code></td><td>Zéro diff</td></tr> | |
| 4478 | +<tr><td>Linting</td><td><code>cargo clippy --workspace -- -D warnings</code></td><td>Zéro warning</td></tr> | |
| 4479 | +<tr><td>Tests unitaires</td><td><code>cargo test --workspace</code></td><td>100% pass</td></tr> | |
| 4480 | +<tr><td>Build CSS</td><td><code>npx tailwindcss -i static/css/input.css -o static/css/style.css --minify</code></td><td>Si templates modifiés</td></tr> | |
| 4481 | +</tbody> | |
| 4482 | +</table> | |
| 4483 | +</div> | |
| 4484 | +<h3 id="gates-supplémentaires-à-mettre-en-place"><a class="header" href="#gates-supplémentaires-à-mettre-en-place">Gates supplémentaires (à mettre en place)</a></h3> | |
| 4485 | +<div class="table-wrapper"> | |
| 4486 | +<table> | |
| 4487 | +<thead> | |
| 4488 | +<tr><th>Gate</th><th>Outil</th><th>Rôle</th></tr> | |
| 4489 | +</thead> | |
| 4490 | +<tbody> | |
| 4491 | +<tr><td>Audit dépendances</td><td><code>cargo audit</code></td><td>Détection CVE dans les deps</td></tr> | |
| 4492 | +<tr><td>Licences & bans</td><td><code>cargo deny check</code></td><td>Licences compatibles, pas de crate bannie</td></tr> | |
| 4493 | +<tr><td>Secrets dans le code</td><td>Recherche de patterns sensibles</td><td>Pas de token/mot de passe en dur</td></tr> | |
| 4494 | +</tbody> | |
| 4495 | +</table> | |
| 4496 | +</div> | |
| 4497 | +<hr> | |
| 4498 | +<h2 id="2-règles-de-sécurité-anssi-pa-074"><a class="header" href="#2-règles-de-sécurité-anssi-pa-074">2. Règles de sécurité (ANSSI PA-074)</a></h2> | |
| 4499 | +<h3 id="21-lints-rust-obligatoires-déjà-en-place"><a class="header" href="#21-lints-rust-obligatoires-déjà-en-place">2.1 Lints Rust obligatoires (déjà en place)</a></h3> | |
| 4500 | +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)] | |
| 4501 | +</span>#![forbid(unsafe_code)] // core, web, hooks | |
| 4502 | +#![deny(unsafe_code)] // git, ssh (FFI nécessaire) | |
| 4503 | +#![deny(clippy::unwrap_used)] | |
| 4504 | +#![deny(clippy::expect_used)] | |
| 4505 | +#![deny(clippy::panic)] | |
| 4506 | +#![deny(clippy::indexing_slicing)] | |
| 4507 | +#![deny(clippy::mem_forget)] | |
| 4508 | +<span class="boring">fn main() { | |
| 4509 | +</span><span class="boring">}</span></code></pre> | |
| 4510 | +<h3 id="22-checklist-sécurité-par-feature"><a class="header" href="#22-checklist-sécurité-par-feature">2.2 Checklist sécurité par feature</a></h3> | |
| 4511 | +<p>Avant toute implémentation touchant l’authentification, les secrets ou les permissions, vérifier :</p> | |
| 4512 | +<ul> | |
| 4513 | +<li><input disabled="" type="checkbox"> <strong>Secrets jamais en clair en base</strong> — hash SHA-256 ou bcrypt</li> | |
| 4514 | +<li><input disabled="" type="checkbox"> <strong>Secrets jamais loggés</strong> — vérifier <code>tracing::info/debug/warn</code>, <code>Display</code> et <code>Debug</code> impls ne révèlent pas le secret</li> | |
| 4515 | +<li><input disabled="" type="checkbox"> <strong>Comparaison constant-time</strong> — <code>subtle::ConstantTimeEq</code> pour toute validation de secret (pas de <code>==</code> sur des hash)</li> | |
| 4516 | +<li><input disabled="" type="checkbox"> <strong>Rate-limiting</strong> — endpoint d’authentification protégé</li> | |
| 4517 | +<li><input disabled="" type="checkbox"> <strong>CSRF</strong> — token valide sur toute action mutante (POST/PUT/DELETE)</li> | |
| 4518 | +<li><input disabled="" type="checkbox"> <strong>Ownership vérifiée (anti-IDOR)</strong> — le user ne peut agir que sur ses propres ressources (vérifier <code>user_id</code> côté serveur)</li> | |
| 4519 | +<li><input disabled="" type="checkbox"> <strong>Expiration obligatoire</strong> — tout token/session a une durée de vie max</li> | |
| 4520 | +<li><input disabled="" type="checkbox"> <strong>Audit log</strong> — création, révocation, utilisation suspecte tracées</li> | |
| 4521 | +<li><input disabled="" type="checkbox"> <strong>Zeroize</strong> — types sensibles implémentent <code>Zeroize</code>/<code>ZeroizeOnDrop</code></li> | |
| 4522 | +<li><input disabled="" type="checkbox"> <strong>Path traversal</strong> — validation des chemins disque (pas de <code>..</code>, <code>/</code>, <code>\</code>)</li> | |
| 4523 | +</ul> | |
| 4524 | +<h3 id="23-marqueurs-sec-"><a class="header" href="#23-marqueurs-sec-">2.3 Marqueurs SEC-</a></h3> | |
| 4525 | +<p>Le code utilise des commentaires <code>// SEC-XX</code> pour tracer les décisions de sécurité. Tout nouveau contrôle doit être marqué avec le prochain numéro disponible dans sa catégorie :</p> | |
| 4526 | +<div class="table-wrapper"> | |
| 4527 | +<table> | |
| 4528 | +<thead> | |
| 4529 | +<tr><th>Préfixe</th><th>Catégorie</th><th>Exemples</th></tr> | |
| 4530 | +</thead> | |
| 4531 | +<tbody> | |
| 4532 | +<tr><td>SEC-C</td><td>Cryptographie</td><td>Timing attack, CSRF, PKCE</td></tr> | |
| 4533 | +<tr><td>SEC-H</td><td>HTTP/Headers</td><td>X-Forwarded-For, cookies, nonce</td></tr> | |
| 4534 | +<tr><td>SEC-L</td><td>Logique métier</td><td>Hashing, validation, defaults</td></tr> | |
| 4535 | +<tr><td>SEC-M</td><td>Mémoire/sessions</td><td>Rate-limit DoS, refresh tokens</td></tr> | |
| 4536 | +</tbody> | |
| 4537 | +</table> | |
| 4538 | +</div> | |
| 4539 | +<hr> | |
| 4540 | +<h2 id="3-tests-requis-par-catégorie"><a class="header" href="#3-tests-requis-par-catégorie">3. Tests requis par catégorie</a></h2> | |
| 4541 | +<h3 id="31-matrice-de-couverture"><a class="header" href="#31-matrice-de-couverture">3.1 Matrice de couverture</a></h3> | |
| 4542 | +<div class="table-wrapper"> | |
| 4543 | +<table> | |
| 4544 | +<thead> | |
| 4545 | +<tr><th>Catégorie</th><th>Quand appliquer</th><th>Exemples</th></tr> | |
| 4546 | +</thead> | |
| 4547 | +<tbody> | |
| 4548 | +<tr><td><strong>Unitaire</strong></td><td>Logique pure (validation, parsing, conversion)</td><td><code>RepoSlug::new("../evil")</code> → erreur</td></tr> | |
| 4549 | +<tr><td><strong>Intégration</strong></td><td>Service avec DB (CRUD, contraintes, transactions)</td><td><code>PatService::validate</code> token expiré → None</td></tr> | |
| 4550 | +<tr><td><strong>Handler</strong></td><td>Endpoint HTTP (status, redirect, CSRF, auth)</td><td>POST sans CSRF → 403</td></tr> | |
| 4551 | +<tr><td><strong>E2E Playwright</strong></td><td>Flow utilisateur complet</td><td>Créer token → copier → cloner un dépôt</td></tr> | |
| 4552 | +<tr><td><strong>Sécurité négatif</strong></td><td>Tout bypass imaginable</td><td>Token user A sur ressource user B → 401</td></tr> | |
| 4553 | +</tbody> | |
| 4554 | +</table> | |
| 4555 | +</div> | |
| 4556 | +<h3 id="32-règles-de-tests"><a class="header" href="#32-règles-de-tests">3.2 Règles de tests</a></h3> | |
| 4557 | +<ol> | |
| 4558 | +<li><strong>Tests d’intégration sur vraie DB</strong> — pas de mocks pour la couche persistence (les mocks masquent les bugs de migration)</li> | |
| 4559 | +<li><strong>Tests négatifs obligatoires</strong> — pour chaque chemin heureux, tester au moins : input invalide, non-authentifié, non-autorisé, expiré, révoqué</li> | |
| 4560 | +<li><strong>Tests E2E en français</strong> — cohérent avec l’UI (locale <code>fr-FR</code>)</li> | |
| 4561 | +<li><strong>Pas de <code>sleep()</code> dans les tests</strong> — utiliser des retry/poll avec timeout</li> | |
| 4562 | +<li><strong>Données de test isolées</strong> — chaque test crée ses propres données (pas de dépendance sur l’ordre d’exécution)</li> | |
| 4563 | +</ol> | |
| 4564 | +<hr> | |
| 4565 | +<h2 id="4-règles-de-code"><a class="header" href="#4-règles-de-code">4. Règles de code</a></h2> | |
| 4566 | +<h3 id="41-framework-boundary"><a class="header" href="#41-framework-boundary">4.1 Framework boundary</a></h3> | |
| 4567 | +<ul> | |
| 4568 | +<li><strong>Ne jamais modifier</strong> <code>crates/rustwarden-core/</code></li> | |
| 4569 | +<li>Réutiliser les services framework avant d’implémenter (auth, users, sessions, ResourceService, i18n, middleware)</li> | |
| 4570 | +<li>Si un service manque, l’étendre côté gitrust (wrappers, trait impls)</li> | |
| 4571 | +</ul> | |
| 4572 | +<h3 id="42-assets"><a class="header" href="#42-assets">4.2 Assets</a></h3> | |
| 4573 | +<ul> | |
| 4574 | +<li><strong>Zéro CDN</strong> — tous les CSS/JS servis depuis <code>static/</code></li> | |
| 4575 | +<li>La CSP du framework bloque les domaines externes</li> | |
| 4576 | +</ul> | |
| 4577 | +<h3 id="43-gestion-derreurs"><a class="header" href="#43-gestion-derreurs">4.3 Gestion d’erreurs</a></h3> | |
| 4578 | +<ul> | |
| 4579 | +<li><code>GitrustError</code> avec <code>IntoResponse</code> pour le mapping HTTP</li> | |
| 4580 | +<li>Pas de <code>.unwrap()</code> / <code>.expect()</code> / <code>panic!()</code> / <code>[index]</code></li> | |
| 4581 | +<li>Errors utilisateur : messages génériques (pas de leak d’info interne)</li> | |
| 4582 | +</ul> | |
| 4583 | +<h3 id="44-validation-aux-frontières"><a class="header" href="#44-validation-aux-frontières">4.4 Validation aux frontières</a></h3> | |
| 4584 | +<ul> | |
| 4585 | +<li>Valider les inputs utilisateur (formulaires, query params, headers)</li> | |
| 4586 | +<li>Ne pas re-valider entre services internes</li> | |
| 4587 | +<li>Newtypes avec validation à la construction (<code>RepoSlug</code>, <code>TeamSlug</code>, <code>Fingerprint</code>, <code>TokenHash</code>)</li> | |
| 4588 | +</ul> | |
| 4589 | +<hr> | |
| 4590 | +<h2 id="5-checklist-pré-merge"><a class="header" href="#5-checklist-pré-merge">5. Checklist pré-merge</a></h2> | |
| 4591 | +<p>Avant chaque merge de lot :</p> | |
| 4592 | +<ul> | |
| 4593 | +<li><input disabled="" type="checkbox"> <code>cargo fmt --all -- --check</code> passe</li> | |
| 4594 | +<li><input disabled="" type="checkbox"> <code>cargo clippy --workspace -- -D warnings</code> passe</li> | |
| 4595 | +<li><input disabled="" type="checkbox"> <code>cargo test --workspace</code> — tous les tests passent</li> | |
| 4596 | +<li><input disabled="" type="checkbox"> Tests E2E Playwright passent (<code>npm run test:e2e</code>)</li> | |
| 4597 | +<li><input disabled="" type="checkbox"> CSS rebuild si templates modifiés</li> | |
| 4598 | +<li><input disabled="" type="checkbox"> Aucun secret en clair dans le code ou les logs</li> | |
| 4599 | +<li><input disabled="" type="checkbox"> Checklist sécurité §2.2 validée (si applicable)</li> | |
| 4600 | +<li><input disabled="" type="checkbox"> Pas de modification dans <code>crates/rustwarden-core/</code></li> | |
| 4601 | +</ul> | |
| 4602 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4603 | +<h1 id="api-rest-v1-1"><a class="header" href="#api-rest-v1-1">API REST v1</a></h1> | |
| 4604 | +<blockquote> | |
| 4605 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 4606 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 4607 | +</blockquote> | |
| 4608 | +<h2 id="todo-62"><a class="header" href="#todo-62">TODO</a></h2> | |
| 4609 | +<ul> | |
| 4610 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 4611 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 4612 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 4613 | +</ul> | |
| 4614 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4615 | +<h1 id="hooks-git-post-receive"><a class="header" href="#hooks-git-post-receive">Hooks Git post-receive</a></h1> | |
| 4616 | +<blockquote> | |
| 4617 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 4618 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 4619 | +</blockquote> | |
| 4620 | +<h2 id="todo-63"><a class="header" href="#todo-63">TODO</a></h2> | |
| 4621 | +<ul> | |
| 4622 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 4623 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 4624 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 4625 | +</ul> | |
| 4626 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4627 | +<h1 id="api-rustwarden-core"><a class="header" href="#api-rustwarden-core">API rustwarden-core</a></h1> | |
| 4628 | +<blockquote> | |
| 4629 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 4630 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 4631 | +</blockquote> | |
| 4632 | +<h2 id="todo-64"><a class="header" href="#todo-64">TODO</a></h2> | |
| 4633 | +<ul> | |
| 4634 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 4635 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 4636 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 4637 | +</ul> | |
| 4638 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4639 | +<h1 id="explication-2"><a class="header" href="#explication-2">Explication</a></h1> | |
| 4640 | +<blockquote> | |
| 4641 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 4642 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 4643 | +</blockquote> | |
| 4644 | +<h2 id="todo-65"><a class="header" href="#todo-65">TODO</a></h2> | |
| 4645 | +<ul> | |
| 4646 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 4647 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 4648 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 4649 | +</ul> | |
| 4650 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4651 | +<h1 id="vue-densemble-de-larchitecture"><a class="header" href="#vue-densemble-de-larchitecture">Vue d’ensemble de l’architecture</a></h1> | |
| 4652 | +<p>Gitrust est une plateforme d’hébergement Git auto-hébergée construite sur le framework <strong>rustwarden-core</strong>. L’application expose deux points d’entrée réseau (HTTP + SSH) et persiste ses données dans PostgreSQL.</p> | |
| 4653 | +<h2 id="vue-densemble-3"><a class="header" href="#vue-densemble-3">Vue d’ensemble</a></h2> | |
| 4654 | +<pre class="mermaid">graph TB | |
| 4655 | + subgraph Clients | |
| 4656 | + Browser["Navigateur Web"] | |
| 4657 | + GitCLI["Git CLI (ssh/https)"] | |
| 4658 | + end | |
| 4659 | + | |
| 4660 | + subgraph "Gitrust Binary (src/main.rs)" | |
| 4661 | + Main["main()"] | |
| 4662 | + end | |
| 4663 | + | |
| 4664 | + subgraph "Crates Gitrust" | |
| 4665 | + Web["gitrust-web<br/><i>Routes HTTP, templates,<br/>handlers Axum</i>"] | |
| 4666 | + SSH["gitrust-ssh<br/><i>Serveur SSH (russh),<br/>auth par clé, sessions</i>"] | |
| 4667 | + Hooks["gitrust-hooks<br/><i>impl RustwardenHooks<br/>(on_user_registered, ...)</i>"] | |
| 4668 | + Core["gitrust-core<br/><i>Models, services, migrations,<br/>rôles, types, DTOs</i>"] | |
| 4669 | + Git["gitrust-git<br/><i>Bare repos, tree browser,<br/>pack protocol (git2)</i>"] | |
| 4670 | + end | |
| 4671 | + | |
| 4672 | + subgraph "Framework" | |
| 4673 | + RW["rustwarden-core<br/><i>Auth, users, JWT, sessions,<br/>ResourceService, i18n</i>"] | |
| 4674 | + end | |
| 4675 | + | |
| 4676 | + subgraph "Stockage" | |
| 4677 | + PG[(PostgreSQL)] | |
| 4678 | + FS[("Système de fichiers<br/>bare repos .git")] | |
| 4679 | + end | |
| 4680 | + | |
| 4681 | + subgraph "CI/CD (optionnel)" | |
| 4682 | + CiWorker["CiWorker<br/><i>tokio::spawn, mpsc,<br/>sous-processus Dagger</i>"] | |
| 4683 | + Dagger["Dagger Engine<br/><i>Containers isolés,<br/>cache, exécution</i>"] | |
| 4684 | + CiEngine["ci-engine<br/><i>Module Dagger Python<br/>(Easy Mode)</i>"] | |
| 4685 | + Syft["Syft (optionnel)<br/><i>Génération SBOM<br/>CycloneDX</i>"] | |
| 4686 | + DTrack["Dependency-Track<br/>(optionnel)<br/><i>Analyse vulnérabilités</i>"] | |
| 4687 | + end | |
| 4688 | + | |
| 4689 | + Browser -->|HTTP :4000| Web | |
| 4690 | + GitCLI -->|SSH :2222| SSH | |
| 4691 | + GitCLI -->|HTTPS :4000| Web | |
| 4692 | + | |
| 4693 | + Main --> Web | |
| 4694 | + Main --> SSH | |
| 4695 | + Main --> Hooks | |
| 4696 | + Main -.->|"si CI_ENABLED"| CiWorker | |
| 4697 | + | |
| 4698 | + Web --> Core | |
| 4699 | + Web --> Git | |
| 4700 | + SSH --> Core | |
| 4701 | + SSH --> Git | |
| 4702 | + Hooks --> Core | |
| 4703 | + | |
| 4704 | + Core --> RW | |
| 4705 | + Core --> PG | |
| 4706 | + Git --> FS | |
| 4707 | + | |
| 4708 | + CiWorker --> Core | |
| 4709 | + CiWorker -->|"dagger call"| Dagger | |
| 4710 | + Dagger -->|"Easy Mode"| CiEngine | |
| 4711 | + Dagger -->|"Power Mode"| FS | |
| 4712 | + CiWorker -.->|"si CI_SBOM_ENABLED"| Syft | |
| 4713 | + Syft -.->|"si CI_DTRACK_ENABLED"| DTrack | |
| 4714 | +</pre> | |
| 4715 | + | |
| 4716 | +<hr> | |
| 4717 | +<h2 id="démarrage-de-lapplication"><a class="header" href="#démarrage-de-lapplication">Démarrage de l’application</a></h2> | |
| 4718 | +<p>Le diagramme suivant détaille la séquence d’initialisation depuis <code>main()</code> jusqu’au démarrage des serveurs HTTP et SSH.</p> | |
| 4719 | +<pre class="mermaid">sequenceDiagram | |
| 4720 | + participant Main as main() | |
| 4721 | + participant Builder as RustwardenBuilder | |
| 4722 | + participant App as RustwardenApp | |
| 4723 | + participant Mig as AppMigrator | |
| 4724 | + participant DB as PostgreSQL | |
| 4725 | + participant SMTP as Serveur SMTP | |
| 4726 | + | |
| 4727 | + Main->>Main: GitrustConfig::from_env() | |
| 4728 | + Main->>Main: Arc<GitrustHooks> (hooks FS) | |
| 4729 | + | |
| 4730 | + Main->>Builder: builder().from_env() | |
| 4731 | + Note over Builder: Charge .env, init tracing | |
| 4732 | + Main->>Builder: .headless().auto_migrate(false) | |
| 4733 | + Main->>Builder: .merge_routes(app_routes(hooks)) | |
| 4734 | + Note over Builder: Routes = framework API<br/>+ pages SSR gitrust<br/>+ Extension(hooks) | |
| 4735 | + Main->>Builder: .build().await | |
| 4736 | + Builder->>DB: Connexion pool | |
| 4737 | + Builder->>DB: Migrations rustwarden-core | |
| 4738 | + Builder->>SMTP: EmailQueueProcessor.start() | |
| 4739 | + Note over SMTP: Worker de fond : dépile<br/>email_queue toutes les 30s | |
| 4740 | + Builder-->>Main: RustwardenApp | |
| 4741 | + | |
| 4742 | + Main->>Mig: run_migrations(app.database()) | |
| 4743 | + Mig->>DB: core_migrations() + gitrust_migrations() | |
| 4744 | + Note over DB: Tables: users, resources,<br/>repositories, ssh_keys,<br/>teams, team_members,<br/>team_repository_access | |
| 4745 | + Mig-->>Main: Ok | |
| 4746 | + | |
| 4747 | + Main->>Main: tokio::spawn(SSH server :2222) | |
| 4748 | + | |
| 4749 | + alt CI_ENABLED=true | |
| 4750 | + Main->>Main: CiWorker::start(config.ci) | |
| 4751 | + Note over Main: Vérifie dagger dans PATH<br/>Si CI_SBOM_ENABLED: vérifie syft<br/>Si CI_DTRACK_ENABLED: vérifie API DT | |
| 4752 | + Main->>Main: tokio::spawn(CiWorker loop) | |
| 4753 | + Note over Main: Écoute mpsc channel<br/>pour les jobs CI | |
| 4754 | + end | |
| 4755 | + | |
| 4756 | + Main->>App: app.run().await | |
| 4757 | + Note over App: HTTP :4000 démarre | |
| 4758 | +</pre> | |
| 4759 | + | |
| 4760 | +<hr> | |
| 4761 | +<h2 id="principes-de-conception"><a class="header" href="#principes-de-conception">Principes de conception</a></h2> | |
| 4762 | +<h3 id="séparation-framework--métier-gitrust"><a class="header" href="#séparation-framework--métier-gitrust">Séparation framework / métier gitrust</a></h3> | |
| 4763 | +<p>Gitrust est construit <strong>au-dessus</strong> de rustwarden-core, un framework Rust d’authentification et de gestion d’utilisateurs. Cette séparation est intentionnelle :</p> | |
| 4764 | +<ul> | |
| 4765 | +<li><strong>rustwarden-core</strong> gère : auth JWT, sessions, users, roles génériques, i18n, SMTP, OAuth, audit log générique.</li> | |
| 4766 | +<li><strong>gitrust-core</strong> gère : tout ce qui est spécifique à la forge Git — dépôts, clés SSH, équipes, permissions RBAC à 4 niveaux, CI, import de dépôts.</li> | |
| 4767 | +</ul> | |
| 4768 | +<p>La règle fondamentale : <strong>ne jamais modifier <code>crates/rustwarden-core/</code></strong>. Toute extension passe par des wrappers, des hooks (<code>RustwardenHooks</code>) ou des traits implémentés côté gitrust.</p> | |
| 4769 | +<h3 id="mode-headless"><a class="header" href="#mode-headless">Mode headless</a></h3> | |
| 4770 | +<p>gitrust-web opère en mode <code>headless()</code> : les pages UI standard de rustwarden (login, register, settings) sont <strong>désactivées</strong> et réimplémentées entièrement dans <code>gitrust-web/templates/</code>. Cela permet un design cohérent (sidebar Git, DaisyUI) sans compromis avec l’UI générique du framework.</p> | |
| 4771 | +<h3 id="ssr--htmx-zéro-cdn"><a class="header" href="#ssr--htmx-zéro-cdn">SSR + HTMX, zéro CDN</a></h3> | |
| 4772 | +<p>L’interface est rendue côté serveur via Askama (templates Rust compilés). HTMX gère les interactions dynamiques (mises à jour partielles de page, SSE pour les notifications et les logs CI). Aucun asset externe : tout CSS/JS est servi depuis <code>static/</code> — imposé par la Content Security Policy du framework.</p> | |
| 4773 | +<h3 id="bare-repos-sur-le-système-de-fichiers"><a class="header" href="#bare-repos-sur-le-système-de-fichiers">Bare repos sur le système de fichiers</a></h3> | |
| 4774 | +<p>gitrust-git est <strong>découplé de la base de données</strong>. Les opérations Git (navigation d’arbre, lecture de blobs, pack protocol) travaillent directement sur les bare repos (<code>{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/</code>) via libgit2. La base ne stocke que les métadonnées (nom, description, visibilité, ownership). Ce découplage permet de remplacer ou tester gitrust-git indépendamment.</p> | |
| 4775 | +<h3 id="ci-hybride--dagger-comme-abstraction-dexécution"><a class="header" href="#ci-hybride--dagger-comme-abstraction-dexécution">CI hybride : Dagger comme abstraction d’exécution</a></h3> | |
| 4776 | +<p>Plutôt que d’implémenter un runner CI from scratch, gitrust délègue l’exécution à <strong>Dagger</strong>, qui garantit l’isolation (containers), la reproductibilité (cache) et la portabilité (local ou runner distant via SSH+rsync). Le <code>CiWorker</code> est une tâche Tokio dans le processus principal — pas un daemon séparé — ce qui simplifie le déploiement (un seul binaire).</p> | |
| 4777 | +<hr> | |
| 4778 | +<h2 id="pour-aller-plus-loin"><a class="header" href="#pour-aller-plus-loin">Pour aller plus loin</a></h2> | |
| 4779 | +<ul> | |
| 4780 | +<li>Référence structurelle complète (tables de modules, routes, dépendances) : <code>developer_manual/reference/architecture-crates.md</code></li> | |
| 4781 | +<li>Diagrammes de séquence détaillés (clone SSH, push, permissions) : <code>developer_manual/explanation/flux-requetes.md</code></li> | |
| 4782 | +<li>Règles de code et gates QA : <code>developer_manual/reference/regles-qa-anssi.md</code></li> | |
| 4783 | +</ul> | |
| 4784 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 4785 | +<h1 id="flux-de-requêtes"><a class="header" href="#flux-de-requêtes">Flux de requêtes</a></h1> | |
| 4786 | +<p>Diagrammes de séquence couvrant les opérations principales de gitrust : création de dépôt, clone et push SSH, enregistrement de clé SSH, résolution des permissions, navigation web, inscription utilisateur.</p> | |
| 4787 | +<h2 id="1-création-dun-dépôt-web"><a class="header" href="#1-création-dun-dépôt-web">1. Création d’un dépôt (Web)</a></h2> | |
| 4788 | +<pre class="mermaid">sequenceDiagram | |
| 4789 | + actor User as Utilisateur | |
| 4790 | + participant Web as gitrust-web | |
| 4791 | + participant RepoSvc as RepositoryService | |
| 4792 | + participant ResSvc as ResourceService | |
| 4793 | + participant DB as PostgreSQL | |
| 4794 | + participant Git as gitrust-git | |
| 4795 | + participant FS as Système de fichiers | |
| 4796 | + | |
| 4797 | + User->>Web: POST /new {name, description} | |
| 4798 | + Web->>Web: Extraire user_id (session JWT) | |
| 4799 | + | |
| 4800 | + Web->>RepoSvc: create(db, owner_id, username, base_path, input) | |
| 4801 | + RepoSvc->>RepoSvc: RepoSlug::from_name(input.name) | |
| 4802 | + RepoSvc->>DB: SELECT ... WHERE owner_id AND slug | |
| 4803 | + DB-->>RepoSvc: None (pas de doublon) | |
| 4804 | + | |
| 4805 | + RepoSvc->>RepoSvc: compute_disk_path(base, owner, slug) | |
| 4806 | + Note over RepoSvc: Validation anti path-traversal | |
| 4807 | + | |
| 4808 | + RepoSvc->>ResSvc: register(db, "repository", repo_id, owner_id) | |
| 4809 | + ResSvc->>DB: INSERT INTO resources | |
| 4810 | + DB-->>ResSvc: Ok | |
| 4811 | + | |
| 4812 | + RepoSvc->>DB: INSERT INTO repositories | |
| 4813 | + DB-->>RepoSvc: repository::Model | |
| 4814 | + | |
| 4815 | + RepoSvc-->>Web: RepositoryOutput | |
| 4816 | + | |
| 4817 | + Web->>Git: BareRepo::init(disk_path) | |
| 4818 | + Git->>FS: git init --bare | |
| 4819 | + FS-->>Git: Ok | |
| 4820 | + Git-->>Web: Ok | |
| 4821 | + | |
| 4822 | + Web-->>User: 302 Redirect /{owner}/{slug} | |
| 4823 | +</pre> | |
| 4824 | + | |
| 4825 | +<h2 id="2-clone-ssh-git-clone"><a class="header" href="#2-clone-ssh-git-clone">2. Clone SSH (git clone)</a></h2> | |
| 4826 | +<pre class="mermaid">sequenceDiagram | |
| 4827 | + actor Dev as Développeur | |
| 4828 | + participant Client as Git CLI | |
| 4829 | + participant SSH as gitrust-ssh | |
| 4830 | + participant Auth as SshKeyService | |
| 4831 | + participant Access as AccessService | |
| 4832 | + participant Git as gitrust-git | |
| 4833 | + participant DB as PostgreSQL | |
| 4834 | + participant FS as Bare repo (.git) | |
| 4835 | + | |
| 4836 | + Dev->>Client: git clone ssh://git@host:2222/alice/my-repo.git | |
| 4837 | + Client->>SSH: Connexion TCP :2222 | |
| 4838 | + SSH-->>Client: Banner SSH + échange clés | |
| 4839 | + | |
| 4840 | + Client->>SSH: Auth publickey (signature) | |
| 4841 | + SSH->>Auth: find_by_fingerprint(db, fingerprint) | |
| 4842 | + Auth->>DB: SELECT FROM ssh_keys WHERE fingerprint = ? | |
| 4843 | + DB-->>Auth: ssh_key::Model {user_id, ...} | |
| 4844 | + Auth-->>SSH: user_id | |
| 4845 | + | |
| 4846 | + SSH->>Auth: update_last_used(db, key_id) | |
| 4847 | + Auth->>DB: UPDATE ssh_keys SET last_used_at = now() | |
| 4848 | + | |
| 4849 | + SSH-->>Client: Auth OK | |
| 4850 | + | |
| 4851 | + Client->>SSH: exec "git-upload-pack 'alice/my-repo.git'" | |
| 4852 | + SSH->>SSH: CommandHandler::parse("git-upload-pack alice/my-repo.git") | |
| 4853 | + Note over SSH: Extraction owner=alice, repo=my-repo | |
| 4854 | + | |
| 4855 | + SSH->>Access: effective_role(db, user_id, repo_id) | |
| 4856 | + Access->>DB: Check ownership + shares + teams | |
| 4857 | + DB-->>Access: Role::Developer | |
| 4858 | + Access-->>SSH: can_read = true | |
| 4859 | + | |
| 4860 | + SSH->>Git: pack_protocol::advertise_refs(repo_path) | |
| 4861 | + Git->>FS: Lecture refs | |
| 4862 | + FS-->>Git: refs/heads/main, ... | |
| 4863 | + Git-->>SSH: advertise output | |
| 4864 | + | |
| 4865 | + SSH-->>Client: refs advertisement | |
| 4866 | + Client->>SSH: want/have negotiation | |
| 4867 | + | |
| 4868 | + SSH->>Git: pack_protocol::serve_pack(repo_path, wants, haves) | |
| 4869 | + Git->>FS: Pack objects | |
| 4870 | + FS-->>Git: pack data | |
| 4871 | + Git-->>SSH: pack stream | |
| 4872 | + | |
| 4873 | + SSH-->>Client: pack data | |
| 4874 | + Client-->>Dev: Dépôt cloné avec succès | |
| 4875 | +</pre> | |
| 4876 | + | |
| 4877 | +<h2 id="3-push-ssh-git-push"><a class="header" href="#3-push-ssh-git-push">3. Push SSH (git push)</a></h2> | |
| 4878 | +<pre class="mermaid">sequenceDiagram | |
| 4879 | + actor Dev as Développeur | |
| 4880 | + participant Client as Git CLI | |
| 4881 | + participant SSH as gitrust-ssh | |
| 4882 | + participant Access as AccessService | |
| 4883 | + participant Git as gitrust-git | |
| 4884 | + participant Hooks as gitrust-hooks | |
| 4885 | + participant DB as PostgreSQL | |
| 4886 | + participant FS as Bare repo (.git) | |
| 4887 | + | |
| 4888 | + Note over Client,SSH: Session SSH déjà authentifiée | |
| 4889 | + | |
| 4890 | + Client->>SSH: exec "git-receive-pack 'alice/my-repo.git'" | |
| 4891 | + SSH->>SSH: CommandHandler::parse(...) | |
| 4892 | + Note over SSH: Extraction owner=alice, repo=my-repo | |
| 4893 | + | |
| 4894 | + SSH->>Access: effective_role(db, user_id, repo_id) | |
| 4895 | + Access->>DB: Check ownership + shares + teams | |
| 4896 | + DB-->>Access: Role::Developer | |
| 4897 | + Access-->>SSH: can_push = true | |
| 4898 | + | |
| 4899 | + SSH->>Git: pack_protocol::advertise_refs(repo_path) | |
| 4900 | + Git->>FS: Lecture refs | |
| 4901 | + Git-->>SSH: refs advertisement | |
| 4902 | + | |
| 4903 | + SSH-->>Client: refs | |
| 4904 | + Client->>SSH: pack data + commands | |
| 4905 | + | |
| 4906 | + SSH->>Git: pack_protocol::serve_pack(repo_path, receive-pack) | |
| 4907 | + Git->>FS: Écriture objets + update refs | |
| 4908 | + FS-->>Git: Ok | |
| 4909 | + Git-->>SSH: Ok | |
| 4910 | + | |
| 4911 | + SSH->>DB: UPDATE repositories SET is_empty = false, updated_at = now() | |
| 4912 | + | |
| 4913 | + SSH-->>Client: Push OK | |
| 4914 | + Client-->>Dev: Push réussi | |
| 4915 | +</pre> | |
| 4916 | + | |
| 4917 | +<h2 id="4-enregistrement-dune-clé-ssh"><a class="header" href="#4-enregistrement-dune-clé-ssh">4. Enregistrement d’une clé SSH</a></h2> | |
| 4918 | +<pre class="mermaid">sequenceDiagram | |
| 4919 | + actor User as Utilisateur | |
| 4920 | + participant Web as gitrust-web | |
| 4921 | + participant Svc as SshKeyService | |
| 4922 | + participant DB as PostgreSQL | |
| 4923 | + | |
| 4924 | + User->>Web: POST /settings/keys {title, key_data} | |
| 4925 | + Web->>Web: Extraire user_id (session) | |
| 4926 | + | |
| 4927 | + Web->>Svc: create(db, user_id, input) | |
| 4928 | + | |
| 4929 | + Svc->>Svc: parse_public_key(key_data) | |
| 4930 | + Note over Svc: Extraire type + décoder base64 | |
| 4931 | + | |
| 4932 | + Svc->>Svc: validate_key_type_and_size(type, bytes) | |
| 4933 | + Note over Svc: ed25519 OK<br/>RSA >= 4096 bits<br/>ecdsa-p256/p384 OK | |
| 4934 | + | |
| 4935 | + Svc->>Svc: compute_fingerprint(bytes) | |
| 4936 | + Note over Svc: SHA256(key_bytes) -> base64-no-pad | |
| 4937 | + | |
| 4938 | + Svc->>DB: SELECT FROM ssh_keys WHERE fingerprint = ? | |
| 4939 | + DB-->>Svc: None (pas de doublon) | |
| 4940 | + | |
| 4941 | + Svc->>DB: INSERT INTO ssh_keys | |
| 4942 | + DB-->>Svc: ssh_key::Model | |
| 4943 | + | |
| 4944 | + Svc-->>Web: SshKeyOutput | |
| 4945 | + Web-->>User: 200 Clé ajoutée (fingerprint affiché) | |
| 4946 | +</pre> | |
| 4947 | + | |
| 4948 | +<h2 id="5-résolution-des-permissions-accessservice"><a class="header" href="#5-résolution-des-permissions-accessservice">5. Résolution des permissions (AccessService)</a></h2> | |
| 4949 | +<pre class="mermaid">sequenceDiagram | |
| 4950 | + participant Caller as Handler / SSH Session | |
| 4951 | + participant AS as AccessService | |
| 4952 | + participant RS as ResourceService | |
| 4953 | + participant DB as PostgreSQL | |
| 4954 | + | |
| 4955 | + Caller->>AS: effective_role(db, user_id, repo_id) | |
| 4956 | + | |
| 4957 | + AS->>RS: effective_permission(db, user_id, "repository", repo_id) | |
| 4958 | + RS->>DB: SELECT FROM resources WHERE type AND id | |
| 4959 | + DB-->>RS: resource {owner_id, is_public} | |
| 4960 | + | |
| 4961 | + alt user_id == owner_id | |
| 4962 | + RS-->>AS: "owner" | |
| 4963 | + else Share exists | |
| 4964 | + RS->>DB: SELECT FROM resource_shares WHERE resource AND user | |
| 4965 | + DB-->>RS: share {permission_level} | |
| 4966 | + RS-->>AS: permission_level | |
| 4967 | + else Resource is public | |
| 4968 | + RS-->>AS: "read" | |
| 4969 | + else No access | |
| 4970 | + RS-->>AS: None | |
| 4971 | + end | |
| 4972 | + | |
| 4973 | + AS->>AS: Role::from_permission(individual_level) | |
| 4974 | + | |
| 4975 | + AS->>DB: SELECT team_members + team_repository_access<br/>WHERE user_id AND repository_id | |
| 4976 | + DB-->>AS: Vec<team_permission> | |
| 4977 | + | |
| 4978 | + AS->>AS: team_role = max(team_permissions) | |
| 4979 | + AS->>AS: effective = max(individual_role, team_role) | |
| 4980 | + | |
| 4981 | + AS-->>Caller: Role (Reader / Developer / Maintainer / Owner) | |
| 4982 | +</pre> | |
| 4983 | + | |
| 4984 | +<h2 id="6-navigation-dans-un-dépôt-web"><a class="header" href="#6-navigation-dans-un-dépôt-web">6. Navigation dans un dépôt (Web)</a></h2> | |
| 4985 | +<pre class="mermaid">sequenceDiagram | |
| 4986 | + actor User as Utilisateur | |
| 4987 | + participant Web as gitrust-web | |
| 4988 | + participant Ext as RepoExtractor | |
| 4989 | + participant Access as AccessService | |
| 4990 | + participant Git as gitrust-git | |
| 4991 | + participant DB as PostgreSQL | |
| 4992 | + participant FS as Bare repo | |
| 4993 | + | |
| 4994 | + User->>Web: GET /alice/my-repo/tree/main/src | |
| 4995 | + Web->>Ext: RepoContext::extract(owner=alice, repo=my-repo, ref=main, path=src) | |
| 4996 | + | |
| 4997 | + Ext->>DB: SELECT user WHERE username = 'alice' | |
| 4998 | + DB-->>Ext: user {id} | |
| 4999 | + | |
| 5000 | + Ext->>DB: SELECT repository WHERE owner_id AND slug | |
| 5001 | + DB-->>Ext: repository::Model | |
| 5002 | + | |
| 5003 | + Ext->>Access: effective_role(db, visitor_id, repo_id) | |
| 5004 | + Access-->>Ext: Role::Reader | |
| 5005 | + | |
| 5006 | + Ext-->>Web: RepoContext {repo, role, ref, path} | |
| 5007 | + | |
| 5008 | + Web->>Git: tree_browser::list_tree(repo_path, "main", "src") | |
| 5009 | + Git->>FS: Resolve ref main -> commit -> tree -> src/ | |
| 5010 | + FS-->>Git: Vec<TreeEntry> | |
| 5011 | + | |
| 5012 | + Git-->>Web: entries (fichiers + dossiers) | |
| 5013 | + | |
| 5014 | + Web->>Git: readme::find_readme(repo_path, "main", "src") | |
| 5015 | + Git->>FS: Cherche README.md, README, readme.md | |
| 5016 | + FS-->>Git: Option<BlobContent> | |
| 5017 | + Git-->>Web: Option<readme_content> | |
| 5018 | + | |
| 5019 | + Web->>Web: Render template tree.html | |
| 5020 | + Web-->>User: HTML (arbre + README) | |
| 5021 | +</pre> | |
| 5022 | + | |
| 5023 | +<h2 id="7-inscription-utilisateur--création-répertoire"><a class="header" href="#7-inscription-utilisateur--création-répertoire">7. Inscription utilisateur + création répertoire</a></h2> | |
| 5024 | +<pre class="mermaid">sequenceDiagram | |
| 5025 | + actor User as Nouvel utilisateur | |
| 5026 | + participant Web as rustwarden-core (auth) | |
| 5027 | + participant Hook as GitrustHooks | |
| 5028 | + participant DB as PostgreSQL | |
| 5029 | + participant FS as Système de fichiers | |
| 5030 | + | |
| 5031 | + User->>Web: POST /register {username, email, password} | |
| 5032 | + Web->>DB: INSERT INTO users | |
| 5033 | + DB-->>Web: user {id, username} | |
| 5034 | + | |
| 5035 | + Web->>Hook: on_user_registered(db, user_id, username) | |
| 5036 | + Hook->>Hook: Valider username (anti path-traversal) | |
| 5037 | + Hook->>FS: create_dir_all(repos_base_path / username) | |
| 5038 | + FS-->>Hook: Ok | |
| 5039 | + Hook-->>Web: Ok | |
| 5040 | + | |
| 5041 | + Web-->>User: 302 Redirect /login | |
| 5042 | +</pre> | |
| 5043 | + | |
| 5044 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 5045 | +<h1 id="modèle-de-permissions-rbac"><a class="header" href="#modèle-de-permissions-rbac">Modèle de permissions RBAC</a></h1> | |
| 5046 | +<blockquote> | |
| 5047 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 5048 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 5049 | +</blockquote> | |
| 5050 | +<h2 id="todo-66"><a class="header" href="#todo-66">TODO</a></h2> | |
| 5051 | +<ul> | |
| 5052 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 5053 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 5054 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 5055 | +</ul> | |
| 5056 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 5057 | +<h1 id="fonctionnement-du-2fa"><a class="header" href="#fonctionnement-du-2fa">Fonctionnement du 2FA</a></h1> | |
| 5058 | +<blockquote> | |
| 5059 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 5060 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 5061 | +</blockquote> | |
| 5062 | +<h2 id="todo-67"><a class="header" href="#todo-67">TODO</a></h2> | |
| 5063 | +<ul> | |
| 5064 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 5065 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 5066 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 5067 | +</ul> | |
| 5068 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 5069 | +<h1 id="hiérarchie-des-labels"><a class="header" href="#hiérarchie-des-labels">Hiérarchie des labels</a></h1> | |
| 5070 | +<blockquote> | |
| 5071 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 5072 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 5073 | +</blockquote> | |
| 5074 | +<h2 id="todo-68"><a class="header" href="#todo-68">TODO</a></h2> | |
| 5075 | +<ul> | |
| 5076 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 5077 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 5078 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 5079 | +</ul> | |
| 5080 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 5081 | +<h1 id="ci-dagger--easy-mode-vs-power-mode-1"><a class="header" href="#ci-dagger--easy-mode-vs-power-mode-1">CI Dagger : Easy Mode vs Power Mode</a></h1> | |
| 5082 | +<blockquote> | |
| 5083 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 5084 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 5085 | +</blockquote> | |
| 5086 | +<h2 id="todo-69"><a class="header" href="#todo-69">TODO</a></h2> | |
| 5087 | +<ul> | |
| 5088 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 5089 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 5090 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 5091 | +</ul> | |
| 5092 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 5093 | +<h1 id="décisions-ui-htmx-daisyui"><a class="header" href="#décisions-ui-htmx-daisyui">Décisions UI (HTMX, DaisyUI)</a></h1> | |
| 5094 | +<blockquote> | |
| 5095 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 5096 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 5097 | +</blockquote> | |
| 5098 | +<h2 id="todo-70"><a class="header" href="#todo-70">TODO</a></h2> | |
| 5099 | +<ul> | |
| 5100 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 5101 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 5102 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 5103 | +</ul> | |
| 5104 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 5105 | +<h1 id="patron-worker-async"><a class="header" href="#patron-worker-async">Patron worker async</a></h1> | |
| 5106 | +<blockquote> | |
| 5107 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 5108 | +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 5109 | +</blockquote> | |
| 5110 | +<h2 id="todo-71"><a class="header" href="#todo-71">TODO</a></h2> | |
| 5111 | +<ul> | |
| 5112 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li> | |
| 5113 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 5114 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 5115 | +</ul> | |
| 5116 | +<div style="break-before: page; page-break-before: always;"></div> | |
| 5117 | +<h1 id="bibliothèque-de-templates-gitrust"><a class="header" href="#bibliothèque-de-templates-gitrust">Bibliothèque de templates gitrust</a></h1> | |
| 5118 | +<p>Bienvenue dans l’atelier gitrust. Chaque fichier ici est <strong>standalone et copiable tel quel</strong> — un fichier, un cas d’usage. Les commentaires internes suffisent à l’adapter. Pour les explications pédagogiques, référez-vous aux manuels qui pointent vers ces templates.</p> | |
| 5119 | +<blockquote> | |
| 5120 | +<p><strong>Convention</strong> : copiez le fichier qui correspond à votre cas, adaptez les valeurs marquées <code>CHANGE_ME</code>, puis supprimez les commentaires si vous le souhaitez. Ne modifiez pas les fichiers dans ce dépôt — travaillez toujours sur une copie locale.</p> | |
| 5121 | +</blockquote> | |
| 5122 | +<hr> | |
| 5123 | +<h2 id="fichiers-denvironnement-env"><a class="header" href="#fichiers-denvironnement-env">Fichiers d’environnement (<code>env/</code>)</a></h2> | |
| 5124 | +<div class="table-wrapper"> | |
| 5125 | +<table> | |
| 5126 | +<thead> | |
| 5127 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 5128 | +</thead> | |
| 5129 | +<tbody> | |
| 5130 | +<tr><td><a href="template/env/dev-local.env"><code>env/dev-local.env</code></a></td><td>Instance de développement local sur <code>localhost:4000</code> — PostgreSQL local, pas de TLS, debug activé</td></tr> | |
| 5131 | +<tr><td><a href="template/env/production-mono-machine.env"><code>env/production-mono-machine.env</code></a></td><td>Production mono-machine derrière reverse-proxy — PostgreSQL, SMTP, Redis sessions, TLS délégué</td></tr> | |
| 5132 | +<tr><td><a href="template/env/production-ci-heavy.env"><code>env/production-ci-heavy.env</code></a></td><td>Production avec CI runners distants intensifs — tuning pool de connexions, rate limiting ajusté</td></tr> | |
| 5133 | +<tr><td><a href="template/env/tests-e2e.env"><code>env/tests-e2e.env</code></a></td><td>Environnement E2E Playwright — base éphémère, seed de données, SMTP mock</td></tr> | |
| 5134 | +</tbody> | |
| 5135 | +</table> | |
| 5136 | +</div> | |
| 5137 | +<hr> | |
| 5138 | +<h2 id="stacks-docker-docker"><a class="header" href="#stacks-docker-docker">Stacks Docker (<code>docker/</code>)</a></h2> | |
| 5139 | +<div class="table-wrapper"> | |
| 5140 | +<table> | |
| 5141 | +<thead> | |
| 5142 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 5143 | +</thead> | |
| 5144 | +<tbody> | |
| 5145 | +<tr><td><a href="template/docker/docker-compose.minimal.yml"><code>docker/docker-compose.minimal.yml</code></a></td><td>Stack minimale : gitrust + PostgreSQL uniquement — idéale pour l’évaluation et les tutoriels</td></tr> | |
| 5146 | +<tr><td><a href="template/docker/docker-compose.production.yml"><code>docker/docker-compose.production.yml</code></a></td><td>Stack production : gitrust + PostgreSQL + Redis sessions + relay SMTP Postfix</td></tr> | |
| 5147 | +<tr><td><a href="template/docker/docker-compose.with-ci-runner.yml"><code>docker/docker-compose.with-ci-runner.yml</code></a></td><td>Stack production + CI runner Dagger en sidecar — pour instances avec builds fréquents</td></tr> | |
| 5148 | +<tr><td><a href="template/docker/podman-quadlet.container"><code>docker/podman-quadlet.container</code></a></td><td>Alternative Podman Quadlet — déploiement rootless systemd-native sans Docker daemon</td></tr> | |
| 5149 | +</tbody> | |
| 5150 | +</table> | |
| 5151 | +</div> | |
| 5152 | +<hr> | |
| 5153 | +<h2 id="reverse-proxy-reverse-proxy"><a class="header" href="#reverse-proxy-reverse-proxy">Reverse-proxy (<code>reverse-proxy/</code>)</a></h2> | |
| 5154 | +<div class="table-wrapper"> | |
| 5155 | +<table> | |
| 5156 | +<thead> | |
| 5157 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 5158 | +</thead> | |
| 5159 | +<tbody> | |
| 5160 | +<tr><td><a href="template/reverse-proxy/nginx-tls.conf"><code>reverse-proxy/nginx-tls.conf</code></a></td><td>Nginx avec TLS Let’s Encrypt — virtual host gitrust, headers de sécurité, proxy WebSocket SSE</td></tr> | |
| 5161 | +<tr><td><a href="template/reverse-proxy/caddy-Caddyfile"><code>reverse-proxy/caddy-Caddyfile</code></a></td><td>Caddyfile — TLS automatique, configuration minimale, idéal pour les petites instances</td></tr> | |
| 5162 | +<tr><td><a href="template/reverse-proxy/traefik-dynamic.yml"><code>reverse-proxy/traefik-dynamic.yml</code></a></td><td>Traefik config dynamique — intégration labels Docker, middlewares rate-limit et auth</td></tr> | |
| 5163 | +</tbody> | |
| 5164 | +</table> | |
| 5165 | +</div> | |
| 5166 | +<hr> | |
| 5167 | +<h2 id="systemd-systemd"><a class="header" href="#systemd-systemd">Systemd (<code>systemd/</code>)</a></h2> | |
| 5168 | +<div class="table-wrapper"> | |
| 5169 | +<table> | |
| 5170 | +<thead> | |
| 5171 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 5172 | +</thead> | |
| 5173 | +<tbody> | |
| 5174 | +<tr><td><a href="template/systemd/gitrust.service"><code>systemd/gitrust.service</code></a></td><td>Service systemd avec hardening AppArmor/seccomp — pour déploiement binaire natif sans Docker</td></tr> | |
| 5175 | +<tr><td><a href="template/systemd/gitrust-backup.timer"><code>systemd/gitrust-backup.timer</code></a></td><td>Timer systemd de sauvegarde quotidienne — déclenche <code>backup.sh</code> à 2h00 avec journalisation</td></tr> | |
| 5176 | +</tbody> | |
| 5177 | +</table> | |
| 5178 | +</div> | |
| 5179 | +<hr> | |
| 5180 | +<h2 id="configurations-ci-gitrust-ciyml-ci"><a class="header" href="#configurations-ci-gitrust-ciyml-ci">Configurations CI (<code>.gitrust-ci.yml</code>) (<code>ci/</code>)</a></h2> | |
| 5181 | +<div class="table-wrapper"> | |
| 5182 | +<table> | |
| 5183 | +<thead> | |
| 5184 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 5185 | +</thead> | |
| 5186 | +<tbody> | |
| 5187 | +<tr><td><a href="template/ci/rust.gitrust-ci.yml"><code>ci/rust.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Rust — fmt, clippy, test, audit de dépendances, SBOM</td></tr> | |
| 5188 | +<tr><td><a href="template/ci/go.gitrust-ci.yml"><code>ci/go.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Go — vet, staticcheck, test, build multi-arch</td></tr> | |
| 5189 | +<tr><td><a href="template/ci/python.gitrust-ci.yml"><code>ci/python.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Python — ruff, mypy, pytest, packaging wheel</td></tr> | |
| 5190 | +<tr><td><a href="template/ci/node.gitrust-ci.yml"><code>ci/node.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Node.js — ESLint, Vitest, build, audit npm</td></tr> | |
| 5191 | +<tr><td><a href="template/ci/dagger-power-mode/dagger.json"><code>ci/dagger-power-mode/dagger.json</code></a></td><td>Squelette Dagger Power Mode — module Go minimal à étendre pour pipelines complexes</td></tr> | |
| 5192 | +<tr><td><a href="template/ci/dagger-power-mode/main.go"><code>ci/dagger-power-mode/main.go</code></a></td><td>Module Dagger Go — fonctions build/test/publish prêtes à adapter</td></tr> | |
| 5193 | +</tbody> | |
| 5194 | +</table> | |
| 5195 | +</div> | |
| 5196 | +<hr> | |
| 5197 | +<h2 id="scripts-de-sauvegarde-et-restauration-backup"><a class="header" href="#scripts-de-sauvegarde-et-restauration-backup">Scripts de sauvegarde et restauration (<code>backup/</code>)</a></h2> | |
| 5198 | +<div class="table-wrapper"> | |
| 5199 | +<table> | |
| 5200 | +<thead> | |
| 5201 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 5202 | +</thead> | |
| 5203 | +<tbody> | |
| 5204 | +<tr><td><a href="template/backup/backup.sh"><code>backup/backup.sh</code></a></td><td>Sauvegarde complète — <code>pg_dump</code> + <code>rsync</code> des dépôts bare + copie des clés SSH host</td></tr> | |
| 5205 | +<tr><td><a href="template/backup/restore.sh"><code>backup/restore.sh</code></a></td><td>Restauration complète depuis une archive de sauvegarde — avec vérification d’intégrité</td></tr> | |
| 5206 | +</tbody> | |
| 5207 | +</table> | |
| 5208 | +</div> | |
| 5209 | +<hr> | |
| 5210 | +<h2 id="clients-api-dexemple-api-clients"><a class="header" href="#clients-api-dexemple-api-clients">Clients API d’exemple (<code>api-clients/</code>)</a></h2> | |
| 5211 | +<p>Ces exemples illustrent l’authentification par Personal Access Token (PAT) et les opérations CRUD de base sur l’API REST gitrust v1.</p> | |
| 5212 | +<div class="table-wrapper"> | |
| 5213 | +<table> | |
| 5214 | +<thead> | |
| 5215 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 5216 | +</thead> | |
| 5217 | +<tbody> | |
| 5218 | +<tr><td><a href="template/api-clients/python-create-repo.py"><code>api-clients/python-create-repo.py</code></a></td><td>Client Python — créer un dépôt via l’API v1 avec <code>httpx</code> et PAT</td></tr> | |
| 5219 | +<tr><td><a href="template/api-clients/rust-list-repos.rs"><code>api-clients/rust-list-repos.rs</code></a></td><td>Client Rust — lister les dépôts avec pagination via <code>reqwest</code> et PAT</td></tr> | |
| 5220 | +<tr><td><a href="template/api-clients/curl-pat-auth.sh"><code>api-clients/curl-pat-auth.sh</code></a></td><td>Shell curl — exemples d’authentification PAT, GET/POST/DELETE sur les endpoints principaux</td></tr> | |
| 5221 | +</tbody> | |
| 5222 | +</table> | |
| 5223 | +</div> | |
| 5224 | +<hr> | |
| 5225 | +<h2 id="scripts-de-migration-migration"><a class="header" href="#scripts-de-migration-migration">Scripts de migration (<code>migration/</code>)</a></h2> | |
| 5226 | +<div class="table-wrapper"> | |
| 5227 | +<table> | |
| 5228 | +<thead> | |
| 5229 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 5230 | +</thead> | |
| 5231 | +<tbody> | |
| 5232 | +<tr><td><a href="template/migration/from-gitea.sh"><code>migration/from-gitea.sh</code></a></td><td>Import en masse depuis Gitea — dépôts, membres, issues via le worker d’import gitrust</td></tr> | |
| 5233 | +<tr><td><a href="template/migration/from-forgejo.sh"><code>migration/from-forgejo.sh</code></a></td><td>Import en masse depuis Forgejo — même mécanique, adaptée à l’API Forgejo</td></tr> | |
| 5234 | +</tbody> | |
| 5235 | +</table> | |
| 5236 | +</div> | |
| 5237 | +<hr> | |
| 5238 | +<h2 id="comment-utiliser-ces-templates-depuis-les-manuels"><a class="header" href="#comment-utiliser-ces-templates-depuis-les-manuels">Comment utiliser ces templates depuis les manuels</a></h2> | |
| 5239 | +<p>Les manuels narratifs pointent vers ces fichiers depuis leurs sections how-to. Par exemple :</p> | |
| 5240 | +<ul> | |
| 5241 | +<li><code>administration_manual/how-to/configurer-smtp.md</code> → <em>« Copiez <code>template/env/production-mono-machine.env</code> puis… »</em></li> | |
| 5242 | +<li><code>administration_manual/tutorials/01-installation-docker.md</code> → <em>« La stack s’appuie sur <code>template/docker/docker-compose.minimal.yml</code> »</em></li> | |
| 5243 | +<li><code>developer_manual/how-to/implementer-endpoint-api.md</code> → <em>« Testez avec <code>template/api-clients/curl-pat-auth.sh</code> »</em></li> | |
| 5244 | +</ul> | |
| 5245 | +<p>Les templates ne contiennent pas d’explication pédagogique — tout le contexte se trouve dans les manuels.</p> | |
| 5246 | + | |
| 5247 | + </main> | |
| 5248 | + | |
| 5249 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 5250 | + <!-- Mobile navigation buttons --> | |
| 5251 | + | |
| 5252 | + | |
| 5253 | + <div style="clear: both"></div> | |
| 5254 | + </nav> | |
| 5255 | + </div> | |
| 5256 | + </div> | |
| 5257 | + | |
| 5258 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 5259 | + | |
| 5260 | + </nav> | |
| 5261 | + | |
| 5262 | + </div> | |
| 5263 | + | |
| 5264 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 5265 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 5266 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 5267 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 5268 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 5269 | + | |
| 5270 | + | |
| 5271 | + | |
| 5272 | + <script> | |
| 5273 | + window.playground_copyable = true; | |
| 5274 | + </script> | |
| 5275 | + | |
| 5276 | + | |
| 5277 | + <script src="elasticlunr-ef4e11c1.min.js"></script> | |
| 5278 | + <script src="mark-09e88c2c.min.js"></script> | |
| 5279 | + <script src="searcher-c2a407aa.js"></script> | |
| 5280 | + | |
| 5281 | + <script src="clipboard-1626706a.min.js"></script> | |
| 5282 | + <script src="highlight-abc7f01d.js"></script> | |
| 5283 | + <script src="book-a0b12cfe.js"></script> | |
| 5284 | + | |
| 5285 | + <!-- Custom JS scripts --> | |
| 5286 | + <script src="theme/mermaid-eefea253.min.js"></script> | |
| 5287 | + <script src="theme/mermaid-init-ccf746f1.js"></script> | |
| 5288 | + | |
| 5289 | + <script> | |
| 5290 | + window.addEventListener('load', function() { | |
| 5291 | + window.setTimeout(window.print, 100); | |
| 5292 | + }); | |
| 5293 | + </script> | |
| 5294 | + | |
| 5295 | + | |
| 5296 | + </div> | |
| 5297 | + </body> | |
| 5298 | +</html> |
A
book/searcher-c2a407aa.js
+555
-0
@@ -0,0 +1,555 @@
| 1 | +'use strict'; | |
| 2 | + | |
| 3 | +/* global Mark, elasticlunr, path_to_root */ | |
| 4 | + | |
| 5 | +window.search = window.search || {}; | |
| 6 | +(function search() { | |
| 7 | + // Search functionality | |
| 8 | + // | |
| 9 | + // You can use !hasFocus() to prevent keyhandling in your key | |
| 10 | + // event handlers while the user is typing their search. | |
| 11 | + | |
| 12 | + if (!Mark || !elasticlunr) { | |
| 13 | + return; | |
| 14 | + } | |
| 15 | + | |
| 16 | + // eslint-disable-next-line max-len | |
| 17 | + // IE 11 Compatibility from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith | |
| 18 | + if (!String.prototype.startsWith) { | |
| 19 | + String.prototype.startsWith = function(search, pos) { | |
| 20 | + return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; | |
| 21 | + }; | |
| 22 | + } | |
| 23 | + | |
| 24 | + const search_wrap = document.getElementById('mdbook-search-wrapper'), | |
| 25 | + searchbar_outer = document.getElementById('mdbook-searchbar-outer'), | |
| 26 | + searchbar = document.getElementById('mdbook-searchbar'), | |
| 27 | + searchresults = document.getElementById('mdbook-searchresults'), | |
| 28 | + searchresults_outer = document.getElementById('mdbook-searchresults-outer'), | |
| 29 | + searchresults_header = document.getElementById('mdbook-searchresults-header'), | |
| 30 | + searchicon = document.getElementById('mdbook-search-toggle'), | |
| 31 | + content = document.getElementById('mdbook-content'), | |
| 32 | + | |
| 33 | + // SVG text elements don't render if inside a <mark> tag. | |
| 34 | + mark_exclude = ['text'], | |
| 35 | + marker = new Mark(content), | |
| 36 | + URL_SEARCH_PARAM = 'search', | |
| 37 | + URL_MARK_PARAM = 'highlight'; | |
| 38 | + | |
| 39 | + let current_searchterm = '', | |
| 40 | + doc_urls = [], | |
| 41 | + search_options = { | |
| 42 | + bool: 'AND', | |
| 43 | + expand: true, | |
| 44 | + fields: { | |
| 45 | + title: {boost: 1}, | |
| 46 | + body: {boost: 1}, | |
| 47 | + breadcrumbs: {boost: 0}, | |
| 48 | + }, | |
| 49 | + }, | |
| 50 | + searchindex = null, | |
| 51 | + results_options = { | |
| 52 | + teaser_word_count: 30, | |
| 53 | + limit_results: 30, | |
| 54 | + }, | |
| 55 | + teaser_count = 0; | |
| 56 | + | |
| 57 | + function hasFocus() { | |
| 58 | + return searchbar === document.activeElement; | |
| 59 | + } | |
| 60 | + | |
| 61 | + function removeChildren(elem) { | |
| 62 | + while (elem.firstChild) { | |
| 63 | + elem.removeChild(elem.firstChild); | |
| 64 | + } | |
| 65 | + } | |
| 66 | + | |
| 67 | + // Helper to parse a url into its building blocks. | |
| 68 | + function parseURL(url) { | |
| 69 | + const a = document.createElement('a'); | |
| 70 | + a.href = url; | |
| 71 | + return { | |
| 72 | + source: url, | |
| 73 | + protocol: a.protocol.replace(':', ''), | |
| 74 | + host: a.hostname, | |
| 75 | + port: a.port, | |
| 76 | + params: (function() { | |
| 77 | + const ret = {}; | |
| 78 | + const seg = a.search.replace(/^\?/, '').split('&'); | |
| 79 | + for (const part of seg) { | |
| 80 | + if (!part) { | |
| 81 | + continue; | |
| 82 | + } | |
| 83 | + const s = part.split('='); | |
| 84 | + ret[s[0]] = s[1]; | |
| 85 | + } | |
| 86 | + return ret; | |
| 87 | + })(), | |
| 88 | + file: (a.pathname.match(/\/([^/?#]+)$/i) || ['', ''])[1], | |
| 89 | + hash: a.hash.replace('#', ''), | |
| 90 | + path: a.pathname.replace(/^([^/])/, '/$1'), | |
| 91 | + }; | |
| 92 | + } | |
| 93 | + | |
| 94 | + // Helper to recreate a url string from its building blocks. | |
| 95 | + function renderURL(urlobject) { | |
| 96 | + let url = urlobject.protocol + '://' + urlobject.host; | |
| 97 | + if (urlobject.port !== '') { | |
| 98 | + url += ':' + urlobject.port; | |
| 99 | + } | |
| 100 | + url += urlobject.path; | |
| 101 | + let joiner = '?'; | |
| 102 | + for (const prop in urlobject.params) { | |
| 103 | + if (Object.prototype.hasOwnProperty.call(urlobject.params, prop)) { | |
| 104 | + url += joiner + prop + '=' + urlobject.params[prop]; | |
| 105 | + joiner = '&'; | |
| 106 | + } | |
| 107 | + } | |
| 108 | + if (urlobject.hash !== '') { | |
| 109 | + url += '#' + urlobject.hash; | |
| 110 | + } | |
| 111 | + return url; | |
| 112 | + } | |
| 113 | + | |
| 114 | + // Helper to escape html special chars for displaying the teasers | |
| 115 | + const escapeHTML = (function() { | |
| 116 | + const MAP = { | |
| 117 | + '&': '&', | |
| 118 | + '<': '<', | |
| 119 | + '>': '>', | |
| 120 | + '"': '"', | |
| 121 | + '\'': ''', | |
| 122 | + }; | |
| 123 | + const repl = function(c) { | |
| 124 | + return MAP[c]; | |
| 125 | + }; | |
| 126 | + return function(s) { | |
| 127 | + return s.replace(/[&<>'"]/g, repl); | |
| 128 | + }; | |
| 129 | + })(); | |
| 130 | + | |
| 131 | + function formatSearchMetric(count, searchterm) { | |
| 132 | + if (count === 1) { | |
| 133 | + return count + ' search result for \'' + searchterm + '\':'; | |
| 134 | + } else if (count === 0) { | |
| 135 | + return 'No search results for \'' + searchterm + '\'.'; | |
| 136 | + } else { | |
| 137 | + return count + ' search results for \'' + searchterm + '\':'; | |
| 138 | + } | |
| 139 | + } | |
| 140 | + | |
| 141 | + function formatSearchResult(result, searchterms) { | |
| 142 | + const teaser = makeTeaser(escapeHTML(result.doc.body), searchterms); | |
| 143 | + teaser_count++; | |
| 144 | + | |
| 145 | + // The ?URL_MARK_PARAM= parameter belongs inbetween the page and the #heading-anchor | |
| 146 | + const url = doc_urls[result.ref].split('#'); | |
| 147 | + if (url.length === 1) { // no anchor found | |
| 148 | + url.push(''); | |
| 149 | + } | |
| 150 | + | |
| 151 | + // encodeURIComponent escapes all chars that could allow an XSS except | |
| 152 | + // for '. Due to that we also manually replace ' with its url-encoded | |
| 153 | + // representation (%27). | |
| 154 | + const encoded_search = encodeURIComponent(searchterms.join(' ')).replace(/'/g, '%27'); | |
| 155 | + | |
| 156 | + return '<a href="' + path_to_root + url[0] + '?' + URL_MARK_PARAM + '=' + encoded_search | |
| 157 | + + '#' + url[1] + '" aria-details="mdbook-teaser_' + teaser_count + '">' | |
| 158 | + + result.doc.breadcrumbs + '</a>' | |
| 159 | + + '<span class="teaser" id="mdbook-teaser_' + teaser_count | |
| 160 | + + '" aria-label="Search Result Teaser">' + teaser + '</span>'; | |
| 161 | + } | |
| 162 | + | |
| 163 | + function makeTeaser(body, searchterms) { | |
| 164 | + // The strategy is as follows: | |
| 165 | + // First, assign a value to each word in the document: | |
| 166 | + // Words that correspond to search terms (stemmer aware): 40 | |
| 167 | + // Normal words: 2 | |
| 168 | + // First word in a sentence: 8 | |
| 169 | + // Then use a sliding window with a constant number of words and count the | |
| 170 | + // sum of the values of the words within the window. Then use the window that got the | |
| 171 | + // maximum sum. If there are multiple maximas, then get the last one. | |
| 172 | + // Enclose the terms in <em>. | |
| 173 | + const stemmed_searchterms = searchterms.map(function(w) { | |
| 174 | + return elasticlunr.stemmer(w.toLowerCase()); | |
| 175 | + }); | |
| 176 | + const searchterm_weight = 40; | |
| 177 | + const weighted = []; // contains elements of ["word", weight, index_in_document] | |
| 178 | + // split in sentences, then words | |
| 179 | + const sentences = body.toLowerCase().split('. '); | |
| 180 | + let index = 0; | |
| 181 | + let value = 0; | |
| 182 | + let searchterm_found = false; | |
| 183 | + for (const sentenceindex in sentences) { | |
| 184 | + const words = sentences[sentenceindex].split(' '); | |
| 185 | + value = 8; | |
| 186 | + for (const wordindex in words) { | |
| 187 | + const word = words[wordindex]; | |
| 188 | + if (word.length > 0) { | |
| 189 | + for (const searchtermindex in stemmed_searchterms) { | |
| 190 | + if (elasticlunr.stemmer(word).startsWith( | |
| 191 | + stemmed_searchterms[searchtermindex]) | |
| 192 | + ) { | |
| 193 | + value = searchterm_weight; | |
| 194 | + searchterm_found = true; | |
| 195 | + } | |
| 196 | + } | |
| 197 | + weighted.push([word, value, index]); | |
| 198 | + value = 2; | |
| 199 | + } | |
| 200 | + index += word.length; | |
| 201 | + index += 1; // ' ' or '.' if last word in sentence | |
| 202 | + } | |
| 203 | + index += 1; // because we split at a two-char boundary '. ' | |
| 204 | + } | |
| 205 | + | |
| 206 | + if (weighted.length === 0) { | |
| 207 | + return body; | |
| 208 | + } | |
| 209 | + | |
| 210 | + const window_weight = []; | |
| 211 | + const window_size = Math.min(weighted.length, results_options.teaser_word_count); | |
| 212 | + | |
| 213 | + let cur_sum = 0; | |
| 214 | + for (let wordindex = 0; wordindex < window_size; wordindex++) { | |
| 215 | + cur_sum += weighted[wordindex][1]; | |
| 216 | + } | |
| 217 | + window_weight.push(cur_sum); | |
| 218 | + for (let wordindex = 0; wordindex < weighted.length - window_size; wordindex++) { | |
| 219 | + cur_sum -= weighted[wordindex][1]; | |
| 220 | + cur_sum += weighted[wordindex + window_size][1]; | |
| 221 | + window_weight.push(cur_sum); | |
| 222 | + } | |
| 223 | + | |
| 224 | + let max_sum_window_index = 0; | |
| 225 | + if (searchterm_found) { | |
| 226 | + let max_sum = 0; | |
| 227 | + // backwards | |
| 228 | + for (let i = window_weight.length - 1; i >= 0; i--) { | |
| 229 | + if (window_weight[i] > max_sum) { | |
| 230 | + max_sum = window_weight[i]; | |
| 231 | + max_sum_window_index = i; | |
| 232 | + } | |
| 233 | + } | |
| 234 | + } else { | |
| 235 | + max_sum_window_index = 0; | |
| 236 | + } | |
| 237 | + | |
| 238 | + // add <em/> around searchterms | |
| 239 | + const teaser_split = []; | |
| 240 | + index = weighted[max_sum_window_index][2]; | |
| 241 | + for (let i = max_sum_window_index; i < max_sum_window_index + window_size; i++) { | |
| 242 | + const word = weighted[i]; | |
| 243 | + if (index < word[2]) { | |
| 244 | + // missing text from index to start of `word` | |
| 245 | + teaser_split.push(body.substring(index, word[2])); | |
| 246 | + index = word[2]; | |
| 247 | + } | |
| 248 | + if (word[1] === searchterm_weight) { | |
| 249 | + teaser_split.push('<em>'); | |
| 250 | + } | |
| 251 | + index = word[2] + word[0].length; | |
| 252 | + teaser_split.push(body.substring(word[2], index)); | |
| 253 | + if (word[1] === searchterm_weight) { | |
| 254 | + teaser_split.push('</em>'); | |
| 255 | + } | |
| 256 | + } | |
| 257 | + | |
| 258 | + return teaser_split.join(''); | |
| 259 | + } | |
| 260 | + | |
| 261 | + function init(config) { | |
| 262 | + results_options = config.results_options; | |
| 263 | + search_options = config.search_options; | |
| 264 | + doc_urls = config.doc_urls; | |
| 265 | + searchindex = elasticlunr.Index.load(config.index); | |
| 266 | + | |
| 267 | + searchbar_outer.classList.remove('searching'); | |
| 268 | + | |
| 269 | + searchbar.focus(); | |
| 270 | + | |
| 271 | + const searchterm = searchbar.value.trim(); | |
| 272 | + if (searchterm !== '') { | |
| 273 | + searchbar.classList.add('active'); | |
| 274 | + doSearch(searchterm); | |
| 275 | + } | |
| 276 | + } | |
| 277 | + | |
| 278 | + function initSearchInteractions(config) { | |
| 279 | + // Set up events | |
| 280 | + searchicon.addEventListener('click', () => { | |
| 281 | + searchIconClickHandler(); | |
| 282 | + }, false); | |
| 283 | + searchbar.addEventListener('keyup', () => { | |
| 284 | + searchbarKeyUpHandler(); | |
| 285 | + }, false); | |
| 286 | + document.addEventListener('keydown', e => { | |
| 287 | + globalKeyHandler(e); | |
| 288 | + }, false); | |
| 289 | + // If the user uses the browser buttons, do the same as if a reload happened | |
| 290 | + window.onpopstate = () => { | |
| 291 | + doSearchOrMarkFromUrl(); | |
| 292 | + }; | |
| 293 | + // Suppress "submit" events so the page doesn't reload when the user presses Enter | |
| 294 | + document.addEventListener('submit', e => { | |
| 295 | + e.preventDefault(); | |
| 296 | + }, false); | |
| 297 | + | |
| 298 | + // If reloaded, do the search or mark again, depending on the current url parameters | |
| 299 | + doSearchOrMarkFromUrl(); | |
| 300 | + | |
| 301 | + // Exported functions | |
| 302 | + config.hasFocus = hasFocus; | |
| 303 | + } | |
| 304 | + | |
| 305 | + initSearchInteractions(window.search); | |
| 306 | + | |
| 307 | + function unfocusSearchbar() { | |
| 308 | + // hacky, but just focusing a div only works once | |
| 309 | + const tmp = document.createElement('input'); | |
| 310 | + tmp.setAttribute('style', 'position: absolute; opacity: 0;'); | |
| 311 | + searchicon.appendChild(tmp); | |
| 312 | + tmp.focus(); | |
| 313 | + tmp.remove(); | |
| 314 | + } | |
| 315 | + | |
| 316 | + // On reload or browser history backwards/forwards events, parse the url and do search or mark | |
| 317 | + function doSearchOrMarkFromUrl() { | |
| 318 | + // Check current URL for search request | |
| 319 | + const url = parseURL(window.location.href); | |
| 320 | + if (Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM) | |
| 321 | + && url.params[URL_SEARCH_PARAM] !== '') { | |
| 322 | + showSearch(true); | |
| 323 | + searchbar.value = decodeURIComponent( | |
| 324 | + (url.params[URL_SEARCH_PARAM] + '').replace(/\+/g, '%20')); | |
| 325 | + searchbarKeyUpHandler(); // -> doSearch() | |
| 326 | + } else { | |
| 327 | + showSearch(false); | |
| 328 | + } | |
| 329 | + | |
| 330 | + if (Object.prototype.hasOwnProperty.call(url.params, URL_MARK_PARAM)) { | |
| 331 | + const words = decodeURIComponent(url.params[URL_MARK_PARAM]).split(' '); | |
| 332 | + marker.mark(words, { | |
| 333 | + exclude: mark_exclude, | |
| 334 | + }); | |
| 335 | + | |
| 336 | + const markers = document.querySelectorAll('mark'); | |
| 337 | + const hide = () => { | |
| 338 | + for (let i = 0; i < markers.length; i++) { | |
| 339 | + markers[i].classList.add('fade-out'); | |
| 340 | + window.setTimeout(() => { | |
| 341 | + marker.unmark(); | |
| 342 | + }, 300); | |
| 343 | + } | |
| 344 | + }; | |
| 345 | + | |
| 346 | + for (let i = 0; i < markers.length; i++) { | |
| 347 | + markers[i].addEventListener('click', hide); | |
| 348 | + } | |
| 349 | + } | |
| 350 | + } | |
| 351 | + | |
| 352 | + // Eventhandler for keyevents on `document` | |
| 353 | + function globalKeyHandler(e) { | |
| 354 | + if (e.altKey || | |
| 355 | + e.ctrlKey || | |
| 356 | + e.metaKey || | |
| 357 | + e.shiftKey || | |
| 358 | + e.target.type === 'textarea' || | |
| 359 | + e.target.type === 'text' || | |
| 360 | + !hasFocus() && /^(?:input|select|textarea)$/i.test(e.target.nodeName) | |
| 361 | + ) { | |
| 362 | + return; | |
| 363 | + } | |
| 364 | + | |
| 365 | + if (e.key === 'Escape') { | |
| 366 | + e.preventDefault(); | |
| 367 | + searchbar.classList.remove('active'); | |
| 368 | + setSearchUrlParameters('', | |
| 369 | + searchbar.value.trim() !== '' ? 'push' : 'replace'); | |
| 370 | + if (hasFocus()) { | |
| 371 | + unfocusSearchbar(); | |
| 372 | + } | |
| 373 | + showSearch(false); | |
| 374 | + marker.unmark(); | |
| 375 | + } else if (!hasFocus() && (e.key === 's' || e.key === '/')) { | |
| 376 | + e.preventDefault(); | |
| 377 | + showSearch(true); | |
| 378 | + window.scrollTo(0, 0); | |
| 379 | + searchbar.select(); | |
| 380 | + } else if (hasFocus() && (e.key === 'ArrowDown' | |
| 381 | + || e.key === 'Enter')) { | |
| 382 | + e.preventDefault(); | |
| 383 | + const first = searchresults.firstElementChild; | |
| 384 | + if (first !== null) { | |
| 385 | + unfocusSearchbar(); | |
| 386 | + first.classList.add('focus'); | |
| 387 | + if (e.key === 'Enter') { | |
| 388 | + window.location.assign(first.querySelector('a')); | |
| 389 | + } | |
| 390 | + } | |
| 391 | + } else if (!hasFocus() && (e.key === 'ArrowDown' | |
| 392 | + || e.key === 'ArrowUp' | |
| 393 | + || e.key === 'Enter')) { | |
| 394 | + // not `:focus` because browser does annoying scrolling | |
| 395 | + const focused = searchresults.querySelector('li.focus'); | |
| 396 | + if (!focused) { | |
| 397 | + return; | |
| 398 | + } | |
| 399 | + e.preventDefault(); | |
| 400 | + if (e.key === 'ArrowDown') { | |
| 401 | + const next = focused.nextElementSibling; | |
| 402 | + if (next) { | |
| 403 | + focused.classList.remove('focus'); | |
| 404 | + next.classList.add('focus'); | |
| 405 | + } | |
| 406 | + } else if (e.key === 'ArrowUp') { | |
| 407 | + focused.classList.remove('focus'); | |
| 408 | + const prev = focused.previousElementSibling; | |
| 409 | + if (prev) { | |
| 410 | + prev.classList.add('focus'); | |
| 411 | + } else { | |
| 412 | + searchbar.select(); | |
| 413 | + } | |
| 414 | + } else { // Enter | |
| 415 | + window.location.assign(focused.querySelector('a')); | |
| 416 | + } | |
| 417 | + } | |
| 418 | + } | |
| 419 | + | |
| 420 | + function loadSearchScript(url, id) { | |
| 421 | + if (document.getElementById(id)) { | |
| 422 | + return; | |
| 423 | + } | |
| 424 | + searchbar_outer.classList.add('searching'); | |
| 425 | + | |
| 426 | + const script = document.createElement('script'); | |
| 427 | + script.src = url; | |
| 428 | + script.id = id; | |
| 429 | + script.onload = () => init(window.search); | |
| 430 | + script.onerror = error => { | |
| 431 | + console.error(`Failed to load \`${url}\`: ${error}`); | |
| 432 | + }; | |
| 433 | + document.head.append(script); | |
| 434 | + } | |
| 435 | + | |
| 436 | + function showSearch(yes) { | |
| 437 | + if (yes) { | |
| 438 | + loadSearchScript( | |
| 439 | + window.path_to_searchindex_js || | |
| 440 | + path_to_root + 'searchindex-2e4a517d.js', | |
| 441 | + 'mdbook-search-index'); | |
| 442 | + search_wrap.classList.remove('hidden'); | |
| 443 | + searchicon.setAttribute('aria-expanded', 'true'); | |
| 444 | + } else { | |
| 445 | + search_wrap.classList.add('hidden'); | |
| 446 | + searchicon.setAttribute('aria-expanded', 'false'); | |
| 447 | + const results = searchresults.children; | |
| 448 | + for (let i = 0; i < results.length; i++) { | |
| 449 | + results[i].classList.remove('focus'); | |
| 450 | + } | |
| 451 | + } | |
| 452 | + } | |
| 453 | + | |
| 454 | + function showResults(yes) { | |
| 455 | + if (yes) { | |
| 456 | + searchresults_outer.classList.remove('hidden'); | |
| 457 | + } else { | |
| 458 | + searchresults_outer.classList.add('hidden'); | |
| 459 | + } | |
| 460 | + } | |
| 461 | + | |
| 462 | + // Eventhandler for search icon | |
| 463 | + function searchIconClickHandler() { | |
| 464 | + if (search_wrap.classList.contains('hidden')) { | |
| 465 | + showSearch(true); | |
| 466 | + window.scrollTo(0, 0); | |
| 467 | + searchbar.select(); | |
| 468 | + } else { | |
| 469 | + showSearch(false); | |
| 470 | + } | |
| 471 | + } | |
| 472 | + | |
| 473 | + // Eventhandler for keyevents while the searchbar is focused | |
| 474 | + function searchbarKeyUpHandler() { | |
| 475 | + const searchterm = searchbar.value.trim(); | |
| 476 | + if (searchterm !== '') { | |
| 477 | + searchbar.classList.add('active'); | |
| 478 | + doSearch(searchterm); | |
| 479 | + } else { | |
| 480 | + searchbar.classList.remove('active'); | |
| 481 | + showResults(false); | |
| 482 | + removeChildren(searchresults); | |
| 483 | + } | |
| 484 | + | |
| 485 | + setSearchUrlParameters(searchterm, 'push_if_new_search_else_replace'); | |
| 486 | + | |
| 487 | + // Remove marks | |
| 488 | + marker.unmark(); | |
| 489 | + } | |
| 490 | + | |
| 491 | + // Update current url with ?URL_SEARCH_PARAM= parameter, remove ?URL_MARK_PARAM and | |
| 492 | + // `#heading-anchor`. `action` can be one of "push", "replace", | |
| 493 | + // "push_if_new_search_else_replace" and replaces or pushes a new browser history item. | |
| 494 | + // "push_if_new_search_else_replace" pushes if there is no `?URL_SEARCH_PARAM=abc` yet. | |
| 495 | + function setSearchUrlParameters(searchterm, action) { | |
| 496 | + const url = parseURL(window.location.href); | |
| 497 | + const first_search = !Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM); | |
| 498 | + | |
| 499 | + if (searchterm !== '' || action === 'push_if_new_search_else_replace') { | |
| 500 | + url.params[URL_SEARCH_PARAM] = searchterm; | |
| 501 | + delete url.params[URL_MARK_PARAM]; | |
| 502 | + url.hash = ''; | |
| 503 | + } else { | |
| 504 | + delete url.params[URL_MARK_PARAM]; | |
| 505 | + delete url.params[URL_SEARCH_PARAM]; | |
| 506 | + } | |
| 507 | + // A new search will also add a new history item, so the user can go back | |
| 508 | + // to the page prior to searching. A updated search term will only replace | |
| 509 | + // the url. | |
| 510 | + if (action === 'push' || action === 'push_if_new_search_else_replace' && first_search ) { | |
| 511 | + history.pushState({}, document.title, renderURL(url)); | |
| 512 | + } else if (action === 'replace' || | |
| 513 | + action === 'push_if_new_search_else_replace' && | |
| 514 | + !first_search | |
| 515 | + ) { | |
| 516 | + history.replaceState({}, document.title, renderURL(url)); | |
| 517 | + } | |
| 518 | + } | |
| 519 | + | |
| 520 | + function doSearch(searchterm) { | |
| 521 | + // Don't search the same twice | |
| 522 | + if (current_searchterm === searchterm) { | |
| 523 | + return; | |
| 524 | + } | |
| 525 | + searchbar_outer.classList.add('searching'); | |
| 526 | + if (searchindex === null) { | |
| 527 | + return; | |
| 528 | + } | |
| 529 | + | |
| 530 | + current_searchterm = searchterm; | |
| 531 | + | |
| 532 | + // Do the actual search | |
| 533 | + const results = searchindex.search(searchterm, search_options); | |
| 534 | + const resultcount = Math.min(results.length, results_options.limit_results); | |
| 535 | + | |
| 536 | + // Display search metrics | |
| 537 | + searchresults_header.innerText = formatSearchMetric(resultcount, searchterm); | |
| 538 | + | |
| 539 | + // Clear and insert results | |
| 540 | + const searchterms = searchterm.split(' '); | |
| 541 | + removeChildren(searchresults); | |
| 542 | + for (let i = 0; i < resultcount ; i++) { | |
| 543 | + const resultElem = document.createElement('li'); | |
| 544 | + resultElem.innerHTML = formatSearchResult(results[i], searchterms); | |
| 545 | + searchresults.appendChild(resultElem); | |
| 546 | + } | |
| 547 | + | |
| 548 | + // Display results | |
| 549 | + showResults(true); | |
| 550 | + searchbar_outer.classList.remove('searching'); | |
| 551 | + } | |
| 552 | + | |
| 553 | + // Exported functions | |
| 554 | + search.hasFocus = hasFocus; | |
| 555 | +})(window.search); |
A
book/searchindex-2e4a517d.js
+1
-0
@@ -0,0 +1 @@
| 1 | +window.search = Object.assign(window.search, JSON.parse('{"doc_urls":["introduction.html#introduction","introduction.html#quest-ce-que-gitrust-","introduction.html#à-qui-sadresse-cette-documentation-","introduction.html#comment-cette-documentation-est-elle-structurée-","introduction.html#naviguer-dans-la-documentation","user_manual/index.html#manuel-utilisateur","user_manual/index.html#parcours-dapprentissage","user_manual/index.html#tutoriels--apprendre-en-faisant","user_manual/index.html#how-to--recettes-pour-les-tâches-courantes","user_manual/index.html#référence--informations-techniques-exactes","user_manual/index.html#explication--comprendre-le-pourquoi","user_manual/tutorials/index.html#tutoriels","user_manual/tutorials/index.html#todo","user_manual/tutorials/01-premier-pas.html#premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt","user_manual/tutorials/01-premier-pas.html#objectifs","user_manual/tutorials/01-premier-pas.html#pré-requis","user_manual/tutorials/01-premier-pas.html#vue-densemble","user_manual/tutorials/01-premier-pas.html#étape-1--connecte-toi-et-accède-aux-paramètres-de-sécurité","user_manual/tutorials/01-premier-pas.html#étape-2--active-la-2fa-avec-une-application-dauthentification","user_manual/tutorials/01-premier-pas.html#étape-3--génère-ou-localise-ta-clé-ssh","user_manual/tutorials/01-premier-pas.html#étape-4--enregistre-la-clé-ssh-dans-ton-profil-gitrust","user_manual/tutorials/01-premier-pas.html#étape-5--crée-ton-premier-dépôt-vide","user_manual/tutorials/01-premier-pas.html#récapitulatif","user_manual/tutorials/01-premier-pas.html#et-si-ça-ne-marche-pas","user_manual/tutorials/01-premier-pas.html#prochaine-étape","user_manual/tutorials/02-cloner-pousser.html#02--cloner-et-pousser-du-code","user_manual/tutorials/02-cloner-pousser.html#todo","user_manual/tutorials/03-collaborer.html#03--collaborer--équipes-issues-pull-requests","user_manual/tutorials/03-collaborer.html#todo","user_manual/tutorials/04-automatiser-ci.html#04--automatiser-avec-la-ci","user_manual/tutorials/04-automatiser-ci.html#todo","user_manual/how-to/index.html#guides-pratiques","user_manual/how-to/index.html#todo","user_manual/how-to/gerer-cles-ssh.html#gérer-ses-clés-ssh","user_manual/how-to/gerer-cles-ssh.html#todo","user_manual/how-to/configurer-2fa.html#configurer-la-double-authentification-2fa","user_manual/how-to/configurer-2fa.html#todo","user_manual/how-to/creer-personal-access-token.html#créer-un-personal-access-token","user_manual/how-to/creer-personal-access-token.html#todo","user_manual/how-to/gerer-equipes-permissions.html#gérer-les-équipes-et-les-permissions","user_manual/how-to/gerer-equipes-permissions.html#todo","user_manual/how-to/ouvrir-pull-request.html#ouvrir-une-pull-request","user_manual/how-to/ouvrir-pull-request.html#todo","user_manual/how-to/fusionner-strategies.html#stratégies-de-fusion-ff--squash--merge-commit","user_manual/how-to/fusionner-strategies.html#todo","user_manual/how-to/utiliser-labels-issues.html#utiliser-les-labels-et-les-issues","user_manual/how-to/utiliser-labels-issues.html#todo","user_manual/how-to/importer-depot-externe.html#importer-un-dépôt-externe","user_manual/how-to/importer-depot-externe.html#todo","user_manual/how-to/consulter-sbom.html#consulter-le-sbom-dun-dépôt","user_manual/how-to/consulter-sbom.html#todo","user_manual/reference/index.html#référence","user_manual/reference/index.html#todo","user_manual/reference/modele-permissions.html#modèle-de-permissions-4-rôles","user_manual/reference/modele-permissions.html#todo","user_manual/reference/api-rest-v1.html#api-rest-v1","user_manual/reference/api-rest-v1.html#todo","user_manual/reference/gitrust-ci-yml-schema.html#schéma-du-fichier-gitrust-ciyml","user_manual/reference/gitrust-ci-yml-schema.html#todo","user_manual/reference/markdown-et-syntaxe.html#markdown-et-syntaxe-supportée","user_manual/reference/markdown-et-syntaxe.html#todo","user_manual/reference/notifications.html#notifications","user_manual/reference/notifications.html#todo","user_manual/explanation/index.html#explication","user_manual/explanation/index.html#todo","user_manual/explanation/modele-collaboration.html#modèle-de-collaboration-sur-gitrust","user_manual/explanation/modele-collaboration.html#todo","user_manual/explanation/securite-utilisateur.html#sécurité-côté-utilisateur","user_manual/explanation/securite-utilisateur.html#todo","user_manual/explanation/cycle-vie-pull-request.html#cycle-de-vie-dune-pull-request","user_manual/explanation/cycle-vie-pull-request.html#todo","administration_manual/index.html#manuel-dadministration","administration_manual/index.html#parcours-dapprentissage","administration_manual/index.html#tutoriels--apprendre-en-faisant","administration_manual/index.html#how-to--recettes-pour-les-tâches-courantes","administration_manual/index.html#référence--informations-techniques-exactes","administration_manual/index.html#explication--comprendre-le-pourquoi","administration_manual/tutorials/index.html#tutoriels","administration_manual/tutorials/index.html#todo","administration_manual/tutorials/01-installation-docker.html#installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose","administration_manual/tutorials/01-installation-docker.html#objectifs","administration_manual/tutorials/01-installation-docker.html#pré-requis","administration_manual/tutorials/01-installation-docker.html#vue-densemble","administration_manual/tutorials/01-installation-docker.html#étape-1--créez-le-répertoire-de-travail-et-le-fichier-de-configuration","administration_manual/tutorials/01-installation-docker.html#étape-2--créez-le-fichier-docker-composeyml","administration_manual/tutorials/01-installation-docker.html#étape-3--démarrez-la-stack-et-suivez-les-logs","administration_manual/tutorials/01-installation-docker.html#étape-4--créez-le-premier-compte-administrateur","administration_manual/tutorials/01-installation-docker.html#récapitulatif","administration_manual/tutorials/01-installation-docker.html#et-si-ça-ne-marche-pas","administration_manual/tutorials/01-installation-docker.html#prochaine-étape","administration_manual/tutorials/02-installation-systemd.html#02--installation-avec-systemd","administration_manual/tutorials/02-installation-systemd.html#todo","administration_manual/tutorials/03-premier-demarrage.html#03--premier-démarrage","administration_manual/tutorials/03-premier-demarrage.html#todo","administration_manual/tutorials/04-mise-en-production-192-168.html#mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt","administration_manual/tutorials/04-mise-en-production-192-168.html#contexte","administration_manual/tutorials/04-mise-en-production-192-168.html#les-trois-services-gitrust","administration_manual/tutorials/04-mise-en-production-192-168.html#topologie-réseau","administration_manual/tutorials/04-mise-en-production-192-168.html#risque-critique--ordre-dexécution","administration_manual/tutorials/04-mise-en-production-192-168.html#pré-requis","administration_manual/tutorials/04-mise-en-production-192-168.html#poste-de-build-machine-locale-avec-le-code-source","administration_manual/tutorials/04-mise-en-production-192-168.html#cible-your-server-ip","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-0--générer-envproduction-poste-de-build-une-seule-fois","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-1--préparer-la-cible--déplacer-sshd-système-sur-2022","administration_manual/tutorials/04-mise-en-production-192-168.html#1pre-diagnostic-de-létat-initial","administration_manual/tutorials/04-mise-en-production-192-168.html#1a-session-1--modifier-la-config-sshd","administration_manual/tutorials/04-mise-en-production-192-168.html#1b-session-2--valider-le-nouveau-port","administration_manual/tutorials/04-mise-en-production-192-168.html#1c-plus-tard-après-phase-5-fermer-le-port-22-du-sshd-système","administration_manual/tutorials/04-mise-en-production-192-168.html#1d-firewall","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-2--postgresql-docker-loopback","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-3--build--déploiement-gitrust-via-deploysh","administration_manual/tutorials/04-mise-en-production-192-168.html#3a-préparer-deploymentdeployconf","administration_manual/tutorials/04-mise-en-production-192-168.html#3b-validation-du-build-seul-optionnel","administration_manual/tutorials/04-mise-en-production-192-168.html#3c-déploiement","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-4--nginx-http--lets-encrypt","administration_manual/tutorials/04-mise-en-production-192-168.html#4a-installer-nginx--certbot","administration_manual/tutorials/04-mise-en-production-192-168.html#4b-déployer-la-conf-nginx","administration_manual/tutorials/04-mise-en-production-192-168.html#4c-émettre-le-certificat-lets-encrypt","administration_manual/tutorials/04-mise-en-production-192-168.html#4d-vérifier-le-renouvellement-automatique","administration_manual/tutorials/04-mise-en-production-192-168.html#4e-test-https","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-5--exposer-ssh-git-sur-22-via-nginx-stream","administration_manual/tutorials/04-mise-en-production-192-168.html#5a-ajouter-le-bloc-stream","administration_manual/tutorials/04-mise-en-production-192-168.html#5b-désactiver-sshd-système-sur-22-phase-1c","administration_manual/tutorials/04-mise-en-production-192-168.html#5c-test-clone-git","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-6--vérifications-globales","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-7--durcissement--fail2ban","administration_manual/tutorials/04-mise-en-production-192-168.html#7a-installation","administration_manual/tutorials/04-mise-en-production-192-168.html#7b-configuration-minimale-rapide","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-8--mise-à-jour-vers-un-nouveau-domaine-quand-dns-prêt","administration_manual/tutorials/04-mise-en-production-192-168.html#8a-ajouter-le-san-au-certificat-existant","administration_manual/tutorials/04-mise-en-production-192-168.html#8b-mettre-à-jour-la-conf-nginx","administration_manual/tutorials/04-mise-en-production-192-168.html#8c-mettre-à-jour-envproduction-et-redéployer","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-9--mises-à-jour-ultérieures","administration_manual/tutorials/04-mise-en-production-192-168.html#dépannage","administration_manual/tutorials/04-mise-en-production-192-168.html#récapitulatif-des-ports","administration_manual/how-to/index.html#guides-pratiques","administration_manual/how-to/index.html#todo","administration_manual/how-to/sauvegarder-restaurer.html#sauvegarder-et-restaurer","administration_manual/how-to/sauvegarder-restaurer.html#todo","administration_manual/how-to/mettre-a-jour.html#mettre-à-jour-gitrust","administration_manual/how-to/mettre-a-jour.html#todo","administration_manual/how-to/configurer-smtp.html#configurer-smtp","administration_manual/how-to/configurer-smtp.html#todo","administration_manual/how-to/configurer-oauth.html#configurer-oauth","administration_manual/how-to/configurer-oauth.html#todo","administration_manual/how-to/configurer-ci-runner-remote.html#configurer-le-runner-ci-distant","administration_manual/how-to/configurer-ci-runner-remote.html#1-rôle-du-script","administration_manual/how-to/configurer-ci-runner-remote.html#2-quand-lutiliser","administration_manual/how-to/configurer-ci-runner-remote.html#3-architecture-cible","administration_manual/how-to/configurer-ci-runner-remote.html#4-pré-requis","administration_manual/how-to/configurer-ci-runner-remote.html#sur-la-machine-dexécution-là-où-on-lance-le-script","administration_manual/how-to/configurer-ci-runner-remote.html#sur-le-runner-distant","administration_manual/how-to/configurer-ci-runner-remote.html#5-variables-denvironnement-attendues-le-env","administration_manual/how-to/configurer-ci-runner-remote.html#tableau-des-variables","administration_manual/how-to/configurer-ci-runner-remote.html#exemple-minimal-de-env-runner-dédié","administration_manual/how-to/configurer-ci-runner-remote.html#exemple-env-complet-coexistant-avec-config-gitrust","administration_manual/how-to/configurer-ci-runner-remote.html#cas--runner-local--pas-besoin-du-script","administration_manual/how-to/configurer-ci-runner-remote.html#6-usage","administration_manual/how-to/configurer-ci-runner-remote.html#depuis-la-racine-du-projet-par-défaut","administration_manual/how-to/configurer-ci-runner-remote.html#avec-un-env-explicite","administration_manual/how-to/configurer-ci-runner-remote.html#sortie-attendue","administration_manual/how-to/configurer-ci-runner-remote.html#7-ce-qui-se-retrouve-sur-le-runner","administration_manual/how-to/configurer-ci-runner-remote.html#8-vérifications-post-setup","administration_manual/how-to/configurer-ci-runner-remote.html#depuis-la-machine-gitrust","administration_manual/how-to/configurer-ci-runner-remote.html#pipeline-de-test-via-gitrust","administration_manual/how-to/configurer-ci-runner-remote.html#9-mise-à-jour-après-modification-du-ci-engine","administration_manual/how-to/configurer-ci-runner-remote.html#10-dépannage","administration_manual/how-to/configurer-ci-runner-remote.html#11-sécurité","administration_manual/how-to/integrer-dependency-track.html#intégrer-la-ci-et-dependency-track","administration_manual/how-to/integrer-dependency-track.html#1-architecture-générale","administration_manual/how-to/integrer-dependency-track.html#2-mettre-en-place-la-ci","administration_manual/how-to/integrer-dependency-track.html#21-pré-requis-serveur-de-build","administration_manual/how-to/integrer-dependency-track.html#22-configuration-gitrust-fichier-env","administration_manual/how-to/integrer-dependency-track.html#23-activer-la-ci-sur-un-dépôt","administration_manual/how-to/integrer-dependency-track.html#24-choisir-le-mode--easy-ou-power","administration_manual/how-to/integrer-dependency-track.html#25-suivi-dun-pipeline","administration_manual/how-to/integrer-dependency-track.html#3-mettre-en-place-le-dependency-tracker","administration_manual/how-to/integrer-dependency-track.html#31-installer-syft","administration_manual/how-to/integrer-dependency-track.html#32-déployer-dependency-track","administration_manual/how-to/integrer-dependency-track.html#33-créer-une-clé-api","administration_manual/how-to/integrer-dependency-track.html#34-configurer-gitrust","administration_manual/how-to/integrer-dependency-track.html#35-lire-les-résultats","administration_manual/how-to/integrer-dependency-track.html#4-débogage","administration_manual/how-to/integrer-dependency-track.html#problèmes-ci-courants","administration_manual/how-to/integrer-dependency-track.html#problèmes-sbom-courants","administration_manual/how-to/integrer-dependency-track.html#logs-utiles","administration_manual/how-to/integrer-dependency-track.html#5-checklist-récapitulative","administration_manual/how-to/durcir-avec-fail2ban.html#durcir-linstance-avec-fail2ban","administration_manual/how-to/durcir-avec-fail2ban.html#1-installation","administration_manual/how-to/durcir-avec-fail2ban.html#2-fichier-principal-etcfail2banjaillocal","administration_manual/how-to/durcir-avec-fail2ban.html#3-filtres-personnalisés","administration_manual/how-to/durcir-avec-fail2ban.html#31-gitrust-loginconf","administration_manual/how-to/durcir-avec-fail2ban.html#32-gitrust-api-abuseconf","administration_manual/how-to/durcir-avec-fail2ban.html#33-gitrust-sshconf","administration_manual/how-to/durcir-avec-fail2ban.html#34-gitrust-importconf","administration_manual/how-to/durcir-avec-fail2ban.html#35-dtrack-loginconf-si-dtrack-exposé","administration_manual/how-to/durcir-avec-fail2ban.html#36-dtrack-apiconf-si-dtrack-exposé","administration_manual/how-to/durcir-avec-fail2ban.html#37-postgresqlconf-créer-si-absent","administration_manual/how-to/durcir-avec-fail2ban.html#38-nginx-limit-reqconf-créer-si-absent-sur-votre-distro","administration_manual/how-to/durcir-avec-fail2ban.html#39-nginx-badbotsconf--obligatoire-pas-fourni-par-debianubuntu","administration_manual/how-to/durcir-avec-fail2ban.html#4-rate-limiting-côté-nginx-requis-par-nginx-limit-req","administration_manual/how-to/durcir-avec-fail2ban.html#41-déclarer-les-zones-globales","administration_manual/how-to/durcir-avec-fail2ban.html#42-ajouter-les-location-dans-etcnginxsites-availablegitrust","administration_manual/how-to/durcir-avec-fail2ban.html#43-reload","administration_manual/how-to/durcir-avec-fail2ban.html#5-démarrage-et-validation","administration_manual/how-to/durcir-avec-fail2ban.html#valider-chaque-filtre-custom","administration_manual/how-to/durcir-avec-fail2ban.html#test-de-bannissement","administration_manual/how-to/durcir-avec-fail2ban.html#6-monitoring","administration_manual/how-to/durcir-avec-fail2ban.html#7-matrice-récapitulative","administration_manual/how-to/durcir-avec-fail2ban.html#8-notes-spécifiques-à-la-stack-gitrust","administration_manual/how-to/durcir-avec-fail2ban.html#81-dagger-ci","administration_manual/how-to/durcir-avec-fail2ban.html#82-dependency-track","administration_manual/how-to/durcir-avec-fail2ban.html#83-postgresql","administration_manual/how-to/durcir-avec-fail2ban.html#84-notifications","administration_manual/how-to/durcir-avec-fail2ban.html#9-limites-et-évolutions","administration_manual/how-to/tuner-rate-limiting.html#régler-le-rate-limiting","administration_manual/how-to/tuner-rate-limiting.html#todo","administration_manual/how-to/forcer-2fa-globalement.html#forcer-le-2fa-sur-toute-linstance","administration_manual/how-to/forcer-2fa-globalement.html#todo","administration_manual/how-to/depanner-ssh.html#dépanner-ssh","administration_manual/how-to/depanner-ssh.html#todo","administration_manual/how-to/depanner-ci.html#dépanner-la-ci","administration_manual/how-to/depanner-ci.html#todo","administration_manual/how-to/gerer-utilisateurs-admin.html#gérer-les-utilisateurs-panel-admin","administration_manual/how-to/gerer-utilisateurs-admin.html#todo","administration_manual/how-to/auditer-instance.html#auditer-une-instance","administration_manual/how-to/auditer-instance.html#todo","administration_manual/reference/index.html#référence","administration_manual/reference/index.html#todo","administration_manual/reference/variables-environnement.html#variables-denvironnement","administration_manual/reference/variables-environnement.html#todo","administration_manual/reference/parametres-dynamiques.html#paramètres-dynamiques","administration_manual/reference/parametres-dynamiques.html#vue-densemble--deux-systèmes-distincts","administration_manual/reference/parametres-dynamiques.html#1-configuration-statique-env","administration_manual/reference/parametres-dynamiques.html#principe","administration_manual/reference/parametres-dynamiques.html#fichiers-de-référence","administration_manual/reference/parametres-dynamiques.html#structs-de-chargement","administration_manual/reference/parametres-dynamiques.html#comportement","administration_manual/reference/parametres-dynamiques.html#liste-des-variables-statiques-non-exhaustive","administration_manual/reference/parametres-dynamiques.html#2-configuration-dynamique-table-app_settings","administration_manual/reference/parametres-dynamiques.html#principe-1","administration_manual/reference/parametres-dynamiques.html#schéma-de-la-table","administration_manual/reference/parametres-dynamiques.html#initialisation-au-démarrage","administration_manual/reference/parametres-dynamiques.html#liste-des-réglages-dynamiques-et-leurs-valeurs-par-défaut","administration_manual/reference/parametres-dynamiques.html#3-cas-hybride--oauth","administration_manual/reference/parametres-dynamiques.html#4-précédence-et-comportement-au-redémarrage","administration_manual/reference/parametres-dynamiques.html#réglages-statiques-env-uniquement","administration_manual/reference/parametres-dynamiques.html#réglages-dynamiques-db-uniquement","administration_manual/reference/parametres-dynamiques.html#réglages-hybrides-oauth","administration_manual/reference/parametres-dynamiques.html#5-piège-principal--les-variables-env-fantômes","administration_manual/reference/parametres-dynamiques.html#6-diagramme-de-décision","administration_manual/reference/parametres-dynamiques.html#7-guide-pour-les-administrateurs","administration_manual/reference/parametres-dynamiques.html#modifier-un-réglage-dinfrastructure","administration_manual/reference/parametres-dynamiques.html#modifier-un-réglage-fonctionnel","administration_manual/reference/parametres-dynamiques.html#modifier-un-réglage-oauth","administration_manual/reference/parametres-dynamiques.html#vérifier-la-valeur-effective-dun-réglage","administration_manual/reference/parametres-dynamiques.html#8-guide-pour-les-développeurs","administration_manual/reference/parametres-dynamiques.html#ajouter-un-nouveau-réglage-dynamique","administration_manual/reference/parametres-dynamiques.html#ajouter-un-nouveau-réglage-statique","administration_manual/reference/parametres-dynamiques.html#ajouter-un-réglage-hybride-db--fallback-env","administration_manual/reference/schema-base-de-donnees.html#schéma-de-la-base-de-données","administration_manual/reference/schema-base-de-donnees.html#todo","administration_manual/reference/ports-et-services.html#ports-et-services","administration_manual/reference/ports-et-services.html#todo","administration_manual/reference/conformite-anssi-pa074.html#conformité-anssi-pa-074","administration_manual/reference/conformite-anssi-pa074.html#todo","administration_manual/explanation/index.html#explication","administration_manual/explanation/index.html#todo","administration_manual/explanation/architecture-globale.html#architecture-globale","administration_manual/explanation/architecture-globale.html#todo","administration_manual/explanation/modele-deploiement.html#modèle-de-déploiement","administration_manual/explanation/modele-deploiement.html#todo","administration_manual/explanation/ci-dagger.html#ci-dagger--easy-mode-vs-power-mode","administration_manual/explanation/ci-dagger.html#todo","administration_manual/explanation/strategie-sauvegarde.html#stratégie-de-sauvegarde","administration_manual/explanation/strategie-sauvegarde.html#todo","developer_manual/index.html#manuel-développeur","developer_manual/index.html#parcours-dapprentissage--contributeur-core","developer_manual/index.html#tutoriels--apprendre-en-faisant","developer_manual/index.html#how-to--recettes-pour-les-tâches-courantes","developer_manual/index.html#référence--informations-techniques-exactes","developer_manual/index.html#explication--comprendre-le-pourquoi","developer_manual/tutorials/index.html#tutoriels","developer_manual/tutorials/index.html#todo","developer_manual/tutorials/01-getting-started.html#premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit","developer_manual/tutorials/01-getting-started.html#objectifs","developer_manual/tutorials/01-getting-started.html#pré-requis","developer_manual/tutorials/01-getting-started.html#vue-densemble","developer_manual/tutorials/01-getting-started.html#étape-1--vérifiez-les-pré-requis-système","developer_manual/tutorials/01-getting-started.html#étape-2--clonez-le-projet","developer_manual/tutorials/01-getting-started.html#étape-3--configurez-lenvironnement-env","developer_manual/tutorials/01-getting-started.html#étape-4--préparez-la-base-de-données-postgresql","developer_manual/tutorials/01-getting-started.html#étape-5--compilez-les-assets-css","developer_manual/tutorials/01-getting-started.html#étape-6--lancez-lapplication","developer_manual/tutorials/01-getting-started.html#étape-7--créez-un-dépôt-et-poussez-votre-premier-commit","developer_manual/tutorials/01-getting-started.html#fonctionnalités-supplémentaires-disponibles","developer_manual/tutorials/01-getting-started.html#ci-intégrée-optionnelle","developer_manual/tutorials/01-getting-started.html#notifications","developer_manual/tutorials/01-getting-started.html#langue-de-linterface","developer_manual/tutorials/01-getting-started.html#récapitulatif","developer_manual/tutorials/01-getting-started.html#et-si-ça-ne-marche-pas","developer_manual/tutorials/01-getting-started.html#prochaine-étape","developer_manual/tutorials/02-premiere-contribution.html#02--première-contribution","developer_manual/tutorials/02-premiere-contribution.html#todo","developer_manual/tutorials/03-creer-un-worker-async.html#03--créer-un-worker-async-capstone","developer_manual/tutorials/03-creer-un-worker-async.html#todo","developer_manual/how-to/index.html#guides-pratiques","developer_manual/how-to/index.html#todo","developer_manual/how-to/contribuer-workflow-pr.html#workflow-de-contribution-et-pr","developer_manual/how-to/contribuer-workflow-pr.html#todo","developer_manual/how-to/lancer-tests-unitaires.html#lancer-les-tests-unitaires","developer_manual/how-to/lancer-tests-unitaires.html#infrastructure-existante","developer_manual/how-to/lancer-tests-unitaires.html#tests-unitaires-rust","developer_manual/how-to/lancer-tests-unitaires.html#tests-e2e-playwright","developer_manual/how-to/lancer-tests-unitaires.html#structure-des-répertoires","developer_manual/how-to/lancer-tests-unitaires.html#tests-à-ajouter","developer_manual/how-to/lancer-tests-unitaires.html#1-tests-fonctionnels-api-rest-intégration-rust","developer_manual/how-to/lancer-tests-unitaires.html#2-tests-fonctionnels-ci","developer_manual/how-to/lancer-tests-unitaires.html#3-tests-e2e-playwright-à-ajouter","developer_manual/how-to/lancer-tests-unitaires.html#4-tests-settings--comportement","developer_manual/how-to/lancer-tests-unitaires.html#commandes-de-test","developer_manual/how-to/lancer-tests-unitaires.html#ci-locale-exécuter-avant-un-push","developer_manual/how-to/lancer-tests-e2e.html#lancer-les-tests-end-to-end-e2e","developer_manual/how-to/lancer-tests-e2e.html#pré-requis","developer_manual/how-to/lancer-tests-e2e.html#commandes","developer_manual/how-to/lancer-tests-e2e.html#architecture","developer_manual/how-to/lancer-tests-e2e.html#isolation-de-lenvironnement-de-test","developer_manual/how-to/lancer-tests-e2e.html#fonctionnement","developer_manual/how-to/lancer-tests-e2e.html#fixtures","developer_manual/how-to/lancer-tests-e2e.html#liste-des-tests","developer_manual/how-to/lancer-tests-e2e.html#authspects--authentification","developer_manual/how-to/lancer-tests-e2e.html#repositoryspects--gestion-des-dépôts","developer_manual/how-to/lancer-tests-e2e.html#adminspects--administration","developer_manual/how-to/lancer-tests-e2e.html#navigationspects--navigation-et-ui","developer_manual/how-to/lancer-tests-e2e.html#ajouter-un-nouveau-test","developer_manual/how-to/ajouter-route-web.html#ajouter-une-route-web","developer_manual/how-to/ajouter-route-web.html#todo","developer_manual/how-to/ajouter-service-metier.html#ajouter-un-service-métier","developer_manual/how-to/ajouter-service-metier.html#todo","developer_manual/how-to/ajouter-migration-db.html#ajouter-une-migration-de-base-de-données","developer_manual/how-to/ajouter-migration-db.html#todo","developer_manual/how-to/implementer-webhooks.html#implémenter-des-webhooks","developer_manual/how-to/implementer-webhooks.html#todo","developer_manual/how-to/implementer-endpoint-api.html#implémenter-un-endpoint-api","developer_manual/how-to/implementer-endpoint-api.html#todo","developer_manual/how-to/importer-depot-externe-code.html#importer-un-dépôt-externe","developer_manual/how-to/importer-depot-externe-code.html#1-rôle-de-la-base-de-données","developer_manual/how-to/importer-depot-externe-code.html#pourquoi-persister-létat-","developer_manual/how-to/importer-depot-externe-code.html#2-schéma-du-flux-actuel","developer_manual/how-to/importer-depot-externe-code.html#3-coût-db-par-import","developer_manual/how-to/importer-depot-externe-code.html#4-pistes-doptimisation-sans-changer-libgit2","developer_manual/how-to/importer-depot-externe-code.html#41-éliminer-le-select-avant-update-dans-update_progress","developer_manual/how-to/importer-depot-externe-code.html#42-downsampler-la-progression-dans-le-worker-dédié","developer_manual/how-to/importer-depot-externe-code.html#43-supprimer-le-returning-implicite-de-seaorm","developer_manual/how-to/importer-depot-externe-code.html#44-pool-db-dédié-pour-le-worker","developer_manual/how-to/importer-depot-externe-code.html#45-debouncer-le-sse-côté-serveur","developer_manual/how-to/importer-depot-externe-code.html#5-optimisation-majeure--shell-out-vers-git-clone---bare","developer_manual/how-to/importer-depot-externe-code.html#6-priorités-recommandées","developer_manual/how-to/contribuer-a-rustwarden.html#contribuer-à-rustwarden","developer_manual/how-to/contribuer-a-rustwarden.html#services-framework-utilisés","developer_manual/how-to/contribuer-a-rustwarden.html#hook-on_user_deleted-implémenté","developer_manual/how-to/contribuer-a-rustwarden.html#règle-fondamentale","developer_manual/how-to/contribuer-a-rustwarden.html#aucun-contournement-en-cours","developer_manual/how-to/contribuer-a-rustwarden.html#ajouter-une-fonctionnalité-nécessitant-un-service-framework-absent","developer_manual/how-to/contribuer-a-rustwarden.html#pattern-dextension-via-hooks","developer_manual/how-to/passer-la-qa-avant-merge.html#passer-la-qa-avant-un-merge","developer_manual/how-to/passer-la-qa-avant-merge.html#todo","developer_manual/reference/index.html#référence","developer_manual/reference/index.html#todo","developer_manual/reference/architecture-crates.html#architecture-par-crates","developer_manual/reference/architecture-crates.html#dépendances-entre-crates","developer_manual/reference/architecture-crates.html#crates--responsabilités","developer_manual/reference/architecture-crates.html#gitrust-core","developer_manual/reference/architecture-crates.html#gitrust-git","developer_manual/reference/architecture-crates.html#gitrust-ssh","developer_manual/reference/architecture-crates.html#gitrust-web","developer_manual/reference/architecture-crates.html#gitrust-hooks","developer_manual/reference/architecture-crates.html#notifications","developer_manual/reference/architecture-crates.html#cicd--modes-et-composants","developer_manual/reference/architecture-crates.html#modes","developer_manual/reference/architecture-crates.html#architecture-ci","developer_manual/reference/architecture-crates.html#composants-externes-tous-optionnels-sauf-dagger","developer_manual/reference/architecture-crates.html#variables-et-secrets-ci","developer_manual/reference/architecture-crates.html#sécurité-anssi-pa-074","developer_manual/reference/services-api-interne.html#services-et-api-interne","developer_manual/reference/services-api-interne.html#todo","developer_manual/reference/schema-base-donnees.html#schéma-de-la-base-de-données","developer_manual/reference/schema-base-donnees.html#todo","developer_manual/reference/regles-qa-anssi.html#règles-qa--conformité-anssi","developer_manual/reference/regles-qa-anssi.html#1-gates-de-compilation-obligatoires","developer_manual/reference/regles-qa-anssi.html#gates-supplémentaires-à-mettre-en-place","developer_manual/reference/regles-qa-anssi.html#2-règles-de-sécurité-anssi-pa-074","developer_manual/reference/regles-qa-anssi.html#21-lints-rust-obligatoires-déjà-en-place","developer_manual/reference/regles-qa-anssi.html#22-checklist-sécurité-par-feature","developer_manual/reference/regles-qa-anssi.html#23-marqueurs-sec-","developer_manual/reference/regles-qa-anssi.html#3-tests-requis-par-catégorie","developer_manual/reference/regles-qa-anssi.html#31-matrice-de-couverture","developer_manual/reference/regles-qa-anssi.html#32-règles-de-tests","developer_manual/reference/regles-qa-anssi.html#4-règles-de-code","developer_manual/reference/regles-qa-anssi.html#41-framework-boundary","developer_manual/reference/regles-qa-anssi.html#42-assets","developer_manual/reference/regles-qa-anssi.html#43-gestion-derreurs","developer_manual/reference/regles-qa-anssi.html#44-validation-aux-frontières","developer_manual/reference/regles-qa-anssi.html#5-checklist-pré-merge","developer_manual/reference/api-rest-v1.html#api-rest-v1","developer_manual/reference/api-rest-v1.html#todo","developer_manual/reference/git-hooks-post-receive.html#hooks-git-post-receive","developer_manual/reference/git-hooks-post-receive.html#todo","developer_manual/reference/rustwarden-core-api.html#api-rustwarden-core","developer_manual/reference/rustwarden-core-api.html#todo","developer_manual/explanation/index.html#explication","developer_manual/explanation/index.html#todo","developer_manual/explanation/vue-ensemble-architecture.html#vue-densemble-de-larchitecture","developer_manual/explanation/vue-ensemble-architecture.html#vue-densemble","developer_manual/explanation/vue-ensemble-architecture.html#démarrage-de-lapplication","developer_manual/explanation/vue-ensemble-architecture.html#principes-de-conception","developer_manual/explanation/vue-ensemble-architecture.html#séparation-framework--métier-gitrust","developer_manual/explanation/vue-ensemble-architecture.html#mode-headless","developer_manual/explanation/vue-ensemble-architecture.html#ssr--htmx-zéro-cdn","developer_manual/explanation/vue-ensemble-architecture.html#bare-repos-sur-le-système-de-fichiers","developer_manual/explanation/vue-ensemble-architecture.html#ci-hybride--dagger-comme-abstraction-dexécution","developer_manual/explanation/vue-ensemble-architecture.html#pour-aller-plus-loin","developer_manual/explanation/flux-requetes.html#flux-de-requêtes","developer_manual/explanation/flux-requetes.html#1-création-dun-dépôt-web","developer_manual/explanation/flux-requetes.html#2-clone-ssh-git-clone","developer_manual/explanation/flux-requetes.html#3-push-ssh-git-push","developer_manual/explanation/flux-requetes.html#4-enregistrement-dune-clé-ssh","developer_manual/explanation/flux-requetes.html#5-résolution-des-permissions-accessservice","developer_manual/explanation/flux-requetes.html#6-navigation-dans-un-dépôt-web","developer_manual/explanation/flux-requetes.html#7-inscription-utilisateur--création-répertoire","developer_manual/explanation/modele-permissions-rbac.html#modèle-de-permissions-rbac","developer_manual/explanation/modele-permissions-rbac.html#todo","developer_manual/explanation/2fa-fonctionnement.html#fonctionnement-du-2fa","developer_manual/explanation/2fa-fonctionnement.html#todo","developer_manual/explanation/hierarchie-labels.html#hiérarchie-des-labels","developer_manual/explanation/hierarchie-labels.html#todo","developer_manual/explanation/ci-dagger-easy-vs-power.html#ci-dagger--easy-mode-vs-power-mode","developer_manual/explanation/ci-dagger-easy-vs-power.html#todo","developer_manual/explanation/decisions-ui-htmx.html#décisions-ui-htmx-daisyui","developer_manual/explanation/decisions-ui-htmx.html#todo","developer_manual/explanation/patron-worker-async.html#patron-worker-async","developer_manual/explanation/patron-worker-async.html#todo","template/index.html#bibliothèque-de-templates-gitrust","template/index.html#fichiers-denvironnement-env","template/index.html#stacks-docker-docker","template/index.html#reverse-proxy-reverse-proxy","template/index.html#systemd-systemd","template/index.html#configurations-ci-gitrust-ciyml-ci","template/index.html#scripts-de-sauvegarde-et-restauration-backup","template/index.html#clients-api-dexemple-api-clients","template/index.html#scripts-de-migration-migration","template/index.html#comment-utiliser-ces-templates-depuis-les-manuels"],"index":{"documentStore":{"docInfo":{"0":{"body":0,"breadcrumbs":2,"title":1},"1":{"body":77,"breadcrumbs":5,"title":4},"10":{"body":37,"breadcrumbs":6,"title":4},"100":{"body":16,"breadcrumbs":16,"title":9},"101":{"body":41,"breadcrumbs":10,"title":3},"102":{"body":108,"breadcrumbs":17,"title":10},"103":{"body":7,"breadcrumbs":17,"title":10},"104":{"body":103,"breadcrumbs":12,"title":5},"105":{"body":47,"breadcrumbs":14,"title":7},"106":{"body":25,"breadcrumbs":14,"title":7},"107":{"body":34,"breadcrumbs":20,"title":13},"108":{"body":72,"breadcrumbs":9,"title":2},"109":{"body":73,"breadcrumbs":12,"title":5},"11":{"body":29,"breadcrumbs":2,"title":1},"110":{"body":0,"breadcrumbs":14,"title":7},"111":{"body":14,"breadcrumbs":10,"title":3},"112":{"body":2,"breadcrumbs":13,"title":6},"113":{"body":62,"breadcrumbs":9,"title":2},"114":{"body":0,"breadcrumbs":13,"title":6},"115":{"body":26,"breadcrumbs":11,"title":4},"116":{"body":53,"breadcrumbs":12,"title":5},"117":{"body":16,"breadcrumbs":13,"title":6},"118":{"body":17,"breadcrumbs":12,"title":5},"119":{"body":19,"breadcrumbs":10,"title":3},"12":{"body":33,"breadcrumbs":2,"title":1},"120":{"body":0,"breadcrumbs":17,"title":10},"121":{"body":61,"breadcrumbs":12,"title":5},"122":{"body":38,"breadcrumbs":15,"title":8},"123":{"body":50,"breadcrumbs":11,"title":4},"124":{"body":78,"breadcrumbs":11,"title":4},"125":{"body":9,"breadcrumbs":11,"title":4},"126":{"body":16,"breadcrumbs":9,"title":2},"127":{"body":111,"breadcrumbs":11,"title":4},"128":{"body":0,"breadcrumbs":18,"title":11},"129":{"body":19,"breadcrumbs":14,"title":7},"13":{"body":0,"breadcrumbs":20,"title":14},"130":{"body":22,"breadcrumbs":13,"title":6},"131":{"body":11,"breadcrumbs":13,"title":6},"132":{"body":5,"breadcrumbs":12,"title":5},"133":{"body":147,"breadcrumbs":8,"title":1},"134":{"body":55,"breadcrumbs":10,"title":3},"135":{"body":29,"breadcrumbs":4,"title":2},"136":{"body":33,"breadcrumbs":3,"title":1},"137":{"body":29,"breadcrumbs":8,"title":3},"138":{"body":33,"breadcrumbs":6,"title":1},"139":{"body":29,"breadcrumbs":8,"title":3},"14":{"body":45,"breadcrumbs":7,"title":1},"140":{"body":33,"breadcrumbs":6,"title":1},"141":{"body":29,"breadcrumbs":6,"title":2},"142":{"body":33,"breadcrumbs":5,"title":1},"143":{"body":29,"breadcrumbs":6,"title":2},"144":{"body":33,"breadcrumbs":5,"title":1},"145":{"body":20,"breadcrumbs":12,"title":5},"146":{"body":89,"breadcrumbs":11,"title":4},"147":{"body":103,"breadcrumbs":10,"title":3},"148":{"body":73,"breadcrumbs":10,"title":3},"149":{"body":0,"breadcrumbs":10,"title":3},"15":{"body":41,"breadcrumbs":8,"title":2},"150":{"body":34,"breadcrumbs":16,"title":9},"151":{"body":58,"breadcrumbs":11,"title":4},"152":{"body":22,"breadcrumbs":13,"title":6},"153":{"body":77,"breadcrumbs":10,"title":3},"154":{"body":12,"breadcrumbs":13,"title":6},"155":{"body":25,"breadcrumbs":14,"title":7},"156":{"body":38,"breadcrumbs":14,"title":7},"157":{"body":0,"breadcrumbs":9,"title":2},"158":{"body":9,"breadcrumbs":14,"title":7},"159":{"body":15,"breadcrumbs":11,"title":4},"16":{"body":201,"breadcrumbs":8,"title":2},"160":{"body":99,"breadcrumbs":9,"title":2},"161":{"body":56,"breadcrumbs":15,"title":8},"162":{"body":0,"breadcrumbs":11,"title":4},"163":{"body":47,"breadcrumbs":11,"title":4},"164":{"body":35,"breadcrumbs":12,"title":5},"165":{"body":52,"breadcrumbs":15,"title":8},"166":{"body":185,"breadcrumbs":9,"title":2},"167":{"body":91,"breadcrumbs":9,"title":2},"168":{"body":53,"breadcrumbs":12,"title":6},"169":{"body":135,"breadcrumbs":9,"title":3},"17":{"body":79,"breadcrumbs":16,"title":10},"170":{"body":0,"breadcrumbs":12,"title":6},"171":{"body":98,"breadcrumbs":12,"title":6},"172":{"body":57,"breadcrumbs":11,"title":5},"173":{"body":42,"breadcrumbs":13,"title":7},"174":{"body":137,"breadcrumbs":13,"title":7},"175":{"body":66,"breadcrumbs":10,"title":4},"176":{"body":28,"breadcrumbs":13,"title":7},"177":{"body":60,"breadcrumbs":9,"title":3},"178":{"body":50,"breadcrumbs":10,"title":4},"179":{"body":28,"breadcrumbs":11,"title":5},"18":{"body":137,"breadcrumbs":15,"title":9},"180":{"body":90,"breadcrumbs":9,"title":3},"181":{"body":53,"breadcrumbs":10,"title":4},"182":{"body":0,"breadcrumbs":8,"title":2},"183":{"body":61,"breadcrumbs":9,"title":3},"184":{"body":54,"breadcrumbs":9,"title":3},"185":{"body":47,"breadcrumbs":8,"title":2},"186":{"body":77,"breadcrumbs":9,"title":3},"187":{"body":55,"breadcrumbs":9,"title":4},"188":{"body":27,"breadcrumbs":7,"title":2},"189":{"body":421,"breadcrumbs":9,"title":4},"19":{"body":155,"breadcrumbs":14,"title":8},"190":{"body":8,"breadcrumbs":8,"title":3},"191":{"body":23,"breadcrumbs":8,"title":3},"192":{"body":27,"breadcrumbs":9,"title":4},"193":{"body":47,"breadcrumbs":8,"title":3},"194":{"body":28,"breadcrumbs":8,"title":3},"195":{"body":24,"breadcrumbs":11,"title":6},"196":{"body":26,"breadcrumbs":11,"title":6},"197":{"body":21,"breadcrumbs":10,"title":5},"198":{"body":21,"breadcrumbs":15,"title":10},"199":{"body":148,"breadcrumbs":13,"title":8},"2":{"body":118,"breadcrumbs":5,"title":4},"20":{"body":128,"breadcrumbs":16,"title":10},"200":{"body":0,"breadcrumbs":15,"title":10},"201":{"body":23,"breadcrumbs":10,"title":5},"202":{"body":120,"breadcrumbs":12,"title":7},"203":{"body":7,"breadcrumbs":7,"title":2},"204":{"body":55,"breadcrumbs":9,"title":4},"205":{"body":73,"breadcrumbs":9,"title":4},"206":{"body":54,"breadcrumbs":8,"title":3},"207":{"body":51,"breadcrumbs":7,"title":2},"208":{"body":178,"breadcrumbs":8,"title":3},"209":{"body":0,"breadcrumbs":11,"title":6},"21":{"body":114,"breadcrumbs":13,"title":7},"210":{"body":25,"breadcrumbs":8,"title":3},"211":{"body":52,"breadcrumbs":8,"title":3},"212":{"body":23,"breadcrumbs":7,"title":2},"213":{"body":36,"breadcrumbs":7,"title":2},"214":{"body":97,"breadcrumbs":9,"title":4},"215":{"body":29,"breadcrumbs":10,"title":4},"216":{"body":33,"breadcrumbs":7,"title":1},"217":{"body":29,"breadcrumbs":14,"title":6},"218":{"body":33,"breadcrumbs":9,"title":1},"219":{"body":29,"breadcrumbs":6,"title":2},"22":{"body":54,"breadcrumbs":7,"title":1},"220":{"body":33,"breadcrumbs":5,"title":1},"221":{"body":29,"breadcrumbs":8,"title":3},"222":{"body":33,"breadcrumbs":6,"title":1},"223":{"body":29,"breadcrumbs":12,"title":5},"224":{"body":33,"breadcrumbs":8,"title":1},"225":{"body":29,"breadcrumbs":8,"title":3},"226":{"body":33,"breadcrumbs":6,"title":1},"227":{"body":29,"breadcrumbs":2,"title":1},"228":{"body":33,"breadcrumbs":2,"title":1},"229":{"body":29,"breadcrumbs":5,"title":2},"23":{"body":165,"breadcrumbs":11,"title":5},"230":{"body":33,"breadcrumbs":4,"title":1},"231":{"body":21,"breadcrumbs":5,"title":2},"232":{"body":47,"breadcrumbs":8,"title":5},"233":{"body":0,"breadcrumbs":7,"title":4},"234":{"body":27,"breadcrumbs":4,"title":1},"235":{"body":21,"breadcrumbs":6,"title":3},"236":{"body":24,"breadcrumbs":6,"title":3},"237":{"body":30,"breadcrumbs":4,"title":1},"238":{"body":39,"breadcrumbs":9,"title":6},"239":{"body":0,"breadcrumbs":8,"title":5},"24":{"body":24,"breadcrumbs":8,"title":2},"240":{"body":28,"breadcrumbs":4,"title":1},"241":{"body":26,"breadcrumbs":7,"title":4},"242":{"body":51,"breadcrumbs":6,"title":3},"243":{"body":162,"breadcrumbs":12,"title":9},"244":{"body":95,"breadcrumbs":7,"title":4},"245":{"body":0,"breadcrumbs":9,"title":6},"246":{"body":9,"breadcrumbs":7,"title":4},"247":{"body":22,"breadcrumbs":7,"title":4},"248":{"body":28,"breadcrumbs":6,"title":3},"249":{"body":120,"breadcrumbs":10,"title":7},"25":{"body":29,"breadcrumbs":13,"title":6},"250":{"body":35,"breadcrumbs":7,"title":4},"251":{"body":0,"breadcrumbs":8,"title":5},"252":{"body":21,"breadcrumbs":7,"title":4},"253":{"body":20,"breadcrumbs":7,"title":4},"254":{"body":24,"breadcrumbs":7,"title":4},"255":{"body":26,"breadcrumbs":9,"title":6},"256":{"body":0,"breadcrumbs":8,"title":5},"257":{"body":46,"breadcrumbs":8,"title":5},"258":{"body":27,"breadcrumbs":8,"title":5},"259":{"body":18,"breadcrumbs":10,"title":7},"26":{"body":33,"breadcrumbs":8,"title":1},"260":{"body":29,"breadcrumbs":13,"title":6},"261":{"body":33,"breadcrumbs":8,"title":1},"262":{"body":29,"breadcrumbs":7,"title":3},"263":{"body":33,"breadcrumbs":5,"title":1},"264":{"body":29,"breadcrumbs":9,"title":4},"265":{"body":33,"breadcrumbs":6,"title":1},"266":{"body":29,"breadcrumbs":2,"title":1},"267":{"body":33,"breadcrumbs":2,"title":1},"268":{"body":29,"breadcrumbs":5,"title":2},"269":{"body":33,"breadcrumbs":4,"title":1},"27":{"body":29,"breadcrumbs":13,"title":6},"270":{"body":29,"breadcrumbs":7,"title":3},"271":{"body":33,"breadcrumbs":5,"title":1},"272":{"body":29,"breadcrumbs":15,"title":7},"273":{"body":33,"breadcrumbs":9,"title":1},"274":{"body":29,"breadcrumbs":7,"title":3},"275":{"body":33,"breadcrumbs":5,"title":1},"276":{"body":68,"breadcrumbs":4,"title":2},"277":{"body":124,"breadcrumbs":6,"title":4},"278":{"body":48,"breadcrumbs":6,"title":4},"279":{"body":71,"breadcrumbs":7,"title":5},"28":{"body":33,"breadcrumbs":8,"title":1},"280":{"body":58,"breadcrumbs":6,"title":4},"281":{"body":63,"breadcrumbs":6,"title":4},"282":{"body":29,"breadcrumbs":2,"title":1},"283":{"body":33,"breadcrumbs":2,"title":1},"284":{"body":25,"breadcrumbs":18,"title":11},"285":{"body":48,"breadcrumbs":8,"title":1},"286":{"body":54,"breadcrumbs":9,"title":2},"287":{"body":191,"breadcrumbs":9,"title":2},"288":{"body":111,"breadcrumbs":14,"title":7},"289":{"body":54,"breadcrumbs":12,"title":5},"29":{"body":29,"breadcrumbs":11,"title":5},"290":{"body":128,"breadcrumbs":12,"title":5},"291":{"body":119,"breadcrumbs":15,"title":8},"292":{"body":81,"breadcrumbs":13,"title":6},"293":{"body":164,"breadcrumbs":11,"title":4},"294":{"body":147,"breadcrumbs":17,"title":10},"295":{"body":0,"breadcrumbs":10,"title":3},"296":{"body":65,"breadcrumbs":10,"title":3},"297":{"body":14,"breadcrumbs":8,"title":1},"298":{"body":19,"breadcrumbs":10,"title":3},"299":{"body":47,"breadcrumbs":8,"title":1},"3":{"body":84,"breadcrumbs":7,"title":6},"30":{"body":33,"breadcrumbs":7,"title":1},"300":{"body":98,"breadcrumbs":12,"title":5},"301":{"body":28,"breadcrumbs":9,"title":2},"302":{"body":29,"breadcrumbs":7,"title":3},"303":{"body":33,"breadcrumbs":5,"title":1},"304":{"body":29,"breadcrumbs":13,"title":6},"305":{"body":33,"breadcrumbs":8,"title":1},"306":{"body":29,"breadcrumbs":4,"title":2},"307":{"body":33,"breadcrumbs":3,"title":1},"308":{"body":29,"breadcrumbs":12,"title":5},"309":{"body":33,"breadcrumbs":8,"title":1},"31":{"body":29,"breadcrumbs":4,"title":2},"310":{"body":11,"breadcrumbs":10,"title":4},"311":{"body":0,"breadcrumbs":8,"title":2},"312":{"body":32,"breadcrumbs":9,"title":3},"313":{"body":61,"breadcrumbs":9,"title":3},"314":{"body":55,"breadcrumbs":9,"title":3},"315":{"body":0,"breadcrumbs":8,"title":2},"316":{"body":89,"breadcrumbs":13,"title":7},"317":{"body":110,"breadcrumbs":10,"title":4},"318":{"body":97,"breadcrumbs":11,"title":5},"319":{"body":60,"breadcrumbs":10,"title":4},"32":{"body":33,"breadcrumbs":3,"title":1},"320":{"body":51,"breadcrumbs":9,"title":3},"321":{"body":20,"breadcrumbs":12,"title":6},"322":{"body":29,"breadcrumbs":12,"title":6},"323":{"body":28,"breadcrumbs":8,"title":2},"324":{"body":48,"breadcrumbs":7,"title":1},"325":{"body":63,"breadcrumbs":7,"title":1},"326":{"body":30,"breadcrumbs":11,"title":5},"327":{"body":79,"breadcrumbs":7,"title":1},"328":{"body":34,"breadcrumbs":7,"title":1},"329":{"body":0,"breadcrumbs":9,"title":3},"33":{"body":29,"breadcrumbs":10,"title":4},"330":{"body":114,"breadcrumbs":8,"title":2},"331":{"body":84,"breadcrumbs":10,"title":4},"332":{"body":76,"breadcrumbs":8,"title":2},"333":{"body":79,"breadcrumbs":10,"title":4},"334":{"body":34,"breadcrumbs":10,"title":4},"335":{"body":29,"breadcrumbs":10,"title":4},"336":{"body":33,"breadcrumbs":7,"title":1},"337":{"body":29,"breadcrumbs":10,"title":4},"338":{"body":33,"breadcrumbs":7,"title":1},"339":{"body":29,"breadcrumbs":16,"title":7},"34":{"body":33,"breadcrumbs":7,"title":1},"340":{"body":33,"breadcrumbs":10,"title":1},"341":{"body":29,"breadcrumbs":8,"title":3},"342":{"body":33,"breadcrumbs":6,"title":1},"343":{"body":29,"breadcrumbs":10,"title":4},"344":{"body":33,"breadcrumbs":7,"title":1},"345":{"body":22,"breadcrumbs":11,"title":4},"346":{"body":77,"breadcrumbs":14,"title":7},"347":{"body":81,"breadcrumbs":10,"title":3},"348":{"body":194,"breadcrumbs":12,"title":5},"349":{"body":88,"breadcrumbs":12,"title":5},"35":{"body":29,"breadcrumbs":12,"title":5},"350":{"body":0,"breadcrumbs":13,"title":6},"351":{"body":82,"breadcrumbs":15,"title":8},"352":{"body":81,"breadcrumbs":15,"title":8},"353":{"body":29,"breadcrumbs":14,"title":7},"354":{"body":32,"breadcrumbs":14,"title":7},"355":{"body":46,"breadcrumbs":13,"title":6},"356":{"body":129,"breadcrumbs":16,"title":9},"357":{"body":83,"breadcrumbs":10,"title":3},"358":{"body":24,"breadcrumbs":7,"title":2},"359":{"body":48,"breadcrumbs":8,"title":3},"36":{"body":33,"breadcrumbs":8,"title":1},"360":{"body":22,"breadcrumbs":8,"title":3},"361":{"body":41,"breadcrumbs":7,"title":2},"362":{"body":24,"breadcrumbs":9,"title":4},"363":{"body":66,"breadcrumbs":13,"title":8},"364":{"body":58,"breadcrumbs":9,"title":4},"365":{"body":29,"breadcrumbs":14,"title":6},"366":{"body":33,"breadcrumbs":9,"title":1},"367":{"body":29,"breadcrumbs":2,"title":1},"368":{"body":33,"breadcrumbs":2,"title":1},"369":{"body":11,"breadcrumbs":7,"title":3},"37":{"body":29,"breadcrumbs":12,"title":5},"370":{"body":74,"breadcrumbs":7,"title":3},"371":{"body":0,"breadcrumbs":6,"title":2},"372":{"body":84,"breadcrumbs":6,"title":2},"373":{"body":85,"breadcrumbs":6,"title":2},"374":{"body":36,"breadcrumbs":6,"title":2},"375":{"body":272,"breadcrumbs":6,"title":2},"376":{"body":58,"breadcrumbs":6,"title":2},"377":{"body":59,"breadcrumbs":5,"title":1},"378":{"body":8,"breadcrumbs":8,"title":4},"379":{"body":45,"breadcrumbs":5,"title":1},"38":{"body":33,"breadcrumbs":8,"title":1},"380":{"body":83,"breadcrumbs":6,"title":2},"381":{"body":38,"breadcrumbs":10,"title":6},"382":{"body":42,"breadcrumbs":8,"title":4},"383":{"body":52,"breadcrumbs":8,"title":4},"384":{"body":29,"breadcrumbs":9,"title":4},"385":{"body":33,"breadcrumbs":6,"title":1},"386":{"body":29,"breadcrumbs":13,"title":6},"387":{"body":33,"breadcrumbs":8,"title":1},"388":{"body":23,"breadcrumbs":10,"title":4},"389":{"body":44,"breadcrumbs":11,"title":5},"39":{"body":29,"breadcrumbs":14,"title":6},"390":{"body":38,"breadcrumbs":11,"title":5},"391":{"body":0,"breadcrumbs":13,"title":7},"392":{"body":17,"breadcrumbs":13,"title":7},"393":{"body":111,"breadcrumbs":11,"title":5},"394":{"body":59,"breadcrumbs":9,"title":3},"395":{"body":0,"breadcrumbs":11,"title":5},"396":{"body":57,"breadcrumbs":10,"title":4},"397":{"body":74,"breadcrumbs":10,"title":4},"398":{"body":0,"breadcrumbs":10,"title":4},"399":{"body":27,"breadcrumbs":9,"title":3},"4":{"body":31,"breadcrumbs":5,"title":4},"40":{"body":33,"breadcrumbs":9,"title":1},"400":{"body":16,"breadcrumbs":8,"title":2},"401":{"body":22,"breadcrumbs":9,"title":3},"402":{"body":24,"breadcrumbs":10,"title":4},"403":{"body":56,"breadcrumbs":10,"title":4},"404":{"body":29,"breadcrumbs":7,"title":3},"405":{"body":33,"breadcrumbs":5,"title":1},"406":{"body":29,"breadcrumbs":9,"title":4},"407":{"body":33,"breadcrumbs":6,"title":1},"408":{"body":29,"breadcrumbs":7,"title":3},"409":{"body":33,"breadcrumbs":5,"title":1},"41":{"body":29,"breadcrumbs":10,"title":4},"410":{"body":29,"breadcrumbs":2,"title":1},"411":{"body":33,"breadcrumbs":2,"title":1},"412":{"body":28,"breadcrumbs":9,"title":4},"413":{"body":149,"breadcrumbs":7,"title":2},"414":{"body":163,"breadcrumbs":8,"title":3},"415":{"body":0,"breadcrumbs":8,"title":3},"416":{"body":81,"breadcrumbs":9,"title":4},"417":{"body":38,"breadcrumbs":7,"title":2},"418":{"body":45,"breadcrumbs":9,"title":4},"419":{"body":49,"breadcrumbs":12,"title":7},"42":{"body":33,"breadcrumbs":7,"title":1},"420":{"body":49,"breadcrumbs":11,"title":6},"421":{"body":29,"breadcrumbs":9,"title":4},"422":{"body":27,"breadcrumbs":7,"title":3},"423":{"body":113,"breadcrumbs":9,"title":5},"424":{"body":171,"breadcrumbs":9,"title":5},"425":{"body":127,"breadcrumbs":9,"title":5},"426":{"body":90,"breadcrumbs":9,"title":5},"427":{"body":81,"breadcrumbs":9,"title":5},"428":{"body":118,"breadcrumbs":10,"title":6},"429":{"body":64,"breadcrumbs":9,"title":5},"43":{"body":29,"breadcrumbs":16,"title":7},"430":{"body":29,"breadcrumbs":9,"title":4},"431":{"body":33,"breadcrumbs":6,"title":1},"432":{"body":29,"breadcrumbs":7,"title":3},"433":{"body":33,"breadcrumbs":5,"title":1},"434":{"body":29,"breadcrumbs":7,"title":3},"435":{"body":33,"breadcrumbs":5,"title":1},"436":{"body":29,"breadcrumbs":15,"title":7},"437":{"body":33,"breadcrumbs":9,"title":1},"438":{"body":29,"breadcrumbs":9,"title":4},"439":{"body":33,"breadcrumbs":6,"title":1},"44":{"body":33,"breadcrumbs":10,"title":1},"440":{"body":29,"breadcrumbs":7,"title":3},"441":{"body":33,"breadcrumbs":5,"title":1},"442":{"body":71,"breadcrumbs":7,"title":4},"443":{"body":61,"breadcrumbs":6,"title":3},"444":{"body":55,"breadcrumbs":6,"title":3},"445":{"body":47,"breadcrumbs":7,"title":4},"446":{"body":27,"breadcrumbs":5,"title":2},"447":{"body":78,"breadcrumbs":8,"title":5},"448":{"body":27,"breadcrumbs":9,"title":6},"449":{"body":68,"breadcrumbs":8,"title":5},"45":{"body":29,"breadcrumbs":14,"title":6},"450":{"body":30,"breadcrumbs":7,"title":4},"451":{"body":54,"breadcrumbs":10,"title":7},"46":{"body":33,"breadcrumbs":9,"title":1},"47":{"body":29,"breadcrumbs":10,"title":4},"48":{"body":33,"breadcrumbs":7,"title":1},"49":{"body":29,"breadcrumbs":12,"title":5},"5":{"body":55,"breadcrumbs":4,"title":2},"50":{"body":33,"breadcrumbs":8,"title":1},"51":{"body":29,"breadcrumbs":2,"title":1},"52":{"body":33,"breadcrumbs":2,"title":1},"53":{"body":29,"breadcrumbs":11,"title":5},"54":{"body":33,"breadcrumbs":7,"title":1},"55":{"body":29,"breadcrumbs":7,"title":3},"56":{"body":33,"breadcrumbs":5,"title":1},"57":{"body":29,"breadcrumbs":11,"title":5},"58":{"body":33,"breadcrumbs":7,"title":1},"59":{"body":29,"breadcrumbs":9,"title":4},"6":{"body":155,"breadcrumbs":4,"title":2},"60":{"body":33,"breadcrumbs":6,"title":1},"61":{"body":29,"breadcrumbs":3,"title":1},"62":{"body":33,"breadcrumbs":3,"title":1},"63":{"body":29,"breadcrumbs":2,"title":1},"64":{"body":33,"breadcrumbs":2,"title":1},"65":{"body":29,"breadcrumbs":11,"title":5},"66":{"body":33,"breadcrumbs":7,"title":1},"67":{"body":29,"breadcrumbs":7,"title":3},"68":{"body":33,"breadcrumbs":5,"title":1},"69":{"body":29,"breadcrumbs":13,"title":6},"7":{"body":53,"breadcrumbs":6,"title":4},"70":{"body":33,"breadcrumbs":8,"title":1},"71":{"body":54,"breadcrumbs":4,"title":2},"72":{"body":131,"breadcrumbs":4,"title":2},"73":{"body":51,"breadcrumbs":6,"title":4},"74":{"body":62,"breadcrumbs":7,"title":5},"75":{"body":41,"breadcrumbs":6,"title":4},"76":{"body":50,"breadcrumbs":6,"title":4},"77":{"body":29,"breadcrumbs":2,"title":1},"78":{"body":33,"breadcrumbs":2,"title":1},"79":{"body":0,"breadcrumbs":15,"title":10},"8":{"body":79,"breadcrumbs":7,"title":5},"80":{"body":41,"breadcrumbs":6,"title":1},"81":{"body":53,"breadcrumbs":7,"title":2},"82":{"body":184,"breadcrumbs":7,"title":2},"83":{"body":157,"breadcrumbs":17,"title":12},"84":{"body":298,"breadcrumbs":12,"title":7},"85":{"body":236,"breadcrumbs":14,"title":9},"86":{"body":148,"breadcrumbs":12,"title":7},"87":{"body":50,"breadcrumbs":6,"title":1},"88":{"body":175,"breadcrumbs":10,"title":5},"89":{"body":41,"breadcrumbs":7,"title":2},"9":{"body":45,"breadcrumbs":6,"title":4},"90":{"body":29,"breadcrumbs":9,"title":4},"91":{"body":33,"breadcrumbs":6,"title":1},"92":{"body":29,"breadcrumbs":7,"title":3},"93":{"body":33,"breadcrumbs":5,"title":1},"94":{"body":0,"breadcrumbs":18,"title":11},"95":{"body":77,"breadcrumbs":8,"title":1},"96":{"body":46,"breadcrumbs":11,"title":4},"97":{"body":46,"breadcrumbs":9,"title":2},"98":{"body":38,"breadcrumbs":11,"title":4},"99":{"body":0,"breadcrumbs":9,"title":2}},"docs":{"0":{"body":"","breadcrumbs":"Introduction » Introduction","id":"0","title":"Introduction"},"1":{"body":"gitrust est une forge Git self-hosted écrite en Rust, conçue pour les équipes de 3 à 20 personnes qui souhaitent maîtriser leur infrastructure de développement. Elle offre un serveur HTTP ( :4000) et SSH ( :2222), une CI intégrée via Dagger, la génération de SBOM avec Syft et l’intégration Dependency-Track, une gestion fine des permissions (4 rôles), la double authentification, des labels hiérarchiques et une conformité ANSSI PA-074. Une instance publique de démonstration est accessible sur demo.gitrust.eu.","breadcrumbs":"Introduction » Qu’est-ce que gitrust ?","id":"1","title":"Qu’est-ce que gitrust ?"},"10":{"body":"Les explanations t’aident à construire des modèles mentaux durables. Lis-les quand tu veux comprendre pourquoi gitrust fonctionne ainsi, pas seulement comment. Modèle de collaboration gitrust Sécurité utilisateur : 2FA, PAT, audit log Cycle de vie d’une pull request","breadcrumbs":"Vue d\'ensemble » Explication — comprendre le pourquoi","id":"10","title":"Explication — comprendre le pourquoi"},"100":{"body":"rustup show && command -v rsync envsubst npx\\n# Installer si besoin : sudo apt install rsync gettext-base","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Poste de build (machine locale avec le code source)","id":"100","title":"Poste de build (machine locale avec le code source)"},"101":{"body":"Debian/Ubuntu récent Accès SSH avec sudo Docker + plugin compose ( docker compose version) Snap ou apt pour certbot + plugin nginx DNS <your-domain> → IP publique de la patte externe (vérifier dig +short <your-domain>) Module stream Nginx disponible (paquet libnginx-mod-stream sur Debian)","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Cible <your-server-ip>","id":"101","title":"Cible <your-server-ip>"},"102":{"body":"JWT=$(openssl rand -hex 64)\\nADMIN_PWD=$(openssl rand -base64 24)\\nPG_PWD=$(openssl rand -base64 24) cat > .env.production <<EOF\\n# ---- Base de données ----\\nDATABASE_URL=postgres://gitrust:${PG_PWD}@127.0.0.1:5432/gitrust # ---- Serveur HTTP (derrière Nginx HTTPS) ----\\nSERVER_HOST=127.0.0.1\\nSERVER_PORT=4000 # ---- Serveur SSH (derrière nginx stream :22) ----\\nSSH_PORT=2222\\nSSH_LISTEN_ADDR=127.0.0.1\\nSSH_PUBLIC_HOST=<your-domain>\\nSSH_HOST_KEY_PATH=/opt/gitrust/data/ssh_host_ed25519_key # ---- Chemins (réécrits par deploy.sh) ----\\nGIT_REPOS_BASE_PATH=/opt/gitrust/data/repos\\nSTATIC_FILES_PATH=/opt/gitrust/static # ---- Sécurité — HTTPS actif ----\\nJWT_SECRET=${JWT}\\nJWT_EXPIRATION_MINUTES=15\\nREFRESH_TOKEN_EXPIRATION_DAYS=7\\nCOOKIE_SECURE=true # HTTPS via Nginx\\nCOOKIE_SAME_SITE=Lax\\nAPP_DEBUG=false\\nRUST_LOG=info # ---- Admin initial ----\\nADMIN_USERNAME=admin\\nADMIN_EMAIL=<acme-email>\\nADMIN_PASSWORD=${ADMIN_PWD} # ---- Inscription & UI ----\\nALLOW_REGISTRATION=false\\nAPP_NAME=Gitrust\\nDEFAULT_LOCALE=fr # ---- Email ----\\nEMAIL_VALIDATION_REQUIRED=false\\nEMAIL_BASE_URL=https://<your-domain> # ---- CI/CD Dagger (worker 3) ----\\nCI_ENABLED=true\\nCI_MAX_CONCURRENT=4\\nCI_DEFAULT_TIMEOUT=3600\\nCI_WORKSPACE_PATH=/tmp/gitrust-ci\\nCI_REMOTE_HOST=localhost # ---- Worker import ----\\nIMPORT_MAX_CONCURRENT=2\\nIMPORT_TIMEOUT_SECS=1800\\nDB_WORKER_POOL_SIZE=4\\nEOF chmod 600 .env.production\\necho \\"ADMIN_PASSWORD = ${ADMIN_PWD}\\"\\necho \\"POSTGRES_PASSWORD = ${PG_PWD}\\" Critique : noter ADMIN_PASSWORD et POSTGRES_PASSWORD dans un gestionnaire de mots de passe.","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 0 — Générer .env.production (poste de build, une seule fois)","id":"102","title":"Phase 0 — Générer .env.production (poste de build, une seule fois)"},"103":{"body":"À faire en gardant deux sessions SSH simultanées.","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 1 — Préparer la cible : déplacer sshd système sur :2022","id":"103","title":"Phase 1 — Préparer la cible : déplacer sshd système sur :2022"},"104":{"body":"1.pre.1 — Trouver le port SSH ouvert depuis le poste de build # Depuis votre poste (sans être connecté) :\\nfor p in 22 2022 2222 2200 22022; do timeout 3 bash -c \\"echo >/dev/tcp/<your-server-ip>/$p\\" 2>/dev/null \\\\ && echo \\"Port $p : OUVERT\\" \\\\ || echo \\"Port $p : fermé/filtré\\"\\ndone 1.pre.2 — Se connecter sur le port détecté # Cas le plus probable : sshd est sur :22 par défaut\\nssh <admin-user>@<your-server-ip> 1.pre.3 — Une fois connecté, vérifier l’état sshd actuel # Sur quel(s) port(s) sshd écoute-t-il ?\\nsudo ss -tlnp | grep sshd # Contenu de la config\\nsudo grep -riE \'^[[:space:]]*Port[[:space:]]+[0-9]+\' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2>/dev/null # Statut du service\\nsudo systemctl status ssh --no-pager","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 1.pre. Diagnostic de l’état initial","id":"104","title":"1.pre. Diagnostic de l’état initial"},"105":{"body":"ssh <admin-user>@<your-server-ip> # Éditer /etc/ssh/sshd_config\\nsudo tee /etc/ssh/sshd_config.d/99-gitrust.conf <<\'EOF\'\\nPort 2022\\nEOF # Vérifier la syntaxe\\nsudo sshd -t # Si OK, reload (ne déconnecte pas la session courante)\\nsudo systemctl reload ssh\\nsudo ss -tlnp | grep -E \':22\\\\b|:2022\\\\b\'\\n# Attendu : sshd écoute sur 22 ET 2022","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 1a. Session 1 : modifier la config sshd","id":"105","title":"1a. Session 1 : modifier la config sshd"},"106":{"body":"Depuis le poste de build, dans un autre terminal : ssh -p 2022 <admin-user>@<your-server-ip> \'echo \\"OK port 2022\\"\'\\n# Doit afficher : OK port 2022","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 1b. Session 2 : valider le nouveau port","id":"106","title":"1b. Session 2 : valider le nouveau port"},"107":{"body":"Une fois nginx stream :22 actif et testé : ssh -p 2022 <admin-user>@<your-server-ip>\\nsudo sed -i \'s/^Port 22$/# Port 22 (déplacé vers 2022, :22 utilisé par nginx stream)/\' /etc/ssh/sshd_config\\nsudo systemctl restart ssh","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 1c. (Plus tard, après Phase 5) Fermer le port 22 du sshd système","id":"107","title":"1c. (Plus tard, après Phase 5) Fermer le port 22 du sshd système"},"108":{"body":"ssh -p 2022 <admin-user>@<your-server-ip> bash <<\'EOF\'\\nsudo ufw allow 80/tcp comment \'HTTP ACME + redirect\'\\nsudo ufw allow 443/tcp comment \'HTTPS Gitrust\'\\nsudo ufw allow 22/tcp comment \'SSH Git via nginx stream\'\\nsudo ufw allow 2022/tcp comment \'SSH admin système\'\\nsudo ufw status numbered\\nEOF Mettre à jour ~/.ssh/config côté poste dev : Host gitrust-host HostName <your-server-ip> User <admin-user> Port 2022 Le reste du plan utilise ssh gitrust-host.","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 1d. Firewall","id":"108","title":"1d. Firewall"},"109":{"body":"scp -P 2022 database/docker-compose.yml <admin-user>@<your-server-ip>:/tmp/pg-compose.yml ssh gitrust-host bash <<EOF\\nsudo mkdir -p /opt/gitrust/database\\nsudo mv /tmp/pg-compose.yml /opt/gitrust/database/docker-compose.yml\\necho \'POSTGRES_PASSWORD=${PG_PWD}\' | sudo tee /opt/gitrust/database/.env >/dev/null\\nsudo chmod 600 /opt/gitrust/database/.env\\ncd /opt/gitrust/database && sudo docker compose up -d\\nsudo docker compose ps\\nEOF Remplacer ${PG_PWD} par la valeur réelle. Vérifier que le port n’est pas exposé publiquement : ssh gitrust-host \'sudo ss -tlnp | grep 5432\'\\n# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 2 — PostgreSQL (Docker, loopback)","id":"109","title":"Phase 2 — PostgreSQL (Docker, loopback)"},"11":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » Tutoriels","id":"11","title":"Tutoriels"},"110":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 3 — Build + déploiement gitrust via deploy.sh","id":"110","title":"Phase 3 — Build + déploiement gitrust via deploy.sh"},"111":{"body":"cp deployment/deploy.conf.example deployment/deploy.conf\\n# Éditer DEPLOY_TARGET=gitrust-host, DEPLOY_REMOTE_PATH=/opt/gitrust, DEPLOY_FQDN_INITIAL=<your-domain>\\n$EDITOR deployment/deploy.conf\\nchmod 600 deployment/deploy.conf","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 3a. Préparer deployment/deploy.conf","id":"111","title":"3a. Préparer deployment/deploy.conf"},"112":{"body":"BUILD_ONLY=1 ./deployment/deploy.sh","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 3b. Validation du build seul (optionnel)","id":"112","title":"3b. Validation du build seul (optionnel)"},"113":{"body":"# Sans argument : utilise DEPLOY_TARGET du deploy.conf (gitrust-host via ~/.ssh/config, port 2022)\\n./deployment/deploy.sh Ce que fait deploy.sh : cargo build --release, tailwindcss --minify, adapte gitrust.service + .env, rsync, crée user gitrust, installe systemd, restart. À la fin : gitrust écoute sur 127.0.0.1:4000 (HTTP) et 127.0.0.1:2222 (SSH). ssh gitrust-host \'sudo systemctl status gitrust --no-pager && sudo ss -tlnp | grep -E \\"4000|2222\\"\'\\n# Attendu : 127.0.0.1:4000 et 127.0.0.1:2222 (PAS 0.0.0.0)","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 3c. Déploiement","id":"113","title":"3c. Déploiement"},"114":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 4 — Nginx HTTP + Let’s Encrypt","id":"114","title":"Phase 4 — Nginx HTTP + Let’s Encrypt"},"115":{"body":"ssh gitrust-host bash <<\'EOF\'\\nsudo apt update\\nsudo apt install -y nginx libnginx-mod-stream certbot python3-certbot-nginx\\nsudo systemctl enable --now nginx\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 4a. Installer nginx + certbot","id":"115","title":"4a. Installer nginx + certbot"},"116":{"body":"scp -P 2022 deployment/nginx-gitrust.conf <admin-user>@<your-server-ip>:/tmp/gitrust-nginx.conf ssh gitrust-host bash <<EOF\\nsudo sed -i \'s/gitrust.nuage.ebii/<your-domain>/g\' /tmp/gitrust-nginx.conf\\nsudo mv /tmp/gitrust-nginx.conf /etc/nginx/sites-available/gitrust\\nsudo ln -sf /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust\\nsudo rm -f /etc/nginx/sites-enabled/default\\nsudo mkdir -p /var/www/html/.well-known/acme-challenge\\nsudo nginx -t && sudo systemctl reload nginx\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 4b. Déployer la conf Nginx","id":"116","title":"4b. Déployer la conf Nginx"},"117":{"body":"ssh gitrust-host \'sudo certbot --nginx \\\\ -d <your-domain> \\\\ --email <acme-email> \\\\ --agree-tos \\\\ --no-eff-email \\\\ --redirect\'","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 4c. Émettre le certificat Let’s Encrypt","id":"117","title":"4c. Émettre le certificat Let’s Encrypt"},"118":{"body":"ssh gitrust-host \'sudo systemctl list-timers | grep certbot\'\\nssh gitrust-host \'sudo certbot renew --dry-run\'","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 4d. Vérifier le renouvellement automatique","id":"118","title":"4d. Vérifier le renouvellement automatique"},"119":{"body":"curl -I https://<your-domain>/\\n# Attendu : HTTP/2 200 (ou 302 vers /login) # Vérifier HSTS\\ncurl -sI https://<your-domain>/ | grep -i strict-transport","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 4e. Test HTTPS","id":"119","title":"4e. Test HTTPS"},"12":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » TODO","id":"12","title":"TODO"},"120":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 5 — Exposer SSH Git sur :22 via Nginx stream","id":"120","title":"Phase 5 — Exposer SSH Git sur :22 via Nginx stream"},"121":{"body":"ssh gitrust-host bash <<\'EOF\'\\nsudo nginx -V 2>&1 | grep -o with-stream sudo tee -a /etc/nginx/nginx.conf <<\'NGINX\' # --- Gitrust SSH (proxy :22 -> :2222) -----------------------------------------\\nstream { upstream gitrust_ssh { server 127.0.0.1:2222; } server { listen 22; listen [::]:22; proxy_pass gitrust_ssh; proxy_timeout 1h; proxy_connect_timeout 30s; error_log /var/log/nginx/gitrust-ssh.log; }\\n}\\nNGINX sudo nginx -t && sudo systemctl restart nginx\\nsudo ss -tlnp | grep -E \':22\\\\b|:2222\\\\b\'\\n# Attendu : nginx :22, gitrust :2222 (loopback)\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 5a. Ajouter le bloc stream","id":"121","title":"5a. Ajouter le bloc stream"},"122":{"body":"ssh -p 2022 <admin-user>@<your-server-ip> bash <<\'EOF\'\\nsudo sed -i \'s/^Port 22$/# Port 22 déplacé/\' /etc/ssh/sshd_config 2>/dev/null || true\\nsudo systemctl restart ssh\\nsudo ss -tlnp | grep -E \':22\\\\b|:2022\\\\b\'\\n# Attendu : nginx :22, sshd :2022 — plus de sshd:22\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 5b. Désactiver sshd système sur :22 (Phase 1c)","id":"122","title":"5b. Désactiver sshd système sur :22 (Phase 1c)"},"123":{"body":"# Dans l\'UI gitrust : Settings -> SSH keys -> coller ~/.ssh/id_ed25519.pub\\n# Créer un repo test admin/test-deploy via UI git clone git@<your-domain>:admin/test-deploy.git /tmp/test-deploy\\ncd /tmp/test-deploy\\necho \\"# test\\" > README.md\\ngit -c user.email=<acme-email> -c user.name=admin add . && \\\\ git -c user.email=<acme-email> -c user.name=admin commit -m \\"test deploy\\" && \\\\ git push origin main","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 5c. Test clone Git","id":"123","title":"5c. Test clone Git"},"124":{"body":"# Service systemd\\nssh gitrust-host \'sudo systemctl status gitrust --no-pager\' # Logs (recherche d\'erreurs)\\nssh gitrust-host \'sudo journalctl -u gitrust -n 100 --no-pager | grep -iE \\"error|warn|fail\\"\' # Ports d\'écoute (vue d\'ensemble)\\nssh gitrust-host \'sudo ss -tlnp\'\\n# Attendu :\\n# :22 nginx\\n# :80 nginx\\n# :443 nginx\\n# :2022 sshd système\\n# 127.0.0.1:2222 gitrust\\n# 127.0.0.1:4000 gitrust\\n# 127.0.0.1:5432 docker-proxy # Renouvellement TLS automatique\\nssh gitrust-host \'sudo systemctl status certbot.timer --no-pager\' # Test E2E\\ncurl -I https://<your-domain>/login\\nssh -T git@<your-domain> || true # Banner SSH russh attendu","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 6 — Vérifications globales","id":"124","title":"Phase 6 — Vérifications globales"},"125":{"body":"Voir administration_manual/how-to/durcir-avec-fail2ban.md pour la configuration complète.","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 7 — Durcissement : Fail2ban","id":"125","title":"Phase 7 — Durcissement : Fail2ban"},"126":{"body":"ssh gitrust-host bash <<\'EOF\'\\nsudo apt install -y fail2ban\\nsudo systemctl enable --now fail2ban\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 7a. Installation","id":"126","title":"7a. Installation"},"127":{"body":"ssh gitrust-host sudo tee /etc/fail2ban/jail.local <<\'EOF\'\\n[DEFAULT]\\nbackend = systemd\\nbantime = 1h\\nfindtime = 10m\\nmaxretry = 5\\nignoreip = 127.0.0.1/8 ::1\\nbanaction = ufw\\nbanaction_allports = ufw [sshd]\\nenabled = true\\nport = 2022\\nfilter = sshd\\nbackend = %(sshd_backend)s\\nlogpath = %(sshd_log)s\\nmaxretry = 3 [nginx-http-auth]\\nenabled = true\\nport = http,https\\nfilter = nginx-http-auth\\nlogpath = /var/log/nginx/gitrust.error.log [gitrust-login]\\nenabled = true\\nport = http,https\\nfilter = gitrust-login\\nlogpath = /var/log/nginx/gitrust.access.log\\nmaxretry = 5 [gitrust-ssh]\\nenabled = true\\nport = 22,2222\\nfilter = gitrust-ssh\\nbackend = systemd\\njournalmatch = _SYSTEMD_UNIT=gitrust.service\\nmaxretry = 5 [recidive]\\nenabled = true\\nlogpath = /var/log/fail2ban.log\\nbanaction = %(banaction_allports)s\\nbantime = 1w\\nfindtime = 1d\\nmaxretry = 3\\nEOF Créer les filtres gitrust-login et gitrust-ssh, puis : ssh gitrust-host \'sudo systemctl restart fail2ban && sudo fail2ban-client status\'","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 7b. Configuration minimale rapide","id":"127","title":"7b. Configuration minimale rapide"},"128":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 8 — Mise à jour vers un nouveau domaine (quand DNS prêt)","id":"128","title":"Phase 8 — Mise à jour vers un nouveau domaine (quand DNS prêt)"},"129":{"body":"ssh gitrust-host \'sudo certbot --nginx --expand \\\\ -d <your-domain> \\\\ -d <new-domain> \\\\ --email <acme-email> \\\\ --agree-tos --no-eff-email\'","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 8a. Ajouter le SAN au certificat existant","id":"129","title":"8a. Ajouter le SAN au certificat existant"},"13":{"body":"","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Premiers pas : active la 2FA, ajoute ta clé SSH et crée ton premier dépôt","id":"13","title":"Premiers pas : active la 2FA, ajoute ta clé SSH et crée ton premier dépôt"},"130":{"body":"ssh gitrust-host bash <<EOF\\nsudo sed -i \'s/server_name <your-domain>;/server_name <your-domain> <new-domain>;/g\' /etc/nginx/sites-available/gitrust\\nsudo nginx -t && sudo systemctl reload nginx\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 8b. Mettre à jour la conf Nginx","id":"130","title":"8b. Mettre à jour la conf Nginx"},"131":{"body":"sed -i \'s|SSH_PUBLIC_HOST=.*|SSH_PUBLIC_HOST=<new-domain>|\' .env.production\\nsed -i \'s|EMAIL_BASE_URL=.*|EMAIL_BASE_URL=https://<new-domain>|\' .env.production\\n./deployment/deploy.sh gitrust-host","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 8c. Mettre à jour .env.production et redéployer","id":"131","title":"8c. Mettre à jour .env.production et redéployer"},"132":{"body":"git pull\\nSKIP_ENV=1 SKIP_DB=1 ./deployment/deploy.sh","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 9 — Mises à jour ultérieures","id":"132","title":"Phase 9 — Mises à jour ultérieures"},"133":{"body":"Symptôme Diagnostic Fix Lockout SSH après reload sshd — Console physique / KVM IPMI Cert Let’s Encrypt échoue ( Connection refused) dig +short <your-domain> ≠ IP publique Corriger DNS, ou vérifier que :80 traverse bien le NAT Cert échoue ( unauthorized) Nginx :80 ne répond pas sur /.well-known/acme-challenge/ curl http://<your-domain>/.well-known/acme-challenge/test doit ne pas rediriger en 301 Login boucle sur /login malgré HTTPS grep COOKIE_SECURE /opt/gitrust/.env Doit être true ; vérifier que Nginx forward bien X-Forwarded-Proto https Push SSH Connection closed journalctl -u gitrust | grep ssh Vérifier que gitrust écoute bien 127.0.0.1:2222 et que nginx stream forward nginx -t : unknown directive \\"stream\\" Module non chargé sudo apt install libnginx-mod-stream puis systemctl restart nginx Mixed content HTTPS Templates qui hardcodent http:// Vérifier EMAIL_BASE_URL=https://... et headers X-Forwarded-Proto Push gros repo timeout Logs nginx client intended to send too large body Augmenter client_max_body_size 2G (déjà fait pour .git/)","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Dépannage","id":"133","title":"Dépannage"},"134":{"body":"Port Process Exposition Rôle 22 nginx (stream) Public SSH Git → forward vers :2222 80 nginx Public ACME challenge + redirect HTTPS 443 nginx Public HTTPS → forward vers :4000 2022 sshd système Public Admin SSH (à restreindre par firewall si possible) 2222 gitrust Loopback Backend SSH russh 4000 gitrust Loopback Backend HTTP axum 5432 docker-proxy Loopback PostgreSQL","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Récapitulatif des ports","id":"134","title":"Récapitulatif des ports"},"135":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Guides pratiques","id":"135","title":"Guides pratiques"},"136":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » TODO","id":"136","title":"TODO"},"137":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Sauvegarder et restaurer » Sauvegarder et restaurer","id":"137","title":"Sauvegarder et restaurer"},"138":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Sauvegarder et restaurer » TODO","id":"138","title":"TODO"},"139":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Mettre à jour gitrust » Mettre à jour gitrust","id":"139","title":"Mettre à jour gitrust"},"14":{"body":"À la fin de ce tutoriel, tu sauras : O1. Activer l’authentification à deux facteurs (2FA) sur ton compte gitrust O2. Enregistrer une clé SSH publique dans ton profil pour te connecter sans mot de passe O3. Créer un dépôt vide et vérifier qu’il est accessible à l’URL attendue","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Objectifs","id":"14","title":"Objectifs"},"140":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Mettre à jour gitrust » TODO","id":"140","title":"TODO"},"141":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Configurer SMTP » Configurer SMTP","id":"141","title":"Configurer SMTP"},"142":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Configurer SMTP » TODO","id":"142","title":"TODO"},"143":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Configurer OAuth » Configurer OAuth","id":"143","title":"Configurer OAuth"},"144":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Configurer OAuth » TODO","id":"144","title":"TODO"},"145":{"body":"Guide d’usage du script qui provisionne une machine distante pour exécuter les pipelines CI/CD de gitrust via SSH + rsync + Dagger.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Configurer le runner CI distant","id":"145","title":"Configurer le runner CI distant"},"146":{"body":"deployment/setup-remote-ci.sh (disponible dans le dépôt source gitrust) prépare un serveur de build distant utilisé par le worker CI de gitrust. Il automatise 6 étapes : Vérifie la connectivité SSH vers le runner Installe Docker ( curl https://get.docker.com | sh) s’il est absent Installe Dagger CLI ( curl https://dl.dagger.io/dagger/install.sh | sh) s’il est absent Crée le répertoire de travail distant ( CI_REMOTE_PATH) Synchronise le module deployment/ci-engine/ (mode CI Easy) via rsync -az --delete Smoke test : affiche docker --version et dagger version Le script est idempotent : rejoue sans dommage, skip ce qui existe déjà.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 1. Rôle du script","id":"146","title":"1. Rôle du script"},"147":{"body":"Scénario Besoin de setup-remote-ci.sh ? Dev local, CI sur la même machine que gitrust ( CI_REMOTE_HOST=localhost) Non — Docker et Dagger déjà installés localement, le ci-engine/ est lu depuis deployment/ci-engine/ directement Prod on-premise, un seul serveur (gitrust + CI colocalisés) Non — idem, un simple curl get.docker.com | sh suffit sur le serveur gitrust Prod avec runner CI dédié (machine séparée) OUI — c’est le cas cible de ce script Prod avec plusieurs instances gitrust partageant un runner OUI — le runner est provisionné une fois, chaque instance pointe dessus CI dans Kubernetes / Nomad / runner managé cloud Non — ce script est pensé pour une VM Debian/Ubuntu classique","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 2. Quand l’utiliser","id":"147","title":"2. Quand l’utiliser"},"148":{"body":"+---------------------+ SSH + rsync +-----------------------+\\n| Gitrust (web+SSH) |---------------------------| CI Runner (distant) |\\n| <your-server-ip> | CI_REMOTE_HOST/USER/KEY | <ci-runner-ip> |\\n| | | |\\n| Worker CI Tokio | push .gitrust-ci.yml | /opt/gitrust-ci/ |\\n| (dans gitrust.bin) | + code source checkout | ├── ci-engine/ |\\n| | | └── workspaces/ |\\n| | dagger call ... | |\\n| | | Docker + Dagger CLI |\\n+---------------------+ +-----------------------+ Le worker CI de gitrust (tâche Tokio dans le binaire principal) ne fait pas tourner Docker localement — il délègue au runner via SSH. Cela permet d’isoler les workloads CPU/RAM gourmands (builds Rust, Node, Docker) du process web de gitrust.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 3. Architecture cible","id":"148","title":"3. Architecture cible"},"149":{"body":"","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 4. Pré-requis","id":"149","title":"4. Pré-requis"},"15":{"body":"Technique : un compte gitrust existant (e-mail + mot de passe), Git installé ( git --version répond), une paire de clés SSH générée ou à générer ( ssh-keygen) Pédagogique : aucun tutoriel préalable requis — c’est le point de départ du parcours Temps estimé : ~20 minutes","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Pré-requis","id":"15","title":"Pré-requis"},"150":{"body":"Outil Rôle bash ≥ 4 Interpréteur ssh, rsync Transport et synchro ssh-agent chargé ou CI_REMOTE_SSH_KEY défini Auth SSH sans mot de passe interactif ( BatchMode=yes) Fichier .env avec les variables CI_REMOTE_* Config (voir section 5)","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Sur la machine d’exécution (là où on lance le script)","id":"150","title":"Sur la machine d’exécution (là où on lance le script)"},"151":{"body":"Pré-requis Pourquoi OS Linux récent (Debian 12+, Ubuntu 22.04+) Docker install script compatible User avec sudo passwordless ou droits docker get.docker.com fait sudo en interne Clé SSH publique du user local dans ~/.ssh/authorized_keys Auth SSH non-interactive Réseau sortant autorisé vers get.docker.com et dl.dagger.io Installation des binaires Au minimum ~5 Go libres dans CI_REMOTE_PATH Images Docker + workspaces","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Sur le runner distant","id":"151","title":"Sur le runner distant"},"152":{"body":"Le script source un fichier .env dont le chemin est passé en argument, ou par défaut ../.env (relatif au script, donc <racine_projet>/.env).","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 5. Variables d’environnement attendues (le .env)","id":"152","title":"5. Variables d’environnement attendues (le .env)"},"153":{"body":"Variable Obligatoire Défaut Description CI_REMOTE_HOST OUI — Hostname ou IP du runner (ex: ci-runner.internal) CI_REMOTE_USER non $(whoami) (user courant) Compte SSH sur le runner CI_REMOTE_SSH_PORT non 22 Port SSH du runner CI_REMOTE_PATH non /opt/gitrust-ci Répertoire de travail distant (créé par le script) CI_REMOTE_SSH_KEY non — (ssh-agent) Chemin d’une clé privée SSH spécifique Ces variables sont les mêmes que celles lues par gitrust au runtime. Centraliser dans .env évite les divergences entre le provisionnement et le runtime.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Tableau des variables","id":"153","title":"Tableau des variables"},"154":{"body":"# --- CI runner distant ---\\nCI_REMOTE_HOST=<ci-runner-ip>\\nCI_REMOTE_USER=ci-runner\\nCI_REMOTE_SSH_PORT=22\\nCI_REMOTE_PATH=/opt/gitrust-ci\\nCI_REMOTE_SSH_KEY=/home/gitrust/.ssh/ci_runner_ed25519","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Exemple minimal de .env (runner dédié)","id":"154","title":"Exemple minimal de .env (runner dédié)"},"155":{"body":"DATABASE_URL=postgres://...\\nJWT_SECRET=...\\n# ... (voir .env.example pour le reste) # --- CI/CD (lu par gitrust ET par setup-remote-ci.sh) ---\\nCI_ENABLED=true\\nCI_MAX_CONCURRENT=4\\nCI_REMOTE_HOST=ci-runner.internal\\nCI_REMOTE_USER=ci-runner\\nCI_REMOTE_PATH=/opt/gitrust-ci\\nCI_REMOTE_SSH_KEY=/opt/gitrust/data/ci_runner_key","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Exemple .env complet coexistant avec config gitrust","id":"155","title":"Exemple .env complet coexistant avec config gitrust"},"156":{"body":"CI_REMOTE_HOST=localhost\\n# Les autres CI_REMOTE_* sont ignorés Dans ce cas, installer Docker et Dagger directement sur la machine gitrust, copier deployment/ci-engine/ vers CI_ENGINE_PATH (défaut /opt/gitrust/ci-engine) et passer à la suite. Ne pas exécuter setup-remote-ci.sh avec CI_REMOTE_HOST=localhost.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Cas « runner local » (pas besoin du script)","id":"156","title":"Cas « runner local » (pas besoin du script)"},"157":{"body":"","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 6. Usage","id":"157","title":"6. Usage"},"158":{"body":"cd /chemin/vers/gitrust # .env a la racine (défaut) :\\n./deployment/setup-remote-ci.sh","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Depuis la racine du projet (par défaut)","id":"158","title":"Depuis la racine du projet (par défaut)"},"159":{"body":"./deployment/setup-remote-ci.sh /chemin/vers/mon.env\\n# Utile si vous avez .env.production, .env.staging, etc.\\n./deployment/setup-remote-ci.sh .env.production","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Avec un .env explicite","id":"159","title":"Avec un .env explicite"},"16":{"body":"Avant de taper la première commande, prenons 2 minutes pour comprendre ce que tu vas faire et pourquoi. Un dépôt ( repository), c’est comme un dossier de projet avec tout l’historique de ses modifications — une boîte d’archives vivante que Git surveille. Sur gitrust, ce dossier vit sur le serveur et peut être partagé avec ton équipe. Une clé SSH fonctionne comme une serrure et une clé : tu gardes la clé privée sur ta machine (ne la partage jamais), et tu déposes la clé publique dans ton profil gitrust. Ensuite, Git se connecte automatiquement sans te redemander de mot de passe — gitrust reconnaît ta machine. La 2FA (authentification à deux facteurs) ajoute un second verrou à ton compte : même si quelqu’un vole ton mot de passe, il ne peut pas se connecter sans le code de ton téléphone. C’est une protection essentielle pour tout compte qui héberge du code. Voici le flux que tu vas configurer : sequenceDiagram participant T as Ton navigateur participant G as gitrust (HTTPS :4000) participant S as Ton terminal (SSH :2222) T->>G: Connexion avec e-mail + mdp + code 2FA T->>G: Dépôt de la clé SSH publique S->>G: git push via SSH (authentifié par clé) G-->>T: Dépôt visible dans l\'interface web","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Vue d’ensemble","id":"16","title":"Vue d’ensemble"},"160":{"body":"==> Configuration : Serveur : ci-runner@<ci-runner-ip> Port SSH : 22 Chemin : /opt/gitrust-ci ==> [1/6] Vérification de la connectivité SSH...\\nSSH OK OK\\n==> [2/6] Vérification de Docker... Docker déjà installé\\n==> [3/6] Vérification de Dagger CLI... Installation de Dagger CLI... Dagger installé\\n==> [4/6] Création du répertoire distant... /opt/gitrust-ci créé\\n==> [5/6] Synchronisation du ci-engine...\\nsending incremental file list\\nci-engine/\\nci-engine/profiles/\\n... ci-engine synchronisé vers /opt/gitrust-ci/ci-engine/\\n==> [6/6] Smoke test... Versions distantes :\\nDocker version 28.0.1, build abcd123\\ndagger v0.19.2 (linux/amd64) ==> Setup terminé. Le serveur ci-runner@<ci-runner-ip> est prêt pour l\'exécution CI. Pensez à configurer CI_EXECUTION_MODE=remote dans votre .env","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Sortie attendue","id":"160","title":"Sortie attendue"},"161":{"body":"Après exécution réussie : /opt/gitrust-ci/ <- CI_REMOTE_PATH\\n└── ci-engine/ <- synchronisé depuis deployment/ci-engine/ ├── README.md └── profiles/ <- templates par stack (Python, Node, Rust, ...) Plus, installés globalement : /usr/bin/docker (ou équivalent) + socket /var/run/docker.sock /usr/local/bin/dagger Les workspaces de pipelines (checkouts temporaires) sont créés par le worker CI de gitrust au moment de l’exécution sous CI_WORKSPACE_PATH (défaut /tmp/gitrust-ci) — pas par ce script.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 7. Ce qui se retrouve sur le runner","id":"161","title":"7. Ce qui se retrouve sur le runner"},"162":{"body":"","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 8. Vérifications post-setup","id":"162","title":"8. Vérifications post-setup"},"163":{"body":"# Source le .env\\nset -a; source .env.production; set +a # 1. SSH direct (doit passer sans prompt)\\nssh -p ${CI_REMOTE_SSH_PORT:-22} \\\\ ${CI_REMOTE_SSH_KEY:+-i $CI_REMOTE_SSH_KEY} \\\\ $CI_REMOTE_USER@$CI_REMOTE_HOST \'docker info && dagger version\' # 2. Rsync round-trip (lecture/écriture sur CI_REMOTE_PATH)\\necho \\"test\\" | ssh $CI_REMOTE_USER@$CI_REMOTE_HOST \\\\ \\"cat > $CI_REMOTE_PATH/.gitrust-test && cat $CI_REMOTE_PATH/.gitrust-test && rm $CI_REMOTE_PATH/.gitrust-test\\"\\n# Attendu : \\"test\\"","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Depuis la machine gitrust","id":"163","title":"Depuis la machine gitrust"},"164":{"body":"Pousser un dépôt avec un .gitrust-ci.yml minimal : # .gitrust-ci.yml\\nversion: 1\\npipeline: - name: smoke image: alpine:3 run: echo \\"CI runner OK\\" Puis dans l’UI gitrust : onglet Pipelines → la pipeline doit passer au statut success.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Pipeline de test via gitrust","id":"164","title":"Pipeline de test via gitrust"},"165":{"body":"Le ci-engine/ synchronisé n’est pas « live-linké » : rejouer le script après modification côté source. # Modifier deployment/ci-engine/profiles/*.py ou similaire\\n./deployment/setup-remote-ci.sh\\n# Les étapes 2-3 sont skip (déjà installés), seule l\'étape 5 refait le rsync rsync -az --delete supprime les fichiers côté runner qui n’existent plus localement — garantit la cohérence.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 9. Mise à jour après modification du ci-engine/","id":"165","title":"9. Mise à jour après modification du ci-engine/"},"166":{"body":"Symptôme Cause probable Fix ERREUR: fichier .env introuvable .env absent ou chemin incorrect cp .env.example .env && $EDITOR .env ou passer le chemin : ./setup-remote-ci.sh /path/to/.env ERREUR: CI_REMOTE_HOST non défini Variable commentée ou absente Décommenter CI_REMOTE_HOST=... dans le .env ERREUR: impossible de se connecter SSH bloqué, mauvais user, clé non autorisée Tester manuellement : ssh -v -p X user@host ; vérifier ~/.ssh/authorized_keys sur le runner Permission denied (publickey) BatchMode=yes interdit les prompts, clé non chargée ssh-add ~/.ssh/ci_runner_ed25519 ou définir CI_REMOTE_SSH_KEY=/path/to/key sudo: a password is required pendant l’install Docker User sans NOPASSWD sudo Ajouter le user au sudoers : ci-runner ALL=(ALL) NOPASSWD:ALL (runner uniquement) curl: (7) Failed to connect to get.docker.com Réseau sortant du runner bloqué Whitelist get.docker.com et dl.dagger.io, ou pré-installer Docker + Dagger manuellement ATTENTION: ... ci-engine introuvable Lancé hors du repo gitrust cd dans la racine du projet avant de lancer Pipeline reste queued indéfiniment Worker CI ne trouve pas le runner Vérifier CI_EXECUTION_MODE=remote dans .env gitrust + logs : journalctl -u gitrust | grep -i \'ci|dagger\' dagger: command not found au smoke test $PATH du user SSH ne contient pas /usr/local/bin echo \'export PATH=$PATH:/usr/local/bin\' >> ~/.bashrc sur le runner, ou CI_DAGGER_BIN=/usr/local/bin/dagger côté gitrust","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 10. Dépannage","id":"166","title":"10. Dépannage"},"167":{"body":"Le runner CI exécute du code arbitraire venant des dépôts hébergés. Ne jamais le colocaliser avec des secrets sensibles (PG prod, clés de prod). Isoler réseau : bloquer l’accès sortant du runner vers le LAN privé (seul l’accès Internet pour docker pull est nécessaire). Limiter sudo NOPASSWD au strict minimum sur le runner (idéalement : juste pour les commandes docker et apt). Rotation régulière de la clé SSH CI_REMOTE_SSH_KEY. La révoquer dans ~/.ssh/authorized_keys côté runner en cas de suspicion. Le runner ne doit pas pouvoir se connecter en SSH à la machine gitrust (unidirectionnel).","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 11. Sécurité","id":"167","title":"11. Sécurité"},"168":{"body":"Ce document explique comment activer et configurer les deux fonctionnalités de qualité/sécurité de gitrust : La CI intégrée (Dagger) qui exécute les builds/tests/lints à chaque push. Le dependency tracker (Syft + Dependency-Track) qui scanne les composants du code à chaque push et détecte les vulnérabilités connues. Ces deux systèmes sont indépendants : on peut activer l’un sans l’autre.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » Intégrer la CI et Dependency-Track","id":"168","title":"Intégrer la CI et Dependency-Track"},"169":{"body":"flowchart TB subgraph Client Dev[Développeur] end subgraph Gitrust[Instance Gitrust] HTTP[:4000 HTTP/Git] SSH[:2222 SSH/Git] Worker[CiWorker<br/>tokio task] Sbom[SbomService<br/>tokio spawn] DB[(PostgreSQL)] end subgraph Builder[Serveur de build] Docker[Docker/Podman] Dagger[Dagger CLI] CiEngine[/opt/gitrust-ci/ci-engine/] end subgraph Security[Stack sécurité optionnelle] Syft[syft] Dtrack[Dependency-Track] end Dev -->|git push| HTTP Dev -->|git push| SSH HTTP --> Worker SSH --> Worker HTTP --> Sbom SSH --> Sbom Worker -->|SSH + rsync| Builder Builder -->|logs streamés| Worker Worker --> DB Sbom -->|scan workspace| Syft Sbom -->|PUT BOM| Dtrack Dtrack -->|findings| Sbom Sbom --> DB Trois composants fonctionnent en parallèle : CiWorker : tâche Tokio qui consomme des CiTask depuis un channel mpsc, limitée par un Semaphore à CI_MAX_CONCURRENT pipelines simultanés. SbomService : exécuté dans un tokio::spawn après chaque push, totalement découplé du CI. Serveur de build : machine distante (ou localhost) qui exécute Docker + Dagger. Gitrust y envoie le workspace par rsync et lance Dagger par SSH.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 1. Architecture générale","id":"169","title":"1. Architecture générale"},"17":{"body":"Ouvre ton navigateur et va sur l’URL de ton instance gitrust (par exemple https://demo.gitrust.eu). Connecte-toi avec ton e-mail et ton mot de passe. Une fois connecté, clique sur ton avatar en haut à droite, puis sur Paramètres ( /settings). Dans le menu de gauche, sélectionne Sécurité. Checkpoint : tu dois voir la page Sécurité avec une section « Authentification à deux facteurs » et le statut « Désactivée ». Si tu ne la vois pas, vérifie que tu es bien connecté avec le bon compte.","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Étape 1 : Connecte-toi et accède aux paramètres de sécurité","id":"17","title":"Étape 1 : Connecte-toi et accède aux paramètres de sécurité"},"170":{"body":"","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2. Mettre en place la CI","id":"170","title":"2. Mettre en place la CI"},"171":{"body":"Le serveur de build peut être la même machine que Gitrust ( CI_REMOTE_HOST=localhost) ou une machine dédiée. Il doit disposer de : Outil Rôle Docker ou Podman Containers Dagger Dagger CLI Moteur d’exécution SSH (accès sortant depuis Gitrust) Transport rsync Copie du workspace git, tar Extraction du tree du commit Installation automatique recommandée : # Depuis la machine Gitrust (l\'utilisateur doit pouvoir SSH vers le builder)\\n./deployment/setup-remote-ci.sh .env Le script exécute : Vérification de la connectivité SSH Installation de Docker si absent Installation de Dagger CLI si absent Création du répertoire de travail distant Synchronisation du ci-engine Smoke test (versions)","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2.1 Pré-requis serveur de build","id":"171","title":"2.1 Pré-requis serveur de build"},"172":{"body":"Ajouter au .env de Gitrust : # Activer globalement le CI\\nCI_ENABLED=true # Chemin du ci-engine sur le serveur de build\\nCI_ENGINE_PATH=/opt/gitrust-ci/ci-engine # Limite de parallélisme\\nCI_MAX_CONCURRENT=4\\nCI_DEFAULT_TIMEOUT=3600\\nCI_WORKSPACE_PATH=/tmp/gitrust-ci # Serveur de build (mettre localhost pour \\"même machine\\")\\nCI_REMOTE_HOST=builder.example.com\\nCI_REMOTE_USER=ci-runner\\nCI_REMOTE_PATH=/opt/gitrust-ci\\nCI_REMOTE_SSH_PORT=22\\n# CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/id_ed25519 # si pas ssh-agent Redémarrer Gitrust : systemctl restart gitrust (ou cargo run --release).","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2.2 Configuration Gitrust (fichier .env)","id":"172","title":"2.2 Configuration Gitrust (fichier .env)"},"173":{"body":"Dans l’interface web : aller sur le dépôt → Settings → CI. Cocher CI enabled (requis — par défaut false) Cocher Trigger on push (active l’exécution à chaque push) Optionnel : Auto-cancel (annule les pipelines en cours quand un nouveau démarre) Optionnel : Allowed branches (ex. main,develop — vide = toutes)","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2.3 Activer la CI sur un dépôt","id":"173","title":"2.3 Activer la CI sur un dépôt"},"174":{"body":"flowchart LR Push[Commit<br/>poussé] --> Tree{Arbre du<br/>commit contient ?} Tree -->|.dagger/| Power[Mode Power<br/>dagger call -m .dagger/ ci] Tree -->|.gitrust-ci.yml| Easy[Mode Easy<br/>dagger call -m ci-engine test-pr] Tree -->|rien| None[Pas de pipeline] Power --> Run[Exécution<br/>distante SSH] Easy --> Run Mode Easy (recommandé pour commencer) Créer .gitrust-ci.yml à la racine du dépôt : # Raccourci : charge un profil pré-configuré (rust | python | node)\\nlanguage: rust build: command: \\"cargo build --release\\" checks: lint: \\"cargo clippy -- -D warnings\\" format: \\"cargo fmt -- --check\\" tests: command: \\"cargo test --release\\" Les profils disponibles se trouvent dans deployment/ci-engine/profiles/ (rust.yaml, python.yaml, node.yaml) dans le dépôt source. Mode Power Pour les utilisateurs avancés, créer un module Dagger complet dans .dagger/ : .dagger/\\n├── dagger.json\\n├── src/\\n│ └── main.py # ou Go/TypeScript La fonction ci du module est appelée directement : dagger call -m .dagger/ ci Avantage : accès au Daggerverse, composition, tests de pipeline. Voir la documentation Dagger.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2.4 Choisir le mode : Easy ou Power","id":"174","title":"2.4 Choisir le mode : Easy ou Power"},"175":{"body":"Après un git push, une entrée apparaît dans l’onglet CI du dépôt : stateDiagram-v2 [*] --> Pending: create_pipeline Pending --> Running: worker picks CiTask Running --> Success: exit 0 Running --> Failure: exit != 0 Running --> Cancelled: timeout / auto_cancel / manuel Success --> [*] Failure --> [*] Cancelled --> [*] Les logs stdout/stderr sont streamés ligne par ligne dans la table ci_logs et visibles en direct dans l’UI. En cas d’échec, une notification est envoyée au propriétaire du dépôt.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2.5 Suivi d’un pipeline","id":"175","title":"2.5 Suivi d’un pipeline"},"176":{"body":"Cette partie est totalement indépendante de la CI. Elle scanne le code poussé et produit un SBOM CycloneDX, puis (optionnellement) l’envoie à Dependency-Track pour une analyse de vulnérabilités.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3. Mettre en place le Dependency Tracker","id":"176","title":"3. Mettre en place le Dependency Tracker"},"177":{"body":"Sur la machine Gitrust (le scan se fait localement, pas sur le builder) : # Installation officielle\\ncurl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh \\\\ | sh -s -- -b /usr/local/bin # Vérification\\nsyft --version Dans .env : CI_SBOM_ENABLED=true\\nCI_SYFT_BIN=/usr/local/bin/syft # optionnel, défaut: syft dans PATH À ce stade : à chaque push, un SBOM CycloneDX est généré et stocké (sans upload externe). Visible dans l’onglet Security du dépôt : nombre de composants, sha256 du BOM.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3.1 Installer Syft","id":"177","title":"3.1 Installer Syft"},"178":{"body":"Dependency-Track est une application Java qui stocke les SBOM et corrèle avec les bases CVE/OSV/NVD. Déploiement Docker recommandé : mkdir -p /opt/dtrack && cd /opt/dtrack\\ncurl -L -o docker-compose.yml \\\\ https://dependencytrack.org/docker-compose.yml\\ndocker compose up -d L’API est disponible sur http://localhost:8081 et l’UI sur http://localhost:8080.\\nLogin initial : admin / admin (à changer immédiatement).","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3.2 Déployer Dependency-Track","id":"178","title":"3.2 Déployer Dependency-Track"},"179":{"body":"Dans Dependency-Track → Administration → Access Management → Teams : Créer (ou réutiliser) une équipe gitrust. Lui attribuer les permissions : BOM_UPLOAD PROJECT_CREATION_UPLOAD VIEW_PORTFOLIO VIEW_VULNERABILITY Générer une API key et la copier.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3.3 Créer une clé API","id":"179","title":"3.3 Créer une clé API"},"18":{"body":"Sur la page Sécurité, clique sur Activer la 2FA. gitrust affiche un QR code. Ouvre ton application d’authentification (Google Authenticator, Authy, ou tout équivalent compatible TOTP). Scanne le QR code avec l’application. L’application affiche un code à 6 chiffres qui change toutes les 30 secondes. Saisis ce code dans le champ Code de vérification et clique Confirmer. Sortie attendue (message dans l’interface) : La 2FA a été activée avec succès.\\nConservez vos codes de secours dans un endroit sûr. gitrust affiche également 10 codes de secours (format XXXX-XXXX). Copie-les et conserve-les hors ligne — ils te permettent de récupérer l’accès si tu perds ton téléphone. Checkpoint : retourne sur Paramètres → Sécurité. La section 2FA doit maintenant afficher « Activée » en vert. Si elle affiche toujours « Désactivée », recommence l’étape en t’assurant que le code à 6 chiffres est saisi avant qu’il expire.","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Étape 2 : Active la 2FA avec une application d’authentification","id":"18","title":"Étape 2 : Active la 2FA avec une application d’authentification"},"180":{"body":"Ajouter au .env : CI_DTRACK_ENABLED=true\\nCI_DTRACK_URL=http://localhost:8081\\nCI_DTRACK_API_KEY=odt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Redémarrer Gitrust. À chaque push : sequenceDiagram participant Push as post-receive participant Sbom as SbomService participant Git as git archive participant Syft participant Dtrack as Dependency-Track participant DB as sbom_reports Push->>Sbom: process_push(sha, ref) Sbom->>DB: upsert status=pending Sbom->>Git: archive sha | tar -x tmpdir Sbom->>Syft: scan dir:tmpdir -o cyclonedx-json Syft-->>Sbom: BOM bytes Sbom->>DB: update sha256 Sbom->>Dtrack: PUT /api/v1/bom (base64) Dtrack-->>Sbom: token loop max 30s Sbom->>Dtrack: GET /api/v1/bom/token/{token} Dtrack-->>Sbom: processing ? end Sbom->>Dtrack: GET /api/v1/finding/project/{uuid} Dtrack-->>Sbom: findings[] Sbom->>DB: update status=success<br/>+ critical/high/medium/low","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3.4 Configurer Gitrust","id":"180","title":"3.4 Configurer Gitrust"},"181":{"body":"Onglet Security du dépôt → encart SBOM : Nombre de composants détectés Compteurs par sévérité : Critical / High / Medium / Low Lien direct vers le projet dans Dependency-Track (si l’UUID est résolu) Hash sha256 du BOM (traçabilité) Si Dependency-Track met plus de 30s à analyser, le status reste processing — un sweeper ultérieur ira rechercher les findings.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3.5 Lire les résultats","id":"181","title":"3.5 Lire les résultats"},"182":{"body":"","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 4. Débogage","id":"182","title":"4. Débogage"},"183":{"body":"Symptôme Cause probable Vérifier Pipeline reste pending Worker non démarré, ou channel saturé Logs CI worker started, CI_MAX_CONCURRENT Échec rsync vers le serveur de build SSH bloqué, clé absente ssh -p ${CI_REMOTE_SSH_PORT} ${CI_REMOTE_USER}@${CI_REMOTE_HOST} manuel dagger: command not found Dagger non installé sur le builder Relancer setup-remote-ci.sh Status Cancelled inattendu Timeout ( CI_DEFAULT_TIMEOUT) ou auto-cancel Augmenter le timeout, vérifier pipelines concurrents","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » Problèmes CI courants","id":"183","title":"Problèmes CI courants"},"184":{"body":"Symptôme Cause probable Vérifier SBOM generation disabled CI_SBOM_ENABLED=false .env syft spawn failed Binaire introuvable which syft, CI_SYFT_BIN invalid commit sha SHA non hex 40 chars Rare, signale un bug Dtrack upload 401 API key invalide ou permissions manquantes Régénérer, vérifier les 4 permissions Status processing indéfiniment Dtrack surchargé, analyse lente Attendre, ou relancer un push","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » Problèmes SBOM courants","id":"184","title":"Problèmes SBOM courants"},"185":{"body":"# Logs Gitrust (systemd)\\njournalctl -u gitrust -f | grep -E \\"CI|SBOM|sbom|pipeline\\" # Vérifier un pipeline en DB\\npsql $DATABASE_URL -c \\"SELECT id, status, commit_sha, created_at FROM ci_pipelines ORDER BY created_at DESC LIMIT 10;\\" # Vérifier un SBOM\\npsql $DATABASE_URL -c \\"SELECT commit_sha, status, components_count, critical_count, high_count FROM sbom_reports ORDER BY created_at DESC LIMIT 10;\\"","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » Logs utiles","id":"185","title":"Logs utiles"},"186":{"body":"CI : Docker + Dagger installés sur le serveur de build ( setup-remote-ci.sh) CI_ENABLED=true et CI_REMOTE_* dans .env Gitrust redémarré CI activée dans Settings → CI pour chaque dépôt Fichier .gitrust-ci.yml (Easy) ou .dagger/ (Power) commité Push → pipeline visible dans l’onglet CI Dependency Tracker : Syft installé sur la machine Gitrust CI_SBOM_ENABLED=true dans .env (Optionnel) Dependency-Track déployé + API key créée avec les 4 permissions (Optionnel) CI_DTRACK_ENABLED=true, CI_DTRACK_URL, CI_DTRACK_API_KEY dans .env Gitrust redémarré Push → SBOM visible dans l’onglet Security","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 5. Checklist récapitulative","id":"186","title":"5. Checklist récapitulative"},"187":{"body":"Configuration complète pour protéger un déploiement gitrust exposant : sshd système sur :2022 (admin) Nginx en reverse proxy HTTPS :443 + redirect :80 + stream :22 → :2222 Gitrust (web 127.0.0.1:4000, SSH russh 127.0.0.1:2222) Dagger CI runner (local, pas d’exposition réseau directe) Dependency-Track API :8081 + UI :8080 (si exposés) PostgreSQL 127.0.0.1:5432 (défensif au cas où le bind fuit)","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » Durcir l’instance avec Fail2ban","id":"187","title":"Durcir l’instance avec Fail2ban"},"188":{"body":"sudo apt install -y fail2ban\\nsudo systemctl enable --now fail2ban\\nfail2ban-client --version Vérifier que ufw est actif (fournit banaction = ufw dans la config) : sudo ufw status","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 1. Installation","id":"188","title":"1. Installation"},"189":{"body":"À placer via : sudo tee /etc/fail2ban/jail.local <<\'EOF\'\\n[Le contenu ci-dessous]\\nEOF # =============================================================================\\n# Défauts globaux\\n# =============================================================================\\n[DEFAULT]\\nbackend = systemd\\nbantime = 1h\\nfindtime = 10m\\nmaxretry = 5 # LAN privé et loopback jamais bannis\\nignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 # UFW\\nbanaction = ufw\\nbanaction_allports = ufw # Notifications (optionnel — nécessite un relay SMTP local)\\n# destemail = contact@gitrust.eu\\n# sender = fail2ban@votre-serveur.example.com\\n# action = %(action_mwl)s # =============================================================================\\n# 1) sshd admin système — port 2022\\n# =============================================================================\\n[sshd]\\nenabled = true\\nport = 2022\\nfilter = sshd\\nbackend = %(sshd_backend)s\\nlogpath = %(sshd_log)s\\nmaxretry = 3\\nfindtime = 10m\\nbantime = 1h # =============================================================================\\n# 2) Nginx — 401/403 auth basic (si un jour activé sur /admin, /metrics, etc.)\\n# =============================================================================\\n[nginx-http-auth]\\nenabled = true\\nport = http,https\\nfilter = nginx-http-auth\\nlogpath = /var/log/nginx/gitrust.error.log\\nmaxretry = 5 # =============================================================================\\n# 3) Nginx — scanners d\'URL (wp-admin, .env, phpmyadmin, config.php, etc.)\\n# =============================================================================\\n[nginx-botsearch]\\nenabled = true\\nport = http,https\\nfilter = nginx-botsearch\\nlogpath = /var/log/nginx/gitrust.access.log\\nmaxretry = 2\\nfindtime = 10m\\nbantime = 24h # =============================================================================\\n# 4) Nginx — bad user-agents (scanners agressifs, masscan, nikto, etc.)\\n# =============================================================================\\n[nginx-badbots]\\nenabled = true\\nport = http,https\\nfilter = nginx-badbots\\nlogpath = /var/log/nginx/gitrust.access.log\\nmaxretry = 2\\nbantime = 24h # =============================================================================\\n# 5) Nginx — dépassement limit_req (voir section 4 — zones HTTPS)\\n# =============================================================================\\n[nginx-limit-req]\\nenabled = true\\nport = http,https\\nfilter = nginx-limit-req\\nlogpath = /var/log/nginx/gitrust.error.log\\nmaxretry = 10\\nfindtime = 5m\\nbantime = 1h # =============================================================================\\n# 6) Gitrust — brute force login (formulaire + API JWT)\\n# =============================================================================\\n[gitrust-login]\\nenabled = true\\nport = http,https\\nfilter = gitrust-login\\nlogpath = /var/log/nginx/gitrust.access.log\\nmaxretry = 5\\nfindtime = 10m\\nbantime = 1h # =============================================================================\\n# 7) Gitrust — abus API (tokens personnels leaked, scrapers)\\n# =============================================================================\\n[gitrust-api-abuse]\\nenabled = true\\nport = http,https\\nfilter = gitrust-api-abuse\\nlogpath = /var/log/nginx/gitrust.access.log\\nmaxretry = 30\\nfindtime = 1m\\nbantime = 2h # =============================================================================\\n# 8) Gitrust SSH (russh) — brute force clé publique\\n# =============================================================================\\n[gitrust-ssh]\\nenabled = true\\nport = 22,2222\\nfilter = gitrust-ssh\\nbackend = systemd\\njournalmatch = _SYSTEMD_UNIT=gitrust.service\\nmaxretry = 5\\nfindtime = 10m\\nbantime = 1h # =============================================================================\\n# 9) Gitrust import worker — tokens invalides sur clone de dépôts externes\\n# =============================================================================\\n[gitrust-import]\\nenabled = true\\nport = http,https\\nfilter = gitrust-import\\nbackend = systemd\\njournalmatch = _SYSTEMD_UNIT=gitrust.service\\nmaxretry = 3\\nfindtime = 5m\\nbantime = 30m # =============================================================================\\n# 10) Dependency-Track UI — brute force login (port 8080)\\n# =============================================================================\\n# Activer UNIQUEMENT si DTrack est exposé publiquement.\\n# Si DTrack est sur réseau privé/loopback, laisser enabled=false.\\n[dtrack-login]\\nenabled = false\\nport = 8080,http,https\\nfilter = dtrack-login\\nlogpath = /var/log/nginx/dtrack.access.log\\nmaxretry = 5\\nfindtime = 10m\\nbantime = 2h # =============================================================================\\n# 11) Dependency-Track API — abus clé API (port 8081)\\n# =============================================================================\\n[dtrack-api]\\nenabled = false\\nport = 8081,http,https\\nfilter = dtrack-api\\nlogpath = /var/log/nginx/dtrack.access.log\\nmaxretry = 10\\nfindtime = 5m\\nbantime = 1h # =============================================================================\\n# 12) PostgreSQL — tentatives de connexion invalides (défensif)\\n# =============================================================================\\n# PG doit binder 127.0.0.1 uniquement. Ce jail protège si la config fuit.\\n[postgresql]\\nenabled = true\\nport = 5432\\nfilter = postgresql\\nbackend = systemd\\njournalmatch = _SYSTEMD_UNIT=postgresql.service + _SYSTEMD_UNIT=docker.service\\nmaxretry = 5\\nfindtime = 10m\\nbantime = 1h # =============================================================================\\n# 13) Récidive — ban long pour IPs bannies 3x en 24h, tous jails confondus\\n# =============================================================================\\n[recidive]\\nenabled = true\\nlogpath = /var/log/fail2ban.log\\nbanaction = %(banaction_allports)s\\nbantime = 1w\\nfindtime = 1d\\nmaxretry = 3","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 2. Fichier principal /etc/fail2ban/jail.local","id":"189","title":"2. Fichier principal /etc/fail2ban/jail.local"},"19":{"body":"Si tu n’as pas encore de paire de clés SSH, génère-en une maintenant dans ton terminal : ssh-keygen -t ed25519 -C \\"mon-compte@example.com\\" Sortie attendue : Generating public/private ed25519 key pair.\\nEnter file in which to save the key (/home/toi/.ssh/id_ed25519):\\nEnter passphrase (empty for no passphrase):\\nEnter same passphrase again:\\nYour identification has been saved in /home/toi/.ssh/id_ed25519\\nYour public key has been saved in /home/toi/.ssh/id_ed25519.pub\\nThe key fingerprint is:\\nSHA256:xXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx mon-compte@example.com Appuie sur Entrée pour accepter le chemin par défaut. Tu peux choisir une passphrase ou laisser vide (appuie deux fois sur Entrée). Une passphrase ajoute une couche de sécurité. Affiche maintenant ta clé publique (le fichier .pub — celui-ci est fait pour être partagé) : cat ~/.ssh/id_ed25519.pub Sortie attendue (une seule ligne) : ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mon-compte@example.com Copie cette ligne entière dans le presse-papier. Checkpoint : la commande cat doit afficher une ligne commençant par ssh-ed25519 (ou ssh-rsa si tu as une clé plus ancienne). Si elle affiche « No such file or directory », la génération n’a pas abouti — relance ssh-keygen.","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Étape 3 : Génère ou localise ta clé SSH","id":"19","title":"Étape 3 : Génère ou localise ta clé SSH"},"190":{"body":"À placer dans /etc/fail2ban/filter.d/ (un fichier par jail custom).","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3. Filtres personnalisés","id":"190","title":"3. Filtres personnalisés"},"191":{"body":"sudo tee /etc/fail2ban/filter.d/gitrust-login.conf <<\'EOF\'\\n[Definition]\\n# POST sur /login ou endpoints JWT avec code 4xx (401/403/422/429)\\nfailregex = ^<HOST> .* \\"POST /(login|api/v1/auth/login|api/v1/auth/refresh|api/v1/auth/2fa)[^\\"]*\\" (401|403|422|429) .*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.1 gitrust-login.conf","id":"191","title":"3.1 gitrust-login.conf"},"192":{"body":"sudo tee /etc/fail2ban/filter.d/gitrust-api-abuse.conf <<\'EOF\'\\n[Definition]\\n# Abus API : 401/403 répétés sur /api/v1/* (hors auth déjà couvert par gitrust-login)\\nfailregex = ^<HOST> .* \\"(GET|POST|PUT|DELETE|PATCH) /api/v1/(?!auth/)[^\\"]*\\" (401|403) .*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.2 gitrust-api-abuse.conf","id":"192","title":"3.2 gitrust-api-abuse.conf"},"193":{"body":"sudo tee /etc/fail2ban/filter.d/gitrust-ssh.conf <<\'EOF\'\\n[Definition]\\n# russh / gitrust-ssh : échecs d\'authentification\\n# Regex à raffiner après observation des logs réels via :\\n# sudo fail2ban-regex <(journalctl -u gitrust --no-pager -n 2000) \\\\\\n# /etc/fail2ban/filter.d/gitrust-ssh.conf\\nfailregex = ^.*ssh.*auth(entication)? (failed|failure).*from <HOST>.*$ ^.*[Rr]ejected.*(public[_ ]?key|password).*from <HOST>.*$ ^.*no matching (ssh|public) key.*from <HOST>.*$ ^.*unknown user.*from <HOST>.*$ ^.*gitrust.*auth.*refused.*<HOST>.*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.3 gitrust-ssh.conf","id":"193","title":"3.3 gitrust-ssh.conf"},"194":{"body":"sudo tee /etc/fail2ban/filter.d/gitrust-import.conf <<\'EOF\'\\n[Definition]\\n# Import worker : tokens OAuth/GitHub invalides sur clone de dépôts externes\\nfailregex = ^.*import.*authentication failed.*from <HOST>.*$ ^.*import.*invalid (token|credentials).*from <HOST>.*$ ^.*import.*clone failed.*401.*from <HOST>.*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.4 gitrust-import.conf","id":"194","title":"3.4 gitrust-import.conf"},"195":{"body":"sudo tee /etc/fail2ban/filter.d/dtrack-login.conf <<\'EOF\'\\n[Definition]\\n# Dependency-Track : brute force du POST /api/v1/user/login\\nfailregex = ^<HOST> .* \\"POST /api/v1/user/login[^\\"]*\\" (401|403) .*$ ^<HOST> .* \\"POST /api/v1/user/forceChangePassword[^\\"]*\\" (401|403) .*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.5 dtrack-login.conf (si DTrack exposé)","id":"195","title":"3.5 dtrack-login.conf (si DTrack exposé)"},"196":{"body":"sudo tee /etc/fail2ban/filter.d/dtrack-api.conf <<\'EOF\'\\n[Definition]\\n# Dependency-Track API : abus de clé API ou requêtes non authentifiées\\nfailregex = ^<HOST> .* \\"[^\\"]+ /api/v1/[^\\"]*\\" 401 .*$ ^<HOST> .* \\"[^\\"]+ /api/v1/[^\\"]*\\" 403 .*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.6 dtrack-api.conf (si DTrack exposé)","id":"196","title":"3.6 dtrack-api.conf (si DTrack exposé)"},"197":{"body":"if [ ! -f /etc/fail2ban/filter.d/postgresql.conf ]; then\\nsudo tee /etc/fail2ban/filter.d/postgresql.conf <<\'EOF\'\\n[Definition]\\nfailregex = ^.*authentication failed for user.*host=<HOST>.*$ ^.*FATAL:.*password authentication failed.*<HOST>.*$ ^.*no pg_hba\\\\.conf entry for host \\"<HOST>\\".*$\\nignoreregex =\\nEOF\\nfi","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.7 postgresql.conf (créer si absent)","id":"197","title":"3.7 postgresql.conf (créer si absent)"},"198":{"body":"if [ ! -f /etc/fail2ban/filter.d/nginx-limit-req.conf ]; then\\nsudo tee /etc/fail2ban/filter.d/nginx-limit-req.conf <<\'EOF\'\\n[Definition]\\nfailregex = ^.*limiting requests, excess: .* by zone .*, client: <HOST>.*$\\nignoreregex =\\nEOF\\nfi","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.8 nginx-limit-req.conf (créer si absent sur votre distro)","id":"198","title":"3.8 nginx-limit-req.conf (créer si absent sur votre distro)"},"199":{"body":"Le paquet fail2ban Debian/Ubuntu fournit apache-badbots.conf mais PAS nginx-badbots.conf. Sans ce filter, fail2ban-client reload affiche : Found no accessible config files for \'filter.d/nginx-badbots\' under /etc/fail2ban Le filter ci-dessous réutilise la liste de bad user-agents de apache-badbots avec un failregex adapté au format combined de nginx : sudo tee /etc/fail2ban/filter.d/nginx-badbots.conf <<\'EOF\'\\n[Definition]\\nbadbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\\\\.02|sogou music spider\\nbadbots = Atomic_Email_Hunter/4\\\\.0|atSpider/1\\\\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\\\\.6|ContactBot/0\\\\.2|ContentSmartz|DataCha0s/2\\\\.0|DBrowse 1\\\\.4b|DBrowse 1\\\\.4d|Demo Bot DOT 16b|Demo Bot Z 16b|DSurf15a 01|DSurf15a 71|DSurf15a 81|DSurf15a VA|EBrowse 1\\\\.4b|Educate Search VxB|EmailSiphon|EmailSpider|EmailWolf 1\\\\.00|ExtractorPro|Franklin Locator 1\\\\.8|Full Web Bot 0416B|Guestbook Auto Submitter|ISC Systems iRc Search 2\\\\.1|LMQueueBot/0\\\\.2|LWP\\\\:\\\\:Simple/5\\\\.803|Microsoft URL Control - 6\\\\.00\\\\.8xxx|Missigua Locator 1\\\\.9|Mozilla/4\\\\.0 efp@gmx\\\\.net|Nsauditor/1\\\\.x|PBrowse 1\\\\.4b|PEval 1\\\\.4b|Poirot|psycheclone|sogou spider|sohu agent|VadixBot|WebVulnCrawl\\\\.unknown/1\\\\.0 libwww-perl/5\\\\.803|Wells Search II|WEP Search 00 failregex = ^<HOST> -.*\\"(GET|POST|HEAD).*HTTP.*\\"(?:%(badbots)s|%(badbotscustom)s)\\"$\\nignoreregex = datepattern = ^[^\\\\[]*\\\\[({DATE}) {^LN-BEG}\\nEOF Alternative : si vous ne voulez pas maintenir la liste, simplement désactiver le jail ( enabled = false dans le [nginx-badbots]) — la combinaison nginx-botsearch + nginx-limit-req + gitrust-api-abuse couvre déjà l’essentiel.","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.9 nginx-badbots.conf — OBLIGATOIRE (pas fourni par Debian/Ubuntu)","id":"199","title":"3.9 nginx-badbots.conf — OBLIGATOIRE (pas fourni par Debian/Ubuntu)"},"2":{"body":"Cette documentation est organisée en quatre parties selon leurs publics respectifs : Manuel utilisateur — pour les développeurs qui utilisent une instance gitrust existante : push/pull, pull requests, issues, CI, notifications. Prérequis : savoir utiliser Git en ligne de commande. Manuel d’administration — pour les ops et self-hosters qui déploient, configurent et maintiennent une instance en production. Prérequis : administration Linux, notions de réseau et TLS. Manuel développeur — pour les contributeurs au code gitrust et les développeurs qui construisent des intégrations sur l’API publique. Prérequis : Rust (pour contribuer) ou un langage client (pour l’API). Bibliothèque de templates — pour tous les profils, lorsqu’ils cherchent un point de départ prêt à l’emploi (fichiers .env, docker-compose.yml, configs reverse-proxy, scripts de backup, exemples de clients API).","breadcrumbs":"Introduction » À qui s’adresse cette documentation ?","id":"2","title":"À qui s’adresse cette documentation ?"},"20":{"body":"Dans ton navigateur, retourne sur Paramètres et clique sur Clés SSH dans le menu de gauche. Clique sur Ajouter une clé SSH. Un formulaire apparaît : Titre : donne un nom descriptif à cette clé (ex. laptop-perso-2026, poste-bureau) Clé : colle la ligne copiée à l’étape précédente Clique Enregistrer la clé. Sortie attendue (message dans l’interface) : Clé SSH ajoutée avec succès. Teste maintenant la connexion SSH depuis ton terminal : ssh -T git@demo.gitrust.eu -p 2222 Sortie attendue : Bonjour tonpseudo ! Vous êtes authentifié, mais gitrust ne fournit pas d\'accès shell. Checkpoint : si tu obtiens ce message, ta clé SSH est correctement enregistrée. Si tu obtiens Permission denied (publickey), vérifie que tu as bien copié la clé publique ( .pub) et non la clé privée. Consulte la section « Et si ça ne marche pas » ci-dessous.","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Étape 4 : Enregistre la clé SSH dans ton profil gitrust","id":"20","title":"Étape 4 : Enregistre la clé SSH dans ton profil gitrust"},"200":{"body":"","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 4. Rate limiting côté Nginx (requis par nginx-limit-req)","id":"200","title":"4. Rate limiting côté Nginx (requis par nginx-limit-req)"},"201":{"body":"sudo tee /etc/nginx/conf.d/gitrust-limit.conf <<\'EOF\'\\n# Zones de rate limiting gitrust\\nlimit_req_zone $binary_remote_addr zone=gitrust_login:10m rate=1r/s;\\nlimit_req_zone $binary_remote_addr zone=gitrust_api:10m rate=10r/s;\\nlimit_req_zone $binary_remote_addr zone=gitrust_git:10m rate=30r/s;\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 4.1 Déclarer les zones globales","id":"201","title":"4.1 Déclarer les zones globales"},"202":{"body":"Dans le bloc server { listen 443 ssl; ... }, avant location / finale : # Protection brute force login (1 req/s par IP, burst 5)\\nlocation ~ ^/(login|api/v1/auth/) { limit_req zone=gitrust_login burst=5 nodelay; proxy_pass http://gitrust_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;\\n} # Protection API (10 req/s par IP, burst 20)\\nlocation ^~ /api/v1/ { limit_req zone=gitrust_api burst=20 nodelay; proxy_pass http://gitrust_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;\\n} # Protection Git smart HTTP (30 req/s — clone/push légitime peut être verbeux)\\nlocation ~ ^/[^/]+/[^/]+\\\\.git/ { limit_req zone=gitrust_git burst=50 nodelay; proxy_pass http://gitrust_backend; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; proxy_request_buffering off; client_max_body_size 2G;\\n}","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 4.2 Ajouter les location dans /etc/nginx/sites-available/gitrust","id":"202","title":"4.2 Ajouter les location dans /etc/nginx/sites-available/gitrust"},"203":{"body":"sudo nginx -t && sudo systemctl reload nginx","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 4.3 Reload","id":"203","title":"4.3 Reload"},"204":{"body":"sudo systemctl restart fail2ban # Liste des jails actifs\\nsudo fail2ban-client status\\n# Attendu :\\n# sshd, nginx-http-auth, nginx-botsearch, nginx-badbots, nginx-limit-req,\\n# gitrust-login, gitrust-api-abuse, gitrust-ssh, gitrust-import,\\n# postgresql, recidive\\n# (+ dtrack-login, dtrack-api si activées) # Stats par jail\\nsudo fail2ban-client status gitrust-login\\nsudo fail2ban-client status sshd","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 5. Démarrage et validation","id":"204","title":"5. Démarrage et validation"},"205":{"body":"# 1. gitrust-login contre l\'access log nginx\\nsudo fail2ban-regex /var/log/nginx/gitrust.access.log \\\\ /etc/fail2ban/filter.d/gitrust-login.conf # 2. gitrust-api-abuse\\nsudo fail2ban-regex /var/log/nginx/gitrust.access.log \\\\ /etc/fail2ban/filter.d/gitrust-api-abuse.conf # 3. gitrust-ssh contre journald\\njournalctl -u gitrust --no-pager -n 5000 > /tmp/gitrust.log\\nsudo fail2ban-regex /tmp/gitrust.log \\\\ /etc/fail2ban/filter.d/gitrust-ssh.conf\\nrm /tmp/gitrust.log # 4. postgresql\\njournalctl -u docker --no-pager -n 5000 | grep -i postgres > /tmp/pg.log\\nsudo fail2ban-regex /tmp/pg.log \\\\ /etc/fail2ban/filter.d/postgresql.conf 0 failregex found = regex à ajuster après observation des logs réels de chaque service.","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » Valider chaque filtre custom","id":"205","title":"Valider chaque filtre custom"},"206":{"body":"# Depuis un host HORS LAN (sinon ignoreip s\'applique)\\nfor i in $(seq 1 10); do curl -sk -o /dev/null -w \\"%{http_code}\\\\n\\" \\\\ -X POST https://<votre-domaine>/login \\\\ -d \'username=admin&password=wrong\'\\ndone # Vérifier le ban\\nssh gitrust-host \'sudo fail2ban-client status gitrust-login\'\\n# Currently banned : 1 — Banned IP list : <IP test> # Débannir manuellement\\nssh gitrust-host \'sudo fail2ban-client unban <IP>\'","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » Test de bannissement","id":"206","title":"Test de bannissement"},"207":{"body":"# Logs fail2ban temps réel\\nsudo tail -f /var/log/fail2ban.log # Toutes les IPs bannies, tous jails confondus\\nsudo fail2ban-client banned # Stats détaillées d\'un jail\\nsudo fail2ban-client status gitrust-ssh\\n# Currently failed : 2\\n# Total failed : 47\\n# Currently banned : 1\\n# Total banned : 12\\n# Banned IP list : 203.0.113.42 sudo grep \\"Ban \\" /var/log/fail2ban.log | tail -20","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 6. Monitoring","id":"207","title":"6. Monitoring"},"208":{"body":"# Jail Port(s) Source logs Max retry Ban time Surface protégée 1 sshd 2022 journald sshd 3 1h SSH admin 2 nginx-http-auth 80,443 nginx error 5 1h Basic auth (admin futur) 3 nginx-botsearch 80,443 nginx access 2 24h Scanners WP/PHP 4 nginx-badbots 80,443 nginx access 2 24h User-agents malveillants 5 nginx-limit-req 80,443 nginx error 10 1h Flood global 6 gitrust-login 80,443 nginx access 5 1h Brute force login UI + API 7 gitrust-api-abuse 80,443 nginx access 30 2h Scrapers API (tokens fuités) 8 gitrust-ssh 22,2222 journald gitrust 5 1h Brute force clé SSH Git 9 gitrust-import 80,443 journald gitrust 3 30m Brute force PAT/OAuth import 10 dtrack-login 8080 nginx access 5 2h Brute force UI Dep-Track 11 dtrack-api 8081 nginx access 10 1h Abus clé API Dep-Track 12 postgresql 5432 journald 5 1h Défense en profondeur PG 13 recidive all fail2ban.log 3 1w Méta-ban 3×/24h Ordre de déclenchement typique : brute force → jail spécifique (ban 1h) → si récidive 3x → recidive (ban 1 semaine, tous ports).","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 7. Matrice récapitulative","id":"208","title":"7. Matrice récapitulative"},"209":{"body":"","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 8. Notes spécifiques à la stack gitrust","id":"209","title":"8. Notes spécifiques à la stack gitrust"},"21":{"body":"Dans ton navigateur, clique sur le + en haut à droite (ou navigue vers /repo/new). Remplis le formulaire : Propriétaire : ton pseudo Nom du dépôt : mon-premier-depot (lettres, chiffres, tirets uniquement) Visibilité : Privé (ou Public selon ta préférence) Initialiser le dépôt : coche « Ajouter un README » Clique sur Créer le dépôt. Sortie attendue : gitrust te redirige vers la page du dépôt à l’URL : https://demo.gitrust.eu/tonpseudo/mon-premier-depot La page affiche un fichier README.md avec le nom du dépôt, et la barre latérale montre 1 commit, 1 branche ( main). Checkpoint : note l’URL affichée dans la barre d’adresse de ton navigateur. Elle doit correspondre au patron https://<instance>/<pseudo>/<nom-depot>. Si tu vois une erreur 404 ou 500, relis le formulaire de création.","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Étape 5 : Crée ton premier dépôt vide","id":"21","title":"Étape 5 : Crée ton premier dépôt vide"},"210":{"body":"Dagger s’exécute localement sur la machine gitrust (ou un runner distant — voir administration_manual/how-to/configurer-ci-runner-remote.md). Aucun port réseau ouvert → pas de jail dédié.","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 8.1 Dagger (CI)","id":"210","title":"8.1 Dagger (CI)"},"211":{"body":"Si DTrack est déployé sur le même serveur et exposé, activer les jails 10 et 11 en mettant enabled = true et en pointant logpath vers les logs nginx du vhost DTrack. Si DTrack est interne (VPN, réseau privé), laisser enabled = false — le firewall suffit. Config DTrack recommandée : Bind sur 127.0.0.1 via dtrack.url.base=http://127.0.0.1:8080","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 8.2 Dependency-Track","id":"211","title":"8.2 Dependency-Track"},"212":{"body":"Le jail postgresql est défensif. PG doit rester bindé sur 127.0.0.1:5432 via Docker. Vérifier : sudo ss -tlnp | grep 5432\\n# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0:5432","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 8.3 PostgreSQL","id":"212","title":"8.3 PostgreSQL"},"213":{"body":"Pour recevoir un mail à chaque ban : Installer un relay SMTP local : sudo apt install msmtp-mta Configurer /etc/msmtprc avec un compte SMTP Décommenter dans [DEFAULT] : destemail = contact@gitrust.eu\\nsender = fail2ban@votre-serveur.example.com\\naction = %(action_mwl)s sudo systemctl restart fail2ban","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 8.4 Notifications","id":"213","title":"8.4 Notifications"},"214":{"body":"IPv6 : toutes les regex utilisent <HOST> qui matche IPv4 ET IPv6. Vérifier que UFW est configuré pour v6 également. CDN/Cloudflare devant : si un CDN est ajouté, $remote_addr côté Nginx sera l’IP du CDN — il faut récupérer la vraie IP via X-Forwarded-For et propager au logging Nginx. Changer failregex en conséquence. Sinon les jails banniront le CDN. Docker/Podman : si gitrust passe en conteneur, les logs de gitrust.service deviennent docker.service ou podman.service → mettre à jour journalmatch dans les jails 8 et 9. GeoIP : pour bloquer des pays entiers en amont, ajouter geo $blocked_country dans Nginx (module ngx_http_geoip2_module) — complémentaire à fail2ban.","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 9. Limites et évolutions","id":"214","title":"9. Limites et évolutions"},"215":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Régler le rate limiting » Régler le rate limiting","id":"215","title":"Régler le rate limiting"},"216":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Régler le rate limiting » TODO","id":"216","title":"TODO"},"217":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Forcer le 2FA sur toute l\'instance » Forcer le 2FA sur toute l’instance","id":"217","title":"Forcer le 2FA sur toute l’instance"},"218":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Forcer le 2FA sur toute l\'instance » TODO","id":"218","title":"TODO"},"219":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Dépanner SSH » Dépanner SSH","id":"219","title":"Dépanner SSH"},"22":{"body":"✓ O1 accompli : la 2FA est activée sur ton compte — tu l’as vérifiée sur la page Sécurité qui affiche « Activée » ✓ O2 accompli : ta clé SSH publique est enregistrée — tu l’as confirmée avec ssh -T git@... -p 2222 qui a répondu « Vous êtes authentifié » ✓ O3 accompli : ton premier dépôt est créé et visible à l’URL /<pseudo>/mon-premier-depot","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Récapitulatif","id":"22","title":"Récapitulatif"},"220":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Dépanner SSH » TODO","id":"220","title":"TODO"},"221":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Dépanner la CI » Dépanner la CI","id":"221","title":"Dépanner la CI"},"222":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Dépanner la CI » TODO","id":"222","title":"TODO"},"223":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Gérer les utilisateurs (panel /admin) » Gérer les utilisateurs (panel /admin)","id":"223","title":"Gérer les utilisateurs (panel /admin)"},"224":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Gérer les utilisateurs (panel /admin) » TODO","id":"224","title":"TODO"},"225":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Auditer une instance » Auditer une instance","id":"225","title":"Auditer une instance"},"226":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Auditer une instance » TODO","id":"226","title":"TODO"},"227":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Référence","id":"227","title":"Référence"},"228":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » TODO","id":"228","title":"TODO"},"229":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Variables d\'environnement » Variables d’environnement","id":"229","title":"Variables d’environnement"},"23":{"body":"Symptôme Cause probable Correction Permission denied (publickey) lors du test SSH Tu as collé la clé privée au lieu de la clé publique, ou le fichier .pub ne correspond pas à la clé active Dans gitrust, supprime la clé ajoutée. Retourne au terminal et exécute ssh-add -l pour voir les clés actives. Recopie la bonne clé .pub avec cat ~/.ssh/id_ed25519.pub Connection refused lors du test SSH Le port SSH de l’instance est différent de 2222, ou l’instance est inaccessible Vérifie avec l’administrateur le port SSH réel. Essaie ssh -T git@<instance> -p 22 en alternative Le code 2FA est refusé alors qu’il semble correct L’horloge de ton téléphone est désynchronisée (décalage > 30 s) Active la synchronisation automatique de l’heure sur ton téléphone ( Paramètres → Date et heure → Automatique). Réessaie immédiatement après Le dépôt redirige vers une erreur 422 lors de la création Le nom contient des caractères interdits (espaces, accents, /) Utilise uniquement des lettres non accentuées, chiffres et tirets. Évite les points en début ou fin de nom","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Et si ça ne marche pas","id":"23","title":"Et si ça ne marche pas"},"230":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Variables d\'environnement » TODO","id":"230","title":"TODO"},"231":{"body":"Ce document explique comment fonctionne la configuration de la plateforme, les deux mécanismes en jeu, leur précédence, et les pièges à connaître.","breadcrumbs":"Référence » Paramètres dynamiques » Paramètres dynamiques","id":"231","title":"Paramètres dynamiques"},"232":{"body":"Gitrust utilise deux systèmes de configuration indépendants : Système Source Modifiable à chaud Visible dans l’UI admin Configuration statique Fichier .env + variables d’environnement Non (restart requis) Non Configuration dynamique Table app_settings (PostgreSQL) Oui (effet immédiat) Oui ( /admin/settings) Il existe un cas hybride pour OAuth (DB prioritaire, .env en fallback).","breadcrumbs":"Référence » Paramètres dynamiques » Vue d’ensemble : deux systèmes distincts","id":"232","title":"Vue d’ensemble : deux systèmes distincts"},"233":{"body":"","breadcrumbs":"Référence » Paramètres dynamiques » 1. Configuration statique ( .env)","id":"233","title":"1. Configuration statique ( .env)"},"234":{"body":"Les variables d’environnement sont chargées une seule fois au démarrage par dotenvy::dotenv() et stockées dans des structs Rust immuables. Elles ne sont jamais relues après le boot.","breadcrumbs":"Référence » Paramètres dynamiques » Principe","id":"234","title":"Principe"},"235":{"body":"Fichier Rôle .env.example Template documenté avec toutes les variables .env Configuration locale (gitignore) .env.production Configuration de déploiement .env.test Configuration de tests","breadcrumbs":"Référence » Paramètres dynamiques » Fichiers de référence","id":"235","title":"Fichiers de référence"},"236":{"body":"Struct Variables concernées GitrustConfig GIT_REPOS_BASE_PATH, SSH_PORT, SSH_LISTEN_ADDR, SSH_HOST_KEY_PATH, CI_*, IMPORT_* AppConfig APP_NAME, APP_THEME, APP_DEBUG AuthConfig JWT_SECRET, JWT_EXPIRATION_MINUTES, SESSION_*, RATE_LIMIT_*, COOKIE_* EmailConfig SMTP_*, EMAIL_*, IMAP_*","breadcrumbs":"Référence » Paramètres dynamiques » Structs de chargement","id":"236","title":"Structs de chargement"},"237":{"body":"Chargées dans RustwardenApp::build() au démarrage Stockées dans des Arc<Config> partagés via l’état axum Modifier le .env sans redémarrer n’a aucun effet Ces variables ne sont PAS affichées dans l’interface admin","breadcrumbs":"Référence » Paramètres dynamiques » Comportement","id":"237","title":"Comportement"},"238":{"body":"DATABASE_URL, SERVER_HOST, SERVER_PORT, RUST_LOG,\\nSSH_HOST_KEY_PATH, SSH_PORT, SSH_LISTEN_ADDR, SSH_PUBLIC_HOST,\\nJWT_SECRET, JWT_EXPIRATION_MINUTES, JWT_ISSUER,\\nREFRESH_TOKEN_EXPIRATION_DAYS, REMEMBER_ME_EXPIRATION_DAYS,\\nSESSION_TIMEOUT_MINUTES, SESSION_BACKEND,\\nRATE_LIMIT_LOGIN_PER_MINUTE, RATE_LIMIT_REFRESH_PER_MINUTE,\\nRATE_LIMIT_GENERAL_PER_MINUTE,\\nAPP_DEBUG, COOKIE_SECURE, COOKIE_SAME_SITE,\\nADMIN_USERNAME, ADMIN_EMAIL, ADMIN_PASSWORD,\\nSMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM,\\nEMAIL_BASE_URL, EMAIL_QUEUE_*,\\nAPP_NAME, APP_THEME, DEFAULT_LOCALE,\\nGIT_REPOS_BASE_PATH,\\nCI_ENABLED, CI_MAX_CONCURRENT, CI_REMOTE_HOST, CI_WORKSPACE_PATH","breadcrumbs":"Référence » Paramètres dynamiques » Liste des variables statiques (non exhaustive)","id":"238","title":"Liste des variables statiques (non exhaustive)"},"239":{"body":"","breadcrumbs":"Référence » Paramètres dynamiques » 2. Configuration dynamique (table app_settings)","id":"239","title":"2. Configuration dynamique (table app_settings)"},"24":{"body":"→ 02 — Cloner et pousser du code : clone ton dépôt en local avec SSH, fais ton premier commit et pousse-le sur gitrust (~25 min)","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Prochaine étape","id":"24","title":"Prochaine étape"},"240":{"body":"Les réglages dynamiques sont stockés en base PostgreSQL dans la table app_settings et lus à chaque requête via AppSettingsService. Ils sont modifiables à chaud par un administrateur depuis l’interface /admin/settings.","breadcrumbs":"Référence » Paramètres dynamiques » Principe","id":"240","title":"Principe"},"241":{"body":"CREATE TABLE app_settings ( id UUID PRIMARY KEY, key VARCHAR(100) UNIQUE NOT NULL, value TEXT NOT NULL, description TEXT, updated_by UUID REFERENCES users(id) ON DELETE SET NULL, updated_at TIMESTAMPTZ NOT NULL\\n);","breadcrumbs":"Référence » Paramètres dynamiques » Schéma de la table","id":"241","title":"Schéma de la table"},"242":{"body":"Au boot, AppSettingsService::initialize_default_settings() crée les réglages par défaut uniquement s’ils n’existent pas encore en base : #![allow(unused)] fn main() {\\nlet existing = Self::get_setting(db, key).await?;\\nif existing.is_none() { // ... insert valeur par défaut\\n} } Conséquence critique : une fois qu’un réglage existe en base (créé au premier démarrage ou modifié via l’UI), il n’est jamais écrasé par un redémarrage ultérieur.","breadcrumbs":"Référence » Paramètres dynamiques » Initialisation au démarrage","id":"242","title":"Initialisation au démarrage"},"243":{"body":"Clé Défaut Description app_domain env::var(\\"APP_DOMAIN\\") ou \\"localhost\\" Domaine de l’application allow_registration false Autoriser l’inscription publique validation_email_required true Exiger la validation email audit_log_level INFO Niveau de log d’audit audit_log_actions [\\"create\\",\\"update\\",\\"delete\\",\\"reset_password\\"] Actions auditées password_min_length 8 Longueur minimum mot de passe password_require_uppercase false Exiger des majuscules password_require_lowercase false Exiger des minuscules password_require_digits false Exiger des chiffres password_require_special false Exiger des caractères spéciaux password_change_require_email true Confirmation email pour changement mdp password_expiration_enabled false Activer l’expiration des mots de passe password_expiration_days 0 Durée d’expiration (jours) password_expiration_alert_enabled false Alerte email avant expiration password_expiration_alert_days_before 7 Jours avant expiration pour alerter oauth_enabled false Activer OAuth/SSO oauth_google_enabled false Activer Google OAuth oauth_github_enabled false Activer GitHub OAuth oauth_discord_enabled false Activer Discord OAuth oauth_microsoft_enabled false Activer Microsoft OAuth oauth_redirect_base_url \\"\\" URL de base pour les callbacks OAuth oauth_auto_register true Créer un compte auto au premier login OAuth oauth_link_existing_account true Lier un compte OAuth à un utilisateur existant oauth_{provider}_client_id \\"\\" Client ID du provider OAuth oauth_{provider}_client_secret \\"\\" Client secret (chiffré AES-256-GCM en base) oauth_microsoft_tenant \\"\\" Tenant Azure AD","breadcrumbs":"Référence » Paramètres dynamiques » Liste des réglages dynamiques et leurs valeurs par défaut","id":"243","title":"Liste des réglages dynamiques et leurs valeurs par défaut"},"244":{"body":"OAuth est le seul sous-système qui combine les deux sources. La logique dans OAuthConfig::load() : Pour chaque réglage OAuth : 1. Chercher dans app_settings (DB) → si trouvé et non vide : utiliser cette valeur 2. Sinon : fallback sur la variable d\'environnement → si absente : utiliser la valeur par défaut codée en dur Important : OAuthConfig::load() est appelé au démarrage. Le résultat est stocké dans un Arc et n’est pas relu dynamiquement. Donc : Modifier un réglage OAuth via l’UI admin nécessite un redémarrage pour que OAuthConfig soit rechargé Le .env n’est qu’un fallback si la DB n’a pas de valeur","breadcrumbs":"Référence » Paramètres dynamiques » 3. Cas hybride : OAuth","id":"244","title":"3. Cas hybride : OAuth"},"245":{"body":"","breadcrumbs":"Référence » Paramètres dynamiques » 4. Précédence et comportement au redémarrage","id":"245","title":"4. Précédence et comportement au redémarrage"},"246":{"body":"Action Effet immédiat Après restart Modifier .env Non Oui","breadcrumbs":"Référence » Paramètres dynamiques » Réglages statiques ( .env uniquement)","id":"246","title":"Réglages statiques ( .env uniquement)"},"247":{"body":"Action Effet immédiat Après restart Modifier via UI admin Oui Oui (valeur en DB persiste) Modifier le .env Aucun effet Aucun effet","breadcrumbs":"Référence » Paramètres dynamiques » Réglages dynamiques (DB uniquement)","id":"247","title":"Réglages dynamiques (DB uniquement)"},"248":{"body":"Action Effet immédiat Après restart Modifier via UI admin Non (OAuthConfig est en Arc) Oui (DB prime sur .env) Modifier .env Non Seulement si aucune valeur en DB","breadcrumbs":"Référence » Paramètres dynamiques » Réglages hybrides (OAuth)","id":"248","title":"Réglages hybrides (OAuth)"},"249":{"body":"Certaines variables présentes dans .env.example donnent l’ illusion de configurer des réglages qui sont en réalité gérés par la base de données : Variable .env Réglage DB correspondant La variable .env est-elle lue ? ALLOW_REGISTRATION=true allow_registration Non — valeur par défaut codée en dur ( \\"false\\") EMAIL_VALIDATION_REQUIRED=true validation_email_required Non — valeur par défaut codée en dur ( \\"true\\") OAUTH_ENABLED=true oauth_enabled Oui, mais seulement en fallback si la DB n’a pas de valeur Pour ALLOW_REGISTRATION et EMAIL_VALIDATION_REQUIRED : La variable .env est documentée dans .env.example mais n’est jamais consultée par initialize_default_settings() La valeur initiale est codée en dur dans le service Seule la valeur en base de données (modifiable via /admin/settings) fait foi Pour app_domain, c’est le seul réglage dynamique qui lit le .env comme seed initial.","breadcrumbs":"Référence » Paramètres dynamiques » 5. Piège principal : les variables .env fantômes","id":"249","title":"5. Piège principal : les variables .env fantômes"},"25":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 02 — Cloner et pousser du code » 02 — Cloner et pousser du code","id":"25","title":"02 — Cloner et pousser du code"},"250":{"body":"┌─────────────────────────────┐ │ Quel type de réglage ? │ └──────────┬──────────────────-┘ │ ┌────────────────┼────────────────┐ ▼ ▼ ▼ Infrastructure Fonctionnel OAuth (port, JWT, SMTP) (inscription, (providers, mots de passe) secrets) │ │ │ ▼ ▼ ▼ .env seul DB seule DB + fallback .env │ │ │ ▼ ▼ ▼ Restart requis Effet immédiat Restart requis via /admin/ (OAuthConfig en Arc) settings","breadcrumbs":"Référence » Paramètres dynamiques » 6. Diagramme de décision","id":"250","title":"6. Diagramme de décision"},"251":{"body":"","breadcrumbs":"Référence » Paramètres dynamiques » 7. Guide pour les administrateurs","id":"251","title":"7. Guide pour les administrateurs"},"252":{"body":"Éditer .env (ou .env.production) puis redémarrer le service : # Éditer\\nvim .env # Redémarrer\\nsystemctl restart gitrust # production\\n# ou Ctrl+C + cargo run # dev","breadcrumbs":"Référence » Paramètres dynamiques » Modifier un réglage d’infrastructure","id":"252","title":"Modifier un réglage d’infrastructure"},"253":{"body":"Se connecter en tant qu’administrateur, aller dans /admin/settings, modifier la valeur, et cliquer “Save”. L’effet est immédiat, aucun redémarrage nécessaire.","breadcrumbs":"Référence » Paramètres dynamiques » Modifier un réglage fonctionnel","id":"253","title":"Modifier un réglage fonctionnel"},"254":{"body":"Via /admin/settings, modifier les valeurs OAuth puis redémarrer le service (la config OAuth est chargée en mémoire au boot et n’est pas relue dynamiquement).","breadcrumbs":"Référence » Paramètres dynamiques » Modifier un réglage OAuth","id":"254","title":"Modifier un réglage OAuth"},"255":{"body":"Pour les réglages dynamiques, interroger la base directement : SELECT key, value, updated_at, updated_by\\nFROM app_settings\\nWHERE key = \'allow_registration\'; Pour les réglages statiques, vérifier les logs au démarrage ( RUST_LOG=debug).","breadcrumbs":"Référence » Paramètres dynamiques » Vérifier la valeur effective d’un réglage","id":"255","title":"Vérifier la valeur effective d’un réglage"},"256":{"body":"","breadcrumbs":"Référence » Paramètres dynamiques » 8. Guide pour les développeurs","id":"256","title":"8. Guide pour les développeurs"},"257":{"body":"Ajouter le tuple (clé, valeur_défaut, description) dans AppSettingsService::initialize_default_settings() : #![allow(unused)] fn main() {\\n(\\"ma_nouvelle_cle\\", \\"valeur_par_defaut\\", Some(\\"Description pour l\'UI admin\\")), } Lire la valeur dans le code via le service : #![allow(unused)] fn main() {\\n// Boolean avec défaut\\nlet enabled = AppSettingsService::get_bool(&db, \\"ma_nouvelle_cle\\", false).await?; // String\\nlet val = AppSettingsService::get_setting(&db, \\"ma_nouvelle_cle\\").await?; } La valeur apparaîtra automatiquement dans /admin/settings.","breadcrumbs":"Référence » Paramètres dynamiques » Ajouter un nouveau réglage dynamique","id":"257","title":"Ajouter un nouveau réglage dynamique"},"258":{"body":"Ajouter la variable dans .env.example avec documentation complète Lire la variable dans le struct Config correspondant via env::var() La valeur ne sera pas visible dans l’interface admin","breadcrumbs":"Référence » Paramètres dynamiques » Ajouter un nouveau réglage statique","id":"258","title":"Ajouter un nouveau réglage statique"},"259":{"body":"Suivre le pattern OAuth dans crates/rustwarden-core/src/config/oauth.rs : #![allow(unused)] fn main() {\\nlet ma_valeur = match db_val(\\"ma_cle\\").await { Some(v) => v, None => env::var(\\"MA_CLE\\").unwrap_or_else(|_| \\"defaut\\".to_string()),\\n}; }","breadcrumbs":"Référence » Paramètres dynamiques » Ajouter un réglage hybride (DB + fallback .env)","id":"259","title":"Ajouter un réglage hybride (DB + fallback .env)"},"26":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 02 — Cloner et pousser du code » TODO","id":"26","title":"TODO"},"260":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Schéma de la base de données » Schéma de la base de données","id":"260","title":"Schéma de la base de données"},"261":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Schéma de la base de données » TODO","id":"261","title":"TODO"},"262":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Ports et services » Ports et services","id":"262","title":"Ports et services"},"263":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Ports et services » TODO","id":"263","title":"TODO"},"264":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Conformité ANSSI PA-074 » Conformité ANSSI PA-074","id":"264","title":"Conformité ANSSI PA-074"},"265":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Conformité ANSSI PA-074 » TODO","id":"265","title":"TODO"},"266":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Explication","id":"266","title":"Explication"},"267":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » TODO","id":"267","title":"TODO"},"268":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Architecture globale » Architecture globale","id":"268","title":"Architecture globale"},"269":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Architecture globale » TODO","id":"269","title":"TODO"},"27":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 03 — Collaborer : équipes, issues, pull requests » 03 — Collaborer : équipes, issues, pull requests","id":"27","title":"03 — Collaborer : équipes, issues, pull requests"},"270":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Modèle de déploiement » Modèle de déploiement","id":"270","title":"Modèle de déploiement"},"271":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Modèle de déploiement » TODO","id":"271","title":"TODO"},"272":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » CI Dagger : Easy Mode vs Power Mode » CI Dagger : Easy Mode vs Power Mode","id":"272","title":"CI Dagger : Easy Mode vs Power Mode"},"273":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » CI Dagger : Easy Mode vs Power Mode » TODO","id":"273","title":"TODO"},"274":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Stratégie de sauvegarde » Stratégie de sauvegarde","id":"274","title":"Stratégie de sauvegarde"},"275":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Stratégie de sauvegarde » TODO","id":"275","title":"TODO"},"276":{"body":"Ce manuel s’adresse à deux publics : les contributeurs au code gitrust (core ou via fork rustwarden) et les développeurs externes qui construisent des intégrations sur l’API publique. Il fournit tout le nécessaire pour comprendre l’architecture des 6 crates, contribuer du code conforme aux standards du projet, ou bâtir un client qui parle à l’API gitrust. Il ne couvre pas l’installation d’une instance de production ni l’usage quotidien de la forge.","breadcrumbs":"Vue d\'ensemble » Manuel développeur","id":"276","title":"Manuel développeur"},"277":{"body":"Le parcours contributeur représente environ 4 heures au total, avec un étayage dégressif : le premier tutoriel est entièrement guidé, le troisième (capstone) demande de résoudre sans guide pas-à-pas. graph LR A[Utilisateur autonome] --> B[01-getting-started<br/>45 min] B --> C[02-premiere-contribution<br/>90 min] C --> D[03-creer-un-worker-async<br/>capstone 120 min] D --> E[Core contributor] Checkpoint de parcours : avant de passer au tutoriel 02, vous devez avoir compilé gitrust localement, lancé les tests unitaires et obtenu une instance de développement fonctionnelle. Si ce n’est pas le cas, relisez le tutoriel 01. Checkpoint de parcours : avant le tutoriel 03 (capstone), vous devez avoir soumis une PR complète avec tests, passé la gate QA et reçu une review. Si ce n’est pas le cas, relisez le tutoriel 02.","breadcrumbs":"Vue d\'ensemble » Parcours d’apprentissage — contributeur core","id":"277","title":"Parcours d’apprentissage — contributeur core"},"278":{"body":"Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété. 01 — Getting started : build local, tests, instance de dev — ~45 min 02 — Première contribution : clone, build, test, PR — ~90 min 03 — Créer un worker async (capstone) — ~120 min","breadcrumbs":"Vue d\'ensemble » Tutoriels — apprendre en faisant","id":"278","title":"Tutoriels — apprendre en faisant"},"279":{"body":"Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin. Workflow de contribution : Git + review + QA Lancer les tests unitaires Lancer les tests E2E (Playwright) Ajouter une route web (patron rustwarden → axum) Ajouter un service métier Ajouter une migration de base de données Implémenter des webhooks Implémenter un endpoint API Importer un dépôt externe (code) Contribuer à rustwarden upstream Passer la QA avant merge","breadcrumbs":"Vue d\'ensemble » How-to — recettes pour les tâches courantes","id":"279","title":"How-to — recettes pour les tâches courantes"},"28":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 03 — Collaborer : équipes, issues, pull requests » TODO","id":"28","title":"TODO"},"280":{"body":"La référence documente de façon exhaustive l’architecture, les API internes, le schéma de données et les règles QA. Destinée à la consultation ponctuelle. Architecture des 6 crates Services et API interne Schéma de base de données (ERD) Règles QA et gates ANSSI API REST v1 — auth, pagination, codes d’erreur Git hooks post-receive rustwarden-core API — helpers, extracteurs, middleware","breadcrumbs":"Vue d\'ensemble » Référence — informations techniques exactes","id":"280","title":"Référence — informations techniques exactes"},"281":{"body":"Les explanations construisent les modèles mentaux nécessaires pour contribuer de façon éclairée. Lisez-les quand vous voulez comprendre les décisions d’architecture, pas seulement les appliquer. Vue d’ensemble de l’architecture gitrust Flux de requêtes (diagrammes de séquence) Modèle de permissions RBAC 4 niveaux Fonctionnement de la 2FA Hiérarchie des labels CI Dagger : Easy Mode vs Power Mode Décisions UI : HTMX + DaisyUI Patron worker async","breadcrumbs":"Vue d\'ensemble » Explication — comprendre le pourquoi","id":"281","title":"Explication — comprendre le pourquoi"},"282":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » Tutoriels","id":"282","title":"Tutoriels"},"283":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » TODO","id":"283","title":"TODO"},"284":{"body":"Source : ce tutoriel intègre le contenu de gitrust/docs/GETTING_STARTED.md avec la structure pédagogique complète (objectifs Bloom, modèle mental, checkpoints observables, section « Et si ça ne marche pas »).","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Premiers pas avec gitrust : compilez, configurez et poussez votre premier commit","id":"284","title":"Premiers pas avec gitrust : compilez, configurez et poussez votre premier commit"},"285":{"body":"À la fin de ce tutoriel, vous saurez : O1. Compiler gitrust depuis les sources et lancer l’instance de développement localement O2. Configurer l’environnement de développement (base de données, variables d’environnement, assets CSS) O3. Exécuter un premier push SSH vers votre instance locale et vérifier le résultat dans l’interface web","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Objectifs","id":"285","title":"Objectifs"},"286":{"body":"Technique : Rust stable ≥ 1.80 ( rustc --version), PostgreSQL ≥ 15 ( psql --version), Node.js ≥ 18 ( node --version), Git 2.x ( git --version), Docker (optionnel, recommandé pour la base de données) Pédagogique : être un utilisateur autonome de gitrust (parcours user_manual complété ou équivalent) ; familiarité avec Rust (au moins 3 mois de pratique) et avec HTTP/PostgreSQL Temps estimé : ~45 minutes","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Pré-requis","id":"286","title":"Pré-requis"},"287":{"body":"Avant d’exécuter la première commande, prenons 3 minutes pour comprendre ce que vous allez monter et comment les pièces s’articulent. gitrust est un monorepo Rust à 6 crates qui compile en un seul binaire. Quand vous lancez cargo run, ce binaire démarre deux serveurs simultanément : un serveur HTTP ( :4000) pour l’interface web et l’API REST, et un serveur SSH ( :2222) pour les opérations git push/pull. Ils partagent la même base de données PostgreSQL et le même stockage de dépôts bare sur disque. graph TB subgraph sources [\\"Sources gitrust (monorepo Rust)\\"] C1[rustwarden-core<br/>auth, sessions, middleware] C2[gitrust-core<br/>modèles, services métier] C3[gitrust-git<br/>opérations Git bare] C4[gitrust-web<br/>handlers HTTP + templates] C5[gitrust-ssh<br/>serveur SSH Git] C6[gitrust-hooks<br/>post-receive, pre-receive] end subgraph runtime [\\"Processus unique (cargo run)\\"] HTTP[\\"HTTP :4000<br/>UI + API REST\\"] SSH[\\"SSH :2222<br/>git push/pull\\"] end subgraph storage [\\"Stockage\\"] PG[(PostgreSQL<br/>comptes, dépôts,<br/>issues, PRs)] REPOS[Dépôts bare<br/>data/repos/] end C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| HTTP C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| SSH HTTP & SSH --> PG HTTP & SSH --> REPOS Ce que vous allez faire : cloner les sources → préparer PostgreSQL → copier et remplir .env → compiler les assets CSS → lancer cargo run → vérifier l’instance → pousser un premier commit via SSH.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Vue d’ensemble","id":"287","title":"Vue d’ensemble"},"288":{"body":"Avant de cloner quoi que ce soit, vérifiez que tous les outils nécessaires sont installés : rustc --version && cargo --version && psql --version && node --version && git --version Sortie attendue (versions exactes peuvent varier) : rustc 1.82.0 (f6e511eec 2024-10-15)\\ncargo 1.82.0 (8f40fc59f 2024-10-15)\\npsql (PostgreSQL) 16.3\\nv20.11.0\\ngit version 2.43.0 Si des dépendances système manquent, installez-les : # Debian / Ubuntu\\nsudo apt install build-essential pkg-config libssl-dev libpq-dev cmake git # macOS\\nbrew install postgresql openssl cmake Checkpoint : toutes les commandes de vérification doivent retourner un numéro de version sans erreur. Si rustc n’est pas trouvé, installez Rust via curl --proto \'=https\' --tlsv1.2 -sSf https://sh.rustup.rs | sh puis rechargez votre shell.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 1 : Vérifiez les pré-requis système","id":"288","title":"Étape 1 : Vérifiez les pré-requis système"},"289":{"body":"git clone https://demo.gitrust.eu/gitrust/gitrust.git\\ncd gitrust Sortie attendue : Cloning into \'gitrust\'...\\nremote: Enumerating objects: 12847, done.\\nremote: Counting objects: 100% (12847/12847), done.\\nReceiving objects: 100% (12847/12847), 18.42 MiB | 4.20 MiB/s, done. Checkpoint : vérifiez que la structure de crates est présente : ls crates/ Sortie attendue : gitrust-core gitrust-git gitrust-hooks gitrust-ssh gitrust-web rustwarden-core","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 2 : Clonez le projet","id":"289","title":"Étape 2 : Clonez le projet"},"29":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 04 — Automatiser avec la CI » 04 — Automatiser avec la CI","id":"29","title":"04 — Automatiser avec la CI"},"290":{"body":"Copiez le fichier d’exemple et éditez les 5 valeurs essentielles : cp .env.example .env Ouvrez .env dans votre éditeur et renseignez ces valeurs : # Connexion à la base de données\\nDATABASE_URL=postgres://gitrust:motdepasse@localhost:5432/gitrust # Clé secrète JWT (générez-la avec : openssl rand -hex 32)\\nJWT_SECRET=votre_cle_secrete_64_caracteres # Compte administrateur créé au premier lancement\\nADMIN_USERNAME=admin\\nADMIN_EMAIL=admin@example.com\\nADMIN_PASSWORD=MotDePasseFort123! Les autres variables ont des valeurs par défaut raisonnables pour le développement. Consultez .env.example pour la liste complète. Générez une vraie valeur pour JWT_SECRET : openssl rand -hex 32 Sortie attendue (valeur différente à chaque exécution) : 4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a Copiez cette valeur dans .env pour JWT_SECRET. Checkpoint : vérifiez qu’aucune valeur d’exemple reste dans .env : grep -E \\"votre_cle|example\\\\.com|MotDePasse\\" .env La commande doit retourner vide (aucune ligne). Si elle retourne des lignes, ces valeurs placeholder sont encore présentes — l’application démarrera mais avec une configuration non sécurisée.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 3 : Configurez l’environnement (.env)","id":"290","title":"Étape 3 : Configurez l’environnement (.env)"},"291":{"body":"Vous avez deux options : Option A — Docker (recommandé pour débuter) : cd database && docker compose up -d && cd .. Sortie attendue : [+] Running 2/2 ✔ Container gitrust_postgres_dev Started 0.8s ✔ Container gitrust_pgadmin Started 1.1s Option B — PostgreSQL existant sur la machine : psql -U postgres << \'SQL\'\\nCREATE USER gitrust WITH PASSWORD \'motdepasse\';\\nCREATE DATABASE gitrust OWNER gitrust;\\nSQL Sortie attendue : CREATE ROLE\\nCREATE DATABASE Adaptez le mot de passe dans DATABASE_URL dans .env si vous utilisez l’option B. Checkpoint : vérifiez que la base est accessible depuis l’application : psql \\"$DATABASE_URL\\" -c \\"SELECT version();\\" Sortie attendue : version\\n------------------------------------------------------------------------------------------------------- PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, 64-bit\\n(1 row) Si vous obtenez psql: error: connection to server failed, vérifiez que PostgreSQL tourne et que DATABASE_URL correspond.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 4 : Préparez la base de données PostgreSQL","id":"291","title":"Étape 4 : Préparez la base de données PostgreSQL"},"292":{"body":"gitrust utilise Tailwind CSS + DaisyUI. Les assets doivent être compilés localement — aucun CDN, tous les fichiers sont servis depuis static/ : npm install\\nnpx tailwindcss -i static/css/input.css -o static/css/style.css --minify Sortie attendue : added 98 packages in 3s Rebuilding...\\nDone in 1842ms. Checkpoint : vérifiez que le fichier CSS est généré : ls -lh static/css/style.css Sortie attendue : -rw-r--r-- 1 vous vous 45K avr 17 10:15 static/css/style.css Si le fichier fait 0 octet ou n’existe pas, la compilation a échoué — relancez npm install puis la commande npx tailwindcss.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 5 : Compilez les assets CSS","id":"292","title":"Étape 5 : Compilez les assets CSS"},"293":{"body":"cargo run La première compilation prend 2 à 5 minutes (toutes les dépendances sont compilées). Les compilations suivantes sont incrémentales et beaucoup plus rapides. Au premier lancement, gitrust exécute automatiquement : Les migrations de base de données (création de toutes les tables) La création du compte administrateur (depuis .env) La génération de la clé SSH host ( data/ssh_host_ed25519_key) La création du répertoire de stockage des dépôts ( data/repos/) Sortie attendue (après compilation) : Compiling gitrust-web v0.9.0 (/home/vous/gitrust/crates/gitrust-web) Finished `dev` profile [unoptimized + debuginfo] target(s) in 187.42s Running `target/debug/gitrust`\\n2026-04-17T10:20:00Z INFO gitrust > Starting gitrust v0.9.0\\n2026-04-17T10:20:00Z INFO gitrust > Running database migrations... applied 42\\n2026-04-17T10:20:01Z INFO gitrust > Admin account created: admin\\n2026-04-17T10:20:01Z INFO gitrust > SSH host key: SHA256:xxxxxxxxxxxxxxxxxxxx\\nServer listening on http://0.0.0.0:4000 Checkpoint : ouvrez http://localhost:4000 dans votre navigateur. Vous devez voir la page d’accueil gitrust. Connectez-vous avec les identifiants ADMIN_USERNAME / ADMIN_PASSWORD définis dans .env. Si la page ne charge pas, vérifiez que le message Server listening on http://0.0.0.0:4000 est bien apparu dans les logs.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 6 : Lancez l’application","id":"293","title":"Étape 6 : Lancez l’application"},"294":{"body":"Dans l’interface web ( http://localhost:4000), cliquez sur « New repository », donnez un nom (ex. mon-projet) et cliquez Créer. Ajoutez votre clé SSH publique dans Settings > SSH Keys en collant le contenu de ~/.ssh/id_ed25519.pub. Puis dans votre terminal : git clone ssh://git@localhost:2222/admin/mon-projet.git\\ncd mon-projet echo \\"# Mon projet\\" > README.md\\ngit add README.md\\ngit commit -m \\"Initial commit\\"\\ngit push origin main Sortie attendue : Cloning into \'mon-projet\'...\\nwarning: You appear to have cloned an empty repository.\\n[main (root-commit) a1b2c3d] Initial commit 1 file changed, 1 insertion(+) create mode 100644 README.md\\nEnumerating objects: 3, done.\\nCounting objects: 100% (3/3), done.\\nWriting objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done.\\nTotal 3 (delta 0), reused 0 (delta 0), pack-reused 0\\nTo ssh://localhost:2222/admin/mon-projet.git * [new branch] main -> main Checkpoint : retournez dans le navigateur sur http://localhost:4000/admin/mon-projet. La page doit afficher le fichier README.md avec le contenu # Mon projet et indiquer 1 commit sur la branche main.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 7 : Créez un dépôt et poussez votre premier commit","id":"294","title":"Étape 7 : Créez un dépôt et poussez votre premier commit"},"295":{"body":"","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Fonctionnalités supplémentaires disponibles","id":"295","title":"Fonctionnalités supplémentaires disponibles"},"296":{"body":"La CI s’exécute sur un serveur de build via SSH + rsync. Configurez dans .env : # Même machine (défaut pour le développement)\\nCI_REMOTE_HOST=localhost # Ou serveur dédié\\nCI_REMOTE_HOST=192.168.13.110\\nCI_REMOTE_USER=ci-runner Easy Mode — ajoutez .gitrust-ci.yml à la racine de votre dépôt : language: rust build: command: \\"cargo build --release\\" tests: command: \\"cargo test\\" Power Mode — placez un module Dagger dans .dagger/ à la racine. gitrust exécutera dagger call -m .dagger/ ci.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » CI intégrée (optionnelle)","id":"296","title":"CI intégrée (optionnelle)"},"297":{"body":"Configurez SMTP dans .env pour les notifications e-mail : SMTP_HOST=smtp.example.com\\nSMTP_PORT=587\\nSMTP_USER=user\\nSMTP_PASSWORD=password\\nSMTP_FROM=noreply@gitrust.eu","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Notifications","id":"297","title":"Notifications"},"298":{"body":"gitrust est disponible en 6 langues (fr, en, de, es, pt, it). Définissez la langue par défaut de l’instance : DEFAULT_LOCALE=fr","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Langue de l’interface","id":"298","title":"Langue de l’interface"},"299":{"body":"✓ O1 accompli : gitrust est compilé depuis les sources et tourne localement — cargo run affiche « Server listening on http://0.0.0.0:4000 » ✓ O2 accompli : l’environnement est configuré — .env rempli, PostgreSQL connecté, assets CSS générés, migrations appliquées ✓ O3 accompli : un premier push SSH a réussi — le commit est visible dans l’interface web à http://localhost:4000/admin/mon-projet","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Récapitulatif","id":"299","title":"Récapitulatif"},"3":{"body":"Cette documentation suit le cadre Diátaxis, qui distingue quatre types de contenu selon le besoin du lecteur : Type Quand l’utiliser Exemples Tutoriels Quand vous apprenez Installer gitrust, créer votre premier dépôt Guides pratiques Quand vous résolvez un problème précis Configurer SMTP, gérer les clés SSH Référence Quand vous cherchez une information technique Variables d’environnement, schéma API REST Explication Quand vous voulez comprendre le pourquoi Architecture des crates, modèle RBAC Chaque manuel (utilisateur, administration, développeur) contient ces quatre types de contenu organisés de manière indépendante.","breadcrumbs":"Introduction » Comment cette documentation est-elle structurée ?","id":"3","title":"Comment cette documentation est-elle structurée ?"},"30":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 04 — Automatiser avec la CI » TODO","id":"30","title":"TODO"},"300":{"body":"Symptôme Cause probable Correction error[E0463]: can\'t find crate for \'std\' à la compilation Toolchain Rust manquante ou mauvaise version Exécutez rustup update stable && rustup default stable. Vérifiez avec rustc --version ≥ 1.80 connection to server on socket \\"/var/run/postgresql/.s.PGSQL.5432\\" failed PostgreSQL non démarré ou DATABASE_URL incorrect Démarrez PostgreSQL ( sudo systemctl start postgresql ou docker compose up -d dans database/). Vérifiez que DATABASE_URL dans .env correspond Permission denied (publickey) lors du git push Clé SSH non enregistrée dans gitrust ou mauvais port Vérifiez dans Settings > SSH Keys que la clé est présente. Testez avec ssh -T git@localhost -p 2222 — vous devez voir « Vous êtes authentifié »","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Et si ça ne marche pas","id":"300","title":"Et si ça ne marche pas"},"301":{"body":"→ 02 — Première contribution : clone, build, test, PR : apprenez à créer une feature branch, écrire des tests, et soumettre votre première pull request en suivant le workflow gitrust (~90 min)","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Prochaine étape","id":"301","title":"Prochaine étape"},"302":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 02 — Première contribution » 02 — Première contribution","id":"302","title":"02 — Première contribution"},"303":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 02 — Première contribution » TODO","id":"303","title":"TODO"},"304":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 03 — Créer un worker async (capstone) » 03 — Créer un worker async (capstone)","id":"304","title":"03 — Créer un worker async (capstone)"},"305":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 03 — Créer un worker async (capstone) » TODO","id":"305","title":"TODO"},"306":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Guides pratiques","id":"306","title":"Guides pratiques"},"307":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » TODO","id":"307","title":"TODO"},"308":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Workflow de contribution et PR » Workflow de contribution et PR","id":"308","title":"Workflow de contribution et PR"},"309":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Workflow de contribution et PR » TODO","id":"309","title":"TODO"},"31":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Guides pratiques","id":"31","title":"Guides pratiques"},"310":{"body":"Référence des commandes et de la stratégie de tests pour gitrust.","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Lancer les tests unitaires","id":"310","title":"Lancer les tests unitaires"},"311":{"body":"","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Infrastructure existante","id":"311","title":"Infrastructure existante"},"312":{"body":"cargo test --workspace # Tous les tests\\ncargo test -p gitrust-core # Un crate spécifique\\ncargo test -p gitrust-git # Tests Git (tempdir) Les tests unitaires sont intégrés dans chaque crate via #[cfg(test)].","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Tests unitaires Rust","id":"312","title":"Tests unitaires Rust"},"313":{"body":"17 specs couvrant : auth, admin, repos, issues, labels, teams, tokens, settings, navigation. # Pré-requis (première fois)\\nnpm install\\n./scripts/e2e-setup-db.sh # Crée la DB gitrust_test # Lancer les tests\\nnpm run test:e2e # Mode headless\\nnpm run test:e2e:ui # Mode interactif (navigateur visible)\\nnpm run test:e2e:debug # Mode debug\\nnpm run test:e2e:report # Voir le rapport HTML Configuration : playwright.config.ts (port 4001, DB gitrust_test, locale fr-FR).","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Tests e2e Playwright","id":"313","title":"Tests e2e Playwright"},"314":{"body":"tests/ e2e/ # Specs Playwright (TypeScript) global-setup.ts # Setup : lancer l\'app, créer admin global-teardown.ts # Teardown : arrêter l\'app fixtures.ts # Fixtures Playwright partagées auth.spec.ts # Tests authentification admin.spec.ts # Tests administration issues.spec.ts # Tests issues ... integration/ # Tests d\'intégration Rust (DB réelle) [à créer] fixtures/ # Fichiers de test (repos, configs) [à créer] seeds/ # Seeds Rust pour initialiser la DB de test mod.rs seed.rs","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Structure des répertoires","id":"314","title":"Structure des répertoires"},"315":{"body":"","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Tests à ajouter","id":"315","title":"Tests à ajouter"},"316":{"body":"Tests avec une DB PostgreSQL réelle pour vérifier les endpoints API. Emplacement : tests/integration/ ou crates/gitrust-web/tests/ Approche recommandée : utiliser reqwest + un serveur de test : #![allow(unused)] fn main() {\\n// tests/integration/api_test.rs\\nuse reqwest::Client; #[tokio::test]\\n#[ignore] // Nécessite une DB + serveur running\\nasync fn test_api_login() { let client = Client::new(); let res = client.post(\\"http://localhost:4001/api/v1/auth/login\\") .json(&serde_json::json!({ \\"login\\": \\"admin\\", \\"password\\": \\"test_password\\" })) .send() .await .unwrap(); assert_eq!(res.status(), 200);\\n} } Alternative : axum::test pour tester les handlers sans serveur HTTP : #![allow(unused)] fn main() {\\nuse axum::body::Body;\\nuse axum::http::Request;\\nuse tower::ServiceExt; #[tokio::test]\\nasync fn test_health_check() { let app = create_test_app().await; // Build router with test DB let response = app .oneshot(Request::builder().uri(\\"/api/hello\\").body(Body::empty()).unwrap()) .await .unwrap(); assert_eq!(response.status(), 200);\\n} }","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » 1. Tests fonctionnels API REST (intégration Rust)","id":"316","title":"1. Tests fonctionnels API REST (intégration Rust)"},"317":{"body":"Test Description Priorité CI detection Repo avec .gitrust-ci.yml -> Easy, .dagger/ -> Power, rien -> None Haute Pipeline CRUD Créer, lister, mettre à jour, annuler un pipeline Haute Config CI Activer/désactiver CI, modifier triggers, vérifier effet Haute Variables héritage Team var + repo var -> merge correct Moyenne Auto-cancel Nouveau push annule les pipelines en cours Moyenne Logs streaming Append logs + lecture paginée Moyenne Notifications CI Pipeline échoue -> notification créée Moyenne Pour les tests CI : mocker dagger avec un script shell qui simule success/failure : #!/bin/bash\\n# tests/fixtures/mock-dagger.sh\\necho \\"Step 1: Building...\\"\\necho \\"Step 2: Testing...\\"\\nif [ \\"$MOCK_FAIL\\" = \\"true\\" ]; then echo \\"FAILED\\" >&2 exit 1\\nfi\\necho \\"All checks passed\\"\\nexit 0 Configurer CI_DAGGER_BIN=tests/fixtures/mock-dagger.sh dans les tests.","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » 2. Tests fonctionnels CI","id":"317","title":"2. Tests fonctionnels CI"},"318":{"body":"Nouvelles specs pour les fonctionnalités CI et notifications : Spec Couverture ci-pipelines.spec.ts Liste pipelines, détail, status badges ci-config.spec.ts Config CI (enable/disable, triggers, timeout) ci-variables.spec.ts CRUD variables CI, masquage secrets notifications.spec.ts Liste notifications, marquer lu, préférences api-docs.spec.ts Swagger UI accessible, spec chargée i18n.spec.ts Changement de langue, textes traduits docker-smoke.spec.ts docker compose up + smoke test Exemple de spec CI : // tests/e2e/ci-pipelines.spec.ts\\nimport { test, expect } from \'./fixtures\'; test.describe(\'CI Pipelines\', () => { test(\'affiche la page CI vide\', async ({ authenticatedPage }) => { await authenticatedPage.goto(\'/admin/mon-repo/ci\'); await expect(authenticatedPage.locator(\'text=Aucun pipeline\')).toBeVisible(); }); test(\'bouton trigger CI visible pour le maintainer\', async ({ authenticatedPage }) => { await authenticatedPage.goto(\'/admin/mon-repo/ci\'); await expect(authenticatedPage.locator(\'text=Lancer CI\')).toBeVisible(); });\\n});","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » 3. Tests e2e Playwright à ajouter","id":"318","title":"3. Tests e2e Playwright à ajouter"},"319":{"body":"Les tests les plus critiques vérifient que changer un setting modifie le comportement observable : Setting Action Vérification PAT révoqué Appel API 401 immédiatement ci_enabled = false Push Pas de pipeline créé trigger_on_push = false Push Pas de pipeline auto_cancel = true 2 pushes rapides 1er pipeline annulé email_on_pipeline_failure = false Pipeline échoue Pas d’email, notif in-app ok DEFAULT_LOCALE = en Charger page Texte en anglais","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » 4. Tests settings ↔ comportement","id":"319","title":"4. Tests settings ↔ comportement"},"32":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » TODO","id":"32","title":"TODO"},"320":{"body":"# Tests unitaires Rust\\ncargo test --workspace # Tests avec filtrage\\ncargo test -p gitrust-core -- ci_service\\ncargo test -p gitrust-core -- notification # Tests e2e Playwright\\nnpm run test:e2e # Tests e2e spécifiques\\nnpx playwright test tests/e2e/ci-pipelines.spec.ts\\nnpx playwright test --grep \\"notifications\\" # Lint\\ncargo clippy --workspace -- -D warnings # Format check\\ncargo fmt --all -- --check","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Commandes de test","id":"320","title":"Commandes de test"},"321":{"body":"# Script rapide de vérification pré-push\\ncargo fmt --all -- --check && \\\\\\ncargo clippy --workspace -- -D warnings && \\\\\\ncargo test --workspace && \\\\\\necho \\"All checks passed\\"","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » CI locale (exécuter avant un push)","id":"321","title":"CI locale (exécuter avant un push)"},"322":{"body":"Les tests E2E de gitrust utilisent Playwright pour piloter un navigateur Chromium contre une instance de l’application configurée avec une base de données et un répertoire de dépôts dédiés.","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Lancer les tests end-to-end (E2E)","id":"322","title":"Lancer les tests end-to-end (E2E)"},"323":{"body":"Node.js (déjà présent pour Tailwind/DaisyUI) PostgreSQL accessible en local (Docker via database/docker-compose.yml) psql, createdb, dropdb disponibles dans le PATH Chromium installé via Playwright ( npx playwright install chromium)","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Pré-requis","id":"323","title":"Pré-requis"},"324":{"body":"# Créer (ou remettre à zéro) la base de données de test\\nnpm run test:e2e:setup # Lancer tous les tests E2E\\nnpm run test:e2e # Mode debug interactif (inspecteur Playwright, pas-à-pas)\\nnpm run test:e2e:debug # Mode UI (interface graphique Playwright)\\nnpm run test:e2e:ui # Consulter le rapport HTML après exécution\\nnpm run test:e2e:report","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Commandes","id":"324","title":"Commandes"},"325":{"body":".env.test # Variables d\'environnement de test\\nplaywright.config.ts # Configuration Playwright scripts/ e2e-setup-db.sh # Crée la DB gitrust_test + nettoie depot_test e2e-server.sh # Démarre l\'app avec .env.test tests/e2e/ fixtures.ts # Fixtures partagées (loginAs, credentials) global-setup.ts # Seed : crée les utilisateurs via /register global-teardown.ts # Nettoyage post-tests auth.spec.ts # Tests d\'authentification repository.spec.ts # Tests de gestion des dépôts admin.spec.ts # Tests du panneau d\'administration navigation.spec.ts # Tests de navigation et UI","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Architecture","id":"325","title":"Architecture"},"326":{"body":"Ressource Développement Tests E2E Base de données gitrust gitrust_test Port HTTP 4000 4001 Port SSH 2222 2223 Dépôts Git ./data/repos/ ./depot_test/ Rate limiting Standard Relâché (×20) Validation email Activée Désactivée","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Isolation de l’environnement de test","id":"326","title":"Isolation de l’environnement de test"},"327":{"body":"npm run test:e2e:setup supprime puis recrée la base gitrust_test et vide depot_test/. Playwright démarre automatiquement l’application via scripts/e2e-server.sh, qui charge les variables de .env.test avant d’exécuter cargo run. Le global-setup crée les utilisateurs de test (alice, bob, charlie) en passant par le formulaire /register — approche 100% E2E, aucune insertion directe en base. Les tests s’exécutent séquentiellement (un seul worker) pour éviter les conflits sur la DB partagée. Le global-teardown est exécuté à la fin de la session.","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Fonctionnement","id":"327","title":"Fonctionnement"},"328":{"body":"Le fichier fixtures.ts fournit une fixture loginAs réutilisable dans tous les tests : import { test, expect } from \'./fixtures\'; test(\'mon test\', async ({ page, loginAs }) => { await loginAs(\'alice\'); // alice est connectée, on peut naviguer\\n}); Utilisateurs disponibles : admin, alice, bob, charlie.","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Fixtures","id":"328","title":"Fixtures"},"329":{"body":"","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Liste des tests","id":"329","title":"Liste des tests"},"33":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Gérer ses clés SSH » Gérer ses clés SSH","id":"33","title":"Gérer ses clés SSH"},"330":{"body":"Test Description login avec des identifiants valides Vérifie le login standard et la redirection vers /dashboard login avec un mauvais mot de passe Vérifie l’affichage d’un message d’erreur login avec un utilisateur inexistant Vérifie le rejet d’un username inconnu logout déconnecte l’utilisateur Vérifie la déconnexion et l’impossibilité d’accéder au dashboard accès au dashboard sans login redirige vers login Vérifie la protection des routes authentifiées option remember me est présente Vérifie la présence de la checkbox remember_me formulaire d’inscription est accessible Vérifie la présence de tous les champs du formulaire inscription avec username déjà pris échoue Vérifie l’unicité des usernames inscription avec mots de passe différents échoue Vérifie la validation de confirmation du mot de passe","breadcrumbs":"Guides pratiques » Lancer les tests E2E » auth.spec.ts — Authentification","id":"330","title":"auth.spec.ts — Authentification"},"331":{"body":"Test Description créer un dépôt avec nom et description Crée un dépôt complet et vérifie la redirection créer un dépôt sans description Vérifie que la description est optionnelle créer un dépôt avec un nom déjà pris échoue Vérifie l’unicité des slugs par utilisateur le formulaire de création nécessite un login Vérifie la protection de la route /new le dashboard liste les dépôts de l’utilisateur Vérifie l’affichage des dépôts sur le dashboard un dépôt public est accessible sans login Vérifie l’accès anonyme aux dépôts publics","breadcrumbs":"Guides pratiques » Lancer les tests E2E » repository.spec.ts — Gestion des dépôts","id":"331","title":"repository.spec.ts — Gestion des dépôts"},"332":{"body":"Test Description l’admin peut accéder au panneau d’administration Vérifie l’accès admin à /admin un utilisateur normal ne peut pas accéder à l’admin Vérifie le contrôle d’accès lister les utilisateurs Vérifie l’affichage de la liste des utilisateurs créer un nouvel utilisateur via l’admin Teste le formulaire de création d’utilisateur admin créer un utilisateur avec un username déjà pris échoue Vérifie la gestion des doublons côté admin les liens du menu admin sont présents Vérifie la navigation du panneau admin","breadcrumbs":"Guides pratiques » Lancer les tests E2E » admin.spec.ts — Administration","id":"332","title":"admin.spec.ts — Administration"},"333":{"body":"Test Description la page de login est accessible Vérifie le rendu de la page de login la navbar est présente après login Vérifie la présence de la barre de navigation le sidebar est présent après login Vérifie la présence du menu latéral le lien vers le dashboard fonctionne Vérifie la navigation vers le dashboard le lien vers la création de dépôt fonctionne Vérifie le lien /new la page utilise le thème DaisyUI Vérifie la présence de l’attribut data-theme","breadcrumbs":"Guides pratiques » Lancer les tests E2E » navigation.spec.ts — Navigation et UI","id":"333","title":"navigation.spec.ts — Navigation et UI"},"334":{"body":"Créer un fichier tests/e2e/mon-module.spec.ts Importer les fixtures : import { test, expect } from \'./fixtures\'; Utiliser loginAs pour les tests nécessitant une authentification Lancer avec npm run test:e2e ou cibler le fichier : npx playwright test mon-module","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Ajouter un nouveau test","id":"334","title":"Ajouter un nouveau test"},"335":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Ajouter une route web » Ajouter une route web","id":"335","title":"Ajouter une route web"},"336":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Ajouter une route web » TODO","id":"336","title":"TODO"},"337":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Ajouter un service métier » Ajouter un service métier","id":"337","title":"Ajouter un service métier"},"338":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Ajouter un service métier » TODO","id":"338","title":"TODO"},"339":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Ajouter une migration de base de données » Ajouter une migration de base de données","id":"339","title":"Ajouter une migration de base de données"},"34":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Gérer ses clés SSH » TODO","id":"34","title":"TODO"},"340":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Ajouter une migration de base de données » TODO","id":"340","title":"TODO"},"341":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Implémenter des webhooks » Implémenter des webhooks","id":"341","title":"Implémenter des webhooks"},"342":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Implémenter des webhooks » TODO","id":"342","title":"TODO"},"343":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Implémenter un endpoint API » Implémenter un endpoint API","id":"343","title":"Implémenter un endpoint API"},"344":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Implémenter un endpoint API » TODO","id":"344","title":"TODO"},"345":{"body":"Référence du flux d’import de dépôts externes dans gitrust : rôle de la base de données, schéma de séquence complet et pistes d’optimisation.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » Importer un dépôt externe","id":"345","title":"Importer un dépôt externe"},"346":{"body":"Pendant un import, la DB sert quatre fonctions distinctes : Rôle Table Fréquence File d’attente persistante import_jobs 1 INSERT à la création Suivi d’état pour l’UI import_jobs 1 UPDATE toutes les ~1.5 s Enregistrement final du dépôt repositories + resources 2 INSERT à la fin Journal d’audit audit_log 1 INSERT à la fin Le clone lui-même ne passe jamais par la DB : seuls les métadonnées et compteurs de progression y transitent. Les objets Git sont écrits directement sur disque dans {GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 1. Rôle de la base de données","id":"346","title":"1. Rôle de la base de données"},"347":{"body":"Reprise après redémarrage : le serveur peut crasher pendant un clone de plusieurs minutes. La table permet de marquer ces jobs comme failed au redémarrage. SSE : l’UI lit la progression via un endpoint SSE qui interroge la DB toutes les 2 s. Sans DB, il faudrait un canal in-memory plus un mécanisme de routage vers le bon client. Multi-navigateurs : si l’utilisateur ferme l’onglet puis le rouvre, il retrouve l’état exact du job. Audit / historique : conservation des imports passés avec leurs statistiques.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » Pourquoi persister l’état ?","id":"347","title":"Pourquoi persister l’état ?"},"348":{"body":"sequenceDiagram autonumber participant UI as Navigateur participant H as Handler HTTP participant Svc as ImportService participant Chan as mpsc Channel participant W as ImportWorker participant G as git2 (libgit2) participant DB as PostgreSQL participant FS as Disque UI->>H: POST /import<br/>(url, slug, pat) H->>Svc: create_job Svc->>DB: INSERT import_jobs (pending) H->>Chan: try_send(ImportTask+PAT) H-->>UI: 302 /imports/{id} UI->>H: GET /imports/{id}/stream (SSE) Note over UI,H: EventSource ouvert Chan->>W: ImportTask W->>Svc: mark_running Svc->>DB: SELECT import_jobs<br/>UPDATE status=running W->>G: RepoBuilder.bare(true).clone() G->>FS: init_bare + fetch loop callbacks transfer_progress (flood) G-->>W: stats (objets/bytes) alt throttle 1500 ms écoulé W->>Svc: update_progress (tokio::spawn) Svc->>DB: SELECT + UPDATE import_jobs else dans le throttle W--xW: ignore end end loop toutes les 2 s H->>DB: SELECT import_jobs WHERE id=? DB-->>H: état courant H-->>UI: SSE event (JSON) UI->>UI: bar.value = percent end G-->>FS: objets écrits G-->>W: Ok W->>Svc: check cancel (SELECT import_jobs) W->>Svc: update_progress (Finalizing) Svc->>DB: SELECT + UPDATE W->>RepositoryService: create RepositoryService->>DB: INSERT resources<br/>INSERT repositories W->>DB: UPDATE repositories<br/>(import_source_url, is_empty=false) W->>Svc: mark_success Svc->>DB: SELECT + UPDATE import_jobs<br/>(status=success, duration) W->>AuditService: log REPO_IMPORTED AuditService->>DB: INSERT audit_log H->>DB: SELECT (prochain tick SSE) H-->>UI: terminal=true UI->>UI: window.location.reload()","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 2. Schéma du flux actuel","id":"348","title":"2. Schéma du flux actuel"},"349":{"body":"Pour un clone de 90 secondes avec throttle 1500 ms : Étape Opérations DB Cumul create_job 1 INSERT 1 mark_running 1 SELECT + 1 UPDATE 3 update_progress pendant clone ~60 x (1 SELECT + 1 UPDATE) 123 check cancel 1 SELECT 124 update_progress finalizing 1 SELECT + 1 UPDATE 126 RepositoryService::create 2 INSERT (repo + resource) 128 update repositories 1 UPDATE 129 mark_success 1 SELECT + 1 UPDATE 131 audit log 1 INSERT 132 SSE stream (45 ticks à 2 s) 45 SELECT 177 ~177 requêtes pour un import, dont 120+ sont des progress updates.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 3. Coût DB par import","id":"349","title":"3. Coût DB par import"},"35":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Configurer la double authentification (2FA) » Configurer la double authentification (2FA)","id":"35","title":"Configurer la double authentification (2FA)"},"350":{"body":"","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4. Pistes d’optimisation (sans changer libgit2)","id":"350","title":"4. Pistes d’optimisation (sans changer libgit2)"},"351":{"body":"update_progress fait actuellement load_model (SELECT) puis active.update(db) (UPDATE + RETURNING). Le SELECT est redondant : on connaît l’ID, on veut juste patcher 4 colonnes. Gain : divise par 2 les requêtes de progression (~60 requêtes en moins pour un clone de 90 s). Refonte suggérée avec UpdateMany (pattern déjà utilisé dans ci_service.rs::cancel_running_pipelines) : #![allow(unused)] fn main() {\\nimport_job::Entity::update_many() .col_expr(Column::ReceivedObjects, Expr::value(received as i32)) .col_expr(Column::TotalObjects, Expr::value(total as i32)) .col_expr(Column::ReceivedBytes, Expr::value(bytes as i64)) .col_expr(Column::Phase, Expr::value(phase.as_str())) .col_expr(Column::UpdatedAt, Expr::value(Utc::now())) .filter(Column::Id.eq(job_id)) .exec(db) .await?; } Même principe pour mark_running, mark_success, mark_failed, mark_cancelled → toutes divisent leurs aller-retours DB par 2.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4.1 Éliminer le SELECT avant UPDATE dans update_progress","id":"351","title":"4.1 Éliminer le SELECT avant UPDATE dans update_progress"},"352":{"body":"Plan alternatif : le callback écrit simplement dans un tokio::sync::watch<TransferStats> (en mémoire, zéro DB). Une tâche dédiée consomme ce channel et UPDATE la DB à 1 Hz seulement. flowchart LR G[git2 callback] -->|watch::send<br/>très haute fréquence| W[watch channel] W --> T[Tâche update<br/>ticker 1 Hz] T -->|1 UPDATE / s| DB Gains : 1 seul émetteur DB au lieu de N tokio::spawn concurrents → zéro contention sur le pool Fréquence déterministe (1 Hz) indépendante de la vitesse réseau Code plus clair (la tâche est async, on peut await sans détour)","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4.2 Downsampler la progression dans le worker (dédié)","id":"352","title":"4.2 Downsampler la progression dans le worker (dédié)"},"353":{"body":"ActiveModel::update(db) renvoie le modèle complet via ... RETURNING *. Pour les progress updates, on n’utilise pas le retour. UpdateMany::exec n’émet pas de RETURNING → moins de bytes sur le wire, moins de désérialisation.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4.3 Supprimer le RETURNING implicite de SeaORM","id":"353","title":"4.3 Supprimer le RETURNING implicite de SeaORM"},"354":{"body":"Aujourd’hui le worker partage le pool principal avec les handlers HTTP. Un pool de 4-8 connexions dédié au worker éviterait qu’un import sature le pool et fasse timeouter les requêtes utilisateur.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4.4 Pool DB dédié pour le worker","id":"354","title":"4.4 Pool DB dédié pour le worker"},"355":{"body":"Le SSE SELECT toutes les 2 s même quand rien ne change. Alternative : PostgreSQL LISTEN/NOTIFY sur une chaîne import_job_{uuid}. Chaque UPDATE émet un NOTIFY, la connexion SSE fait LISTEN → push direct, zéro polling. Coût : nécessite une connexion DB dédiée par SSE (LISTEN est stateful). Compromis à évaluer.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4.5 Debouncer le SSE côté serveur","id":"355","title":"4.5 Debouncer le SSE côté serveur"},"356":{"body":"Indépendant des optimisations DB mais de loin le plus gros gain. libgit2 est structurellement 2-5x plus lent que git CLI sur gros clones HTTPS (pas de multiplexage, résolution de deltas mono-threadée, etc.). flowchart TB subgraph Actuel[Flux actuel — libgit2] A1[RepoBuilder::clone] --> A2[libgit2: fetch + resolve] A2 -->|lent 2-5x| A3[bare repo] end subgraph Cible[Flux optimisé — git CLI] B1[Command::new git] --> B2[git clone --bare --progress] B2 -->|stderr| B3[Parser regex<br/>Receiving objects: X%] B3 --> B4[update watch channel] B2 -->|vitesse native| B5[bare repo] end Avantages : Vitesse native (parité avec git CLI) Progression native via stderr Receiving objects: 42% (368/876), 1.10 MiB | 2.05 MiB/s HEAD correctement positionné (plus besoin du workaround RepoBuilder) Moins de dépendance sur libgit2 pour le cas du clone initial Contrepartie : binaire git requis sur le serveur (déjà le cas — utilisé par SbomService::git_archive).","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 5. Optimisation majeure : shell-out vers git clone --bare","id":"356","title":"5. Optimisation majeure : shell-out vers git clone --bare"},"357":{"body":"Si on voulait optimiser maintenant, ordre proposé : Shell-out git clone --bare — gain réel pour l’utilisateur (clone 3-5x plus rapide). update_many pour update_progress — divise la pression DB par 2, changement mécanique de ~20 lignes. watch channel + tâche 1 Hz — architecture plus propre, élimine les problèmes de pool. Pool DB dédié worker — filet de sécurité opérationnel. LISTEN/NOTIFY pour SSE — seulement si beaucoup de clients simultanés. Les gains 2-4 sont utiles même avec libgit2 ; le gain 1 est le plus visible pour l’utilisateur final.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 6. Priorités recommandées","id":"357","title":"6. Priorités recommandées"},"358":{"body":"Ce document décrit les interactions entre gitrust et le framework rustwarden-core, et explique comment étendre le framework côté gitrust sans modifier ses sources.","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Contribuer à rustwarden","id":"358","title":"Contribuer à rustwarden"},"359":{"body":"Service Usage dans gitrust UserService CRUD users, roles, delete_user, admin_reset_password, change_password_direct, unassign_role_from_user RoleService Liste/création/suppression roles, get_role_by_name PasswordService hash_password (async), verify_password (async), generate_secure_password ResourceService register/ unregister repos, set_public, effective_permission, find_by_type_and_id AuthService authenticate_user (login) JwtService generate_token (login) EmailValidationService Vérification email PasswordResetService Flux “mot de passe oublié” AppSettingsService get_bool pour registration_enabled","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Services framework utilisés","id":"359","title":"Services framework utilisés"},"36":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Configurer la double authentification (2FA) » TODO","id":"36","title":"TODO"},"360":{"body":"Le hook on_user_deleted dans gitrust-hooks supprime le répertoire utilisateur sur le filesystem ( repos_base_path/username/) avant la cascade DB. Appelé automatiquement par UserService::delete_user.","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Hook on_user_deleted implémenté","id":"360","title":"Hook on_user_deleted implémenté"},"361":{"body":"Ne jamais modifier crates/rustwarden-core/. Ce crate est le framework partagé. Toute extension passe par : Des wrappers côté gitrust-core (services qui délèguent au framework) Des trait impls ( RustwardenHooks dans gitrust-hooks) Des extensions via les mécanismes d’injection Axum ( Extension, State)","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Règle fondamentale","id":"361","title":"Règle fondamentale"},"362":{"body":"Tous les anciens contournements (entités directes, hash manuels) ont été remplacés par les services du framework suite à la mise à jour du 2026-03-26.","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Aucun contournement en cours","id":"362","title":"Aucun contournement en cours"},"363":{"body":"Si un service nécessaire n’existe pas dans rustwarden-core : Implémenter le service côté gitrust-core en réutilisant les primitives du framework (ex: PasswordService::hash_password pour le hashage) Si la fonctionnalité est générique et bénéficierait au framework lui-même, ouvrir une issue ou une PR upstream sur le dépôt rustwarden-core Ne pas dupliquer la logique d’auth, de session, ou de JWT — ces domaines appartiennent exclusivement au framework","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Ajouter une fonctionnalité nécessitant un service framework absent","id":"363","title":"Ajouter une fonctionnalité nécessitant un service framework absent"},"364":{"body":"Les hooks ( gitrust-hooks/src/lib.rs) implémentent RustwardenHooks et sont injectés dans le routeur Axum au démarrage : #![allow(unused)] fn main() {\\n// Dans main.rs\\nlet hooks = Arc::new(GitrustHooks::new(config.clone()));\\n// Passé via .merge_routes(app_routes(hooks))\\n// Puis disponible via axum::Extension dans les handlers } Pour réagir à un nouvel événement du framework, ajouter la méthode correspondante dans l’impl RustwardenHooks de gitrust-hooks, sans toucher au code du framework qui émet l’événement.","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Pattern d’extension via hooks","id":"364","title":"Pattern d’extension via hooks"},"365":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Passer la QA avant un merge » Passer la QA avant un merge","id":"365","title":"Passer la QA avant un merge"},"366":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Passer la QA avant un merge » TODO","id":"366","title":"TODO"},"367":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Référence","id":"367","title":"Référence"},"368":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » TODO","id":"368","title":"TODO"},"369":{"body":"Référence structurelle de gitrust : crates, modules, routes, dépendances et composants CI.","breadcrumbs":"Référence » Architecture des crates » Architecture par crates","id":"369","title":"Architecture par crates"},"37":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Créer un Personal Access Token » Créer un Personal Access Token","id":"37","title":"Créer un Personal Access Token"},"370":{"body":"graph LR RW[\\"rustwarden-core\\"] Git[\\"gitrust-git\\"] Core[\\"gitrust-core\\"] Hooks[\\"gitrust-hooks\\"] SSH[\\"gitrust-ssh\\"] Web[\\"gitrust-web\\"] Bin[\\"gitrust (binaire)\\"] Core --> RW Git -.->|\\"indépendant<br/>(git2, tokio)\\"| RW Hooks --> Core Hooks --> RW SSH --> Core SSH --> Git Web --> Core Web --> Git Web -.->|\\"CI pages\\"| Git Bin --> Core Bin --> Git Bin --> SSH Bin --> Web Bin --> Hooks Bin --> RW subgraph \\"Externes CI (Phase 5b)\\" Dagger[\\"Dagger CLI\\"] CiEng[\\"ci-engine (Python)\\"] Syft[\\"Syft\\"] DTrack[\\"Dependency-Track\\"] end Core -.->|\\"CiWorker<br/>sous-processus\\"| Dagger Dagger -.-> CiEng Core -.-> Syft Syft -.-> DTrack","breadcrumbs":"Référence » Architecture des crates » Dépendances entre crates","id":"370","title":"Dépendances entre crates"},"371":{"body":"","breadcrumbs":"Référence » Architecture des crates » Crates — Responsabilités","id":"371","title":"Crates — Responsabilités"},"372":{"body":"Cœur métier. Ne dépend que de rustwarden-core et des crates Rust standards. Module Rôle config GitrustConfig::from_env() — ports SSH, chemin repos, limites error GitrustError — erreurs domaine Git + IntoResponse HTTP roles enum Role { Reader, Developer, Maintainer, Owner } avec Ord types Newtypes validés : RepoSlug, TeamSlug, Fingerprint, TokenHash models/ Entités SeaORM : repository, ssh_key, team, team_member, team_repository_access, ci_pipeline, ci_job, ci_log, ci_config, ci_variable migrations/ Migrations SeaORM (tables gitrust) combinées avec les migrations core services/ SshKeyService, RepositoryService, TeamService, AccessService, CiService, CiVariableService, CiDetectionService, CiWorker, NotificationService dto/ Structures d’entrée/sortie pour les services","breadcrumbs":"Référence » Architecture des crates » gitrust-core","id":"372","title":"gitrust-core"},"373":{"body":"Opérations Git sur le système de fichiers. Utilise git2 (libgit2). Pas de dépendance vers la base de données. Module Rôle errors enum GitError (Git, RepoNotFound, RefNotFound, PathTraversal, …) bare_repo Init, open, delete, exists + validation chemin canonique sous base branch / tag Listing branches (BranchInfo) et tags (TagInfo, annotated/lightweight) reference resolve_ref (branch -> tag -> SHA -> revparse) tree_browser list_tree (dirs first, sorted), TreeEntry, EntryKind blob_reader read_blob -> Text/Binary, détection binaire (null bytes) commit_log list_commits (paginé), find_commit, CommitInfo readme find_readme (README.md > README > readme.md > …) pack_protocol advertise_refs, serve_pack (async, git-upload-pack/git-receive-pack)","breadcrumbs":"Référence » Architecture des crates » gitrust-git","id":"373","title":"gitrust-git"},"374":{"body":"Serveur SSH basé sur russh. Authentification par clé publique. Module (prévu) Rôle server Démarrage, génération clé hôte Ed25519 auth Authentification par fingerprint -> SshKeyService session Handler SSH (exec, shell) command_handler Parsing git-upload-pack/ git-receive-pack","breadcrumbs":"Référence » Architecture des crates » gitrust-ssh","id":"374","title":"gitrust-ssh"},"375":{"body":"Interface web SSR (Server-Side Rendering) avec Askama (templates compilés) + HTMX (interactions dynamiques). Fonctionne en mode headless() : les pages UI du framework ( rustwarden-ui) ne sont pas montées, gitrust-web réimplémente toutes les pages avec un design spécifique (sidebar contextuelle, navigation Git, DaisyUI). Architecture des routes : gitrust (port 4000)\\n├── /api/v1/auth/* ← Routes API du framework (JSON)\\n│ ├── POST /login AuthService::authenticate_user\\n│ ├── POST /register UserService::create_user\\n│ ├── POST /refresh RefreshTokenService (rotation JWT)\\n│ ├── POST /logout JwtBlacklistService\\n│ ├── GET /me Claims extraction\\n│ ├── POST /forgot-password PasswordResetService::request_reset\\n│ ├── POST /reset-password PasswordResetService::reset_password\\n│ ├── GET /verify-email/{t} EmailValidationService::verify_email\\n│ └── POST /resend-verif EmailValidationService::resend\\n│\\n├── /api/v1/* ← API REST Gitrust (JSON, auth JWT/PAT)\\n│ ├── /user, /user/repos Profil utilisateur\\n│ ├── /repos/{o}/{r} Détail dépôt, branches, tags, commits\\n│ ├── /repos/{o}/{r}/issues CRUD issues + commentaires\\n│ ├── /repos/{o}/{r}/pulls CRUD PRs + merge\\n│ └── /repos/{o}/{r}/ci/* Pipelines CI (list, trigger, cancel, logs)\\n│\\n├── /* ← Pages SSR gitrust (HTML)\\n│ ├── /login, /register Pages formulaires (design gitrust)\\n│ ├── /dashboard, /teams Pages utilisateur\\n│ ├── /settings/* Profile, SSH keys, sessions, notifications\\n│ ├── /notifications Liste notifications + SSE stream\\n│ ├── /admin/* Administration (+ admin CI)\\n│ ├── /{owner}/{repo}/* Navigation dépôt Git\\n│ └── /{owner}/{repo}/ci/* Pages CI (pipelines, logs, config, variables)\\n│\\n└── /static/* ← Assets locaux (CSS, JS, HTMX) Les routes API du framework sont montées via framework_api_routes() dans routes.rs. Elles sont utilisées par : Les liens dans les emails (vérification, reset password) Le refresh token (rotation JWT, session longue durée) L’accès programmatique (GET /me, POST /logout) Les pages SSR et les routes API coexistent : les formulaires HTML soumettent aux handlers gitrust (SSR), tandis que les services framework génèrent des liens vers les routes API. Module Rôle routes.rs Routeur principal : framework API + API REST Gitrust + pages SSR + fichiers statiques handlers/ Handlers Axum SSR (un fichier par domaine) + handlers API JSON templates.rs Structs Askama + SidebarContext + RepoNav helpers.rs require_auth, require_admin, sidebar_*, resolve_repo_access templates/ Templates HTML (Askama, extends base.html) static_files.rs ServeDir pour /static","breadcrumbs":"Référence » Architecture des crates » gitrust-web","id":"375","title":"gitrust-web"},"376":{"body":"Implémentation de RustwardenHooks pour réagir aux événements du framework. Les hooks sont injectés dans le routeur Axum via Arc<dyn RustwardenHooks> + axum::Extension (dans main.rs). Hook Action on_user_registered Crée le répertoire utilisateur sur le FS (anti path-traversal) on_user_deleted Supprime le répertoire utilisateur + bare repos sur le FS on_resource_shared Audit log si resource_type = “repository” on_resource_unshared Audit log si resource_type = “repository”","breadcrumbs":"Référence » Architecture des crates » gitrust-hooks","id":"376","title":"gitrust-hooks"},"377":{"body":"Système de notification à deux canaux : in-app (SSE temps réel + page) et email (worker SMTP du framework). Événement (pipeline échoue, PR commentée, etc.) │ ▼\\nNotificationService::notify(user_id, event_type, title, body, link) │ ├── INSERT INTO notifications (in-app) │ → broadcast::Sender → SSE /notifications/stream │ → Badge header mis à jour en temps réel (HTMX) │ └── if user.email_on_{event} = true: EmailQueueService::enqueue() (framework SMTP worker) Les préférences de notification sont par utilisateur (email on/off par type d’événement).","breadcrumbs":"Référence » Architecture des crates » Notifications","id":"377","title":"Notifications"},"378":{"body":"Système CI hybride à deux niveaux, activé via CI_ENABLED=true.","breadcrumbs":"Référence » Architecture des crates » CI/CD — Modes et composants","id":"378","title":"CI/CD — Modes et composants"},"379":{"body":"Mode Détection Exécution Easy .gitrust-ci.yml à la racine du repo Module Dagger Python générique ( ci-engine) interprète le YAML Power .dagger/ à la racine du repo dagger call -m .dagger/ exécute le module utilisateur directement Aucun Ni l’un ni l’autre Pas de CI pour ce repo","breadcrumbs":"Référence » Architecture des crates » Modes","id":"379","title":"Modes"},"38":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Créer un Personal Access Token » TODO","id":"38","title":"TODO"},"380":{"body":"git push (HTTP ou SSH) │ ▼\\nreceive-pack handler │ ├── CiDetectionService::detect(bare_repo, commit_sha) │ → Easy / Power / None │ ├── CiService::create_pipeline(repo_id, sha, mode) │ └── mpsc::Sender.send(job) ──► CiWorker (tokio::spawn) │ ├── 1. Validation statique │ Easy: schéma YAML, whitelist images/packages │ Power: analyse code .dagger/ (si activé) │ ├── 2. SBOM Gate (si CI_SBOM_ENABLED) │ syft scan → sbom.cdx.json │ → Dependency-Track (si CI_DTRACK_ENABLED) │ → PASS/FAIL selon politique │ ├── 3. Résolution variables (héritage team → repo) │ CiVariableService::resolve_for_pipeline() │ ├── 4. Exécution Dagger (isolé, timeout, cgroups) │ Easy: dagger call -m ci-engine test --profile=... │ Power: dagger call -m .dagger/ <function> │ └── 5. Rapport + audit Status, logs (broadcast SSE), ci_audit_log","breadcrumbs":"Référence » Architecture des crates » Architecture CI","id":"380","title":"Architecture CI"},"381":{"body":"Composant Rôle Variable de contrôle Dagger Engine Exécution des pipelines dans des containers isolés CI_ENABLED ci-engine (Python) Moteur générique pour Easy Mode CI_DAGGER_MODULE_PATH Syft Génération SBOM CycloneDX CI_SBOM_ENABLED Dependency-Track Analyse de vulnérabilités sur les SBOM CI_DTRACK_ENABLED","breadcrumbs":"Référence » Architecture des crates » Composants externes (tous optionnels sauf Dagger)","id":"381","title":"Composants externes (tous optionnels sauf Dagger)"},"382":{"body":"Héritage team → repo : les variables définies au niveau team sont partagées entre tous les repos de l’équipe. Le repo peut surcharger une clé team avec sa propre valeur. Les secrets sont chiffrés en base (AES-256-GCM) et masqués dans les logs ( ***).","breadcrumbs":"Référence » Architecture des crates » Variables et secrets CI","id":"382","title":"Variables et secrets CI"},"383":{"body":"Directive Scope #![forbid(unsafe_code)] gitrust-core, gitrust-web, gitrust-hooks #![deny(unsafe_code)] gitrust-git, gitrust-ssh (FFI libgit2/russh) deny(clippy::unwrap_used, expect_used, panic) Tous les crates deny(clippy::indexing_slicing) Tous les crates deny(clippy::mem_forget) Tous les crates Zeroize on drop TokenHash (ANSSI R23) RSA minimum 4096 bits SshKeyService Path traversal validation RepositoryService, gitrust-git Slug validation + noms réservés RepoSlug, TeamSlug","breadcrumbs":"Référence » Architecture des crates » Sécurité (ANSSI PA-074)","id":"383","title":"Sécurité (ANSSI PA-074)"},"384":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Services et API interne » Services et API interne","id":"384","title":"Services et API interne"},"385":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Services et API interne » TODO","id":"385","title":"TODO"},"386":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Schéma de la base de données » Schéma de la base de données","id":"386","title":"Schéma de la base de données"},"387":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Schéma de la base de données » TODO","id":"387","title":"TODO"},"388":{"body":"Ce document définit les règles de qualité et de sécurité applicables à tout le projet gitrust. Chaque lot doit satisfaire ces règles avant merge.","breadcrumbs":"Référence » Règles QA et conformité ANSSI » Règles QA & conformité ANSSI","id":"388","title":"Règles QA & conformité ANSSI"},"389":{"body":"Toute modification doit passer ces 4 gates sans erreur : Gate Commande Critère Formatage cargo fmt --all -- --check Zéro diff Linting cargo clippy --workspace -- -D warnings Zéro warning Tests unitaires cargo test --workspace 100% pass Build CSS npx tailwindcss -i static/css/input.css -o static/css/style.css --minify Si templates modifiés","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 1. Gates de compilation obligatoires","id":"389","title":"1. Gates de compilation obligatoires"},"39":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Gérer les équipes et les permissions » Gérer les équipes et les permissions","id":"39","title":"Gérer les équipes et les permissions"},"390":{"body":"Gate Outil Rôle Audit dépendances cargo audit Détection CVE dans les deps Licences & bans cargo deny check Licences compatibles, pas de crate bannie Secrets dans le code Recherche de patterns sensibles Pas de token/mot de passe en dur","breadcrumbs":"Référence » Règles QA et conformité ANSSI » Gates supplémentaires (à mettre en place)","id":"390","title":"Gates supplémentaires (à mettre en place)"},"391":{"body":"","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 2. Règles de sécurité (ANSSI PA-074)","id":"391","title":"2. Règles de sécurité (ANSSI PA-074)"},"392":{"body":"#![allow(unused)]\\n#![forbid(unsafe_code)] // core, web, hooks\\n#![deny(unsafe_code)] // git, ssh (FFI nécessaire)\\n#![deny(clippy::unwrap_used)]\\n#![deny(clippy::expect_used)]\\n#![deny(clippy::panic)]\\n#![deny(clippy::indexing_slicing)]\\n#![deny(clippy::mem_forget)] fn main() { }","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 2.1 Lints Rust obligatoires (déjà en place)","id":"392","title":"2.1 Lints Rust obligatoires (déjà en place)"},"393":{"body":"Avant toute implémentation touchant l’authentification, les secrets ou les permissions, vérifier : Secrets jamais en clair en base — hash SHA-256 ou bcrypt Secrets jamais loggés — vérifier tracing::info/debug/warn, Display et Debug impls ne révèlent pas le secret Comparaison constant-time — subtle::ConstantTimeEq pour toute validation de secret (pas de == sur des hash) Rate-limiting — endpoint d’authentification protégé CSRF — token valide sur toute action mutante (POST/PUT/DELETE) Ownership vérifiée (anti-IDOR) — le user ne peut agir que sur ses propres ressources (vérifier user_id côté serveur) Expiration obligatoire — tout token/session a une durée de vie max Audit log — création, révocation, utilisation suspecte tracées Zeroize — types sensibles implémentent Zeroize/ ZeroizeOnDrop Path traversal — validation des chemins disque (pas de .., /, \\\\)","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 2.2 Checklist sécurité par feature","id":"393","title":"2.2 Checklist sécurité par feature"},"394":{"body":"Le code utilise des commentaires // SEC-XX pour tracer les décisions de sécurité. Tout nouveau contrôle doit être marqué avec le prochain numéro disponible dans sa catégorie : Préfixe Catégorie Exemples SEC-C Cryptographie Timing attack, CSRF, PKCE SEC-H HTTP/Headers X-Forwarded-For, cookies, nonce SEC-L Logique métier Hashing, validation, defaults SEC-M Mémoire/sessions Rate-limit DoS, refresh tokens","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 2.3 Marqueurs SEC-","id":"394","title":"2.3 Marqueurs SEC-"},"395":{"body":"","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 3. Tests requis par catégorie","id":"395","title":"3. Tests requis par catégorie"},"396":{"body":"Catégorie Quand appliquer Exemples Unitaire Logique pure (validation, parsing, conversion) RepoSlug::new(\\"../evil\\") → erreur Intégration Service avec DB (CRUD, contraintes, transactions) PatService::validate token expiré → None Handler Endpoint HTTP (status, redirect, CSRF, auth) POST sans CSRF → 403 E2E Playwright Flow utilisateur complet Créer token → copier → cloner un dépôt Sécurité négatif Tout bypass imaginable Token user A sur ressource user B → 401","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 3.1 Matrice de couverture","id":"396","title":"3.1 Matrice de couverture"},"397":{"body":"Tests d’intégration sur vraie DB — pas de mocks pour la couche persistence (les mocks masquent les bugs de migration) Tests négatifs obligatoires — pour chaque chemin heureux, tester au moins : input invalide, non-authentifié, non-autorisé, expiré, révoqué Tests E2E en français — cohérent avec l’UI (locale fr-FR) Pas de sleep() dans les tests — utiliser des retry/poll avec timeout Données de test isolées — chaque test crée ses propres données (pas de dépendance sur l’ordre d’exécution)","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 3.2 Règles de tests","id":"397","title":"3.2 Règles de tests"},"398":{"body":"","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 4. Règles de code","id":"398","title":"4. Règles de code"},"399":{"body":"Ne jamais modifier crates/rustwarden-core/ Réutiliser les services framework avant d’implémenter (auth, users, sessions, ResourceService, i18n, middleware) Si un service manque, l’étendre côté gitrust (wrappers, trait impls)","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 4.1 Framework boundary","id":"399","title":"4.1 Framework boundary"},"4":{"body":"Manuel utilisateur — collaborer sur gitrust en tant que développeur Manuel d’administration — déployer et exploiter une instance Manuel développeur — contribuer au code ou consommer l’API Bibliothèque de templates — configs et scripts copiables","breadcrumbs":"Introduction » Naviguer dans la documentation","id":"4","title":"Naviguer dans la documentation"},"40":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Gérer les équipes et les permissions » TODO","id":"40","title":"TODO"},"400":{"body":"Zéro CDN — tous les CSS/JS servis depuis static/ La CSP du framework bloque les domaines externes","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 4.2 Assets","id":"400","title":"4.2 Assets"},"401":{"body":"GitrustError avec IntoResponse pour le mapping HTTP Pas de .unwrap() / .expect() / panic!() / [index] Errors utilisateur : messages génériques (pas de leak d’info interne)","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 4.3 Gestion d’erreurs","id":"401","title":"4.3 Gestion d’erreurs"},"402":{"body":"Valider les inputs utilisateur (formulaires, query params, headers) Ne pas re-valider entre services internes Newtypes avec validation à la construction ( RepoSlug, TeamSlug, Fingerprint, TokenHash)","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 4.4 Validation aux frontières","id":"402","title":"4.4 Validation aux frontières"},"403":{"body":"Avant chaque merge de lot : cargo fmt --all -- --check passe cargo clippy --workspace -- -D warnings passe cargo test --workspace — tous les tests passent Tests E2E Playwright passent ( npm run test:e2e) CSS rebuild si templates modifiés Aucun secret en clair dans le code ou les logs Checklist sécurité §2.2 validée (si applicable) Pas de modification dans crates/rustwarden-core/","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 5. Checklist pré-merge","id":"403","title":"5. Checklist pré-merge"},"404":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » API REST v1 » API REST v1","id":"404","title":"API REST v1"},"405":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » API REST v1 » TODO","id":"405","title":"TODO"},"406":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Hooks Git post-receive » Hooks Git post-receive","id":"406","title":"Hooks Git post-receive"},"407":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Hooks Git post-receive » TODO","id":"407","title":"TODO"},"408":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » API rustwarden-core » API rustwarden-core","id":"408","title":"API rustwarden-core"},"409":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » API rustwarden-core » TODO","id":"409","title":"TODO"},"41":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Ouvrir une pull request » Ouvrir une pull request","id":"41","title":"Ouvrir une pull request"},"410":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Explication","id":"410","title":"Explication"},"411":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » TODO","id":"411","title":"TODO"},"412":{"body":"Gitrust est une plateforme d’hébergement Git auto-hébergée construite sur le framework rustwarden-core. L’application expose deux points d’entrée réseau (HTTP + SSH) et persiste ses données dans PostgreSQL.","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Vue d’ensemble de l’architecture","id":"412","title":"Vue d’ensemble de l’architecture"},"413":{"body":"graph TB subgraph Clients Browser[\\"Navigateur Web\\"] GitCLI[\\"Git CLI (ssh/https)\\"] end subgraph \\"Gitrust Binary (src/main.rs)\\" Main[\\"main()\\"] end subgraph \\"Crates Gitrust\\" Web[\\"gitrust-web<br/><i>Routes HTTP, templates,<br/>handlers Axum</i>\\"] SSH[\\"gitrust-ssh<br/><i>Serveur SSH (russh),<br/>auth par clé, sessions</i>\\"] Hooks[\\"gitrust-hooks<br/><i>impl RustwardenHooks<br/>(on_user_registered, ...)</i>\\"] Core[\\"gitrust-core<br/><i>Models, services, migrations,<br/>rôles, types, DTOs</i>\\"] Git[\\"gitrust-git<br/><i>Bare repos, tree browser,<br/>pack protocol (git2)</i>\\"] end subgraph \\"Framework\\" RW[\\"rustwarden-core<br/><i>Auth, users, JWT, sessions,<br/>ResourceService, i18n</i>\\"] end subgraph \\"Stockage\\" PG[(PostgreSQL)] FS[(\\"Système de fichiers<br/>bare repos .git\\")] end subgraph \\"CI/CD (optionnel)\\" CiWorker[\\"CiWorker<br/><i>tokio::spawn, mpsc,<br/>sous-processus Dagger</i>\\"] Dagger[\\"Dagger Engine<br/><i>Containers isolés,<br/>cache, exécution</i>\\"] CiEngine[\\"ci-engine<br/><i>Module Dagger Python<br/>(Easy Mode)</i>\\"] Syft[\\"Syft (optionnel)<br/><i>Génération SBOM<br/>CycloneDX</i>\\"] DTrack[\\"Dependency-Track<br/>(optionnel)<br/><i>Analyse vulnérabilités</i>\\"] end Browser -->|HTTP :4000| Web GitCLI -->|SSH :2222| SSH GitCLI -->|HTTPS :4000| Web Main --> Web Main --> SSH Main --> Hooks Main -.->|\\"si CI_ENABLED\\"| CiWorker Web --> Core Web --> Git SSH --> Core SSH --> Git Hooks --> Core Core --> RW Core --> PG Git --> FS CiWorker --> Core CiWorker -->|\\"dagger call\\"| Dagger Dagger -->|\\"Easy Mode\\"| CiEngine Dagger -->|\\"Power Mode\\"| FS CiWorker -.->|\\"si CI_SBOM_ENABLED\\"| Syft Syft -.->|\\"si CI_DTRACK_ENABLED\\"| DTrack","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Vue d’ensemble","id":"413","title":"Vue d’ensemble"},"414":{"body":"Le diagramme suivant détaille la séquence d’initialisation depuis main() jusqu’au démarrage des serveurs HTTP et SSH. sequenceDiagram participant Main as main() participant Builder as RustwardenBuilder participant App as RustwardenApp participant Mig as AppMigrator participant DB as PostgreSQL participant SMTP as Serveur SMTP Main->>Main: GitrustConfig::from_env() Main->>Main: Arc<GitrustHooks> (hooks FS) Main->>Builder: builder().from_env() Note over Builder: Charge .env, init tracing Main->>Builder: .headless().auto_migrate(false) Main->>Builder: .merge_routes(app_routes(hooks)) Note over Builder: Routes = framework API<br/>+ pages SSR gitrust<br/>+ Extension(hooks) Main->>Builder: .build().await Builder->>DB: Connexion pool Builder->>DB: Migrations rustwarden-core Builder->>SMTP: EmailQueueProcessor.start() Note over SMTP: Worker de fond : dépile<br/>email_queue toutes les 30s Builder-->>Main: RustwardenApp Main->>Mig: run_migrations(app.database()) Mig->>DB: core_migrations() + gitrust_migrations() Note over DB: Tables: users, resources,<br/>repositories, ssh_keys,<br/>teams, team_members,<br/>team_repository_access Mig-->>Main: Ok Main->>Main: tokio::spawn(SSH server :2222) alt CI_ENABLED=true Main->>Main: CiWorker::start(config.ci) Note over Main: Vérifie dagger dans PATH<br/>Si CI_SBOM_ENABLED: vérifie syft<br/>Si CI_DTRACK_ENABLED: vérifie API DT Main->>Main: tokio::spawn(CiWorker loop) Note over Main: Écoute mpsc channel<br/>pour les jobs CI end Main->>App: app.run().await Note over App: HTTP :4000 démarre","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Démarrage de l’application","id":"414","title":"Démarrage de l’application"},"415":{"body":"","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Principes de conception","id":"415","title":"Principes de conception"},"416":{"body":"Gitrust est construit au-dessus de rustwarden-core, un framework Rust d’authentification et de gestion d’utilisateurs. Cette séparation est intentionnelle : rustwarden-core gère : auth JWT, sessions, users, roles génériques, i18n, SMTP, OAuth, audit log générique. gitrust-core gère : tout ce qui est spécifique à la forge Git — dépôts, clés SSH, équipes, permissions RBAC à 4 niveaux, CI, import de dépôts. La règle fondamentale : ne jamais modifier crates/rustwarden-core/. Toute extension passe par des wrappers, des hooks ( RustwardenHooks) ou des traits implémentés côté gitrust.","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Séparation framework / métier gitrust","id":"416","title":"Séparation framework / métier gitrust"},"417":{"body":"gitrust-web opère en mode headless() : les pages UI standard de rustwarden (login, register, settings) sont désactivées et réimplémentées entièrement dans gitrust-web/templates/. Cela permet un design cohérent (sidebar Git, DaisyUI) sans compromis avec l’UI générique du framework.","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Mode headless","id":"417","title":"Mode headless"},"418":{"body":"L’interface est rendue côté serveur via Askama (templates Rust compilés). HTMX gère les interactions dynamiques (mises à jour partielles de page, SSE pour les notifications et les logs CI). Aucun asset externe : tout CSS/JS est servi depuis static/ — imposé par la Content Security Policy du framework.","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » SSR + HTMX, zéro CDN","id":"418","title":"SSR + HTMX, zéro CDN"},"419":{"body":"gitrust-git est découplé de la base de données. Les opérations Git (navigation d’arbre, lecture de blobs, pack protocol) travaillent directement sur les bare repos ( {GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/) via libgit2. La base ne stocke que les métadonnées (nom, description, visibilité, ownership). Ce découplage permet de remplacer ou tester gitrust-git indépendamment.","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Bare repos sur le système de fichiers","id":"419","title":"Bare repos sur le système de fichiers"},"42":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Ouvrir une pull request » TODO","id":"42","title":"TODO"},"420":{"body":"Plutôt que d’implémenter un runner CI from scratch, gitrust délègue l’exécution à Dagger, qui garantit l’isolation (containers), la reproductibilité (cache) et la portabilité (local ou runner distant via SSH+rsync). Le CiWorker est une tâche Tokio dans le processus principal — pas un daemon séparé — ce qui simplifie le déploiement (un seul binaire).","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » CI hybride : Dagger comme abstraction d’exécution","id":"420","title":"CI hybride : Dagger comme abstraction d’exécution"},"421":{"body":"Référence structurelle complète (tables de modules, routes, dépendances) : developer_manual/reference/architecture-crates.md Diagrammes de séquence détaillés (clone SSH, push, permissions) : developer_manual/explanation/flux-requetes.md Règles de code et gates QA : developer_manual/reference/regles-qa-anssi.md","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Pour aller plus loin","id":"421","title":"Pour aller plus loin"},"422":{"body":"Diagrammes de séquence couvrant les opérations principales de gitrust : création de dépôt, clone et push SSH, enregistrement de clé SSH, résolution des permissions, navigation web, inscription utilisateur.","breadcrumbs":"Explication » Flux de requêtes » Flux de requêtes","id":"422","title":"Flux de requêtes"},"423":{"body":"sequenceDiagram actor User as Utilisateur participant Web as gitrust-web participant RepoSvc as RepositoryService participant ResSvc as ResourceService participant DB as PostgreSQL participant Git as gitrust-git participant FS as Système de fichiers User->>Web: POST /new {name, description} Web->>Web: Extraire user_id (session JWT) Web->>RepoSvc: create(db, owner_id, username, base_path, input) RepoSvc->>RepoSvc: RepoSlug::from_name(input.name) RepoSvc->>DB: SELECT ... WHERE owner_id AND slug DB-->>RepoSvc: None (pas de doublon) RepoSvc->>RepoSvc: compute_disk_path(base, owner, slug) Note over RepoSvc: Validation anti path-traversal RepoSvc->>ResSvc: register(db, \\"repository\\", repo_id, owner_id) ResSvc->>DB: INSERT INTO resources DB-->>ResSvc: Ok RepoSvc->>DB: INSERT INTO repositories DB-->>RepoSvc: repository::Model RepoSvc-->>Web: RepositoryOutput Web->>Git: BareRepo::init(disk_path) Git->>FS: git init --bare FS-->>Git: Ok Git-->>Web: Ok Web-->>User: 302 Redirect /{owner}/{slug}","breadcrumbs":"Explication » Flux de requêtes » 1. Création d’un dépôt (Web)","id":"423","title":"1. Création d’un dépôt (Web)"},"424":{"body":"sequenceDiagram actor Dev as Développeur participant Client as Git CLI participant SSH as gitrust-ssh participant Auth as SshKeyService participant Access as AccessService participant Git as gitrust-git participant DB as PostgreSQL participant FS as Bare repo (.git) Dev->>Client: git clone ssh://git@host:2222/alice/my-repo.git Client->>SSH: Connexion TCP :2222 SSH-->>Client: Banner SSH + échange clés Client->>SSH: Auth publickey (signature) SSH->>Auth: find_by_fingerprint(db, fingerprint) Auth->>DB: SELECT FROM ssh_keys WHERE fingerprint = ? DB-->>Auth: ssh_key::Model {user_id, ...} Auth-->>SSH: user_id SSH->>Auth: update_last_used(db, key_id) Auth->>DB: UPDATE ssh_keys SET last_used_at = now() SSH-->>Client: Auth OK Client->>SSH: exec \\"git-upload-pack \'alice/my-repo.git\'\\" SSH->>SSH: CommandHandler::parse(\\"git-upload-pack alice/my-repo.git\\") Note over SSH: Extraction owner=alice, repo=my-repo SSH->>Access: effective_role(db, user_id, repo_id) Access->>DB: Check ownership + shares + teams DB-->>Access: Role::Developer Access-->>SSH: can_read = true SSH->>Git: pack_protocol::advertise_refs(repo_path) Git->>FS: Lecture refs FS-->>Git: refs/heads/main, ... Git-->>SSH: advertise output SSH-->>Client: refs advertisement Client->>SSH: want/have negotiation SSH->>Git: pack_protocol::serve_pack(repo_path, wants, haves) Git->>FS: Pack objects FS-->>Git: pack data Git-->>SSH: pack stream SSH-->>Client: pack data Client-->>Dev: Dépôt cloné avec succès","breadcrumbs":"Explication » Flux de requêtes » 2. Clone SSH (git clone)","id":"424","title":"2. Clone SSH (git clone)"},"425":{"body":"sequenceDiagram actor Dev as Développeur participant Client as Git CLI participant SSH as gitrust-ssh participant Access as AccessService participant Git as gitrust-git participant Hooks as gitrust-hooks participant DB as PostgreSQL participant FS as Bare repo (.git) Note over Client,SSH: Session SSH déjà authentifiée Client->>SSH: exec \\"git-receive-pack \'alice/my-repo.git\'\\" SSH->>SSH: CommandHandler::parse(...) Note over SSH: Extraction owner=alice, repo=my-repo SSH->>Access: effective_role(db, user_id, repo_id) Access->>DB: Check ownership + shares + teams DB-->>Access: Role::Developer Access-->>SSH: can_push = true SSH->>Git: pack_protocol::advertise_refs(repo_path) Git->>FS: Lecture refs Git-->>SSH: refs advertisement SSH-->>Client: refs Client->>SSH: pack data + commands SSH->>Git: pack_protocol::serve_pack(repo_path, receive-pack) Git->>FS: Écriture objets + update refs FS-->>Git: Ok Git-->>SSH: Ok SSH->>DB: UPDATE repositories SET is_empty = false, updated_at = now() SSH-->>Client: Push OK Client-->>Dev: Push réussi","breadcrumbs":"Explication » Flux de requêtes » 3. Push SSH (git push)","id":"425","title":"3. Push SSH (git push)"},"426":{"body":"sequenceDiagram actor User as Utilisateur participant Web as gitrust-web participant Svc as SshKeyService participant DB as PostgreSQL User->>Web: POST /settings/keys {title, key_data} Web->>Web: Extraire user_id (session) Web->>Svc: create(db, user_id, input) Svc->>Svc: parse_public_key(key_data) Note over Svc: Extraire type + décoder base64 Svc->>Svc: validate_key_type_and_size(type, bytes) Note over Svc: ed25519 OK<br/>RSA >= 4096 bits<br/>ecdsa-p256/p384 OK Svc->>Svc: compute_fingerprint(bytes) Note over Svc: SHA256(key_bytes) -> base64-no-pad Svc->>DB: SELECT FROM ssh_keys WHERE fingerprint = ? DB-->>Svc: None (pas de doublon) Svc->>DB: INSERT INTO ssh_keys DB-->>Svc: ssh_key::Model Svc-->>Web: SshKeyOutput Web-->>User: 200 Clé ajoutée (fingerprint affiché)","breadcrumbs":"Explication » Flux de requêtes » 4. Enregistrement d’une clé SSH","id":"426","title":"4. Enregistrement d’une clé SSH"},"427":{"body":"sequenceDiagram participant Caller as Handler / SSH Session participant AS as AccessService participant RS as ResourceService participant DB as PostgreSQL Caller->>AS: effective_role(db, user_id, repo_id) AS->>RS: effective_permission(db, user_id, \\"repository\\", repo_id) RS->>DB: SELECT FROM resources WHERE type AND id DB-->>RS: resource {owner_id, is_public} alt user_id == owner_id RS-->>AS: \\"owner\\" else Share exists RS->>DB: SELECT FROM resource_shares WHERE resource AND user DB-->>RS: share {permission_level} RS-->>AS: permission_level else Resource is public RS-->>AS: \\"read\\" else No access RS-->>AS: None end AS->>AS: Role::from_permission(individual_level) AS->>DB: SELECT team_members + team_repository_access<br/>WHERE user_id AND repository_id DB-->>AS: Vec<team_permission> AS->>AS: team_role = max(team_permissions) AS->>AS: effective = max(individual_role, team_role) AS-->>Caller: Role (Reader / Developer / Maintainer / Owner)","breadcrumbs":"Explication » Flux de requêtes » 5. Résolution des permissions (AccessService)","id":"427","title":"5. Résolution des permissions (AccessService)"},"428":{"body":"sequenceDiagram actor User as Utilisateur participant Web as gitrust-web participant Ext as RepoExtractor participant Access as AccessService participant Git as gitrust-git participant DB as PostgreSQL participant FS as Bare repo User->>Web: GET /alice/my-repo/tree/main/src Web->>Ext: RepoContext::extract(owner=alice, repo=my-repo, ref=main, path=src) Ext->>DB: SELECT user WHERE username = \'alice\' DB-->>Ext: user {id} Ext->>DB: SELECT repository WHERE owner_id AND slug DB-->>Ext: repository::Model Ext->>Access: effective_role(db, visitor_id, repo_id) Access-->>Ext: Role::Reader Ext-->>Web: RepoContext {repo, role, ref, path} Web->>Git: tree_browser::list_tree(repo_path, \\"main\\", \\"src\\") Git->>FS: Resolve ref main -> commit -> tree -> src/ FS-->>Git: Vec<TreeEntry> Git-->>Web: entries (fichiers + dossiers) Web->>Git: readme::find_readme(repo_path, \\"main\\", \\"src\\") Git->>FS: Cherche README.md, README, readme.md FS-->>Git: Option<BlobContent> Git-->>Web: Option<readme_content> Web->>Web: Render template tree.html Web-->>User: HTML (arbre + README)","breadcrumbs":"Explication » Flux de requêtes » 6. Navigation dans un dépôt (Web)","id":"428","title":"6. Navigation dans un dépôt (Web)"},"429":{"body":"sequenceDiagram actor User as Nouvel utilisateur participant Web as rustwarden-core (auth) participant Hook as GitrustHooks participant DB as PostgreSQL participant FS as Système de fichiers User->>Web: POST /register {username, email, password} Web->>DB: INSERT INTO users DB-->>Web: user {id, username} Web->>Hook: on_user_registered(db, user_id, username) Hook->>Hook: Valider username (anti path-traversal) Hook->>FS: create_dir_all(repos_base_path / username) FS-->>Hook: Ok Hook-->>Web: Ok Web-->>User: 302 Redirect /login","breadcrumbs":"Explication » Flux de requêtes » 7. Inscription utilisateur + création répertoire","id":"429","title":"7. Inscription utilisateur + création répertoire"},"43":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Stratégies de fusion (ff / squash / merge commit) » Stratégies de fusion (ff / squash / merge commit)","id":"43","title":"Stratégies de fusion (ff / squash / merge commit)"},"430":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Modèle de permissions RBAC » Modèle de permissions RBAC","id":"430","title":"Modèle de permissions RBAC"},"431":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Modèle de permissions RBAC » TODO","id":"431","title":"TODO"},"432":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Fonctionnement du 2FA » Fonctionnement du 2FA","id":"432","title":"Fonctionnement du 2FA"},"433":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Fonctionnement du 2FA » TODO","id":"433","title":"TODO"},"434":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Hiérarchie des labels » Hiérarchie des labels","id":"434","title":"Hiérarchie des labels"},"435":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Hiérarchie des labels » TODO","id":"435","title":"TODO"},"436":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » CI Dagger : Easy Mode vs Power Mode » CI Dagger : Easy Mode vs Power Mode","id":"436","title":"CI Dagger : Easy Mode vs Power Mode"},"437":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » CI Dagger : Easy Mode vs Power Mode » TODO","id":"437","title":"TODO"},"438":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Décisions UI (HTMX, DaisyUI) » Décisions UI (HTMX, DaisyUI)","id":"438","title":"Décisions UI (HTMX, DaisyUI)"},"439":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Décisions UI (HTMX, DaisyUI) » TODO","id":"439","title":"TODO"},"44":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Stratégies de fusion (ff / squash / merge commit) » TODO","id":"44","title":"TODO"},"440":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Patron worker async » Patron worker async","id":"440","title":"Patron worker async"},"441":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Patron worker async » TODO","id":"441","title":"TODO"},"442":{"body":"Bienvenue dans l’atelier gitrust. Chaque fichier ici est standalone et copiable tel quel — un fichier, un cas d’usage. Les commentaires internes suffisent à l’adapter. Pour les explications pédagogiques, référez-vous aux manuels qui pointent vers ces templates. Convention : copiez le fichier qui correspond à votre cas, adaptez les valeurs marquées CHANGE_ME, puis supprimez les commentaires si vous le souhaitez. Ne modifiez pas les fichiers dans ce dépôt — travaillez toujours sur une copie locale.","breadcrumbs":"Catalogue des templates » Bibliothèque de templates gitrust","id":"442","title":"Bibliothèque de templates gitrust"},"443":{"body":"Fichier Cas d’usage env/dev-local.env Instance de développement local sur localhost:4000 — PostgreSQL local, pas de TLS, debug activé env/production-mono-machine.env Production mono-machine derrière reverse-proxy — PostgreSQL, SMTP, Redis sessions, TLS délégué env/production-ci-heavy.env Production avec CI runners distants intensifs — tuning pool de connexions, rate limiting ajusté env/tests-e2e.env Environnement E2E Playwright — base éphémère, seed de données, SMTP mock","breadcrumbs":"Catalogue des templates » Fichiers d’environnement ( env/)","id":"443","title":"Fichiers d’environnement ( env/)"},"444":{"body":"Fichier Cas d’usage docker/docker-compose.minimal.yml Stack minimale : gitrust + PostgreSQL uniquement — idéale pour l’évaluation et les tutoriels docker/docker-compose.production.yml Stack production : gitrust + PostgreSQL + Redis sessions + relay SMTP Postfix docker/docker-compose.with-ci-runner.yml Stack production + CI runner Dagger en sidecar — pour instances avec builds fréquents docker/podman-quadlet.container Alternative Podman Quadlet — déploiement rootless systemd-native sans Docker daemon","breadcrumbs":"Catalogue des templates » Stacks Docker ( docker/)","id":"444","title":"Stacks Docker ( docker/)"},"445":{"body":"Fichier Cas d’usage reverse-proxy/nginx-tls.conf Nginx avec TLS Let’s Encrypt — virtual host gitrust, headers de sécurité, proxy WebSocket SSE reverse-proxy/caddy-Caddyfile Caddyfile — TLS automatique, configuration minimale, idéal pour les petites instances reverse-proxy/traefik-dynamic.yml Traefik config dynamique — intégration labels Docker, middlewares rate-limit et auth","breadcrumbs":"Catalogue des templates » Reverse-proxy ( reverse-proxy/)","id":"445","title":"Reverse-proxy ( reverse-proxy/)"},"446":{"body":"Fichier Cas d’usage systemd/gitrust.service Service systemd avec hardening AppArmor/seccomp — pour déploiement binaire natif sans Docker systemd/gitrust-backup.timer Timer systemd de sauvegarde quotidienne — déclenche backup.sh à 2h00 avec journalisation","breadcrumbs":"Catalogue des templates » Systemd ( systemd/)","id":"446","title":"Systemd ( systemd/)"},"447":{"body":"Fichier Cas d’usage ci/rust.gitrust-ci.yml Pipeline CI pour projet Rust — fmt, clippy, test, audit de dépendances, SBOM ci/go.gitrust-ci.yml Pipeline CI pour projet Go — vet, staticcheck, test, build multi-arch ci/python.gitrust-ci.yml Pipeline CI pour projet Python — ruff, mypy, pytest, packaging wheel ci/node.gitrust-ci.yml Pipeline CI pour projet Node.js — ESLint, Vitest, build, audit npm ci/dagger-power-mode/dagger.json Squelette Dagger Power Mode — module Go minimal à étendre pour pipelines complexes ci/dagger-power-mode/main.go Module Dagger Go — fonctions build/test/publish prêtes à adapter","breadcrumbs":"Catalogue des templates » Configurations CI ( .gitrust-ci.yml) ( ci/)","id":"447","title":"Configurations CI ( .gitrust-ci.yml) ( ci/)"},"448":{"body":"Fichier Cas d’usage backup/backup.sh Sauvegarde complète — pg_dump + rsync des dépôts bare + copie des clés SSH host backup/restore.sh Restauration complète depuis une archive de sauvegarde — avec vérification d’intégrité","breadcrumbs":"Catalogue des templates » Scripts de sauvegarde et restauration ( backup/)","id":"448","title":"Scripts de sauvegarde et restauration ( backup/)"},"449":{"body":"Ces exemples illustrent l’authentification par Personal Access Token (PAT) et les opérations CRUD de base sur l’API REST gitrust v1. Fichier Cas d’usage api-clients/python-create-repo.py Client Python — créer un dépôt via l’API v1 avec httpx et PAT api-clients/rust-list-repos.rs Client Rust — lister les dépôts avec pagination via reqwest et PAT api-clients/curl-pat-auth.sh Shell curl — exemples d’authentification PAT, GET/POST/DELETE sur les endpoints principaux","breadcrumbs":"Catalogue des templates » Clients API d’exemple ( api-clients/)","id":"449","title":"Clients API d’exemple ( api-clients/)"},"45":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Utiliser les labels et les issues » Utiliser les labels et les issues","id":"45","title":"Utiliser les labels et les issues"},"450":{"body":"Fichier Cas d’usage migration/from-gitea.sh Import en masse depuis Gitea — dépôts, membres, issues via le worker d’import gitrust migration/from-forgejo.sh Import en masse depuis Forgejo — même mécanique, adaptée à l’API Forgejo","breadcrumbs":"Catalogue des templates » Scripts de migration ( migration/)","id":"450","title":"Scripts de migration ( migration/)"},"451":{"body":"Les manuels narratifs pointent vers ces fichiers depuis leurs sections how-to. Par exemple : administration_manual/how-to/configurer-smtp.md → « Copiez template/env/production-mono-machine.env puis… » administration_manual/tutorials/01-installation-docker.md → « La stack s’appuie sur template/docker/docker-compose.minimal.yml » developer_manual/how-to/implementer-endpoint-api.md → « Testez avec template/api-clients/curl-pat-auth.sh » Les templates ne contiennent pas d’explication pédagogique — tout le contexte se trouve dans les manuels.","breadcrumbs":"Catalogue des templates » Comment utiliser ces templates depuis les manuels","id":"451","title":"Comment utiliser ces templates depuis les manuels"},"46":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Utiliser les labels et les issues » TODO","id":"46","title":"TODO"},"47":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Importer un dépôt externe » Importer un dépôt externe","id":"47","title":"Importer un dépôt externe"},"48":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Importer un dépôt externe » TODO","id":"48","title":"TODO"},"49":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Consulter le SBOM d\'un dépôt » Consulter le SBOM d’un dépôt","id":"49","title":"Consulter le SBOM d’un dépôt"},"5":{"body":"Ce manuel t’accompagne depuis ta première connexion à une instance gitrust jusqu’à l’autonomie complète : pousser du code, collaborer via les pull requests, gérer les issues et automatiser tes workflows avec la CI intégrée. Tu n’as pas besoin d’administrer ni de comprendre l’architecture interne — ce manuel suppose seulement que tu sais utiliser Git en ligne de commande.","breadcrumbs":"Vue d\'ensemble » Manuel utilisateur","id":"5","title":"Manuel utilisateur"},"50":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Consulter le SBOM d\'un dépôt » TODO","id":"50","title":"TODO"},"51":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Référence","id":"51","title":"Référence"},"52":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » TODO","id":"52","title":"TODO"},"53":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Modèle de permissions (4 rôles) » Modèle de permissions (4 rôles)","id":"53","title":"Modèle de permissions (4 rôles)"},"54":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Modèle de permissions (4 rôles) » TODO","id":"54","title":"TODO"},"55":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » API REST v1 » API REST v1","id":"55","title":"API REST v1"},"56":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » API REST v1 » TODO","id":"56","title":"TODO"},"57":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Schéma du fichier .gitrust-ci.yml » Schéma du fichier .gitrust-ci.yml","id":"57","title":"Schéma du fichier .gitrust-ci.yml"},"58":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Schéma du fichier .gitrust-ci.yml » TODO","id":"58","title":"TODO"},"59":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Markdown et syntaxe supportée » Markdown et syntaxe supportée","id":"59","title":"Markdown et syntaxe supportée"},"6":{"body":"Le manuel est structuré comme un parcours progressif de 4 tutoriels. Chaque tutoriel te laisse dans un état stable, vérifié, avant de passer au suivant. L’aide fournie recule d’un cran à chaque étape (du copier-coller intégral vers la composition autonome). graph LR A[Compte créé] --> B[01-premier-pas<br/>20 min] B --> C[02-cloner-pousser<br/>25 min] C --> D[03-collaborer<br/>25 min] D --> E[04-automatiser-ci<br/>20 min] E --> F[Utilisateur autonome] Checkpoint de parcours : avant de passer au tutoriel 02, tu dois pouvoir te connecter à gitrust, voir ton dépôt dans l’interface et l’accès SSH configuré. Si ce n’est pas le cas, relis le tutoriel 01. Checkpoint de parcours : avant le tutoriel 03, tu dois avoir poussé au moins un commit sur ta branche via SSH. Si ce n’est pas le cas, relis le tutoriel 02. Checkpoint de parcours : avant le tutoriel 04, tu dois avoir ouvert et mergé une pull request. Si ce n’est pas le cas, relis le tutoriel 03.","breadcrumbs":"Vue d\'ensemble » Parcours d’apprentissage","id":"6","title":"Parcours d’apprentissage"},"60":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Markdown et syntaxe supportée » TODO","id":"60","title":"TODO"},"61":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Notifications » Notifications","id":"61","title":"Notifications"},"62":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Notifications » TODO","id":"62","title":"TODO"},"63":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Explication","id":"63","title":"Explication"},"64":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » TODO","id":"64","title":"TODO"},"65":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Modèle de collaboration sur gitrust » Modèle de collaboration sur gitrust","id":"65","title":"Modèle de collaboration sur gitrust"},"66":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Modèle de collaboration sur gitrust » TODO","id":"66","title":"TODO"},"67":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Sécurité côté utilisateur » Sécurité côté utilisateur","id":"67","title":"Sécurité côté utilisateur"},"68":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Sécurité côté utilisateur » TODO","id":"68","title":"TODO"},"69":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Cycle de vie d\'une pull request » Cycle de vie d’une pull request","id":"69","title":"Cycle de vie d’une pull request"},"7":{"body":"Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suis-les dans l’ordre — chacun suppose le précédent complété. 01 — Premiers pas : 2FA, clé SSH, premier dépôt — ~20 min 02 — Cloner et pousser du code — ~25 min 03 — Collaborer : équipes, issues, pull requests — ~25 min 04 — Automatiser avec la CI — ~20 min","breadcrumbs":"Vue d\'ensemble » Tutoriels — apprendre en faisant","id":"7","title":"Tutoriels — apprendre en faisant"},"70":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Cycle de vie d\'une pull request » TODO","id":"70","title":"TODO"},"71":{"body":"Ce manuel s’adresse aux opérateurs et self-hosters qui déploient, configurent et maintiennent une instance gitrust en production. Il couvre l’intégralité du cycle de vie d’une instance : premier démarrage, mise en production, sauvegarde, mise à jour et dépannage. Il suppose des connaissances en administration Linux, en réseau et en TLS — il n’explique pas ces prérequis.","breadcrumbs":"Vue d\'ensemble » Manuel d’administration","id":"71","title":"Manuel d’administration"},"72":{"body":"Le parcours administrateur est structuré en 4 tutoriels qui représentent environ 3 heures au total. L’étayage est dégressif : le premier tutoriel fournit tout clé en main, le dernier demande de composer soi-même à partir des recettes disponibles. graph LR A[VM prête<br/>Docker installé] --> B[01-installation-docker<br/>30 min] B --> C[02-installation-systemd<br/>45 min] C --> D[03-premier-demarrage<br/>20 min] D --> E[04-mise-en-production<br/>90 min] E --> F[Admin opérationnel] Checkpoint de parcours : avant de passer au tutoriel 02, vous devez avoir une instance gitrust accessible sur http://localhost:4000 avec un compte administrateur fonctionnel. Si ce n’est pas le cas, relisez le tutoriel 01. Checkpoint de parcours : avant le tutoriel 04, vous devez avoir une instance démarrée avec une configuration SMTP et un reverse-proxy TLS opérationnel. Si ce n’est pas le cas, relisez le tutoriel 03.","breadcrumbs":"Vue d\'ensemble » Parcours d’apprentissage","id":"72","title":"Parcours d’apprentissage"},"73":{"body":"Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété. 01 — Installation Docker : stack docker-compose complète — ~30 min 02 — Installation systemd : binaire natif + service — ~45 min 03 — Premier démarrage : admin bootstrap, migrations — ~20 min 04 — Mise en production — ~90 min","breadcrumbs":"Vue d\'ensemble » Tutoriels — apprendre en faisant","id":"73","title":"Tutoriels — apprendre en faisant"},"74":{"body":"Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin. Sauvegarder et restaurer Mettre à jour l’instance Configurer SMTP Configurer OAuth (Google, GitHub) Configurer un CI runner distant Intégrer Dependency-Track (SBOM) Durcir avec Fail2ban Tuner le rate limiting Forcer la 2FA globalement Dépanner SSH Dépanner la CI Gérer les utilisateurs depuis /admin Auditer l’instance","breadcrumbs":"Vue d\'ensemble » How-to — recettes pour les tâches courantes","id":"74","title":"How-to — recettes pour les tâches courantes"},"75":{"body":"La référence documente de façon exhaustive les paramètres, schémas et comportements. Elle est destinée à la consultation ponctuelle. Variables d’environnement (.env) Paramètres dynamiques (app_settings) Schéma de base de données Ports et services (4000 HTTP, 2222 SSH, 5432 PG) Conformité ANSSI PA-074","breadcrumbs":"Vue d\'ensemble » Référence — informations techniques exactes","id":"75","title":"Référence — informations techniques exactes"},"76":{"body":"Les explanations construisent les modèles mentaux nécessaires pour prendre de bonnes décisions d’exploitation. Lisez-les quand vous voulez comprendre les choix d’architecture, pas seulement les appliquer. Architecture globale de gitrust Modèle de déploiement : mono-machine vs HA CI Dagger : pourquoi et comment Stratégie de sauvegarde 3-2-1 adaptée gitrust","breadcrumbs":"Vue d\'ensemble » Explication — comprendre le pourquoi","id":"76","title":"Explication — comprendre le pourquoi"},"77":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » Tutoriels","id":"77","title":"Tutoriels"},"78":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » TODO","id":"78","title":"TODO"},"79":{"body":"","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Installation Docker : démarrez gitrust en 30 minutes avec docker-compose","id":"79","title":"Installation Docker : démarrez gitrust en 30 minutes avec docker-compose"},"8":{"body":"Les how-to répondent à « comment faire X » sans explication de fond. Tu peux les consulter dans n’importe quel ordre selon ton besoin immédiat. Ces guides supposent que tu as suivi le parcours tutoriels. Ils ne répètent pas les étapes de base. Gérer ses clés SSH Configurer la 2FA Créer un Personal Access Token Gérer les équipes et permissions Ouvrir une pull request Fusionner : fast-forward, squash, merge commit Utiliser les labels hiérarchiques Importer un dépôt externe Consulter le SBOM de ton projet","breadcrumbs":"Vue d\'ensemble » How-to — recettes pour les tâches courantes","id":"8","title":"How-to — recettes pour les tâches courantes"},"80":{"body":"À la fin de ce tutoriel, vous saurez : O1. Déployer la stack gitrust minimale (application + PostgreSQL) avec docker-compose O2. Vérifier que les trois services démarrent correctement et sont en bonne santé O3. Créer le premier compte administrateur et accéder à l’interface web","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Objectifs","id":"80","title":"Objectifs"},"81":{"body":"Technique : une VM ou machine Linux (Debian 12 / Ubuntu 22.04 ou supérieur), Docker Engine ≥ 24 installé ( docker --version répond), Docker Compose plugin installé ( docker compose version répond), ports 4000 et 2222 libres sur la machine Pédagogique : aucun tutoriel gitrust préalable requis — c’est le point de départ du parcours administrateur Temps estimé : ~30 minutes","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Pré-requis","id":"81","title":"Pré-requis"},"82":{"body":"Avant de lancer la moindre commande, comprenons ce que docker-compose va orchestrer et pourquoi. gitrust est composé de trois services principaux dans sa configuration minimale. Pensez-y comme trois pièces d’un appartement qui s’appellent entre elles via un réseau interne : graph TB subgraph internet [\\"Internet / votre navigateur\\"] B[Navigateur :4000] S[Client git/SSH :2222] end subgraph docker [\\"Réseau Docker gitrust_net\\"] A[\\"gitrust-app<br/>(Rust, port 4000 + 2222)<br/>Lit la config depuis .env\\"] P[\\"postgres<br/>(PostgreSQL 16, port 5432)<br/>Stocke comptes, dépôts, issues\\"] R[\\"redis (optionnel)<br/>(Redis 7, port 6379)<br/>Sessions web + cache\\"] end B -->|HTTP| A S -->|SSH| A A -->|SQL| P A -.->|sessions| R gitrust-app est le cœur : serveur HTTP ( :4000) + serveur SSH ( :2222) compilé en Rust. Il lit sa configuration depuis un fichier .env et écrit les dépôts Git bare sur un volume Docker. PostgreSQL stocke toutes les données relationnelles (comptes, organisations, dépôts, issues, PRs). Redis est optionnel dans la configuration minimale — il gère les sessions web et le cache quand il est présent. Dans ce tutoriel, nous utilisons la stack minimale (app + PostgreSQL) suffisante pour évaluer gitrust et démarrer une petite instance. La stack production avec Redis et SMTP se trouve dans template/docker/docker-compose.production.yml.","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Vue d’ensemble","id":"82","title":"Vue d’ensemble"},"83":{"body":"Créez un répertoire dédié à votre instance gitrust et positionnez-vous dedans : mkdir -p /opt/gitrust && cd /opt/gitrust Créez le fichier de configuration .env avec les valeurs minimales. Changez impérativement les valeurs marquées CHANGE_ME : cat > .env << \'EOF\'\\n# === gitrust — configuration minimale ===\\n# Changez toutes les valeurs CHANGE_ME avant de démarrer # Clé secrète de l\'application (générez avec : openssl rand -hex 32)\\nSECRET_KEY=CHANGE_ME_openssl_rand_hex_32 # URL publique de l\'instance (sans slash final)\\nAPP_URL=http://localhost:4000 # Base de données PostgreSQL\\nDATABASE_URL=postgres://gitrust:CHANGE_ME_db_password@postgres:5432/gitrust\\nPOSTGRES_USER=gitrust\\nPOSTGRES_PASSWORD=CHANGE_ME_db_password\\nPOSTGRES_DB=gitrust # Serveur SSH (port exposé à l\'extérieur)\\nSSH_PORT=2222 # Mode de l\'application\\nRUST_LOG=info\\nAPP_ENV=production\\nEOF Générez maintenant une clé secrète robuste et remplacez la valeur dans .env : SECRET=$(openssl rand -hex 32)\\nsed -i \\"s/CHANGE_ME_openssl_rand_hex_32/$SECRET/\\" .env Choisissez également un mot de passe pour PostgreSQL et remplacez les deux occurrences : DB_PASS=$(openssl rand -hex 16)\\nsed -i \\"s/CHANGE_ME_db_password/$DB_PASS/g\\" .env Sortie attendue (vérification) : grep SECRET_KEY .env\\n# → SECRET_KEY=4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a Checkpoint : exécutez grep CHANGE_ME .env — la commande doit ne rien retourner. Si elle retourne des lignes, ces valeurs n’ont pas été remplacées et le démarrage échouera.","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Étape 1 : Créez le répertoire de travail et le fichier de configuration","id":"83","title":"Étape 1 : Créez le répertoire de travail et le fichier de configuration"},"84":{"body":"Créez le fichier docker-compose.yml suivant dans /opt/gitrust/. Ce contenu correspond à la stack minimale gitrust — il est reproduit ici intégralement pour que vous puissiez démarrer sans dépendance externe : cat > docker-compose.yml << \'EOF\'\\n# docker-compose.minimal.yml — Stack gitrust minimale (app + PostgreSQL)\\n# Cas d\'usage : évaluation, développement, petite instance (<10 utilisateurs)\\n# Pour la production : utilisez docker-compose.production.yml (+ Redis + SMTP)\\n#\\n# Usage :\\n# docker compose up -d\\n# docker compose logs -f gitrust\\n# docker compose down version: \\"3.9\\" services: # ── Base de données ─────────────────────────────────────────────────────── postgres: image: postgres:16-alpine container_name: gitrust_postgres restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: # Données persistantes — ne supprimez pas ce volume sans sauvegarde - postgres_data:/var/lib/postgresql/data healthcheck: test: [\\"CMD-SHELL\\", \\"pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}\\"] interval: 10s timeout: 5s retries: 5 networks: - gitrust_net # ── Application gitrust ─────────────────────────────────────────────────── gitrust: image: ghcr.io/gitrust/gitrust:latest container_name: gitrust_app restart: unless-stopped depends_on: postgres: condition: service_healthy env_file: # Lit toutes les variables depuis .env — ne commitez jamais ce fichier - .env ports: # Interface web — exposée sur toutes les interfaces de la machine hôte - \\"4000:4000\\" # Serveur SSH Git — exposé sur le port configuré dans .env - \\"${SSH_PORT:-2222}:2222\\" volumes: # Dépôts Git bare — données critiques, sauvegardez ce volume - git_repos:/var/lib/gitrust/repositories # Clés SSH du serveur — générées au premier démarrage, persistez-les - ssh_host_keys:/etc/gitrust/ssh healthcheck: test: [\\"CMD\\", \\"curl\\", \\"-f\\", \\"http://localhost:4000/health\\"] interval: 30s timeout: 10s retries: 3 start_period: 30s networks: - gitrust_net volumes: # postgres_data : données relationnelles (comptes, dépôts, issues, PRs) postgres_data: # git_repos : dépôts Git bare (le contenu réel des commits) git_repos: # ssh_host_keys : clés SSH hôte (fingerprint de votre serveur) ssh_host_keys: networks: gitrust_net: driver: bridge\\nEOF Checkpoint : vérifiez que les deux fichiers sont présents dans /opt/gitrust/ : ls -la /opt/gitrust/ Sortie attendue : total 16\\ndrwxr-xr-x 2 root root 4096 avr 17 10:00 .\\ndrwxr-xr-x 8 root root 4096 avr 17 09:55 ..\\n-rw------- 1 root root 612 avr 17 10:00 .env\\n-rw-r--r-- 1 root root 2048 avr 17 10:00 docker-compose.yml","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Étape 2 : Créez le fichier docker-compose.yml","id":"84","title":"Étape 2 : Créez le fichier docker-compose.yml"},"85":{"body":"Démarrez tous les services en arrière-plan : docker compose up -d Sortie attendue : [+] Running 4/4 ✔ Network gitrust_gitrust_net Created 0.1s ✔ Volume \\"gitrust_postgres_data\\" Created 0.0s ✔ Container gitrust_postgres Started 0.8s ✔ Container gitrust_app Started 1.2s Suivez les logs de l’application pour observer le démarrage (les migrations s’exécutent automatiquement) : docker compose logs -f gitrust Sortie attendue (les 15-20 premières secondes) : gitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Starting gitrust v0.9.0\\ngitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Connecting to database...\\ngitrust_app | 2026-04-17T10:00:16Z INFO gitrust > Running database migrations...\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Applied 42 migrations successfully\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Generating SSH host keys...\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH host key fingerprint: SHA256:xxxxxxxxxxxxxxxxxxxx\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > HTTP server listening on 0.0.0.0:4000\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH server listening on 0.0.0.0:2222\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > gitrust is ready Appuyez sur Ctrl+C pour quitter le suivi des logs (les containers continuent de tourner). Checkpoint : vérifiez l’état de santé des services : docker compose ps Sortie attendue : NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS\\ngitrust_app ghcr.io/gitrust/gitrust:latest \\"/usr/local/bin/gitr…\\" gitrust 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:4000->4000/tcp, 0.0.0.0:2222->2222/tcp\\ngitrust_postgres postgres:16-alpine \\"docker-entrypoint.s…\\" postgres 2 minutes ago Up 2 minutes (healthy) 5432/tcp Les deux containers doivent afficher (healthy). Si l’un affiche (starting), attendez 30 secondes et relancez la commande. S’il affiche (unhealthy), consultez les logs avec docker compose logs gitrust ou docker compose logs postgres.","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Étape 3 : Démarrez la stack et suivez les logs","id":"85","title":"Étape 3 : Démarrez la stack et suivez les logs"},"86":{"body":"Ouvrez votre navigateur et rendez-vous sur http://localhost:4000. Vous devriez voir la page d’accueil gitrust avec un formulaire d’inscription. Comme l’instance est vierge, le premier compte créé devient automatiquement administrateur. Remplissez le formulaire : Pseudo : votre identifiant administrateur (ex. admin) E-mail : votre adresse e-mail Mot de passe : choisissez un mot de passe robuste (≥ 12 caractères) Cliquez sur Créer mon compte. Sortie attendue dans les logs (visible avec docker compose logs -f gitrust) : gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::auth > New user registered: admin (id=1)\\ngitrust_app | 2026-04-17T10:05:00Z INFO gitrust::admin > First user promoted to administrator: admin Checkpoint final : connectez-vous avec vos identifiants. Après la connexion, vérifiez que le menu en haut à droite affiche un lien Administration (ou naviguez vers http://localhost:4000/admin). Cette page n’est accessible qu’aux administrateurs — sa présence confirme que votre compte a bien le rôle admin. L’URL de votre instance est http://localhost:4000 et votre compte administrateur est opérationnel.","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Étape 4 : Créez le premier compte administrateur","id":"86","title":"Étape 4 : Créez le premier compte administrateur"},"87":{"body":"✓ O1 accompli : la stack docker-compose est déployée — docker compose ps affiche deux containers (healthy) ✓ O2 accompli : les trois services (app, PostgreSQL, réseau interne) démarrent correctement — les logs montrent « gitrust is ready » et les migrations sont appliquées ✓ O3 accompli : le premier compte administrateur est créé et la page /admin est accessible","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Récapitulatif","id":"87","title":"Récapitulatif"},"88":{"body":"Symptôme Cause probable Correction Error: port 4000 is already in use au démarrage Un autre service occupe le port 4000 sur la machine hôte Identifiez le service avec ss -tlnp | grep 4000 ou lsof -i :4000. Arrêtez-le ou changez le port dans docker-compose.yml : remplacez \\"4000:4000\\" par \\"4001:4000\\" et accédez sur :4001 Le container gitrust_app affiche (unhealthy) ou redémarre en boucle La variable DATABASE_URL est incorrecte ou SECRET_KEY contient des caractères spéciaux non échappés Vérifiez avec docker compose logs gitrust | grep ERROR. Assurez-vous que SECRET_KEY est bien une chaîne hexadécimale sans guillemets. Rechargez avec docker compose down && docker compose up -d La page http://localhost:4000 affiche « Connection refused » Le container n’est pas encore en (healthy) ou le port n’est pas exposé Attendez 30 secondes et rechargez. Si le problème persiste, vérifiez que votre pare-feu local ( ufw status) autorise le port 4000 FATAL: password authentication failed for user \\"gitrust\\" dans les logs postgres Le mot de passe dans DATABASE_URL ne correspond pas à POSTGRES_PASSWORD Supprimez le volume PostgreSQL ( docker compose down -v) et relancez — attention : supprime toutes les données","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Et si ça ne marche pas","id":"88","title":"Et si ça ne marche pas"},"89":{"body":"→ 02 — Installation systemd : binaire natif + service : découvrez l’installation sans Docker pour un déploiement production avec hardening AppArmor (~45 min) Ou si vous souhaitez rendre cette instance accessible depuis Internet : → 04 — Mise en production : reverse-proxy TLS, SMTP, sauvegarde automatique (~90 min)","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Prochaine étape","id":"89","title":"Prochaine étape"},"9":{"body":"La référence est destinée à la consultation ponctuelle, pas à la lecture linéaire. Elle documente les formats, schémas et comportements exacts. Modèle de permissions (4 rôles) API REST v1 — authentification, pagination, codes d’erreur Schéma YAML .gitrust-ci.yml (Easy Mode) Syntaxe Markdown supportée Notifications : SSE, e-mail, préférences","breadcrumbs":"Vue d\'ensemble » Référence — informations techniques exactes","id":"9","title":"Référence — informations techniques exactes"},"90":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 02 — Installation avec systemd » 02 — Installation avec systemd","id":"90","title":"02 — Installation avec systemd"},"91":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 02 — Installation avec systemd » TODO","id":"91","title":"TODO"},"92":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 03 — Premier démarrage » 03 — Premier démarrage","id":"92","title":"03 — Premier démarrage"},"93":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 03 — Premier démarrage » TODO","id":"93","title":"TODO"},"94":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Mise en production sur une machine Linux avec HTTPS Let’s Encrypt","id":"94","title":"Mise en production sur une machine Linux avec HTTPS Let’s Encrypt"},"95":{"body":"Procédure de référence pour déployer une instance gitrust sur une machine Linux à IP fixe, avec patte externe routée et HTTPS via Let’s Encrypt. Reproductible et testée en conditions réelles. Adaptez les valeurs suivantes à votre environnement : Placeholder Remplacez par <your-server-ip> L’IP fixe de votre serveur (ex: 192.168.1.57 sur un LAN, ou une IP publique) <your-domain> Votre FQDN principal (ex: gitrust.example.com) <acme-email> L’email pour Let’s Encrypt (ex: contact@example.com) <admin-user> L’utilisateur SSH admin sur le serveur cible","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Contexte","id":"95","title":"Contexte"},"96":{"body":"# Service Bind interne Exposition publique Variable 1 Web HTTP (UI SSR + API) 127.0.0.1:4000 :443 HTTPS via Nginx SERVER_PORT 2 SSH Git (russh) 127.0.0.1:2222 :22 via Nginx stream SSH_PORT 3 Worker CI/CD (Dagger) tâche Tokio in-process — (déclenché par push) CI_ENABLED PostgreSQL = dépendance, conteneur Docker bind loopback 127.0.0.1:5432.","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Les trois services gitrust","id":"96","title":"Les trois services gitrust"},"97":{"body":"Internet | v\\n<your-server-ip> (patte externe) | +-- :22 Nginx stream --> 127.0.0.1:2222 (gitrust SSH) +-- :80 Nginx HTTP --> 301 HTTPS (sauf /.well-known/acme-challenge) +-- :443 Nginx HTTPS --> 127.0.0.1:4000 (gitrust HTTP) +-- :2022 sshd système (accès admin, déplacé depuis :22) Loopback uniquement : +-- 127.0.0.1:4000 gitrust web +-- 127.0.0.1:2222 gitrust SSH +-- 127.0.0.1:5432 postgres docker","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Topologie réseau","id":"97","title":"Topologie réseau"},"98":{"body":"Le déplacement de sshd système de :22 vers :2022 doit être fait avant la configuration nginx stream, et doit être validé depuis une deuxième session SSH avant fermeture de la première. Sinon : lockout total (besoin d’accès console physique).","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Risque critique — ordre d’exécution","id":"98","title":"Risque critique — ordre d’exécution"},"99":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Pré-requis","id":"99","title":"Pré-requis"}},"length":452,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{"0":{".":{"0":{".":{"0":{":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"0":{"0":{"0":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"4":{"3":{"2":{"df":1,"docs":{"212":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"109":{"tf":1.0},"113":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"85":{"tf":1.0}}},"1":{"df":1,"docs":{"85":{"tf":1.0}}},"8":{"df":2,"docs":{"291":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"199":{"tf":1.0}}},"1":{"df":6,"docs":{"277":{"tf":1.0},"278":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0}},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"2":{"df":12,"docs":{"24":{"tf":1.0},"25":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0}}},"3":{"df":10,"docs":{"27":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"304":{"tf":1.0},"362":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0}}},"4":{"1":{"6":{"b":{"df":0,"docs":{},"|":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"29":{"tf":1.0},"293":{"tf":2.0},"6":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951},"89":{"tf":1.0}}},"7":{"4":{"df":5,"docs":{"1":{"tf":1.0},"264":{"tf":1.0},"383":{"tf":1.0},"391":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}},"9":{":":{"5":{"5":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"102":{"tf":1.0},"175":{"tf":1.4142135623730951},"205":{"tf":1.0},"243":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":2.0},"317":{"tf":1.0}}},"1":{".":{"1":{"0":{"df":1,"docs":{"356":{"tf":1.0}}},"df":2,"docs":{"202":{"tf":1.0},"291":{"tf":1.0}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"5":{"df":1,"docs":{"346":{"tf":1.0}}},"8":{"0":{"df":2,"docs":{"286":{"tf":1.0},"300":{"tf":1.0}}},"2":{".":{"0":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{".":{"1":{"df":1,"docs":{"104":{"tf":1.0}}},"2":{"df":1,"docs":{"104":{"tf":1.0}}},"3":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"104":{"tf":1.0}}}}}},"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"6":{"4":{"4":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"124":{"tf":1.0},"289":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"327":{"tf":1.0},"389":{"tf":1.0}}},":":{"0":{"0":{"df":1,"docs":{"84":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"1":{"5":{"df":1,"docs":{"292":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":10,"docs":{"166":{"tf":1.0},"18":{"tf":1.0},"185":{"tf":1.4142135623730951},"189":{"tf":1.7320508075688772},"202":{"tf":1.0},"206":{"tf":1.0},"208":{"tf":1.7320508075688772},"211":{"tf":1.0},"288":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772}},"m":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":2.6457513110645907}}}},"1":{"df":4,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"211":{"tf":1.0}}},"2":{"0":{"df":3,"docs":{"277":{"tf":1.0},"278":{"tf":1.0},"349":{"tf":1.0}}},"3":{"df":1,"docs":{"349":{"tf":1.0}}},"4":{"df":1,"docs":{"349":{"tf":1.0}}},"6":{"df":1,"docs":{"349":{"tf":1.0}}},"7":{".":{"0":{".":{"0":{".":{"1":{"/":{"8":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}},":":{"2":{"2":{"2":{"2":{"df":7,"docs":{"113":{"tf":1.4142135623730951},"121":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.0},"187":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"0":{"0":{"0":{"df":5,"docs":{"113":{"tf":1.4142135623730951},"124":{"tf":1.0},"187":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"4":{"3":{"2":{"df":6,"docs":{"109":{"tf":1.0},"124":{"tf":1.0},"187":{"tf":1.0},"212":{"tf":1.4142135623730951},"96":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.0},"211":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"4":{"7":{"/":{"1":{"2":{"8":{"4":{"7":{"df":1,"docs":{"289":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"289":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"349":{"tf":1.0}}},"9":{"df":1,"docs":{"349":{"tf":1.0}}},"df":6,"docs":{"151":{"tf":1.0},"189":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.0}}},"3":{".":{"2":{".":{"0":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"df":1,"docs":{"349":{"tf":1.0}}},"2":{"df":1,"docs":{"349":{"tf":1.0}}},"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"5":{"0":{"0":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"286":{"tf":1.0},"288":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"6":{".":{"3":{"df":2,"docs":{"288":{"tf":1.0},"291":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":1,"docs":{"199":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":3,"docs":{"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"7":{"7":{"df":1,"docs":{"349":{"tf":1.4142135623730951}}},"df":3,"docs":{"292":{"tf":1.0},"313":{"tf":1.0},"84":{"tf":2.0}},"t":{"1":{"0":{":":{"0":{"0":{":":{"1":{"5":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}}},"6":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.0}}}},"7":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":2.449489742783178}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{":":{"0":{"0":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"0":{":":{"0":{"0":{"df":0,"docs":{},"z":{"df":1,"docs":{"293":{"tf":1.4142135623730951}}}},"1":{"df":0,"docs":{},"z":{"df":1,"docs":{"293":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"8":{".":{"4":{"2":{"df":1,"docs":{"289":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"2":{"df":0,"docs":{},"m":{"df":1,"docs":{"292":{"tf":1.0}}}},"df":0,"docs":{}},"7":{".":{"4":{"2":{"df":1,"docs":{"293":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"286":{"tf":1.0}}},"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{".":{"0":{"/":{"2":{"4":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"7":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"\\\\":{".":{"0":{"0":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"4":{"b":{"df":0,"docs":{},"|":{"d":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}}},"d":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"8":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"9":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"/":{"4":{"\\\\":{".":{"0":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"105":{"tf":1.0}}},"b":{"df":1,"docs":{"106":{"tf":1.0}}},"c":{"df":2,"docs":{"107":{"tf":1.0},"122":{"tf":1.0}}},"d":{"df":3,"docs":{"108":{"tf":1.0},"127":{"tf":1.0},"189":{"tf":1.0}}},"df":35,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"127":{"tf":1.0},"146":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.4142135623730951},"202":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"233":{"tf":1.0},"244":{"tf":1.0},"288":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":1.7320508075688772},"316":{"tf":1.0},"317":{"tf":1.4142135623730951},"346":{"tf":2.0},"349":{"tf":3.605551275463989},"352":{"tf":2.23606797749979},"357":{"tf":1.4142135623730951},"380":{"tf":1.0},"389":{"tf":1.0},"423":{"tf":1.0},"76":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"319":{"tf":1.0}}}},"h":{"df":4,"docs":{"121":{"tf":1.0},"127":{"tf":1.0},"189":{"tf":2.6457513110645907},"208":{"tf":2.8284271247461903}}},"m":{"df":1,"docs":{"189":{"tf":1.0}}},"w":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}}},"2":{".":{"0":{"5":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}},"1":{"df":2,"docs":{"171":{"tf":1.0},"392":{"tf":1.0}}},"2":{"df":3,"docs":{"172":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0}}},"3":{"df":2,"docs":{"173":{"tf":1.0},"394":{"tf":1.0}}},"4":{"3":{".":{"0":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"174":{"tf":1.0}}},"5":{"df":1,"docs":{"175":{"tf":1.0}}},"df":0,"docs":{},"x":{"df":1,"docs":{"286":{"tf":1.0}}}},"/":{"2":{"df":1,"docs":{"291":{"tf":1.0}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"193":{"tf":1.0}}},"df":3,"docs":{"119":{"tf":1.0},"316":{"tf":1.4142135623730951},"426":{"tf":1.0}}},"2":{"2":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"df":18,"docs":{"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"109":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.4142135623730951},"124":{"tf":1.0},"127":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"208":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}},"4":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}},"6":{"df":5,"docs":{"20":{"tf":1.0},"293":{"tf":2.0},"362":{"tf":1.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"3":{".":{"0":{".":{"1":{"1":{"3":{".":{"4":{"2":{"df":1,"docs":{"207":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"8":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":9,"docs":{"1":{"tf":1.0},"15":{"tf":1.0},"202":{"tf":1.0},"207":{"tf":1.0},"326":{"tf":1.0},"357":{"tf":1.0},"7":{"tf":1.4142135623730951},"73":{"tf":1.0},"85":{"tf":1.0}}},"2":{",":{"2":{"2":{"2":{"2":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"0":{"4":{"df":2,"docs":{"151":{"tf":1.0},"81":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"0":{"0":{"df":1,"docs":{"104":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"2":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":18,"docs":{"1":{"tf":1.0},"104":{"tf":1.0},"121":{"tf":1.4142135623730951},"134":{"tf":1.4142135623730951},"16":{"tf":1.0},"187":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"287":{"tf":1.0},"300":{"tf":1.0},"326":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"424":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951}},"}":{":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"3":{"df":1,"docs":{"326":{"tf":1.0}}},"df":0,"docs":{}},"6":{".":{"0":{"0":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"294":{"tf":1.0}}},"\\\\":{"b":{"df":0,"docs":{},"|":{":":{"2":{"0":{"2":{"2":{"\\\\":{"b":{"df":2,"docs":{"105":{"tf":1.0},"122":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"2":{"2":{"\\\\":{"b":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":17,"docs":{"102":{"tf":1.0},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"107":{"tf":2.23606797749979},"120":{"tf":1.0},"121":{"tf":2.0},"122":{"tf":2.0},"124":{"tf":1.0},"134":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":1.0},"187":{"tf":1.0},"23":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"3":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"4":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"4":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"81":{"tf":1.0}},"h":{"df":2,"docs":{"189":{"tf":1.7320508075688772},"208":{"tf":1.4142135623730951}}}},"5":{"6":{"df":3,"docs":{"243":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0}}},"df":2,"docs":{"24":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"362":{"tf":1.0}}},"8":{".":{"0":{".":{"1":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},">":{"&":{"1":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"122":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"\\\\":{".":{"1":{"df":0,"docs":{},"|":{"df":0,"docs":{},"l":{"df":0,"docs":{},"m":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"/":{"0":{"\\\\":{".":{"2":{"df":0,"docs":{},"|":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"df":0,"docs":{},"p":{"\\\\":{":":{"\\\\":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"/":{"5":{"\\\\":{".":{"8":{"0":{"3":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"6":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"/":{"0":{"\\\\":{".":{"2":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"z":{"df":0,"docs":{},"|":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"h":{"a":{"0":{"df":0,"docs":{},"s":{"/":{"2":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"d":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":33,"docs":{"106":{"tf":1.0},"109":{"tf":1.0},"147":{"tf":1.0},"16":{"tf":1.0},"163":{"tf":1.0},"165":{"tf":1.0},"170":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":2.0},"205":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.7320508075688772},"239":{"tf":1.0},"244":{"tf":1.0},"289":{"tf":1.0},"293":{"tf":1.0},"317":{"tf":1.7320508075688772},"319":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.4142135623730951},"349":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.4142135623730951},"357":{"tf":1.4142135623730951},"380":{"tf":1.0},"391":{"tf":1.0},"424":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":2.0},"96":{"tf":1.0}},"f":{"a":{"df":14,"docs":{"10":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"18":{"tf":2.0},"217":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"281":{"tf":1.0},"35":{"tf":1.0},"432":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"g":{"df":2,"docs":{"133":{"tf":1.0},"202":{"tf":1.0}}},"h":{"0":{"0":{"df":1,"docs":{"446":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951}}}},"3":{".":{"1":{"df":3,"docs":{"177":{"tf":1.0},"191":{"tf":1.0},"396":{"tf":1.0}}},"2":{"df":3,"docs":{"178":{"tf":1.0},"192":{"tf":1.0},"397":{"tf":1.0}}},"3":{"df":2,"docs":{"179":{"tf":1.0},"193":{"tf":1.0}}},"4":{"df":2,"docs":{"180":{"tf":1.0},"194":{"tf":1.0}}},"5":{"df":2,"docs":{"181":{"tf":1.0},"195":{"tf":1.0}}},"6":{"df":1,"docs":{"196":{"tf":1.0}}},"7":{"df":1,"docs":{"197":{"tf":1.0}}},"8":{"df":1,"docs":{"198":{"tf":1.0}}},"9":{"df":2,"docs":{"199":{"tf":1.0},"84":{"tf":1.0}}},"df":0,"docs":{}},"/":{"3":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"1":{"df":2,"docs":{"133":{"tf":1.0},"97":{"tf":1.0}}},"2":{"df":4,"docs":{"119":{"tf":1.0},"348":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}},"df":15,"docs":{"121":{"tf":1.0},"18":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"189":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":1.0},"23":{"tf":1.0},"414":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0}},"m":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}},"2":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}},"6":{"8":{"/":{"8":{"7":{"6":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"111":{"tf":1.0}}},"b":{"df":1,"docs":{"112":{"tf":1.0}}},"c":{"df":1,"docs":{"113":{"tf":1.0}}},"df":29,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"110":{"tf":1.0},"127":{"tf":1.4142135623730951},"148":{"tf":1.0},"165":{"tf":1.0},"176":{"tf":1.0},"189":{"tf":2.0},"19":{"tf":1.0},"190":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":2.0},"244":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"294":{"tf":1.4142135623730951},"318":{"tf":1.0},"349":{"tf":1.4142135623730951},"357":{"tf":1.0},"380":{"tf":1.0},"395":{"tf":1.0},"425":{"tf":1.0},"72":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"96":{"tf":1.0}},"s":{"df":1,"docs":{"292":{"tf":1.0}}},"x":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"×":{"/":{"2":{"4":{"df":0,"docs":{},"h":{"df":1,"docs":{"208":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"4":{".":{"1":{"df":3,"docs":{"201":{"tf":1.0},"351":{"tf":1.0},"399":{"tf":1.0}}},"2":{"0":{"df":1,"docs":{"289":{"tf":1.0}}},"df":3,"docs":{"202":{"tf":1.0},"352":{"tf":1.0},"400":{"tf":1.0}}},"3":{"df":3,"docs":{"203":{"tf":1.0},"353":{"tf":1.0},"401":{"tf":1.0}}},"4":{"df":2,"docs":{"354":{"tf":1.0},"402":{"tf":1.0}}},"5":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}},"/":{"4":{"df":1,"docs":{"85":{"tf":1.0}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},":":{"4":{"0":{"0":{"0":{"df":2,"docs":{"84":{"tf":1.0},"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":12,"docs":{"1":{"tf":1.0},"134":{"tf":1.4142135623730951},"16":{"tf":1.0},"287":{"tf":1.0},"326":{"tf":1.0},"375":{"tf":1.0},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"88":{"tf":2.23606797749979}},"|":{"2":{"2":{"2":{"2":{"df":1,"docs":{"113":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"1":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"313":{"tf":1.0},"326":{"tf":1.0},"88":{"tf":1.0}}},"df":0,"docs":{}},"1":{"/":{"4":{"0":{"3":{"/":{"4":{"2":{"2":{"/":{"4":{"2":{"9":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.0},"192":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"184":{"tf":1.0},"196":{"tf":1.0},"319":{"tf":1.0},"396":{"tf":1.0}},"|":{"4":{"0":{"3":{"df":2,"docs":{"192":{"tf":1.0},"195":{"tf":1.4142135623730951}},"|":{"4":{"2":{"2":{"df":0,"docs":{},"|":{"4":{"2":{"9":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"3":{"df":2,"docs":{"196":{"tf":1.0},"396":{"tf":1.0}}},"4":{"df":1,"docs":{"21":{"tf":1.0}}},"9":{"6":{"df":3,"docs":{"383":{"tf":1.0},"426":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":1,"docs":{"184":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"23":{"tf":1.0}}},"df":3,"docs":{"293":{"tf":1.0},"356":{"tf":1.0},"85":{"tf":1.0}}},"4":{"3":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"df":6,"docs":{"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"202":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}},"5":{"df":5,"docs":{"278":{"tf":1.0},"286":{"tf":1.0},"349":{"tf":1.4142135623730951},"73":{"tf":1.0},"89":{"tf":1.0}},"k":{"df":1,"docs":{"292":{"tf":1.0}}}},"7":{"df":1,"docs":{"207":{"tf":1.0}}},"a":{"7":{"df":0,"docs":{},"f":{"2":{"c":{"9":{"df":0,"docs":{},"e":{"1":{"b":{"8":{"d":{"3":{"df":0,"docs":{},"f":{"6":{"a":{"0":{"df":0,"docs":{},"e":{"5":{"c":{"2":{"b":{"9":{"d":{"7":{"df":0,"docs":{},"f":{"4":{"a":{"1":{"df":0,"docs":{},"e":{"8":{"c":{"3":{"b":{"6":{"d":{"9":{"df":0,"docs":{},"f":{"2":{"a":{"5":{"df":0,"docs":{},"e":{"8":{"c":{"1":{"b":{"4":{"d":{"7":{"df":0,"docs":{},"f":{"0":{"a":{"3":{"df":0,"docs":{},"e":{"6":{"c":{"9":{"b":{"2":{"d":{"5":{"df":0,"docs":{},"f":{"8":{"a":{"df":1,"docs":{"290":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"115":{"tf":1.0}}},"b":{"df":1,"docs":{"116":{"tf":1.0}}},"c":{"df":1,"docs":{"117":{"tf":1.0}}},"d":{"df":1,"docs":{"118":{"tf":1.0}}},"df":31,"docs":{"1":{"tf":1.0},"114":{"tf":1.0},"149":{"tf":1.0},"150":{"tf":1.0},"182":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.4142135623730951},"20":{"tf":1.0},"200":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0},"245":{"tf":1.0},"277":{"tf":1.0},"281":{"tf":1.0},"291":{"tf":1.0},"319":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.0},"357":{"tf":1.0},"380":{"tf":1.0},"389":{"tf":1.0},"398":{"tf":1.0},"416":{"tf":1.0},"426":{"tf":1.0},"53":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":1,"docs":{"119":{"tf":1.0}}},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"191":{"tf":1.0}}}}},"5":{"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"205":{"tf":1.4142135623730951}}},"df":1,"docs":{"21":{"tf":1.0}}},"df":0,"docs":{}},"4":{"3":{"2":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},"df":6,"docs":{"109":{"tf":1.0},"134":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"121":{"tf":1.0}}},"b":{"df":2,"docs":{"122":{"tf":1.0},"370":{"tf":1.0}}},"c":{"df":1,"docs":{"123":{"tf":1.0}}},"df":22,"docs":{"107":{"tf":1.0},"120":{"tf":1.0},"127":{"tf":1.7320508075688772},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"165":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":2.6457513110645907},"202":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":2.449489742783178},"21":{"tf":1.0},"249":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"356":{"tf":1.0},"380":{"tf":1.0},"403":{"tf":1.0},"427":{"tf":1.0},"84":{"tf":1.0}},"m":{"df":1,"docs":{"189":{"tf":1.7320508075688772}}},"s":{"df":1,"docs":{"84":{"tf":1.0}}},"x":{"df":2,"docs":{"356":{"tf":1.4142135623730951},"357":{"tf":1.0}}}},"6":{"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"df":3,"docs":{"102":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0}}},"df":2,"docs":{"349":{"tf":1.0},"351":{"tf":1.0}}},"1":{"2":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"3":{"7":{"9":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"df":2,"docs":{"102":{"tf":1.0},"291":{"tf":1.0}}},"\\\\":{".":{"0":{"0":{"\\\\":{".":{"8":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":15,"docs":{"124":{"tf":1.0},"146":{"tf":1.0},"157":{"tf":1.0},"18":{"tf":1.4142135623730951},"189":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"250":{"tf":1.0},"276":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"298":{"tf":1.0},"357":{"tf":1.0},"428":{"tf":1.0}}},"7":{"1":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"a":{"df":1,"docs":{"126":{"tf":1.0}}},"b":{"df":1,"docs":{"127":{"tf":1.0}}},"df":10,"docs":{"125":{"tf":1.0},"161":{"tf":1.0},"166":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.4142135623730951},"243":{"tf":1.0},"251":{"tf":1.0},"294":{"tf":1.0},"429":{"tf":1.0},"82":{"tf":1.0}}},"8":{".":{"1":{"df":1,"docs":{"210":{"tf":1.0}}},"2":{"df":1,"docs":{"211":{"tf":1.0}}},"3":{"df":1,"docs":{"212":{"tf":1.0}}},"4":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}},"0":{",":{"4":{"4":{"3":{"df":1,"docs":{"208":{"tf":2.6457513110645907}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"8":{"0":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"1":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}},"df":5,"docs":{"124":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"187":{"tf":1.0},"97":{"tf":1.0}}},"1":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"a":{"df":1,"docs":{"129":{"tf":1.0}}},"b":{"df":1,"docs":{"130":{"tf":1.0}}},"c":{"df":1,"docs":{"131":{"tf":1.0}}},"df":10,"docs":{"128":{"tf":1.0},"162":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"214":{"tf":1.0},"243":{"tf":1.0},"256":{"tf":1.0},"354":{"tf":1.0},"84":{"tf":1.0}},"f":{"4":{"0":{"df":0,"docs":{},"f":{"c":{"5":{"9":{"df":0,"docs":{},"f":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"9":{"0":{"df":6,"docs":{"278":{"tf":1.0},"301":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}},"8":{"df":1,"docs":{"292":{"tf":1.0}}},"df":6,"docs":{"104":{"tf":1.0},"132":{"tf":1.0},"165":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"214":{"tf":1.4142135623730951}}},"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"d":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"=":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"a":{"1":{"[":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"b":{"2":{"c":{"3":{"d":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"[":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"356":{"tf":1.0}}},"3":{"[":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"72":{"tf":1.0}}}}},"a":{"a":{"a":{"c":{"3":{"df":0,"docs":{},"n":{"df":0,"docs":{},"z":{"a":{"c":{"1":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"d":{"df":0,"docs":{},"i":{"1":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"5":{"a":{"a":{"a":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"c":{"d":{"1":{"2":{"3":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"146":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"171":{"tf":1.4142135623730951},"183":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"244":{"tf":1.0},"363":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"192":{"tf":1.0},"196":{"tf":1.0},"208":{"tf":1.0}},"s":{"df":5,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"192":{"tf":1.4142135623730951},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}},"u":{"df":0,"docs":{},"é":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":22,"docs":{"1":{"tf":1.0},"14":{"tf":1.0},"179":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":2.449489742783178},"291":{"tf":1.0},"318":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"333":{"tf":1.0},"37":{"tf":1.0},"424":{"tf":2.23606797749979},"425":{"tf":2.23606797749979},"427":{"tf":1.0},"428":{"tf":1.7320508075688772},"449":{"tf":1.0},"72":{"tf":1.0},"8":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"372":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.4142135623730951},"428":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"22":{"tf":1.7320508075688772},"299":{"tf":1.7320508075688772},"87":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"è":{"d":{"df":1,"docs":{"17":{"tf":1.0}}},"df":5,"docs":{"101":{"tf":1.0},"171":{"tf":1.0},"174":{"tf":1.0},"330":{"tf":1.0},"97":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"332":{"tf":1.4142135623730951},"80":{"tf":1.0}}},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":5,"docs":{"108":{"tf":1.0},"117":{"tf":1.0},"129":{"tf":1.0},"134":{"tf":1.0},"95":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"102":{"tf":1.0},"107":{"tf":1.0},"188":{"tf":1.0},"204":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{")":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":9,"docs":{"189":{"tf":1.0},"213":{"tf":1.0},"243":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"319":{"tf":1.0},"376":{"tf":1.0},"393":{"tf":1.0}}}},"v":{"df":13,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"168":{"tf":1.4142135623730951},"172":{"tf":1.0},"173":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"211":{"tf":1.0},"23":{"tf":1.7320508075688772},"243":{"tf":2.449489742783178},"378":{"tf":1.0},"380":{"tf":1.0},"443":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":1,"docs":{"353":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"/":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"é":{"df":5,"docs":{"18":{"tf":1.4142135623730951},"186":{"tf":1.0},"204":{"tf":1.0},"22":{"tf":1.4142135623730951},"326":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":6,"docs":{"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":4,"docs":{"104":{"tf":1.0},"348":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"113":{"tf":1.0},"199":{"tf":1.0},"447":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"291":{"tf":1.0},"442":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":2,"docs":{"450":{"tf":1.0},"76":{"tf":1.0}}}}}},"d":{"df":4,"docs":{"123":{"tf":1.0},"166":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}},"df":2,"docs":{"243":{"tf":1.0},"292":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"332":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":6,"docs":{"232":{"tf":1.0},"240":{"tf":1.0},"249":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"=":{"<":{"a":{"c":{"df":0,"docs":{},"m":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"$":{"df":0,"docs":{},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"1":{"2":{"3":{"df":1,"docs":{"290":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":3,"docs":{"102":{"tf":1.4142135623730951},"238":{"tf":1.0},"293":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"w":{"d":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"238":{"tf":1.0},"293":{"tf":1.0}},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"102":{"tf":1.0},"290":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":36,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.7320508075688772},"109":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0},"134":{"tf":1.0},"178":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"208":{"tf":1.4142135623730951},"223":{"tf":1.0},"232":{"tf":1.0},"237":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"293":{"tf":1.4142135623730951},"313":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.0},"328":{"tf":1.0},"332":{"tf":2.449489742783178},"375":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"86":{"tf":2.0},"87":{"tf":1.0},"95":{"tf":1.4142135623730951},"97":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":9,"docs":{"240":{"tf":1.0},"251":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"72":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":2.23606797749979},"87":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"125":{"tf":1.0},"210":{"tf":1.0},"451":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"/":{"0":{"1":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":8,"docs":{"179":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"314":{"tf":1.0},"332":{"tf":1.0},"375":{"tf":1.0},"71":{"tf":1.0},"86":{"tf":1.4142135623730951}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"424":{"tf":1.4142135623730951},"425":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":14,"docs":{"106":{"tf":1.0},"146":{"tf":1.0},"18":{"tf":2.23606797749979},"19":{"tf":1.7320508075688772},"199":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"294":{"tf":1.0},"299":{"tf":1.0},"426":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"é":{"df":2,"docs":{"21":{"tf":1.0},"237":{"tf":1.0}}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"150":{"tf":1.0},"153":{"tf":1.0},"172":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":1.0}},"|":{"df":0,"docs":{},"v":{"a":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"v":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"\\\\":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"1":{"\\\\":{".":{"0":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"393":{"tf":1.0}}}},"o":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":24,"docs":{"121":{"tf":1.0},"129":{"tf":1.0},"13":{"tf":1.0},"16":{"tf":1.0},"166":{"tf":1.0},"172":{"tf":1.0},"180":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"202":{"tf":1.0},"21":{"tf":1.0},"214":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.4142135623730951},"259":{"tf":1.0},"279":{"tf":1.7320508075688772},"315":{"tf":1.0},"318":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"294":{"tf":1.0},"296":{"tf":1.0}}}},"é":{"df":3,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"426":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"205":{"tf":1.0},"443":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":3,"docs":{"327":{"tf":1.0},"328":{"tf":1.4142135623730951},"428":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"424":{"tf":1.4142135623730951},"425":{"tf":1.0},"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"l":{"=":{"(":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"166":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"173":{"tf":1.0},"253":{"tf":1.0},"351":{"tf":1.0},"421":{"tf":1.0}}},"z":{"df":1,"docs":{"287":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":7,"docs":{"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"316":{"tf":1.4142135623730951},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"243":{"tf":1.0},"249":{"tf":1.4142135623730951},"255":{"tf":1.0}}}}}}}}}},"df":2,"docs":{"108":{"tf":2.0},"173":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}},"e":{":":{"3":{"df":1,"docs":{"164":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"348":{"tf":1.0},"414":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":5,"docs":{"199":{"tf":1.0},"23":{"tf":1.0},"316":{"tf":1.0},"355":{"tf":1.0},"444":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":5,"docs":{"176":{"tf":1.0},"181":{"tf":1.0},"184":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.0}},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"319":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"l":{"df":3,"docs":{"173":{"tf":1.0},"317":{"tf":1.4142135623730951},"319":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":1,"docs":{"331":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"df":7,"docs":{"1":{"tf":1.0},"264":{"tf":1.0},"280":{"tf":1.0},"383":{"tf":1.4142135623730951},"388":{"tf":1.0},"391":{"tf":1.0},"75":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":4,"docs":{"376":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}}},"p":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"199":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"196":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"v":{"1":{"/":{"(":{"?":{"!":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"192":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"180":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"195":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"195":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}}},"df":4,"docs":{"192":{"tf":1.0},"196":{"tf":1.4142135623730951},"202":{"tf":1.0},"375":{"tf":1.0}}},"df":0,"docs":{}}},"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":30,"docs":{"179":{"tf":1.4142135623730951},"184":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":2.8284271247461903},"192":{"tf":1.7320508075688772},"196":{"tf":1.4142135623730951},"199":{"tf":1.0},"2":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.4142135623730951},"205":{"tf":1.4142135623730951},"208":{"tf":2.23606797749979},"279":{"tf":1.0},"280":{"tf":2.0},"287":{"tf":1.0},"3":{"tf":1.0},"316":{"tf":1.4142135623730951},"318":{"tf":1.0},"319":{"tf":1.0},"343":{"tf":1.0},"375":{"tf":2.8284271247461903},"384":{"tf":1.0},"404":{"tf":1.0},"408":{"tf":1.0},"414":{"tf":1.0},"449":{"tf":2.23606797749979},"55":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.0}}},"p":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"232":{"tf":1.0},"239":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.0},"255":{"tf":1.0},"75":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"î":{"df":0,"docs":{},"t":{"df":2,"docs":{"175":{"tf":1.0},"20":{"tf":1.0}},"r":{"a":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"446":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"89":{"tf":1.0}}}}},"t":{"df":1,"docs":{"82":{"tf":1.0}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"363":{"tf":1.0}}}}}}},"u":{"df":1,"docs":{"293":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":7,"docs":{"316":{"tf":1.4142135623730951},"319":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":1.7320508075688772},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"87":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"294":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"244":{"tf":1.0},"319":{"tf":1.0},"360":{"tf":1.0}},"é":{"df":1,"docs":{"174":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"317":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"c":{"df":6,"docs":{"178":{"tf":1.0},"18":{"tf":1.4142135623730951},"388":{"tf":1.0},"403":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0}}},"df":2,"docs":{"293":{"tf":1.0},"85":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":75,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"396":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"é":{"df":2,"docs":{"299":{"tf":1.0},"87":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"3":{"tf":1.0},"301":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"316":{"tf":1.0},"327":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"240":{"tf":1.0},"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"(":{"&":{"d":{"b":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"&":{"d":{"b":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"242":{"tf":1.0},"257":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"è":{"df":18,"docs":{"107":{"tf":1.0},"133":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.4142135623730951},"169":{"tf":1.0},"175":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.0},"23":{"tf":1.0},"234":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"293":{"tf":1.0},"324":{"tf":1.0},"333":{"tf":1.4142135623730951},"347":{"tf":1.0},"86":{"tf":1.0}}}},"t":{"df":9,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"115":{"tf":1.4142135623730951},"126":{"tf":1.0},"133":{"tf":1.0},"167":{"tf":1.0},"188":{"tf":1.0},"213":{"tf":1.0},"288":{"tf":1.0}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}},"df":0,"docs":{}}}},"r":{"df":1,"docs":{"428":{"tf":1.0}}}},"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"237":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"df":1,"docs":{"376":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}}}}}}}},"df":3,"docs":{"244":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0}},"h":{"df":1,"docs":{"447":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":11,"docs":{"148":{"tf":1.0},"169":{"tf":1.0},"268":{"tf":1.0},"280":{"tf":1.0},"3":{"tf":1.0},"325":{"tf":1.0},"357":{"tf":1.0},"369":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"v":{"df":2,"docs":{"180":{"tf":1.4142135623730951},"448":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"113":{"tf":1.0},"152":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}},"ê":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"m":{"a":{"df":2,"docs":{"375":{"tf":1.7320508075688772},"418":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":7,"docs":{"285":{"tf":1.0},"287":{"tf":1.0},"292":{"tf":1.4142135623730951},"299":{"tf":1.0},"375":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":10,"docs":{"278":{"tf":1.0},"281":{"tf":1.0},"304":{"tf":1.0},"316":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"328":{"tf":1.0},"352":{"tf":1.0},"359":{"tf":1.4142135623730951},"373":{"tf":1.0},"440":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"4":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"1":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"b":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"3":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"394":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"85":{"tf":1.0},"88":{"tf":1.0}}}},"r":{"df":1,"docs":{"184":{"tf":1.0}}},"u":{"df":31,"docs":{"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.4142135623730951},"14":{"tf":1.0},"152":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"204":{"tf":1.0},"21":{"tf":1.0},"212":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"88":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":1,"docs":{"179":{"tf":1.0}}}},"df":0,"docs":{}}}}},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":14,"docs":{"15":{"tf":1.0},"210":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.0},"253":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"327":{"tf":1.0},"362":{"tf":1.0},"379":{"tf":1.0},"403":{"tf":1.0},"418":{"tf":1.0},"81":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"_":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}},"df":2,"docs":{"346":{"tf":1.0},"348":{"tf":1.0}}}}}},"df":11,"docs":{"10":{"tf":1.0},"225":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"376":{"tf":1.4142135623730951},"380":{"tf":1.0},"390":{"tf":1.4142135623730951},"393":{"tf":1.0},"416":{"tf":1.0},"447":{"tf":1.4142135623730951},"74":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"348":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"é":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":48,"docs":{"129":{"tf":1.0},"148":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"180":{"tf":1.0},"187":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"214":{"tf":1.0},"23":{"tf":1.4142135623730951},"234":{"tf":1.0},"237":{"tf":1.0},"242":{"tf":1.7320508075688772},"243":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"286":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"330":{"tf":1.4142135623730951},"332":{"tf":1.0},"347":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.4142135623730951},"382":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.0},"416":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"84":{"tf":1.0},"88":{"tf":1.0}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"133":{"tf":1.0},"183":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"’":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"354":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"449":{"tf":1.0},"451":{"tf":1.0}}},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"330":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":17,"docs":{"127":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"189":{"tf":1.7320508075688772},"192":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951},"280":{"tf":1.0},"313":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0},"424":{"tf":3.0},"429":{"tf":1.0},"445":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"197":{"tf":1.4142135623730951},"88":{"tf":1.0}},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"318":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"(":{"\'":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":9,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"314":{"tf":1.0},"330":{"tf":1.0},"334":{"tf":1.0},"35":{"tf":1.0},"374":{"tf":1.4142135623730951},"9":{"tf":1.0}},"i":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0},"397":{"tf":1.0}},"é":{"df":3,"docs":{"196":{"tf":1.0},"330":{"tf":1.0},"425":{"tf":1.0}}}}}}}}},"i":{"df":1,"docs":{"18":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"o":{"_":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"175":{"tf":1.0},"319":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"173":{"tf":1.0},"183":{"tf":1.0},"199":{"tf":1.0},"243":{"tf":1.0},"317":{"tf":1.0},"412":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":85,"docs":{"11":{"tf":1.0},"118":{"tf":1.0},"124":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.4142135623730951},"25":{"tf":1.0},"257":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"293":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"360":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"445":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}},"s":{"df":5,"docs":{"146":{"tf":1.0},"29":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"277":{"tf":1.0},"286":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"151":{"tf":1.0},"397":{"tf":1.0}},"s":{"df":2,"docs":{"243":{"tf":1.0},"88":{"tf":1.0}},"é":{"df":1,"docs":{"166":{"tf":1.0}}}}}}},"r":{"df":4,"docs":{"106":{"tf":1.0},"156":{"tf":1.0},"290":{"tf":1.0},"88":{"tf":1.0}}}},"x":{"df":8,"docs":{"17":{"tf":1.0},"276":{"tf":1.0},"331":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"402":{"tf":1.0},"442":{"tf":1.0},"71":{"tf":1.0}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"116":{"tf":1.4142135623730951},"130":{"tf":1.0},"202":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"c":{"df":0,"docs":{},"é":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"174":{"tf":1.0},"356":{"tf":1.0}}}},"df":23,"docs":{"16":{"tf":1.0},"166":{"tf":1.0},"18":{"tf":1.0},"202":{"tf":1.0},"243":{"tf":1.4142135623730951},"277":{"tf":1.4142135623730951},"279":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"321":{"tf":1.0},"327":{"tf":1.0},"351":{"tf":1.0},"360":{"tf":1.0},"365":{"tf":1.0},"388":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"6":{"tf":2.0},"72":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0},"98":{"tf":1.4142135623730951}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":86,"docs":{"1":{"tf":1.0},"100":{"tf":1.0},"101":{"tf":1.0},"125":{"tf":1.0},"147":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":1.7320508075688772},"164":{"tf":1.0},"167":{"tf":1.0},"17":{"tf":1.7320508075688772},"178":{"tf":1.0},"18":{"tf":1.7320508075688772},"186":{"tf":1.0},"187":{"tf":1.0},"191":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"213":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"235":{"tf":1.0},"24":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"284":{"tf":1.4142135623730951},"286":{"tf":1.4142135623730951},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.4142135623730951},"316":{"tf":1.0},"317":{"tf":1.4142135623730951},"320":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"330":{"tf":2.23606797749979},"331":{"tf":1.4142135623730951},"332":{"tf":1.0},"334":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"372":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"382":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.4142135623730951},"401":{"tf":1.0},"402":{"tf":1.0},"417":{"tf":1.0},"424":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"448":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.7320508075688772},"88":{"tf":1.7320508075688772},"89":{"tf":1.0},"90":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{},"z":{"df":2,"docs":{"159":{"tf":1.0},"291":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"277":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951}}}}},"r":{"df":2,"docs":{"292":{"tf":1.0},"84":{"tf":2.0}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"316":{"tf":1.4142135623730951},"318":{"tf":2.0},"328":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0}}}}},"df":0,"docs":{}},"x":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{":":{":":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":7,"docs":{"134":{"tf":1.0},"237":{"tf":1.0},"279":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0}}}}},"z":{"df":2,"docs":{"146":{"tf":1.0},"165":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"b":{"1":{"[":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":1,"docs":{"356":{"tf":1.4142135623730951}}},"3":{"[":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"356":{"tf":1.0}}},"4":{"[":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"5":{"[":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"356":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"0":{"1":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"127":{"tf":1.7320508075688772},"134":{"tf":1.4142135623730951},"189":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"446":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"446":{"tf":1.0}}}}}},"/":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"448":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"448":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":2,"docs":{"2":{"tf":1.0},"448":{"tf":1.0}}}}}},"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":2.0},"204":{"tf":1.0},"208":{"tf":1.0}},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"199":{"tf":2.0}}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":2,"docs":{"189":{"tf":1.0},"199":{"tf":1.0}},"g":{"df":2,"docs":{"318":{"tf":1.0},"377":{"tf":1.0}}}},"df":1,"docs":{"374":{"tf":1.0}},"n":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"127":{"tf":1.4142135623730951},"188":{"tf":1.0},"189":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}},"s":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":6,"docs":{"189":{"tf":1.0},"206":{"tf":1.7320508075688772},"207":{"tf":2.23606797749979},"208":{"tf":2.0},"213":{"tf":1.0},"390":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"124":{"tf":1.0},"424":{"tf":1.0}}}},"i":{"df":3,"docs":{"189":{"tf":1.4142135623730951},"207":{"tf":1.0},"390":{"tf":1.0}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"206":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":3.605551275463989}}}}}},"r":{".":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"df":12,"docs":{"287":{"tf":1.4142135623730951},"356":{"tf":1.4142135623730951},"357":{"tf":1.0},"376":{"tf":1.0},"419":{"tf":1.4142135623730951},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"428":{"tf":1.0},"448":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"423":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":2,"docs":{"21":{"tf":1.4142135623730951},"333":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"6":{"4":{"df":3,"docs":{"102":{"tf":1.4142135623730951},"180":{"tf":1.0},"426":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"423":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":35,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"178":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"255":{"tf":1.0},"260":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"293":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.4142135623730951},"339":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"373":{"tf":1.4142135623730951},"382":{"tf":1.0},"386":{"tf":1.0},"393":{"tf":1.0},"419":{"tf":1.4142135623730951},"443":{"tf":1.0},"449":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"h":{"df":10,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"126":{"tf":1.0},"130":{"tf":1.0},"150":{"tf":1.0}},"r":{"c":{"df":1,"docs":{"166":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"c":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"y":{"df":2,"docs":{"150":{"tf":1.0},"166":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":7,"docs":{"177":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.4142135623730951},"396":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"293":{"tf":1.0},"357":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":10,"docs":{"100":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.0},"279":{"tf":1.0},"3":{"tf":1.0},"356":{"tf":1.0},"5":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"98":{"tf":1.0}}}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"è":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"2":{"tf":1.0},"4":{"tf":1.0},"442":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"133":{"tf":1.7320508075688772},"17":{"tf":1.0},"20":{"tf":1.0},"293":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"442":{"tf":1.0}}}}}}}},"n":{"/":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"317":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"370":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"148":{"tf":1.0},"151":{"tf":1.0},"184":{"tf":1.0},"287":{"tf":1.4142135623730951},"356":{"tf":1.0},"370":{"tf":1.0},"373":{"tf":1.0},"420":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"201":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"d":{"df":4,"docs":{"187":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"96":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":1,"docs":{"370":{"tf":2.449489742783178}}},"t":{"df":2,"docs":{"291":{"tf":1.0},"383":{"tf":1.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"e":{"c":{"d":{"df":0,"docs":{},"s":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"b":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"419":{"tf":1.0}}},"c":{"df":2,"docs":{"121":{"tf":1.0},"202":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"214":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"284":{"tf":1.0}}}},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"166":{"tf":1.4142135623730951},"183":{"tf":1.0},"400":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"167":{"tf":1.0},"214":{"tf":1.0}}}}}}}},"o":{"b":{"df":2,"docs":{"327":{"tf":1.0},"328":{"tf":1.0}}},"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"133":{"tf":1.0},"377":{"tf":1.0}}}},"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"179":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":4,"docs":{"169":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0}}},"n":{"df":2,"docs":{"17":{"tf":1.0},"347":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"n":{"df":3,"docs":{"23":{"tf":1.0},"76":{"tf":1.0},"80":{"tf":1.0}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"257":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"234":{"tf":1.0},"242":{"tf":1.0},"254":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"t":{"df":1,"docs":{"199":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"399":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":7,"docs":{"173":{"tf":1.0},"21":{"tf":1.0},"294":{"tf":1.4142135623730951},"301":{"tf":1.0},"373":{"tf":1.7320508075688772},"375":{"tf":1.0},"6":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"288":{"tf":1.0}}}},"i":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"d":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"377":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"380":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":4,"docs":{"189":{"tf":1.7320508075688772},"195":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":2.23606797749979}}}}}},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"184":{"tf":1.0},"397":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"d":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"447":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"=":{"1":{"df":1,"docs":{"112":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":26,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"106":{"tf":1.0},"110":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"160":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.4142135623730951},"172":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"278":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"296":{"tf":1.7320508075688772},"301":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"389":{"tf":1.0},"444":{"tf":1.0},"447":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}},"df":5,"docs":{"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"177":{"tf":1.0},"183":{"tf":1.0},"414":{"tf":3.3166247903554}}}},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"168":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"=":{"2":{"0":{"df":1,"docs":{"202":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"df":1,"docs":{"202":{"tf":1.0}}},"df":1,"docs":{"202":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.4142135623730951}}}}}},"y":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"396":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":5,"docs":{"180":{"tf":1.0},"294":{"tf":1.0},"353":{"tf":1.0},"373":{"tf":1.0},"426":{"tf":1.0}}}}},"â":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"276":{"tf":1.0}}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"c":{"1":{"[":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"2":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"3":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"4":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"5":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"6":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"[":{"0":{"2":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"420":{"tf":1.0},"82":{"tf":1.4142135623730951}}}},"d":{"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":22,"docs":{"104":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.4142135623730951},"167":{"tf":1.0},"175":{"tf":1.0},"187":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.0},"277":{"tf":1.4142135623730951},"356":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"84":{"tf":1.0}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"243":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"148":{"tf":1.0},"174":{"tf":1.7320508075688772},"296":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.4142135623730951},"413":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.7320508075688772}}}}}},"n":{"\'":{"df":0,"docs":{},"t":{"df":1,"docs":{"300":{"tf":1.0}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"425":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"347":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"377":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"173":{"tf":1.0},"175":{"tf":1.4142135623730951},"183":{"tf":1.4142135623730951},"317":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"304":{"tf":1.0}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"243":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":16,"docs":{"113":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":2.0},"252":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.4142135623730951},"293":{"tf":1.0},"296":{"tf":1.4142135623730951},"299":{"tf":1.0},"312":{"tf":1.7320508075688772},"320":{"tf":2.23606797749979},"321":{"tf":1.7320508075688772},"327":{"tf":1.0},"389":{"tf":1.7320508075688772},"390":{"tf":1.4142135623730951},"403":{"tf":1.7320508075688772}}}}},"s":{"c":{"a":{"d":{"df":1,"docs":{"360":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":6,"docs":{"102":{"tf":1.0},"163":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"23":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"394":{"tf":1.4142135623730951},"395":{"tf":1.0},"396":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"s":{"df":6,"docs":{"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}}},"d":{"df":9,"docs":{"109":{"tf":1.0},"123":{"tf":1.0},"158":{"tf":1.0},"166":{"tf":1.0},"178":{"tf":1.0},"289":{"tf":1.0},"291":{"tf":1.4142135623730951},"294":{"tf":1.0},"83":{"tf":1.0}},"n":{"/":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":4,"docs":{"214":{"tf":1.7320508075688772},"292":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.0}}}},"df":9,"docs":{"104":{"tf":1.0},"123":{"tf":2.0},"185":{"tf":1.4142135623730951},"19":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"394":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":120,"docs":{"1":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"161":{"tf":1.4142135623730951},"168":{"tf":1.4142135623730951},"177":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"231":{"tf":1.0},"237":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"282":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"3":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"347":{"tf":1.0},"35":{"tf":1.0},"352":{"tf":1.0},"358":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"379":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"388":{"tf":1.4142135623730951},"389":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.4142135623730951},"449":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.4142135623730951},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.4142135623730951},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.7320508075688772},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":2.0},"90":{"tf":1.0},"92":{"tf":1.0}},"l":{"a":{"df":2,"docs":{"148":{"tf":1.0},"417":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":1,"docs":{"153":{"tf":1.0}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"153":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"249":{"tf":1.0}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"df":5,"docs":{"101":{"tf":1.0},"115":{"tf":1.7320508075688772},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"129":{"tf":1.0}}}}},"df":1,"docs":{"133":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"t":{"df":154,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"176":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"244":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"282":{"tf":1.0},"283":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"312":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"h":{"a":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":4,"docs":{"116":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"97":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"133":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"m":{"df":0,"docs":{},"p":{"df":2,"docs":{"18":{"tf":1.0},"330":{"tf":1.0}}}},"n":{"df":1,"docs":{"348":{"tf":1.7320508075688772}},"g":{"df":4,"docs":{"18":{"tf":1.0},"294":{"tf":1.0},"355":{"tf":1.0},"424":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"m":{"df":2,"docs":{"442":{"tf":1.0},"83":{"tf":1.7320508075688772}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"243":{"tf":1.0},"318":{"tf":1.0},"357":{"tf":1.0}}}}}},"r":{"df":4,"docs":{"178":{"tf":1.0},"214":{"tf":1.0},"319":{"tf":1.0},"350":{"tf":1.0}}},"z":{"df":2,"docs":{"83":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":6,"docs":{"169":{"tf":1.0},"183":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.4142135623730951},"356":{"tf":1.0},"357":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":1,"docs":{"88":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":20,"docs":{"147":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.0},"173":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"186":{"tf":1.0},"205":{"tf":1.4142135623730951},"213":{"tf":1.0},"240":{"tf":1.0},"244":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.0},"312":{"tf":1.0},"355":{"tf":1.0},"388":{"tf":1.0},"397":{"tf":1.4142135623730951},"403":{"tf":1.0},"442":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"r":{"df":1,"docs":{"184":{"tf":1.0}},"g":{"df":6,"docs":{"133":{"tf":1.0},"150":{"tf":1.0},"174":{"tf":1.0},"293":{"tf":1.0},"327":{"tf":1.0},"414":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"236":{"tf":1.0}}}}}},"r":{"df":1,"docs":{"319":{"tf":1.0}}}},"é":{"df":5,"docs":{"166":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"254":{"tf":1.0},"318":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"327":{"tf":1.0},"328":{"tf":1.0}}}}},"u":{"d":{"df":2,"docs":{"232":{"tf":1.0},"240":{"tf":1.0}}},"df":0,"docs":{}},"î":{"df":0,"docs":{},"n":{"df":2,"docs":{"355":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"183":{"tf":1.0},"193":{"tf":1.0}},"k":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":1,"docs":{"330":{"tf":1.0}}}}},"df":11,"docs":{"174":{"tf":1.4142135623730951},"317":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"403":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"186":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"148":{"tf":1.0},"161":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":20,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"277":{"tf":1.4142135623730951},"284":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"158":{"tf":1.0}}}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"159":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":11,"docs":{"102":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"166":{"tf":1.4142135623730951},"172":{"tf":1.0},"19":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"2":{"tf":1.0}}}},"r":{"df":1,"docs":{"244":{"tf":1.0}}},"z":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"21":{"tf":1.0},"23":{"tf":1.0},"243":{"tf":1.4142135623730951}},"é":{"df":1,"docs":{"382":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":3,"docs":{"102":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"174":{"tf":1.0},"19":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"83":{"tf":1.0},"86":{"tf":1.0}}}}}}}},"x":{"df":1,"docs":{"76":{"tf":1.0}}}},"u":{"df":1,"docs":{"292":{"tf":1.0}},"e":{"df":7,"docs":{"133":{"tf":1.4142135623730951},"317":{"tf":1.0},"319":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.0},"332":{"tf":1.0},"377":{"tf":1.0}},"r":{"a":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"322":{"tf":1.0},"323":{"tf":1.4142135623730951}}}}}}}}},"i":{"\'":{")":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":11,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":10,"docs":{"148":{"tf":1.0},"164":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"186":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"447":{"tf":2.23606797749979},"57":{"tf":1.0},"9":{"tf":1.0}}}}}},"/":{"c":{"d":{"df":6,"docs":{"102":{"tf":1.0},"145":{"tf":1.0},"155":{"tf":1.0},"378":{"tf":1.0},"413":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":3,"docs":{"160":{"tf":1.0},"169":{"tf":1.0},"172":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"447":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"380":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"372":{"tf":1.0}}}}}}}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"381":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"=":{"3":{"6":{"0":{"0":{"df":2,"docs":{"102":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"183":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"180":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"186":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":2,"docs":{"180":{"tf":1.0},"186":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":4,"docs":{"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"8":{"0":{"8":{"1":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"186":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"236":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":6,"docs":{"102":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0},"186":{"tf":1.0},"378":{"tf":1.0},"414":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"238":{"tf":1.0},"319":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"96":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"156":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"160":{"tf":1.0},"166":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"175":{"tf":1.0},"372":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"169":{"tf":1.0},"183":{"tf":1.0},"238":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"=":{"4":{"df":3,"docs":{"102":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"185":{"tf":1.0},"372":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":3,"docs":{"150":{"tf":1.0},"156":{"tf":1.0},"186":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"=":{"1":{"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{"3":{".":{"1":{"1":{"0":{"df":1,"docs":{"296":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"154":{"tf":1.0}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"172":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"155":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"102":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.4142135623730951},"171":{"tf":1.0},"296":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":3,"docs":{"153":{"tf":1.0},"166":{"tf":1.4142135623730951},"238":{"tf":1.0}}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"163":{"tf":1.7320508075688772}}}}}}}}}},"df":0,"docs":{}},"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"154":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":5,"docs":{"146":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"163":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"154":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"155":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"150":{"tf":1.0},"153":{"tf":1.0},"163":{"tf":1.4142135623730951},"167":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"2":{"2":{"df":2,"docs":{"154":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"153":{"tf":1.0},"163":{"tf":1.0},"183":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"153":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"=":{"c":{"df":0,"docs":{},"i":{"df":4,"docs":{"154":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0},"296":{"tf":1.0}}}},"df":0,"docs":{}},"@":{"$":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"163":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"}":{"@":{"$":{"df":0,"docs":{},"{":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"183":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"184":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":2,"docs":{"177":{"tf":1.0},"186":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":4,"docs":{"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"320":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"177":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"184":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"372":{"tf":1.0}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"102":{"tf":1.0},"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"161":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"b":{"df":0,"docs":{},"l":{"df":5,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"95":{"tf":1.0}},"e":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":1,"docs":{"334":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"(":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}}}}},"df":61,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":2.23606797749979},"148":{"tf":2.449489742783178},"153":{"tf":1.4142135623730951},"154":{"tf":1.4142135623730951},"155":{"tf":1.0},"160":{"tf":3.0},"161":{"tf":2.0},"164":{"tf":1.0},"165":{"tf":1.4142135623730951},"166":{"tf":1.7320508075688772},"167":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":2.0},"173":{"tf":1.7320508075688772},"174":{"tf":2.0},"175":{"tf":1.0},"176":{"tf":1.0},"183":{"tf":1.4142135623730951},"186":{"tf":2.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"210":{"tf":1.4142135623730951},"221":{"tf":1.0},"272":{"tf":1.0},"281":{"tf":1.0},"29":{"tf":1.0},"296":{"tf":1.7320508075688772},"317":{"tf":2.449489742783178},"318":{"tf":3.0},"321":{"tf":1.0},"369":{"tf":1.0},"370":{"tf":1.4142135623730951},"375":{"tf":1.7320508075688772},"378":{"tf":1.0},"379":{"tf":1.4142135623730951},"380":{"tf":1.4142135623730951},"381":{"tf":1.0},"382":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"420":{"tf":1.4142135623730951},"436":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"447":{"tf":2.449489742783178},"5":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"370":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"370":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}},"e":{"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"380":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":2,"docs":{"169":{"tf":1.0},"175":{"tf":1.0}}}}},"df":0,"docs":{}},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":5,"docs":{"169":{"tf":1.0},"372":{"tf":1.0},"380":{"tf":1.0},"413":{"tf":2.0},"420":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":1,"docs":{"370":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"|":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"185":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"375":{"tf":1.0}}},"r":{"df":3,"docs":{"352":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0}},"é":{"df":1,"docs":{"281":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"147":{"tf":1.0}}}}}}},"u":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":30,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":2.449489742783178},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"179":{"tf":1.0},"183":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.7320508075688772},"196":{"tf":1.0},"20":{"tf":3.0},"208":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":2.23606797749979},"243":{"tf":1.0},"257":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.4142135623730951},"374":{"tf":1.4142135623730951},"382":{"tf":1.0},"413":{"tf":1.0},"422":{"tf":1.0},"426":{"tf":1.4142135623730951},"7":{"tf":1.0},"72":{"tf":1.0},"83":{"tf":1.4142135623730951}},"i":{"df":10,"docs":{"146":{"tf":1.0},"148":{"tf":1.0},"160":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"356":{"tf":1.7320508075688772},"370":{"tf":1.0},"413":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"425":{"tf":1.0}}}}}},".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"1":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"316":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"x":{"_":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"s":{"df":2,"docs":{"133":{"tf":1.0},"202":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":19,"docs":{"127":{"tf":1.0},"133":{"tf":1.0},"169":{"tf":1.0},"188":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.4142135623730951},"204":{"tf":1.7320508075688772},"206":{"tf":1.4142135623730951},"207":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"276":{"tf":1.0},"316":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.0},"413":{"tf":1.0},"424":{"tf":3.3166247903554},"425":{"tf":2.449489742783178},"449":{"tf":2.0}},"s":{"/":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":2,"docs":{"449":{"tf":1.0},"451":{"tf":1.0}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"449":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"449":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":6,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"253":{"tf":1.0}}},"z":{"df":2,"docs":{"294":{"tf":1.4142135623730951},"86":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"424":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"202":{"tf":1.0}}}}}}},"df":17,"docs":{"123":{"tf":1.4142135623730951},"189":{"tf":1.0},"194":{"tf":1.0},"24":{"tf":1.0},"278":{"tf":1.0},"289":{"tf":1.4142135623730951},"294":{"tf":1.7320508075688772},"301":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.4142135623730951},"351":{"tf":1.0},"356":{"tf":2.0},"357":{"tf":1.4142135623730951},"421":{"tf":1.0},"422":{"tf":1.0},"424":{"tf":1.7320508075688772}},"r":{"df":7,"docs":{"24":{"tf":1.0},"25":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"396":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}},"z":{"df":1,"docs":{"289":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"133":{"tf":1.0}}}},"u":{"d":{"df":1,"docs":{"147":{"tf":1.0}}},"df":0,"docs":{}}},"é":{"df":12,"docs":{"15":{"tf":1.0},"167":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"416":{"tf":1.0},"424":{"tf":1.0},"448":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.4142135623730951}}}},"m":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}}}},"d":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"21":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"173":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"e":{"df":28,"docs":{"100":{"tf":1.0},"148":{"tf":1.0},"16":{"tf":1.7320508075688772},"167":{"tf":1.0},"168":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":2.8284271247461903},"191":{"tf":1.0},"2":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"257":{"tf":1.0},"276":{"tf":1.4142135623730951},"279":{"tf":1.0},"280":{"tf":1.0},"352":{"tf":1.0},"364":{"tf":1.0},"380":{"tf":1.0},"390":{"tf":1.0},"394":{"tf":1.0},"398":{"tf":1.0},"4":{"tf":1.0},"403":{"tf":1.0},"421":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"é":{"df":2,"docs":{"244":{"tf":1.0},"249":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"155":{"tf":1.0},"375":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"165":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"397":{"tf":1.0},"417":{"tf":1.0}}}}}}}},"l":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"d":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":6,"docs":{"10":{"tf":1.0},"27":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"65":{"tf":1.0},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"5":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"294":{"tf":1.0}}}}},"df":2,"docs":{"20":{"tf":1.0},"23":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"123":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"167":{"tf":1.0}},"é":{"df":1,"docs":{"147":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":2,"docs":{"199":{"tf":1.0},"244":{"tf":1.0}},"é":{"df":1,"docs":{"372":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"374":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":22,"docs":{"100":{"tf":1.0},"16":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.4142135623730951},"183":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"296":{"tf":1.4142135623730951},"310":{"tf":1.0},"320":{"tf":1.0},"324":{"tf":1.0},"389":{"tf":1.0},"425":{"tf":1.0},"5":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.4142135623730951}},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"425":{"tf":1.0}},"e":{"(":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":7,"docs":{"16":{"tf":1.4142135623730951},"249":{"tf":1.0},"347":{"tf":1.0},"420":{"tf":1.0},"6":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"375":{"tf":1.0},"394":{"tf":1.0},"442":{"tf":1.4142135623730951}}}}},"df":12,"docs":{"10":{"tf":1.0},"108":{"tf":2.0},"168":{"tf":1.0},"231":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"3":{"tf":1.0},"358":{"tf":1.0},"451":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0}},"é":{"df":2,"docs":{"166":{"tf":1.0},"377":{"tf":1.0}}}},"ç":{"df":1,"docs":{"19":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"373":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"a":{"df":2,"docs":{"185":{"tf":1.4142135623730951},"380":{"tf":1.0}}},"df":0,"docs":{}}}},"df":16,"docs":{"123":{"tf":1.0},"171":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"284":{"tf":1.0},"287":{"tf":1.0},"294":{"tf":2.449489742783178},"299":{"tf":1.0},"375":{"tf":1.0},"428":{"tf":1.0},"43":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}}},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"151":{"tf":1.0},"18":{"tf":1.0},"390":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":10,"docs":{"277":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.4142135623730951},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":2.0},"299":{"tf":1.0},"300":{"tf":1.0},"389":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"284":{"tf":1.0},"292":{"tf":1.0}}}},"é":{"df":4,"docs":{"292":{"tf":1.0},"293":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":6,"docs":{"155":{"tf":1.0},"174":{"tf":1.0},"331":{"tf":1.0},"345":{"tf":1.0},"353":{"tf":1.0},"396":{"tf":1.0}}},"x":{"df":1,"docs":{"447":{"tf":1.0}}}},"è":{"df":0,"docs":{},"t":{"df":10,"docs":{"125":{"tf":1.0},"187":{"tf":1.0},"258":{"tf":1.0},"277":{"tf":1.0},"284":{"tf":1.0},"290":{"tf":1.0},"421":{"tf":1.0},"448":{"tf":1.4142135623730951},"5":{"tf":1.0},"73":{"tf":1.0}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"t":{"df":4,"docs":{"278":{"tf":1.0},"286":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"o":{"df":1,"docs":{"82":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"t":{"df":5,"docs":{"237":{"tf":1.0},"245":{"tf":1.0},"319":{"tf":1.4142135623730951},"75":{"tf":1.0},"9":{"tf":1.0}}}},"s":{"df":24,"docs":{"101":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"181":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"318":{"tf":1.0},"369":{"tf":1.0},"378":{"tf":1.0},"381":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.7320508075688772},"85":{"tf":2.23606797749979},"86":{"tf":1.0},"87":{"tf":1.4142135623730951},"88":{"tf":2.0}},"e":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"444":{"tf":1.0},"451":{"tf":1.0},"84":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"444":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"444":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":6,"docs":{"109":{"tf":2.0},"178":{"tf":1.4142135623730951},"2":{"tf":1.0},"323":{"tf":1.0},"84":{"tf":2.0},"88":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"174":{"tf":1.0},"6":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.4142135623730951},"16":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.4142135623730951},"287":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.0},"76":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"355":{"tf":1.0},"417":{"tf":1.0}}}}}},"t":{"df":16,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"213":{"tf":1.0},"22":{"tf":1.0},"243":{"tf":1.4142135623730951},"290":{"tf":1.0},"293":{"tf":1.0},"72":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"86":{"tf":2.23606797749979},"87":{"tf":1.0}},"e":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"19":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"181":{"tf":1.0},"346":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"423":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"415":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":1,"docs":{"236":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":2,"docs":{"183":{"tf":1.0},"352":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"84":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":2,"docs":{"116":{"tf":1.0},"130":{"tf":1.0}},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":20,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"150":{"tf":1.0},"155":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"211":{"tf":1.0},"254":{"tf":1.0},"258":{"tf":1.0},"288":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"4":{"tf":1.0},"445":{"tf":1.0},"82":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":40,"docs":{"125":{"tf":1.0},"127":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"16":{"tf":1.0},"160":{"tf":1.4142135623730951},"168":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.0},"180":{"tf":1.0},"187":{"tf":1.0},"2":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.7320508075688772},"233":{"tf":1.0},"235":{"tf":1.7320508075688772},"239":{"tf":1.0},"249":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"313":{"tf":1.0},"317":{"tf":1.0},"325":{"tf":1.0},"35":{"tf":1.0},"445":{"tf":1.0},"447":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.7320508075688772},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.7320508075688772},"84":{"tf":1.0},"98":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":4,"docs":{"284":{"tf":1.0},"290":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0}}}},"é":{"df":1,"docs":{"322":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"18":{"tf":1.0},"243":{"tf":1.0},"330":{"tf":1.0},"86":{"tf":1.0}},"é":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"327":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"u":{"df":2,"docs":{"189":{"tf":1.0},"207":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"276":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"1":{"tf":1.0},"264":{"tf":1.0},"388":{"tf":1.0},"75":{"tf":1.0}}}}}}}},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"71":{"tf":1.0}}}}},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}},"r":{"df":1,"docs":{"231":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":15,"docs":{"104":{"tf":1.7320508075688772},"133":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":2.0},"23":{"tf":1.0},"253":{"tf":1.0},"291":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"6":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"293":{"tf":1.0},"86":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0}}}}}},"é":{"df":1,"docs":{"328":{"tf":1.0}}}}},"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"16":{"tf":1.0},"189":{"tf":1.0},"20":{"tf":1.0},"290":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.4142135623730951},"414":{"tf":1.0},"424":{"tf":1.0},"443":{"tf":1.0},"5":{"tf":1.0},"86":{"tf":1.0}}}}}}},"u":{"df":1,"docs":{"168":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"18":{"tf":1.0},"347":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}},"m":{"df":0,"docs":{},"m":{"df":3,"docs":{"169":{"tf":1.0},"352":{"tf":1.0},"4":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"402":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}},"s":{"df":4,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.0},"76":{"tf":1.0}}},"t":{"df":2,"docs":{"412":{"tf":1.0},"416":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":7,"docs":{"20":{"tf":1.0},"280":{"tf":1.0},"324":{"tf":1.0},"49":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":76,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"279":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"85":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"214":{"tf":1.0},"242":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"171":{"tf":1.0},"291":{"tf":1.4142135623730951},"381":{"tf":1.0},"420":{"tf":1.0},"85":{"tf":2.0},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"214":{"tf":1.0},"96":{"tf":1.0}}}}},"t":{"df":3,"docs":{"133":{"tf":1.0},"352":{"tf":1.0},"418":{"tf":1.0}}},"u":{"df":78,"docs":{"104":{"tf":1.0},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"189":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"284":{"tf":1.0},"29":{"tf":1.0},"294":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"84":{"tf":1.4142135623730951},"90":{"tf":1.0},"92":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"451":{"tf":1.0}}},"t":{"df":5,"docs":{"166":{"tf":1.0},"174":{"tf":1.0},"23":{"tf":1.0},"3":{"tf":1.0},"88":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"85":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.4142135623730951}}}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"396":{"tf":1.0}}}}}},"df":2,"docs":{"205":{"tf":1.4142135623730951},"322":{"tf":1.0}},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}}},"i":{"b":{"df":0,"docs":{},"u":{"df":6,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"358":{"tf":1.0},"4":{"tf":1.0}},"t":{"df":5,"docs":{"278":{"tf":1.0},"279":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"308":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"9":{"0":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}},"ô":{"df":0,"docs":{},"l":{"df":3,"docs":{"332":{"tf":1.0},"381":{"tf":1.0},"394":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"442":{"tf":1.0}}}},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"396":{"tf":1.0}}}}}},"ç":{"df":0,"docs":{},"u":{"df":1,"docs":{"1":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":1,"docs":{"394":{"tf":1.0}},"e":{"_":{"df":1,"docs":{"236":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"x":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"133":{"tf":1.0},"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"4":{"tf":1.0},"442":{"tf":1.0}}}},"df":0,"docs":{}},"df":6,"docs":{"171":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"442":{"tf":1.0},"448":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"156":{"tf":1.0},"179":{"tf":1.0},"287":{"tf":1.0},"396":{"tf":1.0},"6":{"tf":1.0}}},"z":{"df":3,"docs":{"290":{"tf":1.4142135623730951},"442":{"tf":1.0},"451":{"tf":1.0}}}},"é":{"df":1,"docs":{"20":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"287":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":21,"docs":{"276":{"tf":1.0},"277":{"tf":1.0},"280":{"tf":1.0},"289":{"tf":1.4142135623730951},"312":{"tf":1.0},"320":{"tf":1.4142135623730951},"358":{"tf":1.0},"361":{"tf":1.4142135623730951},"363":{"tf":1.7320508075688772},"370":{"tf":3.0},"372":{"tf":1.7320508075688772},"383":{"tf":1.0},"392":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"408":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"416":{"tf":2.0},"429":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"300":{"tf":1.0},"317":{"tf":1.0},"356":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"364":{"tf":1.0}}}}},"df":8,"docs":{"23":{"tf":1.0},"249":{"tf":1.0},"258":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"442":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}},"r":{"df":1,"docs":{"21":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"178":{"tf":1.0}}}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"19":{"tf":1.0},"397":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"289":{"tf":1.0},"294":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"105":{"tf":1.0},"153":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"279":{"tf":1.0},"348":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"df":3,"docs":{"173":{"tf":1.0},"317":{"tf":1.0},"362":{"tf":1.0}}},"t":{"df":5,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"113":{"tf":1.0},"133":{"tf":1.0},"414":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"192":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"318":{"tf":1.0},"396":{"tf":1.0}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"422":{"tf":1.0}}}}},"df":3,"docs":{"199":{"tf":1.0},"276":{"tf":1.0},"71":{"tf":1.0}}}}},"û":{"df":0,"docs":{},"t":{"df":2,"docs":{"349":{"tf":1.0},"355":{"tf":1.0}}}}},"p":{"df":3,"docs":{"111":{"tf":1.0},"166":{"tf":1.0},"290":{"tf":1.0}},"u":{"/":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"148":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"a":{"df":1,"docs":{"242":{"tf":1.0}},"n":{"df":1,"docs":{"6":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"347":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":15,"docs":{"276":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.4142135623730951},"3":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"361":{"tf":1.0},"369":{"tf":1.4142135623730951},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"383":{"tf":1.7320508075688772},"390":{"tf":1.0},"413":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"259":{"tf":1.0},"361":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"416":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":9,"docs":{"153":{"tf":1.0},"160":{"tf":1.0},"22":{"tf":1.0},"242":{"tf":1.0},"290":{"tf":1.0},"319":{"tf":1.0},"6":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":7,"docs":{"241":{"tf":1.0},"291":{"tf":2.0},"293":{"tf":1.0},"294":{"tf":1.0},"348":{"tf":1.0},"449":{"tf":1.0},"85":{"tf":1.7320508075688772}},"e":{"\\"":{",":{"\\"":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"\\"":{",":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"\\"":{",":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"(":{"d":{"b":{"df":2,"docs":{"423":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"429":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"175":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"b":{"df":1,"docs":{"323":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"325":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"301":{"tf":1.0}}}},"t":{"df":4,"docs":{"346":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"i":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"180":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"181":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":5,"docs":{"102":{"tf":1.0},"242":{"tf":1.0},"319":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"425":{"tf":1.0}}}},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"389":{"tf":1.0}}}}}},"u":{"d":{"df":6,"docs":{"317":{"tf":1.0},"318":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.4142135623730951},"396":{"tf":1.0},"449":{"tf":1.0}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"394":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"é":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":13,"docs":{"160":{"tf":1.0},"171":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"293":{"tf":1.7320508075688772},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"346":{"tf":1.0},"393":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":11,"docs":{"113":{"tf":1.0},"13":{"tf":1.0},"146":{"tf":1.0},"21":{"tf":1.0},"242":{"tf":1.0},"313":{"tf":1.0},"325":{"tf":1.4142135623730951},"327":{"tf":1.0},"331":{"tf":1.0},"376":{"tf":1.0},"397":{"tf":1.0}},"r":{"df":26,"docs":{"123":{"tf":1.0},"127":{"tf":1.0},"14":{"tf":1.0},"174":{"tf":1.4142135623730951},"179":{"tf":1.4142135623730951},"197":{"tf":1.0},"198":{"tf":1.0},"21":{"tf":1.0},"243":{"tf":1.0},"278":{"tf":1.0},"294":{"tf":1.0},"3":{"tf":1.0},"301":{"tf":1.0},"304":{"tf":1.0},"314":{"tf":1.7320508075688772},"317":{"tf":1.0},"324":{"tf":1.0},"331":{"tf":1.7320508075688772},"332":{"tf":1.4142135623730951},"334":{"tf":1.0},"37":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"86":{"tf":1.0}}},"z":{"df":4,"docs":{"294":{"tf":1.0},"83":{"tf":1.7320508075688772},"84":{"tf":1.4142135623730951},"86":{"tf":1.0}}}},"é":{"df":1,"docs":{"161":{"tf":1.0}},"e":{"df":2,"docs":{"186":{"tf":1.0},"317":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"400":{"tf":1.0}}},"r":{"df":0,"docs":{},"f":{"df":3,"docs":{"393":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.4142135623730951}}}},"s":{"/":{"df":0,"docs":{},"j":{"df":2,"docs":{"400":{"tf":1.0},"418":{"tf":1.0}}}},"df":7,"docs":{"285":{"tf":1.0},"287":{"tf":1.0},"292":{"tf":1.7320508075688772},"299":{"tf":1.0},"375":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"c":{"df":2,"docs":{"252":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"349":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"l":{"df":12,"docs":{"119":{"tf":1.4142135623730951},"124":{"tf":1.0},"133":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"166":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"206":{"tf":1.0},"288":{"tf":1.0},"449":{"tf":1.0},"84":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"206":{"tf":1.0},"207":{"tf":1.4142135623730951}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"190":{"tf":1.0},"205":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"d":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"390":{"tf":1.0}}}},"y":{"c":{"df":0,"docs":{},"l":{"df":3,"docs":{"10":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"x":{"df":4,"docs":{"176":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"381":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"ô":{"df":0,"docs":{},"t":{"df":16,"docs":{"108":{"tf":1.0},"165":{"tf":1.4142135623730951},"166":{"tf":1.0},"167":{"tf":1.0},"200":{"tf":1.0},"214":{"tf":1.0},"332":{"tf":1.0},"355":{"tf":1.0},"358":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"67":{"tf":1.0}}}},"œ":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"82":{"tf":1.0}}}}},"’":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":77,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"147":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"249":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}},"d":{"\'":{"a":{"c":{"c":{"df":0,"docs":{},"è":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"325":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"193":{"tf":1.0},"325":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"124":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":2,"docs":{"244":{"tf":1.0},"325":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"124":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"207":{"tf":1.0}}},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"189":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}}},"é":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"df":0,"docs":{}}},"[":{"0":{"3":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"420":{"tf":1.0},"444":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"174":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"317":{"tf":1.4142135623730951}}}}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"[":{"\\"":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"169":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":34,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"156":{"tf":1.0},"160":{"tf":2.0},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.7320508075688772},"174":{"tf":2.8284271247461903},"183":{"tf":1.4142135623730951},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"210":{"tf":1.4142135623730951},"272":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":2.0},"317":{"tf":1.4142135623730951},"370":{"tf":1.4142135623730951},"379":{"tf":2.0},"380":{"tf":2.23606797749979},"381":{"tf":1.4142135623730951},"413":{"tf":2.23606797749979},"414":{"tf":1.0},"420":{"tf":1.4142135623730951},"436":{"tf":1.0},"444":{"tf":1.0},"447":{"tf":1.4142135623730951},"76":{"tf":1.0},"96":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":6,"docs":{"281":{"tf":1.0},"292":{"tf":1.0},"333":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.0},"438":{"tf":1.0}}}}}}},"n":{"df":168,"docs":{"102":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":1.0},"123":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"151":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"160":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.7320508075688772},"167":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.7320508075688772},"175":{"tf":1.7320508075688772},"177":{"tf":1.7320508075688772},"179":{"tf":1.0},"18":{"tf":1.7320508075688772},"181":{"tf":1.0},"186":{"tf":2.449489742783178},"188":{"tf":1.0},"19":{"tf":1.4142135623730951},"190":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":2.0},"202":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"213":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.7320508075688772},"240":{"tf":1.0},"244":{"tf":1.7320508075688772},"249":{"tf":1.7320508075688772},"25":{"tf":1.0},"253":{"tf":1.0},"257":{"tf":1.7320508075688772},"258":{"tf":1.7320508075688772},"259":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"282":{"tf":1.0},"285":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.7320508075688772},"291":{"tf":1.4142135623730951},"293":{"tf":1.7320508075688772},"294":{"tf":2.0},"296":{"tf":1.4142135623730951},"297":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":2.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"312":{"tf":1.0},"317":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"35":{"tf":1.0},"351":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":2.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"381":{"tf":1.0},"382":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"390":{"tf":1.4142135623730951},"394":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.0},"403":{"tf":1.4142135623730951},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"417":{"tf":1.0},"420":{"tf":1.0},"428":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.4142135623730951},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":2.0},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"86":{"tf":1.0},"88":{"tf":1.7320508075688772},"90":{"tf":1.0},"92":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"b":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"r":{"d":{"df":4,"docs":{"330":{"tf":1.7320508075688772},"331":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"375":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":2,"docs":{"293":{"tf":1.0},"326":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"291":{"tf":1.7320508075688772},"293":{"tf":1.0},"300":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"109":{"tf":1.0},"323":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"155":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"}":{"@":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"@":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"@":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"290":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":5,"docs":{"185":{"tf":1.4142135623730951},"238":{"tf":1.0},"291":{"tf":1.7320508075688772},"300":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"333":{"tf":1.0},"424":{"tf":1.4142135623730951},"425":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":2,"docs":{"199":{"tf":1.0},"23":{"tf":1.0}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"b":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"313":{"tf":1.0},"325":{"tf":1.0}}}}},"[":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"a":{"df":0,"docs":{},"l":{"(":{"\\"":{"df":0,"docs":{},"m":{"a":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\"":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"259":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"=":{"4":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":36,"docs":{"169":{"tf":1.4142135623730951},"180":{"tf":2.0},"185":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"247":{"tf":1.4142135623730951},"248":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"259":{"tf":1.0},"313":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"316":{"tf":1.7320508075688772},"325":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.4142135623730951},"347":{"tf":1.4142135623730951},"348":{"tf":3.4641016151377544},"349":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":2.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.4142135623730951},"360":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"414":{"tf":2.23606797749979},"423":{"tf":2.6457513110645907},"424":{"tf":2.449489742783178},"425":{"tf":2.0},"426":{"tf":2.23606797749979},"427":{"tf":2.6457513110645907},"428":{"tf":2.23606797749979},"429":{"tf":1.7320508075688772}}},"df":18,"docs":{"109":{"tf":1.0},"117":{"tf":1.0},"129":{"tf":1.4142135623730951},"174":{"tf":1.0},"178":{"tf":1.0},"206":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0}},"e":{"b":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":3,"docs":{"101":{"tf":1.0},"147":{"tf":1.0},"199":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"df":4,"docs":{"101":{"tf":1.0},"151":{"tf":1.0},"288":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"g":{"df":4,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"393":{"tf":1.0},"443":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}},"d":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":325,"docs":{"1":{"tf":2.449489742783178},"10":{"tf":1.7320508075688772},"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":2.0},"104":{"tf":1.7320508075688772},"106":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"122":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.4142135623730951},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.4142135623730951},"148":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"150":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.4142135623730951},"154":{"tf":1.0},"16":{"tf":2.8284271247461903},"160":{"tf":2.0},"161":{"tf":1.7320508075688772},"164":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":2.23606797749979},"168":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"17":{"tf":2.0},"171":{"tf":2.6457513110645907},"172":{"tf":2.0},"174":{"tf":1.4142135623730951},"176":{"tf":1.4142135623730951},"177":{"tf":1.0},"18":{"tf":2.0},"181":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.7320508075688772},"193":{"tf":1.0},"194":{"tf":1.0},"196":{"tf":1.0},"199":{"tf":1.7320508075688772},"2":{"tf":2.6457513110645907},"20":{"tf":1.0},"201":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.4142135623730951},"206":{"tf":1.0},"208":{"tf":1.0},"21":{"tf":1.4142135623730951},"210":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":3.0},"230":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.7320508075688772},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":3.3166247903554},"244":{"tf":1.0},"249":{"tf":2.23606797749979},"25":{"tf":1.0},"250":{"tf":1.7320508075688772},"26":{"tf":1.0},"260":{"tf":1.7320508075688772},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.4142135623730951},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.4142135623730951},"275":{"tf":1.0},"276":{"tf":2.0},"277":{"tf":2.23606797749979},"278":{"tf":1.4142135623730951},"279":{"tf":2.23606797749979},"28":{"tf":1.0},"280":{"tf":2.23606797749979},"281":{"tf":2.6457513110645907},"282":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":2.0},"286":{"tf":1.7320508075688772},"287":{"tf":1.4142135623730951},"288":{"tf":2.0},"289":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.7320508075688772},"291":{"tf":1.4142135623730951},"293":{"tf":2.449489742783178},"294":{"tf":1.0},"296":{"tf":1.4142135623730951},"298":{"tf":1.7320508075688772},"3":{"tf":2.0},"30":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.4142135623730951},"309":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.7320508075688772},"314":{"tf":1.7320508075688772},"316":{"tf":1.0},"318":{"tf":1.4142135623730951},"319":{"tf":1.4142135623730951},"32":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":2.0},"324":{"tf":1.4142135623730951},"325":{"tf":2.0},"326":{"tf":1.7320508075688772},"327":{"tf":1.7320508075688772},"329":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":3.0},"331":{"tf":2.449489742783178},"332":{"tf":2.0},"333":{"tf":2.6457513110645907},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.7320508075688772},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.4142135623730951},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":2.0},"346":{"tf":1.7320508075688772},"347":{"tf":2.0},"349":{"tf":1.4142135623730951},"35":{"tf":1.0},"351":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"353":{"tf":2.0},"354":{"tf":1.0},"356":{"tf":2.23606797749979},"357":{"tf":2.0},"359":{"tf":1.0},"36":{"tf":1.0},"361":{"tf":1.7320508075688772},"363":{"tf":1.4142135623730951},"364":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":1.0},"37":{"tf":1.0},"372":{"tf":1.4142135623730951},"373":{"tf":1.7320508075688772},"375":{"tf":1.4142135623730951},"376":{"tf":1.0},"377":{"tf":1.4142135623730951},"379":{"tf":1.0},"38":{"tf":1.0},"381":{"tf":2.0},"382":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.7320508075688772},"387":{"tf":1.0},"388":{"tf":1.4142135623730951},"389":{"tf":1.0},"39":{"tf":1.0},"390":{"tf":2.0},"391":{"tf":1.0},"393":{"tf":2.449489742783178},"394":{"tf":1.4142135623730951},"396":{"tf":1.0},"397":{"tf":2.6457513110645907},"398":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"401":{"tf":1.4142135623730951},"403":{"tf":1.4142135623730951},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.7320508075688772},"415":{"tf":1.0},"416":{"tf":2.449489742783178},"417":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":2.23606797749979},"42":{"tf":1.0},"421":{"tf":1.7320508075688772},"422":{"tf":2.449489742783178},"423":{"tf":1.4142135623730951},"426":{"tf":1.0},"427":{"tf":1.0},"429":{"tf":1.0},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.4142135623730951},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":2.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":2.0},"449":{"tf":1.0},"45":{"tf":1.0},"450":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.4142135623730951},"7":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":2.23606797749979},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.7320508075688772},"76":{"tf":2.0},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.7320508075688772},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":3.1622776601683795},"84":{"tf":2.0},"85":{"tf":2.23606797749979},"86":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.4142135623730951},"98":{"tf":1.7320508075688772}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"238":{"tf":1.0},"319":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":2,"docs":{"102":{"tf":1.0},"298":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":5,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"213":{"tf":1.0},"300":{"tf":1.0},"394":{"tf":1.0}}}},"t":{"\\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":9,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"146":{"tf":1.0},"165":{"tf":1.0},"241":{"tf":1.0},"373":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}},"t":{"a":{"df":2,"docs":{"294":{"tf":1.4142135623730951},"356":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"1":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"i":{"df":5,"docs":{"166":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"390":{"tf":1.0}}},"y":{"(":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"392":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"392":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"df":2,"docs":{"208":{"tf":1.4142135623730951},"390":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":16,"docs":{"1":{"tf":1.0},"168":{"tf":1.7320508075688772},"176":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.4142135623730951},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"195":{"tf":1.0},"196":{"tf":1.0},"211":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"74":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"84":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"113":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"102":{"tf":1.0},"110":{"tf":1.0},"113":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"q":{"d":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"=":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"111":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"113":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"123":{"tf":2.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"/":{"c":{"df":0,"docs":{},"i":{"df":6,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"174":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"111":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"111":{"tf":2.0}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"112":{"tf":1.0},"113":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"116":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":5,"docs":{"146":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"171":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0}}}}}}},"df":2,"docs":{"21":{"tf":1.7320508075688772},"22":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"df":29,"docs":{"104":{"tf":1.4142135623730951},"106":{"tf":1.0},"147":{"tf":1.0},"158":{"tf":1.0},"161":{"tf":1.0},"163":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"20":{"tf":1.0},"206":{"tf":1.0},"240":{"tf":1.0},"285":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"299":{"tf":1.0},"400":{"tf":1.0},"414":{"tf":1.0},"418":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.4142135623730951},"451":{"tf":1.4142135623730951},"5":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"89":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"443":{"tf":1.0}}}}}}},"s":{"c":{"df":1,"docs":{"185":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":11,"docs":{"153":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"257":{"tf":1.0},"317":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":2.0},"332":{"tf":1.0},"333":{"tf":1.0},"419":{"tf":1.0},"423":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"375":{"tf":1.4142135623730951},"417":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":3,"docs":{"189":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0}}}},"u":{"df":2,"docs":{"147":{"tf":1.0},"416":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"x":{"df":19,"docs":{"103":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"168":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.4142135623730951},"244":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"291":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"412":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.0}},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"109":{"tf":1.0},"206":{"tf":1.0}}}}},"t":{"c":{"df":0,"docs":{},"p":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"[":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":9,"docs":{"108":{"tf":1.0},"147":{"tf":1.0},"169":{"tf":1.4142135623730951},"252":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.4142135623730951},"293":{"tf":1.0},"424":{"tf":1.7320508075688772},"425":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"421":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"451":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"/":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"421":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"421":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"z":{"df":4,"docs":{"277":{"tf":1.4142135623730951},"293":{"tf":1.0},"300":{"tf":1.0},"72":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"214":{"tf":1.0}}},"t":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"133":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":5,"docs":{"250":{"tf":1.0},"281":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"389":{"tf":1.0}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.0},"290":{"tf":1.0},"330":{"tf":1.0}}}}}}}}},"g":{"df":2,"docs":{"101":{"tf":1.0},"133":{"tf":1.0}}},"r":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"373":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":16,"docs":{"133":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.0},"163":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"181":{"tf":1.0},"187":{"tf":1.0},"255":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.0},"355":{"tf":1.0},"362":{"tf":1.0},"379":{"tf":1.0},"383":{"tf":1.0},"419":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"184":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"101":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":1.0},"178":{"tf":1.0},"295":{"tf":1.0},"298":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"364":{"tf":1.0},"394":{"tf":1.0},"72":{"tf":1.0}}},"s":{"df":1,"docs":{"171":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"287":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"393":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"145":{"tf":1.4142135623730951},"146":{"tf":1.4142135623730951},"148":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"160":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.0},"210":{"tf":1.0},"420":{"tf":1.0},"443":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"232":{"tf":1.0},"346":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"198":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"105":{"tf":1.0},"111":{"tf":1.0},"252":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"290":{"tf":1.0}}}},"z":{"df":1,"docs":{"290":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"153":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"351":{"tf":1.4142135623730951},"357":{"tf":1.0}}}}},"á":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":73,"docs":{"12":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"l":{".":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"151":{"tf":1.0},"166":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":3,"docs":{"101":{"tf":1.0},"128":{"tf":1.0},"133":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"444":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"214":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"3":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"169":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":41,"docs":{"101":{"tf":1.4142135623730951},"109":{"tf":1.7320508075688772},"124":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"148":{"tf":1.7320508075688772},"151":{"tf":1.7320508075688772},"156":{"tf":1.0},"160":{"tf":1.7320508075688772},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"178":{"tf":1.7320508075688772},"186":{"tf":1.0},"2":{"tf":1.0},"205":{"tf":1.0},"212":{"tf":1.0},"286":{"tf":1.0},"291":{"tf":1.4142135623730951},"300":{"tf":1.0},"318":{"tf":1.4142135623730951},"323":{"tf":1.0},"444":{"tf":1.7320508075688772},"445":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.4142135623730951},"79":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":2.0},"82":{"tf":2.0},"84":{"tf":3.0},"85":{"tf":2.449489742783178},"86":{"tf":1.0},"87":{"tf":1.4142135623730951},"88":{"tf":2.23606797749979},"89":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}}}},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"168":{"tf":1.0},"174":{"tf":1.0},"2":{"tf":1.4142135623730951},"231":{"tf":1.0},"235":{"tf":1.0},"258":{"tf":1.0},"280":{"tf":1.0},"3":{"tf":1.4142135623730951},"358":{"tf":1.0},"388":{"tf":1.0},"4":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}}}}},"df":1,"docs":{"394":{"tf":1.0}},"i":{"df":2,"docs":{"17":{"tf":1.0},"6":{"tf":1.7320508075688772}},"t":{"df":18,"docs":{"106":{"tf":1.0},"133":{"tf":1.4142135623730951},"163":{"tf":1.0},"164":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.4142135623730951},"18":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"212":{"tf":1.0},"290":{"tf":1.0},"294":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"394":{"tf":1.0},"83":{"tf":1.0},"98":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"288":{"tf":1.0},"292":{"tf":1.0},"85":{"tf":1.0}}}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{">":{"/":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"133":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"116":{"tf":1.0}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"124":{"tf":1.0}}}}}}}},":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},";":{"/":{"df":0,"docs":{},"g":{"df":1,"docs":{"130":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":17,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951},"111":{"tf":1.0},"117":{"tf":1.0},"119":{"tf":1.4142135623730951},"124":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.4142135623730951},"130":{"tf":1.0},"131":{"tf":1.4142135623730951},"133":{"tf":1.0},"243":{"tf":1.0},"363":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"400":{"tf":1.0},"95":{"tf":1.0}},"e":{">":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"146":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"c":{"df":2,"docs":{"152":{"tf":1.0},"244":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":5,"docs":{"104":{"tf":1.0},"206":{"tf":1.0},"289":{"tf":1.7320508075688772},"292":{"tf":1.0},"294":{"tf":1.7320508075688772}}},"n":{"df":1,"docs":{"20":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}},"z":{"df":1,"docs":{"294":{"tf":1.0}}}},"é":{"df":28,"docs":{"102":{"tf":1.0},"249":{"tf":1.4142135623730951},"260":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.4142135623730951},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"293":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"339":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"373":{"tf":1.0},"386":{"tf":1.0},"397":{"tf":1.4142135623730951},"412":{"tf":1.0},"419":{"tf":1.0},"443":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":2.0},"88":{"tf":1.0}}}},"t":{"df":2,"docs":{"152":{"tf":1.0},"349":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"16":{"tf":1.4142135623730951},"428":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"y":{":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"234":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"1":{"tf":1.0},"35":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"332":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0}}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"84":{"tf":1.0},"88":{"tf":1.4142135623730951}},"s":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"118":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"17":{"tf":1.0},"21":{"tf":1.0},"86":{"tf":1.0}}}},"p":{"d":{"b":{"df":1,"docs":{"323":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"383":{"tf":1.0}}}},"w":{"df":0,"docs":{},"x":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"414":{"tf":1.0}},"o":{"df":1,"docs":{"372":{"tf":1.0}},"s":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{":":{"8":{"0":{"8":{"0":{"df":1,"docs":{"211":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"[":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":11,"docs":{"169":{"tf":1.4142135623730951},"180":{"tf":2.6457513110645907},"184":{"tf":1.4142135623730951},"189":{"tf":2.449489742783178},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"204":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"211":{"tf":2.0},"370":{"tf":1.0},"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"u":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":134,"docs":{"104":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"11":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"15":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.4142135623730951},"156":{"tf":1.0},"158":{"tf":1.0},"16":{"tf":1.0},"160":{"tf":1.4142135623730951},"165":{"tf":1.0},"166":{"tf":2.0},"167":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":2.23606797749979},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"177":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"195":{"tf":1.0},"21":{"tf":1.7320508075688772},"211":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"243":{"tf":1.0},"25":{"tf":1.4142135623730951},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.4142135623730951},"282":{"tf":1.0},"29":{"tf":1.0},"293":{"tf":1.4142135623730951},"3":{"tf":1.0},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"325":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"332":{"tf":1.4142135623730951},"333":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"35":{"tf":1.0},"356":{"tf":1.4142135623730951},"362":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.4142135623730951},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"375":{"tf":1.7320508075688772},"376":{"tf":1.0},"377":{"tf":1.0},"379":{"tf":1.4142135623730951},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"400":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.4142135623730951},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"363":{"tf":1.0}}}}}}},"r":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"187":{"tf":1.0},"74":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"125":{"tf":1.0}}}}}},"df":3,"docs":{"244":{"tf":1.0},"249":{"tf":1.7320508075688772},"390":{"tf":1.0}},"é":{"df":3,"docs":{"243":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":15,"docs":{"231":{"tf":1.0},"232":{"tf":1.0},"239":{"tf":1.0},"240":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"249":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0},"445":{"tf":1.0},"75":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"é":{"b":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"206":{"tf":1.0}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"182":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"291":{"tf":1.0}}}}}}},"c":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"250":{"tf":1.0},"281":{"tf":1.4142135623730951},"394":{"tf":1.0},"438":{"tf":1.0},"76":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"201":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"446":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"208":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"213":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"105":{"tf":1.0},"330":{"tf":1.0}}}},"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"330":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"419":{"tf":1.0}}}},"df":2,"docs":{"169":{"tf":1.0},"419":{"tf":1.0}}}},"v":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"89":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"358":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":8,"docs":{"147":{"tf":1.0},"154":{"tf":1.0},"210":{"tf":1.0},"296":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.4142135623730951},"357":{"tf":1.0},"83":{"tf":1.0}},"é":{"df":1,"docs":{"322":{"tf":1.0}},"e":{"df":3,"docs":{"171":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":18,"docs":{"104":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.4142135623730951},"161":{"tf":1.0},"173":{"tf":1.0},"177":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"257":{"tf":1.0},"290":{"tf":1.0},"296":{"tf":1.0},"298":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"208":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"212":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":4,"docs":{"150":{"tf":1.0},"166":{"tf":1.0},"293":{"tf":1.0},"382":{"tf":1.0}},"r":{"df":1,"docs":{"166":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"298":{"tf":1.0}}}}}},"t":{"df":1,"docs":{"388":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"j":{"df":15,"docs":{"133":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"160":{"tf":1.0},"165":{"tf":1.0},"192":{"tf":1.0},"199":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0},"392":{"tf":1.0},"425":{"tf":1.0}}},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"148":{"tf":1.0},"420":{"tf":1.0}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"361":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":16,"docs":{"204":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"242":{"tf":1.4142135623730951},"244":{"tf":1.0},"255":{"tf":1.0},"364":{"tf":1.0},"374":{"tf":1.0},"414":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0},"92":{"tf":1.0}}}},"df":7,"docs":{"173":{"tf":1.0},"183":{"tf":1.0},"287":{"tf":1.0},"300":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"414":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"80":{"tf":1.0},"87":{"tf":1.0}}}},"r":{"a":{"df":1,"docs":{"290":{"tf":1.0}}},"df":3,"docs":{"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"z":{"df":3,"docs":{"300":{"tf":1.0},"79":{"tf":1.0},"85":{"tf":1.4142135623730951}}}},"é":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"133":{"tf":1.0},"166":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"219":{"tf":1.0},"221":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"2":{"tf":1.0},"81":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"c":{"df":12,"docs":{"288":{"tf":1.0},"293":{"tf":1.0},"356":{"tf":1.0},"369":{"tf":1.0},"370":{"tf":1.0},"373":{"tf":1.0},"390":{"tf":1.0},"397":{"tf":1.0},"421":{"tf":1.0},"447":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"a":{"c":{"df":3,"docs":{"107":{"tf":1.0},"122":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"r":{"df":1,"docs":{"103":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":11,"docs":{"110":{"tf":1.0},"113":{"tf":1.0},"178":{"tf":1.0},"187":{"tf":1.0},"235":{"tf":1.0},"270":{"tf":1.0},"420":{"tf":1.0},"444":{"tf":1.0},"446":{"tf":1.0},"76":{"tf":1.0},"89":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}}}},"y":{"df":2,"docs":{"186":{"tf":1.0},"211":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"116":{"tf":1.0},"178":{"tf":1.0},"4":{"tf":1.0},"80":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":1,"docs":{"87":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}}}},"ô":{"df":0,"docs":{},"t":{"df":50,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"146":{"tf":1.0},"16":{"tf":1.7320508075688772},"164":{"tf":1.0},"167":{"tf":1.0},"173":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"177":{"tf":1.0},"181":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.0},"194":{"tf":1.0},"21":{"tf":2.449489742783178},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"296":{"tf":1.0},"3":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"326":{"tf":1.0},"331":{"tf":3.0},"333":{"tf":1.0},"345":{"tf":1.4142135623730951},"346":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.4142135623730951},"396":{"tf":1.0},"416":{"tf":1.4142135623730951},"422":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"428":{"tf":1.0},"442":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"84":{"tf":1.7320508075688772}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"122":{"tf":1.0},"199":{"tf":1.0}},"é":{"df":4,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"326":{"tf":1.0},"417":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"318":{"tf":1.0},"375":{"tf":1.0}},"l":{"df":1,"docs":{"414":{"tf":1.0}},"é":{"df":2,"docs":{"207":{"tf":1.0},"421":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"168":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"373":{"tf":1.0},"379":{"tf":1.0},"390":{"tf":1.0}}}}},"é":{"df":1,"docs":{"181":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"1":{"tf":1.0},"277":{"tf":1.0},"285":{"tf":1.4142135623730951},"290":{"tf":1.0},"296":{"tf":1.0},"326":{"tf":1.0},"443":{"tf":1.0},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"2":{"tf":1.7320508075688772},"256":{"tf":1.0},"276":{"tf":1.4142135623730951},"3":{"tf":1.0},"4":{"tf":1.4142135623730951},"424":{"tf":1.0},"425":{"tf":1.0}}}}}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"293":{"tf":1.0},"86":{"tf":1.0}}}}}},"è":{"df":2,"docs":{"332":{"tf":1.0},"98":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"330":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":5,"docs":{"2":{"tf":1.0},"332":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"21":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}}},"r":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"419":{"tf":1.0}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"281":{"tf":1.0},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"v":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}}}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"243":{"tf":1.0},"346":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"363":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"393":{"tf":1.0},"416":{"tf":1.0},"449":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"319":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"16":{"tf":1.0},"232":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"412":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"372":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":8,"docs":{"152":{"tf":1.0},"229":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"285":{"tf":1.0},"3":{"tf":1.0},"443":{"tf":1.0},"75":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"280":{"tf":1.0},"330":{"tf":1.0},"401":{"tf":1.0},"9":{"tf":1.0}}}}}}},"x":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"449":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"187":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"150":{"tf":1.0},"171":{"tf":1.0},"287":{"tf":1.0},"327":{"tf":1.0},"397":{"tf":1.0},"420":{"tf":1.0},"98":{"tf":1.0}}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"é":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"412":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"399":{"tf":1.0},"420":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"345":{"tf":1.0},"450":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"401":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"252":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"361":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"86":{"tf":1.0}}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"397":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"448":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"345":{"tf":1.0},"350":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"n":{"df":7,"docs":{"175":{"tf":1.0},"255":{"tf":1.0},"330":{"tf":1.4142135623730951},"423":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":6,"docs":{"10":{"tf":1.0},"153":{"tf":1.0},"276":{"tf":1.0},"426":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"145":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"332":{"tf":1.0},"416":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"é":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"175":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"377":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{},"e":{"2":{"df":15,"docs":{"124":{"tf":1.0},"279":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"318":{"tf":1.0},"320":{"tf":1.4142135623730951},"322":{"tf":1.4142135623730951},"324":{"tf":1.0},"325":{"tf":1.4142135623730951},"326":{"tf":1.0},"327":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"403":{"tf":1.0},"443":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":0,"docs":{}}},"[":{"0":{"4":{"df":2,"docs":{"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":13,"docs":{"146":{"tf":1.0},"174":{"tf":1.7320508075688772},"186":{"tf":1.0},"272":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.7320508075688772},"381":{"tf":1.0},"413":{"tf":1.0},"436":{"tf":1.0},"9":{"tf":1.0}}},"y":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":11,"docs":{"102":{"tf":1.4142135623730951},"104":{"tf":1.7320508075688772},"106":{"tf":1.0},"109":{"tf":1.0},"123":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"294":{"tf":1.0},"317":{"tf":2.0},"321":{"tf":1.0}}}}},"d":{"2":{"5":{"5":{"1":{"9":{"df":3,"docs":{"19":{"tf":2.0},"374":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"111":{"tf":1.0},"166":{"tf":1.0}}}}}}},"df":14,"docs":{"105":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"185":{"tf":1.0},"290":{"tf":1.0},"297":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.4142135623730951},"9":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"255":{"tf":1.0},"427":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"d":{"b":{"df":1,"docs":{"427":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":4,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"t":{"df":7,"docs":{"232":{"tf":1.0},"237":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.7320508075688772},"248":{"tf":1.0},"250":{"tf":1.0},"317":{"tf":1.0}}}}},"p":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"x":{"\\\\":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"/":{"1":{"\\\\":{".":{"df":0,"docs":{},"x":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"l":{"df":14,"docs":{"1":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"234":{"tf":1.0},"249":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.0},"375":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"133":{"tf":1.0}},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"319":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"_":{"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"249":{"tf":1.0}},"e":{"d":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"|":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"/":{"1":{"\\\\":{".":{"0":{"2":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":11,"docs":{"102":{"tf":1.4142135623730951},"117":{"tf":1.7320508075688772},"123":{"tf":1.4142135623730951},"129":{"tf":1.7320508075688772},"243":{"tf":1.7320508075688772},"326":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.4142135623730951},"429":{"tf":1.0},"95":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"377":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":1,"docs":{"316":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"19":{"tf":1.0},"294":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":9,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":2.23606797749979},"173":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":3.605551275463989},"199":{"tf":1.0},"211":{"tf":1.4142135623730951},"257":{"tf":1.0}},"e":{"/":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}}}}}},"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"19":{"tf":1.0},"242":{"tf":1.0},"290":{"tf":1.0},"88":{"tf":1.0}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":6,"docs":{"114":{"tf":1.0},"117":{"tf":1.0},"133":{"tf":1.0},"445":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.4142135623730951}}}}}}},"d":{"df":11,"docs":{"169":{"tf":2.0},"180":{"tf":1.0},"287":{"tf":1.7320508075688772},"322":{"tf":1.4142135623730951},"348":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"370":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"427":{"tf":1.0},"82":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"191":{"tf":1.0},"279":{"tf":1.0},"316":{"tf":1.0},"343":{"tf":1.0},"347":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.0},"451":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":75,"docs":{"1":{"tf":1.0},"103":{"tf":1.0},"133":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"167":{"tf":1.4142135623730951},"169":{"tf":1.0},"17":{"tf":1.0},"170":{"tf":1.0},"173":{"tf":1.0},"175":{"tf":1.4142135623730951},"176":{"tf":1.0},"18":{"tf":1.4142135623730951},"185":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"208":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.4142135623730951},"214":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"231":{"tf":1.0},"232":{"tf":1.0},"24":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":2.449489742783178},"250":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"278":{"tf":1.0},"287":{"tf":1.0},"294":{"tf":1.0},"298":{"tf":1.4142135623730951},"301":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.4142135623730951},"323":{"tf":1.0},"327":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"382":{"tf":1.0},"390":{"tf":1.4142135623730951},"392":{"tf":1.0},"393":{"tf":1.4142135623730951},"397":{"tf":1.0},"4":{"tf":1.0},"403":{"tf":1.0},"417":{"tf":1.0},"444":{"tf":1.0},"450":{"tf":1.4142135623730951},"5":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":2.23606797749979},"72":{"tf":1.7320508075688772},"73":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":17,"docs":{"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"148":{"tf":1.0},"156":{"tf":1.4142135623730951},"160":{"tf":2.0},"161":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"166":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.4142135623730951},"174":{"tf":1.0},"370":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.4142135623730951},"81":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"160":{"tf":1.0},"174":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"*":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":5,"docs":{"14":{"tf":1.0},"20":{"tf":1.4142135623730951},"346":{"tf":1.0},"422":{"tf":1.0},"426":{"tf":1.0}},"é":{"df":3,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}},"t":{"df":0,"docs":{},"é":{"df":2,"docs":{"362":{"tf":1.0},"372":{"tf":1.0}}}},"è":{"df":0,"docs":{},"r":{"df":3,"docs":{"19":{"tf":1.0},"277":{"tf":1.0},"417":{"tf":1.0}}}}},"r":{"df":6,"docs":{"153":{"tf":1.0},"358":{"tf":1.0},"370":{"tf":1.0},"382":{"tf":1.0},"402":{"tf":1.0},"82":{"tf":1.0}},"i":{"df":2,"docs":{"197":{"tf":1.0},"428":{"tf":1.0}}},"y":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"é":{"df":2,"docs":{"175":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"372":{"tf":1.0},"373":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"289":{"tf":1.0},"294":{"tf":1.0}}}}}},"v":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":6,"docs":{"155":{"tf":1.0},"166":{"tf":1.0},"235":{"tf":1.0},"249":{"tf":1.4142135623730951},"258":{"tf":1.0},"290":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"102":{"tf":1.7320508075688772},"131":{"tf":1.7320508075688772},"159":{"tf":1.4142135623730951},"163":{"tf":1.0},"235":{"tf":1.0},"252":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"159":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"235":{"tf":1.0},"325":{"tf":1.4142135623730951},"327":{"tf":1.0}}}}}}},"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"443":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"443":{"tf":1.0}}}}}}},":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"(":{"\\"":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"|":{"_":{"df":1,"docs":{"259":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"258":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":45,"docs":{"113":{"tf":1.0},"150":{"tf":1.0},"152":{"tf":1.7320508075688772},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":1.0},"166":{"tf":2.449489742783178},"171":{"tf":1.0},"172":{"tf":1.4142135623730951},"177":{"tf":1.0},"180":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.7320508075688772},"189":{"tf":1.0},"2":{"tf":1.0},"232":{"tf":1.4142135623730951},"233":{"tf":1.0},"235":{"tf":1.0},"237":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.4142135623730951},"247":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":2.23606797749979},"250":{"tf":1.4142135623730951},"252":{"tf":1.4142135623730951},"259":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":2.449489742783178},"291":{"tf":1.0},"293":{"tf":1.4142135623730951},"296":{"tf":1.0},"297":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"414":{"tf":1.0},"443":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":2.6457513110645907},"84":{"tf":2.0}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"277":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.0}},"n":{"df":2,"docs":{"443":{"tf":1.0},"95":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"169":{"tf":1.0}}},"y":{"df":0,"docs":{},"é":{"df":1,"docs":{"175":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"f":{"df":24,"docs":{"102":{"tf":1.4142135623730951},"105":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"115":{"tf":1.4142135623730951},"116":{"tf":1.4142135623730951},"121":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"126":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"191":{"tf":1.4142135623730951},"192":{"tf":1.4142135623730951},"193":{"tf":1.4142135623730951},"194":{"tf":1.4142135623730951},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"199":{"tf":1.4142135623730951},"201":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}}}},"r":{"d":{"df":1,"docs":{"280":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"166":{"tf":1.7320508075688772},"21":{"tf":1.0},"23":{"tf":1.0},"288":{"tf":1.0},"372":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"[":{"df":0,"docs":{},"e":{"0":{"4":{"6":{"3":{"df":1,"docs":{"300":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"df":6,"docs":{"208":{"tf":1.4142135623730951},"291":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"401":{"tf":1.0},"88":{"tf":1.4142135623730951}},"|":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"124":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"s":{"df":2,"docs":{"17":{"tf":1.0},"298":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}},"p":{"a":{"c":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"288":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"290":{"tf":1.0}}}}}}}}},"t":{"df":139,"docs":{"1":{"tf":1.4142135623730951},"104":{"tf":1.0},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.7320508075688772},"152":{"tf":1.0},"160":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.4142135623730951},"18":{"tf":1.0},"181":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"211":{"tf":1.4142135623730951},"212":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.7320508075688772},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.0},"244":{"tf":1.7320508075688772},"248":{"tf":1.0},"249":{"tf":1.7320508075688772},"25":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"277":{"tf":1.0},"282":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.0},"29":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.7320508075688772},"3":{"tf":1.0},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"416":{"tf":1.7320508075688772},"418":{"tf":1.4142135623730951},"419":{"tf":1.0},"420":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":2.0},"84":{"tf":1.0},"86":{"tf":1.7320508075688772},"87":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"15":{"tf":1.0},"286":{"tf":1.0},"81":{"tf":1.0}}}}}},"t":{"c":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"d":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"195":{"tf":1.0},"196":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"194":{"tf":1.0},"205":{"tf":1.7320508075688772}}}}}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":2,"docs":{"198":{"tf":1.4142135623730951},"199":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"197":{"tf":1.4142135623730951},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":1,"docs":{"190":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"j":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"199":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{".":{"d":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"201":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"116":{"tf":2.0},"130":{"tf":1.0},"202":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"d":{"/":{"9":{"9":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":4,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"122":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":4,"docs":{"159":{"tf":1.0},"189":{"tf":1.7320508075688772},"356":{"tf":1.0},"377":{"tf":1.0}}},"df":193,"docs":{"1":{"tf":1.7320508075688772},"102":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.4142135623730951},"127":{"tf":1.0},"13":{"tf":1.0},"131":{"tf":1.0},"133":{"tf":1.4142135623730951},"135":{"tf":1.0},"137":{"tf":1.4142135623730951},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.4142135623730951},"16":{"tf":2.0},"166":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.7320508075688772},"169":{"tf":1.0},"17":{"tf":2.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"18":{"tf":1.4142135623730951},"186":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":2.0},"20":{"tf":1.7320508075688772},"204":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.7320508075688772},"214":{"tf":2.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.0},"231":{"tf":1.0},"234":{"tf":1.0},"24":{"tf":1.4142135623730951},"240":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.4142135623730951},"245":{"tf":1.0},"249":{"tf":1.0},"25":{"tf":1.4142135623730951},"253":{"tf":1.0},"254":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.4142135623730951},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"280":{"tf":1.7320508075688772},"282":{"tf":1.0},"284":{"tf":1.4142135623730951},"285":{"tf":1.4142135623730951},"286":{"tf":1.0},"287":{"tf":2.23606797749979},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"291":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.7320508075688772},"299":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.4142135623730951},"31":{"tf":1.0},"310":{"tf":1.0},"318":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.4142135623730951},"333":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"35":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"358":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"369":{"tf":1.0},"37":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"382":{"tf":1.4142135623730951},"384":{"tf":1.4142135623730951},"386":{"tf":1.0},"388":{"tf":1.0},"39":{"tf":1.4142135623730951},"393":{"tf":1.0},"4":{"tf":1.4142135623730951},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":2.23606797749979},"85":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":2.0},"9":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"df":1,"docs":{"348":{"tf":1.0}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":5,"docs":{"280":{"tf":1.0},"288":{"tf":1.0},"347":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"198":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"363":{"tf":1.0}}}}}}}},"df":7,"docs":{"153":{"tf":1.0},"173":{"tf":1.0},"20":{"tf":1.0},"294":{"tf":1.0},"363":{"tf":1.0},"86":{"tf":1.0},"95":{"tf":1.7320508075688772}},"e":{"c":{"(":{"d":{"b":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"374":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":10,"docs":{"154":{"tf":1.0},"155":{"tf":1.0},"17":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"318":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"238":{"tf":1.0},"280":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"243":{"tf":2.23606797749979}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"311":{"tf":1.0}}}}},"df":9,"docs":{"129":{"tf":1.0},"146":{"tf":1.0},"15":{"tf":1.0},"232":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"291":{"tf":1.0},"373":{"tf":1.0},"427":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"242":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":2,"docs":{"175":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"129":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"(":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"\'":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"=":{"a":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"318":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"383":{"tf":1.0}}}}},"df":4,"docs":{"318":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"r":{"df":5,"docs":{"18":{"tf":1.0},"243":{"tf":1.4142135623730951},"393":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"n":{"df":75,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"df":0,"docs":{},"i":{"c":{"df":11,"docs":{"10":{"tf":1.0},"266":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"3":{"tf":1.0},"410":{"tf":1.0},"442":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"159":{"tf":1.0}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"168":{"tf":1.0},"231":{"tf":1.0},"358":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"o":{"df":8,"docs":{"109":{"tf":1.0},"189":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"211":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"166":{"tf":1.0}}}},"s":{"df":3,"docs":{"120":{"tf":1.0},"187":{"tf":1.0},"412":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"134":{"tf":1.0},"96":{"tf":1.0}}}},"é":{"df":2,"docs":{"187":{"tf":1.0},"84":{"tf":1.0}}}}},"r":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":1,"docs":{"428":{"tf":3.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":2,"docs":{"361":{"tf":1.7320508075688772},"416":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"n":{"df":16,"docs":{"101":{"tf":1.0},"177":{"tf":1.0},"189":{"tf":1.0},"194":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.0},"345":{"tf":1.4142135623730951},"370":{"tf":1.0},"381":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.0},"47":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"171":{"tf":1.0},"375":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"280":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"423":{"tf":1.0},"426":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":17,"docs":{"145":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":1.0},"379":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"296":{"tf":1.0}}},"df":0,"docs":{}},"z":{"df":2,"docs":{"300":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"f":{"6":{"df":0,"docs":{},"e":{"5":{"1":{"1":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"[":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"208":{"tf":1.0}}}}},"m":{"d":{"df":1,"docs":{"125":{"tf":1.0}}},"df":0,"docs":{}}},"@":{"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}}}},"df":14,"docs":{"125":{"tf":1.0},"126":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"187":{"tf":1.0},"188":{"tf":1.7320508075688772},"193":{"tf":1.0},"199":{"tf":1.4142135623730951},"204":{"tf":2.0},"205":{"tf":2.0},"206":{"tf":1.4142135623730951},"207":{"tf":1.7320508075688772},"213":{"tf":1.0},"214":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"166":{"tf":1.0},"184":{"tf":1.0},"197":{"tf":1.0},"207":{"tf":1.4142135623730951},"291":{"tf":1.0},"300":{"tf":1.0},"317":{"tf":1.0},"347":{"tf":1.0},"88":{"tf":1.0}},"e":{"d":{".":{"*":{"4":{"0":{"1":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"197":{"tf":1.0}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":11,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.4142135623730951},"205":{"tf":1.0},"214":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"175":{"tf":1.4142135623730951}}}}},"r":{"df":6,"docs":{"103":{"tf":1.0},"16":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"s":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":11,"docs":{"113":{"tf":1.0},"133":{"tf":1.0},"148":{"tf":1.0},"151":{"tf":1.0},"177":{"tf":1.0},"19":{"tf":1.0},"249":{"tf":1.0},"292":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"98":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":5,"docs":{"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"250":{"tf":1.0},"259":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":8,"docs":{"173":{"tf":1.0},"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"211":{"tf":1.0},"243":{"tf":3.4641016151377544},"249":{"tf":1.0},"319":{"tf":1.7320508075688772},"425":{"tf":1.0}},"e":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"286":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"m":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"354":{"tf":1.0}}},"t":{"df":1,"docs":{"8":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"l":{":":{".":{"*":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"197":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"d":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"347":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}},"ç":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"280":{"tf":1.0},"281":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":8,"docs":{"116":{"tf":1.0},"185":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"207":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"301":{"tf":1.0},"393":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"347":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"107":{"tf":1.0}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"é":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"348":{"tf":1.0},"356":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"88":{"tf":1.0}}}},"f":{"df":1,"docs":{"43":{"tf":1.0}},"i":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":40,"docs":{"150":{"tf":1.0},"152":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"172":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"190":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"235":{"tf":1.4142135623730951},"290":{"tf":1.0},"292":{"tf":1.7320508075688772},"294":{"tf":1.0},"314":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":1.4142135623730951},"419":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0},"442":{"tf":2.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"451":{"tf":1.0},"57":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":2.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"197":{"tf":1.0},"198":{"tf":1.0},"317":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"160":{"tf":1.0},"19":{"tf":1.4142135623730951},"199":{"tf":1.0},"294":{"tf":1.0},"346":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"360":{"tf":1.0}}}}}}}},"t":{"df":1,"docs":{"357":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"(":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},".":{"d":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"127":{"tf":2.0},"189":{"tf":3.4641016151377544},"199":{"tf":1.4142135623730951}}}},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"320":{"tf":1.0}}}},"df":3,"docs":{"127":{"tf":1.0},"190":{"tf":1.0},"205":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"202":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"357":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.0}}}},"d":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"d":{"b":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":1,"docs":{"373":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":4,"docs":{"169":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"300":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":3.4641016151377544}}}}}},"df":7,"docs":{"113":{"tf":1.0},"14":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.4142135623730951},"80":{"tf":1.0}},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"372":{"tf":1.0},"374":{"tf":1.0},"402":{"tf":1.0},"424":{"tf":1.4142135623730951},"426":{"tf":1.4142135623730951},"84":{"tf":1.0},"85":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"108":{"tf":1.0},"134":{"tf":1.0},"211":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"373":{"tf":1.0},"86":{"tf":1.0}}}}},"x":{"df":3,"docs":{"133":{"tf":1.0},"166":{"tf":1.0},"95":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"314":{"tf":1.4142135623730951},"318":{"tf":1.0},"325":{"tf":1.0},"328":{"tf":1.7320508075688772},"334":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"328":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"208":{"tf":1.0},"348":{"tf":1.0}}},"df":0,"docs":{}},"w":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"169":{"tf":1.0},"174":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"396":{"tf":1.0}}}},"u":{"df":0,"docs":{},"x":{"df":6,"docs":{"16":{"tf":1.0},"281":{"tf":1.0},"345":{"tf":1.0},"348":{"tf":1.0},"359":{"tf":1.0},"422":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"t":{"df":6,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}}},"n":{"df":7,"docs":{"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"316":{"tf":2.0},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0}}},"o":{"df":0,"docs":{},"i":{"df":10,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"107":{"tf":1.0},"147":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"234":{"tf":1.0},"242":{"tf":1.0},"249":{"tf":1.0},"313":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"174":{"tf":1.0},"346":{"tf":1.0},"447":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.4142135623730951}},"é":{"df":3,"docs":{"168":{"tf":1.0},"295":{"tf":1.0},"318":{"tf":1.0}}}}}}},"df":9,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"169":{"tf":1.0},"231":{"tf":1.0},"281":{"tf":1.0},"327":{"tf":1.0},"333":{"tf":1.4142135623730951},"375":{"tf":1.0},"432":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":6,"docs":{"250":{"tf":1.0},"253":{"tf":1.0},"277":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"72":{"tf":1.0}}}}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"361":{"tf":1.0},"416":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":4,"docs":{"279":{"tf":1.0},"414":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"r":{"b":{"df":0,"docs":{},"i":{"d":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":4,"docs":{"189":{"tf":1.7320508075688772},"195":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"217":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":3,"docs":{"1":{"tf":1.0},"276":{"tf":1.0},"416":{"tf":1.0}},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"450":{"tf":1.0}}}}},"df":1,"docs":{"450":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}},"k":{"df":1,"docs":{"276":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"389":{"tf":1.0}}}},"df":5,"docs":{"174":{"tf":1.0},"18":{"tf":1.0},"199":{"tf":1.0},"320":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":10,"docs":{"189":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"327":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.0},"332":{"tf":1.0},"375":{"tf":1.4142135623730951},"402":{"tf":1.0},"86":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"133":{"tf":2.0},"134":{"tf":1.4142135623730951},"202":{"tf":2.449489742783178},"214":{"tf":1.0},"394":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"166":{"tf":1.0},"183":{"tf":1.0},"199":{"tf":1.0},"205":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"199":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":6,"docs":{"188":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"276":{"tf":1.0},"328":{"tf":1.0},"72":{"tf":1.0}}}}}}}},"q":{"d":{"df":0,"docs":{},"n":{"df":1,"docs":{"95":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":17,"docs":{"358":{"tf":1.4142135623730951},"359":{"tf":1.0},"361":{"tf":1.4142135623730951},"362":{"tf":1.0},"363":{"tf":2.0},"364":{"tf":1.4142135623730951},"375":{"tf":2.23606797749979},"376":{"tf":1.0},"377":{"tf":1.4142135623730951},"399":{"tf":1.4142135623730951},"400":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"417":{"tf":1.0},"418":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"ç":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"397":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":3,"docs":{"298":{"tf":1.0},"313":{"tf":1.4142135623730951},"397":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"402":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"346":{"tf":1.0},"352":{"tf":1.4142135623730951}}},"df":0,"docs":{},"t":{"df":1,"docs":{"444":{"tf":1.0}}}}}}}}},"s":{"[":{"(":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"348":{"tf":1.7320508075688772},"376":{"tf":1.4142135623730951},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"423":{"tf":1.7320508075688772},"424":{"tf":2.23606797749979},"425":{"tf":2.0},"428":{"tf":2.23606797749979},"429":{"tf":1.7320508075688772}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"187":{"tf":1.0},"189":{"tf":1.0}},"é":{"df":1,"docs":{"208":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}},"n":{"df":1,"docs":{"8":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"g":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"352":{"tf":1.0}}},"df":0,"docs":{}}}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"351":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"214":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"165":{"tf":1.0},"420":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.0}}}}},"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":6,"docs":{"277":{"tf":1.0},"280":{"tf":1.0},"380":{"tf":1.0},"389":{"tf":1.7320508075688772},"390":{"tf":1.4142135623730951},"421":{"tf":1.0}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"c":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}}}},"df":2,"docs":{"16":{"tf":2.23606797749979},"348":{"tf":2.449489742783178}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":3,"docs":{"184":{"tf":1.0},"19":{"tf":1.0},"85":{"tf":1.0}}}}},"o":{"df":1,"docs":{"214":{"tf":1.0}},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"214":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"1":{"tf":1.0},"325":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"401":{"tf":1.0},"416":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"t":{".":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"147":{"tf":1.0},"151":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"449":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"359":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"277":{"tf":1.0},"278":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}}}},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{")":{".":{"*":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{".":{"*":{"\\"":{"(":{"?":{":":{"%":{"(":{"b":{"a":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{")":{"df":0,"docs":{},"s":{"df":0,"docs":{},"|":{"%":{"(":{"b":{"a":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{")":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"192":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}}}}}},"h":{"c":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"2":{")":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"348":{"tf":1.0},"373":{"tf":1.0}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"@":{"<":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"123":{"tf":1.0},"124":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"300":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"84":{"tf":1.4142135623730951}},"s":{":":{"/":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"}":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"346":{"tf":1.0},"419":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.4142135623730951}}}}},"df":52,"docs":{"1":{"tf":1.0},"108":{"tf":1.0},"120":{"tf":1.0},"123":{"tf":2.23606797749979},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"175":{"tf":1.0},"180":{"tf":1.7320508075688772},"2":{"tf":1.0},"202":{"tf":1.4142135623730951},"208":{"tf":1.0},"22":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"286":{"tf":1.4142135623730951},"287":{"tf":1.7320508075688772},"288":{"tf":1.7320508075688772},"289":{"tf":1.4142135623730951},"294":{"tf":2.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"326":{"tf":1.0},"346":{"tf":1.0},"356":{"tf":2.449489742783178},"357":{"tf":1.0},"370":{"tf":2.449489742783178},"372":{"tf":1.0},"373":{"tf":2.0},"374":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"380":{"tf":1.0},"383":{"tf":1.4142135623730951},"392":{"tf":1.0},"406":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.0},"416":{"tf":1.0},"417":{"tf":1.0},"419":{"tf":1.7320508075688772},"423":{"tf":2.6457513110645907},"424":{"tf":3.872983346207417},"425":{"tf":3.605551275463989},"428":{"tf":3.1622776601683795},"5":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.7320508075688772},"96":{"tf":1.0}},"e":{"a":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"450":{"tf":1.0}}}}},"df":1,"docs":{"450":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"u":{"b":{"df":2,"docs":{"243":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"235":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"*":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{".":{"*":{"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"148":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"105":{"tf":1.0},"116":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"113":{"tf":1.0},"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"284":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":4,"docs":{"84":{"tf":1.0},"85":{"tf":3.3166247903554},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"82":{"tf":1.0},"84":{"tf":1.7320508075688772}}}}},"p":{"df":0,"docs":{},"g":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"291":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"291":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"121":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"313":{"tf":1.4142135623730951},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":2,"docs":{"372":{"tf":1.0},"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":151,"docs":{"1":{"tf":1.4142135623730951},"10":{"tf":1.4142135623730951},"108":{"tf":1.7320508075688772},"109":{"tf":1.4142135623730951},"110":{"tf":1.0},"113":{"tf":2.23606797749979},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":1.7320508075688772},"123":{"tf":1.0},"124":{"tf":2.8284271247461903},"126":{"tf":1.0},"127":{"tf":2.8284271247461903},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.4142135623730951},"139":{"tf":1.0},"14":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":2.0},"148":{"tf":2.0},"15":{"tf":1.0},"153":{"tf":1.0},"155":{"tf":1.4142135623730951},"156":{"tf":1.0},"16":{"tf":2.0},"161":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":2.0},"166":{"tf":2.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"17":{"tf":1.0},"171":{"tf":1.7320508075688772},"172":{"tf":2.0},"174":{"tf":1.4142135623730951},"177":{"tf":1.0},"179":{"tf":1.0},"18":{"tf":1.4142135623730951},"180":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"186":{"tf":2.0},"187":{"tf":1.4142135623730951},"189":{"tf":3.4641016151377544},"191":{"tf":1.0},"192":{"tf":1.4142135623730951},"193":{"tf":1.7320508075688772},"194":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"201":{"tf":1.0},"204":{"tf":2.23606797749979},"205":{"tf":2.0},"206":{"tf":1.7320508075688772},"207":{"tf":1.0},"208":{"tf":2.449489742783178},"209":{"tf":1.0},"21":{"tf":1.0},"210":{"tf":1.0},"214":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"24":{"tf":1.0},"252":{"tf":1.0},"276":{"tf":1.4142135623730951},"277":{"tf":1.0},"281":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.4142135623730951},"289":{"tf":2.6457513110645907},"291":{"tf":1.7320508075688772},"292":{"tf":1.0},"293":{"tf":2.8284271247461903},"296":{"tf":1.4142135623730951},"298":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"310":{"tf":1.0},"312":{"tf":1.4142135623730951},"317":{"tf":1.0},"320":{"tf":1.4142135623730951},"322":{"tf":1.0},"326":{"tf":1.0},"345":{"tf":1.0},"358":{"tf":1.4142135623730951},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.4142135623730951},"369":{"tf":1.0},"372":{"tf":1.4142135623730951},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":2.8284271247461903},"376":{"tf":1.0},"379":{"tf":1.0},"383":{"tf":2.449489742783178},"388":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.4142135623730951},"416":{"tf":2.0},"417":{"tf":1.4142135623730951},"419":{"tf":1.4142135623730951},"420":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.4142135623730951},"424":{"tf":1.4142135623730951},"425":{"tf":1.7320508075688772},"426":{"tf":1.0},"428":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"445":{"tf":1.0},"447":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"5":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"76":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.4142135623730951},"84":{"tf":2.23606797749979},"85":{"tf":3.7416573867739413},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"401":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"429":{"tf":1.0}}}}}}}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":11,"docs":{"124":{"tf":1.0},"161":{"tf":1.0},"172":{"tf":1.0},"201":{"tf":1.0},"208":{"tf":1.0},"268":{"tf":1.0},"314":{"tf":1.4142135623730951},"325":{"tf":1.4142135623730951},"327":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"291":{"tf":1.0}}}},"o":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"151":{"tf":1.0},"447":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":3,"docs":{"18":{"tf":1.0},"243":{"tf":1.0},"74":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"148":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":7,"docs":{"277":{"tf":1.0},"287":{"tf":1.0},"370":{"tf":1.0},"413":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":19,"docs":{"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.4142135623730951},"166":{"tf":1.0},"185":{"tf":1.0},"205":{"tf":1.0},"207":{"tf":1.0},"212":{"tf":1.0},"290":{"tf":1.0},"320":{"tf":1.0},"83":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}}}},"o":{"df":2,"docs":{"133":{"tf":1.0},"356":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":9,"docs":{"135":{"tf":1.0},"145":{"tf":1.0},"251":{"tf":1.0},"256":{"tf":1.0},"277":{"tf":1.4142135623730951},"3":{"tf":1.0},"306":{"tf":1.0},"31":{"tf":1.0},"8":{"tf":1.0}},"é":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}}}},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"82":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.4142135623730951}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"169":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"1":{"tf":1.0},"19":{"tf":1.0},"293":{"tf":1.0},"374":{"tf":1.0},"381":{"tf":1.0}}}}}}},"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"177":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"292":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"102":{"tf":1.0},"15":{"tf":1.0},"179":{"tf":1.0}}},"z":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"363":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"401":{"tf":1.0},"416":{"tf":1.4142135623730951},"417":{"tf":1.0}}}}},"é":{"df":1,"docs":{"299":{"tf":1.0}},"e":{"df":2,"docs":{"15":{"tf":1.0},"84":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"223":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0},"5":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.4142135623730951}}}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"h":{"a":{"df":1,"docs":{"76":{"tf":1.0}},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"316":{"tf":1.0},"348":{"tf":1.0},"354":{"tf":1.0},"364":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":2.0},"380":{"tf":1.0},"396":{"tf":1.0},"427":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"446":{"tf":1.0},"89":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"363":{"tf":1.0}}}},"df":4,"docs":{"181":{"tf":1.0},"362":{"tf":1.0},"393":{"tf":1.4142135623730951},"394":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"17":{"tf":1.0},"21":{"tf":1.0},"317":{"tf":1.7320508075688772},"352":{"tf":1.0},"86":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":2,"docs":{"348":{"tf":3.3166247903554},"394":{"tf":1.0}},"e":{"a":{"d":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"133":{"tf":1.0},"377":{"tf":1.0},"402":{"tf":1.0},"445":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"(":{")":{".":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"313":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":3,"docs":{"85":{"tf":1.7320508075688772},"87":{"tf":1.0},"88":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"280":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"277":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"397":{"tf":1.0}}}}}}},"x":{"a":{"d":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"102":{"tf":1.0},"184":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"181":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"347":{"tf":1.0}}}}}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":2,"docs":{"281":{"tf":1.0},"434":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"1":{"tf":1.0},"8":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"/":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"19":{"tf":1.0}}},"df":0,"docs":{}}}},"df":1,"docs":{"19":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"k":{"df":15,"docs":{"280":{"tf":1.0},"289":{"tf":1.0},"360":{"tf":1.7320508075688772},"361":{"tf":1.0},"364":{"tf":2.0},"370":{"tf":2.0},"376":{"tf":1.7320508075688772},"383":{"tf":1.0},"392":{"tf":1.0},"406":{"tf":1.0},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"416":{"tf":1.0},"425":{"tf":1.4142135623730951},"429":{"tf":2.6457513110645907}},"s":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"364":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":4,"docs":{"166":{"tf":1.0},"18":{"tf":1.0},"192":{"tf":1.0},"206":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":32,"docs":{"1":{"tf":1.0},"108":{"tf":1.7320508075688772},"109":{"tf":1.4142135623730951},"111":{"tf":1.0},"113":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":1.0},"124":{"tf":2.0},"126":{"tf":1.0},"127":{"tf":1.4142135623730951},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":2.0},"194":{"tf":1.7320508075688772},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"198":{"tf":1.0},"199":{"tf":1.0},"202":{"tf":2.449489742783178},"206":{"tf":1.7320508075688772},"214":{"tf":1.0},"293":{"tf":1.4142135623730951},"445":{"tf":1.0},"448":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"108":{"tf":1.0},"153":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"119":{"tf":1.0}}}},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":4,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"375":{"tf":1.7320508075688772},"428":{"tf":1.0}}},"x":{"df":5,"docs":{"281":{"tf":1.0},"375":{"tf":1.4142135623730951},"377":{"tf":1.0},"418":{"tf":1.4142135623730951},"438":{"tf":1.0}}}},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":2.6457513110645907}}}}}}},"/":{"2":{"df":1,"docs":{"119":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"394":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"286":{"tf":1.0}}}}}}}}}}}}},":":{"/":{"/":{"0":{".":{"0":{".":{"0":{".":{"0":{":":{"4":{"0":{"0":{"0":{"df":2,"docs":{"293":{"tf":1.4142135623730951},"299":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"294":{"tf":1.0},"299":{"tf":1.0}}}}}},"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":5,"docs":{"293":{"tf":1.0},"294":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"0":{"8":{"0":{"df":1,"docs":{"178":{"tf":1.0}}},"1":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"}":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":37,"docs":{"1":{"tf":1.0},"102":{"tf":2.0},"108":{"tf":1.4142135623730951},"113":{"tf":1.0},"114":{"tf":1.0},"119":{"tf":1.0},"127":{"tf":1.4142135623730951},"133":{"tf":2.0},"134":{"tf":1.7320508075688772},"16":{"tf":1.0},"169":{"tf":1.7320508075688772},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"202":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.0},"316":{"tf":1.0},"326":{"tf":1.0},"348":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"401":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.7320508075688772},"414":{"tf":1.4142135623730951},"75":{"tf":1.0},"82":{"tf":1.4142135623730951},"85":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":2.0}},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{">":{"/":{"<":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{">":{"/":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"206":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"119":{"tf":1.4142135623730951},"124":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"289":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"178":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{".":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"146":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"146":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"177":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"x":{"df":1,"docs":{"449":{"tf":1.0}}}}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"232":{"tf":1.0},"244":{"tf":1.0},"248":{"tf":1.0},"259":{"tf":1.0},"378":{"tf":1.0},"420":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"z":{"df":2,"docs":{"352":{"tf":1.7320508075688772},"357":{"tf":1.0}}},"é":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"16":{"tf":1.0}},"é":{"df":2,"docs":{"167":{"tf":1.0},"412":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"317":{"tf":1.0},"380":{"tf":1.0},"382":{"tf":1.0}}}},"df":0,"docs":{}}}}},"ô":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"374":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}}},"i":{"1":{"8":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"399":{"tf":1.0},"416":{"tf":1.0}}}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"351":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"442":{"tf":1.0},"84":{"tf":1.0}}}},"d":{"=":{"1":{"df":1,"docs":{"86":{"tf":1.0}}},"df":0,"docs":{}},"df":7,"docs":{"185":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"348":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"147":{"tf":1.0}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"146":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"19":{"tf":1.0}},"i":{"df":3,"docs":{"293":{"tf":1.0},"330":{"tf":1.0},"86":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"393":{"tf":1.0}}}},"é":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"124":{"tf":1.0}}},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"316":{"tf":1.0},"348":{"tf":1.0}},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"206":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":9,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0}}}}}}}},"é":{"df":1,"docs":{"156":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"l":{"df":17,"docs":{"104":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"18":{"tf":1.0},"214":{"tf":1.0},"232":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"347":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"84":{"tf":1.0}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"249":{"tf":1.0}},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"449":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"151":{"tf":1.0},"164":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"380":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"396":{"tf":1.0}}}}},"p":{"_":{"df":1,"docs":{"236":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"234":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"é":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":10,"docs":{"178":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0},"253":{"tf":1.0},"319":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"361":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"353":{"tf":1.0}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"279":{"tf":1.4142135623730951},"341":{"tf":1.0},"343":{"tf":1.0},"360":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"376":{"tf":1.0},"393":{"tf":1.4142135623730951}},"é":{"df":1,"docs":{"416":{"tf":1.0}}}}}}}}},"o":{"df":1,"docs":{"418":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"194":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"194":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"194":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"194":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":1,"docs":{"236":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"b":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"{":{"df":0,"docs":{},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":2,"docs":{"346":{"tf":1.4142135623730951},"348":{"tf":2.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"=":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"=":{"2":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"s":{"=":{"1":{"8":{"0":{"0":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":19,"docs":{"102":{"tf":1.0},"189":{"tf":1.7320508075688772},"194":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951},"244":{"tf":1.0},"279":{"tf":1.0},"318":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.4142135623730951},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.4142135623730951},"354":{"tf":1.0},"416":{"tf":1.0},"450":{"tf":1.4142135623730951},"47":{"tf":1.0},"8":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"348":{"tf":1.0}},"}":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"166":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"n":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"u":{"df":1,"docs":{"183":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"330":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"166":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"160":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"293":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"401":{"tf":1.0}}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"294":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"166":{"tf":1.0},"184":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"419":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"370":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"176":{"tf":1.0},"3":{"tf":1.0},"352":{"tf":1.0}}}}},"df":3,"docs":{"168":{"tf":1.0},"232":{"tf":1.0},"356":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":5,"docs":{"163":{"tf":1.0},"243":{"tf":1.0},"293":{"tf":2.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"280":{"tf":1.0},"3":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"1":{"tf":1.0},"250":{"tf":1.0},"311":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"373":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"m":{"d":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"249":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":3,"docs":{"21":{"tf":1.0},"242":{"tf":1.0},"314":{"tf":1.0}}},"z":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":78,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"178":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"249":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"294":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"356":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":4,"docs":{"397":{"tf":1.0},"402":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"102":{"tf":1.0},"250":{"tf":1.0},"330":{"tf":1.4142135623730951},"422":{"tf":1.0},"429":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":10,"docs":{"242":{"tf":1.0},"294":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.7320508075688772},"348":{"tf":1.7320508075688772},"349":{"tf":1.7320508075688772},"377":{"tf":1.0},"423":{"tf":1.4142135623730951},"426":{"tf":1.0},"429":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"l":{"df":29,"docs":{"100":{"tf":1.4142135623730951},"113":{"tf":1.0},"115":{"tf":1.4142135623730951},"126":{"tf":1.4142135623730951},"133":{"tf":1.0},"146":{"tf":1.4142135623730951},"15":{"tf":1.0},"151":{"tf":1.4142135623730951},"156":{"tf":1.0},"160":{"tf":1.7320508075688772},"166":{"tf":1.0},"171":{"tf":1.7320508075688772},"177":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"188":{"tf":1.4142135623730951},"213":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"292":{"tf":1.4142135623730951},"3":{"tf":1.0},"313":{"tf":1.0},"323":{"tf":1.4142135623730951},"451":{"tf":1.0},"72":{"tf":1.7320508075688772},"73":{"tf":1.4142135623730951},"79":{"tf":1.0},"81":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}}},"é":{"df":5,"docs":{"147":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"186":{"tf":1.0},"288":{"tf":1.0}}}}},"n":{"c":{"df":23,"docs":{"1":{"tf":1.0},"147":{"tf":1.4142135623730951},"17":{"tf":1.0},"2":{"tf":1.4142135623730951},"225":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"285":{"tf":1.0},"322":{"tf":1.0},"4":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"443":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"416":{"tf":1.0}}}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"358":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"150":{"tf":1.0},"313":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"23":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"c":{"df":3,"docs":{"324":{"tf":1.0},"375":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":11,"docs":{"151":{"tf":1.0},"211":{"tf":1.0},"280":{"tf":1.4142135623730951},"384":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"442":{"tf":1.0},"5":{"tf":1.0},"82":{"tf":1.0},"87":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"167":{"tf":1.0},"82":{"tf":1.4142135623730951},"89":{"tf":1.0},"97":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"è":{"df":0,"docs":{},"t":{"df":1,"docs":{"379":{"tf":1.0}}}},"é":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"150":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"255":{"tf":1.0},"347":{"tf":1.0}}}}},"v":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"372":{"tf":1.0},"401":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":2,"docs":{"166":{"tf":1.4142135623730951},"184":{"tf":1.0}}}}}},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"284":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"6":{"tf":1.0},"84":{"tf":1.0}}},"t":{"df":5,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"316":{"tf":1.0},"396":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"168":{"tf":1.0},"74":{"tf":1.0}}}},"é":{"df":5,"docs":{"1":{"tf":1.0},"168":{"tf":1.0},"296":{"tf":1.0},"312":{"tf":1.0},"5":{"tf":1.0}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"184":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"194":{"tf":1.0},"397":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"p":{">":{"/":{"$":{"df":0,"docs":{},"p":{"df":1,"docs":{"104":{"tf":1.0}}}},"df":0,"docs":{}},":":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}}}}},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"109":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":19,"docs":{"101":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"122":{"tf":1.0},"133":{"tf":1.0},"148":{"tf":1.4142135623730951},"153":{"tf":1.0},"154":{"tf":1.0},"160":{"tf":1.4142135623730951},"189":{"tf":1.0},"202":{"tf":2.23606797749979},"206":{"tf":1.7320508075688772},"207":{"tf":1.4142135623730951},"214":{"tf":1.0},"95":{"tf":1.7320508075688772},"97":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"133":{"tf":1.0}}}},"v":{"4":{"df":1,"docs":{"214":{"tf":1.0}}},"6":{"df":1,"docs":{"214":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"a":{"df":1,"docs":{"181":{"tf":1.0}}},"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"s":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"425":{"tf":1.0}}},"y":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"326":{"tf":1.0},"380":{"tf":1.0}},"é":{"df":2,"docs":{"381":{"tf":1.0},"397":{"tf":1.0}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"u":{"df":12,"docs":{"2":{"tf":1.0},"27":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.0},"45":{"tf":1.0},"450":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"j":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":10,"docs":{"189":{"tf":1.4142135623730951},"190":{"tf":1.0},"199":{"tf":1.0},"204":{"tf":1.4142135623730951},"207":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.4142135623730951}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.0},"167":{"tf":1.0},"189":{"tf":1.0},"234":{"tf":1.0},"242":{"tf":1.0},"249":{"tf":1.0},"346":{"tf":1.0},"361":{"tf":1.0},"393":{"tf":1.4142135623730951},"399":{"tf":1.0},"416":{"tf":1.0},"84":{"tf":1.0}}}},"df":0,"docs":{}},"v":{"a":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"231":{"tf":1.0}}}},"o":{"b":{"df":2,"docs":{"347":{"tf":1.4142135623730951},"414":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":16,"docs":{"108":{"tf":1.0},"128":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"139":{"tf":1.0},"165":{"tf":1.0},"189":{"tf":1.0},"214":{"tf":1.0},"243":{"tf":1.4142135623730951},"317":{"tf":1.0},"362":{"tf":1.0},"377":{"tf":1.0},"418":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":6,"docs":{"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"185":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951}}}}},"d":{"df":2,"docs":{"205":{"tf":1.0},"208":{"tf":2.0}}},"df":1,"docs":{"346":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"446":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.7320508075688772},"214":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"s":{"df":1,"docs":{"375":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"180":{"tf":1.0},"348":{"tf":1.0},"375":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"5":{"tf":1.0}},"’":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":2,"docs":{"167":{"tf":1.0},"351":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}},"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"=":{"1":{"5":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"j":{"df":0,"docs":{},"w":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"6":{"4":{"_":{"c":{"a":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"290":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":4,"docs":{"155":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.0},"290":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":9,"docs":{"189":{"tf":1.0},"191":{"tf":1.0},"250":{"tf":1.0},"290":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.4142135623730951},"413":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"242":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}}},"df":12,"docs":{"123":{"tf":1.0},"179":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.0},"19":{"tf":2.0},"241":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.0},"375":{"tf":1.0},"85":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}},"|":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"i":{"b":{"/":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"a":{"c":{"df":0,"docs":{},"m":{"df":3,"docs":{"116":{"tf":1.0},"133":{"tf":1.4142135623730951},"97":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"u":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"147":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"133":{"tf":1.0}}}}},"l":{"\'":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":2,"docs":{"314":{"tf":1.4142135623730951},"325":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"83":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"160":{"tf":1.0}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"123":{"tf":1.0},"257":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"171":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"é":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"1":{"tf":1.0},"281":{"tf":1.0},"313":{"tf":1.0},"434":{"tf":1.0},"445":{"tf":1.0},"45":{"tf":1.0},"8":{"tf":1.0}}}}},"df":198,"docs":{"1":{"tf":1.4142135623730951},"101":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.7320508075688772},"109":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.0},"125":{"tf":1.0},"13":{"tf":1.0},"130":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"150":{"tf":1.0},"156":{"tf":1.4142135623730951},"158":{"tf":1.4142135623730951},"16":{"tf":2.449489742783178},"160":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.7320508075688772},"168":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"170":{"tf":1.0},"171":{"tf":1.7320508075688772},"173":{"tf":1.0},"174":{"tf":1.7320508075688772},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"179":{"tf":1.0},"18":{"tf":2.23606797749979},"186":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.4142135623730951},"199":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"209":{"tf":1.0},"21":{"tf":2.0},"210":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.4142135623730951},"221":{"tf":1.4142135623730951},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.6457513110645907},"231":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":2.0},"249":{"tf":2.449489742783178},"25":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.7320508075688772},"260":{"tf":1.4142135623730951},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.4142135623730951},"281":{"tf":1.0},"282":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.4142135623730951},"289":{"tf":1.0},"29":{"tf":1.4142135623730951},"290":{"tf":2.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":2.6457513110645907},"294":{"tf":1.4142135623730951},"296":{"tf":1.7320508075688772},"298":{"tf":1.0},"300":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"318":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":2.0},"33":{"tf":1.0},"330":{"tf":2.6457513110645907},"331":{"tf":2.0},"332":{"tf":1.7320508075688772},"333":{"tf":3.1622776601683795},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":2.449489742783178},"347":{"tf":1.7320508075688772},"35":{"tf":1.4142135623730951},"352":{"tf":2.0},"355":{"tf":1.0},"357":{"tf":1.0},"360":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.0},"365":{"tf":1.4142135623730951},"367":{"tf":1.0},"37":{"tf":1.0},"373":{"tf":1.0},"379":{"tf":1.4142135623730951},"384":{"tf":1.0},"386":{"tf":1.4142135623730951},"39":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.0},"400":{"tf":1.0},"402":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"419":{"tf":1.4142135623730951},"420":{"tf":1.4142135623730951},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":1.4142135623730951},"84":{"tf":2.0},"85":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":1.7320508075688772},"9":{"tf":1.7320508075688772},"90":{"tf":1.0},"92":{"tf":1.0},"98":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"189":{"tf":1.0},"19":{"tf":1.0},"211":{"tf":1.0}}}}}}},"n":{"c":{"df":4,"docs":{"150":{"tf":1.0},"166":{"tf":1.0},"169":{"tf":1.0},"277":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"290":{"tf":1.0},"293":{"tf":1.0}}}}}},"r":{"df":11,"docs":{"166":{"tf":1.0},"279":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"310":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.0},"82":{"tf":1.0}}},"z":{"df":2,"docs":{"287":{"tf":1.0},"293":{"tf":1.0}}}}},"df":4,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"206":{"tf":1.0},"95":{"tf":1.0}},"g":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"2":{"tf":1.0}}}},"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"174":{"tf":1.0},"296":{"tf":1.0}}}},"df":2,"docs":{"298":{"tf":1.7320508075688772},"318":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"21":{"tf":1.0},"333":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":5,"docs":{"150":{"tf":1.0},"178":{"tf":1.0},"23":{"tf":1.0},"249":{"tf":1.0},"394":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"k":{"df":2,"docs":{"189":{"tf":1.0},"401":{"tf":1.0}}}},"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"317":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"9":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"163":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":336,"docs":{"1":{"tf":1.0},"10":{"tf":1.7320508075688772},"100":{"tf":1.0},"104":{"tf":2.0},"106":{"tf":1.4142135623730951},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":1.4142135623730951},"117":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.7320508075688772},"121":{"tf":1.0},"127":{"tf":1.0},"129":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.4142135623730951},"136":{"tf":1.7320508075688772},"137":{"tf":1.4142135623730951},"138":{"tf":1.7320508075688772},"139":{"tf":1.4142135623730951},"140":{"tf":1.7320508075688772},"141":{"tf":1.4142135623730951},"142":{"tf":1.7320508075688772},"143":{"tf":1.4142135623730951},"144":{"tf":1.7320508075688772},"145":{"tf":1.4142135623730951},"146":{"tf":2.449489742783178},"147":{"tf":2.0},"148":{"tf":1.7320508075688772},"15":{"tf":1.0},"150":{"tf":1.4142135623730951},"151":{"tf":1.0},"152":{"tf":1.7320508075688772},"153":{"tf":2.449489742783178},"155":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.7320508075688772},"160":{"tf":1.0},"161":{"tf":1.7320508075688772},"163":{"tf":1.0},"165":{"tf":2.23606797749979},"166":{"tf":2.6457513110645907},"167":{"tf":2.449489742783178},"168":{"tf":2.23606797749979},"169":{"tf":1.0},"17":{"tf":1.7320508075688772},"171":{"tf":1.7320508075688772},"172":{"tf":1.4142135623730951},"173":{"tf":1.4142135623730951},"174":{"tf":2.0},"175":{"tf":1.0},"176":{"tf":1.4142135623730951},"177":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"18":{"tf":2.449489742783178},"181":{"tf":2.0},"183":{"tf":1.7320508075688772},"184":{"tf":1.0},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.7320508075688772},"199":{"tf":2.0},"2":{"tf":2.23606797749979},"20":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.4142135623730951},"206":{"tf":1.0},"207":{"tf":1.0},"21":{"tf":2.449489742783178},"211":{"tf":2.0},"212":{"tf":1.0},"214":{"tf":2.23606797749979},"215":{"tf":1.7320508075688772},"216":{"tf":1.7320508075688772},"217":{"tf":1.7320508075688772},"218":{"tf":1.7320508075688772},"219":{"tf":1.4142135623730951},"220":{"tf":1.7320508075688772},"221":{"tf":1.4142135623730951},"222":{"tf":1.7320508075688772},"223":{"tf":1.7320508075688772},"224":{"tf":1.7320508075688772},"225":{"tf":1.4142135623730951},"226":{"tf":1.7320508075688772},"227":{"tf":1.4142135623730951},"228":{"tf":1.7320508075688772},"229":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"230":{"tf":1.7320508075688772},"231":{"tf":1.4142135623730951},"234":{"tf":1.4142135623730951},"235":{"tf":1.0},"237":{"tf":1.0},"24":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":2.0},"247":{"tf":1.0},"249":{"tf":2.0},"25":{"tf":1.4142135623730951},"251":{"tf":1.0},"252":{"tf":1.0},"254":{"tf":1.4142135623730951},"255":{"tf":1.7320508075688772},"256":{"tf":1.0},"257":{"tf":1.7320508075688772},"258":{"tf":1.0},"259":{"tf":1.0},"26":{"tf":1.7320508075688772},"260":{"tf":1.4142135623730951},"261":{"tf":1.7320508075688772},"262":{"tf":1.4142135623730951},"263":{"tf":1.7320508075688772},"264":{"tf":1.4142135623730951},"265":{"tf":1.7320508075688772},"266":{"tf":1.4142135623730951},"267":{"tf":1.7320508075688772},"268":{"tf":1.4142135623730951},"269":{"tf":1.7320508075688772},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"271":{"tf":1.7320508075688772},"272":{"tf":1.4142135623730951},"273":{"tf":1.7320508075688772},"274":{"tf":1.4142135623730951},"275":{"tf":1.7320508075688772},"276":{"tf":1.7320508075688772},"277":{"tf":3.0},"278":{"tf":1.7320508075688772},"279":{"tf":2.23606797749979},"28":{"tf":1.7320508075688772},"280":{"tf":1.7320508075688772},"281":{"tf":2.449489742783178},"282":{"tf":1.4142135623730951},"283":{"tf":1.7320508075688772},"284":{"tf":1.0},"285":{"tf":1.4142135623730951},"287":{"tf":2.23606797749979},"288":{"tf":2.0},"289":{"tf":1.0},"29":{"tf":1.4142135623730951},"290":{"tf":2.0},"291":{"tf":1.0},"292":{"tf":2.23606797749979},"293":{"tf":2.6457513110645907},"294":{"tf":2.0},"296":{"tf":1.0},"297":{"tf":1.0},"299":{"tf":1.4142135623730951},"3":{"tf":2.0},"30":{"tf":1.7320508075688772},"301":{"tf":1.0},"302":{"tf":1.4142135623730951},"303":{"tf":1.7320508075688772},"304":{"tf":1.4142135623730951},"305":{"tf":1.7320508075688772},"306":{"tf":1.4142135623730951},"307":{"tf":1.7320508075688772},"308":{"tf":1.4142135623730951},"309":{"tf":1.7320508075688772},"31":{"tf":1.4142135623730951},"310":{"tf":1.0},"312":{"tf":1.4142135623730951},"313":{"tf":1.4142135623730951},"316":{"tf":1.4142135623730951},"317":{"tf":1.7320508075688772},"318":{"tf":1.4142135623730951},"319":{"tf":1.7320508075688772},"32":{"tf":1.7320508075688772},"322":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"325":{"tf":1.0},"327":{"tf":2.6457513110645907},"328":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"330":{"tf":1.7320508075688772},"331":{"tf":2.0},"332":{"tf":2.0},"333":{"tf":2.8284271247461903},"334":{"tf":1.7320508075688772},"335":{"tf":1.4142135623730951},"336":{"tf":1.7320508075688772},"337":{"tf":1.4142135623730951},"338":{"tf":1.7320508075688772},"339":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"340":{"tf":1.7320508075688772},"341":{"tf":1.4142135623730951},"342":{"tf":1.7320508075688772},"343":{"tf":1.4142135623730951},"344":{"tf":1.7320508075688772},"346":{"tf":2.0},"347":{"tf":2.0},"348":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"351":{"tf":1.7320508075688772},"352":{"tf":1.7320508075688772},"353":{"tf":2.23606797749979},"354":{"tf":2.449489742783178},"355":{"tf":1.7320508075688772},"356":{"tf":2.0},"357":{"tf":2.0},"358":{"tf":1.7320508075688772},"36":{"tf":1.7320508075688772},"360":{"tf":1.7320508075688772},"361":{"tf":1.4142135623730951},"362":{"tf":1.4142135623730951},"363":{"tf":2.0},"364":{"tf":1.7320508075688772},"365":{"tf":1.4142135623730951},"366":{"tf":1.7320508075688772},"367":{"tf":1.4142135623730951},"368":{"tf":1.7320508075688772},"37":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":3.3166247903554},"376":{"tf":2.449489742783178},"377":{"tf":1.0},"379":{"tf":1.4142135623730951},"38":{"tf":1.7320508075688772},"381":{"tf":1.0},"382":{"tf":2.23606797749979},"383":{"tf":1.7320508075688772},"384":{"tf":1.4142135623730951},"385":{"tf":1.7320508075688772},"386":{"tf":1.4142135623730951},"387":{"tf":1.7320508075688772},"388":{"tf":1.4142135623730951},"39":{"tf":2.0},"390":{"tf":1.4142135623730951},"393":{"tf":2.0},"394":{"tf":1.7320508075688772},"397":{"tf":1.7320508075688772},"399":{"tf":1.0},"40":{"tf":1.7320508075688772},"400":{"tf":1.4142135623730951},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.7320508075688772},"404":{"tf":1.4142135623730951},"405":{"tf":1.7320508075688772},"406":{"tf":1.4142135623730951},"407":{"tf":1.7320508075688772},"408":{"tf":1.4142135623730951},"409":{"tf":1.7320508075688772},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"411":{"tf":1.7320508075688772},"412":{"tf":1.0},"414":{"tf":1.7320508075688772},"417":{"tf":1.0},"418":{"tf":1.7320508075688772},"419":{"tf":2.0},"42":{"tf":1.7320508075688772},"420":{"tf":1.7320508075688772},"422":{"tf":1.0},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"431":{"tf":1.7320508075688772},"432":{"tf":1.4142135623730951},"433":{"tf":1.7320508075688772},"434":{"tf":1.4142135623730951},"435":{"tf":1.7320508075688772},"436":{"tf":1.4142135623730951},"437":{"tf":1.7320508075688772},"438":{"tf":1.4142135623730951},"439":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"440":{"tf":1.4142135623730951},"441":{"tf":1.7320508075688772},"442":{"tf":2.6457513110645907},"444":{"tf":1.0},"445":{"tf":1.0},"449":{"tf":1.7320508075688772},"45":{"tf":2.0},"450":{"tf":1.0},"451":{"tf":2.23606797749979},"46":{"tf":1.7320508075688772},"47":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"49":{"tf":1.7320508075688772},"5":{"tf":1.4142135623730951},"50":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"52":{"tf":1.7320508075688772},"53":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"6":{"tf":3.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"66":{"tf":1.7320508075688772},"67":{"tf":1.4142135623730951},"68":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772},"70":{"tf":1.7320508075688772},"72":{"tf":2.8284271247461903},"73":{"tf":1.7320508075688772},"74":{"tf":2.23606797749979},"75":{"tf":1.0},"76":{"tf":2.449489742783178},"77":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772},"8":{"tf":2.8284271247461903},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":2.8284271247461903},"84":{"tf":2.8284271247461903},"85":{"tf":3.1622776601683795},"86":{"tf":2.449489742783178},"87":{"tf":2.0},"88":{"tf":3.605551275463989},"9":{"tf":1.0},"90":{"tf":1.4142135623730951},"91":{"tf":1.7320508075688772},"92":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951},"96":{"tf":1.0},"98":{"tf":1.0}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"184":{"tf":1.0},"356":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"21":{"tf":1.0},"23":{"tf":1.0}}}},"’":{"df":6,"docs":{"114":{"tf":1.0},"117":{"tf":1.0},"133":{"tf":1.0},"445":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"231":{"tf":1.0},"243":{"tf":1.0},"347":{"tf":1.0},"351":{"tf":1.0},"451":{"tf":1.0}}}}},"h":{"df":1,"docs":{"292":{"tf":1.0}}},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"383":{"tf":1.0}}}}}}}},"df":6,"docs":{"348":{"tf":1.0},"350":{"tf":1.0},"356":{"tf":1.7320508075688772},"357":{"tf":1.0},"373":{"tf":1.0},"419":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":3,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"133":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"q":{"df":1,"docs":{"288":{"tf":1.0}}}},"r":{"df":2,"docs":{"151":{"tf":1.0},"81":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"288":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"w":{"df":0,"docs":{},"w":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"390":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"181":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.7320508075688772},"375":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"r":{"df":73,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"243":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}},"u":{"df":2,"docs":{"23":{"tf":1.0},"352":{"tf":1.0}}}},"g":{"df":0,"docs":{},"n":{"df":9,"docs":{"175":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"2":{"tf":1.0},"20":{"tf":1.0},"290":{"tf":1.4142135623730951},"357":{"tf":1.0},"5":{"tf":1.0},"83":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"351":{"tf":1.0},"357":{"tf":1.0}}},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"201":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"_":{"df":0,"docs":{},"z":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"201":{"tf":1.7320508075688772}}}}}},"df":2,"docs":{"189":{"tf":1.0},"202":{"tf":1.7320508075688772}}}}}},"df":19,"docs":{"167":{"tf":1.0},"172":{"tf":1.0},"185":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"198":{"tf":2.0},"199":{"tf":1.0},"200":{"tf":1.4142135623730951},"201":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"326":{"tf":1.0},"372":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":1.0},"74":{"tf":1.0}},"é":{"df":1,"docs":{"169":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"165":{"tf":1.0},"377":{"tf":1.0}}},"t":{"df":4,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"389":{"tf":1.0},"392":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"/":{"a":{"df":0,"docs":{},"m":{"d":{"6":{"4":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":7,"docs":{"151":{"tf":1.0},"2":{"tf":1.0},"291":{"tf":1.0},"71":{"tf":1.0},"81":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"181":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"281":{"tf":1.0},"76":{"tf":1.0}}}},"t":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"df":16,"docs":{"118":{"tf":1.0},"160":{"tf":1.0},"199":{"tf":1.4142135623730951},"204":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"238":{"tf":1.0},"243":{"tf":1.0},"290":{"tf":1.0},"318":{"tf":1.4142135623730951},"329":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"373":{"tf":1.0},"375":{"tf":1.4142135623730951},"449":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":2,"docs":{"355":{"tf":1.0},"357":{"tf":1.0}}}}}}}}},"df":6,"docs":{"121":{"tf":1.4142135623730951},"202":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"355":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951}}},"r":{"df":3,"docs":{"317":{"tf":1.0},"332":{"tf":1.0},"449":{"tf":1.0}}}}}},"t":{"df":4,"docs":{"249":{"tf":1.0},"347":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"165":{"tf":1.0}}}}},"n":{"df":2,"docs":{"116":{"tf":1.0},"199":{"tf":1.0}}},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":27,"docs":{"100":{"tf":1.0},"147":{"tf":1.4142135623730951},"148":{"tf":1.0},"151":{"tf":1.0},"156":{"tf":1.0},"165":{"tf":1.0},"177":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"210":{"tf":1.0},"213":{"tf":1.0},"235":{"tf":1.0},"24":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"285":{"tf":1.4142135623730951},"292":{"tf":1.0},"299":{"tf":1.0},"313":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":1.0},"397":{"tf":1.0},"420":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.4142135623730951},"88":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"443":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"169":{"tf":1.0},"172":{"tf":1.0},"243":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":1.0}}}}},"t":{"df":2,"docs":{"199":{"tf":1.4142135623730951},"202":{"tf":2.23606797749979}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":33,"docs":{"10":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"169":{"tf":1.0},"175":{"tf":1.0},"183":{"tf":1.0},"185":{"tf":1.4142135623730951},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.0},"211":{"tf":1.0},"214":{"tf":1.4142135623730951},"243":{"tf":1.0},"255":{"tf":1.0},"293":{"tf":1.0},"317":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"380":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":2.6457513110645907},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"é":{"df":1,"docs":{"393":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":3,"docs":{"191":{"tf":1.4142135623730951},"195":{"tf":1.4142135623730951},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"a":{"df":3,"docs":{"325":{"tf":1.0},"328":{"tf":1.4142135623730951},"334":{"tf":1.0}},"s":{"(":{"\'":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"328":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":21,"docs":{"119":{"tf":1.0},"127":{"tf":1.7320508075688772},"133":{"tf":1.4142135623730951},"178":{"tf":1.0},"189":{"tf":2.449489742783178},"191":{"tf":1.0},"192":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.7320508075688772},"205":{"tf":1.0},"206":{"tf":1.0},"208":{"tf":1.7320508075688772},"243":{"tf":1.0},"316":{"tf":1.0},"330":{"tf":2.449489742783178},"331":{"tf":1.4142135623730951},"333":{"tf":2.0},"359":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0}},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"2":{"df":0,"docs":{},"f":{"a":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"244":{"tf":1.0},"363":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"375":{"tf":1.4142135623730951}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"127":{"tf":2.0},"189":{"tf":3.1622776601683795},"211":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"356":{"tf":1.0},"421":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.0}},"u":{"df":1,"docs":{"375":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":6,"docs":{"109":{"tf":1.0},"121":{"tf":1.0},"134":{"tf":1.7320508075688772},"189":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"180":{"tf":1.0},"348":{"tf":1.4142135623730951},"414":{"tf":1.0}}}},"r":{"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.7320508075688772},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"’":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"2":{"tf":1.0}}}}}}}}},"t":{"df":2,"docs":{"388":{"tf":1.0},"403":{"tf":1.0}}},"w":{"df":1,"docs":{"181":{"tf":1.0}}}},"r":{"df":6,"docs":{"174":{"tf":1.0},"277":{"tf":1.0},"352":{"tf":1.0},"370":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"s":{"df":3,"docs":{"289":{"tf":1.0},"292":{"tf":1.0},"84":{"tf":1.0}},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"88":{"tf":1.0}}}}},"u":{"df":4,"docs":{"147":{"tf":1.0},"155":{"tf":1.0},"240":{"tf":1.0},"318":{"tf":1.0}},"e":{"df":2,"docs":{"153":{"tf":1.0},"249":{"tf":1.0}}},"i":{"df":3,"docs":{"179":{"tf":1.0},"346":{"tf":1.0},"363":{"tf":1.0}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"202":{"tf":1.0}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"è":{"df":6,"docs":{"167":{"tf":1.4142135623730951},"18":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"375":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"442":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"332":{"tf":1.7320508075688772}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"22":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"i":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":7,"docs":{"178":{"tf":1.0},"2":{"tf":1.4142135623730951},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"4":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":10,"docs":{"18":{"tf":1.4142135623730951},"243":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"293":{"tf":1.0},"322":{"tf":1.0},"327":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"276":{"tf":1.0},"280":{"tf":1.0},"281":{"tf":1.0},"412":{"tf":1.0},"5":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"442":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"333":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"14":{"tf":1.0},"393":{"tf":1.0},"449":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}}}}},"r":{"df":2,"docs":{"168":{"tf":1.0},"379":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"253":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":4,"docs":{"285":{"tf":1.0},"290":{"tf":1.0},"299":{"tf":1.0},"326":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"176":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"161":{"tf":1.0},"173":{"tf":1.0},"420":{"tf":1.0}}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}},"i":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"364":{"tf":1.0}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"n":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"166":{"tf":1.0},"276":{"tf":1.0},"89":{"tf":1.0}}},"n":{"c":{"df":8,"docs":{"187":{"tf":1.0},"217":{"tf":1.0},"23":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"298":{"tf":1.0},"74":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":14,"docs":{"173":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"258":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"294":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"418":{"tf":1.0},"6":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"71":{"tf":1.0}}}}},"t":{"df":1,"docs":{"1":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"p":{"df":2,"docs":{"214":{"tf":1.0},"95":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"420":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"175":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"347":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"291":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"r":{"df":4,"docs":{"278":{"tf":1.0},"397":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"df":10,"docs":{"164":{"tf":1.0},"175":{"tf":1.0},"178":{"tf":1.0},"232":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"397":{"tf":1.0},"417":{"tf":1.0}}},"n":{"df":3,"docs":{"168":{"tf":1.0},"379":{"tf":1.0},"85":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"331":{"tf":1.0}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"l":{"df":5,"docs":{"14":{"tf":1.0},"17":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"86":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"276":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.4142135623730951},"95":{"tf":1.0}}}}}}},"df":2,"docs":{"147":{"tf":1.0},"3":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"181":{"tf":1.0}}},"df":0,"docs":{}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"382":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":2,"docs":{"18":{"tf":1.0},"20":{"tf":1.0}}}},"t":{"df":4,"docs":{"104":{"tf":1.4142135623730951},"237":{"tf":1.0},"347":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"72":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"399":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"444":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"364":{"tf":1.0}}}}}}}}}}}}},"m":{"a":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"257":{"tf":1.4142135623730951}},"e":{"\\"":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":23,"docs":{"100":{"tf":1.0},"145":{"tf":1.0},"147":{"tf":1.4142135623730951},"150":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"163":{"tf":1.0},"167":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.7320508075688772},"172":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.0},"210":{"tf":1.0},"291":{"tf":1.0},"296":{"tf":1.0},"443":{"tf":1.0},"76":{"tf":1.0},"81":{"tf":1.4142135623730951},"84":{"tf":1.0},"88":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":2,"docs":{"443":{"tf":1.0},"451":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"o":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":5,"docs":{"199":{"tf":1.0},"20":{"tf":1.0},"249":{"tf":1.4142135623730951},"290":{"tf":1.0},"356":{"tf":1.0}},"l":{"df":7,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"213":{"tf":1.0},"297":{"tf":1.0},"86":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"n":{",":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"173":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"174":{"tf":1.0}}}},"r":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}},"[":{"\\"":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":14,"docs":{"123":{"tf":1.0},"21":{"tf":1.0},"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"294":{"tf":2.23606797749979},"316":{"tf":1.4142135623730951},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0},"413":{"tf":2.0},"414":{"tf":4.795831523312719},"428":{"tf":1.7320508075688772},"72":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"318":{"tf":1.0},"372":{"tf":1.0},"427":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"357":{"tf":1.0},"83":{"tf":1.0}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}}}}}}},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"147":{"tf":1.0},"179":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"184":{"tf":1.0},"300":{"tf":1.0}}}}},"df":1,"docs":{"399":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"288":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":14,"docs":{"166":{"tf":1.4142135623730951},"175":{"tf":1.0},"183":{"tf":1.0},"2":{"tf":1.7320508075688772},"206":{"tf":1.0},"276":{"tf":1.4142135623730951},"3":{"tf":1.0},"362":{"tf":1.0},"4":{"tf":1.7320508075688772},"442":{"tf":1.0},"451":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772},"6":{"tf":1.0},"71":{"tf":1.4142135623730951}}}}}},"p":{"df":1,"docs":{"401":{"tf":1.0}}},"r":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"284":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"k":{"_":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"59":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"394":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"318":{"tf":1.0},"347":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"394":{"tf":1.0}}}}},"é":{"df":2,"docs":{"442":{"tf":1.0},"83":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"397":{"tf":1.0}}}}},"é":{"df":1,"docs":{"382":{"tf":1.0}}}}},"s":{"c":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"189":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"450":{"tf":1.4142135623730951}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"193":{"tf":1.0},"214":{"tf":1.0},"259":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"208":{"tf":1.0},"396":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"i":{"df":3,"docs":{"166":{"tf":1.0},"300":{"tf":1.0},"330":{"tf":1.0}},"s":{"df":1,"docs":{"300":{"tf":1.0}}}}},"df":0,"docs":{}}},"x":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":3,"docs":{"180":{"tf":1.0},"208":{"tf":1.0},"393":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"127":{"tf":2.23606797749979},"189":{"tf":3.7416573867739413}}}}}}}},"î":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"1":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"p":{"df":2,"docs":{"16":{"tf":1.0},"243":{"tf":1.0}}}},"df":7,"docs":{"123":{"tf":1.0},"174":{"tf":1.7320508075688772},"294":{"tf":1.0},"296":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.4142135623730951},"394":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"181":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"450":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"347":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"284":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":3,"docs":{"10":{"tf":1.0},"281":{"tf":1.0},"76":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":5,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"86":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":9,"docs":{"279":{"tf":1.0},"317":{"tf":1.0},"365":{"tf":1.0},"375":{"tf":1.0},"388":{"tf":1.0},"403":{"tf":1.4142135623730951},"43":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"364":{"tf":1.0},"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"293":{"tf":1.0},"330":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"181":{"tf":1.0},"355":{"tf":1.0},"364":{"tf":1.0}},"r":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"352":{"tf":1.0}}}}},"r":{"df":12,"docs":{"108":{"tf":1.0},"117":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"139":{"tf":1.0},"170":{"tf":1.0},"172":{"tf":1.0},"176":{"tf":1.0},"214":{"tf":1.0},"317":{"tf":1.0},"390":{"tf":1.0},"74":{"tf":1.0}}}}}},"i":{"b":{"/":{"df":2,"docs":{"289":{"tf":1.0},"356":{"tf":1.0}}},"df":2,"docs":{"289":{"tf":1.0},"356":{"tf":1.0}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"d":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"280":{"tf":1.0},"287":{"tf":1.0},"399":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"377":{"tf":1.0}},"g":{"df":1,"docs":{"414":{"tf":2.0}},"r":{"a":{"df":0,"docs":{},"t":{"df":11,"docs":{"279":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"339":{"tf":1.0},"372":{"tf":1.7320508075688772},"397":{"tf":1.0},"414":{"tf":1.0},"450":{"tf":1.4142135623730951},"73":{"tf":1.0},"85":{"tf":1.7320508075688772},"87":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"450":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"n":{"df":9,"docs":{"24":{"tf":1.0},"277":{"tf":1.7320508075688772},"278":{"tf":1.7320508075688772},"301":{"tf":1.0},"6":{"tf":2.0},"7":{"tf":2.0},"72":{"tf":2.0},"73":{"tf":2.0},"89":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":3,"docs":{"113":{"tf":1.0},"292":{"tf":1.0},"389":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"127":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}}}},"df":3,"docs":{"154":{"tf":1.0},"164":{"tf":1.0},"447":{"tf":1.0}},"u":{"df":0,"docs":{},"m":{"df":4,"docs":{"151":{"tf":1.0},"167":{"tf":1.0},"243":{"tf":1.0},"383":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":9,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"347":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.0},"85":{"tf":2.0}}}}},"s":{"df":0,"docs":{},"e":{"df":10,"docs":{"128":{"tf":1.0},"132":{"tf":1.0},"165":{"tf":1.0},"362":{"tf":1.0},"418":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0},"94":{"tf":1.0}}}},"x":{"df":1,"docs":{"133":{"tf":1.0}}}},"k":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":4,"docs":{"109":{"tf":1.0},"116":{"tf":1.0},"178":{"tf":1.0},"83":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"317":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":2,"docs":{"397":{"tf":1.4142135623730951},"443":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"d":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":3,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"133":{"tf":1.0}},"e":{")":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"447":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":1,"docs":{"447":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":91,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":1.7320508075688772},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.4142135623730951},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.4142135623730951},"283":{"tf":1.0},"294":{"tf":1.0},"296":{"tf":1.4142135623730951},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"313":{"tf":1.7320508075688772},"32":{"tf":1.0},"324":{"tf":1.4142135623730951},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.4142135623730951},"38":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"413":{"tf":1.4142135623730951},"417":{"tf":1.4142135623730951},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.4142135623730951},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"447":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"l":{"df":1,"docs":{"372":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"16":{"tf":1.0},"165":{"tf":1.4142135623730951},"389":{"tf":1.0},"403":{"tf":1.0}},"i":{"df":20,"docs":{"105":{"tf":1.0},"165":{"tf":1.0},"232":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.4142135623730951},"249":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.4142135623730951},"254":{"tf":1.4142135623730951},"317":{"tf":1.0},"319":{"tf":1.0},"358":{"tf":1.0},"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"442":{"tf":1.0}}}},"é":{"df":2,"docs":{"389":{"tf":1.0},"403":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"l":{"df":15,"docs":{"101":{"tf":1.0},"133":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":1.4142135623730951},"214":{"tf":1.0},"296":{"tf":1.0},"334":{"tf":1.0},"369":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"379":{"tf":1.4142135623730951},"421":{"tf":1.0},"447":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"334":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"è":{"df":0,"docs":{},"l":{"df":11,"docs":{"10":{"tf":1.4142135623730951},"270":{"tf":1.0},"281":{"tf":1.4142135623730951},"284":{"tf":1.0},"3":{"tf":1.0},"353":{"tf":1.0},"430":{"tf":1.0},"53":{"tf":1.0},"65":{"tf":1.0},"76":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"286":{"tf":1.0}},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":6,"docs":{"286":{"tf":1.0},"351":{"tf":1.0},"353":{"tf":1.4142135623730951},"356":{"tf":1.0},"397":{"tf":1.0},"6":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"161":{"tf":1.0}}}}}},"n":{"df":5,"docs":{"19":{"tf":1.7320508075688772},"21":{"tf":1.0},"294":{"tf":2.23606797749979},"334":{"tf":1.0},"86":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"207":{"tf":1.0}}}}}},"o":{"df":4,"docs":{"356":{"tf":1.0},"443":{"tf":1.4142135623730951},"451":{"tf":1.0},"76":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"287":{"tf":1.4142135623730951}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}},"r":{"df":1,"docs":{"21":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"87":{"tf":1.0}}}}}},"é":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}}},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"291":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":14,"docs":{"102":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"243":{"tf":1.4142135623730951},"250":{"tf":1.0},"291":{"tf":1.0},"330":{"tf":1.7320508075688772},"359":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"171":{"tf":1.0},"381":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"317":{"tf":2.0}}}}}}},"p":{"df":0,"docs":{},"s":{"c":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"380":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"169":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"213":{"tf":1.0}}}}}},"t":{"a":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"347":{"tf":1.0},"447":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{}}},"v":{"df":2,"docs":{"109":{"tf":1.0},"116":{"tf":1.0}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"447":{"tf":1.0}}}}},"é":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"357":{"tf":1.0},"450":{"tf":1.0}}}},"s":{"df":0,"docs":{},"m":{"df":3,"docs":{"231":{"tf":1.0},"347":{"tf":1.0},"361":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"254":{"tf":1.0},"352":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"394":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"t":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":2,"docs":{"346":{"tf":1.0},"419":{"tf":1.0}}}}}}},"df":1,"docs":{"208":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"364":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"279":{"tf":1.0},"287":{"tf":1.0},"337":{"tf":1.0},"372":{"tf":1.0},"394":{"tf":1.0},"416":{"tf":1.0}}}}}}},"ê":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":15,"docs":{"147":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"211":{"tf":1.0},"287":{"tf":1.4142135623730951},"296":{"tf":1.0},"346":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"357":{"tf":1.0},"363":{"tf":1.0},"450":{"tf":1.0},"72":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":3,"docs":{"164":{"tf":1.0},"423":{"tf":1.0},"85":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"451":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"df":1,"docs":{"133":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"446":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}},"v":{"df":2,"docs":{"356":{"tf":1.7320508075688772},"444":{"tf":1.0}}}}},"v":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"333":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"313":{"tf":1.0},"322":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"325":{"tf":1.0},"333":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":80,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"313":{"tf":1.0},"32":{"tf":1.0},"325":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.7320508075688772},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.4142135623730951},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"419":{"tf":1.0},"42":{"tf":1.0},"422":{"tf":1.0},"428":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"u":{"df":3,"docs":{"21":{"tf":1.0},"328":{"tf":1.0},"4":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}}},"df":4,"docs":{"124":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"352":{"tf":1.0}},"e":{"df":36,"docs":{"105":{"tf":1.0},"133":{"tf":1.4142135623730951},"148":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.4142135623730951},"17":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"234":{"tf":1.0},"237":{"tf":1.0},"258":{"tf":1.0},"276":{"tf":1.0},"284":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.0},"332":{"tf":1.0},"346":{"tf":1.0},"355":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.4142135623730951},"399":{"tf":1.0},"402":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"325":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"325":{"tf":1.0}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":2,"docs":{"84":{"tf":1.7320508075688772},"85":{"tf":1.0}}}}}}},"w":{"df":7,"docs":{"129":{"tf":1.0},"130":{"tf":1.0},"294":{"tf":1.4142135623730951},"331":{"tf":1.0},"333":{"tf":1.0},"423":{"tf":1.0},"86":{"tf":1.0}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":2,"docs":{"372":{"tf":1.0},"402":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"116":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":32,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":2.0},"116":{"tf":1.7320508075688772},"117":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":2.449489742783178},"122":{"tf":1.0},"124":{"tf":1.7320508075688772},"127":{"tf":1.4142135623730951},"129":{"tf":1.0},"130":{"tf":1.7320508075688772},"133":{"tf":2.449489742783178},"134":{"tf":1.7320508075688772},"187":{"tf":1.0},"189":{"tf":3.4641016151377544},"198":{"tf":1.0},"199":{"tf":2.449489742783178},"200":{"tf":1.4142135623730951},"203":{"tf":1.4142135623730951},"204":{"tf":2.0},"205":{"tf":1.0},"208":{"tf":3.4641016151377544},"211":{"tf":1.0},"214":{"tf":1.7320508075688772},"445":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}},"x":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"2":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":3,"docs":{"276":{"tf":1.0},"379":{"tf":1.4142135623730951},"5":{"tf":1.0}},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"189":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}},"x":{"df":3,"docs":{"281":{"tf":1.0},"378":{"tf":1.0},"416":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"j":{"df":3,"docs":{"286":{"tf":1.0},"323":{"tf":1.0},"447":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":5,"docs":{"148":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.0},"286":{"tf":1.0},"288":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"d":{"df":1,"docs":{"147":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"r":{"df":2,"docs":{"177":{"tf":1.0},"181":{"tf":1.0}}}},"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"294":{"tf":1.0},"331":{"tf":1.4142135623730951},"383":{"tf":1.0},"419":{"tf":1.0}}},"n":{"c":{"df":1,"docs":{"394":{"tf":1.0}}},"df":20,"docs":{"133":{"tf":1.0},"147":{"tf":1.7320508075688772},"151":{"tf":1.0},"153":{"tf":2.0},"166":{"tf":1.7320508075688772},"183":{"tf":1.4142135623730951},"184":{"tf":1.0},"196":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.4142135623730951},"238":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"290":{"tf":1.0},"300":{"tf":1.4142135623730951},"397":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"[":{"df":0,"docs":{},"p":{"a":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}},"df":7,"docs":{"259":{"tf":1.0},"317":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"d":{":":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"166":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"166":{"tf":1.0},"167":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"332":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":8,"docs":{"209":{"tf":1.0},"21":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":2.6457513110645907},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951},"426":{"tf":1.7320508075688772}},"r":{"df":1,"docs":{"102":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":14,"docs":{"175":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":1.0},"213":{"tf":1.0},"297":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"319":{"tf":1.0},"320":{"tf":1.4142135623730951},"375":{"tf":1.7320508075688772},"377":{"tf":2.0},"418":{"tf":1.0},"61":{"tf":1.0},"9":{"tf":1.0}},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"377":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"377":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"355":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"2":{"tf":1.0}}}}}},"u":{"df":1,"docs":{"82":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":8,"docs":{"106":{"tf":1.0},"128":{"tf":1.0},"173":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"317":{"tf":1.0},"334":{"tf":1.0},"394":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":4,"docs":{"318":{"tf":1.0},"332":{"tf":1.0},"364":{"tf":1.0},"429":{"tf":1.0}}}}}},"w":{"df":5,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"188":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}},"p":{"df":0,"docs":{},"m":{"df":8,"docs":{"292":{"tf":1.4142135623730951},"313":{"tf":2.23606797749979},"320":{"tf":1.0},"324":{"tf":2.23606797749979},"327":{"tf":1.0},"334":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}},"x":{"df":6,"docs":{"100":{"tf":1.0},"292":{"tf":1.4142135623730951},"320":{"tf":1.4142135623730951},"323":{"tf":1.0},"334":{"tf":1.0},"389":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"241":{"tf":2.0},"373":{"tf":1.0}}}},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"108":{"tf":1.0}}}}},"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":2,"docs":{"288":{"tf":1.0},"394":{"tf":1.0}}}}}}},"é":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":8,"docs":{"167":{"tf":1.0},"253":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.0},"288":{"tf":1.0},"363":{"tf":1.0},"392":{"tf":1.0},"76":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":7,"docs":{"189":{"tf":1.0},"244":{"tf":1.0},"316":{"tf":1.0},"331":{"tf":1.0},"334":{"tf":1.0},"355":{"tf":1.0},"363":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"396":{"tf":1.0},"397":{"tf":1.0}}}}}},"df":0,"docs":{}}},"’":{"a":{"df":5,"docs":{"19":{"tf":1.4142135623730951},"237":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":12,"docs":{"109":{"tf":1.0},"165":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"254":{"tf":1.0},"277":{"tf":1.4142135623730951},"288":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"86":{"tf":1.0},"88":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"165":{"tf":1.0},"242":{"tf":1.0},"292":{"tf":1.0},"363":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"353":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"353":{"tf":1.0}}}}}}}},"o":{"1":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"2":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"3":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"194":{"tf":1.0}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"_":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"}":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"244":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"244":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0}}}}}}}},"df":10,"docs":{"143":{"tf":1.0},"232":{"tf":1.0},"243":{"tf":2.8284271247461903},"244":{"tf":2.0},"248":{"tf":1.0},"250":{"tf":1.0},"254":{"tf":1.7320508075688772},"259":{"tf":1.0},"416":{"tf":1.0},"74":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"289":{"tf":1.7320508075688772},"294":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"424":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"14":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"80":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":3,"docs":{"346":{"tf":1.0},"348":{"tf":1.0},"425":{"tf":1.0}},"s":{"/":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":6,"docs":{"153":{"tf":1.0},"199":{"tf":1.0},"389":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":5,"docs":{"193":{"tf":1.0},"205":{"tf":1.0},"284":{"tf":1.0},"319":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"291":{"tf":1.0}}}},"u":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"88":{"tf":1.0}}},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"292":{"tf":1.0}}}}}},"df":8,"docs":{"121":{"tf":1.0},"150":{"tf":1.0},"178":{"tf":1.0},"180":{"tf":1.0},"187":{"tf":1.0},"206":{"tf":1.0},"292":{"tf":1.0},"389":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"177":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}},"k":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":12,"docs":{"105":{"tf":1.0},"106":{"tf":1.4142135623730951},"160":{"tf":1.4142135623730951},"164":{"tf":1.0},"319":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.7320508075688772},"424":{"tf":1.0},"425":{"tf":1.7320508075688772},"426":{"tf":1.0},"429":{"tf":1.4142135623730951}}},"n":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"360":{"tf":1.4142135623730951},"376":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"376":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"(":{"d":{"b":{"df":1,"docs":{"429":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"(":{"\\"":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"\\"":{")":{".":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{"(":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"(":{")":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"164":{"tf":1.0},"181":{"tf":1.0}}}}}},"t":{"df":2,"docs":{"290":{"tf":1.0},"362":{"tf":1.0}}}},"p":{"df":1,"docs":{"2":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"373":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":3,"docs":{"288":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.0}}}}}}},"t":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"178":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"133":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"156":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"109":{"tf":1.4142135623730951}},"e":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"109":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"109":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"148":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.7320508075688772},"161":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772}}}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"356":{"tf":1.0}},"s":{"df":2,"docs":{"356":{"tf":1.4142135623730951},"357":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":2,"docs":{"291":{"tf":1.7320508075688772},"330":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"g":{"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"112":{"tf":1.0},"169":{"tf":1.0},"173":{"tf":1.4142135623730951},"176":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"189":{"tf":1.0},"286":{"tf":1.0},"296":{"tf":1.0},"331":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}}}}}}}},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"417":{"tf":1.0}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"287":{"tf":1.0},"349":{"tf":1.0},"373":{"tf":1.0},"419":{"tf":1.0},"422":{"tf":1.0},"449":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"357":{"tf":1.0},"72":{"tf":1.4142135623730951},"86":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}},"d":{"df":1,"docs":{"372":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"185":{"tf":1.4142135623730951}}}},"r":{"df":6,"docs":{"208":{"tf":1.0},"279":{"tf":1.0},"357":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"82":{"tf":1.0}},"é":{"df":2,"docs":{"2":{"tf":1.0},"3":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"123":{"tf":1.0},"294":{"tf":1.0}}}}}}},"s":{"df":1,"docs":{"151":{"tf":1.0}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":125,"docs":{"101":{"tf":1.0},"119":{"tf":1.0},"12":{"tf":1.0},"133":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":2.449489742783178},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"179":{"tf":1.0},"18":{"tf":1.0},"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"19":{"tf":1.7320508075688772},"191":{"tf":1.0},"196":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.7320508075688772},"210":{"tf":1.0},"214":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"23":{"tf":1.7320508075688772},"230":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"252":{"tf":1.4142135623730951},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"276":{"tf":1.4142135623730951},"28":{"tf":1.0},"283":{"tf":1.0},"286":{"tf":1.0},"292":{"tf":1.0},"296":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":2.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"316":{"tf":1.0},"32":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"363":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"380":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"393":{"tf":1.4142135623730951},"4":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"42":{"tf":1.0},"420":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":2.23606797749979},"89":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.0}},"i":{"df":7,"docs":{"147":{"tf":1.4142135623730951},"153":{"tf":1.0},"232":{"tf":1.4142135623730951},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.0},"249":{"tf":1.0}}},"t":{"df":2,"docs":{"356":{"tf":1.0},"357":{"tf":1.0}},"i":{"df":0,"docs":{},"l":{"df":4,"docs":{"150":{"tf":1.0},"171":{"tf":1.0},"288":{"tf":1.0},"390":{"tf":1.0}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"104":{"tf":1.4142135623730951},"210":{"tf":1.0},"348":{"tf":1.0},"6":{"tf":1.0}}}}},"r":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"290":{"tf":1.0},"293":{"tf":1.0},"86":{"tf":1.0}}}},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"363":{"tf":1.0},"41":{"tf":1.0},"8":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"348":{"tf":1.0},"414":{"tf":2.6457513110645907},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951},"426":{"tf":1.7320508075688772}}}}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"423":{"tf":1.7320508075688772},"427":{"tf":1.4142135623730951},"428":{"tf":1.0}}},"df":0,"docs":{}}},"df":4,"docs":{"291":{"tf":1.0},"372":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":4,"docs":{"393":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}}}},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"375":{"tf":1.0}},"}":{"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"423":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}},"p":{"2":{"5":{"6":{"/":{"df":0,"docs":{},"p":{"3":{"8":{"4":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{":":{":":{"a":{"d":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"292":{"tf":1.0},"447":{"tf":1.0}}}},"df":7,"docs":{"294":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.4142135623730951},"380":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":2.449489742783178},"425":{"tf":1.7320508075688772}}}},"d":{"df":1,"docs":{"426":{"tf":1.0}}},"df":76,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.4142135623730951},"113":{"tf":1.0},"13":{"tf":1.0},"133":{"tf":1.4142135623730951},"148":{"tf":1.0},"156":{"tf":1.4142135623730951},"16":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":1.0},"172":{"tf":1.0},"177":{"tf":1.0},"187":{"tf":1.0},"19":{"tf":1.4142135623730951},"199":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"210":{"tf":1.0},"212":{"tf":1.0},"23":{"tf":1.4142135623730951},"237":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"254":{"tf":1.0},"258":{"tf":1.0},"264":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":2.0},"278":{"tf":1.4142135623730951},"281":{"tf":1.0},"284":{"tf":1.4142135623730951},"288":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.0},"319":{"tf":1.7320508075688772},"324":{"tf":1.4142135623730951},"332":{"tf":1.0},"353":{"tf":1.4142135623730951},"356":{"tf":1.0},"363":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":1.0},"379":{"tf":1.0},"383":{"tf":1.0},"390":{"tf":1.4142135623730951},"391":{"tf":1.0},"393":{"tf":1.7320508075688772},"397":{"tf":1.7320508075688772},"401":{"tf":1.4142135623730951},"402":{"tf":1.0},"403":{"tf":1.0},"420":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.0},"451":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.7320508075688772},"7":{"tf":1.7320508075688772},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"75":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":2.0},"9":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":163,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"135":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"139":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"141":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"143":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.4142135623730951},"215":{"tf":1.4142135623730951},"216":{"tf":1.4142135623730951},"217":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"219":{"tf":1.4142135623730951},"22":{"tf":1.0},"220":{"tf":1.4142135623730951},"221":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"223":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"225":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"227":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"229":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"260":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"262":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"264":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"266":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"268":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"272":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"274":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"293":{"tf":1.4142135623730951},"294":{"tf":1.0},"30":{"tf":1.4142135623730951},"302":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"304":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"306":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"308":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"318":{"tf":1.0},"319":{"tf":1.0},"32":{"tf":1.4142135623730951},"328":{"tf":1.0},"33":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"335":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"339":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"343":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"365":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"370":{"tf":1.0},"375":{"tf":2.8284271247461903},"377":{"tf":1.0},"38":{"tf":1.4142135623730951},"384":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"386":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"404":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"406":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"408":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"414":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"432":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"434":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"436":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"438":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"440":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.0},"90":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}},"r":{"df":5,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"124":{"tf":1.7320508075688772},"193":{"tf":1.0},"205":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"280":{"tf":1.0},"373":{"tf":1.0},"449":{"tf":1.0},"9":{"tf":1.0}},"é":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"223":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"383":{"tf":1.0},"401":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":2,"docs":{"325":{"tf":1.0},"332":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"199":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"169":{"tf":1.0}}}},"é":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"172":{"tf":1.0}}}}}}}}},"m":{"df":1,"docs":{"402":{"tf":1.0}},"è":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":6,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"231":{"tf":1.0},"75":{"tf":1.4142135623730951}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":79,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"15":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"277":{"tf":2.0},"282":{"tf":1.0},"286":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":2.23606797749979},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":2.0},"77":{"tf":1.0},"8":{"tf":1.0},"81":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}}},"df":57,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"107":{"tf":1.0},"109":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.4142135623730951},"155":{"tf":1.4142135623730951},"158":{"tf":1.0},"16":{"tf":1.0},"161":{"tf":1.7320508075688772},"169":{"tf":1.7320508075688772},"17":{"tf":1.0},"173":{"tf":1.0},"175":{"tf":1.0},"181":{"tf":1.0},"19":{"tf":1.4142135623730951},"190":{"tf":1.0},"192":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"202":{"tf":1.4142135623730951},"204":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.7320508075688772},"243":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":2.0},"290":{"tf":1.0},"298":{"tf":1.0},"327":{"tf":1.0},"331":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"369":{"tf":1.0},"374":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"377":{"tf":1.4142135623730951},"393":{"tf":1.0},"395":{"tf":1.0},"413":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"449":{"tf":1.0},"451":{"tf":1.0},"88":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":1,"docs":{"88":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}},"l":{"df":1,"docs":{"276":{"tf":1.0}}},"s":{"df":2,"docs":{"374":{"tf":1.0},"396":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"147":{"tf":1.0},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"287":{"tf":1.0},"354":{"tf":1.0},"361":{"tf":1.0}},"é":{"df":5,"docs":{"237":{"tf":1.0},"314":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"382":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":11,"docs":{"16":{"tf":1.7320508075688772},"180":{"tf":2.449489742783178},"348":{"tf":2.8284271247461903},"414":{"tf":2.449489742783178},"423":{"tf":2.449489742783178},"424":{"tf":2.6457513110645907},"425":{"tf":2.6457513110645907},"426":{"tf":1.7320508075688772},"427":{"tf":2.0},"428":{"tf":2.449489742783178},"429":{"tf":2.0}}}}},"df":2,"docs":{"176":{"tf":1.0},"2":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"418":{"tf":1.0}}}},"r":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"380":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"327":{"tf":1.0}}}}},"df":26,"docs":{"102":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"152":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"214":{"tf":1.0},"243":{"tf":1.4142135623730951},"250":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.0},"330":{"tf":1.7320508075688772},"346":{"tf":1.0},"359":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"403":{"tf":1.4142135623730951},"416":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"403":{"tf":1.4142135623730951}}}},"r":{"df":10,"docs":{"156":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"365":{"tf":1.0},"389":{"tf":1.0},"6":{"tf":1.4142135623730951},"72":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":2.23606797749979}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}},"df":6,"docs":{"166":{"tf":1.0},"291":{"tf":1.0},"316":{"tf":1.0},"375":{"tf":1.7320508075688772},"429":{"tf":1.0},"88":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"151":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"363":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"é":{"df":1,"docs":{"347":{"tf":1.0}}}}},"t":{"/":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":5,"docs":{"10":{"tf":1.0},"319":{"tf":1.0},"348":{"tf":1.0},"449":{"tf":2.23606797749979},"451":{"tf":1.0}},"h":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"=":{"$":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":9,"docs":{"166":{"tf":1.0},"177":{"tf":1.0},"323":{"tf":1.0},"376":{"tf":1.0},"383":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"21":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"440":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"396":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"df":3,"docs":{"101":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"259":{"tf":1.0},"351":{"tf":1.0},"364":{"tf":1.0},"390":{"tf":1.0}}}}}}},"y":{"df":1,"docs":{"214":{"tf":1.0}}}},"c":{"df":1,"docs":{"291":{"tf":1.0}}},"df":19,"docs":{"104":{"tf":1.7320508075688772},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.4142135623730951},"116":{"tf":1.4142135623730951},"122":{"tf":1.0},"163":{"tf":1.0},"166":{"tf":1.0},"178":{"tf":1.0},"183":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"320":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0}},"e":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"166":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0}}}}},"df":3,"docs":{"175":{"tf":1.4142135623730951},"183":{"tf":1.0},"348":{"tf":1.0}}},"df":1,"docs":{"147":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"160":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{},"l":{"/":{"5":{"\\\\":{".":{"8":{"0":{"3":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"148":{"tf":1.0},"347":{"tf":1.0},"417":{"tf":1.0},"419":{"tf":1.0}},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":19,"docs":{"1":{"tf":1.0},"166":{"tf":1.0},"179":{"tf":1.0},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"281":{"tf":1.0},"300":{"tf":1.0},"39":{"tf":1.0},"393":{"tf":1.0},"416":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"427":{"tf":1.0},"430":{"tf":1.0},"53":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"346":{"tf":1.0},"84":{"tf":1.0}}}}},"df":5,"docs":{"247":{"tf":1.0},"347":{"tf":1.0},"397":{"tf":1.0},"412":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}}}},"o":{"df":1,"docs":{"20":{"tf":1.0}},"n":{"df":3,"docs":{"37":{"tf":1.0},"449":{"tf":1.0},"8":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"190":{"tf":1.0}}}}}}},"df":1,"docs":{"1":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"445":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"df":10,"docs":{"16":{"tf":1.4142135623730951},"168":{"tf":1.0},"171":{"tf":1.0},"202":{"tf":1.0},"328":{"tf":1.0},"332":{"tf":1.4142135623730951},"347":{"tf":1.0},"352":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"288":{"tf":1.0}}}}}},"x":{"df":2,"docs":{"19":{"tf":1.0},"8":{"tf":1.0}}}}},"g":{"[":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"448":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"b":{"a":{"\\\\":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"197":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"w":{"d":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"102":{"tf":1.0},"109":{"tf":1.0}}},"df":0,"docs":{}}}},"df":7,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.0},"287":{"tf":1.0},"413":{"tf":1.0},"75":{"tf":1.0}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":13,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"107":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"114":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"128":{"tf":1.0},"132":{"tf":1.0},"370":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"189":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"443":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"175":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"322":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":18,"docs":{"145":{"tf":1.0},"161":{"tf":1.0},"164":{"tf":2.0},"166":{"tf":1.0},"169":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.4142135623730951},"175":{"tf":1.0},"183":{"tf":1.4142135623730951},"185":{"tf":1.0},"186":{"tf":1.0},"317":{"tf":2.0},"318":{"tf":1.4142135623730951},"319":{"tf":2.0},"375":{"tf":1.4142135623730951},"377":{"tf":1.0},"381":{"tf":1.0},"447":{"tf":2.23606797749979}},"e":{"\'":{")":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"318":{"tf":1.4142135623730951},"320":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"345":{"tf":1.0},"350":{"tf":1.0}}}},"è":{"c":{"df":2,"docs":{"287":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":2,"docs":{"231":{"tf":1.0},"249":{"tf":1.0}}}}},"k":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"394":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"288":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":76,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"170":{"tf":1.0},"176":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"390":{"tf":1.0},"392":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"290":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":2,"docs":{"189":{"tf":1.0},"190":{"tf":1.0}}},"z":{"df":1,"docs":{"296":{"tf":1.0}}}}},"df":0,"docs":{},"n":{"df":3,"docs":{"108":{"tf":1.0},"352":{"tf":1.0},"85":{"tf":1.0}},"s":{"/":{"0":{"0":{"1":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"231":{"tf":1.0},"412":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"325":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":14,"docs":{"279":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.4142135623730951},"318":{"tf":1.0},"320":{"tf":1.7320508075688772},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"325":{"tf":1.0},"327":{"tf":1.0},"334":{"tf":1.0},"396":{"tf":1.0},"403":{"tf":1.0},"443":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"u":{"df":14,"docs":{"104":{"tf":1.0},"107":{"tf":1.0},"122":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"181":{"tf":1.0},"19":{"tf":1.0},"293":{"tf":1.0},"319":{"tf":1.0},"347":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.7320508075688772},"357":{"tf":1.7320508075688772},"421":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"101":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"147":{"tf":1.0},"347":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"171":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}},"df":6,"docs":{"147":{"tf":1.0},"15":{"tf":1.0},"2":{"tf":1.0},"23":{"tf":1.0},"412":{"tf":1.0},"81":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"442":{"tf":1.0},"451":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"418":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"l":{"df":1,"docs":{"355":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":5,"docs":{"352":{"tf":1.0},"354":{"tf":2.0},"357":{"tf":1.4142135623730951},"414":{"tf":1.0},"443":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"(":{"df":2,"docs":{"104":{"tf":1.0},"208":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":31,"docs":{"104":{"tf":2.0},"105":{"tf":1.0},"106":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":2.0},"134":{"tf":1.4142135623730951},"153":{"tf":1.0},"160":{"tf":1.0},"189":{"tf":3.872983346207417},"208":{"tf":1.0},"210":{"tf":1.0},"23":{"tf":1.4142135623730951},"250":{"tf":1.0},"262":{"tf":1.0},"300":{"tf":1.0},"313":{"tf":1.0},"326":{"tf":1.4142135623730951},"372":{"tf":1.0},"375":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":2.23606797749979}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"134":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":20,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.4142135623730951},"106":{"tf":1.0},"108":{"tf":1.0},"162":{"tf":1.0},"180":{"tf":1.0},"191":{"tf":1.4142135623730951},"195":{"tf":1.7320508075688772},"20":{"tf":1.0},"206":{"tf":1.0},"280":{"tf":1.0},"325":{"tf":1.0},"348":{"tf":1.0},"375":{"tf":2.8284271247461903},"396":{"tf":1.0},"406":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"429":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"444":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"df":6,"docs":{"205":{"tf":1.0},"291":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"88":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{":":{"1":{"6":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{":":{"/":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"b":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"84":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":1,"docs":{"109":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"102":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"84":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"197":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":38,"docs":{"109":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"204":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.4142135623730951},"232":{"tf":1.0},"240":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"291":{"tf":2.0},"299":{"tf":1.0},"300":{"tf":1.7320508075688772},"316":{"tf":1.0},"323":{"tf":1.0},"348":{"tf":1.0},"355":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951},"84":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"96":{"tf":1.0}}}}}}}}}},"u":{"df":0,"docs":{},"r":{"df":155,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"11":{"tf":1.0},"125":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"16":{"tf":1.4142135623730951},"160":{"tf":1.0},"167":{"tf":1.4142135623730951},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"176":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.4142135623730951},"2":{"tf":2.449489742783178},"213":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"243":{"tf":1.7320508075688772},"244":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"25":{"tf":1.0},"251":{"tf":1.0},"255":{"tf":1.4142135623730951},"256":{"tf":1.0},"257":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"282":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.7320508075688772},"29":{"tf":1.0},"290":{"tf":2.0},"291":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.4142135623730951},"317":{"tf":1.0},"318":{"tf":1.4142135623730951},"322":{"tf":1.0},"323":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.4142135623730951},"35":{"tf":1.0},"351":{"tf":1.4142135623730951},"353":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":2.0},"359":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"397":{"tf":1.4142135623730951},"401":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"418":{"tf":1.0},"421":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"444":{"tf":1.4142135623730951},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":2.23606797749979},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.4142135623730951}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":8,"docs":{"10":{"tf":1.4142135623730951},"151":{"tf":1.0},"16":{"tf":1.0},"281":{"tf":1.0},"3":{"tf":1.0},"347":{"tf":1.0},"76":{"tf":1.4142135623730951},"82":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"176":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"5":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":6,"docs":{"164":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"287":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0}}},"z":{"df":2,"docs":{"284":{"tf":1.0},"294":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"167":{"tf":1.0},"171":{"tf":1.0},"6":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}}},"df":11,"docs":{"174":{"tf":1.7320508075688772},"186":{"tf":1.0},"272":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.7320508075688772},"413":{"tf":1.0},"436":{"tf":1.0},"447":{"tf":1.7320508075688772}}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":5,"docs":{"135":{"tf":1.0},"286":{"tf":1.0},"3":{"tf":1.0},"306":{"tf":1.0},"31":{"tf":1.0}}}}}}},"df":24,"docs":{"149":{"tf":1.0},"15":{"tf":1.0},"151":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"174":{"tf":1.4142135623730951},"277":{"tf":1.0},"278":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"301":{"tf":1.0},"308":{"tf":1.0},"313":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"403":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":1,"docs":{"287":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":25,"docs":{"13":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"24":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"277":{"tf":1.4142135623730951},"284":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"92":{"tf":1.0}}}},"s":{"df":1,"docs":{"147":{"tf":1.0}}},"è":{"df":0,"docs":{},"r":{"df":10,"docs":{"16":{"tf":1.0},"278":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"301":{"tf":1.4142135623730951},"302":{"tf":1.0},"313":{"tf":1.0},"5":{"tf":1.0},"85":{"tf":1.0},"98":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"293":{"tf":1.0}},"r":{"df":1,"docs":{"76":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"16":{"tf":1.0},"287":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"357":{"tf":1.0}}}}}}}},"i":{"df":3,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"241":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"248":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"422":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"449":{"tf":1.0},"82":{"tf":1.0}}}}},"df":11,"docs":{"148":{"tf":1.0},"189":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"249":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.0},"375":{"tf":1.0},"415":{"tf":1.0},"420":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"232":{"tf":1.0}}}}},"df":1,"docs":{"317":{"tf":1.0}},"é":{"df":1,"docs":{"357":{"tf":1.0}}}}}}},"v":{"df":4,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.0}},"é":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"189":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":4,"docs":{"153":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"104":{"tf":1.0},"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":5,"docs":{"183":{"tf":1.0},"184":{"tf":1.0},"3":{"tf":1.0},"357":{"tf":1.0},"88":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":6,"docs":{"134":{"tf":1.0},"148":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"184":{"tf":1.0},"96":{"tf":1.0}},"u":{"df":4,"docs":{"287":{"tf":1.0},"370":{"tf":1.0},"413":{"tf":1.0},"420":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"24":{"tf":1.0},"301":{"tf":1.0},"348":{"tf":1.0},"394":{"tf":1.0},"89":{"tf":1.0}}}}},"df":0,"docs":{}},"é":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}}},"d":{"df":2,"docs":{"147":{"tf":1.7320508075688772},"167":{"tf":1.4142135623730951}},"u":{"c":{"df":0,"docs":{},"t":{"df":11,"docs":{"2":{"tf":1.0},"252":{"tf":1.0},"276":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.4142135623730951},"94":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"9":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"176":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.4142135623730951},"2":{"tf":1.0},"20":{"tf":1.0},"293":{"tf":1.0},"375":{"tf":1.4142135623730951},"380":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":7,"docs":{"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"179":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}}}}},"df":11,"docs":{"158":{"tf":1.0},"16":{"tf":1.0},"166":{"tf":1.0},"181":{"tf":1.0},"276":{"tf":1.0},"289":{"tf":1.0},"294":{"tf":2.449489742783178},"299":{"tf":1.0},"388":{"tf":1.0},"447":{"tf":2.0},"8":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"86":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"163":{"tf":1.0},"166":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"214":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"357":{"tf":1.0}}},"r":{"df":4,"docs":{"357":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0}},"i":{"df":0,"docs":{},"é":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"175":{"tf":1.0},"21":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.0},"202":{"tf":1.7320508075688772},"330":{"tf":1.0},"331":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"413":{"tf":1.0},"419":{"tf":1.0}}}}},"df":3,"docs":{"133":{"tf":1.4142135623730951},"202":{"tf":1.7320508075688772},"288":{"tf":1.0}}},"è":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.0}}}},"é":{"df":0,"docs":{},"g":{"df":1,"docs":{"393":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"187":{"tf":1.0}}}},"é":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"243":{"tf":1.0},"250":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":3,"docs":{"145":{"tf":1.0},"147":{"tf":1.0},"153":{"tf":1.0}}}}}}}}},"x":{"df":0,"docs":{},"i":{"df":9,"docs":{"121":{"tf":1.0},"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":1.7320508075688772},"72":{"tf":1.0},"89":{"tf":1.0}}},"y":{"/":{"c":{"a":{"d":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"445":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"445":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"445":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"_":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"x":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"202":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"121":{"tf":1.0},"202":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"202":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"é":{"a":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"15":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"231":{"tf":1.0},"245":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":1.0},"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"394":{"tf":1.0}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"21":{"tf":1.0},"318":{"tf":1.0},"377":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"146":{"tf":1.0}},"r":{"df":3,"docs":{"103":{"tf":1.0},"111":{"tf":1.0},"287":{"tf":1.0}}},"z":{"df":1,"docs":{"291":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"2":{"tf":1.7320508075688772},"71":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"330":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"86":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":10,"docs":{"249":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"300":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"u":{"df":1,"docs":{"374":{"tf":1.0}}}}},"ê":{"df":0,"docs":{},"t":{"df":3,"docs":{"128":{"tf":1.0},"160":{"tf":1.0},"2":{"tf":1.0}},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"72":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"447":{"tf":1.0}}}}}},"s":{"df":3,"docs":{"109":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{">":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":2,"docs":{"21":{"tf":1.0},"86":{"tf":1.0}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"l":{"df":5,"docs":{"185":{"tf":1.4142135623730951},"286":{"tf":1.0},"288":{"tf":1.4142135623730951},"291":{"tf":1.7320508075688772},"323":{"tf":1.0}}}}},"t":{"df":1,"docs":{"298":{"tf":1.0}}},"u":{"b":{"df":3,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"c":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":7,"docs":{"134":{"tf":2.0},"19":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"276":{"tf":1.0},"331":{"tf":1.4142135623730951},"427":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":5,"docs":{"166":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"424":{"tf":1.0}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":20,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"109":{"tf":1.0},"133":{"tf":1.0},"14":{"tf":1.0},"151":{"tf":1.0},"16":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"243":{"tf":1.0},"276":{"tf":1.0},"294":{"tf":1.0},"374":{"tf":1.0},"83":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":16,"docs":{"127":{"tf":1.0},"133":{"tf":1.0},"164":{"tf":1.0},"17":{"tf":1.0},"176":{"tf":1.0},"252":{"tf":1.0},"254":{"tf":1.0},"288":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":1.0},"327":{"tf":1.0},"347":{"tf":1.0},"351":{"tf":1.0},"364":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"l":{"df":12,"docs":{"10":{"tf":1.0},"132":{"tf":1.0},"167":{"tf":1.0},"2":{"tf":1.0},"27":{"tf":1.0},"301":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"396":{"tf":1.0}}}},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"2":{"tf":1.0},"287":{"tf":1.4142135623730951}}}}}},"[":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":25,"docs":{"123":{"tf":1.0},"133":{"tf":1.4142135623730951},"148":{"tf":1.0},"16":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"173":{"tf":1.4142135623730951},"175":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.7320508075688772},"184":{"tf":1.0},"186":{"tf":1.4142135623730951},"285":{"tf":1.0},"294":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.7320508075688772},"321":{"tf":1.4142135623730951},"355":{"tf":1.0},"380":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"425":{"tf":2.0},"96":{"tf":1.0}}}},"t":{"df":2,"docs":{"169":{"tf":1.0},"180":{"tf":1.0}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"3":{"df":1,"docs":{"115":{"tf":1.0}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":7,"docs":{"161":{"tf":1.0},"174":{"tf":1.0},"370":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"447":{"tf":1.0},"449":{"tf":1.0}}}}}}},"é":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":78,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"286":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"q":{"a":{"df":6,"docs":{"277":{"tf":1.0},"279":{"tf":1.4142135623730951},"280":{"tf":1.4142135623730951},"365":{"tf":1.0},"388":{"tf":1.0},"421":{"tf":1.4142135623730951}}},"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"u":{"a":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"444":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"444":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"388":{"tf":1.0}},"é":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"168":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"n":{"d":{"df":11,"docs":{"10":{"tf":1.0},"128":{"tf":1.0},"147":{"tf":1.0},"173":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.0},"3":{"tf":2.23606797749979},"355":{"tf":1.0},"396":{"tf":1.0},"76":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":3,"docs":{"2":{"tf":1.0},"3":{"tf":1.4142135623730951},"346":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":37,"docs":{"1":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"133":{"tf":2.0},"147":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.0},"171":{"tf":1.0},"18":{"tf":1.0},"188":{"tf":1.0},"20":{"tf":1.0},"214":{"tf":1.0},"244":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"289":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.4142135623730951},"319":{"tf":1.0},"331":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0},"4":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"5":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}},"l":{"(":{"df":1,"docs":{"104":{"tf":1.0}}},"df":5,"docs":{"250":{"tf":1.0},"279":{"tf":1.0},"442":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"’":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"402":{"tf":1.0}}}},"u":{"df":1,"docs":{"166":{"tf":1.0}}}},"i":{"df":30,"docs":{"1":{"tf":1.0},"133":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"16":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"178":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":2.0},"214":{"tf":1.0},"22":{"tf":1.4142135623730951},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"3":{"tf":1.0},"317":{"tf":1.0},"327":{"tf":1.0},"347":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"416":{"tf":1.0},"420":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"p":{"df":8,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"179":{"tf":1.0},"27":{"tf":1.0},"39":{"tf":1.0},"416":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"161":{"tf":1.0},"18":{"tf":1.0},"286":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"288":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"276":{"tf":1.0}},"n":{"df":1,"docs":{"446":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"’":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"253":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{},"x":{"df":1,"docs":{"86":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"242":{"tf":1.0},"244":{"tf":1.0},"354":{"tf":1.0}}}}}}},"r":{"2":{"3":{"df":1,"docs":{"383":{"tf":1.0}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"158":{"tf":1.4142135623730951},"166":{"tf":1.0},"174":{"tf":1.0},"296":{"tf":1.4142135623730951},"379":{"tf":1.4142135623730951}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{">":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"152":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"290":{"tf":1.0}}}}}}},"n":{"d":{"df":3,"docs":{"102":{"tf":1.7320508075688772},"290":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"127":{"tf":1.0},"293":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.0},"357":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"380":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"184":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"=":{"1":{"0":{"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"3":{"0":{"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":1,"docs":{"236":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}},"df":9,"docs":{"200":{"tf":1.0},"201":{"tf":1.0},"215":{"tf":1.0},"326":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":1.0},"74":{"tf":1.0}}}}},"b":{"a":{"c":{"df":4,"docs":{"281":{"tf":1.0},"3":{"tf":1.0},"416":{"tf":1.0},"430":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"292":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.4142135623730951}},"e":{"a":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}}}},"i":{"df":2,"docs":{"85":{"tf":1.0},"87":{"tf":1.0}}},"m":{"df":3,"docs":{"21":{"tf":1.0},"373":{"tf":1.4142135623730951},"428":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":6,"docs":{"123":{"tf":1.0},"161":{"tf":1.0},"21":{"tf":1.0},"294":{"tf":2.0},"373":{"tf":1.4142135623730951},"428":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"292":{"tf":1.0},"403":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":10,"docs":{"180":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.4142135623730951},"289":{"tf":1.0},"356":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"380":{"tf":1.0},"406":{"tf":1.0},"425":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":4,"docs":{"279":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"213":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"244":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"288":{"tf":1.0},"88":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"124":{"tf":1.0},"181":{"tf":1.0},"390":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"d":{"df":4,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"174":{"tf":1.0},"178":{"tf":1.0},"286":{"tf":1.0},"291":{"tf":1.0}},"é":{"df":4,"docs":{"171":{"tf":1.0},"211":{"tf":1.0},"316":{"tf":1.0},"357":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.0}}}},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"327":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"6":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"df":4,"docs":{"443":{"tf":1.0},"444":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":9,"docs":{"108":{"tf":1.0},"117":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"396":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":4,"docs":{"133":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"330":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"242":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.0},"253":{"tf":1.0},"347":{"tf":1.4142135623730951}}}},"df":7,"docs":{"172":{"tf":1.0},"180":{"tf":1.0},"186":{"tf":1.4142135623730951},"237":{"tf":1.0},"252":{"tf":1.4142135623730951},"254":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"131":{"tf":1.0}}}}}}}},"df":2,"docs":{"316":{"tf":1.0},"402":{"tf":1.0}},"f":{"=":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":4,"docs":{"180":{"tf":1.0},"424":{"tf":1.4142135623730951},"425":{"tf":2.0},"428":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"241":{"tf":1.0},"373":{"tf":1.0}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"238":{"tf":1.0}},"s":{"=":{"7":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"375":{"tf":1.4142135623730951},"394":{"tf":1.0}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}}}}},"s":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"23":{"tf":1.0}},"s":{"df":3,"docs":{"133":{"tf":1.0},"23":{"tf":1.0},"88":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"193":{"tf":1.4142135623730951},"205":{"tf":2.23606797749979},"214":{"tf":1.0}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"325":{"tf":1.0},"327":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0},"86":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"(":{"d":{"b":{"df":1,"docs":{"423":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"146":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"165":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"183":{"tf":1.0},"184":{"tf":1.0},"19":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"292":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"152":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"82":{"tf":1.0},"84":{"tf":1.0}}}}}}}}},"y":{"df":3,"docs":{"189":{"tf":1.0},"213":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"113":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"296":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":2,"docs":{"21":{"tf":1.0},"6":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"277":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951}}}}}},"o":{"a":{"d":{"df":6,"docs":{"105":{"tf":1.4142135623730951},"116":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"199":{"tf":1.0},"203":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"u":{"df":3,"docs":{"234":{"tf":1.0},"244":{"tf":1.0},"254":{"tf":1.0}}},"â":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"326":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"330":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":1,"docs":{"330":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"238":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":12,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0},"289":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"210":{"tf":1.0}}},"df":0,"docs":{}}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"202":{"tf":1.7320508075688772},"214":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":2,"docs":{"109":{"tf":1.0},"419":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"83":{"tf":1.4142135623730951},"88":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":2,"docs":{"362":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":2,"docs":{"21":{"tf":1.0},"299":{"tf":1.0}},"r":{"df":1,"docs":{"287":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}}}},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"375":{"tf":1.0},"428":{"tf":1.0}}},"z":{"df":1,"docs":{"86":{"tf":1.0}}}},"r":{"df":1,"docs":{"89":{"tf":1.0}}},"u":{"df":2,"docs":{"333":{"tf":1.0},"418":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"118":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"118":{"tf":1.0},"124":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"290":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"424":{"tf":1.7320508075688772},"425":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"449":{"tf":1.0}}}}},"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"318":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"21":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"=":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"428":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.4142135623730951},"428":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{")":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"428":{"tf":1.0}}}}}}}}},"df":20,"docs":{"123":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"287":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.4142135623730951},"349":{"tf":1.0},"356":{"tf":1.4142135623730951},"359":{"tf":1.0},"372":{"tf":1.0},"376":{"tf":1.0},"379":{"tf":1.7320508075688772},"380":{"tf":1.0},"382":{"tf":1.7320508075688772},"413":{"tf":1.4142135623730951},"419":{"tf":1.4142135623730951},"424":{"tf":1.4142135623730951},"425":{"tf":1.4142135623730951},"428":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"449":{"tf":1.0}}}},"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"o":{"df":0,"docs":{},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}},"}":{"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"[":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"p":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"360":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"16":{"tf":1.0},"294":{"tf":1.4142135623730951},"346":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"372":{"tf":1.0},"376":{"tf":1.4142135623730951},"423":{"tf":1.4142135623730951},"425":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"y":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"325":{"tf":1.0},"331":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"423":{"tf":1.0},"428":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"427":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"423":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"348":{"tf":1.4142135623730951},"372":{"tf":1.0},"383":{"tf":1.0},"423":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":1,"docs":{"349":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"423":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{".":{".":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"396":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}},"v":{"c":{"df":1,"docs":{"423":{"tf":3.605551275463989}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"347":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"95":{"tf":1.0}},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"q":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"198":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"/":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}},"df":5,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"200":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":11,"docs":{"10":{"tf":1.0},"198":{"tf":1.0},"2":{"tf":1.0},"27":{"tf":1.0},"301":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"i":{"df":16,"docs":{"149":{"tf":1.0},"15":{"tf":1.4142135623730951},"151":{"tf":1.0},"171":{"tf":1.0},"173":{"tf":1.0},"200":{"tf":1.0},"232":{"tf":1.0},"250":{"tf":1.4142135623730951},"286":{"tf":1.0},"288":{"tf":1.0},"313":{"tf":1.0},"323":{"tf":1.0},"356":{"tf":1.0},"395":{"tf":1.0},"81":{"tf":1.4142135623730951},"99":{"tf":1.0}},"r":{"df":1,"docs":{"166":{"tf":1.0}},"e":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"ê":{"df":0,"docs":{},"t":{"df":7,"docs":{"196":{"tf":1.0},"240":{"tf":1.0},"281":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.4142135623730951},"354":{"tf":1.0},"422":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"316":{"tf":1.0},"449":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":2,"docs":{"356":{"tf":1.0},"428":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"373":{"tf":1.0}}},"p":{"df":0,"docs":{},"o":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":4,"docs":{"346":{"tf":1.0},"349":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":2.0}},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"376":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"359":{"tf":1.0},"399":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"2":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"371":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"316":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":3,"docs":{"326":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0}}},"df":0,"docs":{}}}},"v":{"c":{"df":1,"docs":{"423":{"tf":2.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":16,"docs":{"107":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"127":{"tf":1.0},"133":{"tf":1.0},"172":{"tf":1.0},"204":{"tf":1.0},"213":{"tf":1.0},"232":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.4142135623730951},"252":{"tf":1.0},"84":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"137":{"tf":1.0},"448":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"df":15,"docs":{"108":{"tf":1.0},"155":{"tf":1.0},"166":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.4142135623730951},"290":{"tf":1.0},"3":{"tf":1.0},"316":{"tf":1.0},"375":{"tf":1.4142135623730951},"404":{"tf":1.0},"449":{"tf":1.0},"55":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"212":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"134":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"351":{"tf":1.0},"353":{"tf":1.0}},"n":{"df":6,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"294":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"208":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":2,"docs":{"161":{"tf":1.0},"347":{"tf":1.0}}}}},"y":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"397":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"351":{"tf":1.0},"353":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"187":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":2.23606797749979},"72":{"tf":1.0},"89":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"277":{"tf":1.0},"279":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}},"ç":{"df":0,"docs":{},"u":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":1,"docs":{"104":{"tf":1.0}},"n":{"df":4,"docs":{"174":{"tf":1.0},"317":{"tf":1.0},"355":{"tf":1.0},"83":{"tf":1.0}}}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"m":{"df":3,"docs":{"116":{"tf":1.0},"163":{"tf":1.0},"205":{"tf":1.0}}},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"83":{"tf":1.0},"86":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":6,"docs":{"291":{"tf":1.0},"359":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951},"416":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"294":{"tf":1.0},"84":{"tf":2.8284271247461903}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"444":{"tf":1.0}}}}}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"167":{"tf":1.0},"375":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"163":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"347":{"tf":1.0}}}},"df":8,"docs":{"279":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"335":{"tf":1.0},"369":{"tf":1.0},"375":{"tf":2.23606797749979},"414":{"tf":1.0},"421":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"316":{"tf":1.0}}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"364":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0}}}}},"é":{"df":1,"docs":{"95":{"tf":1.0}}}},"v":{"df":0,"docs":{},"r":{"df":1,"docs":{"347":{"tf":1.0}}}}},"w":{"df":1,"docs":{"291":{"tf":1.0}}}},"r":{"]":{"df":0,"docs":{},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{".":{"*":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"[":{"_":{"df":1,"docs":{"193":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"a":{"df":2,"docs":{"19":{"tf":1.0},"383":{"tf":1.0}}},"df":1,"docs":{"427":{"tf":3.1622776601683795}},"y":{"df":0,"docs":{},"n":{"c":{"df":13,"docs":{"100":{"tf":1.4142135623730951},"113":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"150":{"tf":1.0},"163":{"tf":1.0},"165":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"183":{"tf":1.0},"296":{"tf":1.0},"448":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"447":{"tf":1.0}}}},"n":{"[":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{".":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":18,"docs":{"118":{"tf":1.0},"164":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":2.0},"252":{"tf":1.0},"287":{"tf":1.7320508075688772},"291":{"tf":1.0},"293":{"tf":1.7320508075688772},"299":{"tf":1.0},"313":{"tf":2.0},"316":{"tf":1.0},"320":{"tf":1.0},"324":{"tf":2.23606797749979},"327":{"tf":1.4142135623730951},"334":{"tf":1.0},"403":{"tf":1.0},"85":{"tf":1.4142135623730951}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"153":{"tf":1.0},"155":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"444":{"tf":1.0}}}}}},"@":{"<":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"160":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":23,"docs":{"145":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":2.0},"148":{"tf":1.7320508075688772},"151":{"tf":1.0},"153":{"tf":1.7320508075688772},"154":{"tf":2.0},"155":{"tf":1.0},"156":{"tf":1.0},"160":{"tf":1.4142135623730951},"161":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":2.449489742783178},"167":{"tf":2.23606797749979},"172":{"tf":1.0},"187":{"tf":1.0},"210":{"tf":1.4142135623730951},"296":{"tf":1.0},"420":{"tf":1.4142135623730951},"443":{"tf":1.0},"444":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"153":{"tf":1.4142135623730951},"287":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{")":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"193":{"tf":1.0},"374":{"tf":1.0},"96":{"tf":1.0}}}},"t":{".":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"=":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"255":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"102":{"tf":1.0},"83":{"tf":1.0}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"c":{"df":3,"docs":{"286":{"tf":1.0},"288":{"tf":1.7320508075688772},"300":{"tf":1.0}}},"df":22,"docs":{"1":{"tf":1.0},"148":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.4142135623730951},"2":{"tf":1.0},"234":{"tf":1.0},"286":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"296":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.0},"314":{"tf":1.4142135623730951},"316":{"tf":1.0},"320":{"tf":1.0},"372":{"tf":1.0},"392":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"447":{"tf":1.0},"449":{"tf":1.0},"82":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"100":{"tf":1.0},"300":{"tf":1.4142135623730951}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"237":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"414":{"tf":1.4142135623730951}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"414":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":14,"docs":{"276":{"tf":1.0},"279":{"tf":1.4142135623730951},"280":{"tf":1.0},"289":{"tf":1.0},"358":{"tf":1.4142135623730951},"363":{"tf":1.4142135623730951},"372":{"tf":1.0},"375":{"tf":1.0},"408":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":4,"docs":{"361":{"tf":1.0},"364":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"416":{"tf":1.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"w":{"[":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"292":{"tf":1.0},"370":{"tf":2.0},"413":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":80,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"280":{"tf":1.4142135623730951},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"361":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"388":{"tf":1.7320508075688772},"391":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"42":{"tf":1.0},"421":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}},"é":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"134":{"tf":1.0},"22":{"tf":1.0},"299":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":2,"docs":{"186":{"tf":1.0},"208":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"151":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"214":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":144,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"282":{"tf":1.0},"283":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"193":{"tf":1.0},"205":{"tf":1.0},"207":{"tf":1.0},"23":{"tf":1.0},"357":{"tf":1.0},"377":{"tf":1.4142135623730951},"84":{"tf":1.0}},"l":{"df":4,"docs":{"109":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.0},"95":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}},"f":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":13,"docs":{"227":{"tf":1.0},"235":{"tf":1.0},"280":{"tf":1.4142135623730951},"3":{"tf":1.0},"310":{"tf":1.0},"345":{"tf":1.0},"367":{"tf":1.0},"369":{"tf":1.0},"421":{"tf":1.0},"51":{"tf":1.0},"75":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951},"95":{"tf":1.0}}},"df":0,"docs":{}},"z":{"df":1,"docs":{"442":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":16,"docs":{"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":1.4142135623730951},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.7320508075688772},"250":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.7320508075688772},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"215":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"184":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}},"é":{"df":1,"docs":{"417":{"tf":1.0}}}}}}}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"146":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0},"293":{"tf":1.0},"314":{"tf":1.0},"322":{"tf":1.0},"360":{"tf":1.0},"376":{"tf":1.4142135623730951},"429":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"133":{"tf":1.0},"15":{"tf":1.0},"81":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"u":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}}},"è":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"8":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"192":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":14,"docs":{"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"352":{"tf":1.0},"412":{"tf":1.0},"71":{"tf":1.0},"82":{"tf":1.4142135623730951},"87":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"é":{"df":1,"docs":{"383":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"181":{"tf":1.0}},"t":{"df":4,"docs":{"356":{"tf":1.0},"380":{"tf":1.0},"422":{"tf":1.0},"427":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"u":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"181":{"tf":1.0},"244":{"tf":1.0},"285":{"tf":1.0}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":3,"docs":{"161":{"tf":1.0},"299":{"tf":1.0},"425":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":5,"docs":{"179":{"tf":1.0},"199":{"tf":1.0},"328":{"tf":1.0},"363":{"tf":1.0},"399":{"tf":1.0}}}}}}}},"v":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"319":{"tf":1.0},"397":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}}}},"è":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}}},"é":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}}},"ô":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":17,"docs":{"1":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.0},"150":{"tf":1.0},"171":{"tf":1.0},"235":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.4142135623730951},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"381":{"tf":1.0},"390":{"tf":1.0},"53":{"tf":1.0},"86":{"tf":1.0},"9":{"tf":1.0}}}}}},"s":{"\'":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"/":{"^":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"107":{"tf":1.0},"122":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"/":{"$":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"_":{"3":{"2":{"/":{"$":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"i":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"116":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"[":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"a":{"df":4,"docs":{"382":{"tf":1.0},"394":{"tf":1.0},"82":{"tf":1.4142135623730951},"86":{"tf":1.0}},"i":{"df":1,"docs":{"5":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.0}}}},"n":{"df":35,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"129":{"tf":1.0},"14":{"tf":1.0},"146":{"tf":1.0},"150":{"tf":1.0},"16":{"tf":1.4142135623730951},"163":{"tf":1.0},"166":{"tf":1.0},"168":{"tf":1.0},"177":{"tf":1.0},"199":{"tf":1.0},"237":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"288":{"tf":1.0},"316":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.4142135623730951},"347":{"tf":1.0},"350":{"tf":1.0},"352":{"tf":1.0},"358":{"tf":1.0},"364":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0},"417":{"tf":1.0},"444":{"tf":1.0},"446":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0},"89":{"tf":1.0}},"t":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"388":{"tf":1.0}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"183":{"tf":1.0},"354":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"f":{"df":2,"docs":{"381":{"tf":1.0},"97":{"tf":1.0}}},"r":{"a":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"285":{"tf":1.0},"80":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":9,"docs":{"137":{"tf":1.0},"274":{"tf":1.0},"446":{"tf":1.0},"448":{"tf":1.7320508075688772},"71":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"19":{"tf":1.7320508075688772},"253":{"tf":1.0}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{".":{"c":{"d":{"df":0,"docs":{},"x":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"y":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"x":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"180":{"tf":1.0},"185":{"tf":1.0}}}}}}}}},"df":16,"docs":{"1":{"tf":1.0},"169":{"tf":2.449489742783178},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"180":{"tf":3.7416573867739413},"181":{"tf":1.0},"184":{"tf":1.4142135623730951},"185":{"tf":1.0},"186":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.4142135623730951},"447":{"tf":1.0},"49":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"169":{"tf":1.0},"180":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"c":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":72,"docs":{"11":{"tf":1.4142135623730951},"135":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"139":{"tf":1.4142135623730951},"141":{"tf":1.4142135623730951},"143":{"tf":1.4142135623730951},"215":{"tf":1.4142135623730951},"217":{"tf":1.4142135623730951},"219":{"tf":1.4142135623730951},"221":{"tf":1.4142135623730951},"223":{"tf":1.4142135623730951},"225":{"tf":1.4142135623730951},"227":{"tf":1.4142135623730951},"229":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"260":{"tf":1.4142135623730951},"262":{"tf":1.4142135623730951},"264":{"tf":1.4142135623730951},"266":{"tf":1.4142135623730951},"268":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"272":{"tf":1.4142135623730951},"274":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"302":{"tf":1.4142135623730951},"304":{"tf":1.4142135623730951},"306":{"tf":1.4142135623730951},"308":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"335":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"339":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"343":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"365":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"384":{"tf":1.4142135623730951},"386":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"404":{"tf":1.4142135623730951},"406":{"tf":1.4142135623730951},"408":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"432":{"tf":1.4142135623730951},"434":{"tf":1.4142135623730951},"436":{"tf":1.4142135623730951},"438":{"tf":1.4142135623730951},"440":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"47":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"90":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"n":{"df":4,"docs":{"169":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"380":{"tf":1.0}},"n":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.4142135623730951},"208":{"tf":1.0}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}}},"é":{"df":0,"docs":{},"m":{"a":{"df":11,"docs":{"241":{"tf":1.0},"260":{"tf":1.0},"280":{"tf":1.4142135623730951},"3":{"tf":1.0},"345":{"tf":1.0},"348":{"tf":1.0},"380":{"tf":1.0},"386":{"tf":1.0},"57":{"tf":1.0},"75":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"383":{"tf":1.0}}}}},"p":{"df":2,"docs":{"109":{"tf":1.0},"116":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"420":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":18,"docs":{"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"171":{"tf":1.0},"2":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.0},"325":{"tf":1.0},"4":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"e":{"2":{"df":2,"docs":{"313":{"tf":1.0},"327":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"é":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"147":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":11,"docs":{"16":{"tf":1.4142135623730951},"177":{"tf":1.0},"23":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0},"82":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"353":{"tf":1.0},"372":{"tf":1.4142135623730951}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"199":{"tf":2.0}}}},"df":0,"docs":{}}},"c":{"df":1,"docs":{"394":{"tf":2.449489742783178}},"o":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"349":{"tf":1.0},"85":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"4":{"a":{"7":{"df":0,"docs":{},"f":{"2":{"c":{"9":{"df":0,"docs":{},"e":{"1":{"b":{"8":{"d":{"3":{"df":0,"docs":{},"f":{"6":{"a":{"0":{"df":0,"docs":{},"e":{"5":{"c":{"2":{"b":{"9":{"d":{"7":{"df":0,"docs":{},"f":{"4":{"a":{"1":{"df":0,"docs":{},"e":{"8":{"c":{"3":{"b":{"6":{"d":{"9":{"df":0,"docs":{},"f":{"2":{"a":{"5":{"df":0,"docs":{},"e":{"8":{"c":{"1":{"b":{"4":{"d":{"7":{"df":0,"docs":{},"f":{"0":{"a":{"3":{"df":0,"docs":{},"e":{"6":{"c":{"9":{"b":{"2":{"d":{"5":{"df":0,"docs":{},"f":{"8":{"a":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"_":{"3":{"2":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"83":{"tf":1.0},"88":{"tf":1.4142135623730951}}}}}},"df":8,"docs":{"167":{"tf":1.0},"243":{"tf":1.0},"250":{"tf":1.0},"318":{"tf":1.0},"382":{"tf":1.4142135623730951},"390":{"tf":1.0},"393":{"tf":2.23606797749979},"403":{"tf":1.0}}}},"è":{"df":0,"docs":{},"t":{"df":2,"docs":{"290":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"150":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":1.0},"20":{"tf":1.0},"284":{"tf":1.0},"451":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"177":{"tf":1.0},"181":{"tf":1.0},"186":{"tf":1.0},"418":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"[":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"169":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"d":{"df":6,"docs":{"107":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}},"df":16,"docs":{"104":{"tf":1.0},"16":{"tf":1.7320508075688772},"161":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.0},"177":{"tf":1.0},"253":{"tf":1.0},"33":{"tf":1.0},"358":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0},"412":{"tf":1.0},"451":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0}},"e":{"d":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":4,"docs":{"249":{"tf":1.0},"314":{"tf":1.4142135623730951},"325":{"tf":1.0},"443":{"tf":1.0}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":12,"docs":{"185":{"tf":1.4142135623730951},"255":{"tf":1.0},"291":{"tf":1.0},"348":{"tf":2.6457513110645907},"349":{"tf":2.449489742783178},"351":{"tf":1.7320508075688772},"355":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.7320508075688772},"428":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"f":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"d":{"b":{"df":1,"docs":{"242":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"71":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":79,"docs":{"12":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"2":{"tf":1.0},"21":{"tf":1.0},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"279":{"tf":1.0},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"380":{"tf":1.0},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"74":{"tf":1.0},"78":{"tf":1.4142135623730951},"8":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"208":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"d":{"df":3,"docs":{"133":{"tf":1.0},"160":{"tf":1.0},"316":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"390":{"tf":1.0},"393":{"tf":1.0}}}},"df":0,"docs":{}}}},"q":{"df":1,"docs":{"206":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":11,"docs":{"16":{"tf":1.0},"180":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"r":{"a":{"df":2,"docs":{"214":{"tf":1.0},"258":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}},"t":{"df":1,"docs":{"346":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"373":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"325":{"tf":1.0},"327":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"4":{"0":{"0":{"0":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"238":{"tf":1.0},"96":{"tf":1.0}}}}}}},"df":22,"docs":{"101":{"tf":1.0},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"109":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"148":{"tf":1.0},"202":{"tf":1.0},"291":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"300":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"414":{"tf":1.0},"85":{"tf":1.4142135623730951},"95":{"tf":1.0},"97":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":26,"docs":{"1":{"tf":1.0},"102":{"tf":1.4142135623730951},"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"16":{"tf":1.0},"160":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"172":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"211":{"tf":1.0},"287":{"tf":1.7320508075688772},"296":{"tf":1.4142135623730951},"316":{"tf":1.7320508075688772},"347":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"374":{"tf":1.0},"393":{"tf":1.0},"414":{"tf":1.4142135623730951},"418":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":34,"docs":{"104":{"tf":1.0},"124":{"tf":1.0},"205":{"tf":1.0},"249":{"tf":1.0},"252":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"262":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"337":{"tf":1.0},"359":{"tf":1.4142135623730951},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.7320508075688772},"372":{"tf":1.4142135623730951},"375":{"tf":1.0},"384":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.4142135623730951},"402":{"tf":1.0},"413":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.0},"75":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"87":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"96":{"tf":1.4142135623730951}},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":3,"docs":{"292":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":18,"docs":{"103":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"287":{"tf":1.0},"327":{"tf":1.0},"363":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.4142135623730951},"399":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"82":{"tf":1.4142135623730951},"98":{"tf":1.0}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"413":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"t":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":15,"docs":{"123":{"tf":1.0},"163":{"tf":1.4142135623730951},"17":{"tf":1.0},"173":{"tf":1.0},"186":{"tf":1.0},"241":{"tf":1.0},"250":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.0},"313":{"tf":1.0},"319":{"tf":1.7320508075688772},"375":{"tf":1.0},"417":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"426":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"314":{"tf":1.0},"325":{"tf":1.0}}}},"df":12,"docs":{"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"160":{"tf":1.0},"162":{"tf":1.0},"166":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":15,"docs":{"102":{"tf":1.0},"112":{"tf":1.0},"147":{"tf":1.0},"165":{"tf":1.0},"167":{"tf":1.0},"19":{"tf":1.0},"234":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"287":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.0},"352":{"tf":1.0},"420":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"281":{"tf":1.0},"352":{"tf":1.0},"357":{"tf":1.0},"5":{"tf":1.0},"76":{"tf":1.0}}}}}}}}}},"f":{"df":1,"docs":{"116":{"tf":1.0}}},"h":{"a":{"2":{"5":{"6":{"(":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},":":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":2,"docs":{"293":{"tf":1.0},"85":{"tf":1.0}},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":3,"docs":{"177":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"180":{"tf":1.0},"184":{"tf":1.4142135623730951},"373":{"tf":1.0},"380":{"tf":1.0},"393":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.4142135623730951}}}}},"df":4,"docs":{"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"177":{"tf":1.0},"288":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":8,"docs":{"20":{"tf":1.0},"288":{"tf":1.0},"317":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"374":{"tf":1.0},"449":{"tf":1.0},"84":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"133":{"tf":1.0}}}},"w":{"df":1,"docs":{"100":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"r":{"_":{"df":1,"docs":{"375":{"tf":1.0}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}}},"df":3,"docs":{"333":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"444":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"375":{"tf":1.0}}}},"df":125,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"119":{"tf":1.0},"12":{"tf":1.0},"134":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"171":{"tf":1.4142135623730951},"172":{"tf":1.0},"18":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":2.0},"19":{"tf":1.7320508075688772},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.7320508075688772},"204":{"tf":1.0},"208":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.4142135623730951},"214":{"tf":1.4142135623730951},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"23":{"tf":1.0},"230":{"tf":1.0},"244":{"tf":1.7320508075688772},"248":{"tf":1.0},"249":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"277":{"tf":1.4142135623730951},"28":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"288":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"293":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.4142135623730951},"36":{"tf":1.0},"363":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.0},"376":{"tf":1.4142135623730951},"38":{"tf":1.0},"380":{"tf":1.7320508075688772},"385":{"tf":1.0},"387":{"tf":1.0},"389":{"tf":1.0},"399":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.4142135623730951},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"413":{"tf":1.7320508075688772},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.7320508075688772},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"184":{"tf":1.0}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"147":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"199":{"tf":1.0},"352":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"317":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":4,"docs":{"103":{"tf":1.0},"169":{"tf":1.0},"287":{"tf":1.0},"357":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"206":{"tf":1.0},"214":{"tf":1.0},"244":{"tf":1.0},"98":{"tf":1.0}}}}}},"k":{"df":1,"docs":{"206":{"tf":1.0}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"p":{"_":{"d":{"b":{"=":{"1":{"df":1,"docs":{"132":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"=":{"1":{"df":1,"docs":{"132":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":2,"docs":{"146":{"tf":1.0},"165":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"397":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"g":{"df":5,"docs":{"331":{"tf":1.0},"348":{"tf":1.0},"383":{"tf":1.0},"423":{"tf":1.4142135623730951},"428":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":6,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"318":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}}},"_":{"df":1,"docs":{"236":{"tf":1.0}},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"=":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"297":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"5":{"8":{"7":{"df":1,"docs":{"297":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}}},"df":16,"docs":{"141":{"tf":1.0},"189":{"tf":1.0},"213":{"tf":1.4142135623730951},"250":{"tf":1.0},"297":{"tf":1.0},"3":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":2.0},"416":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"101":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"161":{"tf":1.0},"300":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"72":{"tf":1.0}},"t":{"df":2,"docs":{"244":{"tf":1.0},"288":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"(":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"df":1,"docs":{"259":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"t":{"df":31,"docs":{"153":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"168":{"tf":1.0},"175":{"tf":1.0},"234":{"tf":1.4142135623730951},"237":{"tf":1.0},"240":{"tf":1.4142135623730951},"249":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.4142135623730951},"312":{"tf":1.0},"332":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.0},"357":{"tf":1.0},"364":{"tf":1.0},"375":{"tf":1.7320508075688772},"376":{"tf":1.0},"377":{"tf":1.0},"382":{"tf":1.4142135623730951},"417":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0},"87":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.0}}}}},"df":1,"docs":{"373":{"tf":1.0}},"i":{"df":19,"docs":{"160":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0}}}}},"u":{"df":3,"docs":{"161":{"tf":1.0},"244":{"tf":1.0},"373":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"442":{"tf":1.0},"89":{"tf":1.0}}}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}},"r":{"df":1,"docs":{"301":{"tf":1.0}}}}}},"i":{"df":1,"docs":{"277":{"tf":1.0}}}},"r":{"c":{"df":15,"docs":{"100":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"152":{"tf":1.0},"163":{"tf":1.4142135623730951},"165":{"tf":1.0},"174":{"tf":1.0},"208":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"299":{"tf":1.0},"358":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{":":{"]":{"]":{"*":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"[":{"[":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"e":{":":{"]":{"]":{"+":{"[":{"0":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"169":{"tf":1.0},"184":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":3,"docs":{"313":{"tf":1.0},"314":{"tf":1.0},"318":{"tf":2.0}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"é":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"243":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":7,"docs":{"153":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"312":{"tf":1.0},"320":{"tf":1.0},"375":{"tf":1.0},"416":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"l":{"df":2,"docs":{"291":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"43":{"tf":1.0},"8":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}},"r":{"c":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":2,"docs":{"174":{"tf":1.0},"428":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"s":{"df":9,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"212":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":11,"docs":{"347":{"tf":1.4142135623730951},"348":{"tf":1.7320508075688772},"349":{"tf":1.0},"355":{"tf":2.0},"357":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.4142135623730951},"380":{"tf":1.0},"418":{"tf":1.0},"445":{"tf":1.0},"9":{"tf":1.0}}},"f":{"df":1,"docs":{"288":{"tf":1.0}},"l":{"df":1,"docs":{"177":{"tf":1.0}}}},"h":{"+":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"420":{"tf":1.0}}},"df":0,"docs":{}}}}}},".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"193":{"tf":1.7320508075688772},"205":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":3,"docs":{"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"166":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"108":{"tf":1.0},"113":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":4,"docs":{"123":{"tf":1.0},"19":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"294":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"294":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"287":{"tf":1.0}}}}}},":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"84":{"tf":1.4142135623730951}},"s":{":":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"424":{"tf":1.0},"426":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"372":{"tf":1.0},"424":{"tf":1.4142135623730951},"426":{"tf":1.4142135623730951}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"=":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"2":{"2":{"2":{"2":{"df":2,"docs":{"102":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"236":{"tf":1.0},"238":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"d":{":":{"2":{"2":{"df":1,"docs":{"122":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":15,"docs":{"103":{"tf":1.0},"104":{"tf":2.0},"105":{"tf":1.7320508075688772},"107":{"tf":1.0},"122":{"tf":1.4142135623730951},"124":{"tf":1.0},"127":{"tf":1.4142135623730951},"133":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"204":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"97":{"tf":1.0},"98":{"tf":1.0}}},"df":101,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"107":{"tf":1.4142135623730951},"108":{"tf":2.0},"109":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"120":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"123":{"tf":1.0},"124":{"tf":2.449489742783178},"126":{"tf":1.0},"127":{"tf":2.23606797749979},"129":{"tf":1.0},"13":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.7320508075688772},"134":{"tf":1.7320508075688772},"14":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"150":{"tf":1.7320508075688772},"151":{"tf":1.4142135623730951},"153":{"tf":2.0},"16":{"tf":2.0},"160":{"tf":1.7320508075688772},"163":{"tf":1.7320508075688772},"166":{"tf":2.0},"167":{"tf":1.4142135623730951},"169":{"tf":2.23606797749979},"171":{"tf":1.7320508075688772},"172":{"tf":1.0},"174":{"tf":1.0},"183":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"19":{"tf":2.6457513110645907},"193":{"tf":1.0},"20":{"tf":2.6457513110645907},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.7320508075688772},"219":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.449489742783178},"24":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":2.449489742783178},"289":{"tf":1.0},"293":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"296":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"300":{"tf":1.7320508075688772},"326":{"tf":1.0},"33":{"tf":1.0},"370":{"tf":2.0},"372":{"tf":1.0},"374":{"tf":1.7320508075688772},"375":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.0},"392":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"416":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.4142135623730951},"424":{"tf":4.898979485566356},"425":{"tf":4.242640687119285},"426":{"tf":1.0},"427":{"tf":1.0},"448":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"85":{"tf":1.7320508075688772},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"372":{"tf":1.0},"374":{"tf":1.0},"383":{"tf":1.0},"424":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"193":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{"df":1,"docs":{"202":{"tf":1.0}}},"r":{"df":4,"docs":{"375":{"tf":2.449489742783178},"414":{"tf":1.0},"418":{"tf":1.0},"96":{"tf":1.0}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"286":{"tf":1.0},"300":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":10,"docs":{"161":{"tf":1.0},"209":{"tf":1.0},"444":{"tf":2.0},"451":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"87":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"177":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"442":{"tf":1.0}}}}},"r":{"d":{"df":5,"docs":{"276":{"tf":1.0},"326":{"tf":1.0},"330":{"tf":1.0},"372":{"tf":1.0},"417":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":6,"docs":{"183":{"tf":1.0},"278":{"tf":1.0},"291":{"tf":1.4142135623730951},"293":{"tf":1.0},"300":{"tf":1.0},"85":{"tf":2.0}},"e":{"d":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"4":{"5":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":3,"docs":{"204":{"tf":1.0},"207":{"tf":1.0},"348":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"175":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":2,"docs":{"355":{"tf":1.0},"361":{"tf":1.0}}},"i":{"c":{"/":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"292":{"tf":1.0},"389":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"292":{"tf":1.7320508075688772},"389":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"447":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":4,"docs":{"292":{"tf":1.0},"375":{"tf":1.4142135623730951},"400":{"tf":1.0},"418":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":8,"docs":{"232":{"tf":1.0},"233":{"tf":1.0},"238":{"tf":1.0},"246":{"tf":1.0},"255":{"tf":1.0},"258":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"347":{"tf":1.0}}}}}}}},"u":{"df":18,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"113":{"tf":1.0},"124":{"tf":1.4142135623730951},"127":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.4142135623730951},"188":{"tf":1.0},"204":{"tf":1.7320508075688772},"206":{"tf":1.0},"207":{"tf":1.0},"318":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}},"s":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"348":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"104":{"tf":1.0},"164":{"tf":1.0},"17":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"300":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"175":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"317":{"tf":1.4142135623730951}}}},"o":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"287":{"tf":1.4142135623730951},"293":{"tf":1.0},"413":{"tf":1.0}}}},"df":5,"docs":{"177":{"tf":1.0},"178":{"tf":1.0},"244":{"tf":1.0},"419":{"tf":1.0},"82":{"tf":1.0}},"é":{"df":3,"docs":{"234":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"287":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":4,"docs":{"274":{"tf":1.0},"310":{"tf":1.0},"43":{"tf":1.0},"76":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":17,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.0},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"115":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.7320508075688772},"133":{"tf":1.7320508075688772},"134":{"tf":1.0},"187":{"tf":1.0},"317":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.0},"424":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}},"é":{"df":2,"docs":{"169":{"tf":1.0},"175":{"tf":1.0}}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"119":{"tf":1.0},"167":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"257":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"234":{"tf":1.0},"236":{"tf":1.4142135623730951},"258":{"tf":1.0},"375":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":6,"docs":{"284":{"tf":1.0},"289":{"tf":1.0},"314":{"tf":1.0},"372":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"356":{"tf":1.0},"369":{"tf":1.0},"421":{"tf":1.0}}}},"é":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}}},"u":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":6,"docs":{"169":{"tf":2.0},"287":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"370":{"tf":1.0},"413":{"tf":2.449489742783178},"82":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":1,"docs":{"393":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"317":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":2,"docs":{"164":{"tf":1.0},"175":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"85":{"tf":1.0}}}}}}}}}},"è":{"df":3,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"424":{"tf":1.0}}}},"df":0,"docs":{},"h":{"df":1,"docs":{"19":{"tf":1.0}}}},"d":{"df":0,"docs":{},"o":{"df":44,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":2.0},"107":{"tf":1.4142135623730951},"108":{"tf":2.23606797749979},"109":{"tf":2.6457513110645907},"113":{"tf":1.4142135623730951},"115":{"tf":1.7320508075688772},"116":{"tf":2.6457513110645907},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":2.23606797749979},"122":{"tf":1.7320508075688772},"124":{"tf":2.0},"126":{"tf":1.4142135623730951},"127":{"tf":1.7320508075688772},"129":{"tf":1.0},"130":{"tf":1.7320508075688772},"133":{"tf":1.0},"151":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"188":{"tf":1.7320508075688772},"189":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"201":{"tf":1.0},"203":{"tf":1.4142135623730951},"204":{"tf":2.0},"205":{"tf":2.0},"206":{"tf":1.4142135623730951},"207":{"tf":2.0},"212":{"tf":1.0},"213":{"tf":1.4142135623730951},"288":{"tf":1.0},"300":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}},"df":1,"docs":{"442":{"tf":1.0}}},"t":{"df":2,"docs":{"147":{"tf":1.0},"211":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"351":{"tf":1.0}}}}}}},"i":{"df":1,"docs":{"7":{"tf":1.0}},"t":{"df":3,"docs":{"156":{"tf":1.0},"3":{"tf":1.0},"362":{"tf":1.0}}},"v":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"293":{"tf":1.0},"301":{"tf":1.0},"414":{"tf":1.0},"6":{"tf":1.0},"84":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"278":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":1.4142135623730951}}}},"i":{"df":4,"docs":{"175":{"tf":1.0},"346":{"tf":1.0},"8":{"tf":1.0},"85":{"tf":1.0}}},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"295":{"tf":1.0},"390":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":2,"docs":{"59":{"tf":1.0},"9":{"tf":1.0}}}}},"s":{"df":6,"docs":{"278":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"8":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":7,"docs":{"165":{"tf":1.0},"23":{"tf":1.0},"327":{"tf":1.0},"353":{"tf":1.0},"360":{"tf":1.0},"376":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"442":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"81":{"tf":1.0}}}}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":2,"docs":{"184":{"tf":1.0},"382":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":86,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.0},"113":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"133":{"tf":1.4142135623730951},"14":{"tf":1.0},"147":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.7320508075688772},"161":{"tf":1.0},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":1.7320508075688772},"172":{"tf":1.0},"173":{"tf":1.4142135623730951},"177":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"183":{"tf":1.0},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"191":{"tf":1.0},"192":{"tf":1.0},"194":{"tf":1.0},"198":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"210":{"tf":1.0},"211":{"tf":1.4142135623730951},"212":{"tf":1.0},"217":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"244":{"tf":1.0},"248":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"291":{"tf":1.0},"294":{"tf":1.7320508075688772},"296":{"tf":1.0},"327":{"tf":1.0},"331":{"tf":1.0},"346":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.7320508075688772},"360":{"tf":1.0},"363":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"376":{"tf":1.4142135623730951},"381":{"tf":1.0},"393":{"tf":1.7320508075688772},"396":{"tf":1.0},"397":{"tf":1.4142135623730951},"4":{"tf":1.0},"412":{"tf":1.0},"419":{"tf":1.4142135623730951},"442":{"tf":1.0},"443":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.0},"72":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"94":{"tf":1.0},"95":{"tf":1.7320508075688772}},"f":{"a":{"c":{"df":1,"docs":{"208":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"167":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"v":{"c":{"df":2,"docs":{"348":{"tf":3.4641016151377544},"426":{"tf":4.0}}},"df":0,"docs":{}},"w":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"181":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"df":11,"docs":{"1":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.0},"177":{"tf":1.7320508075688772},"180":{"tf":1.7320508075688772},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"370":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.4142135623730951}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"m":{"df":7,"docs":{"133":{"tf":1.0},"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"150":{"tf":1.0}},"n":{"df":0,"docs":{},"i":{"df":3,"docs":{"160":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0}},"s":{"df":4,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0},"23":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":3,"docs":{"105":{"tf":1.0},"59":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":21,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"113":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"118":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.4142135623730951},"126":{"tf":1.0},"127":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"172":{"tf":1.0},"188":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"213":{"tf":1.0},"252":{"tf":1.0},"300":{"tf":1.0}}}}},"d":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"446":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"446":{"tf":1.0}}}}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"4":{"5":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":10,"docs":{"113":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":1.4142135623730951},"185":{"tf":1.0},"189":{"tf":2.0},"444":{"tf":1.0},"446":{"tf":2.0},"73":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0}}},"df":1,"docs":{"199":{"tf":1.0}}}},"è":{"df":0,"docs":{},"m":{"df":20,"docs":{"103":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"134":{"tf":1.0},"168":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"232":{"tf":1.7320508075688772},"244":{"tf":1.0},"288":{"tf":1.4142135623730951},"373":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"419":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}}}},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{".":{"*":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"131":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{".":{"*":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"131":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"290":{"tf":1.0}}}},"t":{"df":18,"docs":{"10":{"tf":1.0},"102":{"tf":1.0},"167":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"22":{"tf":1.0},"357":{"tf":1.0},"383":{"tf":1.0},"388":{"tf":1.0},"391":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0},"403":{"tf":1.0},"445":{"tf":1.0},"67":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"416":{"tf":1.4142135623730951}}}},"df":1,"docs":{"420":{"tf":1.0}},"é":{"df":1,"docs":{"147":{"tf":1.0}}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":5,"docs":{"281":{"tf":1.0},"345":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"327":{"tf":1.0}}}}}}}}}},"v":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}}}}},"û":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}},"’":{"a":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"82":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"451":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":4,"docs":{"210":{"tf":1.0},"296":{"tf":1.0},"327":{"tf":1.0},"85":{"tf":1.0}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"146":{"tf":1.4142135623730951},"242":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"[":{"df":0,"docs":{},"t":{"df":0,"docs":{},"â":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":1,"docs":{"352":{"tf":1.0}}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":11,"docs":{"175":{"tf":1.0},"232":{"tf":1.0},"239":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":1.4142135623730951},"293":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"372":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"153":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":8,"docs":{"13":{"tf":1.0},"16":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0}},"g":{"df":2,"docs":{"373":{"tf":1.7320508075688772},"375":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"207":{"tf":1.4142135623730951}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"/":{"d":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"323":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"113":{"tf":1.0},"292":{"tf":1.4142135623730951},"389":{"tf":1.0}}}}},"df":1,"docs":{"292":{"tf":1.0}}},"df":0,"docs":{}}}}}},"n":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"253":{"tf":1.0},"4":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":24,"docs":{"146":{"tf":1.0},"165":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"301":{"tf":1.0},"349":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0}},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}},"r":{"d":{"df":1,"docs":{"107":{"tf":1.0}}},"df":2,"docs":{"171":{"tf":1.0},"180":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":1,"docs":{"293":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"169":{"tf":1.0}}}},"t":{"df":2,"docs":{"348":{"tf":1.0},"6":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"277":{"tf":1.0}}}},"df":0,"docs":{}}},"b":{"df":5,"docs":{"169":{"tf":1.0},"287":{"tf":1.0},"356":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}},"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":18,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"124":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"16":{"tf":2.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"203":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"352":{"tf":1.0},"362":{"tf":1.0},"83":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"372":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.4142135623730951}}}}}},"df":9,"docs":{"179":{"tf":1.0},"313":{"tf":1.0},"317":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0},"382":{"tf":1.7320508075688772},"424":{"tf":1.0},"425":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"314":{"tf":1.0},"325":{"tf":1.0}}}},"df":2,"docs":{"314":{"tf":1.0},"327":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":7,"docs":{"15":{"tf":1.0},"280":{"tf":1.0},"286":{"tf":1.0},"3":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"9":{"tf":1.0}}}}}}}},"df":9,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.4142135623730951}},"e":{"df":15,"docs":{"105":{"tf":1.0},"109":{"tf":1.0},"121":{"tf":1.0},"127":{"tf":1.0},"189":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"201":{"tf":1.0}}},"l":{"df":1,"docs":{"442":{"tf":1.0}}},"m":{"df":0,"docs":{},"p":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"312":{"tf":1.0}}}}},"df":5,"docs":{"15":{"tf":1.0},"207":{"tf":1.0},"286":{"tf":1.0},"377":{"tf":1.4142135623730951},"81":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"t":{"df":85,"docs":{"12":{"tf":1.0},"133":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"161":{"tf":1.0},"2":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"235":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"287":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.7320508075688772},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"389":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"418":{"tf":1.0},"42":{"tf":1.0},"428":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.4142135623730951},"451":{"tf":1.4142135623730951},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"e":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"451":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"451":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"451":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"161":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"358":{"tf":1.0},"447":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":1,"docs":{"189":{"tf":1.0}}}},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":7,"docs":{"106":{"tf":1.0},"16":{"tf":1.0},"160":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"(":{"\'":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"328":{"tf":1.0}}}}}},"df":0,"docs":{}},".":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"e":{"(":{"\'":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},":":{"df":0,"docs":{},"e":{"2":{"df":5,"docs":{"313":{"tf":1.0},"320":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.0},"403":{"tf":1.0}},"e":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"324":{"tf":1.0},"327":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"316":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":50,"docs":{"107":{"tf":1.0},"119":{"tf":1.0},"123":{"tf":2.0},"124":{"tf":1.0},"146":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":2.23606797749979},"164":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"174":{"tf":2.0},"20":{"tf":1.0},"206":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"235":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.4142135623730951},"279":{"tf":1.4142135623730951},"296":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"310":{"tf":1.4142135623730951},"312":{"tf":2.6457513110645907},"313":{"tf":1.4142135623730951},"314":{"tf":2.6457513110645907},"315":{"tf":1.0},"316":{"tf":2.0},"317":{"tf":2.23606797749979},"318":{"tf":1.7320508075688772},"319":{"tf":1.4142135623730951},"320":{"tf":3.1622776601683795},"321":{"tf":1.0},"322":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"325":{"tf":2.449489742783178},"326":{"tf":1.4142135623730951},"327":{"tf":1.4142135623730951},"328":{"tf":1.7320508075688772},"329":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.4142135623730951},"333":{"tf":1.0},"334":{"tf":2.0},"380":{"tf":1.0},"389":{"tf":1.4142135623730951},"395":{"tf":1.0},"397":{"tf":2.6457513110645907},"403":{"tf":1.7320508075688772},"447":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"166":{"tf":1.0},"316":{"tf":1.0},"397":{"tf":1.0},"419":{"tf":1.0}}},"z":{"df":2,"docs":{"300":{"tf":1.0},"451":{"tf":1.0}}}},"s":{"/":{"df":0,"docs":{},"e":{"2":{"df":1,"docs":{"325":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"318":{"tf":1.0},"320":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"334":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"316":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"é":{"df":1,"docs":{"95":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"t":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"241":{"tf":1.4142135623730951},"318":{"tf":1.0},"319":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"333":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"é":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"348":{"tf":1.4142135623730951},"349":{"tf":1.0}}}}}}},"è":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"333":{"tf":1.0}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":3,"docs":{"208":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":9,"docs":{"104":{"tf":1.0},"133":{"tf":1.0},"175":{"tf":1.0},"183":{"tf":1.4142135623730951},"318":{"tf":1.0},"354":{"tf":1.0},"380":{"tf":1.0},"397":{"tf":1.0},"84":{"tf":1.4142135623730951}}}}},"r":{"df":2,"docs":{"118":{"tf":1.0},"446":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"z":{"df":1,"docs":{"241":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"23":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"377":{"tf":1.0},"426":{"tf":1.0}}},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"l":{"df":7,"docs":{"124":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.4142135623730951},"445":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"89":{"tf":1.0}},"n":{"df":0,"docs":{},"p":{"df":9,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"212":{"tf":1.0},"88":{"tf":1.0}}}},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"1":{".":{"2":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"205":{"tf":1.7320508075688772}}}}}},"df":2,"docs":{"116":{"tf":1.4142135623730951},"161":{"tf":1.0}}}}}}}}},"p":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"205":{"tf":1.4142135623730951}}}}}},"df":1,"docs":{"109":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{}}},"o":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"210":{"tf":1.0},"451":{"tf":1.0}}}}}}}}}},"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"125":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"451":{"tf":1.0}}}}}}}}}}}},"d":{"df":0,"docs":{},"o":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"i":{"df":1,"docs":{"17":{"tf":1.4142135623730951}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"390":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":12,"docs":{"180":{"tf":1.0},"189":{"tf":1.4142135623730951},"194":{"tf":1.0},"208":{"tf":1.0},"313":{"tf":1.0},"37":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.7320508075688772},"449":{"tf":1.0},"8":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}},"df":0,"docs":{}},"|":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"(":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":4,"docs":{"169":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.0},"380":{"tf":1.0}}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":5,"docs":{"148":{"tf":1.4142135623730951},"169":{"tf":1.0},"370":{"tf":1.0},"420":{"tf":1.0},"96":{"tf":1.0}}}}},"n":{"df":13,"docs":{"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":2.6457513110645907},"17":{"tf":2.23606797749979},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"300":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"169":{"tf":1.0},"176":{"tf":1.0},"207":{"tf":1.4142135623730951},"277":{"tf":1.0},"294":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.0}}}},"u":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"df":17,"docs":{"189":{"tf":1.0},"2":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"288":{"tf":1.0},"292":{"tf":1.0},"312":{"tf":1.0},"324":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"362":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":1.7320508075688772},"400":{"tf":1.0},"403":{"tf":1.0},"85":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"442":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"291":{"tf":1.0},"299":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"148":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"df":31,"docs":{"16":{"tf":1.4142135623730951},"173":{"tf":1.0},"18":{"tf":1.4142135623730951},"207":{"tf":1.0},"214":{"tf":1.0},"217":{"tf":1.0},"235":{"tf":1.0},"276":{"tf":1.0},"288":{"tf":1.0},"293":{"tf":1.4142135623730951},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"361":{"tf":1.0},"375":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"393":{"tf":2.0},"394":{"tf":1.0},"396":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"451":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"414":{"tf":1.0}},"r":{"df":1,"docs":{"394":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"k":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"a":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":19,"docs":{"1":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.0},"176":{"tf":1.0},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.4142135623730951},"186":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"195":{"tf":1.0},"196":{"tf":1.0},"208":{"tf":1.4142135623730951},"211":{"tf":1.0},"370":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"186":{"tf":1.0}}}}},"é":{"df":1,"docs":{"393":{"tf":1.0}}}},"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"396":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"119":{"tf":1.0},"150":{"tf":1.0},"171":{"tf":1.0}}}}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"146":{"tf":1.0},"153":{"tf":1.0},"171":{"tf":1.0},"419":{"tf":1.0},"83":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"442":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"133":{"tf":1.0},"376":{"tf":1.0},"383":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}}}},"ç":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":10,"docs":{"104":{"tf":1.0},"133":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"19":{"tf":1.0},"202":{"tf":1.0},"286":{"tf":1.0},"292":{"tf":1.0},"394":{"tf":1.0},"98":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"428":{"tf":1.0}}}}}}},"_":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"171":{"tf":1.0},"174":{"tf":1.7320508075688772},"413":{"tf":1.0},"428":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"{":{"a":{"df":0,"docs":{},"r":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"319":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":4,"docs":{"173":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.4142135623730951},"375":{"tf":1.0}}}}}},"p":{"df":1,"docs":{"163":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":5,"docs":{"169":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"87":{"tf":1.0},"96":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"v":{"df":5,"docs":{"166":{"tf":1.0},"244":{"tf":1.0},"288":{"tf":1.0},"451":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":13,"docs":{"122":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":2.23606797749979},"133":{"tf":1.0},"189":{"tf":3.3166247903554},"211":{"tf":1.0},"243":{"tf":2.0},"249":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.0},"377":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}},"y":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"+":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"u":{"df":13,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":2.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"5":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"443":{"tf":1.0}},"r":{"df":1,"docs":{"74":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"257":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":91,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"14":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"277":{"tf":2.23606797749979},"278":{"tf":1.4142135623730951},"28":{"tf":1.0},"282":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"444":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":2.8284271247461903},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"7":{"tf":1.4142135623730951},"70":{"tf":1.0},"72":{"tf":2.449489742783178},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":8,"docs":{"250":{"tf":1.0},"3":{"tf":1.7320508075688772},"372":{"tf":1.0},"377":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"â":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":9,"docs":{"148":{"tf":1.0},"169":{"tf":1.0},"279":{"tf":1.0},"352":{"tf":1.4142135623730951},"357":{"tf":1.0},"420":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"96":{"tf":1.0}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":3,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.4142135623730951}}}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":4,"docs":{"151":{"tf":1.0},"288":{"tf":1.0},"291":{"tf":1.0},"81":{"tf":1.0}}}}}}},"df":8,"docs":{"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"185":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"291":{"tf":1.0},"84":{"tf":1.0}},"f":{"df":0,"docs":{},"w":{"df":6,"docs":{"108":{"tf":2.23606797749979},"127":{"tf":1.4142135623730951},"188":{"tf":1.7320508075688772},"189":{"tf":1.7320508075688772},"214":{"tf":1.0},"88":{"tf":1.0}}}},"i":{",":{"df":0,"docs":{},"h":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":17,"docs":{"102":{"tf":1.0},"123":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.4142135623730951},"247":{"tf":1.0},"248":{"tf":1.0},"281":{"tf":1.0},"318":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"333":{"tf":1.0},"348":{"tf":3.1622776601683795},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"438":{"tf":1.0},"96":{"tf":1.0}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"132":{"tf":1.0},"181":{"tf":1.0},"242":{"tf":1.0}}}}}}}}}},"n":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}}}}}},"b":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}}}}},"df":264,"docs":{"1":{"tf":2.449489742783178},"102":{"tf":1.4142135623730951},"104":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.4142135623730951},"123":{"tf":1.0},"128":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.4142135623730951},"137":{"tf":1.0},"138":{"tf":1.4142135623730951},"139":{"tf":1.0},"14":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"141":{"tf":1.0},"142":{"tf":1.4142135623730951},"143":{"tf":1.0},"144":{"tf":1.4142135623730951},"145":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":2.23606797749979},"15":{"tf":1.4142135623730951},"152":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":2.8284271247461903},"164":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"171":{"tf":1.0},"173":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"175":{"tf":1.7320508075688772},"176":{"tf":1.4142135623730951},"177":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":1.7320508075688772},"18":{"tf":2.0},"181":{"tf":1.0},"184":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":2.6457513110645907},"190":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":2.0},"20":{"tf":1.7320508075688772},"206":{"tf":1.0},"21":{"tf":1.7320508075688772},"210":{"tf":1.0},"213":{"tf":1.7320508075688772},"214":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.4142135623730951},"217":{"tf":1.0},"218":{"tf":1.4142135623730951},"219":{"tf":1.0},"220":{"tf":1.4142135623730951},"221":{"tf":1.0},"222":{"tf":1.4142135623730951},"223":{"tf":1.0},"224":{"tf":1.4142135623730951},"225":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"227":{"tf":1.0},"228":{"tf":1.4142135623730951},"229":{"tf":1.0},"23":{"tf":1.0},"230":{"tf":1.4142135623730951},"232":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.7320508075688772},"244":{"tf":1.7320508075688772},"25":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"26":{"tf":1.4142135623730951},"260":{"tf":1.0},"261":{"tf":1.4142135623730951},"262":{"tf":1.0},"263":{"tf":1.4142135623730951},"264":{"tf":1.0},"265":{"tf":1.4142135623730951},"266":{"tf":1.0},"267":{"tf":1.4142135623730951},"268":{"tf":1.0},"269":{"tf":1.4142135623730951},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.4142135623730951},"272":{"tf":1.0},"273":{"tf":1.4142135623730951},"274":{"tf":1.0},"275":{"tf":1.4142135623730951},"276":{"tf":1.0},"277":{"tf":2.23606797749979},"278":{"tf":1.0},"279":{"tf":2.23606797749979},"28":{"tf":1.4142135623730951},"282":{"tf":1.0},"283":{"tf":1.4142135623730951},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"296":{"tf":1.4142135623730951},"299":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.4142135623730951},"304":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"306":{"tf":1.0},"307":{"tf":1.4142135623730951},"308":{"tf":1.0},"309":{"tf":1.4142135623730951},"31":{"tf":1.0},"312":{"tf":1.0},"316":{"tf":1.7320508075688772},"317":{"tf":1.4142135623730951},"319":{"tf":1.0},"32":{"tf":1.4142135623730951},"321":{"tf":1.0},"322":{"tf":2.0},"327":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":2.6457513110645907},"332":{"tf":2.0},"334":{"tf":1.7320508075688772},"335":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"339":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"341":{"tf":1.0},"342":{"tf":1.4142135623730951},"343":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":2.0},"349":{"tf":1.4142135623730951},"35":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.4142135623730951},"354":{"tf":1.0},"355":{"tf":1.7320508075688772},"36":{"tf":1.4142135623730951},"363":{"tf":2.23606797749979},"364":{"tf":1.0},"365":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"367":{"tf":1.0},"368":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"382":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.4142135623730951},"386":{"tf":1.0},"387":{"tf":1.4142135623730951},"39":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.4142135623730951},"404":{"tf":1.0},"405":{"tf":1.4142135623730951},"406":{"tf":1.0},"407":{"tf":1.4142135623730951},"408":{"tf":1.0},"409":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"410":{"tf":1.0},"411":{"tf":1.4142135623730951},"412":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"42":{"tf":1.4142135623730951},"420":{"tf":2.0},"428":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.4142135623730951},"432":{"tf":1.0},"433":{"tf":1.4142135623730951},"434":{"tf":1.0},"435":{"tf":1.4142135623730951},"436":{"tf":1.0},"437":{"tf":1.4142135623730951},"438":{"tf":1.0},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"440":{"tf":1.0},"441":{"tf":1.4142135623730951},"442":{"tf":1.7320508075688772},"448":{"tf":1.0},"449":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.4142135623730951},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"49":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":2.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":2.23606797749979},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772},"81":{"tf":1.0},"82":{"tf":2.0},"83":{"tf":1.7320508075688772},"86":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.4142135623730951},"92":{"tf":1.0},"93":{"tf":1.4142135623730951},"94":{"tf":1.0},"95":{"tf":2.0},"98":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":2,"docs":{"85":{"tf":1.0},"88":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"167":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":11,"docs":{"166":{"tf":1.0},"189":{"tf":1.4142135623730951},"21":{"tf":1.0},"23":{"tf":1.0},"241":{"tf":1.0},"242":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"287":{"tf":1.0},"444":{"tf":1.0},"97":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":7,"docs":{"277":{"tf":1.0},"279":{"tf":1.0},"310":{"tf":1.0},"312":{"tf":1.4142135623730951},"320":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0}}}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"133":{"tf":1.0},"193":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"293":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"316":{"tf":1.4142135623730951},"401":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":12,"docs":{"115":{"tf":1.0},"180":{"tf":1.4142135623730951},"300":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":2.0},"349":{"tf":2.6457513110645907},"351":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"353":{"tf":1.0},"355":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951}},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"(":{"d":{"b":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"357":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"348":{"tf":1.4142135623730951},"349":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"357":{"tf":1.0}}}}}}}}}}},"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"241":{"tf":1.0},"255":{"tf":1.0},"425":{"tf":1.0}}}},"b":{"df":0,"docs":{},"i":{"df":2,"docs":{"241":{"tf":1.0},"255":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"351":{"tf":1.0}}},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"353":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":8,"docs":{"109":{"tf":1.0},"178":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"318":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"88":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":5,"docs":{"177":{"tf":1.0},"184":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"424":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"180":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":3,"docs":{"121":{"tf":1.0},"279":{"tf":1.0},"363":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"l":{"df":3,"docs":{"199":{"tf":1.0},"243":{"tf":1.0},"83":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"157":{"tf":1.0},"359":{"tf":1.0},"84":{"tf":1.0}}}},"df":2,"docs":{"316":{"tf":2.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"197":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"=":{"<":{"a":{"c":{"df":0,"docs":{},"m":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},">":{"@":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"@":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"166":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"393":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.7320508075688772},"425":{"tf":1.0},"426":{"tf":1.4142135623730951},"427":{"tf":2.0},"429":{"tf":1.0}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"286":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":25,"docs":{"108":{"tf":1.4142135623730951},"113":{"tf":1.0},"151":{"tf":1.4142135623730951},"153":{"tf":1.0},"166":{"tf":2.0},"189":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":1.0},"291":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.4142135623730951},"399":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.7320508075688772},"426":{"tf":1.7320508075688772},"427":{"tf":1.0},"428":{"tf":2.23606797749979},"429":{"tf":2.23606797749979},"86":{"tf":1.4142135623730951},"88":{"tf":1.0},"95":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"m":{"df":5,"docs":{"330":{"tf":1.7320508075688772},"332":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":2.23606797749979}},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"&":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"(":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"360":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"r":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"161":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"161":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}}},"df":2,"docs":{"166":{"tf":1.0},"177":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"159":{"tf":1.0},"185":{"tf":1.0},"357":{"tf":1.0}},"i":{"df":4,"docs":{"107":{"tf":1.0},"146":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":32,"docs":{"10":{"tf":1.0},"174":{"tf":1.0},"2":{"tf":1.0},"223":{"tf":1.0},"243":{"tf":1.0},"286":{"tf":1.0},"3":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":2.23606797749979},"354":{"tf":1.0},"360":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"377":{"tf":1.0},"379":{"tf":1.0},"396":{"tf":1.0},"4":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.4142135623730951},"5":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"84":{"tf":1.0}}}}}}},"df":20,"docs":{"108":{"tf":1.0},"113":{"tf":1.0},"2":{"tf":1.4142135623730951},"214":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"292":{"tf":1.0},"316":{"tf":1.0},"322":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"373":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"397":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.0},"5":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"291":{"tf":1.0},"84":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}},"é":{"df":2,"docs":{"359":{"tf":1.0},"375":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"241":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"v":{"0":{".":{"1":{"9":{".":{"2":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{".":{"0":{"df":2,"docs":{"293":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"df":5,"docs":{"280":{"tf":1.0},"404":{"tf":1.0},"449":{"tf":1.4142135623730951},"55":{"tf":1.0},"9":{"tf":1.0}}},"2":{"0":{".":{"1":{"1":{".":{"0":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"175":{"tf":1.0}}},"6":{"df":1,"docs":{"214":{"tf":1.0}}},"a":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"82":{"tf":1.0}},"l":{"df":1,"docs":{"257":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":17,"docs":{"109":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.7320508075688772},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":2.23606797749979},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"290":{"tf":2.8284271247461903},"382":{"tf":1.0},"442":{"tf":1.0},"83":{"tf":2.23606797749979},"95":{"tf":1.0}}}}},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"426":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":17,"docs":{"106":{"tf":1.0},"112":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"243":{"tf":1.0},"326":{"tf":1.0},"330":{"tf":1.4142135623730951},"373":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.4142135623730951},"393":{"tf":1.7320508075688772},"394":{"tf":1.0},"396":{"tf":1.0},"402":{"tf":2.0},"423":{"tf":1.0},"429":{"tf":1.0},"98":{"tf":1.0}},"é":{"df":2,"docs":{"372":{"tf":1.0},"403":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":2,"docs":{"241":{"tf":1.0},"255":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"355":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"207":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":2.0},"205":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"161":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"/":{".":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"5":{"4":{"3":{"2":{"df":1,"docs":{"300":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"w":{"df":0,"docs":{},"w":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"/":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"116":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"(":{"1":{"0":{"0":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"317":{"tf":1.4142135623730951}},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":29,"docs":{"150":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.7320508075688772},"166":{"tf":1.0},"229":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":2.23606797749979},"258":{"tf":1.4142135623730951},"285":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.4142135623730951},"75":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"288":{"tf":1.0}}}}}},"|":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":6,"docs":{"100":{"tf":1.0},"121":{"tf":1.0},"166":{"tf":1.0},"259":{"tf":1.0},"88":{"tf":1.0},"97":{"tf":1.0}},"e":{"c":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"428":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"167":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"b":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":27,"docs":{"107":{"tf":1.0},"119":{"tf":1.0},"128":{"tf":1.0},"134":{"tf":1.4142135623730951},"146":{"tf":1.0},"151":{"tf":1.0},"156":{"tf":1.0},"160":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"21":{"tf":1.4142135623730951},"211":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"330":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"347":{"tf":1.0},"356":{"tf":1.0},"373":{"tf":1.0},"375":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"6":{"tf":1.0},"86":{"tf":1.0},"98":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"375":{"tf":1.0}},"i":{"df":1,"docs":{"375":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"16":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":15,"docs":{"101":{"tf":1.0},"146":{"tf":1.4142135623730951},"15":{"tf":1.0},"160":{"tf":1.4142135623730951},"163":{"tf":1.0},"164":{"tf":1.0},"171":{"tf":1.0},"177":{"tf":1.0},"188":{"tf":1.0},"286":{"tf":2.0},"288":{"tf":2.8284271247461903},"291":{"tf":1.4142135623730951},"300":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"84":{"tf":1.0}}}}}},"t":{"df":1,"docs":{"18":{"tf":1.0}}}},"t":{"df":1,"docs":{"447":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}},"x":{"df":1,"docs":{"10":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}}},"i":{"a":{"df":55,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.0},"113":{"tf":1.0},"120":{"tf":1.0},"123":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"16":{"tf":1.0},"164":{"tf":1.0},"189":{"tf":1.0},"193":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"296":{"tf":1.0},"312":{"tf":1.0},"323":{"tf":1.4142135623730951},"325":{"tf":1.0},"327":{"tf":1.0},"332":{"tf":1.0},"347":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.7320508075688772},"375":{"tf":1.0},"376":{"tf":1.0},"378":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"82":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"e":{"df":8,"docs":{"14":{"tf":1.0},"173":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"244":{"tf":1.0},"290":{"tf":1.0},"318":{"tf":1.0},"327":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":4,"docs":{"10":{"tf":1.0},"393":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"86":{"tf":1.0}}}},"w":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"179":{"tf":1.0}}}}}}}}}}},"v":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"179":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"252":{"tf":1.0}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"419":{"tf":1.0}}}}}},"l":{"df":12,"docs":{"16":{"tf":1.0},"175":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"22":{"tf":1.0},"232":{"tf":1.0},"258":{"tf":1.0},"299":{"tf":1.0},"313":{"tf":1.0},"318":{"tf":1.0},"357":{"tf":1.0},"86":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"df":1,"docs":{"16":{"tf":1.0}},"e":{"df":2,"docs":{"153":{"tf":1.0},"23":{"tf":1.0}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}},"df":1,"docs":{"327":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"352":{"tf":1.0},"356":{"tf":1.4142135623730951}}},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"m":{"df":2,"docs":{"147":{"tf":1.0},"81":{"tf":1.0}}},"o":{"df":2,"docs":{"18":{"tf":1.0},"86":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":2,"docs":{"17":{"tf":1.0},"21":{"tf":1.0}},"r":{"df":85,"docs":{"12":{"tf":1.4142135623730951},"125":{"tf":1.0},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"150":{"tf":1.0},"155":{"tf":1.0},"17":{"tf":1.0},"174":{"tf":1.0},"189":{"tf":1.0},"210":{"tf":1.0},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"23":{"tf":1.0},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"293":{"tf":1.0},"30":{"tf":1.4142135623730951},"300":{"tf":1.0},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"313":{"tf":1.0},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"86":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}},"u":{"df":0,"docs":{},"m":{"df":4,"docs":{"82":{"tf":1.0},"84":{"tf":2.23606797749979},"85":{"tf":1.0},"88":{"tf":1.0}}},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":21,"docs":{"104":{"tf":1.0},"160":{"tf":1.0},"198":{"tf":1.0},"279":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.7320508075688772},"296":{"tf":1.0},"3":{"tf":1.0},"301":{"tf":1.0},"442":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":2.449489742783178},"88":{"tf":1.0},"95":{"tf":1.7320508075688772}},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\\\":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":22,"docs":{"159":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"277":{"tf":1.4142135623730951},"281":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.4142135623730951},"3":{"tf":2.0},"300":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"76":{"tf":1.0},"80":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.7320508075688772},"88":{"tf":1.0},"89":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"357":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":4,"docs":{"199":{"tf":1.0},"281":{"tf":1.0},"3":{"tf":1.0},"76":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"n":{"df":1,"docs":{"211":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":3,"docs":{"214":{"tf":1.0},"290":{"tf":1.0},"397":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":4,"docs":{"272":{"tf":1.0},"281":{"tf":1.0},"436":{"tf":1.0},"76":{"tf":1.0}}},"u":{"df":0,"docs":{},"e":{"df":8,"docs":{"124":{"tf":1.0},"16":{"tf":1.0},"232":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"381":{"tf":1.0}},"s":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"x":{"b":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"364":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":13,"docs":{"124":{"tf":1.0},"160":{"tf":1.7320508075688772},"162":{"tf":1.0},"171":{"tf":1.0},"177":{"tf":1.0},"18":{"tf":1.0},"288":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"448":{"tf":1.0},"83":{"tf":1.0}}},"df":10,"docs":{"146":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"330":{"tf":3.0},"331":{"tf":2.449489742783178},"332":{"tf":2.23606797749979},"333":{"tf":2.449489742783178},"414":{"tf":1.7320508075688772},"6":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"319":{"tf":1.0}}}},"r":{"df":23,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"133":{"tf":2.0},"14":{"tf":1.0},"166":{"tf":1.4142135623730951},"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"188":{"tf":1.0},"206":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.0},"255":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"393":{"tf":1.7320508075688772},"80":{"tf":1.0}}},"z":{"df":11,"docs":{"288":{"tf":1.4142135623730951},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.7320508075688772},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.4142135623730951}}}},"é":{"df":2,"docs":{"22":{"tf":1.0},"393":{"tf":1.0}}}}}}}}},"w":{"[":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"174":{"tf":1.0},"294":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.4142135623730951},"403":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"è":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"356":{"tf":1.0},"357":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"206":{"tf":1.0},"348":{"tf":3.7416573867739413},"352":{"tf":1.0}},"e":{"b":{"+":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"417":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":29,"docs":{"148":{"tf":1.0},"16":{"tf":1.0},"173":{"tf":1.0},"187":{"tf":1.0},"199":{"tf":1.0},"279":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.0},"293":{"tf":1.4142135623730951},"294":{"tf":1.0},"299":{"tf":1.0},"335":{"tf":1.0},"370":{"tf":2.23606797749979},"375":{"tf":1.7320508075688772},"383":{"tf":1.0},"392":{"tf":1.0},"413":{"tf":2.449489742783178},"417":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":3.3166247903554},"426":{"tf":2.8284271247461903},"428":{"tf":3.605551275463989},"429":{"tf":2.6457513110645907},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"279":{"tf":1.0},"341":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"97":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"447":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"380":{"tf":1.0}}}}}}}}},"o":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"153":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"353":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"[":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":23,"docs":{"102":{"tf":1.4142135623730951},"146":{"tf":1.0},"148":{"tf":1.4142135623730951},"161":{"tf":1.0},"166":{"tf":1.0},"169":{"tf":2.23606797749979},"175":{"tf":1.0},"183":{"tf":1.4142135623730951},"189":{"tf":1.0},"194":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"281":{"tf":1.0},"304":{"tf":1.0},"327":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.7320508075688772},"357":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":1.0},"440":{"tf":1.0},"450":{"tf":1.0},"96":{"tf":1.0}}}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":4,"docs":{"279":{"tf":1.0},"301":{"tf":1.0},"308":{"tf":1.0},"5":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"148":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":10,"docs":{"148":{"tf":1.0},"151":{"tf":1.0},"161":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"312":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"389":{"tf":1.4142135623730951},"403":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":1,"docs":{"189":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"294":{"tf":1.0}}}}}}},"x":{"8":{"6":{"_":{"6":{"4":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"133":{"tf":1.4142135623730951},"166":{"tf":1.0},"180":{"tf":1.0},"202":{"tf":3.0},"206":{"tf":1.0},"214":{"tf":1.0},"279":{"tf":1.0},"349":{"tf":1.0},"356":{"tf":1.0},"394":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.4142135623730951}},"r":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"w":{"df":1,"docs":{"348":{"tf":1.0}}},"x":{"df":1,"docs":{"394":{"tf":1.0}},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}}},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"379":{"tf":1.0},"380":{"tf":1.0},"9":{"tf":1.0}}}}},"df":6,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"169":{"tf":1.0},"188":{"tf":1.0},"346":{"tf":1.0},"82":{"tf":1.0}}},"z":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":2,"docs":{"383":{"tf":1.0},"393":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"393":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":3,"docs":{"189":{"tf":1.0},"198":{"tf":1.0},"201":{"tf":1.4142135623730951}}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":6,"docs":{"324":{"tf":1.0},"352":{"tf":1.4142135623730951},"355":{"tf":1.0},"389":{"tf":1.4142135623730951},"400":{"tf":1.0},"418":{"tf":1.0}}}}}}}},"breadcrumbs":{"root":{"0":{".":{"0":{".":{"0":{".":{"0":{":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"0":{"0":{"0":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"4":{"3":{"2":{"df":1,"docs":{"212":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"109":{"tf":1.0},"113":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"85":{"tf":1.0}}},"1":{"df":1,"docs":{"85":{"tf":1.0}}},"8":{"df":2,"docs":{"291":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"199":{"tf":1.0}}},"1":{"df":47,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.0}},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"2":{"df":15,"docs":{"24":{"tf":1.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.7320508075688772},"303":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.7320508075688772},"91":{"tf":1.0}}},"3":{"df":13,"docs":{"27":{"tf":1.7320508075688772},"277":{"tf":1.0},"278":{"tf":1.0},"28":{"tf":1.0},"304":{"tf":1.7320508075688772},"305":{"tf":1.0},"362":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.7320508075688772},"93":{"tf":1.0}}},"4":{"1":{"6":{"b":{"df":0,"docs":{},"|":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":51,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"29":{"tf":1.7320508075688772},"293":{"tf":2.0},"30":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951},"89":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}}},"7":{"4":{"df":6,"docs":{"1":{"tf":1.0},"264":{"tf":1.7320508075688772},"265":{"tf":1.0},"383":{"tf":1.4142135623730951},"391":{"tf":1.4142135623730951},"75":{"tf":1.0}}},"df":0,"docs":{}},"9":{":":{"5":{"5":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"102":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"205":{"tf":1.0},"243":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":2.0},"317":{"tf":1.0}}},"1":{".":{"1":{"0":{"df":1,"docs":{"356":{"tf":1.0}}},"df":2,"docs":{"202":{"tf":1.0},"291":{"tf":1.0}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"5":{"df":1,"docs":{"346":{"tf":1.0}}},"8":{"0":{"df":2,"docs":{"286":{"tf":1.0},"300":{"tf":1.0}}},"2":{".":{"0":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{".":{"1":{"df":1,"docs":{"104":{"tf":1.0}}},"2":{"df":1,"docs":{"104":{"tf":1.0}}},"3":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"104":{"tf":1.4142135623730951}}}}}},"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"6":{"4":{"4":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"124":{"tf":1.0},"289":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"327":{"tf":1.0},"389":{"tf":1.0}}},":":{"0":{"0":{"df":1,"docs":{"84":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"1":{"5":{"df":1,"docs":{"292":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":10,"docs":{"166":{"tf":1.4142135623730951},"18":{"tf":1.0},"185":{"tf":1.4142135623730951},"189":{"tf":1.7320508075688772},"202":{"tf":1.0},"206":{"tf":1.0},"208":{"tf":1.7320508075688772},"211":{"tf":1.0},"288":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772}},"m":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":2.6457513110645907}}}},"1":{"df":4,"docs":{"167":{"tf":1.4142135623730951},"189":{"tf":1.0},"208":{"tf":1.0},"211":{"tf":1.0}}},"2":{"0":{"df":3,"docs":{"277":{"tf":1.0},"278":{"tf":1.0},"349":{"tf":1.0}}},"3":{"df":1,"docs":{"349":{"tf":1.0}}},"4":{"df":1,"docs":{"349":{"tf":1.0}}},"6":{"df":1,"docs":{"349":{"tf":1.0}}},"7":{".":{"0":{".":{"0":{".":{"1":{"/":{"8":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}},":":{"2":{"2":{"2":{"2":{"df":7,"docs":{"113":{"tf":1.4142135623730951},"121":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.0},"187":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"0":{"0":{"0":{"df":5,"docs":{"113":{"tf":1.4142135623730951},"124":{"tf":1.0},"187":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"4":{"3":{"2":{"df":6,"docs":{"109":{"tf":1.0},"124":{"tf":1.0},"187":{"tf":1.0},"212":{"tf":1.4142135623730951},"96":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.0},"211":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"4":{"7":{"/":{"1":{"2":{"8":{"4":{"7":{"df":1,"docs":{"289":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"289":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"349":{"tf":1.0}}},"9":{"df":1,"docs":{"349":{"tf":1.0}}},"df":6,"docs":{"151":{"tf":1.0},"189":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.0}}},"3":{".":{"2":{".":{"0":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"df":1,"docs":{"349":{"tf":1.0}}},"2":{"df":1,"docs":{"349":{"tf":1.0}}},"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"5":{"0":{"0":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"286":{"tf":1.0},"288":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"6":{".":{"3":{"df":2,"docs":{"288":{"tf":1.0},"291":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":1,"docs":{"199":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":3,"docs":{"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"7":{"7":{"df":1,"docs":{"349":{"tf":1.4142135623730951}}},"df":3,"docs":{"292":{"tf":1.0},"313":{"tf":1.0},"84":{"tf":2.0}},"t":{"1":{"0":{":":{"0":{"0":{":":{"1":{"5":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}}},"6":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.0}}}},"7":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":2.449489742783178}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{":":{"0":{"0":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"0":{":":{"0":{"0":{"df":0,"docs":{},"z":{"df":1,"docs":{"293":{"tf":1.4142135623730951}}}},"1":{"df":0,"docs":{},"z":{"df":1,"docs":{"293":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"8":{".":{"4":{"2":{"df":1,"docs":{"289":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"2":{"df":0,"docs":{},"m":{"df":1,"docs":{"292":{"tf":1.0}}}},"df":0,"docs":{}},"7":{".":{"4":{"2":{"df":1,"docs":{"293":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"286":{"tf":1.0}}},"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{".":{"0":{"/":{"2":{"4":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"7":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"\\\\":{".":{"0":{"0":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"4":{"b":{"df":0,"docs":{},"|":{"d":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}}},"d":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"8":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"9":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"/":{"4":{"\\\\":{".":{"0":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}},"b":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"c":{"df":2,"docs":{"107":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951}}},"d":{"df":3,"docs":{"108":{"tf":1.4142135623730951},"127":{"tf":1.0},"189":{"tf":1.0}}},"df":35,"docs":{"103":{"tf":1.4142135623730951},"105":{"tf":1.4142135623730951},"127":{"tf":1.0},"146":{"tf":1.4142135623730951},"163":{"tf":1.0},"164":{"tf":1.0},"169":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"188":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"202":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"233":{"tf":1.4142135623730951},"244":{"tf":1.0},"288":{"tf":1.4142135623730951},"291":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":1.7320508075688772},"316":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951},"346":{"tf":2.23606797749979},"349":{"tf":3.605551275463989},"352":{"tf":2.23606797749979},"357":{"tf":1.4142135623730951},"380":{"tf":1.0},"389":{"tf":1.4142135623730951},"423":{"tf":1.4142135623730951},"76":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"319":{"tf":1.0}}}},"h":{"df":4,"docs":{"121":{"tf":1.0},"127":{"tf":1.0},"189":{"tf":2.6457513110645907},"208":{"tf":2.8284271247461903}}},"m":{"df":1,"docs":{"189":{"tf":1.0}}},"w":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}}},"2":{".":{"0":{"5":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}},"1":{"df":2,"docs":{"171":{"tf":1.4142135623730951},"392":{"tf":1.4142135623730951}}},"2":{"df":3,"docs":{"172":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951},"403":{"tf":1.0}}},"3":{"df":2,"docs":{"173":{"tf":1.4142135623730951},"394":{"tf":1.4142135623730951}}},"4":{"3":{".":{"0":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"174":{"tf":1.4142135623730951}}},"5":{"df":1,"docs":{"175":{"tf":1.4142135623730951}}},"df":0,"docs":{},"x":{"df":1,"docs":{"286":{"tf":1.0}}}},"/":{"2":{"df":1,"docs":{"291":{"tf":1.0}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"193":{"tf":1.0}}},"df":3,"docs":{"119":{"tf":1.0},"316":{"tf":1.4142135623730951},"426":{"tf":1.0}}},"2":{"2":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"df":18,"docs":{"103":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"109":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.4142135623730951},"124":{"tf":1.0},"127":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"208":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}},"4":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}},"6":{"df":5,"docs":{"20":{"tf":1.0},"293":{"tf":2.0},"362":{"tf":1.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"3":{".":{"0":{".":{"1":{"1":{"3":{".":{"4":{"2":{"df":1,"docs":{"207":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"8":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":9,"docs":{"1":{"tf":1.0},"15":{"tf":1.0},"202":{"tf":1.0},"207":{"tf":1.0},"326":{"tf":1.0},"357":{"tf":1.0},"7":{"tf":1.4142135623730951},"73":{"tf":1.0},"85":{"tf":1.0}}},"2":{",":{"2":{"2":{"2":{"2":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"0":{"4":{"df":2,"docs":{"151":{"tf":1.0},"81":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"0":{"0":{"df":1,"docs":{"104":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"2":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":18,"docs":{"1":{"tf":1.0},"104":{"tf":1.0},"121":{"tf":1.4142135623730951},"134":{"tf":1.4142135623730951},"16":{"tf":1.0},"187":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"287":{"tf":1.0},"300":{"tf":1.0},"326":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"424":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951}},"}":{":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"3":{"df":1,"docs":{"326":{"tf":1.0}}},"df":0,"docs":{}},"6":{".":{"0":{"0":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"294":{"tf":1.0}}},"\\\\":{"b":{"df":0,"docs":{},"|":{":":{"2":{"0":{"2":{"2":{"\\\\":{"b":{"df":2,"docs":{"105":{"tf":1.0},"122":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"2":{"2":{"\\\\":{"b":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":17,"docs":{"102":{"tf":1.0},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"107":{"tf":2.449489742783178},"120":{"tf":1.4142135623730951},"121":{"tf":2.0},"122":{"tf":2.23606797749979},"124":{"tf":1.0},"134":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":1.0},"187":{"tf":1.0},"23":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"3":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"4":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"4":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"81":{"tf":1.0}},"h":{"df":2,"docs":{"189":{"tf":1.7320508075688772},"208":{"tf":1.4142135623730951}}}},"5":{"6":{"df":3,"docs":{"243":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0}}},"df":2,"docs":{"24":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"362":{"tf":1.0}}},"8":{".":{"0":{".":{"1":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},">":{"&":{"1":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"122":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"\\\\":{".":{"1":{"df":0,"docs":{},"|":{"df":0,"docs":{},"l":{"df":0,"docs":{},"m":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"/":{"0":{"\\\\":{".":{"2":{"df":0,"docs":{},"|":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"df":0,"docs":{},"p":{"\\\\":{":":{"\\\\":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"/":{"5":{"\\\\":{".":{"8":{"0":{"3":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"6":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"/":{"0":{"\\\\":{".":{"2":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"z":{"df":0,"docs":{},"|":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"h":{"a":{"0":{"df":0,"docs":{},"s":{"/":{"2":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"d":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":33,"docs":{"106":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"147":{"tf":1.4142135623730951},"16":{"tf":1.0},"163":{"tf":1.0},"165":{"tf":1.0},"170":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"189":{"tf":2.23606797749979},"205":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.7320508075688772},"239":{"tf":1.4142135623730951},"244":{"tf":1.0},"289":{"tf":1.4142135623730951},"293":{"tf":1.0},"317":{"tf":2.0},"319":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.7320508075688772},"349":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.4142135623730951},"357":{"tf":1.4142135623730951},"380":{"tf":1.0},"391":{"tf":1.4142135623730951},"424":{"tf":1.4142135623730951},"76":{"tf":1.0},"84":{"tf":1.7320508075688772},"85":{"tf":2.0},"96":{"tf":1.0}},"f":{"a":{"df":17,"docs":{"10":{"tf":1.0},"13":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"18":{"tf":2.23606797749979},"217":{"tf":1.7320508075688772},"218":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"281":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0},"432":{"tf":1.7320508075688772},"433":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"g":{"df":2,"docs":{"133":{"tf":1.0},"202":{"tf":1.0}}},"h":{"0":{"0":{"df":1,"docs":{"446":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951}}}},"3":{".":{"1":{"df":3,"docs":{"177":{"tf":1.4142135623730951},"191":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951}}},"2":{"df":3,"docs":{"178":{"tf":1.4142135623730951},"192":{"tf":1.4142135623730951},"397":{"tf":1.4142135623730951}}},"3":{"df":2,"docs":{"179":{"tf":1.4142135623730951},"193":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"180":{"tf":1.4142135623730951},"194":{"tf":1.4142135623730951}}},"5":{"df":2,"docs":{"181":{"tf":1.4142135623730951},"195":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"196":{"tf":1.4142135623730951}}},"7":{"df":1,"docs":{"197":{"tf":1.4142135623730951}}},"8":{"df":1,"docs":{"198":{"tf":1.4142135623730951}}},"9":{"df":2,"docs":{"199":{"tf":1.4142135623730951},"84":{"tf":1.0}}},"df":0,"docs":{}},"/":{"3":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"1":{"df":2,"docs":{"133":{"tf":1.0},"97":{"tf":1.0}}},"2":{"df":4,"docs":{"119":{"tf":1.0},"348":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}},"df":15,"docs":{"121":{"tf":1.0},"18":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"189":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":1.0},"23":{"tf":1.0},"414":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.4142135623730951},"81":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0}},"m":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}},"2":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}},"6":{"8":{"/":{"8":{"7":{"6":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"111":{"tf":1.4142135623730951}}},"b":{"df":1,"docs":{"112":{"tf":1.4142135623730951}}},"c":{"df":1,"docs":{"113":{"tf":1.4142135623730951}}},"df":29,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"110":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"148":{"tf":1.4142135623730951},"165":{"tf":1.0},"176":{"tf":1.4142135623730951},"189":{"tf":2.0},"19":{"tf":1.4142135623730951},"190":{"tf":1.4142135623730951},"205":{"tf":1.0},"208":{"tf":2.0},"244":{"tf":1.4142135623730951},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"349":{"tf":1.7320508075688772},"357":{"tf":1.0},"380":{"tf":1.0},"395":{"tf":1.4142135623730951},"425":{"tf":1.4142135623730951},"72":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.4142135623730951},"96":{"tf":1.0}},"s":{"df":1,"docs":{"292":{"tf":1.0}}},"x":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"×":{"/":{"2":{"4":{"df":0,"docs":{},"h":{"df":1,"docs":{"208":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"4":{".":{"1":{"df":3,"docs":{"201":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"399":{"tf":1.4142135623730951}}},"2":{"0":{"df":1,"docs":{"289":{"tf":1.0}}},"df":3,"docs":{"202":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"400":{"tf":1.4142135623730951}}},"3":{"df":3,"docs":{"203":{"tf":1.4142135623730951},"353":{"tf":1.4142135623730951},"401":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"354":{"tf":1.4142135623730951},"402":{"tf":1.4142135623730951}}},"5":{"df":1,"docs":{"355":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"/":{"4":{"df":1,"docs":{"85":{"tf":1.0}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},":":{"4":{"0":{"0":{"0":{"df":2,"docs":{"84":{"tf":1.0},"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":12,"docs":{"1":{"tf":1.0},"134":{"tf":1.4142135623730951},"16":{"tf":1.0},"287":{"tf":1.0},"326":{"tf":1.0},"375":{"tf":1.0},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"88":{"tf":2.23606797749979}},"|":{"2":{"2":{"2":{"2":{"df":1,"docs":{"113":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"1":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"313":{"tf":1.0},"326":{"tf":1.0},"88":{"tf":1.0}}},"df":0,"docs":{}},"1":{"/":{"4":{"0":{"3":{"/":{"4":{"2":{"2":{"/":{"4":{"2":{"9":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.0},"192":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"184":{"tf":1.0},"196":{"tf":1.0},"319":{"tf":1.0},"396":{"tf":1.0}},"|":{"4":{"0":{"3":{"df":2,"docs":{"192":{"tf":1.0},"195":{"tf":1.4142135623730951}},"|":{"4":{"2":{"2":{"df":0,"docs":{},"|":{"4":{"2":{"9":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"3":{"df":2,"docs":{"196":{"tf":1.0},"396":{"tf":1.0}}},"4":{"df":1,"docs":{"21":{"tf":1.0}}},"9":{"6":{"df":3,"docs":{"383":{"tf":1.0},"426":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":1,"docs":{"184":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"23":{"tf":1.0}}},"df":3,"docs":{"293":{"tf":1.0},"356":{"tf":1.0},"85":{"tf":1.0}}},"4":{"3":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"df":6,"docs":{"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"202":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}},"5":{"df":5,"docs":{"278":{"tf":1.0},"286":{"tf":1.0},"349":{"tf":1.4142135623730951},"73":{"tf":1.0},"89":{"tf":1.0}},"k":{"df":1,"docs":{"292":{"tf":1.0}}}},"7":{"df":1,"docs":{"207":{"tf":1.0}}},"a":{"7":{"df":0,"docs":{},"f":{"2":{"c":{"9":{"df":0,"docs":{},"e":{"1":{"b":{"8":{"d":{"3":{"df":0,"docs":{},"f":{"6":{"a":{"0":{"df":0,"docs":{},"e":{"5":{"c":{"2":{"b":{"9":{"d":{"7":{"df":0,"docs":{},"f":{"4":{"a":{"1":{"df":0,"docs":{},"e":{"8":{"c":{"3":{"b":{"6":{"d":{"9":{"df":0,"docs":{},"f":{"2":{"a":{"5":{"df":0,"docs":{},"e":{"8":{"c":{"1":{"b":{"4":{"d":{"7":{"df":0,"docs":{},"f":{"0":{"a":{"3":{"df":0,"docs":{},"e":{"6":{"c":{"9":{"b":{"2":{"d":{"5":{"df":0,"docs":{},"f":{"8":{"a":{"df":1,"docs":{"290":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"115":{"tf":1.4142135623730951}}},"b":{"df":1,"docs":{"116":{"tf":1.4142135623730951}}},"c":{"df":1,"docs":{"117":{"tf":1.4142135623730951}}},"d":{"df":1,"docs":{"118":{"tf":1.4142135623730951}}},"df":32,"docs":{"1":{"tf":1.0},"114":{"tf":1.4142135623730951},"149":{"tf":1.4142135623730951},"150":{"tf":1.0},"182":{"tf":1.4142135623730951},"184":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"200":{"tf":1.4142135623730951},"205":{"tf":1.0},"208":{"tf":1.0},"245":{"tf":1.4142135623730951},"277":{"tf":1.0},"281":{"tf":1.0},"291":{"tf":1.4142135623730951},"319":{"tf":1.4142135623730951},"350":{"tf":1.4142135623730951},"351":{"tf":1.0},"354":{"tf":1.0},"357":{"tf":1.0},"380":{"tf":1.0},"389":{"tf":1.0},"398":{"tf":1.4142135623730951},"416":{"tf":1.0},"426":{"tf":1.4142135623730951},"53":{"tf":1.7320508075688772},"54":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.4142135623730951},"9":{"tf":1.0}},"e":{"df":1,"docs":{"119":{"tf":1.4142135623730951}}},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"191":{"tf":1.0}}}}},"5":{"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"205":{"tf":1.4142135623730951}}},"df":1,"docs":{"21":{"tf":1.0}}},"df":0,"docs":{}},"4":{"3":{"2":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},"df":6,"docs":{"109":{"tf":1.0},"134":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"121":{"tf":1.4142135623730951}}},"b":{"df":2,"docs":{"122":{"tf":1.4142135623730951},"370":{"tf":1.0}}},"c":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}},"df":22,"docs":{"107":{"tf":1.4142135623730951},"120":{"tf":1.4142135623730951},"127":{"tf":1.7320508075688772},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.4142135623730951},"165":{"tf":1.0},"186":{"tf":1.4142135623730951},"189":{"tf":2.6457513110645907},"202":{"tf":1.0},"204":{"tf":1.4142135623730951},"208":{"tf":2.449489742783178},"21":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"290":{"tf":1.0},"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"356":{"tf":1.4142135623730951},"380":{"tf":1.0},"403":{"tf":1.4142135623730951},"427":{"tf":1.4142135623730951},"84":{"tf":1.0}},"m":{"df":1,"docs":{"189":{"tf":1.7320508075688772}}},"s":{"df":1,"docs":{"84":{"tf":1.0}}},"x":{"df":2,"docs":{"356":{"tf":1.4142135623730951},"357":{"tf":1.0}}}},"6":{"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"df":3,"docs":{"102":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0}}},"df":2,"docs":{"349":{"tf":1.0},"351":{"tf":1.0}}},"1":{"2":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"3":{"7":{"9":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"df":2,"docs":{"102":{"tf":1.0},"291":{"tf":1.0}}},"\\\\":{".":{"0":{"0":{"\\\\":{".":{"8":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":15,"docs":{"124":{"tf":1.4142135623730951},"146":{"tf":1.0},"157":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"189":{"tf":1.0},"207":{"tf":1.4142135623730951},"208":{"tf":1.0},"250":{"tf":1.4142135623730951},"276":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.4142135623730951},"298":{"tf":1.0},"357":{"tf":1.4142135623730951},"428":{"tf":1.4142135623730951}}},"7":{"1":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"a":{"df":1,"docs":{"126":{"tf":1.4142135623730951}}},"b":{"df":1,"docs":{"127":{"tf":1.4142135623730951}}},"df":10,"docs":{"125":{"tf":1.4142135623730951},"161":{"tf":1.4142135623730951},"166":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.7320508075688772},"243":{"tf":1.0},"251":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"429":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"8":{".":{"1":{"df":1,"docs":{"210":{"tf":1.4142135623730951}}},"2":{"df":1,"docs":{"211":{"tf":1.4142135623730951}}},"3":{"df":1,"docs":{"212":{"tf":1.4142135623730951}}},"4":{"df":1,"docs":{"213":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"0":{",":{"4":{"4":{"3":{"df":1,"docs":{"208":{"tf":2.6457513110645907}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"8":{"0":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"1":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}},"df":5,"docs":{"124":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"187":{"tf":1.0},"97":{"tf":1.0}}},"1":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"a":{"df":1,"docs":{"129":{"tf":1.4142135623730951}}},"b":{"df":1,"docs":{"130":{"tf":1.4142135623730951}}},"c":{"df":1,"docs":{"131":{"tf":1.4142135623730951}}},"df":10,"docs":{"128":{"tf":1.4142135623730951},"162":{"tf":1.4142135623730951},"189":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.4142135623730951},"214":{"tf":1.0},"243":{"tf":1.0},"256":{"tf":1.4142135623730951},"354":{"tf":1.0},"84":{"tf":1.0}},"f":{"4":{"0":{"df":0,"docs":{},"f":{"c":{"5":{"9":{"df":0,"docs":{},"f":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"9":{"0":{"df":6,"docs":{"278":{"tf":1.0},"301":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}},"8":{"df":1,"docs":{"292":{"tf":1.0}}},"df":6,"docs":{"104":{"tf":1.0},"132":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"189":{"tf":1.0},"208":{"tf":1.0},"214":{"tf":1.7320508075688772}}},"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"d":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"=":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"a":{"1":{"[":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"b":{"2":{"c":{"3":{"d":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"[":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"356":{"tf":1.0}}},"3":{"[":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"72":{"tf":1.0}}}}},"a":{"a":{"a":{"c":{"3":{"df":0,"docs":{},"n":{"df":0,"docs":{},"z":{"a":{"c":{"1":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"d":{"df":0,"docs":{},"i":{"1":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"5":{"a":{"a":{"a":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"c":{"d":{"1":{"2":{"3":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"146":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"171":{"tf":1.4142135623730951},"183":{"tf":1.0},"197":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"244":{"tf":1.0},"363":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"192":{"tf":1.0},"196":{"tf":1.0},"208":{"tf":1.0}},"s":{"df":5,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"192":{"tf":1.7320508075688772},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}},"u":{"df":0,"docs":{},"é":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":23,"docs":{"1":{"tf":1.0},"14":{"tf":1.0},"179":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":2.449489742783178},"291":{"tf":1.0},"318":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"333":{"tf":1.0},"37":{"tf":1.7320508075688772},"38":{"tf":1.0},"424":{"tf":2.23606797749979},"425":{"tf":2.23606797749979},"427":{"tf":1.0},"428":{"tf":1.7320508075688772},"449":{"tf":1.0},"72":{"tf":1.0},"8":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"372":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.7320508075688772},"428":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"22":{"tf":1.7320508075688772},"299":{"tf":1.7320508075688772},"87":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"è":{"d":{"df":1,"docs":{"17":{"tf":1.4142135623730951}}},"df":5,"docs":{"101":{"tf":1.0},"171":{"tf":1.0},"174":{"tf":1.0},"330":{"tf":1.0},"97":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"332":{"tf":1.4142135623730951},"80":{"tf":1.0}}},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":5,"docs":{"108":{"tf":1.0},"117":{"tf":1.0},"129":{"tf":1.0},"134":{"tf":1.0},"95":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"102":{"tf":1.0},"107":{"tf":1.0},"188":{"tf":1.0},"204":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{")":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":9,"docs":{"189":{"tf":1.0},"213":{"tf":1.0},"243":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"319":{"tf":1.0},"376":{"tf":1.0},"393":{"tf":1.0}}}},"v":{"df":13,"docs":{"13":{"tf":1.4142135623730951},"14":{"tf":1.0},"168":{"tf":1.4142135623730951},"172":{"tf":1.0},"173":{"tf":1.7320508075688772},"18":{"tf":1.7320508075688772},"189":{"tf":1.4142135623730951},"211":{"tf":1.0},"23":{"tf":1.7320508075688772},"243":{"tf":2.449489742783178},"378":{"tf":1.0},"380":{"tf":1.0},"443":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":1,"docs":{"353":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"/":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"é":{"df":5,"docs":{"18":{"tf":1.4142135623730951},"186":{"tf":1.0},"204":{"tf":1.0},"22":{"tf":1.4142135623730951},"326":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":6,"docs":{"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":4,"docs":{"104":{"tf":1.0},"348":{"tf":1.4142135623730951},"351":{"tf":1.0},"356":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"113":{"tf":1.0},"199":{"tf":1.0},"447":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"291":{"tf":1.0},"442":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":2,"docs":{"450":{"tf":1.0},"76":{"tf":1.0}}}}}},"d":{"df":4,"docs":{"123":{"tf":1.0},"166":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}},"df":2,"docs":{"243":{"tf":1.0},"292":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"332":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":6,"docs":{"232":{"tf":1.0},"240":{"tf":1.0},"249":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"=":{"<":{"a":{"c":{"df":0,"docs":{},"m":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"$":{"df":0,"docs":{},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"1":{"2":{"3":{"df":1,"docs":{"290":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":3,"docs":{"102":{"tf":1.4142135623730951},"238":{"tf":1.0},"293":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"w":{"d":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"238":{"tf":1.0},"293":{"tf":1.0}},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"102":{"tf":1.0},"290":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":37,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.7320508075688772},"109":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0},"134":{"tf":1.0},"178":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"208":{"tf":1.4142135623730951},"223":{"tf":1.7320508075688772},"224":{"tf":1.0},"232":{"tf":1.0},"237":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"293":{"tf":1.4142135623730951},"313":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.0},"328":{"tf":1.0},"332":{"tf":2.449489742783178},"375":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"86":{"tf":2.0},"87":{"tf":1.0},"95":{"tf":1.4142135623730951},"97":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":9,"docs":{"240":{"tf":1.0},"251":{"tf":1.4142135623730951},"290":{"tf":1.0},"293":{"tf":1.0},"72":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":2.449489742783178},"87":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"125":{"tf":1.0},"210":{"tf":1.0},"451":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"/":{"0":{"1":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":8,"docs":{"179":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"314":{"tf":1.0},"332":{"tf":1.4142135623730951},"375":{"tf":1.0},"71":{"tf":1.0},"86":{"tf":1.4142135623730951}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"424":{"tf":1.4142135623730951},"425":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":14,"docs":{"106":{"tf":1.0},"146":{"tf":1.0},"18":{"tf":2.23606797749979},"19":{"tf":1.7320508075688772},"199":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"294":{"tf":1.0},"299":{"tf":1.0},"426":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"é":{"df":2,"docs":{"21":{"tf":1.0},"237":{"tf":1.0}}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"150":{"tf":1.0},"153":{"tf":1.0},"172":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":1.0}},"|":{"df":0,"docs":{},"v":{"a":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"v":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"\\\\":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"1":{"\\\\":{".":{"0":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"393":{"tf":1.0}}}},"o":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":27,"docs":{"121":{"tf":1.4142135623730951},"129":{"tf":1.4142135623730951},"13":{"tf":1.4142135623730951},"16":{"tf":1.0},"166":{"tf":1.0},"172":{"tf":1.0},"180":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"202":{"tf":1.4142135623730951},"21":{"tf":1.0},"214":{"tf":1.4142135623730951},"257":{"tf":1.7320508075688772},"258":{"tf":1.7320508075688772},"259":{"tf":1.4142135623730951},"279":{"tf":1.7320508075688772},"315":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951},"335":{"tf":1.7320508075688772},"336":{"tf":1.0},"337":{"tf":1.7320508075688772},"338":{"tf":1.0},"339":{"tf":1.7320508075688772},"340":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"294":{"tf":1.0},"296":{"tf":1.0}}}},"é":{"df":3,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"426":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"205":{"tf":1.0},"443":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":3,"docs":{"327":{"tf":1.0},"328":{"tf":1.4142135623730951},"428":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"424":{"tf":1.4142135623730951},"425":{"tf":1.0},"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"l":{"=":{"(":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"166":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"173":{"tf":1.0},"253":{"tf":1.0},"351":{"tf":1.0},"421":{"tf":1.4142135623730951}}},"z":{"df":1,"docs":{"287":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":7,"docs":{"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"316":{"tf":1.4142135623730951},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"243":{"tf":1.0},"249":{"tf":1.4142135623730951},"255":{"tf":1.0}}}}}}}}}},"df":2,"docs":{"108":{"tf":2.0},"173":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}},"e":{":":{"3":{"df":1,"docs":{"164":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"348":{"tf":1.0},"414":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":5,"docs":{"199":{"tf":1.0},"23":{"tf":1.0},"316":{"tf":1.0},"355":{"tf":1.0},"444":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":5,"docs":{"176":{"tf":1.0},"181":{"tf":1.0},"184":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.0}},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"319":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"l":{"df":3,"docs":{"173":{"tf":1.0},"317":{"tf":1.4142135623730951},"319":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":1,"docs":{"331":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"df":22,"docs":{"1":{"tf":1.0},"264":{"tf":1.7320508075688772},"265":{"tf":1.0},"280":{"tf":1.0},"383":{"tf":1.7320508075688772},"388":{"tf":1.7320508075688772},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.7320508075688772},"392":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"75":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":4,"docs":{"376":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}}},"p":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"199":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"196":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"v":{"1":{"/":{"(":{"?":{"!":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"192":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"180":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"195":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"195":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}}},"df":4,"docs":{"192":{"tf":1.0},"196":{"tf":1.4142135623730951},"202":{"tf":1.0},"375":{"tf":1.0}}},"df":0,"docs":{}}},"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":35,"docs":{"179":{"tf":1.7320508075688772},"184":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":2.8284271247461903},"192":{"tf":2.0},"196":{"tf":1.4142135623730951},"199":{"tf":1.0},"2":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.4142135623730951},"205":{"tf":1.4142135623730951},"208":{"tf":2.23606797749979},"279":{"tf":1.0},"280":{"tf":2.0},"287":{"tf":1.0},"3":{"tf":1.0},"316":{"tf":1.7320508075688772},"318":{"tf":1.0},"319":{"tf":1.0},"343":{"tf":1.7320508075688772},"344":{"tf":1.0},"375":{"tf":2.8284271247461903},"384":{"tf":1.7320508075688772},"385":{"tf":1.0},"404":{"tf":1.7320508075688772},"405":{"tf":1.0},"408":{"tf":1.7320508075688772},"409":{"tf":1.0},"414":{"tf":1.0},"449":{"tf":2.6457513110645907},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.0}}},"p":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"232":{"tf":1.0},"239":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.0},"255":{"tf":1.0},"75":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"î":{"df":0,"docs":{},"t":{"df":2,"docs":{"175":{"tf":1.0},"20":{"tf":1.0}},"r":{"a":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"446":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"89":{"tf":1.0}}}}},"t":{"df":1,"docs":{"82":{"tf":1.0}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"363":{"tf":1.0}}}}}}},"u":{"df":1,"docs":{"293":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":7,"docs":{"316":{"tf":1.4142135623730951},"319":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":1.7320508075688772},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"87":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"294":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"244":{"tf":1.0},"319":{"tf":1.0},"360":{"tf":1.0}},"é":{"df":1,"docs":{"174":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"317":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"c":{"df":6,"docs":{"178":{"tf":1.0},"18":{"tf":1.7320508075688772},"388":{"tf":1.0},"403":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0}}},"df":2,"docs":{"293":{"tf":1.0},"85":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":75,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"396":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"é":{"df":2,"docs":{"299":{"tf":1.0},"87":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"278":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"3":{"tf":1.0},"301":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"316":{"tf":1.0},"327":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"240":{"tf":1.0},"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"(":{"&":{"d":{"b":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"&":{"d":{"b":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"242":{"tf":1.0},"257":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"è":{"df":18,"docs":{"107":{"tf":1.4142135623730951},"133":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.7320508075688772},"169":{"tf":1.0},"175":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.0},"23":{"tf":1.0},"234":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"293":{"tf":1.0},"324":{"tf":1.0},"333":{"tf":1.4142135623730951},"347":{"tf":1.0},"86":{"tf":1.0}}}},"t":{"df":9,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"115":{"tf":1.4142135623730951},"126":{"tf":1.0},"133":{"tf":1.0},"167":{"tf":1.0},"188":{"tf":1.0},"213":{"tf":1.0},"288":{"tf":1.0}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}},"df":0,"docs":{}}}},"r":{"df":1,"docs":{"428":{"tf":1.0}}}},"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"237":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"df":1,"docs":{"376":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}}}}}}}},"df":3,"docs":{"244":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0}},"h":{"df":1,"docs":{"447":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":24,"docs":{"148":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"268":{"tf":1.7320508075688772},"269":{"tf":1.0},"280":{"tf":1.0},"3":{"tf":1.0},"325":{"tf":1.4142135623730951},"357":{"tf":1.0},"369":{"tf":1.7320508075688772},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.7320508075688772},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":1.0},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"v":{"df":2,"docs":{"180":{"tf":1.4142135623730951},"448":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"113":{"tf":1.0},"152":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}},"ê":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"m":{"a":{"df":2,"docs":{"375":{"tf":1.7320508075688772},"418":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":7,"docs":{"285":{"tf":1.0},"287":{"tf":1.0},"292":{"tf":1.7320508075688772},"299":{"tf":1.0},"375":{"tf":1.0},"400":{"tf":1.4142135623730951},"418":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":12,"docs":{"278":{"tf":1.0},"281":{"tf":1.0},"304":{"tf":1.7320508075688772},"305":{"tf":1.0},"316":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"328":{"tf":1.0},"352":{"tf":1.0},"359":{"tf":1.4142135623730951},"373":{"tf":1.0},"440":{"tf":1.7320508075688772},"441":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"4":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"1":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"b":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"3":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"394":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"85":{"tf":1.0},"88":{"tf":1.0}}}},"r":{"df":1,"docs":{"184":{"tf":1.0}}},"u":{"df":31,"docs":{"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.4142135623730951},"14":{"tf":1.0},"152":{"tf":1.4142135623730951},"160":{"tf":1.4142135623730951},"163":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"204":{"tf":1.0},"21":{"tf":1.0},"212":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"88":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":1,"docs":{"179":{"tf":1.0}}}},"df":0,"docs":{}}}}},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":14,"docs":{"15":{"tf":1.0},"210":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.0},"253":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"327":{"tf":1.0},"362":{"tf":1.4142135623730951},"379":{"tf":1.0},"403":{"tf":1.0},"418":{"tf":1.0},"81":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"_":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}},"df":2,"docs":{"346":{"tf":1.0},"348":{"tf":1.0}}}}}},"df":12,"docs":{"10":{"tf":1.0},"225":{"tf":1.7320508075688772},"226":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"376":{"tf":1.4142135623730951},"380":{"tf":1.0},"390":{"tf":1.4142135623730951},"393":{"tf":1.0},"416":{"tf":1.0},"447":{"tf":1.4142135623730951},"74":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"348":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"é":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":48,"docs":{"129":{"tf":1.4142135623730951},"148":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"180":{"tf":1.0},"187":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"214":{"tf":1.0},"23":{"tf":1.4142135623730951},"234":{"tf":1.0},"237":{"tf":1.0},"242":{"tf":2.0},"243":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.4142135623730951},"254":{"tf":1.0},"255":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"286":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"330":{"tf":1.4142135623730951},"332":{"tf":1.0},"347":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.4142135623730951},"382":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.0},"416":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"84":{"tf":1.0},"88":{"tf":1.0}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"133":{"tf":1.0},"183":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"’":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"354":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"449":{"tf":1.0},"451":{"tf":1.0}}},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"330":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":17,"docs":{"127":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"189":{"tf":1.7320508075688772},"192":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951},"280":{"tf":1.0},"313":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0},"424":{"tf":3.0},"429":{"tf":1.0},"445":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"197":{"tf":1.4142135623730951},"88":{"tf":1.0}},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"318":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"(":{"\'":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":10,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"314":{"tf":1.0},"330":{"tf":1.4142135623730951},"334":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0},"374":{"tf":1.4142135623730951},"9":{"tf":1.0}},"i":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0},"397":{"tf":1.0}},"é":{"df":3,"docs":{"196":{"tf":1.0},"330":{"tf":1.0},"425":{"tf":1.0}}}}}}}}},"i":{"df":1,"docs":{"18":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"o":{"_":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"175":{"tf":1.0},"319":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"173":{"tf":1.0},"183":{"tf":1.0},"199":{"tf":1.0},"243":{"tf":1.0},"317":{"tf":1.0},"412":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":85,"docs":{"11":{"tf":1.0},"118":{"tf":1.4142135623730951},"124":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.4142135623730951},"25":{"tf":1.0},"257":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"293":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"360":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"445":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}},"s":{"df":6,"docs":{"146":{"tf":1.0},"29":{"tf":1.7320508075688772},"30":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"277":{"tf":1.0},"286":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"151":{"tf":1.0},"397":{"tf":1.0}},"s":{"df":2,"docs":{"243":{"tf":1.0},"88":{"tf":1.0}},"é":{"df":1,"docs":{"166":{"tf":1.0}}}}}}},"r":{"df":4,"docs":{"106":{"tf":1.0},"156":{"tf":1.0},"290":{"tf":1.0},"88":{"tf":1.0}}}},"x":{"df":8,"docs":{"17":{"tf":1.4142135623730951},"276":{"tf":1.0},"331":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"402":{"tf":1.4142135623730951},"442":{"tf":1.0},"71":{"tf":1.0}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"116":{"tf":1.4142135623730951},"130":{"tf":1.0},"202":{"tf":1.4142135623730951}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"c":{"df":0,"docs":{},"é":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"174":{"tf":1.0},"356":{"tf":1.0}}}},"df":24,"docs":{"16":{"tf":1.0},"166":{"tf":1.0},"18":{"tf":1.0},"202":{"tf":1.0},"243":{"tf":1.4142135623730951},"277":{"tf":1.4142135623730951},"279":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"321":{"tf":1.4142135623730951},"327":{"tf":1.0},"351":{"tf":1.4142135623730951},"360":{"tf":1.0},"365":{"tf":1.7320508075688772},"366":{"tf":1.0},"388":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"6":{"tf":2.0},"72":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0},"98":{"tf":1.4142135623730951}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":127,"docs":{"1":{"tf":1.0},"100":{"tf":1.4142135623730951},"101":{"tf":1.0},"125":{"tf":1.0},"147":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"155":{"tf":1.4142135623730951},"156":{"tf":1.0},"159":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"164":{"tf":1.0},"167":{"tf":1.0},"17":{"tf":1.7320508075688772},"178":{"tf":1.0},"18":{"tf":2.0},"186":{"tf":1.0},"187":{"tf":1.7320508075688772},"188":{"tf":1.0},"189":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.4142135623730951},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.4142135623730951},"20":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"21":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.4142135623730951},"214":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"235":{"tf":1.0},"24":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"284":{"tf":2.0},"285":{"tf":1.0},"286":{"tf":1.7320508075688772},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"29":{"tf":1.7320508075688772},"290":{"tf":1.7320508075688772},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":1.7320508075688772},"301":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.4142135623730951},"320":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"330":{"tf":2.23606797749979},"331":{"tf":1.4142135623730951},"332":{"tf":1.0},"334":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"372":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"382":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.4142135623730951},"401":{"tf":1.0},"402":{"tf":1.0},"417":{"tf":1.0},"424":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"448":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"79":{"tf":1.7320508075688772},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772},"84":{"tf":1.0},"85":{"tf":1.4142135623730951},"86":{"tf":2.0},"87":{"tf":1.0},"88":{"tf":2.0},"89":{"tf":1.4142135623730951},"90":{"tf":1.7320508075688772},"91":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.0}}},"df":0,"docs":{},"z":{"df":2,"docs":{"159":{"tf":1.0},"291":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"277":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951}}}}},"r":{"df":2,"docs":{"292":{"tf":1.0},"84":{"tf":2.0}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"316":{"tf":1.4142135623730951},"318":{"tf":2.0},"328":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0}}}}},"df":0,"docs":{}},"x":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{":":{":":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":7,"docs":{"134":{"tf":1.0},"237":{"tf":1.0},"279":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0}}}}},"z":{"df":2,"docs":{"146":{"tf":1.0},"165":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"b":{"1":{"[":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":1,"docs":{"356":{"tf":1.4142135623730951}}},"3":{"[":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"356":{"tf":1.0}}},"4":{"[":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"5":{"[":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"356":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"0":{"1":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"127":{"tf":1.7320508075688772},"134":{"tf":1.4142135623730951},"189":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"446":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"446":{"tf":1.0}}}}}},"/":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"448":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"448":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":2,"docs":{"2":{"tf":1.0},"448":{"tf":1.4142135623730951}}}}}},"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":2.0},"204":{"tf":1.0},"208":{"tf":1.0}},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"199":{"tf":2.23606797749979}}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":2,"docs":{"189":{"tf":1.0},"199":{"tf":1.0}},"g":{"df":2,"docs":{"318":{"tf":1.0},"377":{"tf":1.0}}}},"df":1,"docs":{"374":{"tf":1.0}},"n":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"127":{"tf":1.4142135623730951},"188":{"tf":1.0},"189":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}},"s":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":6,"docs":{"189":{"tf":1.0},"206":{"tf":1.7320508075688772},"207":{"tf":2.23606797749979},"208":{"tf":2.0},"213":{"tf":1.0},"390":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"124":{"tf":1.0},"424":{"tf":1.0}}}},"i":{"df":3,"docs":{"189":{"tf":1.4142135623730951},"207":{"tf":1.0},"390":{"tf":1.0}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"206":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":3.605551275463989}}}}}},"r":{".":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"df":12,"docs":{"287":{"tf":1.4142135623730951},"356":{"tf":1.7320508075688772},"357":{"tf":1.0},"376":{"tf":1.0},"419":{"tf":1.7320508075688772},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"428":{"tf":1.0},"448":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"423":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":2,"docs":{"21":{"tf":1.4142135623730951},"333":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"6":{"4":{"df":3,"docs":{"102":{"tf":1.4142135623730951},"180":{"tf":1.0},"426":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"423":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":38,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"178":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"255":{"tf":1.0},"260":{"tf":1.7320508075688772},"261":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.7320508075688772},"293":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.4142135623730951},"339":{"tf":1.7320508075688772},"340":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.4142135623730951},"373":{"tf":1.4142135623730951},"382":{"tf":1.0},"386":{"tf":1.7320508075688772},"387":{"tf":1.0},"393":{"tf":1.0},"419":{"tf":1.4142135623730951},"443":{"tf":1.0},"449":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"h":{"df":10,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"126":{"tf":1.0},"130":{"tf":1.0},"150":{"tf":1.0}},"r":{"c":{"df":1,"docs":{"166":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"c":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"y":{"df":2,"docs":{"150":{"tf":1.0},"166":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":7,"docs":{"177":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.4142135623730951},"396":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"293":{"tf":1.0},"357":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":10,"docs":{"100":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.4142135623730951},"279":{"tf":1.0},"3":{"tf":1.0},"356":{"tf":1.0},"5":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"98":{"tf":1.0}}}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"è":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"2":{"tf":1.0},"4":{"tf":1.0},"442":{"tf":1.4142135623730951}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"133":{"tf":1.7320508075688772},"17":{"tf":1.0},"20":{"tf":1.0},"293":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"442":{"tf":1.0}}}}}}}},"n":{"/":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"317":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"370":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"148":{"tf":1.0},"151":{"tf":1.0},"184":{"tf":1.0},"287":{"tf":1.4142135623730951},"356":{"tf":1.0},"370":{"tf":1.0},"373":{"tf":1.0},"420":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"201":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"d":{"df":4,"docs":{"187":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"96":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":1,"docs":{"370":{"tf":2.449489742783178}}},"t":{"df":2,"docs":{"291":{"tf":1.0},"383":{"tf":1.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"e":{"c":{"d":{"df":0,"docs":{},"s":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"b":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"419":{"tf":1.0}}},"c":{"df":2,"docs":{"121":{"tf":1.4142135623730951},"202":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"214":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"284":{"tf":1.0}}}},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"166":{"tf":1.4142135623730951},"183":{"tf":1.0},"400":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"167":{"tf":1.0},"214":{"tf":1.0}}}}}}}},"o":{"b":{"df":2,"docs":{"327":{"tf":1.0},"328":{"tf":1.0}}},"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"133":{"tf":1.0},"377":{"tf":1.0}}}},"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"179":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":4,"docs":{"169":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0}}},"n":{"df":2,"docs":{"17":{"tf":1.0},"347":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"n":{"df":3,"docs":{"23":{"tf":1.0},"76":{"tf":1.0},"80":{"tf":1.0}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"257":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"234":{"tf":1.0},"242":{"tf":1.0},"254":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"t":{"df":1,"docs":{"199":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"399":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":7,"docs":{"173":{"tf":1.0},"21":{"tf":1.0},"294":{"tf":1.4142135623730951},"301":{"tf":1.0},"373":{"tf":1.7320508075688772},"375":{"tf":1.0},"6":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"288":{"tf":1.0}}}},"i":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"d":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"377":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"380":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":4,"docs":{"189":{"tf":1.7320508075688772},"195":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":2.23606797749979}}}}}},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"184":{"tf":1.0},"397":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"d":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"447":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"=":{"1":{"df":1,"docs":{"112":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":26,"docs":{"100":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951},"104":{"tf":1.0},"106":{"tf":1.0},"110":{"tf":1.4142135623730951},"112":{"tf":1.4142135623730951},"113":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"160":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.7320508075688772},"172":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"278":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"296":{"tf":1.7320508075688772},"301":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"389":{"tf":1.0},"444":{"tf":1.0},"447":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}},"df":5,"docs":{"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"177":{"tf":1.0},"183":{"tf":1.0},"414":{"tf":3.3166247903554}}}},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"168":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"=":{"2":{"0":{"df":1,"docs":{"202":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"df":1,"docs":{"202":{"tf":1.0}}},"df":1,"docs":{"202":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.4142135623730951}}}}}},"y":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"396":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":5,"docs":{"180":{"tf":1.0},"294":{"tf":1.0},"353":{"tf":1.0},"373":{"tf":1.0},"426":{"tf":1.0}}}}},"â":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"276":{"tf":1.0}}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"c":{"1":{"[":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"2":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"3":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"4":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"5":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"6":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"[":{"0":{"2":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"420":{"tf":1.0},"82":{"tf":1.4142135623730951}}}},"d":{"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":22,"docs":{"104":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.7320508075688772},"167":{"tf":1.0},"175":{"tf":1.0},"187":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"277":{"tf":1.4142135623730951},"356":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"84":{"tf":1.0}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"243":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"148":{"tf":1.0},"174":{"tf":1.7320508075688772},"296":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.4142135623730951},"413":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.7320508075688772}}}}}},"n":{"\'":{"df":0,"docs":{},"t":{"df":1,"docs":{"300":{"tf":1.0}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"425":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"347":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"377":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"173":{"tf":1.0},"175":{"tf":1.4142135623730951},"183":{"tf":1.4142135623730951},"317":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"304":{"tf":1.7320508075688772},"305":{"tf":1.0}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"243":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":16,"docs":{"113":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":2.0},"252":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.4142135623730951},"293":{"tf":1.0},"296":{"tf":1.4142135623730951},"299":{"tf":1.0},"312":{"tf":1.7320508075688772},"320":{"tf":2.23606797749979},"321":{"tf":1.7320508075688772},"327":{"tf":1.0},"389":{"tf":1.7320508075688772},"390":{"tf":1.4142135623730951},"403":{"tf":1.7320508075688772}}}}},"s":{"c":{"a":{"d":{"df":1,"docs":{"360":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":10,"docs":{"442":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"451":{"tf":1.0}}}}}}},"df":6,"docs":{"102":{"tf":1.0},"163":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"23":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"394":{"tf":1.4142135623730951},"395":{"tf":1.4142135623730951},"396":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"s":{"df":6,"docs":{"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}}},"d":{"df":9,"docs":{"109":{"tf":1.0},"123":{"tf":1.0},"158":{"tf":1.0},"166":{"tf":1.0},"178":{"tf":1.0},"289":{"tf":1.0},"291":{"tf":1.4142135623730951},"294":{"tf":1.0},"83":{"tf":1.0}},"n":{"/":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":4,"docs":{"214":{"tf":1.7320508075688772},"292":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.4142135623730951}}}},"df":9,"docs":{"104":{"tf":1.0},"123":{"tf":2.0},"185":{"tf":1.4142135623730951},"19":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"394":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":120,"docs":{"1":{"tf":1.4142135623730951},"11":{"tf":1.0},"113":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"161":{"tf":1.7320508075688772},"168":{"tf":1.4142135623730951},"177":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"231":{"tf":1.0},"237":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"282":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"3":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"347":{"tf":1.0},"35":{"tf":1.0},"352":{"tf":1.0},"358":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"379":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"388":{"tf":1.4142135623730951},"389":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.4142135623730951},"449":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.7320508075688772},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.4142135623730951},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.7320508075688772},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":2.0},"90":{"tf":1.0},"92":{"tf":1.0}},"l":{"a":{"df":2,"docs":{"148":{"tf":1.0},"417":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":1,"docs":{"153":{"tf":1.0}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"153":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"249":{"tf":1.0}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"df":5,"docs":{"101":{"tf":1.0},"115":{"tf":2.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"129":{"tf":1.0}}}}},"df":1,"docs":{"133":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"117":{"tf":1.4142135623730951},"129":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"t":{"df":154,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"176":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"20":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"244":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"282":{"tf":1.0},"283":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.7320508075688772},"30":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"312":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"h":{"a":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":4,"docs":{"116":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"97":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"133":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"m":{"df":0,"docs":{},"p":{"df":2,"docs":{"18":{"tf":1.0},"330":{"tf":1.0}}}},"n":{"df":1,"docs":{"348":{"tf":1.7320508075688772}},"g":{"df":4,"docs":{"18":{"tf":1.0},"294":{"tf":1.0},"355":{"tf":1.0},"424":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"m":{"df":2,"docs":{"442":{"tf":1.0},"83":{"tf":1.7320508075688772}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"243":{"tf":1.0},"318":{"tf":1.0},"357":{"tf":1.0}}}}}},"r":{"df":4,"docs":{"178":{"tf":1.0},"214":{"tf":1.0},"319":{"tf":1.0},"350":{"tf":1.4142135623730951}}},"z":{"df":2,"docs":{"83":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":6,"docs":{"169":{"tf":1.0},"183":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.4142135623730951},"356":{"tf":1.0},"357":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":1,"docs":{"88":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":20,"docs":{"147":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.0},"173":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"186":{"tf":1.0},"205":{"tf":1.7320508075688772},"213":{"tf":1.0},"240":{"tf":1.0},"244":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.0},"312":{"tf":1.0},"355":{"tf":1.0},"388":{"tf":1.0},"397":{"tf":1.4142135623730951},"403":{"tf":1.0},"442":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"r":{"df":1,"docs":{"184":{"tf":1.0}},"g":{"df":6,"docs":{"133":{"tf":1.0},"150":{"tf":1.0},"174":{"tf":1.0},"293":{"tf":1.0},"327":{"tf":1.0},"414":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"236":{"tf":1.4142135623730951}}}}}},"r":{"df":1,"docs":{"319":{"tf":1.0}}}},"é":{"df":5,"docs":{"166":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"254":{"tf":1.0},"318":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"327":{"tf":1.0},"328":{"tf":1.0}}}}},"u":{"d":{"df":2,"docs":{"232":{"tf":1.0},"240":{"tf":1.0}}},"df":0,"docs":{}},"î":{"df":0,"docs":{},"n":{"df":2,"docs":{"355":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"183":{"tf":1.0},"193":{"tf":1.0}},"k":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":1,"docs":{"330":{"tf":1.0}}}}},"df":11,"docs":{"174":{"tf":1.4142135623730951},"317":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"403":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"186":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951},"403":{"tf":1.7320508075688772}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"148":{"tf":1.0},"161":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":20,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"277":{"tf":1.4142135623730951},"284":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"158":{"tf":1.0}}}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"159":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":11,"docs":{"102":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"166":{"tf":1.4142135623730951},"172":{"tf":1.0},"19":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"2":{"tf":1.0}}}},"r":{"df":1,"docs":{"244":{"tf":1.0}}},"z":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"21":{"tf":1.0},"23":{"tf":1.0},"243":{"tf":1.4142135623730951}},"é":{"df":1,"docs":{"382":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":3,"docs":{"102":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"174":{"tf":1.4142135623730951},"19":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"83":{"tf":1.0},"86":{"tf":1.0}}}}}}}},"x":{"df":1,"docs":{"76":{"tf":1.0}}}},"u":{"df":1,"docs":{"292":{"tf":1.0}},"e":{"df":7,"docs":{"133":{"tf":1.4142135623730951},"317":{"tf":1.0},"319":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.0},"332":{"tf":1.0},"377":{"tf":1.0}},"r":{"a":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"322":{"tf":1.0},"323":{"tf":1.4142135623730951}}}}}}}}},"i":{"\'":{")":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":11,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":11,"docs":{"148":{"tf":1.0},"164":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"186":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"447":{"tf":2.449489742783178},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"9":{"tf":1.0}}}}}},"/":{"c":{"d":{"df":6,"docs":{"102":{"tf":1.0},"145":{"tf":1.0},"155":{"tf":1.0},"378":{"tf":1.4142135623730951},"413":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":3,"docs":{"160":{"tf":1.0},"169":{"tf":1.0},"172":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"447":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"380":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"372":{"tf":1.0}}}}}}}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"381":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"=":{"3":{"6":{"0":{"0":{"df":2,"docs":{"102":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"183":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"180":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"186":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":2,"docs":{"180":{"tf":1.0},"186":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":4,"docs":{"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"8":{"0":{"8":{"1":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"186":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"236":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":6,"docs":{"102":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0},"186":{"tf":1.0},"378":{"tf":1.0},"414":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"238":{"tf":1.0},"319":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"96":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"156":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"160":{"tf":1.0},"166":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"175":{"tf":1.0},"372":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"169":{"tf":1.0},"183":{"tf":1.0},"238":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"=":{"4":{"df":3,"docs":{"102":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"185":{"tf":1.0},"372":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":3,"docs":{"150":{"tf":1.0},"156":{"tf":1.0},"186":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"=":{"1":{"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{"3":{".":{"1":{"1":{"0":{"df":1,"docs":{"296":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"154":{"tf":1.0}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"172":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"155":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"102":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.4142135623730951},"171":{"tf":1.0},"296":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":3,"docs":{"153":{"tf":1.0},"166":{"tf":1.4142135623730951},"238":{"tf":1.0}}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"163":{"tf":1.7320508075688772}}}}}}}}}},"df":0,"docs":{}},"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"154":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":5,"docs":{"146":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"163":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"154":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"155":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"150":{"tf":1.0},"153":{"tf":1.0},"163":{"tf":1.4142135623730951},"167":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"2":{"2":{"df":2,"docs":{"154":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"153":{"tf":1.0},"163":{"tf":1.0},"183":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"153":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"=":{"c":{"df":0,"docs":{},"i":{"df":4,"docs":{"154":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0},"296":{"tf":1.0}}}},"df":0,"docs":{}},"@":{"$":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"163":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"}":{"@":{"$":{"df":0,"docs":{},"{":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"183":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"184":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":2,"docs":{"177":{"tf":1.0},"186":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":4,"docs":{"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"320":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"177":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"184":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"372":{"tf":1.0}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"102":{"tf":1.0},"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"161":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"b":{"df":0,"docs":{},"l":{"df":5,"docs":{"101":{"tf":1.4142135623730951},"103":{"tf":1.4142135623730951},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"95":{"tf":1.0}},"e":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":1,"docs":{"334":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"(":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}}}}},"df":75,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"145":{"tf":1.7320508075688772},"146":{"tf":1.7320508075688772},"147":{"tf":2.449489742783178},"148":{"tf":2.6457513110645907},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.7320508075688772},"154":{"tf":1.7320508075688772},"155":{"tf":1.4142135623730951},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":3.1622776601683795},"161":{"tf":2.23606797749979},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.4142135623730951},"165":{"tf":2.0},"166":{"tf":2.0},"167":{"tf":1.4142135623730951},"168":{"tf":1.7320508075688772},"169":{"tf":1.0},"170":{"tf":1.4142135623730951},"171":{"tf":1.0},"172":{"tf":2.0},"173":{"tf":2.0},"174":{"tf":2.0},"175":{"tf":1.0},"176":{"tf":1.0},"183":{"tf":1.7320508075688772},"186":{"tf":2.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"210":{"tf":1.7320508075688772},"221":{"tf":1.7320508075688772},"222":{"tf":1.0},"272":{"tf":1.7320508075688772},"273":{"tf":1.0},"281":{"tf":1.0},"29":{"tf":1.7320508075688772},"296":{"tf":2.0},"30":{"tf":1.0},"317":{"tf":2.6457513110645907},"318":{"tf":3.0},"321":{"tf":1.4142135623730951},"369":{"tf":1.0},"370":{"tf":1.4142135623730951},"375":{"tf":1.7320508075688772},"378":{"tf":1.0},"379":{"tf":1.4142135623730951},"380":{"tf":1.7320508075688772},"381":{"tf":1.0},"382":{"tf":1.4142135623730951},"414":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"420":{"tf":1.7320508075688772},"436":{"tf":1.7320508075688772},"437":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"447":{"tf":2.8284271247461903},"5":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"370":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"370":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}},"e":{"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"380":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":2,"docs":{"169":{"tf":1.0},"175":{"tf":1.0}}}}},"df":0,"docs":{}},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":5,"docs":{"169":{"tf":1.0},"372":{"tf":1.0},"380":{"tf":1.0},"413":{"tf":2.0},"420":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":1,"docs":{"370":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"|":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"185":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"375":{"tf":1.0}}},"r":{"df":3,"docs":{"352":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0}},"é":{"df":1,"docs":{"281":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"147":{"tf":1.0}}}}}}},"u":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":30,"docs":{"13":{"tf":1.4142135623730951},"14":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":2.449489742783178},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"179":{"tf":1.4142135623730951},"183":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":2.0},"196":{"tf":1.0},"20":{"tf":3.1622776601683795},"208":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":2.23606797749979},"243":{"tf":1.0},"257":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.4142135623730951},"374":{"tf":1.4142135623730951},"382":{"tf":1.0},"413":{"tf":1.0},"422":{"tf":1.0},"426":{"tf":1.7320508075688772},"7":{"tf":1.0},"72":{"tf":1.0},"83":{"tf":1.4142135623730951}},"i":{"df":10,"docs":{"146":{"tf":1.0},"148":{"tf":1.0},"160":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"356":{"tf":1.7320508075688772},"370":{"tf":1.0},"413":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"425":{"tf":1.0}}}}}},".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"1":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"316":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"x":{"_":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"s":{"df":2,"docs":{"133":{"tf":1.0},"202":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":19,"docs":{"127":{"tf":1.0},"133":{"tf":1.0},"169":{"tf":1.0},"188":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.4142135623730951},"204":{"tf":1.7320508075688772},"206":{"tf":1.4142135623730951},"207":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"276":{"tf":1.0},"316":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.0},"413":{"tf":1.0},"424":{"tf":3.3166247903554},"425":{"tf":2.449489742783178},"449":{"tf":2.449489742783178}},"s":{"/":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":2,"docs":{"449":{"tf":1.0},"451":{"tf":1.0}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"449":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"449":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":6,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"253":{"tf":1.0}}},"z":{"df":2,"docs":{"294":{"tf":1.4142135623730951},"86":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"424":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"202":{"tf":1.0}}}}}}},"df":17,"docs":{"123":{"tf":1.7320508075688772},"189":{"tf":1.0},"194":{"tf":1.0},"24":{"tf":1.0},"278":{"tf":1.0},"289":{"tf":1.4142135623730951},"294":{"tf":1.7320508075688772},"301":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.4142135623730951},"351":{"tf":1.0},"356":{"tf":2.23606797749979},"357":{"tf":1.4142135623730951},"421":{"tf":1.0},"422":{"tf":1.0},"424":{"tf":2.23606797749979}},"r":{"df":8,"docs":{"24":{"tf":1.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"396":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}},"z":{"df":1,"docs":{"289":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"133":{"tf":1.0}}}},"u":{"d":{"df":1,"docs":{"147":{"tf":1.0}}},"df":0,"docs":{}}},"é":{"df":13,"docs":{"15":{"tf":1.0},"167":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"416":{"tf":1.0},"424":{"tf":1.0},"448":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.4142135623730951}}}},"m":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}}}},"d":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"21":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"173":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"e":{"df":59,"docs":{"100":{"tf":1.4142135623730951},"148":{"tf":1.0},"16":{"tf":1.7320508075688772},"167":{"tf":1.0},"168":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":2.8284271247461903},"191":{"tf":1.0},"2":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.7320508075688772},"257":{"tf":1.0},"26":{"tf":1.0},"276":{"tf":1.4142135623730951},"279":{"tf":1.0},"280":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.4142135623730951},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"364":{"tf":1.0},"380":{"tf":1.0},"390":{"tf":1.0},"394":{"tf":1.0},"398":{"tf":1.4142135623730951},"4":{"tf":1.0},"403":{"tf":1.0},"421":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"é":{"df":2,"docs":{"244":{"tf":1.0},"249":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"155":{"tf":1.4142135623730951},"375":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"165":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"397":{"tf":1.0},"417":{"tf":1.0}}}}}}}},"l":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"d":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"65":{"tf":1.7320508075688772},"66":{"tf":1.0},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"5":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"294":{"tf":1.0}}}}},"df":2,"docs":{"20":{"tf":1.0},"23":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"123":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"167":{"tf":1.0}},"é":{"df":1,"docs":{"147":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":2,"docs":{"199":{"tf":1.0},"244":{"tf":1.0}},"é":{"df":1,"docs":{"372":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"374":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":22,"docs":{"100":{"tf":1.0},"16":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.4142135623730951},"183":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"296":{"tf":1.4142135623730951},"310":{"tf":1.0},"320":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"389":{"tf":1.0},"425":{"tf":1.0},"5":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.4142135623730951}},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"425":{"tf":1.0}},"e":{"(":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":7,"docs":{"16":{"tf":1.4142135623730951},"249":{"tf":1.0},"347":{"tf":1.0},"420":{"tf":1.4142135623730951},"6":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"375":{"tf":1.0},"394":{"tf":1.0},"442":{"tf":1.4142135623730951}}}}},"df":12,"docs":{"10":{"tf":1.0},"108":{"tf":2.0},"168":{"tf":1.0},"231":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"3":{"tf":1.4142135623730951},"358":{"tf":1.0},"451":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0}},"é":{"df":2,"docs":{"166":{"tf":1.0},"377":{"tf":1.0}}}},"ç":{"df":1,"docs":{"19":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"373":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"a":{"df":2,"docs":{"185":{"tf":1.4142135623730951},"380":{"tf":1.0}}},"df":0,"docs":{}}}},"df":17,"docs":{"123":{"tf":1.0},"171":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"284":{"tf":1.4142135623730951},"287":{"tf":1.0},"294":{"tf":2.6457513110645907},"299":{"tf":1.0},"375":{"tf":1.0},"428":{"tf":1.0},"43":{"tf":1.7320508075688772},"44":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}}},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"151":{"tf":1.0},"18":{"tf":1.0},"390":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":10,"docs":{"277":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.4142135623730951},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":2.0},"299":{"tf":1.0},"300":{"tf":1.0},"389":{"tf":1.4142135623730951},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"284":{"tf":1.4142135623730951},"292":{"tf":1.4142135623730951}}}},"é":{"df":4,"docs":{"292":{"tf":1.0},"293":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":6,"docs":{"155":{"tf":1.4142135623730951},"174":{"tf":1.0},"331":{"tf":1.0},"345":{"tf":1.0},"353":{"tf":1.0},"396":{"tf":1.0}}},"x":{"df":1,"docs":{"447":{"tf":1.0}}}},"è":{"df":0,"docs":{},"t":{"df":10,"docs":{"125":{"tf":1.0},"187":{"tf":1.0},"258":{"tf":1.0},"277":{"tf":1.0},"284":{"tf":1.0},"290":{"tf":1.0},"421":{"tf":1.0},"448":{"tf":1.4142135623730951},"5":{"tf":1.0},"73":{"tf":1.0}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"t":{"df":4,"docs":{"278":{"tf":1.0},"286":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"o":{"df":1,"docs":{"82":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"t":{"df":5,"docs":{"237":{"tf":1.4142135623730951},"245":{"tf":1.4142135623730951},"319":{"tf":1.7320508075688772},"75":{"tf":1.0},"9":{"tf":1.0}}}},"s":{"df":24,"docs":{"101":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"181":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"318":{"tf":1.0},"369":{"tf":1.0},"378":{"tf":1.4142135623730951},"381":{"tf":1.7320508075688772},"72":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.7320508075688772},"85":{"tf":2.23606797749979},"86":{"tf":1.0},"87":{"tf":1.4142135623730951},"88":{"tf":2.0}},"e":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"444":{"tf":1.0},"451":{"tf":1.0},"84":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"444":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"444":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":6,"docs":{"109":{"tf":2.0},"178":{"tf":1.4142135623730951},"2":{"tf":1.0},"323":{"tf":1.0},"84":{"tf":2.23606797749979},"88":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"174":{"tf":1.0},"6":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.7320508075688772},"16":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.7320508075688772},"287":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.0},"76":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"355":{"tf":1.0},"417":{"tf":1.0}}}}}},"t":{"df":16,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"213":{"tf":1.0},"22":{"tf":1.0},"243":{"tf":1.4142135623730951},"290":{"tf":1.0},"293":{"tf":1.0},"72":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"86":{"tf":2.449489742783178},"87":{"tf":1.0}},"e":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"19":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"181":{"tf":1.0},"346":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"423":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"415":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":1,"docs":{"236":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":2,"docs":{"183":{"tf":1.0},"352":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"84":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":2,"docs":{"116":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":20,"docs":{"104":{"tf":1.0},"105":{"tf":1.4142135623730951},"150":{"tf":1.0},"155":{"tf":1.4142135623730951},"188":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"211":{"tf":1.0},"254":{"tf":1.0},"258":{"tf":1.0},"288":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"4":{"tf":1.0},"445":{"tf":1.0},"82":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":64,"docs":{"125":{"tf":1.0},"127":{"tf":1.4142135623730951},"141":{"tf":1.7320508075688772},"142":{"tf":1.0},"143":{"tf":1.7320508075688772},"144":{"tf":1.0},"145":{"tf":1.7320508075688772},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":1.0},"160":{"tf":1.7320508075688772},"161":{"tf":1.0},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.0},"172":{"tf":1.4142135623730951},"174":{"tf":1.0},"180":{"tf":1.4142135623730951},"187":{"tf":1.0},"2":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.7320508075688772},"233":{"tf":1.4142135623730951},"235":{"tf":1.7320508075688772},"239":{"tf":1.4142135623730951},"249":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"313":{"tf":1.0},"317":{"tf":1.0},"325":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0},"445":{"tf":1.0},"447":{"tf":1.4142135623730951},"6":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.7320508075688772},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":2.0},"84":{"tf":1.0},"98":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":4,"docs":{"284":{"tf":1.4142135623730951},"290":{"tf":1.4142135623730951},"296":{"tf":1.0},"297":{"tf":1.0}}}},"é":{"df":1,"docs":{"322":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"18":{"tf":1.0},"243":{"tf":1.0},"330":{"tf":1.0},"86":{"tf":1.0}},"é":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"327":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"u":{"df":2,"docs":{"189":{"tf":1.0},"207":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"276":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":20,"docs":{"1":{"tf":1.0},"264":{"tf":1.7320508075688772},"265":{"tf":1.0},"388":{"tf":1.7320508075688772},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"75":{"tf":1.0}}}}}}}},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"71":{"tf":1.0}}}}},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}},"r":{"df":1,"docs":{"231":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":15,"docs":{"104":{"tf":1.7320508075688772},"133":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":2.23606797749979},"23":{"tf":1.0},"253":{"tf":1.0},"291":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"6":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"293":{"tf":1.0},"86":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0}}}}}},"é":{"df":1,"docs":{"328":{"tf":1.0}}}}},"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"16":{"tf":1.0},"189":{"tf":1.0},"20":{"tf":1.0},"290":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.4142135623730951},"414":{"tf":1.0},"424":{"tf":1.0},"443":{"tf":1.0},"5":{"tf":1.0},"86":{"tf":1.0}}}}}}},"u":{"df":1,"docs":{"168":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"18":{"tf":1.0},"347":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}},"m":{"df":0,"docs":{},"m":{"df":3,"docs":{"169":{"tf":1.0},"352":{"tf":1.0},"4":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"402":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}},"s":{"df":4,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.0},"76":{"tf":1.0}}},"t":{"df":2,"docs":{"412":{"tf":1.0},"416":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":8,"docs":{"20":{"tf":1.0},"280":{"tf":1.0},"324":{"tf":1.0},"49":{"tf":1.7320508075688772},"50":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":76,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"279":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"85":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"214":{"tf":1.0},"242":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"171":{"tf":1.0},"291":{"tf":1.4142135623730951},"381":{"tf":1.0},"420":{"tf":1.0},"85":{"tf":2.0},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"214":{"tf":1.0},"96":{"tf":1.0}}}}},"t":{"df":3,"docs":{"133":{"tf":1.0},"352":{"tf":1.0},"418":{"tf":1.0}}},"u":{"df":78,"docs":{"104":{"tf":1.0},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"189":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"284":{"tf":1.0},"29":{"tf":1.0},"294":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"84":{"tf":1.4142135623730951},"90":{"tf":1.0},"92":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.4142135623730951}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"451":{"tf":1.0}}},"t":{"df":5,"docs":{"166":{"tf":1.0},"174":{"tf":1.0},"23":{"tf":1.0},"3":{"tf":1.0},"88":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"85":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.7320508075688772}}}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"396":{"tf":1.0}}}}}},"df":2,"docs":{"205":{"tf":1.4142135623730951},"322":{"tf":1.0}},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}}},"i":{"b":{"df":0,"docs":{},"u":{"df":12,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"358":{"tf":1.7320508075688772},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"4":{"tf":1.0}},"t":{"df":7,"docs":{"278":{"tf":1.0},"279":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.7320508075688772},"303":{"tf":1.0},"308":{"tf":1.7320508075688772},"309":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.7320508075688772}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"9":{"0":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}},"ô":{"df":0,"docs":{},"l":{"df":3,"docs":{"332":{"tf":1.0},"381":{"tf":1.0},"394":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"442":{"tf":1.0}}}},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"396":{"tf":1.0}}}}}},"ç":{"df":0,"docs":{},"u":{"df":1,"docs":{"1":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":1,"docs":{"394":{"tf":1.0}},"e":{"_":{"df":1,"docs":{"236":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"x":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"133":{"tf":1.0},"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"4":{"tf":1.0},"442":{"tf":1.0}}}},"df":0,"docs":{}},"df":6,"docs":{"171":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"442":{"tf":1.0},"448":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"156":{"tf":1.0},"179":{"tf":1.0},"287":{"tf":1.0},"396":{"tf":1.0},"6":{"tf":1.0}}},"z":{"df":3,"docs":{"290":{"tf":1.4142135623730951},"442":{"tf":1.0},"451":{"tf":1.0}}}},"é":{"df":1,"docs":{"20":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"287":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":22,"docs":{"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"280":{"tf":1.0},"289":{"tf":1.4142135623730951},"312":{"tf":1.0},"320":{"tf":1.4142135623730951},"358":{"tf":1.0},"361":{"tf":1.4142135623730951},"363":{"tf":1.7320508075688772},"370":{"tf":3.0},"372":{"tf":2.0},"383":{"tf":1.0},"392":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"408":{"tf":1.7320508075688772},"409":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"416":{"tf":2.0},"429":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"300":{"tf":1.0},"317":{"tf":1.0},"356":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"364":{"tf":1.0}}}}},"df":8,"docs":{"23":{"tf":1.0},"249":{"tf":1.0},"258":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"442":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}},"r":{"df":1,"docs":{"21":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"178":{"tf":1.0}}}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"19":{"tf":1.0},"397":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"289":{"tf":1.0},"294":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"105":{"tf":1.0},"153":{"tf":1.0},"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"279":{"tf":1.4142135623730951},"348":{"tf":1.0},"74":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}}},"df":3,"docs":{"173":{"tf":1.0},"317":{"tf":1.0},"362":{"tf":1.4142135623730951}}},"t":{"df":5,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"113":{"tf":1.0},"133":{"tf":1.0},"414":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"192":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"318":{"tf":1.0},"396":{"tf":1.4142135623730951}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"422":{"tf":1.0}}}}},"df":3,"docs":{"199":{"tf":1.0},"276":{"tf":1.0},"71":{"tf":1.0}}}}},"û":{"df":0,"docs":{},"t":{"df":2,"docs":{"349":{"tf":1.4142135623730951},"355":{"tf":1.0}}}}},"p":{"df":3,"docs":{"111":{"tf":1.0},"166":{"tf":1.0},"290":{"tf":1.0}},"u":{"/":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"148":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"a":{"df":1,"docs":{"242":{"tf":1.0}},"n":{"df":1,"docs":{"6":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"347":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":25,"docs":{"276":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.4142135623730951},"3":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"361":{"tf":1.0},"369":{"tf":2.0},"370":{"tf":1.7320508075688772},"371":{"tf":1.7320508075688772},"372":{"tf":1.4142135623730951},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":2.0},"390":{"tf":1.0},"413":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"259":{"tf":1.0},"361":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"416":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":9,"docs":{"153":{"tf":1.0},"160":{"tf":1.0},"22":{"tf":1.0},"242":{"tf":1.0},"290":{"tf":1.0},"319":{"tf":1.0},"6":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":7,"docs":{"241":{"tf":1.0},"291":{"tf":2.0},"293":{"tf":1.0},"294":{"tf":1.0},"348":{"tf":1.0},"449":{"tf":1.0},"85":{"tf":1.7320508075688772}},"e":{"\\"":{",":{"\\"":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"\\"":{",":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"\\"":{",":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"(":{"d":{"b":{"df":2,"docs":{"423":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"429":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"175":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"b":{"df":1,"docs":{"323":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"325":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"301":{"tf":1.0}}}},"t":{"df":4,"docs":{"346":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"i":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"180":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"181":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":5,"docs":{"102":{"tf":1.0},"242":{"tf":1.0},"319":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"425":{"tf":1.0}}}},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"389":{"tf":1.0}}}}}},"u":{"d":{"df":6,"docs":{"317":{"tf":1.0},"318":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.4142135623730951},"396":{"tf":1.0},"449":{"tf":1.0}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"394":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"é":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":13,"docs":{"160":{"tf":1.0},"171":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"293":{"tf":1.7320508075688772},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"346":{"tf":1.0},"393":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.4142135623730951},"429":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":11,"docs":{"113":{"tf":1.0},"13":{"tf":1.4142135623730951},"146":{"tf":1.0},"21":{"tf":1.4142135623730951},"242":{"tf":1.0},"313":{"tf":1.0},"325":{"tf":1.4142135623730951},"327":{"tf":1.0},"331":{"tf":1.0},"376":{"tf":1.0},"397":{"tf":1.0}},"r":{"df":28,"docs":{"123":{"tf":1.0},"127":{"tf":1.0},"14":{"tf":1.0},"174":{"tf":1.4142135623730951},"179":{"tf":1.7320508075688772},"197":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"21":{"tf":1.0},"243":{"tf":1.0},"278":{"tf":1.0},"294":{"tf":1.0},"3":{"tf":1.0},"301":{"tf":1.0},"304":{"tf":1.7320508075688772},"305":{"tf":1.0},"314":{"tf":1.7320508075688772},"317":{"tf":1.0},"324":{"tf":1.0},"331":{"tf":1.7320508075688772},"332":{"tf":1.4142135623730951},"334":{"tf":1.0},"37":{"tf":1.7320508075688772},"38":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"86":{"tf":1.0}}},"z":{"df":4,"docs":{"294":{"tf":1.4142135623730951},"83":{"tf":2.0},"84":{"tf":1.7320508075688772},"86":{"tf":1.4142135623730951}}}},"é":{"df":1,"docs":{"161":{"tf":1.0}},"e":{"df":2,"docs":{"186":{"tf":1.0},"317":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"400":{"tf":1.0}}},"r":{"df":0,"docs":{},"f":{"df":3,"docs":{"393":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.4142135623730951}}}},"s":{"/":{"df":0,"docs":{},"j":{"df":2,"docs":{"400":{"tf":1.0},"418":{"tf":1.0}}}},"df":7,"docs":{"285":{"tf":1.0},"287":{"tf":1.0},"292":{"tf":2.0},"299":{"tf":1.0},"375":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"c":{"df":2,"docs":{"252":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"349":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"l":{"df":12,"docs":{"119":{"tf":1.4142135623730951},"124":{"tf":1.0},"133":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"166":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"206":{"tf":1.0},"288":{"tf":1.0},"449":{"tf":1.0},"84":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"206":{"tf":1.0},"207":{"tf":1.4142135623730951}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"190":{"tf":1.0},"205":{"tf":1.4142135623730951}}}}}}},"v":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"d":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"390":{"tf":1.0}}}},"y":{"c":{"df":0,"docs":{},"l":{"df":4,"docs":{"10":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"x":{"df":4,"docs":{"176":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"381":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"ô":{"df":0,"docs":{},"t":{"df":17,"docs":{"108":{"tf":1.0},"165":{"tf":1.4142135623730951},"166":{"tf":1.0},"167":{"tf":1.0},"200":{"tf":1.4142135623730951},"214":{"tf":1.0},"332":{"tf":1.0},"355":{"tf":1.4142135623730951},"358":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"67":{"tf":1.7320508075688772},"68":{"tf":1.0}}}},"œ":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"82":{"tf":1.0}}}}},"’":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":77,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"147":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"249":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}},"d":{"\'":{"a":{"c":{"c":{"df":0,"docs":{},"è":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"325":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"193":{"tf":1.0},"325":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":29,"docs":{"10":{"tf":1.0},"124":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"281":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"415":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":4,"docs":{"229":{"tf":1.0},"230":{"tf":1.0},"244":{"tf":1.0},"325":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"124":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"207":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0}},"e":{"df":2,"docs":{"69":{"tf":1.0},"70":{"tf":1.0}}}},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"189":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}}},"é":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"df":0,"docs":{}}},"[":{"0":{"3":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"420":{"tf":1.0},"444":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"174":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"317":{"tf":1.4142135623730951}}}}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"[":{"\\"":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"169":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":36,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"156":{"tf":1.0},"160":{"tf":2.0},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.7320508075688772},"174":{"tf":2.8284271247461903},"183":{"tf":1.4142135623730951},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"210":{"tf":1.7320508075688772},"272":{"tf":1.7320508075688772},"273":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":2.0},"317":{"tf":1.4142135623730951},"370":{"tf":1.4142135623730951},"379":{"tf":2.0},"380":{"tf":2.23606797749979},"381":{"tf":1.7320508075688772},"413":{"tf":2.23606797749979},"414":{"tf":1.0},"420":{"tf":1.7320508075688772},"436":{"tf":1.7320508075688772},"437":{"tf":1.0},"444":{"tf":1.0},"447":{"tf":1.4142135623730951},"76":{"tf":1.0},"96":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":7,"docs":{"281":{"tf":1.0},"292":{"tf":1.0},"333":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.0},"438":{"tf":1.7320508075688772},"439":{"tf":1.0}}}}}}},"n":{"df":168,"docs":{"102":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":1.0},"123":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"151":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"160":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.7320508075688772},"167":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.7320508075688772},"175":{"tf":1.7320508075688772},"177":{"tf":1.7320508075688772},"179":{"tf":1.0},"18":{"tf":1.7320508075688772},"181":{"tf":1.0},"186":{"tf":2.449489742783178},"188":{"tf":1.0},"19":{"tf":1.4142135623730951},"190":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":2.23606797749979},"202":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"213":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.7320508075688772},"240":{"tf":1.0},"244":{"tf":1.7320508075688772},"249":{"tf":1.7320508075688772},"25":{"tf":1.0},"253":{"tf":1.0},"257":{"tf":1.7320508075688772},"258":{"tf":1.7320508075688772},"259":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"282":{"tf":1.0},"285":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.7320508075688772},"291":{"tf":1.4142135623730951},"293":{"tf":1.7320508075688772},"294":{"tf":2.0},"296":{"tf":1.4142135623730951},"297":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":2.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"312":{"tf":1.0},"317":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"35":{"tf":1.0},"351":{"tf":1.7320508075688772},"352":{"tf":1.7320508075688772},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":2.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"381":{"tf":1.0},"382":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"390":{"tf":1.4142135623730951},"394":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.4142135623730951},"403":{"tf":1.4142135623730951},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"417":{"tf":1.0},"420":{"tf":1.0},"428":{"tf":1.4142135623730951},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.4142135623730951},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":2.0},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"86":{"tf":1.0},"88":{"tf":1.7320508075688772},"90":{"tf":1.0},"92":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"b":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"r":{"d":{"df":4,"docs":{"330":{"tf":1.7320508075688772},"331":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"375":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":2,"docs":{"293":{"tf":1.0},"326":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"291":{"tf":1.7320508075688772},"293":{"tf":1.0},"300":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"109":{"tf":1.0},"323":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"155":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"}":{"@":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"@":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"@":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"290":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":5,"docs":{"185":{"tf":1.4142135623730951},"238":{"tf":1.0},"291":{"tf":1.7320508075688772},"300":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"333":{"tf":1.0},"424":{"tf":1.4142135623730951},"425":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":2,"docs":{"199":{"tf":1.0},"23":{"tf":1.0}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"b":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"313":{"tf":1.0},"325":{"tf":1.0}}}}},"[":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"a":{"df":0,"docs":{},"l":{"(":{"\\"":{"df":0,"docs":{},"m":{"a":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\"":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"259":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"=":{"4":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":36,"docs":{"169":{"tf":1.4142135623730951},"180":{"tf":2.0},"185":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"247":{"tf":1.7320508075688772},"248":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951},"313":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"316":{"tf":1.7320508075688772},"325":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.4142135623730951},"347":{"tf":1.4142135623730951},"348":{"tf":3.4641016151377544},"349":{"tf":1.7320508075688772},"351":{"tf":1.0},"352":{"tf":2.0},"354":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.4142135623730951},"360":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"414":{"tf":2.23606797749979},"423":{"tf":2.6457513110645907},"424":{"tf":2.449489742783178},"425":{"tf":2.0},"426":{"tf":2.23606797749979},"427":{"tf":2.6457513110645907},"428":{"tf":2.23606797749979},"429":{"tf":1.7320508075688772}}},"df":18,"docs":{"109":{"tf":1.0},"117":{"tf":1.0},"129":{"tf":1.4142135623730951},"174":{"tf":1.0},"178":{"tf":1.0},"206":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0}},"e":{"b":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":3,"docs":{"101":{"tf":1.0},"147":{"tf":1.0},"199":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}}},"df":4,"docs":{"101":{"tf":1.0},"151":{"tf":1.0},"288":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"355":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"g":{"df":4,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"393":{"tf":1.0},"443":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}},"d":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":337,"docs":{"1":{"tf":2.449489742783178},"10":{"tf":1.7320508075688772},"100":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":2.23606797749979},"104":{"tf":2.0},"106":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"122":{"tf":1.0},"134":{"tf":1.4142135623730951},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.4142135623730951},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.4142135623730951},"148":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"150":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.7320508075688772},"154":{"tf":1.4142135623730951},"16":{"tf":2.8284271247461903},"160":{"tf":2.0},"161":{"tf":1.7320508075688772},"164":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":2.23606797749979},"168":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"17":{"tf":2.23606797749979},"171":{"tf":2.8284271247461903},"172":{"tf":2.0},"174":{"tf":1.4142135623730951},"176":{"tf":1.4142135623730951},"177":{"tf":1.0},"18":{"tf":2.0},"181":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.7320508075688772},"193":{"tf":1.0},"194":{"tf":1.0},"196":{"tf":1.0},"199":{"tf":1.7320508075688772},"2":{"tf":2.6457513110645907},"20":{"tf":1.0},"201":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.4142135623730951},"206":{"tf":1.4142135623730951},"208":{"tf":1.0},"21":{"tf":1.4142135623730951},"210":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":3.0},"230":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":2.0},"236":{"tf":1.4142135623730951},"237":{"tf":1.0},"238":{"tf":1.4142135623730951},"241":{"tf":1.4142135623730951},"243":{"tf":3.4641016151377544},"244":{"tf":1.0},"249":{"tf":2.23606797749979},"25":{"tf":1.0},"250":{"tf":2.0},"26":{"tf":1.0},"260":{"tf":2.6457513110645907},"261":{"tf":1.7320508075688772},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":2.0},"271":{"tf":1.4142135623730951},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":2.0},"275":{"tf":1.4142135623730951},"276":{"tf":2.0},"277":{"tf":2.23606797749979},"278":{"tf":1.4142135623730951},"279":{"tf":2.23606797749979},"28":{"tf":1.0},"280":{"tf":2.23606797749979},"281":{"tf":2.6457513110645907},"282":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":2.0},"286":{"tf":1.7320508075688772},"287":{"tf":1.4142135623730951},"288":{"tf":2.0},"289":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.7320508075688772},"291":{"tf":1.7320508075688772},"293":{"tf":2.449489742783178},"294":{"tf":1.0},"296":{"tf":1.4142135623730951},"298":{"tf":2.0},"3":{"tf":2.0},"30":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":2.0},"309":{"tf":1.4142135623730951},"31":{"tf":1.0},"310":{"tf":1.7320508075688772},"314":{"tf":2.0},"316":{"tf":1.0},"318":{"tf":1.4142135623730951},"319":{"tf":1.4142135623730951},"32":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.0},"322":{"tf":2.0},"324":{"tf":1.4142135623730951},"325":{"tf":2.0},"326":{"tf":2.23606797749979},"327":{"tf":1.7320508075688772},"329":{"tf":1.4142135623730951},"33":{"tf":1.0},"330":{"tf":3.0},"331":{"tf":2.6457513110645907},"332":{"tf":2.0},"333":{"tf":2.6457513110645907},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":2.6457513110645907},"34":{"tf":1.0},"340":{"tf":1.7320508075688772},"341":{"tf":2.0},"342":{"tf":1.4142135623730951},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":2.0},"346":{"tf":2.23606797749979},"347":{"tf":2.0},"349":{"tf":1.4142135623730951},"35":{"tf":1.0},"351":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"353":{"tf":2.23606797749979},"354":{"tf":1.0},"356":{"tf":2.23606797749979},"357":{"tf":2.0},"359":{"tf":1.0},"36":{"tf":1.0},"361":{"tf":1.7320508075688772},"363":{"tf":1.4142135623730951},"364":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":1.4142135623730951},"37":{"tf":1.0},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.7320508075688772},"373":{"tf":2.0},"374":{"tf":1.0},"375":{"tf":1.7320508075688772},"376":{"tf":1.4142135623730951},"377":{"tf":1.7320508075688772},"378":{"tf":1.0},"379":{"tf":1.4142135623730951},"38":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":2.23606797749979},"382":{"tf":1.4142135623730951},"383":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":2.6457513110645907},"387":{"tf":1.7320508075688772},"388":{"tf":1.4142135623730951},"389":{"tf":1.4142135623730951},"39":{"tf":1.0},"390":{"tf":2.0},"391":{"tf":1.4142135623730951},"393":{"tf":2.449489742783178},"394":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951},"397":{"tf":2.8284271247461903},"398":{"tf":1.4142135623730951},"4":{"tf":1.0},"40":{"tf":1.0},"401":{"tf":1.4142135623730951},"403":{"tf":1.4142135623730951},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"412":{"tf":1.7320508075688772},"413":{"tf":1.4142135623730951},"414":{"tf":2.23606797749979},"415":{"tf":1.7320508075688772},"416":{"tf":2.6457513110645907},"417":{"tf":1.4142135623730951},"418":{"tf":1.4142135623730951},"419":{"tf":2.6457513110645907},"42":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":2.0},"422":{"tf":2.8284271247461903},"423":{"tf":1.7320508075688772},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.4142135623730951},"427":{"tf":1.7320508075688772},"428":{"tf":1.0},"429":{"tf":1.4142135623730951},"43":{"tf":2.0},"430":{"tf":2.0},"431":{"tf":1.4142135623730951},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":2.0},"435":{"tf":1.4142135623730951},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.4142135623730951},"440":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.7320508075688772},"443":{"tf":2.23606797749979},"444":{"tf":1.0},"445":{"tf":1.4142135623730951},"446":{"tf":1.4142135623730951},"447":{"tf":1.4142135623730951},"448":{"tf":2.449489742783178},"449":{"tf":1.4142135623730951},"45":{"tf":1.0},"450":{"tf":1.7320508075688772},"451":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":2.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":2.0},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":2.0},"7":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"72":{"tf":2.23606797749979},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.7320508075688772},"76":{"tf":2.0},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.7320508075688772},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":3.4641016151377544},"84":{"tf":2.0},"85":{"tf":2.23606797749979},"86":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.4142135623730951},"98":{"tf":1.7320508075688772}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"238":{"tf":1.0},"319":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":2,"docs":{"102":{"tf":1.0},"298":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":5,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"213":{"tf":1.0},"300":{"tf":1.0},"394":{"tf":1.0}}}},"t":{"\\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":9,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"146":{"tf":1.0},"165":{"tf":1.0},"241":{"tf":1.0},"373":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}},"t":{"a":{"df":2,"docs":{"294":{"tf":1.4142135623730951},"356":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"1":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"i":{"df":5,"docs":{"166":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"390":{"tf":1.0}}},"y":{"(":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"392":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"392":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"df":2,"docs":{"208":{"tf":1.4142135623730951},"390":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":28,"docs":{"1":{"tf":1.0},"168":{"tf":2.23606797749979},"169":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":2.0},"177":{"tf":1.0},"178":{"tf":2.0},"179":{"tf":1.4142135623730951},"180":{"tf":1.4142135623730951},"181":{"tf":1.7320508075688772},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.0},"186":{"tf":1.7320508075688772},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"195":{"tf":1.0},"196":{"tf":1.0},"211":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.0},"74":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"84":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"113":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"102":{"tf":1.0},"110":{"tf":1.4142135623730951},"113":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"q":{"d":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"=":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"111":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"113":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"123":{"tf":2.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"/":{"c":{"df":0,"docs":{},"i":{"df":6,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"174":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"111":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"111":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"112":{"tf":1.0},"113":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"116":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":5,"docs":{"146":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"171":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0}}}}}}},"df":2,"docs":{"21":{"tf":1.7320508075688772},"22":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"df":29,"docs":{"104":{"tf":1.4142135623730951},"106":{"tf":1.0},"147":{"tf":1.0},"158":{"tf":1.4142135623730951},"161":{"tf":1.0},"163":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"20":{"tf":1.0},"206":{"tf":1.0},"240":{"tf":1.0},"285":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"299":{"tf":1.0},"400":{"tf":1.0},"414":{"tf":1.0},"418":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.4142135623730951},"451":{"tf":1.7320508075688772},"5":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"89":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"443":{"tf":1.0}}}}}}},"s":{"c":{"df":1,"docs":{"185":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":11,"docs":{"153":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"257":{"tf":1.0},"317":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":2.0},"332":{"tf":1.0},"333":{"tf":1.0},"419":{"tf":1.0},"423":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"375":{"tf":1.4142135623730951},"417":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":3,"docs":{"189":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0}}}},"u":{"df":2,"docs":{"147":{"tf":1.0},"416":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"x":{"df":19,"docs":{"103":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"168":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.7320508075688772},"244":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"291":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"412":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.0}},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"109":{"tf":1.0},"206":{"tf":1.0}}}}},"t":{"c":{"df":0,"docs":{},"p":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"[":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":9,"docs":{"108":{"tf":1.0},"147":{"tf":1.0},"169":{"tf":1.4142135623730951},"252":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.4142135623730951},"293":{"tf":1.0},"424":{"tf":1.7320508075688772},"425":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"421":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"451":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"/":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"421":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"421":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"z":{"df":4,"docs":{"277":{"tf":1.4142135623730951},"293":{"tf":1.0},"300":{"tf":1.0},"72":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"214":{"tf":1.0}}},"t":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"133":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":5,"docs":{"250":{"tf":1.4142135623730951},"281":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"389":{"tf":1.0}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.0},"290":{"tf":1.0},"330":{"tf":1.0}}}}}}}}},"g":{"df":2,"docs":{"101":{"tf":1.0},"133":{"tf":1.0}}},"r":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"373":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":16,"docs":{"133":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.0},"163":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"181":{"tf":1.0},"187":{"tf":1.0},"255":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.0},"355":{"tf":1.0},"362":{"tf":1.0},"379":{"tf":1.0},"383":{"tf":1.0},"419":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"184":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"101":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":1.0},"178":{"tf":1.0},"295":{"tf":1.4142135623730951},"298":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"364":{"tf":1.0},"394":{"tf":1.0},"72":{"tf":1.0}}},"s":{"df":1,"docs":{"171":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"287":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"393":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":29,"docs":{"145":{"tf":2.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.7320508075688772},"152":{"tf":1.0},"153":{"tf":1.4142135623730951},"154":{"tf":1.4142135623730951},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":1.7320508075688772},"161":{"tf":1.0},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"210":{"tf":1.0},"420":{"tf":1.0},"443":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"232":{"tf":1.4142135623730951},"346":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"198":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"105":{"tf":1.0},"111":{"tf":1.0},"252":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"290":{"tf":1.0}}}},"z":{"df":1,"docs":{"290":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"153":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"351":{"tf":1.4142135623730951},"357":{"tf":1.0}}}}},"á":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":73,"docs":{"12":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"l":{".":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"151":{"tf":1.0},"166":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":3,"docs":{"101":{"tf":1.0},"128":{"tf":1.4142135623730951},"133":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"444":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"214":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"3":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"169":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":42,"docs":{"101":{"tf":1.4142135623730951},"109":{"tf":2.0},"124":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"148":{"tf":1.7320508075688772},"151":{"tf":1.7320508075688772},"156":{"tf":1.0},"160":{"tf":1.7320508075688772},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"178":{"tf":1.7320508075688772},"186":{"tf":1.0},"2":{"tf":1.0},"205":{"tf":1.0},"212":{"tf":1.0},"286":{"tf":1.0},"291":{"tf":1.4142135623730951},"300":{"tf":1.0},"318":{"tf":1.4142135623730951},"323":{"tf":1.0},"444":{"tf":2.23606797749979},"445":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.4142135623730951},"79":{"tf":2.23606797749979},"80":{"tf":1.4142135623730951},"81":{"tf":2.23606797749979},"82":{"tf":2.23606797749979},"83":{"tf":1.0},"84":{"tf":3.3166247903554},"85":{"tf":2.6457513110645907},"86":{"tf":1.4142135623730951},"87":{"tf":1.7320508075688772},"88":{"tf":2.449489742783178},"89":{"tf":1.4142135623730951},"96":{"tf":1.0},"97":{"tf":1.0}}}}},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"168":{"tf":1.0},"174":{"tf":1.0},"2":{"tf":1.7320508075688772},"231":{"tf":1.0},"235":{"tf":1.0},"258":{"tf":1.0},"280":{"tf":1.0},"3":{"tf":1.7320508075688772},"358":{"tf":1.0},"388":{"tf":1.0},"4":{"tf":1.4142135623730951},"75":{"tf":1.0},"9":{"tf":1.0}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}}}}},"df":1,"docs":{"394":{"tf":1.0}},"i":{"df":2,"docs":{"17":{"tf":1.0},"6":{"tf":1.7320508075688772}},"t":{"df":18,"docs":{"106":{"tf":1.0},"133":{"tf":1.4142135623730951},"163":{"tf":1.0},"164":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.4142135623730951},"18":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"212":{"tf":1.0},"290":{"tf":1.0},"294":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"394":{"tf":1.0},"83":{"tf":1.0},"98":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"288":{"tf":1.0},"292":{"tf":1.0},"85":{"tf":1.0}}}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{">":{"/":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"133":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"116":{"tf":1.0}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"124":{"tf":1.0}}}}}}}},":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},";":{"/":{"df":0,"docs":{},"g":{"df":1,"docs":{"130":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":17,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951},"111":{"tf":1.0},"117":{"tf":1.0},"119":{"tf":1.4142135623730951},"124":{"tf":1.0},"128":{"tf":1.4142135623730951},"129":{"tf":1.4142135623730951},"130":{"tf":1.0},"131":{"tf":1.4142135623730951},"133":{"tf":1.0},"243":{"tf":1.0},"363":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"400":{"tf":1.0},"95":{"tf":1.0}},"e":{">":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"146":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"c":{"df":2,"docs":{"152":{"tf":1.0},"244":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":5,"docs":{"104":{"tf":1.0},"206":{"tf":1.0},"289":{"tf":1.7320508075688772},"292":{"tf":1.0},"294":{"tf":1.7320508075688772}}},"n":{"df":1,"docs":{"20":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}},"z":{"df":1,"docs":{"294":{"tf":1.0}}}},"é":{"df":31,"docs":{"102":{"tf":1.0},"249":{"tf":1.4142135623730951},"260":{"tf":1.7320508075688772},"261":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.4142135623730951},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"293":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"339":{"tf":1.7320508075688772},"340":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.4142135623730951},"373":{"tf":1.0},"386":{"tf":1.7320508075688772},"387":{"tf":1.0},"397":{"tf":1.4142135623730951},"412":{"tf":1.0},"419":{"tf":1.0},"443":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":2.0},"88":{"tf":1.0}}}},"t":{"df":2,"docs":{"152":{"tf":1.0},"349":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"16":{"tf":1.4142135623730951},"428":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"y":{":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"234":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"1":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"332":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0}}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"84":{"tf":1.0},"88":{"tf":1.4142135623730951}},"s":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"352":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"118":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"17":{"tf":1.0},"21":{"tf":1.0},"86":{"tf":1.0}}}},"p":{"d":{"b":{"df":1,"docs":{"323":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"383":{"tf":1.0}}}},"w":{"df":0,"docs":{},"x":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"414":{"tf":1.0}},"o":{"df":1,"docs":{"372":{"tf":1.0}},"s":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{":":{"8":{"0":{"8":{"0":{"df":1,"docs":{"211":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"[":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":11,"docs":{"169":{"tf":1.4142135623730951},"180":{"tf":2.6457513110645907},"184":{"tf":1.4142135623730951},"189":{"tf":2.449489742783178},"195":{"tf":2.0},"196":{"tf":2.0},"204":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"211":{"tf":2.0},"370":{"tf":1.0},"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"u":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":137,"docs":{"104":{"tf":1.0},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"11":{"tf":1.0},"112":{"tf":1.4142135623730951},"113":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"148":{"tf":1.0},"15":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.4142135623730951},"156":{"tf":1.4142135623730951},"158":{"tf":1.4142135623730951},"16":{"tf":1.0},"160":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"166":{"tf":2.0},"167":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":2.23606797749979},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"177":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"195":{"tf":1.0},"21":{"tf":1.7320508075688772},"211":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"243":{"tf":1.0},"25":{"tf":2.0},"26":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.4142135623730951},"282":{"tf":1.0},"29":{"tf":1.0},"293":{"tf":1.4142135623730951},"3":{"tf":1.0},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"325":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"332":{"tf":1.4142135623730951},"333":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.4142135623730951},"35":{"tf":1.0},"356":{"tf":1.4142135623730951},"362":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.4142135623730951},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"375":{"tf":1.7320508075688772},"376":{"tf":1.0},"377":{"tf":1.0},"379":{"tf":1.4142135623730951},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"400":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":2.0},"433":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.0},"58":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"363":{"tf":1.0}}}}}}},"r":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":29,"docs":{"187":{"tf":1.7320508075688772},"188":{"tf":1.0},"189":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"74":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"125":{"tf":1.4142135623730951}}}}}},"df":3,"docs":{"244":{"tf":1.0},"249":{"tf":1.7320508075688772},"390":{"tf":1.0}},"é":{"df":3,"docs":{"243":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":33,"docs":{"231":{"tf":1.7320508075688772},"232":{"tf":1.4142135623730951},"233":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"239":{"tf":1.7320508075688772},"240":{"tf":1.4142135623730951},"241":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.7320508075688772},"244":{"tf":1.4142135623730951},"245":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.7320508075688772},"248":{"tf":1.0},"249":{"tf":1.4142135623730951},"250":{"tf":1.0},"251":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"256":{"tf":1.0},"257":{"tf":1.7320508075688772},"258":{"tf":1.0},"259":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0},"445":{"tf":1.0},"75":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"é":{"b":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"206":{"tf":1.0}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"182":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"291":{"tf":1.0}}}}}}},"c":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"250":{"tf":1.4142135623730951},"281":{"tf":1.4142135623730951},"394":{"tf":1.0},"438":{"tf":1.7320508075688772},"439":{"tf":1.0},"76":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"201":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"446":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"208":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"213":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"105":{"tf":1.0},"330":{"tf":1.0}}}},"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"330":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"419":{"tf":1.0}}}},"df":2,"docs":{"169":{"tf":1.0},"419":{"tf":1.0}}}},"v":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"89":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"358":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":8,"docs":{"147":{"tf":1.0},"154":{"tf":1.4142135623730951},"210":{"tf":1.0},"296":{"tf":1.0},"352":{"tf":1.4142135623730951},"354":{"tf":1.7320508075688772},"357":{"tf":1.0},"83":{"tf":1.0}},"é":{"df":1,"docs":{"322":{"tf":1.0}},"e":{"df":3,"docs":{"171":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":18,"docs":{"104":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.7320508075688772},"161":{"tf":1.0},"173":{"tf":1.0},"177":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.7320508075688772},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"257":{"tf":1.0},"290":{"tf":1.0},"296":{"tf":1.0},"298":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"208":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"212":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":4,"docs":{"150":{"tf":1.0},"166":{"tf":1.0},"293":{"tf":1.0},"382":{"tf":1.0}},"r":{"df":1,"docs":{"166":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"298":{"tf":1.0}}}}}},"t":{"df":1,"docs":{"388":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"j":{"df":15,"docs":{"133":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"160":{"tf":1.0},"165":{"tf":1.0},"192":{"tf":1.0},"199":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0},"392":{"tf":1.4142135623730951},"425":{"tf":1.0}}},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"148":{"tf":1.0},"420":{"tf":1.0}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"361":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":17,"docs":{"204":{"tf":1.4142135623730951},"234":{"tf":1.0},"237":{"tf":1.0},"242":{"tf":1.7320508075688772},"244":{"tf":1.0},"255":{"tf":1.0},"364":{"tf":1.0},"374":{"tf":1.0},"414":{"tf":1.7320508075688772},"71":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0},"92":{"tf":1.7320508075688772},"93":{"tf":1.0}}}},"df":7,"docs":{"173":{"tf":1.0},"183":{"tf":1.0},"287":{"tf":1.0},"300":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"414":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"80":{"tf":1.0},"87":{"tf":1.0}}}},"r":{"a":{"df":1,"docs":{"290":{"tf":1.0}}},"df":21,"docs":{"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"z":{"df":3,"docs":{"300":{"tf":1.0},"79":{"tf":1.4142135623730951},"85":{"tf":1.7320508075688772}}}},"é":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"133":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"71":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"219":{"tf":1.7320508075688772},"220":{"tf":1.0},"221":{"tf":1.7320508075688772},"222":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"2":{"tf":1.0},"81":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"c":{"df":12,"docs":{"288":{"tf":1.0},"293":{"tf":1.0},"356":{"tf":1.0},"369":{"tf":1.0},"370":{"tf":1.4142135623730951},"373":{"tf":1.0},"390":{"tf":1.0},"397":{"tf":1.0},"421":{"tf":1.0},"447":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"a":{"c":{"df":3,"docs":{"107":{"tf":1.0},"122":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"r":{"df":1,"docs":{"103":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":12,"docs":{"110":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"178":{"tf":1.0},"187":{"tf":1.0},"235":{"tf":1.0},"270":{"tf":1.7320508075688772},"271":{"tf":1.0},"420":{"tf":1.0},"444":{"tf":1.0},"446":{"tf":1.0},"76":{"tf":1.0},"89":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}}}},"y":{"df":2,"docs":{"186":{"tf":1.0},"211":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"116":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"4":{"tf":1.0},"80":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":1,"docs":{"87":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}}}},"ô":{"df":0,"docs":{},"t":{"df":63,"docs":{"13":{"tf":1.4142135623730951},"14":{"tf":1.0},"146":{"tf":1.0},"16":{"tf":1.7320508075688772},"164":{"tf":1.0},"167":{"tf":1.0},"173":{"tf":1.7320508075688772},"174":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"177":{"tf":1.0},"181":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.0},"194":{"tf":1.0},"21":{"tf":2.6457513110645907},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.4142135623730951},"296":{"tf":1.0},"3":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"326":{"tf":1.0},"331":{"tf":3.1622776601683795},"333":{"tf":1.0},"345":{"tf":2.0},"346":{"tf":1.4142135623730951},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.4142135623730951},"396":{"tf":1.0},"416":{"tf":1.4142135623730951},"422":{"tf":1.0},"423":{"tf":1.4142135623730951},"424":{"tf":1.0},"428":{"tf":1.4142135623730951},"442":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0},"47":{"tf":1.7320508075688772},"48":{"tf":1.0},"49":{"tf":1.7320508075688772},"50":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"84":{"tf":1.7320508075688772}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"122":{"tf":1.4142135623730951},"199":{"tf":1.0}},"é":{"df":4,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"326":{"tf":1.0},"417":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"318":{"tf":1.0},"375":{"tf":1.0}},"l":{"df":1,"docs":{"414":{"tf":1.0}},"é":{"df":2,"docs":{"207":{"tf":1.0},"421":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"168":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"373":{"tf":1.0},"379":{"tf":1.0},"390":{"tf":1.0}}}}},"é":{"df":1,"docs":{"181":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"1":{"tf":1.0},"277":{"tf":1.0},"285":{"tf":1.4142135623730951},"290":{"tf":1.0},"296":{"tf":1.0},"326":{"tf":1.0},"443":{"tf":1.0},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"2":{"tf":1.7320508075688772},"256":{"tf":1.4142135623730951},"276":{"tf":1.7320508075688772},"3":{"tf":1.0},"4":{"tf":1.4142135623730951},"424":{"tf":1.0},"425":{"tf":1.0}}}}}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"293":{"tf":1.0},"86":{"tf":1.0}}}}}},"è":{"df":2,"docs":{"332":{"tf":1.0},"98":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"330":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":5,"docs":{"2":{"tf":1.0},"332":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.4142135623730951}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"21":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"277":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}}}}},"r":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"419":{"tf":1.0}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"281":{"tf":1.0},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"v":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}}}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"243":{"tf":1.0},"346":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"363":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"18":{"tf":1.7320508075688772},"393":{"tf":1.0},"416":{"tf":1.0},"449":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"319":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"16":{"tf":1.4142135623730951},"232":{"tf":1.4142135623730951},"281":{"tf":1.0},"287":{"tf":1.4142135623730951},"412":{"tf":1.4142135623730951},"413":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"412":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"372":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":8,"docs":{"152":{"tf":1.4142135623730951},"229":{"tf":1.4142135623730951},"232":{"tf":1.0},"234":{"tf":1.0},"285":{"tf":1.0},"3":{"tf":1.0},"443":{"tf":1.4142135623730951},"75":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"280":{"tf":1.0},"330":{"tf":1.0},"401":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}}}},"x":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"449":{"tf":1.4142135623730951}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"187":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"364":{"tf":1.4142135623730951}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"150":{"tf":1.4142135623730951},"171":{"tf":1.0},"287":{"tf":1.0},"327":{"tf":1.0},"397":{"tf":1.0},"420":{"tf":1.4142135623730951},"98":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"é":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"412":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"399":{"tf":1.0},"420":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"345":{"tf":1.0},"450":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"401":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"252":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"361":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"86":{"tf":1.0}}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"397":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"448":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"345":{"tf":1.0},"350":{"tf":1.4142135623730951}}}}}}}}},"u":{"df":0,"docs":{},"n":{"df":7,"docs":{"175":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"330":{"tf":1.4142135623730951},"423":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"6":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":6,"docs":{"10":{"tf":1.0},"153":{"tf":1.0},"276":{"tf":1.0},"426":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"71":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"145":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"332":{"tf":1.0},"416":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"é":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"175":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"377":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{},"e":{"2":{"df":23,"docs":{"124":{"tf":1.0},"279":{"tf":1.0},"313":{"tf":1.4142135623730951},"314":{"tf":1.0},"318":{"tf":1.4142135623730951},"320":{"tf":1.4142135623730951},"322":{"tf":2.0},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"325":{"tf":1.7320508075688772},"326":{"tf":1.4142135623730951},"327":{"tf":1.4142135623730951},"328":{"tf":1.0},"329":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"403":{"tf":1.0},"443":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":0,"docs":{}}},"[":{"0":{"4":{"df":2,"docs":{"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":15,"docs":{"146":{"tf":1.0},"174":{"tf":2.0},"186":{"tf":1.0},"272":{"tf":1.7320508075688772},"273":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.7320508075688772},"381":{"tf":1.0},"413":{"tf":1.0},"436":{"tf":1.7320508075688772},"437":{"tf":1.0},"9":{"tf":1.0}}},"y":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":11,"docs":{"102":{"tf":1.4142135623730951},"104":{"tf":1.7320508075688772},"106":{"tf":1.0},"109":{"tf":1.0},"123":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"294":{"tf":1.0},"317":{"tf":2.0},"321":{"tf":1.0}}}}},"d":{"2":{"5":{"5":{"1":{"9":{"df":3,"docs":{"19":{"tf":2.0},"374":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"111":{"tf":1.0},"166":{"tf":1.0}}}}}}},"df":14,"docs":{"105":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"185":{"tf":1.0},"290":{"tf":1.0},"297":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.4142135623730951},"9":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"255":{"tf":1.4142135623730951},"427":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"d":{"b":{"df":1,"docs":{"427":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":4,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"t":{"df":7,"docs":{"232":{"tf":1.0},"237":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.7320508075688772},"248":{"tf":1.0},"250":{"tf":1.0},"317":{"tf":1.0}}}}},"p":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"x":{"\\\\":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"/":{"1":{"\\\\":{".":{"df":0,"docs":{},"x":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"l":{"df":14,"docs":{"1":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"234":{"tf":1.0},"249":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.4142135623730951},"375":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"133":{"tf":1.0}},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"319":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"_":{"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"249":{"tf":1.0}},"e":{"d":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"|":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"/":{"1":{"\\\\":{".":{"0":{"2":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":11,"docs":{"102":{"tf":1.4142135623730951},"117":{"tf":1.7320508075688772},"123":{"tf":1.4142135623730951},"129":{"tf":1.7320508075688772},"243":{"tf":1.7320508075688772},"326":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.4142135623730951},"429":{"tf":1.0},"95":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"377":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":1,"docs":{"316":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"19":{"tf":1.0},"294":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":9,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":2.23606797749979},"173":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":3.605551275463989},"199":{"tf":1.0},"211":{"tf":1.4142135623730951},"257":{"tf":1.0}},"e":{"/":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}}}}}},"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"19":{"tf":1.0},"242":{"tf":1.0},"290":{"tf":1.0},"88":{"tf":1.0}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":6,"docs":{"114":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"133":{"tf":1.0},"445":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.4142135623730951}}}}}}},"d":{"df":11,"docs":{"169":{"tf":2.0},"180":{"tf":1.0},"287":{"tf":1.7320508075688772},"322":{"tf":2.0},"348":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"370":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"427":{"tf":1.0},"82":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"191":{"tf":1.0},"279":{"tf":1.0},"316":{"tf":1.0},"343":{"tf":1.7320508075688772},"344":{"tf":1.0},"347":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.0},"451":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":112,"docs":{"1":{"tf":1.0},"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"167":{"tf":1.4142135623730951},"169":{"tf":1.0},"17":{"tf":1.0},"170":{"tf":1.4142135623730951},"173":{"tf":1.0},"175":{"tf":1.4142135623730951},"176":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"185":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"208":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.4142135623730951},"214":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"231":{"tf":1.0},"232":{"tf":1.0},"24":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":2.449489742783178},"250":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"278":{"tf":1.4142135623730951},"287":{"tf":1.0},"294":{"tf":1.0},"298":{"tf":1.4142135623730951},"301":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.4142135623730951},"323":{"tf":1.0},"327":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"362":{"tf":1.4142135623730951},"363":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"382":{"tf":1.0},"390":{"tf":1.7320508075688772},"392":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951},"397":{"tf":1.0},"4":{"tf":1.0},"403":{"tf":1.0},"417":{"tf":1.0},"444":{"tf":1.0},"450":{"tf":1.4142135623730951},"5":{"tf":1.0},"7":{"tf":1.4142135623730951},"71":{"tf":2.23606797749979},"72":{"tf":1.7320508075688772},"73":{"tf":1.7320508075688772},"79":{"tf":1.4142135623730951},"80":{"tf":1.0},"82":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"94":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":17,"docs":{"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"148":{"tf":1.0},"156":{"tf":1.4142135623730951},"160":{"tf":2.0},"161":{"tf":1.4142135623730951},"165":{"tf":1.7320508075688772},"166":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.4142135623730951},"174":{"tf":1.0},"370":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.4142135623730951},"81":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"160":{"tf":1.0},"174":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"*":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":5,"docs":{"14":{"tf":1.0},"20":{"tf":1.7320508075688772},"346":{"tf":1.0},"422":{"tf":1.0},"426":{"tf":1.4142135623730951}},"é":{"df":3,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}},"t":{"df":0,"docs":{},"é":{"df":2,"docs":{"362":{"tf":1.0},"372":{"tf":1.0}}}},"è":{"df":0,"docs":{},"r":{"df":3,"docs":{"19":{"tf":1.0},"277":{"tf":1.0},"417":{"tf":1.0}}}}},"r":{"df":6,"docs":{"153":{"tf":1.0},"358":{"tf":1.0},"370":{"tf":1.4142135623730951},"382":{"tf":1.0},"402":{"tf":1.0},"82":{"tf":1.0}},"i":{"df":2,"docs":{"197":{"tf":1.0},"428":{"tf":1.0}}},"y":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"é":{"df":2,"docs":{"175":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"372":{"tf":1.0},"373":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"289":{"tf":1.0},"294":{"tf":1.0}}}}}},"v":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":6,"docs":{"155":{"tf":1.0},"166":{"tf":1.0},"235":{"tf":1.0},"249":{"tf":1.4142135623730951},"258":{"tf":1.0},"290":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"102":{"tf":2.0},"131":{"tf":2.0},"159":{"tf":1.4142135623730951},"163":{"tf":1.0},"235":{"tf":1.0},"252":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"159":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"235":{"tf":1.0},"325":{"tf":1.4142135623730951},"327":{"tf":1.0}}}}}}},"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"443":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"443":{"tf":1.0}}}}}}},":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"(":{"\\"":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"|":{"_":{"df":1,"docs":{"259":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"258":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":45,"docs":{"113":{"tf":1.0},"150":{"tf":1.0},"152":{"tf":2.0},"153":{"tf":1.0},"154":{"tf":1.4142135623730951},"155":{"tf":1.4142135623730951},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"160":{"tf":1.0},"163":{"tf":1.0},"166":{"tf":2.449489742783178},"171":{"tf":1.0},"172":{"tf":1.7320508075688772},"177":{"tf":1.0},"180":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.7320508075688772},"189":{"tf":1.0},"2":{"tf":1.0},"232":{"tf":1.4142135623730951},"233":{"tf":1.4142135623730951},"235":{"tf":1.0},"237":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.7320508075688772},"247":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":2.449489742783178},"250":{"tf":1.4142135623730951},"252":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951},"287":{"tf":1.0},"290":{"tf":2.6457513110645907},"291":{"tf":1.0},"293":{"tf":1.4142135623730951},"296":{"tf":1.0},"297":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"414":{"tf":1.0},"443":{"tf":1.4142135623730951},"75":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":2.6457513110645907},"84":{"tf":2.0}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"277":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.0}},"n":{"df":2,"docs":{"443":{"tf":1.0},"95":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"169":{"tf":1.0}}},"y":{"df":0,"docs":{},"é":{"df":1,"docs":{"175":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"f":{"df":24,"docs":{"102":{"tf":1.4142135623730951},"105":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"115":{"tf":1.4142135623730951},"116":{"tf":1.4142135623730951},"121":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"126":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"191":{"tf":1.4142135623730951},"192":{"tf":1.4142135623730951},"193":{"tf":1.4142135623730951},"194":{"tf":1.4142135623730951},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"199":{"tf":1.4142135623730951},"201":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}}}},"r":{"d":{"df":1,"docs":{"280":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"166":{"tf":1.7320508075688772},"21":{"tf":1.0},"23":{"tf":1.0},"288":{"tf":1.0},"372":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"[":{"df":0,"docs":{},"e":{"0":{"4":{"6":{"3":{"df":1,"docs":{"300":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"df":6,"docs":{"208":{"tf":1.4142135623730951},"291":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"401":{"tf":1.0},"88":{"tf":1.4142135623730951}},"|":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"124":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"s":{"df":2,"docs":{"17":{"tf":1.0},"298":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}},"p":{"a":{"c":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"288":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"290":{"tf":1.0}}}}}}}}},"t":{"df":139,"docs":{"1":{"tf":1.4142135623730951},"104":{"tf":1.0},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.7320508075688772},"152":{"tf":1.0},"160":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.4142135623730951},"18":{"tf":1.0},"181":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"211":{"tf":1.4142135623730951},"212":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.7320508075688772},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.0},"244":{"tf":1.7320508075688772},"248":{"tf":1.0},"249":{"tf":1.7320508075688772},"25":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"277":{"tf":1.0},"282":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.0},"29":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.7320508075688772},"3":{"tf":1.4142135623730951},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"416":{"tf":1.7320508075688772},"418":{"tf":1.4142135623730951},"419":{"tf":1.0},"420":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":2.0},"84":{"tf":1.0},"86":{"tf":1.7320508075688772},"87":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"15":{"tf":1.0},"286":{"tf":1.0},"81":{"tf":1.0}}}}}},"t":{"c":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"d":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"195":{"tf":1.0},"196":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"194":{"tf":1.0},"205":{"tf":1.7320508075688772}}}}}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":2,"docs":{"198":{"tf":1.4142135623730951},"199":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"197":{"tf":1.4142135623730951},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":1,"docs":{"190":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"j":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"199":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{".":{"d":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"201":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"116":{"tf":2.0},"130":{"tf":1.0},"202":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"d":{"/":{"9":{"9":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":4,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"122":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":4,"docs":{"159":{"tf":1.0},"189":{"tf":1.7320508075688772},"356":{"tf":1.0},"377":{"tf":1.0}}},"df":215,"docs":{"1":{"tf":1.7320508075688772},"102":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.4142135623730951},"127":{"tf":1.0},"13":{"tf":1.4142135623730951},"131":{"tf":1.4142135623730951},"133":{"tf":1.4142135623730951},"135":{"tf":1.0},"137":{"tf":2.0},"138":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.4142135623730951},"16":{"tf":2.0},"166":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":2.0},"169":{"tf":1.0},"17":{"tf":2.23606797749979},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"18":{"tf":1.4142135623730951},"186":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":2.0},"20":{"tf":1.7320508075688772},"204":{"tf":1.4142135623730951},"21":{"tf":1.0},"211":{"tf":1.7320508075688772},"214":{"tf":2.23606797749979},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.23606797749979},"231":{"tf":1.0},"234":{"tf":1.0},"24":{"tf":1.4142135623730951},"240":{"tf":1.0},"243":{"tf":1.4142135623730951},"244":{"tf":1.4142135623730951},"245":{"tf":1.4142135623730951},"249":{"tf":1.0},"25":{"tf":2.0},"253":{"tf":1.0},"254":{"tf":1.0},"26":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":2.0},"263":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"280":{"tf":1.7320508075688772},"282":{"tf":1.0},"284":{"tf":1.7320508075688772},"285":{"tf":1.4142135623730951},"286":{"tf":1.0},"287":{"tf":2.23606797749979},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"291":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":2.0},"299":{"tf":1.0},"300":{"tf":1.4142135623730951},"301":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":2.0},"309":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"318":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"35":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"358":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"369":{"tf":1.0},"37":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.4142135623730951},"382":{"tf":1.7320508075688772},"384":{"tf":2.0},"385":{"tf":1.0},"386":{"tf":1.0},"388":{"tf":1.4142135623730951},"389":{"tf":1.0},"39":{"tf":2.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.4142135623730951},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.4142135623730951},"40":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"448":{"tf":1.4142135623730951},"449":{"tf":1.7320508075688772},"45":{"tf":2.0},"46":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":2.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":2.449489742783178},"85":{"tf":1.7320508075688772},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":2.23606797749979},"9":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"df":1,"docs":{"348":{"tf":1.0}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":5,"docs":{"280":{"tf":1.4142135623730951},"288":{"tf":1.0},"347":{"tf":1.0},"75":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"198":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"363":{"tf":1.0}}}}}}}},"df":7,"docs":{"153":{"tf":1.0},"173":{"tf":1.0},"20":{"tf":1.0},"294":{"tf":1.0},"363":{"tf":1.0},"86":{"tf":1.0},"95":{"tf":1.7320508075688772}},"e":{"c":{"(":{"d":{"b":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"374":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":10,"docs":{"154":{"tf":1.4142135623730951},"155":{"tf":1.4142135623730951},"17":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"318":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"238":{"tf":1.4142135623730951},"280":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"243":{"tf":2.23606797749979}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"311":{"tf":1.4142135623730951}}}}},"df":9,"docs":{"129":{"tf":1.4142135623730951},"146":{"tf":1.0},"15":{"tf":1.0},"232":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"291":{"tf":1.0},"373":{"tf":1.0},"427":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"242":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":2,"docs":{"175":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"129":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"(":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"\'":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"=":{"a":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"318":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"383":{"tf":1.0}}}}},"df":4,"docs":{"318":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"r":{"df":5,"docs":{"18":{"tf":1.0},"243":{"tf":1.4142135623730951},"393":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"n":{"df":75,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"df":0,"docs":{},"i":{"c":{"df":58,"docs":{"10":{"tf":1.4142135623730951},"266":{"tf":1.7320508075688772},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.4142135623730951},"3":{"tf":1.0},"410":{"tf":1.7320508075688772},"411":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"415":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"63":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.4142135623730951},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"159":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"168":{"tf":1.0},"231":{"tf":1.0},"358":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"o":{"df":8,"docs":{"109":{"tf":1.0},"189":{"tf":1.0},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"211":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"166":{"tf":1.0}}}},"s":{"df":3,"docs":{"120":{"tf":1.4142135623730951},"187":{"tf":1.0},"412":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"134":{"tf":1.0},"96":{"tf":1.0}}}},"é":{"df":2,"docs":{"187":{"tf":1.0},"84":{"tf":1.0}}}}},"r":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":1,"docs":{"428":{"tf":3.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":2,"docs":{"361":{"tf":1.7320508075688772},"416":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"n":{"df":29,"docs":{"101":{"tf":1.0},"177":{"tf":1.0},"189":{"tf":1.0},"194":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.0},"345":{"tf":2.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"370":{"tf":1.0},"381":{"tf":1.4142135623730951},"400":{"tf":1.0},"418":{"tf":1.0},"47":{"tf":1.7320508075688772},"48":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"171":{"tf":1.0},"375":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"280":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"423":{"tf":1.0},"426":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":17,"docs":{"145":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":1.0},"327":{"tf":1.0},"379":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"296":{"tf":1.0}}},"df":0,"docs":{}},"z":{"df":2,"docs":{"300":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"f":{"6":{"df":0,"docs":{},"e":{"5":{"1":{"1":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"[":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"208":{"tf":1.0}}}}},"m":{"d":{"df":1,"docs":{"125":{"tf":1.0}}},"df":0,"docs":{}}},"@":{"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}}}},"df":32,"docs":{"125":{"tf":1.4142135623730951},"126":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"187":{"tf":1.7320508075688772},"188":{"tf":2.0},"189":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.7320508075688772},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":2.23606797749979},"205":{"tf":2.23606797749979},"206":{"tf":1.7320508075688772},"207":{"tf":2.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.4142135623730951},"214":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"166":{"tf":1.0},"184":{"tf":1.0},"197":{"tf":1.0},"207":{"tf":1.4142135623730951},"291":{"tf":1.0},"300":{"tf":1.0},"317":{"tf":1.0},"347":{"tf":1.0},"88":{"tf":1.0}},"e":{"d":{".":{"*":{"4":{"0":{"1":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"197":{"tf":1.0}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":11,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.4142135623730951},"205":{"tf":1.0},"214":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"175":{"tf":1.4142135623730951}}}}},"r":{"df":6,"docs":{"103":{"tf":1.0},"16":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"s":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"278":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"t":{"df":11,"docs":{"113":{"tf":1.0},"133":{"tf":1.0},"148":{"tf":1.0},"151":{"tf":1.0},"177":{"tf":1.0},"19":{"tf":1.0},"249":{"tf":1.0},"292":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"98":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":5,"docs":{"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"250":{"tf":1.0},"259":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":8,"docs":{"173":{"tf":1.0},"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"211":{"tf":1.0},"243":{"tf":3.4641016151377544},"249":{"tf":1.0},"319":{"tf":1.7320508075688772},"425":{"tf":1.0}},"e":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"286":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"m":{"df":1,"docs":{"249":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"354":{"tf":1.0}}},"t":{"df":1,"docs":{"8":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"l":{":":{".":{"*":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"197":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"d":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"347":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}},"ç":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"280":{"tf":1.0},"281":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":8,"docs":{"116":{"tf":1.0},"185":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"207":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"301":{"tf":1.0},"393":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"347":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"107":{"tf":1.4142135623730951}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"é":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"348":{"tf":1.0},"356":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"88":{"tf":1.0}}}},"f":{"df":2,"docs":{"43":{"tf":1.7320508075688772},"44":{"tf":1.0}},"i":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":41,"docs":{"150":{"tf":1.0},"152":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"172":{"tf":1.4142135623730951},"186":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.0},"190":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"235":{"tf":1.7320508075688772},"290":{"tf":1.0},"292":{"tf":1.7320508075688772},"294":{"tf":1.0},"314":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":1.4142135623730951},"419":{"tf":1.4142135623730951},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0},"442":{"tf":2.0},"443":{"tf":1.7320508075688772},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"451":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"84":{"tf":2.23606797749979}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"197":{"tf":1.0},"198":{"tf":1.0},"317":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"160":{"tf":1.0},"19":{"tf":1.4142135623730951},"199":{"tf":1.0},"294":{"tf":1.0},"346":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"360":{"tf":1.0}}}}}}}},"t":{"df":1,"docs":{"357":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"(":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},".":{"d":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"127":{"tf":2.0},"189":{"tf":3.4641016151377544},"199":{"tf":1.4142135623730951}}}},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"320":{"tf":1.0}}}},"df":3,"docs":{"127":{"tf":1.0},"190":{"tf":1.4142135623730951},"205":{"tf":1.4142135623730951}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"202":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"357":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.0}}}},"d":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"d":{"b":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":1,"docs":{"373":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":4,"docs":{"169":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"300":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":3.4641016151377544}}}}}},"df":7,"docs":{"113":{"tf":1.0},"14":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.4142135623730951},"80":{"tf":1.0}},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"372":{"tf":1.0},"374":{"tf":1.0},"402":{"tf":1.0},"424":{"tf":1.4142135623730951},"426":{"tf":1.4142135623730951},"84":{"tf":1.0},"85":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"108":{"tf":1.4142135623730951},"134":{"tf":1.0},"211":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"373":{"tf":1.0},"86":{"tf":1.0}}}}},"x":{"df":3,"docs":{"133":{"tf":1.0},"166":{"tf":1.0},"95":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"314":{"tf":1.4142135623730951},"318":{"tf":1.0},"325":{"tf":1.0},"328":{"tf":2.0},"334":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"328":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"208":{"tf":1.0},"348":{"tf":1.0}}},"df":0,"docs":{}},"w":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"169":{"tf":1.0},"174":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"396":{"tf":1.0}}}},"u":{"df":0,"docs":{},"x":{"df":13,"docs":{"16":{"tf":1.0},"281":{"tf":1.0},"345":{"tf":1.0},"348":{"tf":1.4142135623730951},"359":{"tf":1.0},"422":{"tf":1.7320508075688772},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"t":{"df":6,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}}},"n":{"df":7,"docs":{"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"316":{"tf":2.0},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0}}},"o":{"df":0,"docs":{},"i":{"df":10,"docs":{"102":{"tf":1.4142135623730951},"104":{"tf":1.0},"107":{"tf":1.0},"147":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"234":{"tf":1.0},"242":{"tf":1.0},"249":{"tf":1.0},"313":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"174":{"tf":1.0},"346":{"tf":1.0},"447":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.7320508075688772}},"é":{"df":3,"docs":{"168":{"tf":1.0},"295":{"tf":1.4142135623730951},"318":{"tf":1.0}}}}}}},"df":10,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"169":{"tf":1.0},"231":{"tf":1.0},"281":{"tf":1.0},"327":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"375":{"tf":1.0},"432":{"tf":1.7320508075688772},"433":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":6,"docs":{"250":{"tf":1.0},"253":{"tf":1.4142135623730951},"277":{"tf":1.0},"316":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951},"72":{"tf":1.0}}}}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"361":{"tf":1.4142135623730951},"416":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":4,"docs":{"279":{"tf":1.0},"414":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"r":{"b":{"df":0,"docs":{},"i":{"d":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":4,"docs":{"189":{"tf":1.7320508075688772},"195":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"217":{"tf":1.7320508075688772},"218":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":3,"docs":{"1":{"tf":1.0},"276":{"tf":1.0},"416":{"tf":1.0}},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"450":{"tf":1.0}}}}},"df":1,"docs":{"450":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}},"k":{"df":1,"docs":{"276":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"389":{"tf":1.0}}}},"df":5,"docs":{"174":{"tf":1.0},"18":{"tf":1.0},"199":{"tf":1.0},"320":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":10,"docs":{"189":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"327":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.0},"332":{"tf":1.0},"375":{"tf":1.4142135623730951},"402":{"tf":1.0},"86":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"133":{"tf":2.0},"134":{"tf":1.4142135623730951},"202":{"tf":2.449489742783178},"214":{"tf":1.0},"394":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"166":{"tf":1.0},"183":{"tf":1.0},"199":{"tf":1.0},"205":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"199":{"tf":1.4142135623730951},"6":{"tf":1.0}},"t":{"df":6,"docs":{"188":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"276":{"tf":1.0},"328":{"tf":1.0},"72":{"tf":1.0}}}}}}}},"q":{"d":{"df":0,"docs":{},"n":{"df":1,"docs":{"95":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":17,"docs":{"358":{"tf":1.4142135623730951},"359":{"tf":1.4142135623730951},"361":{"tf":1.4142135623730951},"362":{"tf":1.0},"363":{"tf":2.23606797749979},"364":{"tf":1.4142135623730951},"375":{"tf":2.23606797749979},"376":{"tf":1.0},"377":{"tf":1.4142135623730951},"399":{"tf":1.7320508075688772},"400":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.7320508075688772},"417":{"tf":1.0},"418":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"ç":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"397":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":3,"docs":{"298":{"tf":1.0},"313":{"tf":1.4142135623730951},"397":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"402":{"tf":1.4142135623730951}}}}}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"346":{"tf":1.0},"352":{"tf":1.4142135623730951}}},"df":0,"docs":{},"t":{"df":1,"docs":{"444":{"tf":1.0}}}}}}}}},"s":{"[":{"(":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"348":{"tf":1.7320508075688772},"376":{"tf":1.4142135623730951},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"423":{"tf":1.7320508075688772},"424":{"tf":2.23606797749979},"425":{"tf":2.0},"428":{"tf":2.23606797749979},"429":{"tf":1.7320508075688772}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"187":{"tf":1.0},"189":{"tf":1.0}},"é":{"df":1,"docs":{"208":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"43":{"tf":1.7320508075688772},"44":{"tf":1.0}},"n":{"df":1,"docs":{"8":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"g":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"352":{"tf":1.0}}},"df":0,"docs":{}}}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"351":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"214":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"165":{"tf":1.0},"420":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.0}}}}},"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":6,"docs":{"277":{"tf":1.0},"280":{"tf":1.0},"380":{"tf":1.0},"389":{"tf":2.0},"390":{"tf":1.7320508075688772},"421":{"tf":1.0}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"c":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}}}},"df":2,"docs":{"16":{"tf":2.23606797749979},"348":{"tf":2.449489742783178}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":3,"docs":{"184":{"tf":1.0},"19":{"tf":1.0},"85":{"tf":1.0}}}}},"o":{"df":1,"docs":{"214":{"tf":1.0}},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"214":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"1":{"tf":1.0},"325":{"tf":1.0},"331":{"tf":1.4142135623730951},"332":{"tf":1.0},"401":{"tf":1.4142135623730951},"416":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"t":{".":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"147":{"tf":1.0},"151":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"449":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"359":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"277":{"tf":1.0},"278":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}}}},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{")":{".":{"*":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{".":{"*":{"\\"":{"(":{"?":{":":{"%":{"(":{"b":{"a":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{")":{"df":0,"docs":{},"s":{"df":0,"docs":{},"|":{"%":{"(":{"b":{"a":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{")":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"192":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}}}}}},"h":{"c":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"2":{")":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"348":{"tf":1.0},"373":{"tf":1.0}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"@":{"<":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"123":{"tf":1.0},"124":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"300":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"84":{"tf":1.4142135623730951}},"s":{":":{"/":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"}":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"346":{"tf":1.0},"419":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.4142135623730951}}}}},"df":53,"docs":{"1":{"tf":1.0},"108":{"tf":1.0},"120":{"tf":1.4142135623730951},"123":{"tf":2.449489742783178},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"175":{"tf":1.0},"180":{"tf":1.7320508075688772},"2":{"tf":1.0},"202":{"tf":1.4142135623730951},"208":{"tf":1.0},"22":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"286":{"tf":1.4142135623730951},"287":{"tf":1.7320508075688772},"288":{"tf":1.7320508075688772},"289":{"tf":1.4142135623730951},"294":{"tf":2.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"326":{"tf":1.0},"346":{"tf":1.0},"356":{"tf":2.6457513110645907},"357":{"tf":1.0},"370":{"tf":2.449489742783178},"372":{"tf":1.0},"373":{"tf":2.23606797749979},"374":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"380":{"tf":1.0},"383":{"tf":1.4142135623730951},"392":{"tf":1.0},"406":{"tf":1.7320508075688772},"407":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.0},"416":{"tf":1.0},"417":{"tf":1.0},"419":{"tf":1.7320508075688772},"423":{"tf":2.6457513110645907},"424":{"tf":4.0},"425":{"tf":3.7416573867739413},"428":{"tf":3.1622776601683795},"5":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.7320508075688772},"96":{"tf":1.0}},"e":{"a":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"450":{"tf":1.0}}}}},"df":1,"docs":{"450":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"u":{"b":{"df":2,"docs":{"243":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"235":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"*":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{".":{"*":{"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"148":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"105":{"tf":1.0},"116":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"113":{"tf":1.0},"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"284":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":4,"docs":{"84":{"tf":1.0},"85":{"tf":3.3166247903554},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"82":{"tf":1.0},"84":{"tf":1.7320508075688772}}}}},"p":{"df":0,"docs":{},"g":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"291":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"291":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"121":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"313":{"tf":1.4142135623730951},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":2,"docs":{"372":{"tf":1.0},"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":162,"docs":{"1":{"tf":1.7320508075688772},"10":{"tf":1.4142135623730951},"108":{"tf":1.7320508075688772},"109":{"tf":1.4142135623730951},"110":{"tf":1.4142135623730951},"113":{"tf":2.23606797749979},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":1.7320508075688772},"123":{"tf":1.0},"124":{"tf":2.8284271247461903},"126":{"tf":1.0},"127":{"tf":2.8284271247461903},"129":{"tf":1.0},"13":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.4142135623730951},"139":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"140":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":2.0},"148":{"tf":2.0},"15":{"tf":1.4142135623730951},"153":{"tf":1.0},"155":{"tf":1.7320508075688772},"156":{"tf":1.0},"16":{"tf":2.23606797749979},"161":{"tf":1.0},"163":{"tf":1.4142135623730951},"164":{"tf":2.23606797749979},"166":{"tf":2.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"171":{"tf":1.7320508075688772},"172":{"tf":2.23606797749979},"174":{"tf":1.4142135623730951},"177":{"tf":1.0},"179":{"tf":1.0},"18":{"tf":1.7320508075688772},"180":{"tf":1.7320508075688772},"185":{"tf":1.4142135623730951},"186":{"tf":2.0},"187":{"tf":1.4142135623730951},"189":{"tf":3.4641016151377544},"19":{"tf":1.0},"191":{"tf":1.4142135623730951},"192":{"tf":1.7320508075688772},"193":{"tf":2.0},"194":{"tf":1.4142135623730951},"199":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":2.0},"201":{"tf":1.0},"204":{"tf":2.23606797749979},"205":{"tf":2.0},"206":{"tf":1.7320508075688772},"207":{"tf":1.0},"208":{"tf":2.449489742783178},"209":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"210":{"tf":1.0},"214":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"232":{"tf":1.0},"24":{"tf":1.4142135623730951},"252":{"tf":1.0},"276":{"tf":1.4142135623730951},"277":{"tf":1.0},"281":{"tf":1.0},"284":{"tf":1.7320508075688772},"285":{"tf":1.4142135623730951},"286":{"tf":1.4142135623730951},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"289":{"tf":2.8284271247461903},"290":{"tf":1.0},"291":{"tf":2.0},"292":{"tf":1.4142135623730951},"293":{"tf":3.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.7320508075688772},"297":{"tf":1.0},"298":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"3":{"tf":1.0},"300":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"310":{"tf":1.0},"312":{"tf":1.4142135623730951},"317":{"tf":1.0},"320":{"tf":1.4142135623730951},"322":{"tf":1.0},"326":{"tf":1.0},"345":{"tf":1.0},"358":{"tf":1.4142135623730951},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.4142135623730951},"369":{"tf":1.0},"372":{"tf":1.7320508075688772},"373":{"tf":1.4142135623730951},"374":{"tf":1.4142135623730951},"375":{"tf":3.0},"376":{"tf":1.4142135623730951},"379":{"tf":1.0},"383":{"tf":2.449489742783178},"388":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.4142135623730951},"416":{"tf":2.23606797749979},"417":{"tf":1.4142135623730951},"419":{"tf":1.4142135623730951},"420":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.4142135623730951},"424":{"tf":1.4142135623730951},"425":{"tf":1.7320508075688772},"426":{"tf":1.0},"428":{"tf":1.4142135623730951},"442":{"tf":1.7320508075688772},"444":{"tf":1.4142135623730951},"445":{"tf":1.0},"447":{"tf":1.4142135623730951},"449":{"tf":1.0},"450":{"tf":1.0},"5":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.7320508075688772},"66":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"76":{"tf":1.4142135623730951},"79":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.4142135623730951},"84":{"tf":2.23606797749979},"85":{"tf":3.7416573867739413},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"401":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"429":{"tf":1.0}}}}}}}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":12,"docs":{"124":{"tf":1.4142135623730951},"161":{"tf":1.0},"172":{"tf":1.0},"201":{"tf":1.4142135623730951},"208":{"tf":1.0},"268":{"tf":1.7320508075688772},"269":{"tf":1.0},"314":{"tf":1.4142135623730951},"325":{"tf":1.4142135623730951},"327":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"291":{"tf":1.0}}}},"o":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"151":{"tf":1.0},"447":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":3,"docs":{"18":{"tf":1.0},"243":{"tf":1.0},"74":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"148":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":7,"docs":{"277":{"tf":1.0},"287":{"tf":1.0},"370":{"tf":1.0},"413":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":19,"docs":{"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.4142135623730951},"166":{"tf":1.0},"185":{"tf":1.0},"205":{"tf":1.0},"207":{"tf":1.0},"212":{"tf":1.0},"290":{"tf":1.0},"320":{"tf":1.0},"83":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}}}},"o":{"df":2,"docs":{"133":{"tf":1.0},"356":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":178,"docs":{"135":{"tf":1.7320508075688772},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"145":{"tf":1.4142135623730951},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":1.0},"161":{"tf":1.0},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"251":{"tf":1.4142135623730951},"256":{"tf":1.4142135623730951},"277":{"tf":1.4142135623730951},"3":{"tf":1.0},"306":{"tf":1.7320508075688772},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.7320508075688772},"310":{"tf":1.0},"311":{"tf":1.0},"312":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"32":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"329":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"35":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"36":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"8":{"tf":1.0}},"é":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}}}},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"82":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.7320508075688772}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"169":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"1":{"tf":1.0},"19":{"tf":1.0},"293":{"tf":1.0},"374":{"tf":1.0},"381":{"tf":1.0}}}}}}},"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"177":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"292":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"102":{"tf":1.4142135623730951},"15":{"tf":1.0},"179":{"tf":1.0}}},"z":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"363":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"401":{"tf":1.0},"416":{"tf":1.4142135623730951},"417":{"tf":1.0}}}}},"é":{"df":1,"docs":{"299":{"tf":1.0}},"e":{"df":2,"docs":{"15":{"tf":1.0},"84":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":10,"docs":{"223":{"tf":1.7320508075688772},"224":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"5":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.4142135623730951}}}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"h":{"a":{"df":1,"docs":{"76":{"tf":1.0}},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"316":{"tf":1.0},"348":{"tf":1.0},"354":{"tf":1.0},"364":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":2.0},"380":{"tf":1.0},"396":{"tf":1.0},"427":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"446":{"tf":1.0},"89":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"363":{"tf":1.0}}}},"df":4,"docs":{"181":{"tf":1.0},"362":{"tf":1.0},"393":{"tf":1.4142135623730951},"394":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"17":{"tf":1.0},"21":{"tf":1.0},"317":{"tf":1.7320508075688772},"352":{"tf":1.0},"86":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":2,"docs":{"348":{"tf":3.3166247903554},"394":{"tf":1.0}},"e":{"a":{"d":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"133":{"tf":1.0},"377":{"tf":1.0},"402":{"tf":1.0},"445":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"(":{")":{".":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"313":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":3,"docs":{"85":{"tf":1.7320508075688772},"87":{"tf":1.0},"88":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"280":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"277":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"397":{"tf":1.0}}}}}}},"x":{"a":{"d":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"102":{"tf":1.0},"184":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"181":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"347":{"tf":1.0}}}}}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":3,"docs":{"281":{"tf":1.0},"434":{"tf":1.7320508075688772},"435":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"1":{"tf":1.0},"8":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"/":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"19":{"tf":1.0}}},"df":0,"docs":{}}}},"df":1,"docs":{"19":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"k":{"df":16,"docs":{"280":{"tf":1.0},"289":{"tf":1.0},"360":{"tf":2.0},"361":{"tf":1.0},"364":{"tf":2.23606797749979},"370":{"tf":2.0},"376":{"tf":2.0},"383":{"tf":1.0},"392":{"tf":1.0},"406":{"tf":1.7320508075688772},"407":{"tf":1.0},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"416":{"tf":1.0},"425":{"tf":1.4142135623730951},"429":{"tf":2.6457513110645907}},"s":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"364":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":4,"docs":{"166":{"tf":1.0},"18":{"tf":1.0},"192":{"tf":1.0},"206":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":32,"docs":{"1":{"tf":1.0},"108":{"tf":1.7320508075688772},"109":{"tf":1.4142135623730951},"111":{"tf":1.0},"113":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":1.0},"124":{"tf":2.0},"126":{"tf":1.0},"127":{"tf":1.4142135623730951},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":2.0},"194":{"tf":1.7320508075688772},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"198":{"tf":1.0},"199":{"tf":1.0},"202":{"tf":2.449489742783178},"206":{"tf":1.7320508075688772},"214":{"tf":1.0},"293":{"tf":1.4142135623730951},"445":{"tf":1.0},"448":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"108":{"tf":1.0},"153":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"119":{"tf":1.0}}}},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":4,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"375":{"tf":1.7320508075688772},"428":{"tf":1.0}}},"x":{"df":6,"docs":{"281":{"tf":1.0},"375":{"tf":1.4142135623730951},"377":{"tf":1.0},"418":{"tf":1.7320508075688772},"438":{"tf":1.7320508075688772},"439":{"tf":1.0}}}},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":2.6457513110645907}}}}}}},"/":{"2":{"df":1,"docs":{"119":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"394":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"286":{"tf":1.0}}}}}}}}}}}}},":":{"/":{"/":{"0":{".":{"0":{".":{"0":{".":{"0":{":":{"4":{"0":{"0":{"0":{"df":2,"docs":{"293":{"tf":1.4142135623730951},"299":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"294":{"tf":1.0},"299":{"tf":1.0}}}}}},"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":5,"docs":{"293":{"tf":1.0},"294":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"0":{"8":{"0":{"df":1,"docs":{"178":{"tf":1.0}}},"1":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"}":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":37,"docs":{"1":{"tf":1.0},"102":{"tf":2.0},"108":{"tf":1.4142135623730951},"113":{"tf":1.0},"114":{"tf":1.4142135623730951},"119":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"133":{"tf":2.0},"134":{"tf":1.7320508075688772},"16":{"tf":1.0},"169":{"tf":1.7320508075688772},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"202":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.0},"316":{"tf":1.0},"326":{"tf":1.0},"348":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"401":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.7320508075688772},"414":{"tf":1.4142135623730951},"75":{"tf":1.0},"82":{"tf":1.4142135623730951},"85":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":2.0}},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{">":{"/":{"<":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{">":{"/":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"206":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"119":{"tf":1.4142135623730951},"124":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"289":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"178":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{".":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"146":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"146":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"177":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"x":{"df":1,"docs":{"449":{"tf":1.0}}}}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"248":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951},"378":{"tf":1.0},"420":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"z":{"df":2,"docs":{"352":{"tf":1.7320508075688772},"357":{"tf":1.0}}},"é":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"16":{"tf":1.0}},"é":{"df":2,"docs":{"167":{"tf":1.0},"412":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"317":{"tf":1.0},"380":{"tf":1.0},"382":{"tf":1.0}}}},"df":0,"docs":{}}}}},"ô":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"374":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}}},"i":{"1":{"8":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"399":{"tf":1.0},"416":{"tf":1.0}}}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"351":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"442":{"tf":1.0},"84":{"tf":1.0}}}},"d":{"=":{"1":{"df":1,"docs":{"86":{"tf":1.0}}},"df":0,"docs":{}},"df":7,"docs":{"185":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"348":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"147":{"tf":1.0}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"146":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"19":{"tf":1.0}},"i":{"df":3,"docs":{"293":{"tf":1.0},"330":{"tf":1.0},"86":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"393":{"tf":1.0}}}},"é":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"124":{"tf":1.0}}},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"316":{"tf":1.0},"348":{"tf":1.0}},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"206":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":9,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0}}}}}}}},"é":{"df":1,"docs":{"156":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"l":{"df":17,"docs":{"104":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"18":{"tf":1.0},"214":{"tf":1.0},"232":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"347":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"84":{"tf":1.0}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"249":{"tf":1.0}},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"449":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"151":{"tf":1.0},"164":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"380":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"396":{"tf":1.0}}}}},"p":{"_":{"df":1,"docs":{"236":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"234":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"é":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":10,"docs":{"178":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0},"253":{"tf":1.0},"319":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"361":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"353":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"279":{"tf":1.4142135623730951},"341":{"tf":1.7320508075688772},"342":{"tf":1.0},"343":{"tf":1.7320508075688772},"344":{"tf":1.0},"360":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.0},"376":{"tf":1.0},"393":{"tf":1.4142135623730951}},"é":{"df":1,"docs":{"416":{"tf":1.0}}}}}}}}},"o":{"df":1,"docs":{"418":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"194":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"194":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"194":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"194":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":1,"docs":{"236":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"b":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"{":{"df":0,"docs":{},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":2,"docs":{"346":{"tf":1.4142135623730951},"348":{"tf":2.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"=":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"=":{"2":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"s":{"=":{"1":{"8":{"0":{"0":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":28,"docs":{"102":{"tf":1.0},"189":{"tf":1.7320508075688772},"194":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951},"244":{"tf":1.0},"279":{"tf":1.0},"318":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.4142135623730951},"345":{"tf":1.7320508075688772},"346":{"tf":1.4142135623730951},"347":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":2.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"416":{"tf":1.0},"450":{"tf":1.4142135623730951},"47":{"tf":1.7320508075688772},"48":{"tf":1.0},"8":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"348":{"tf":1.0}},"}":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"166":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"n":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"u":{"df":1,"docs":{"183":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"330":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"166":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"160":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"293":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"401":{"tf":1.0}}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"294":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"166":{"tf":1.0},"184":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"419":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"370":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"176":{"tf":1.0},"3":{"tf":1.0},"352":{"tf":1.0}}}}},"df":3,"docs":{"168":{"tf":1.0},"232":{"tf":1.0},"356":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":5,"docs":{"163":{"tf":1.0},"243":{"tf":1.0},"293":{"tf":2.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"280":{"tf":1.4142135623730951},"3":{"tf":1.0},"75":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"1":{"tf":1.0},"250":{"tf":1.0},"311":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"373":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"m":{"d":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"249":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":3,"docs":{"21":{"tf":1.0},"242":{"tf":1.4142135623730951},"314":{"tf":1.0}}},"z":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":78,"docs":{"102":{"tf":1.0},"104":{"tf":1.4142135623730951},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"178":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"249":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"294":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"356":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":4,"docs":{"397":{"tf":1.0},"402":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"102":{"tf":1.0},"250":{"tf":1.0},"330":{"tf":1.4142135623730951},"422":{"tf":1.0},"429":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":10,"docs":{"242":{"tf":1.0},"294":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.7320508075688772},"348":{"tf":1.7320508075688772},"349":{"tf":1.7320508075688772},"377":{"tf":1.0},"423":{"tf":1.4142135623730951},"426":{"tf":1.0},"429":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"l":{"df":38,"docs":{"100":{"tf":1.4142135623730951},"113":{"tf":1.0},"115":{"tf":1.7320508075688772},"126":{"tf":1.7320508075688772},"133":{"tf":1.0},"146":{"tf":1.4142135623730951},"15":{"tf":1.0},"151":{"tf":1.4142135623730951},"156":{"tf":1.0},"160":{"tf":1.7320508075688772},"166":{"tf":1.0},"171":{"tf":1.7320508075688772},"177":{"tf":1.7320508075688772},"183":{"tf":1.0},"186":{"tf":1.0},"188":{"tf":1.7320508075688772},"213":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"292":{"tf":1.4142135623730951},"3":{"tf":1.0},"313":{"tf":1.0},"323":{"tf":1.4142135623730951},"451":{"tf":1.0},"72":{"tf":1.7320508075688772},"73":{"tf":1.4142135623730951},"79":{"tf":1.7320508075688772},"80":{"tf":1.0},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.4142135623730951},"90":{"tf":1.7320508075688772},"91":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}}},"é":{"df":5,"docs":{"147":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"186":{"tf":1.0},"288":{"tf":1.0}}}}},"n":{"c":{"df":24,"docs":{"1":{"tf":1.0},"147":{"tf":1.4142135623730951},"17":{"tf":1.0},"2":{"tf":1.4142135623730951},"225":{"tf":1.7320508075688772},"226":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"285":{"tf":1.0},"322":{"tf":1.0},"4":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"443":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"416":{"tf":1.0}}}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"358":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"150":{"tf":1.0},"313":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"23":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"c":{"df":3,"docs":{"324":{"tf":1.0},"375":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":12,"docs":{"151":{"tf":1.0},"211":{"tf":1.0},"280":{"tf":1.4142135623730951},"384":{"tf":1.7320508075688772},"385":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"442":{"tf":1.0},"5":{"tf":1.0},"82":{"tf":1.0},"87":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"167":{"tf":1.0},"82":{"tf":1.4142135623730951},"89":{"tf":1.0},"97":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"è":{"df":0,"docs":{},"t":{"df":1,"docs":{"379":{"tf":1.0}}}},"é":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"150":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"255":{"tf":1.0},"347":{"tf":1.0}}}}},"v":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"372":{"tf":1.0},"401":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":5,"docs":{"0":{"tf":1.7320508075688772},"1":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":2,"docs":{"166":{"tf":1.4142135623730951},"184":{"tf":1.0}}}}}},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"284":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"6":{"tf":1.0},"84":{"tf":1.0}}},"t":{"df":5,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"316":{"tf":1.4142135623730951},"396":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":20,"docs":{"168":{"tf":1.7320508075688772},"169":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.0},"186":{"tf":1.0},"74":{"tf":1.0}}}},"é":{"df":5,"docs":{"1":{"tf":1.0},"168":{"tf":1.0},"296":{"tf":1.4142135623730951},"312":{"tf":1.0},"5":{"tf":1.0}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"184":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"194":{"tf":1.0},"397":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"p":{">":{"/":{"$":{"df":0,"docs":{},"p":{"df":1,"docs":{"104":{"tf":1.0}}}},"df":0,"docs":{}},":":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}}}}},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"109":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":19,"docs":{"101":{"tf":1.7320508075688772},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"122":{"tf":1.0},"133":{"tf":1.0},"148":{"tf":1.4142135623730951},"153":{"tf":1.0},"154":{"tf":1.0},"160":{"tf":1.4142135623730951},"189":{"tf":1.0},"202":{"tf":2.23606797749979},"206":{"tf":1.7320508075688772},"207":{"tf":1.4142135623730951},"214":{"tf":1.0},"95":{"tf":1.7320508075688772},"97":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"133":{"tf":1.0}}}},"v":{"4":{"df":1,"docs":{"214":{"tf":1.0}}},"6":{"df":1,"docs":{"214":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"a":{"df":1,"docs":{"181":{"tf":1.0}}},"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"s":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"425":{"tf":1.0}}},"y":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"326":{"tf":1.4142135623730951},"380":{"tf":1.0}},"é":{"df":2,"docs":{"381":{"tf":1.0},"397":{"tf":1.0}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"u":{"df":14,"docs":{"2":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.0},"45":{"tf":1.7320508075688772},"450":{"tf":1.0},"46":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"j":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":10,"docs":{"189":{"tf":1.4142135623730951},"190":{"tf":1.0},"199":{"tf":1.0},"204":{"tf":1.4142135623730951},"207":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.4142135623730951}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.0},"167":{"tf":1.0},"189":{"tf":1.0},"234":{"tf":1.0},"242":{"tf":1.0},"249":{"tf":1.0},"346":{"tf":1.0},"361":{"tf":1.0},"393":{"tf":1.4142135623730951},"399":{"tf":1.0},"416":{"tf":1.0},"84":{"tf":1.0}}}},"df":0,"docs":{}},"v":{"a":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"231":{"tf":1.0}}}},"o":{"b":{"df":2,"docs":{"347":{"tf":1.4142135623730951},"414":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":17,"docs":{"108":{"tf":1.0},"128":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951},"131":{"tf":1.4142135623730951},"132":{"tf":1.4142135623730951},"139":{"tf":1.7320508075688772},"140":{"tf":1.0},"165":{"tf":1.4142135623730951},"189":{"tf":1.0},"214":{"tf":1.0},"243":{"tf":1.4142135623730951},"317":{"tf":1.0},"362":{"tf":1.0},"377":{"tf":1.0},"418":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":6,"docs":{"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"185":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951}}}}},"d":{"df":2,"docs":{"205":{"tf":1.0},"208":{"tf":2.0}}},"df":1,"docs":{"346":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"446":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.7320508075688772},"214":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"s":{"df":1,"docs":{"375":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"180":{"tf":1.0},"348":{"tf":1.0},"375":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"5":{"tf":1.0}},"’":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":2,"docs":{"167":{"tf":1.0},"351":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}},"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"=":{"1":{"5":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"j":{"df":0,"docs":{},"w":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"6":{"4":{"_":{"c":{"a":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"290":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":4,"docs":{"155":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.0},"290":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":9,"docs":{"189":{"tf":1.0},"191":{"tf":1.0},"250":{"tf":1.0},"290":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.4142135623730951},"413":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"242":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}}},"df":12,"docs":{"123":{"tf":1.0},"179":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.0},"19":{"tf":2.0},"241":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.0},"375":{"tf":1.0},"85":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}},"|":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"i":{"b":{"/":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"a":{"c":{"df":0,"docs":{},"m":{"df":3,"docs":{"116":{"tf":1.0},"133":{"tf":1.4142135623730951},"97":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"u":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"147":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"133":{"tf":1.0}}}}},"l":{"\'":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":2,"docs":{"314":{"tf":1.4142135623730951},"325":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"83":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":10,"docs":{"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"415":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"160":{"tf":1.0}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"217":{"tf":1.0},"218":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"123":{"tf":1.0},"257":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"171":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"é":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":9,"docs":{"1":{"tf":1.0},"281":{"tf":1.0},"313":{"tf":1.0},"434":{"tf":1.7320508075688772},"435":{"tf":1.0},"445":{"tf":1.0},"45":{"tf":1.7320508075688772},"46":{"tf":1.0},"8":{"tf":1.0}}}}},"df":204,"docs":{"1":{"tf":1.4142135623730951},"101":{"tf":1.0},"103":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":2.0},"109":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.4142135623730951},"125":{"tf":1.0},"13":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"150":{"tf":1.4142135623730951},"156":{"tf":1.4142135623730951},"158":{"tf":1.7320508075688772},"16":{"tf":2.449489742783178},"160":{"tf":1.0},"163":{"tf":1.4142135623730951},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.7320508075688772},"168":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"170":{"tf":1.4142135623730951},"171":{"tf":1.7320508075688772},"173":{"tf":1.4142135623730951},"174":{"tf":1.7320508075688772},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"179":{"tf":1.0},"18":{"tf":2.449489742783178},"186":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.4142135623730951},"199":{"tf":1.7320508075688772},"20":{"tf":2.8284271247461903},"209":{"tf":1.4142135623730951},"21":{"tf":2.0},"210":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.4142135623730951},"221":{"tf":2.0},"222":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.6457513110645907},"231":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":2.0},"249":{"tf":2.449489742783178},"25":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.7320508075688772},"257":{"tf":1.4142135623730951},"258":{"tf":1.7320508075688772},"260":{"tf":2.0},"261":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.4142135623730951},"281":{"tf":1.0},"282":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.4142135623730951},"289":{"tf":1.0},"29":{"tf":2.0},"290":{"tf":2.0},"291":{"tf":2.0},"292":{"tf":1.4142135623730951},"293":{"tf":2.6457513110645907},"294":{"tf":1.4142135623730951},"296":{"tf":1.7320508075688772},"298":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"318":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":2.0},"33":{"tf":1.0},"330":{"tf":2.6457513110645907},"331":{"tf":2.0},"332":{"tf":1.7320508075688772},"333":{"tf":3.1622776601683795},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":2.6457513110645907},"347":{"tf":1.7320508075688772},"35":{"tf":2.0},"352":{"tf":2.23606797749979},"355":{"tf":1.0},"357":{"tf":1.0},"36":{"tf":1.0},"360":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.0},"365":{"tf":2.0},"366":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"373":{"tf":1.0},"379":{"tf":1.4142135623730951},"384":{"tf":1.0},"386":{"tf":2.0},"387":{"tf":1.0},"39":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.4142135623730951},"400":{"tf":1.0},"402":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"419":{"tf":1.4142135623730951},"420":{"tf":1.4142135623730951},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":1.4142135623730951},"84":{"tf":2.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":1.7320508075688772},"9":{"tf":1.7320508075688772},"90":{"tf":1.0},"92":{"tf":1.0},"98":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"189":{"tf":1.0},"19":{"tf":1.0},"211":{"tf":1.0}}}}}}},"n":{"c":{"df":4,"docs":{"150":{"tf":1.4142135623730951},"166":{"tf":1.0},"169":{"tf":1.0},"277":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"290":{"tf":1.0},"293":{"tf":1.0}}}}}},"r":{"df":30,"docs":{"166":{"tf":1.0},"279":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"310":{"tf":1.7320508075688772},"311":{"tf":1.0},"312":{"tf":1.0},"313":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"315":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.7320508075688772},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"329":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"z":{"df":2,"docs":{"287":{"tf":1.0},"293":{"tf":1.4142135623730951}}}}},"df":4,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"206":{"tf":1.0},"95":{"tf":1.0}},"g":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"2":{"tf":1.0}}}},"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"174":{"tf":1.0},"296":{"tf":1.0}}}},"df":2,"docs":{"298":{"tf":2.0},"318":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"21":{"tf":1.0},"333":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":5,"docs":{"150":{"tf":1.4142135623730951},"178":{"tf":1.0},"23":{"tf":1.0},"249":{"tf":1.0},"394":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"k":{"df":2,"docs":{"189":{"tf":1.0},"401":{"tf":1.0}}}},"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"317":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"9":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"163":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":347,"docs":{"1":{"tf":1.0},"10":{"tf":2.0},"100":{"tf":1.4142135623730951},"104":{"tf":2.0},"106":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"118":{"tf":1.4142135623730951},"12":{"tf":1.7320508075688772},"121":{"tf":1.4142135623730951},"127":{"tf":1.0},"129":{"tf":1.4142135623730951},"133":{"tf":1.0},"135":{"tf":1.4142135623730951},"136":{"tf":1.7320508075688772},"137":{"tf":1.4142135623730951},"138":{"tf":1.7320508075688772},"139":{"tf":1.4142135623730951},"140":{"tf":1.7320508075688772},"141":{"tf":1.4142135623730951},"142":{"tf":1.7320508075688772},"143":{"tf":1.4142135623730951},"144":{"tf":1.7320508075688772},"145":{"tf":1.7320508075688772},"146":{"tf":2.449489742783178},"147":{"tf":2.0},"148":{"tf":1.7320508075688772},"15":{"tf":1.0},"150":{"tf":1.7320508075688772},"151":{"tf":1.4142135623730951},"152":{"tf":2.0},"153":{"tf":2.449489742783178},"155":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.7320508075688772},"160":{"tf":1.0},"161":{"tf":2.0},"163":{"tf":1.0},"165":{"tf":2.23606797749979},"166":{"tf":2.6457513110645907},"167":{"tf":2.449489742783178},"168":{"tf":2.23606797749979},"169":{"tf":1.0},"17":{"tf":1.7320508075688772},"171":{"tf":1.7320508075688772},"172":{"tf":1.4142135623730951},"173":{"tf":1.4142135623730951},"174":{"tf":2.23606797749979},"175":{"tf":1.0},"176":{"tf":1.7320508075688772},"177":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"18":{"tf":2.449489742783178},"181":{"tf":2.23606797749979},"183":{"tf":1.7320508075688772},"184":{"tf":1.0},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.7320508075688772},"199":{"tf":2.0},"2":{"tf":2.23606797749979},"20":{"tf":1.0},"201":{"tf":1.4142135623730951},"202":{"tf":1.7320508075688772},"206":{"tf":1.0},"207":{"tf":1.0},"21":{"tf":2.449489742783178},"211":{"tf":2.0},"212":{"tf":1.0},"214":{"tf":2.23606797749979},"215":{"tf":2.23606797749979},"216":{"tf":2.0},"217":{"tf":2.23606797749979},"218":{"tf":2.0},"219":{"tf":1.4142135623730951},"220":{"tf":1.7320508075688772},"221":{"tf":1.4142135623730951},"222":{"tf":1.7320508075688772},"223":{"tf":2.23606797749979},"224":{"tf":2.0},"225":{"tf":1.4142135623730951},"226":{"tf":1.7320508075688772},"227":{"tf":1.4142135623730951},"228":{"tf":1.7320508075688772},"229":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"230":{"tf":1.7320508075688772},"231":{"tf":1.4142135623730951},"234":{"tf":1.4142135623730951},"235":{"tf":1.0},"237":{"tf":1.0},"24":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":2.0},"247":{"tf":1.0},"249":{"tf":2.23606797749979},"25":{"tf":1.4142135623730951},"251":{"tf":1.4142135623730951},"252":{"tf":1.0},"254":{"tf":1.4142135623730951},"255":{"tf":1.7320508075688772},"256":{"tf":1.4142135623730951},"257":{"tf":1.7320508075688772},"258":{"tf":1.0},"259":{"tf":1.0},"26":{"tf":1.7320508075688772},"260":{"tf":1.4142135623730951},"261":{"tf":1.7320508075688772},"262":{"tf":1.4142135623730951},"263":{"tf":1.7320508075688772},"264":{"tf":1.4142135623730951},"265":{"tf":1.7320508075688772},"266":{"tf":1.4142135623730951},"267":{"tf":1.7320508075688772},"268":{"tf":1.4142135623730951},"269":{"tf":1.7320508075688772},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"271":{"tf":1.7320508075688772},"272":{"tf":1.4142135623730951},"273":{"tf":1.7320508075688772},"274":{"tf":1.4142135623730951},"275":{"tf":1.7320508075688772},"276":{"tf":1.7320508075688772},"277":{"tf":3.0},"278":{"tf":1.7320508075688772},"279":{"tf":2.449489742783178},"28":{"tf":1.7320508075688772},"280":{"tf":1.7320508075688772},"281":{"tf":2.6457513110645907},"282":{"tf":1.4142135623730951},"283":{"tf":1.7320508075688772},"284":{"tf":1.4142135623730951},"285":{"tf":1.7320508075688772},"286":{"tf":1.0},"287":{"tf":2.449489742783178},"288":{"tf":2.449489742783178},"289":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951},"290":{"tf":2.23606797749979},"291":{"tf":1.4142135623730951},"292":{"tf":2.6457513110645907},"293":{"tf":2.8284271247461903},"294":{"tf":2.23606797749979},"295":{"tf":1.0},"296":{"tf":1.4142135623730951},"297":{"tf":1.4142135623730951},"298":{"tf":1.0},"299":{"tf":1.7320508075688772},"3":{"tf":2.0},"30":{"tf":1.7320508075688772},"300":{"tf":1.0},"301":{"tf":1.4142135623730951},"302":{"tf":1.4142135623730951},"303":{"tf":1.7320508075688772},"304":{"tf":1.4142135623730951},"305":{"tf":1.7320508075688772},"306":{"tf":1.4142135623730951},"307":{"tf":1.7320508075688772},"308":{"tf":1.4142135623730951},"309":{"tf":1.7320508075688772},"31":{"tf":1.4142135623730951},"310":{"tf":1.7320508075688772},"311":{"tf":1.0},"312":{"tf":1.7320508075688772},"313":{"tf":1.7320508075688772},"314":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.7320508075688772},"317":{"tf":2.0},"318":{"tf":1.7320508075688772},"319":{"tf":2.0},"32":{"tf":1.7320508075688772},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":2.0},"323":{"tf":1.4142135623730951},"324":{"tf":1.7320508075688772},"325":{"tf":1.4142135623730951},"326":{"tf":1.0},"327":{"tf":2.8284271247461903},"328":{"tf":1.7320508075688772},"329":{"tf":1.0},"33":{"tf":1.4142135623730951},"330":{"tf":2.0},"331":{"tf":2.23606797749979},"332":{"tf":2.23606797749979},"333":{"tf":3.0},"334":{"tf":2.0},"335":{"tf":1.4142135623730951},"336":{"tf":1.7320508075688772},"337":{"tf":1.4142135623730951},"338":{"tf":1.7320508075688772},"339":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"340":{"tf":1.7320508075688772},"341":{"tf":1.4142135623730951},"342":{"tf":1.7320508075688772},"343":{"tf":1.4142135623730951},"344":{"tf":1.7320508075688772},"346":{"tf":2.0},"347":{"tf":2.0},"348":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"351":{"tf":2.0},"352":{"tf":2.0},"353":{"tf":2.449489742783178},"354":{"tf":2.6457513110645907},"355":{"tf":2.0},"356":{"tf":2.0},"357":{"tf":2.0},"358":{"tf":1.7320508075688772},"36":{"tf":1.7320508075688772},"360":{"tf":1.7320508075688772},"361":{"tf":1.4142135623730951},"362":{"tf":1.4142135623730951},"363":{"tf":2.0},"364":{"tf":1.7320508075688772},"365":{"tf":1.4142135623730951},"366":{"tf":1.7320508075688772},"367":{"tf":1.4142135623730951},"368":{"tf":1.7320508075688772},"37":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":3.3166247903554},"376":{"tf":2.449489742783178},"377":{"tf":1.0},"379":{"tf":1.4142135623730951},"38":{"tf":1.7320508075688772},"381":{"tf":1.0},"382":{"tf":2.23606797749979},"383":{"tf":1.7320508075688772},"384":{"tf":1.4142135623730951},"385":{"tf":1.7320508075688772},"386":{"tf":1.4142135623730951},"387":{"tf":1.7320508075688772},"388":{"tf":1.4142135623730951},"39":{"tf":2.8284271247461903},"390":{"tf":1.4142135623730951},"393":{"tf":2.0},"394":{"tf":1.7320508075688772},"397":{"tf":1.7320508075688772},"399":{"tf":1.0},"40":{"tf":2.23606797749979},"400":{"tf":1.4142135623730951},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.7320508075688772},"404":{"tf":1.4142135623730951},"405":{"tf":1.7320508075688772},"406":{"tf":1.4142135623730951},"407":{"tf":1.7320508075688772},"408":{"tf":1.4142135623730951},"409":{"tf":1.7320508075688772},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"411":{"tf":1.7320508075688772},"412":{"tf":1.0},"414":{"tf":1.7320508075688772},"417":{"tf":1.0},"418":{"tf":1.7320508075688772},"419":{"tf":2.23606797749979},"42":{"tf":1.7320508075688772},"420":{"tf":1.7320508075688772},"422":{"tf":1.0},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"431":{"tf":1.7320508075688772},"432":{"tf":1.4142135623730951},"433":{"tf":1.7320508075688772},"434":{"tf":1.4142135623730951},"435":{"tf":1.7320508075688772},"436":{"tf":1.4142135623730951},"437":{"tf":1.7320508075688772},"438":{"tf":1.4142135623730951},"439":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"440":{"tf":1.4142135623730951},"441":{"tf":1.7320508075688772},"442":{"tf":2.6457513110645907},"444":{"tf":1.0},"445":{"tf":1.0},"449":{"tf":1.7320508075688772},"45":{"tf":2.8284271247461903},"450":{"tf":1.0},"451":{"tf":2.449489742783178},"46":{"tf":2.23606797749979},"47":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"49":{"tf":2.23606797749979},"5":{"tf":1.4142135623730951},"50":{"tf":2.0},"51":{"tf":1.4142135623730951},"52":{"tf":1.7320508075688772},"53":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"6":{"tf":3.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"66":{"tf":1.7320508075688772},"67":{"tf":1.4142135623730951},"68":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772},"70":{"tf":1.7320508075688772},"72":{"tf":2.8284271247461903},"73":{"tf":1.7320508075688772},"74":{"tf":2.449489742783178},"75":{"tf":1.0},"76":{"tf":2.6457513110645907},"77":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772},"8":{"tf":3.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":3.1622776601683795},"84":{"tf":3.0},"85":{"tf":3.3166247903554},"86":{"tf":2.6457513110645907},"87":{"tf":2.0},"88":{"tf":3.605551275463989},"9":{"tf":1.0},"90":{"tf":1.4142135623730951},"91":{"tf":1.7320508075688772},"92":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951},"96":{"tf":1.4142135623730951},"98":{"tf":1.0}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"184":{"tf":1.0},"356":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"21":{"tf":1.0},"23":{"tf":1.0}}}},"’":{"df":6,"docs":{"114":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"133":{"tf":1.0},"445":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"231":{"tf":1.0},"243":{"tf":1.4142135623730951},"347":{"tf":1.0},"351":{"tf":1.0},"451":{"tf":1.0}}}}},"h":{"df":1,"docs":{"292":{"tf":1.0}}},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"383":{"tf":1.0}}}}}}}},"df":6,"docs":{"348":{"tf":1.0},"350":{"tf":1.4142135623730951},"356":{"tf":1.7320508075688772},"357":{"tf":1.0},"373":{"tf":1.0},"419":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":3,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"133":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"q":{"df":1,"docs":{"288":{"tf":1.0}}}},"r":{"df":2,"docs":{"151":{"tf":1.0},"81":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"288":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"w":{"df":0,"docs":{},"w":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"390":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"181":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.7320508075688772},"375":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"r":{"df":73,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"243":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}},"u":{"df":2,"docs":{"23":{"tf":1.0},"352":{"tf":1.0}}}},"g":{"df":0,"docs":{},"n":{"df":9,"docs":{"175":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"2":{"tf":1.0},"20":{"tf":1.0},"290":{"tf":1.4142135623730951},"357":{"tf":1.0},"5":{"tf":1.0},"83":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"351":{"tf":1.4142135623730951},"357":{"tf":1.0}}},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"201":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"_":{"df":0,"docs":{},"z":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"201":{"tf":1.7320508075688772}}}}}},"df":2,"docs":{"189":{"tf":1.0},"202":{"tf":1.7320508075688772}}}}}},"df":20,"docs":{"167":{"tf":1.0},"172":{"tf":1.0},"185":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"198":{"tf":2.23606797749979},"199":{"tf":1.0},"200":{"tf":2.0},"201":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.7320508075688772},"216":{"tf":1.0},"326":{"tf":1.0},"372":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":1.0},"74":{"tf":1.0}},"é":{"df":1,"docs":{"169":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"165":{"tf":1.0},"377":{"tf":1.0}}},"t":{"df":4,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"389":{"tf":1.0},"392":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"x":{"/":{"a":{"df":0,"docs":{},"m":{"d":{"6":{"4":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":7,"docs":{"151":{"tf":1.0},"2":{"tf":1.0},"291":{"tf":1.0},"71":{"tf":1.0},"81":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.0}}}},"é":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"181":{"tf":1.4142135623730951},"257":{"tf":1.0},"258":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"281":{"tf":1.0},"76":{"tf":1.0}}}},"t":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"df":16,"docs":{"118":{"tf":1.0},"160":{"tf":1.0},"199":{"tf":1.4142135623730951},"204":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"238":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"290":{"tf":1.0},"318":{"tf":1.4142135623730951},"329":{"tf":1.4142135623730951},"331":{"tf":1.0},"332":{"tf":1.0},"373":{"tf":1.0},"375":{"tf":1.4142135623730951},"449":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":2,"docs":{"355":{"tf":1.0},"357":{"tf":1.0}}}}}}}}},"df":6,"docs":{"121":{"tf":1.4142135623730951},"202":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"355":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951}}},"r":{"df":3,"docs":{"317":{"tf":1.0},"332":{"tf":1.0},"449":{"tf":1.0}}}}}},"t":{"df":4,"docs":{"249":{"tf":1.0},"347":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"165":{"tf":1.0}}}}},"n":{"df":2,"docs":{"116":{"tf":1.0},"199":{"tf":1.0}}},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":67,"docs":{"100":{"tf":1.7320508075688772},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"147":{"tf":1.4142135623730951},"148":{"tf":1.0},"151":{"tf":1.0},"156":{"tf":1.4142135623730951},"165":{"tf":1.0},"177":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"210":{"tf":1.0},"213":{"tf":1.0},"235":{"tf":1.0},"24":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"285":{"tf":1.4142135623730951},"292":{"tf":1.0},"299":{"tf":1.0},"313":{"tf":1.0},"321":{"tf":1.4142135623730951},"323":{"tf":1.0},"397":{"tf":1.0},"420":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.4142135623730951},"88":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"443":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"169":{"tf":1.0},"172":{"tf":1.0},"243":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}}}},"t":{"df":2,"docs":{"199":{"tf":1.4142135623730951},"202":{"tf":2.449489742783178}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":33,"docs":{"10":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"169":{"tf":1.0},"175":{"tf":1.0},"183":{"tf":1.0},"185":{"tf":1.7320508075688772},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.0},"211":{"tf":1.0},"214":{"tf":1.4142135623730951},"243":{"tf":1.0},"255":{"tf":1.0},"293":{"tf":1.0},"317":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"380":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":2.8284271247461903},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"é":{"df":1,"docs":{"393":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":3,"docs":{"191":{"tf":1.7320508075688772},"195":{"tf":1.7320508075688772},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"a":{"df":3,"docs":{"325":{"tf":1.0},"328":{"tf":1.4142135623730951},"334":{"tf":1.0}},"s":{"(":{"\'":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"328":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":21,"docs":{"119":{"tf":1.0},"127":{"tf":1.7320508075688772},"133":{"tf":1.4142135623730951},"178":{"tf":1.0},"189":{"tf":2.449489742783178},"191":{"tf":1.0},"192":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.7320508075688772},"205":{"tf":1.0},"206":{"tf":1.0},"208":{"tf":1.7320508075688772},"243":{"tf":1.0},"316":{"tf":1.0},"330":{"tf":2.449489742783178},"331":{"tf":1.4142135623730951},"333":{"tf":2.0},"359":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0}},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"2":{"df":0,"docs":{},"f":{"a":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"244":{"tf":1.0},"363":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"375":{"tf":1.4142135623730951}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"127":{"tf":2.0},"189":{"tf":3.1622776601683795},"211":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"356":{"tf":1.0},"421":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.0}},"u":{"df":1,"docs":{"375":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":6,"docs":{"109":{"tf":1.4142135623730951},"121":{"tf":1.0},"134":{"tf":1.7320508075688772},"189":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"180":{"tf":1.0},"348":{"tf":1.4142135623730951},"414":{"tf":1.0}}}},"r":{"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.7320508075688772},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"’":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"2":{"tf":1.0}}}}}}}}},"t":{"df":2,"docs":{"388":{"tf":1.0},"403":{"tf":1.0}}},"w":{"df":1,"docs":{"181":{"tf":1.0}}}},"r":{"df":6,"docs":{"174":{"tf":1.0},"277":{"tf":1.0},"352":{"tf":1.0},"370":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"s":{"df":3,"docs":{"289":{"tf":1.0},"292":{"tf":1.0},"84":{"tf":1.0}},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"88":{"tf":1.0}}}}},"u":{"df":4,"docs":{"147":{"tf":1.0},"155":{"tf":1.0},"240":{"tf":1.0},"318":{"tf":1.0}},"e":{"df":2,"docs":{"153":{"tf":1.0},"249":{"tf":1.0}}},"i":{"df":3,"docs":{"179":{"tf":1.0},"346":{"tf":1.0},"363":{"tf":1.0}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"202":{"tf":1.0}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"è":{"df":6,"docs":{"167":{"tf":1.4142135623730951},"18":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"375":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"442":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"332":{"tf":1.7320508075688772}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"22":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"i":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":7,"docs":{"178":{"tf":1.0},"2":{"tf":1.4142135623730951},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"4":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":10,"docs":{"18":{"tf":1.4142135623730951},"243":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"293":{"tf":1.4142135623730951},"322":{"tf":1.0},"327":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"276":{"tf":1.0},"280":{"tf":1.0},"281":{"tf":1.0},"412":{"tf":1.4142135623730951},"5":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"442":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"333":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"14":{"tf":1.0},"393":{"tf":1.0},"449":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}}}}},"r":{"df":2,"docs":{"168":{"tf":1.0},"379":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"253":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":4,"docs":{"285":{"tf":1.0},"290":{"tf":1.4142135623730951},"299":{"tf":1.0},"326":{"tf":1.4142135623730951}}}}}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"176":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"161":{"tf":1.0},"173":{"tf":1.0},"420":{"tf":1.0}}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}},"i":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"364":{"tf":1.0}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"n":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"166":{"tf":1.0},"276":{"tf":1.0},"89":{"tf":1.0}}},"n":{"c":{"df":8,"docs":{"187":{"tf":1.4142135623730951},"217":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"298":{"tf":1.0},"74":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":14,"docs":{"173":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"258":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"294":{"tf":1.0},"298":{"tf":1.4142135623730951},"299":{"tf":1.0},"418":{"tf":1.0},"6":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"71":{"tf":1.0}}}}},"t":{"df":1,"docs":{"1":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"p":{"df":2,"docs":{"214":{"tf":1.0},"95":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"420":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"175":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"347":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"291":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"r":{"df":4,"docs":{"278":{"tf":1.0},"397":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"df":10,"docs":{"164":{"tf":1.0},"175":{"tf":1.0},"178":{"tf":1.0},"232":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"397":{"tf":1.0},"417":{"tf":1.0}}},"n":{"df":3,"docs":{"168":{"tf":1.0},"379":{"tf":1.0},"85":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"331":{"tf":1.0}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"l":{"df":5,"docs":{"14":{"tf":1.0},"17":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"86":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"276":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.4142135623730951},"95":{"tf":1.0}}}}}}},"df":2,"docs":{"147":{"tf":1.4142135623730951},"3":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"181":{"tf":1.0}}},"df":0,"docs":{}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"382":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":2,"docs":{"18":{"tf":1.0},"20":{"tf":1.0}}}},"t":{"df":4,"docs":{"104":{"tf":1.7320508075688772},"237":{"tf":1.0},"347":{"tf":1.7320508075688772},"85":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"72":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"399":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"444":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"364":{"tf":1.0}}}}}}}}}}}}},"m":{"a":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"257":{"tf":1.4142135623730951}},"e":{"\\"":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":23,"docs":{"100":{"tf":1.4142135623730951},"145":{"tf":1.0},"147":{"tf":1.4142135623730951},"150":{"tf":1.4142135623730951},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"163":{"tf":1.4142135623730951},"167":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.7320508075688772},"172":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.0},"210":{"tf":1.0},"291":{"tf":1.0},"296":{"tf":1.0},"443":{"tf":1.0},"76":{"tf":1.0},"81":{"tf":1.4142135623730951},"84":{"tf":1.0},"88":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":2,"docs":{"443":{"tf":1.0},"451":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"o":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":5,"docs":{"199":{"tf":1.0},"20":{"tf":1.0},"249":{"tf":1.4142135623730951},"290":{"tf":1.0},"356":{"tf":1.0}},"l":{"df":7,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"213":{"tf":1.0},"297":{"tf":1.0},"86":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"n":{",":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"173":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"174":{"tf":1.0}}}},"r":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}},"[":{"\\"":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":14,"docs":{"123":{"tf":1.0},"21":{"tf":1.0},"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"294":{"tf":2.23606797749979},"316":{"tf":1.4142135623730951},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0},"413":{"tf":2.0},"414":{"tf":4.795831523312719},"428":{"tf":1.7320508075688772},"72":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"318":{"tf":1.0},"372":{"tf":1.0},"427":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"357":{"tf":1.0},"83":{"tf":1.0}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}}}}}}},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"147":{"tf":1.0},"179":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"184":{"tf":1.0},"300":{"tf":1.0}}}}},"df":1,"docs":{"399":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"288":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":14,"docs":{"166":{"tf":1.4142135623730951},"175":{"tf":1.0},"183":{"tf":1.0},"2":{"tf":1.7320508075688772},"206":{"tf":1.0},"276":{"tf":1.7320508075688772},"3":{"tf":1.0},"362":{"tf":1.0},"4":{"tf":1.7320508075688772},"442":{"tf":1.0},"451":{"tf":2.0},"5":{"tf":2.0},"6":{"tf":1.0},"71":{"tf":1.7320508075688772}}}}}},"p":{"df":1,"docs":{"401":{"tf":1.0}}},"r":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"284":{"tf":1.0},"300":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"k":{"_":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":3,"docs":{"59":{"tf":1.7320508075688772},"60":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"394":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"318":{"tf":1.0},"347":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"394":{"tf":1.4142135623730951}}}}},"é":{"df":2,"docs":{"442":{"tf":1.0},"83":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"397":{"tf":1.0}}}}},"é":{"df":1,"docs":{"382":{"tf":1.0}}}}},"s":{"c":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"189":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"450":{"tf":1.4142135623730951}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"193":{"tf":1.0},"214":{"tf":1.0},"259":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"208":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"i":{"df":3,"docs":{"166":{"tf":1.0},"300":{"tf":1.0},"330":{"tf":1.0}},"s":{"df":1,"docs":{"300":{"tf":1.0}}}}},"df":0,"docs":{}}},"x":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":3,"docs":{"180":{"tf":1.0},"208":{"tf":1.0},"393":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"127":{"tf":2.23606797749979},"189":{"tf":3.7416573867739413}}}}}}}},"î":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"1":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"p":{"df":2,"docs":{"16":{"tf":1.0},"243":{"tf":1.0}}}},"df":7,"docs":{"123":{"tf":1.0},"174":{"tf":1.7320508075688772},"294":{"tf":1.0},"296":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.4142135623730951},"394":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"181":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"450":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"347":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"284":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":3,"docs":{"10":{"tf":1.0},"281":{"tf":1.0},"76":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":5,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"86":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":11,"docs":{"279":{"tf":1.0},"317":{"tf":1.0},"365":{"tf":1.7320508075688772},"366":{"tf":1.0},"375":{"tf":1.0},"388":{"tf":1.0},"403":{"tf":1.7320508075688772},"43":{"tf":1.7320508075688772},"44":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"364":{"tf":1.0},"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"293":{"tf":1.0},"330":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"181":{"tf":1.0},"355":{"tf":1.0},"364":{"tf":1.0}},"r":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"352":{"tf":1.0}}}}},"r":{"df":13,"docs":{"108":{"tf":1.0},"117":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951},"131":{"tf":1.4142135623730951},"139":{"tf":1.7320508075688772},"140":{"tf":1.0},"170":{"tf":1.4142135623730951},"172":{"tf":1.0},"176":{"tf":1.4142135623730951},"214":{"tf":1.0},"317":{"tf":1.0},"390":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"i":{"b":{"/":{"df":2,"docs":{"289":{"tf":1.0},"356":{"tf":1.0}}},"df":2,"docs":{"289":{"tf":1.0},"356":{"tf":1.0}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"d":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"280":{"tf":1.0},"287":{"tf":1.0},"399":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"377":{"tf":1.0}},"g":{"df":1,"docs":{"414":{"tf":2.0}},"r":{"a":{"df":0,"docs":{},"t":{"df":12,"docs":{"279":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"339":{"tf":1.7320508075688772},"340":{"tf":1.0},"372":{"tf":1.7320508075688772},"397":{"tf":1.0},"414":{"tf":1.0},"450":{"tf":2.0},"73":{"tf":1.0},"85":{"tf":1.7320508075688772},"87":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"450":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"n":{"df":9,"docs":{"24":{"tf":1.0},"277":{"tf":1.7320508075688772},"278":{"tf":1.7320508075688772},"301":{"tf":1.0},"6":{"tf":2.0},"7":{"tf":2.0},"72":{"tf":2.0},"73":{"tf":2.0},"89":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":3,"docs":{"113":{"tf":1.0},"292":{"tf":1.0},"389":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"127":{"tf":1.4142135623730951},"444":{"tf":1.0},"445":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}}}},"df":3,"docs":{"154":{"tf":1.4142135623730951},"164":{"tf":1.0},"447":{"tf":1.0}},"u":{"df":0,"docs":{},"m":{"df":4,"docs":{"151":{"tf":1.0},"167":{"tf":1.0},"243":{"tf":1.0},"383":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":9,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"347":{"tf":1.0},"79":{"tf":1.4142135623730951},"81":{"tf":1.0},"85":{"tf":2.0}}}}},"s":{"df":0,"docs":{},"e":{"df":48,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.7320508075688772},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.7320508075688772},"133":{"tf":1.0},"134":{"tf":1.0},"165":{"tf":1.4142135623730951},"362":{"tf":1.0},"418":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0},"94":{"tf":1.7320508075688772},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}}}},"x":{"df":1,"docs":{"133":{"tf":1.0}}}},"k":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":4,"docs":{"109":{"tf":1.0},"116":{"tf":1.0},"178":{"tf":1.0},"83":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"317":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":2,"docs":{"397":{"tf":1.4142135623730951},"443":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"d":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":3,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"133":{"tf":1.0}},"e":{")":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"447":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":1,"docs":{"447":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":91,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":2.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":2.449489742783178},"273":{"tf":1.7320508075688772},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.4142135623730951},"283":{"tf":1.0},"294":{"tf":1.0},"296":{"tf":1.4142135623730951},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"313":{"tf":1.7320508075688772},"32":{"tf":1.0},"324":{"tf":1.4142135623730951},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.0},"378":{"tf":1.4142135623730951},"379":{"tf":1.7320508075688772},"38":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"413":{"tf":1.4142135623730951},"417":{"tf":1.7320508075688772},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":2.449489742783178},"437":{"tf":1.7320508075688772},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"447":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"l":{"df":1,"docs":{"372":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"16":{"tf":1.0},"165":{"tf":1.7320508075688772},"389":{"tf":1.0},"403":{"tf":1.0}},"i":{"df":20,"docs":{"105":{"tf":1.4142135623730951},"165":{"tf":1.0},"232":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.4142135623730951},"249":{"tf":1.0},"252":{"tf":1.4142135623730951},"253":{"tf":1.7320508075688772},"254":{"tf":1.7320508075688772},"317":{"tf":1.0},"319":{"tf":1.0},"358":{"tf":1.0},"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"442":{"tf":1.0}}}},"é":{"df":2,"docs":{"389":{"tf":1.0},"403":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"l":{"df":15,"docs":{"101":{"tf":1.0},"133":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":1.4142135623730951},"214":{"tf":1.0},"296":{"tf":1.0},"334":{"tf":1.0},"369":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"379":{"tf":1.4142135623730951},"421":{"tf":1.0},"447":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"334":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"è":{"df":0,"docs":{},"l":{"df":15,"docs":{"10":{"tf":1.4142135623730951},"270":{"tf":1.7320508075688772},"271":{"tf":1.0},"281":{"tf":1.4142135623730951},"284":{"tf":1.0},"3":{"tf":1.0},"353":{"tf":1.0},"430":{"tf":1.7320508075688772},"431":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.0},"65":{"tf":1.7320508075688772},"66":{"tf":1.0},"76":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"286":{"tf":1.0}},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":6,"docs":{"286":{"tf":1.0},"351":{"tf":1.0},"353":{"tf":1.4142135623730951},"356":{"tf":1.0},"397":{"tf":1.0},"6":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"161":{"tf":1.0}}}}}},"n":{"df":5,"docs":{"19":{"tf":1.7320508075688772},"21":{"tf":1.0},"294":{"tf":2.23606797749979},"334":{"tf":1.0},"86":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"207":{"tf":1.4142135623730951}}}}}},"o":{"df":4,"docs":{"356":{"tf":1.0},"443":{"tf":1.4142135623730951},"451":{"tf":1.0},"76":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"287":{"tf":1.4142135623730951}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}},"r":{"df":1,"docs":{"21":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"87":{"tf":1.0}}}}}},"é":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}}},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"291":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":14,"docs":{"102":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"243":{"tf":1.4142135623730951},"250":{"tf":1.0},"291":{"tf":1.0},"330":{"tf":1.7320508075688772},"359":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"171":{"tf":1.0},"381":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"317":{"tf":2.0}}}}}}},"p":{"df":0,"docs":{},"s":{"c":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"380":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"169":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"213":{"tf":1.0}}}}}},"t":{"a":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"347":{"tf":1.0},"447":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{}}},"v":{"df":2,"docs":{"109":{"tf":1.0},"116":{"tf":1.0}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"447":{"tf":1.0}}}}},"é":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"357":{"tf":1.0},"450":{"tf":1.0}}}},"s":{"df":0,"docs":{},"m":{"df":3,"docs":{"231":{"tf":1.0},"347":{"tf":1.0},"361":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"254":{"tf":1.0},"352":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"394":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"t":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":2,"docs":{"346":{"tf":1.0},"419":{"tf":1.0}}}}}}},"df":1,"docs":{"208":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"364":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"279":{"tf":1.0},"287":{"tf":1.0},"337":{"tf":1.7320508075688772},"338":{"tf":1.0},"372":{"tf":1.0},"394":{"tf":1.0},"416":{"tf":1.4142135623730951}}}}}}},"ê":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":15,"docs":{"147":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"211":{"tf":1.0},"287":{"tf":1.4142135623730951},"296":{"tf":1.0},"346":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"357":{"tf":1.0},"363":{"tf":1.0},"450":{"tf":1.0},"72":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":3,"docs":{"164":{"tf":1.0},"423":{"tf":1.0},"85":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"451":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"df":1,"docs":{"133":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"446":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}},"v":{"df":2,"docs":{"356":{"tf":1.7320508075688772},"444":{"tf":1.0}}}}},"v":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"333":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"313":{"tf":1.0},"322":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"325":{"tf":1.0},"333":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":80,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"313":{"tf":1.0},"32":{"tf":1.0},"325":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":2.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.4142135623730951},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"419":{"tf":1.0},"42":{"tf":1.0},"422":{"tf":1.0},"428":{"tf":1.4142135623730951},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"u":{"df":3,"docs":{"21":{"tf":1.0},"328":{"tf":1.0},"4":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}}},"df":4,"docs":{"124":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"352":{"tf":1.0}},"e":{"df":36,"docs":{"105":{"tf":1.0},"133":{"tf":1.4142135623730951},"148":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.4142135623730951},"17":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"234":{"tf":1.0},"237":{"tf":1.0},"258":{"tf":1.0},"276":{"tf":1.0},"284":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.4142135623730951},"332":{"tf":1.0},"346":{"tf":1.0},"355":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.4142135623730951},"399":{"tf":1.0},"402":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.7320508075688772}},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"325":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"325":{"tf":1.0}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":2,"docs":{"84":{"tf":1.7320508075688772},"85":{"tf":1.0}}}}}}},"w":{"df":7,"docs":{"129":{"tf":1.0},"130":{"tf":1.0},"294":{"tf":1.4142135623730951},"331":{"tf":1.0},"333":{"tf":1.0},"423":{"tf":1.0},"86":{"tf":1.0}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":2,"docs":{"372":{"tf":1.0},"402":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"116":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":32,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"114":{"tf":1.4142135623730951},"115":{"tf":2.23606797749979},"116":{"tf":2.0},"117":{"tf":1.0},"120":{"tf":1.4142135623730951},"121":{"tf":2.449489742783178},"122":{"tf":1.0},"124":{"tf":1.7320508075688772},"127":{"tf":1.4142135623730951},"129":{"tf":1.0},"130":{"tf":2.0},"133":{"tf":2.449489742783178},"134":{"tf":1.7320508075688772},"187":{"tf":1.0},"189":{"tf":3.4641016151377544},"198":{"tf":1.4142135623730951},"199":{"tf":2.6457513110645907},"200":{"tf":2.0},"203":{"tf":1.4142135623730951},"204":{"tf":2.0},"205":{"tf":1.0},"208":{"tf":3.4641016151377544},"211":{"tf":1.0},"214":{"tf":1.7320508075688772},"445":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}},"x":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"2":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":3,"docs":{"276":{"tf":1.0},"379":{"tf":1.4142135623730951},"5":{"tf":1.0}},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"189":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}},"x":{"df":3,"docs":{"281":{"tf":1.0},"378":{"tf":1.0},"416":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"j":{"df":3,"docs":{"286":{"tf":1.0},"323":{"tf":1.0},"447":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":5,"docs":{"148":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.0},"286":{"tf":1.0},"288":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"d":{"df":1,"docs":{"147":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"r":{"df":2,"docs":{"177":{"tf":1.0},"181":{"tf":1.0}}}},"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"294":{"tf":1.0},"331":{"tf":1.4142135623730951},"383":{"tf":1.0},"419":{"tf":1.0}}},"n":{"c":{"df":1,"docs":{"394":{"tf":1.0}}},"df":20,"docs":{"133":{"tf":1.0},"147":{"tf":1.7320508075688772},"151":{"tf":1.0},"153":{"tf":2.0},"166":{"tf":1.7320508075688772},"183":{"tf":1.4142135623730951},"184":{"tf":1.0},"196":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.4142135623730951},"238":{"tf":1.4142135623730951},"244":{"tf":1.0},"246":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"290":{"tf":1.0},"300":{"tf":1.4142135623730951},"397":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"[":{"df":0,"docs":{},"p":{"a":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}},"df":7,"docs":{"259":{"tf":1.0},"317":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"d":{":":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"166":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"166":{"tf":1.0},"167":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"332":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":8,"docs":{"209":{"tf":1.4142135623730951},"21":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":2.6457513110645907},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951},"426":{"tf":1.7320508075688772}},"r":{"df":1,"docs":{"102":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":15,"docs":{"175":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":1.0},"213":{"tf":1.4142135623730951},"297":{"tf":1.7320508075688772},"317":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"319":{"tf":1.0},"320":{"tf":1.4142135623730951},"375":{"tf":1.7320508075688772},"377":{"tf":2.23606797749979},"418":{"tf":1.0},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"9":{"tf":1.0}},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"377":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"377":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"355":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"2":{"tf":1.0}}}}}},"u":{"df":1,"docs":{"82":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":8,"docs":{"106":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951},"173":{"tf":1.0},"257":{"tf":1.4142135623730951},"258":{"tf":1.4142135623730951},"317":{"tf":1.0},"334":{"tf":1.4142135623730951},"394":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":4,"docs":{"318":{"tf":1.0},"332":{"tf":1.0},"364":{"tf":1.0},"429":{"tf":1.0}}}}}},"w":{"df":5,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"188":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}},"p":{"df":0,"docs":{},"m":{"df":8,"docs":{"292":{"tf":1.4142135623730951},"313":{"tf":2.23606797749979},"320":{"tf":1.0},"324":{"tf":2.23606797749979},"327":{"tf":1.0},"334":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}},"x":{"df":6,"docs":{"100":{"tf":1.0},"292":{"tf":1.4142135623730951},"320":{"tf":1.4142135623730951},"323":{"tf":1.0},"334":{"tf":1.0},"389":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"241":{"tf":2.0},"373":{"tf":1.0}}}},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"108":{"tf":1.0}}}}},"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":2,"docs":{"288":{"tf":1.0},"394":{"tf":1.0}}}}}}},"é":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":8,"docs":{"167":{"tf":1.0},"253":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.0},"288":{"tf":1.0},"363":{"tf":1.0},"392":{"tf":1.0},"76":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":7,"docs":{"189":{"tf":1.0},"244":{"tf":1.0},"316":{"tf":1.0},"331":{"tf":1.0},"334":{"tf":1.0},"355":{"tf":1.0},"363":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"396":{"tf":1.0},"397":{"tf":1.0}}}}}},"df":0,"docs":{}}},"’":{"a":{"df":5,"docs":{"19":{"tf":1.4142135623730951},"237":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":12,"docs":{"109":{"tf":1.0},"165":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"254":{"tf":1.0},"277":{"tf":1.4142135623730951},"288":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"86":{"tf":1.0},"88":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"165":{"tf":1.0},"242":{"tf":1.0},"292":{"tf":1.0},"363":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"353":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"353":{"tf":1.0}}}}}}}},"o":{"1":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"2":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"3":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"194":{"tf":1.0}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"_":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"}":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"244":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"244":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0}}}}}}}},"df":11,"docs":{"143":{"tf":1.7320508075688772},"144":{"tf":1.0},"232":{"tf":1.0},"243":{"tf":2.8284271247461903},"244":{"tf":2.23606797749979},"248":{"tf":1.4142135623730951},"250":{"tf":1.0},"254":{"tf":2.0},"259":{"tf":1.0},"416":{"tf":1.0},"74":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"289":{"tf":1.7320508075688772},"294":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"424":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"14":{"tf":1.4142135623730951},"284":{"tf":1.0},"285":{"tf":1.4142135623730951},"80":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"t":{"df":3,"docs":{"346":{"tf":1.0},"348":{"tf":1.0},"425":{"tf":1.0}},"s":{"/":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":6,"docs":{"153":{"tf":1.0},"199":{"tf":1.4142135623730951},"389":{"tf":1.4142135623730951},"392":{"tf":1.4142135623730951},"393":{"tf":1.0},"397":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":5,"docs":{"193":{"tf":1.0},"205":{"tf":1.0},"284":{"tf":1.0},"319":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"291":{"tf":1.0}}}},"u":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"88":{"tf":1.0}}},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"292":{"tf":1.0}}}}}},"df":8,"docs":{"121":{"tf":1.0},"150":{"tf":1.4142135623730951},"178":{"tf":1.0},"180":{"tf":1.0},"187":{"tf":1.0},"206":{"tf":1.0},"292":{"tf":1.0},"389":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"177":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}},"k":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":12,"docs":{"105":{"tf":1.0},"106":{"tf":1.4142135623730951},"160":{"tf":1.4142135623730951},"164":{"tf":1.0},"319":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.7320508075688772},"424":{"tf":1.0},"425":{"tf":1.7320508075688772},"426":{"tf":1.0},"429":{"tf":1.4142135623730951}}},"n":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"360":{"tf":1.7320508075688772},"376":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"376":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"(":{"d":{"b":{"df":1,"docs":{"429":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"(":{"\\"":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"\\"":{")":{".":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{"(":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"(":{")":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"164":{"tf":1.0},"181":{"tf":1.0}}}}}},"t":{"df":2,"docs":{"290":{"tf":1.0},"362":{"tf":1.0}}}},"p":{"df":1,"docs":{"2":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"373":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":3,"docs":{"288":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.0}}}}}}},"t":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"178":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"133":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"156":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"109":{"tf":1.4142135623730951}},"e":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"109":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"109":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"148":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.7320508075688772},"161":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772}}}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"356":{"tf":1.0}},"s":{"df":2,"docs":{"356":{"tf":1.7320508075688772},"357":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":2,"docs":{"291":{"tf":1.7320508075688772},"330":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"g":{"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"112":{"tf":1.4142135623730951},"169":{"tf":1.0},"173":{"tf":1.4142135623730951},"176":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"189":{"tf":1.0},"286":{"tf":1.0},"296":{"tf":1.4142135623730951},"331":{"tf":1.0},"381":{"tf":1.4142135623730951},"413":{"tf":1.0},"82":{"tf":1.0}}}}}}}}},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"417":{"tf":1.0}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"287":{"tf":1.0},"349":{"tf":1.0},"373":{"tf":1.0},"419":{"tf":1.0},"422":{"tf":1.0},"449":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"357":{"tf":1.0},"72":{"tf":1.4142135623730951},"86":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}},"d":{"df":1,"docs":{"372":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"185":{"tf":1.4142135623730951}}}},"r":{"df":6,"docs":{"208":{"tf":1.0},"279":{"tf":1.0},"357":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"98":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"82":{"tf":1.0}},"é":{"df":2,"docs":{"2":{"tf":1.0},"3":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"123":{"tf":1.0},"294":{"tf":1.0}}}}}}},"s":{"df":1,"docs":{"151":{"tf":1.0}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":125,"docs":{"101":{"tf":1.0},"119":{"tf":1.0},"12":{"tf":1.0},"133":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":2.449489742783178},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"172":{"tf":1.0},"174":{"tf":1.7320508075688772},"179":{"tf":1.0},"18":{"tf":1.0},"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"19":{"tf":2.0},"191":{"tf":1.0},"196":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.7320508075688772},"210":{"tf":1.0},"214":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"23":{"tf":1.7320508075688772},"230":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"252":{"tf":1.4142135623730951},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"276":{"tf":1.4142135623730951},"28":{"tf":1.0},"283":{"tf":1.0},"286":{"tf":1.0},"292":{"tf":1.0},"296":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":2.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"316":{"tf":1.0},"32":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"363":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"380":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"393":{"tf":1.4142135623730951},"4":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"42":{"tf":1.0},"420":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":2.23606797749979},"89":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.0}},"i":{"df":7,"docs":{"147":{"tf":1.4142135623730951},"153":{"tf":1.0},"232":{"tf":1.4142135623730951},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.0},"249":{"tf":1.0}}},"t":{"df":2,"docs":{"356":{"tf":1.4142135623730951},"357":{"tf":1.0}},"i":{"df":0,"docs":{},"l":{"df":4,"docs":{"150":{"tf":1.0},"171":{"tf":1.0},"288":{"tf":1.0},"390":{"tf":1.0}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"104":{"tf":1.4142135623730951},"210":{"tf":1.0},"348":{"tf":1.0},"6":{"tf":1.0}}}}},"r":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"290":{"tf":1.0},"293":{"tf":1.0},"86":{"tf":1.0}}}},"i":{"df":0,"docs":{},"r":{"df":4,"docs":{"363":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"8":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"348":{"tf":1.0},"414":{"tf":2.6457513110645907},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951},"426":{"tf":1.7320508075688772}}}}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"423":{"tf":1.7320508075688772},"427":{"tf":1.4142135623730951},"428":{"tf":1.0}}},"df":0,"docs":{}}},"df":4,"docs":{"291":{"tf":1.0},"372":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":4,"docs":{"393":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}}}},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"375":{"tf":1.0}},"}":{"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"423":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}},"p":{"2":{"5":{"6":{"/":{"df":0,"docs":{},"p":{"3":{"8":{"4":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{":":{":":{"a":{"d":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"292":{"tf":1.0},"447":{"tf":1.0}}}},"df":7,"docs":{"294":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.4142135623730951},"380":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":2.449489742783178},"425":{"tf":1.7320508075688772}}}},"d":{"df":1,"docs":{"426":{"tf":1.0}}},"df":83,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.4142135623730951},"113":{"tf":1.0},"13":{"tf":1.7320508075688772},"133":{"tf":1.4142135623730951},"14":{"tf":1.0},"148":{"tf":1.0},"15":{"tf":1.0},"156":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"161":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":1.4142135623730951},"172":{"tf":1.0},"177":{"tf":1.0},"18":{"tf":1.0},"187":{"tf":1.0},"19":{"tf":1.7320508075688772},"199":{"tf":2.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"210":{"tf":1.0},"212":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.0},"237":{"tf":1.0},"24":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"254":{"tf":1.0},"258":{"tf":1.0},"264":{"tf":1.7320508075688772},"265":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":2.0},"278":{"tf":1.4142135623730951},"281":{"tf":1.0},"284":{"tf":1.7320508075688772},"288":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.4142135623730951},"319":{"tf":1.7320508075688772},"324":{"tf":1.4142135623730951},"332":{"tf":1.0},"353":{"tf":1.4142135623730951},"356":{"tf":1.0},"363":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":1.0},"379":{"tf":1.0},"383":{"tf":1.4142135623730951},"390":{"tf":1.4142135623730951},"391":{"tf":1.4142135623730951},"393":{"tf":1.7320508075688772},"397":{"tf":1.7320508075688772},"401":{"tf":1.4142135623730951},"402":{"tf":1.0},"403":{"tf":1.0},"420":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.0},"451":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.7320508075688772},"7":{"tf":1.7320508075688772},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"75":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":2.23606797749979},"9":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":163,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"135":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"139":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"141":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"143":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.4142135623730951},"215":{"tf":1.4142135623730951},"216":{"tf":1.4142135623730951},"217":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"219":{"tf":1.4142135623730951},"22":{"tf":1.0},"220":{"tf":1.4142135623730951},"221":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"223":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"225":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"227":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"229":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"260":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"262":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"264":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"266":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"268":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"272":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"274":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"293":{"tf":1.4142135623730951},"294":{"tf":1.0},"30":{"tf":1.4142135623730951},"302":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"304":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"306":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"308":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"318":{"tf":1.0},"319":{"tf":1.0},"32":{"tf":1.4142135623730951},"328":{"tf":1.0},"33":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"335":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"339":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"343":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"365":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"370":{"tf":1.0},"375":{"tf":2.8284271247461903},"377":{"tf":1.0},"38":{"tf":1.4142135623730951},"384":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"386":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"404":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"406":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"408":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"414":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"432":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"434":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"436":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"438":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"440":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.0},"90":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}},"r":{"df":5,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"124":{"tf":1.7320508075688772},"193":{"tf":1.0},"205":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"280":{"tf":1.0},"373":{"tf":1.0},"449":{"tf":1.0},"9":{"tf":1.0}},"é":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"223":{"tf":1.7320508075688772},"224":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"383":{"tf":1.0},"401":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":2,"docs":{"325":{"tf":1.0},"332":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"199":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"169":{"tf":1.0}}}},"é":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"172":{"tf":1.0}}}}}}}}},"m":{"df":1,"docs":{"402":{"tf":1.0}},"è":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":34,"docs":{"17":{"tf":1.7320508075688772},"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"231":{"tf":1.7320508075688772},"232":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"239":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"256":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"75":{"tf":1.4142135623730951}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":79,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"15":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"277":{"tf":2.23606797749979},"282":{"tf":1.0},"286":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":2.449489742783178},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":2.23606797749979},"77":{"tf":1.0},"8":{"tf":1.0},"81":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}}},"df":57,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"107":{"tf":1.0},"109":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.4142135623730951},"155":{"tf":1.4142135623730951},"158":{"tf":1.4142135623730951},"16":{"tf":1.0},"161":{"tf":1.7320508075688772},"169":{"tf":1.7320508075688772},"17":{"tf":1.0},"173":{"tf":1.0},"175":{"tf":1.0},"181":{"tf":1.0},"19":{"tf":1.4142135623730951},"190":{"tf":1.0},"192":{"tf":1.0},"199":{"tf":1.4142135623730951},"200":{"tf":1.4142135623730951},"202":{"tf":1.4142135623730951},"204":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.7320508075688772},"243":{"tf":1.4142135623730951},"244":{"tf":1.0},"249":{"tf":2.0},"290":{"tf":1.0},"298":{"tf":1.0},"327":{"tf":1.0},"331":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"369":{"tf":1.4142135623730951},"374":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"377":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951},"395":{"tf":1.4142135623730951},"413":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"449":{"tf":1.0},"451":{"tf":1.0},"88":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":1,"docs":{"88":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}},"l":{"df":1,"docs":{"276":{"tf":1.0}}},"s":{"df":2,"docs":{"374":{"tf":1.0},"396":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"147":{"tf":1.0},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"287":{"tf":1.0},"354":{"tf":1.0},"361":{"tf":1.0}},"é":{"df":5,"docs":{"237":{"tf":1.0},"314":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"382":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":11,"docs":{"16":{"tf":1.7320508075688772},"180":{"tf":2.449489742783178},"348":{"tf":2.8284271247461903},"414":{"tf":2.449489742783178},"423":{"tf":2.449489742783178},"424":{"tf":2.6457513110645907},"425":{"tf":2.6457513110645907},"426":{"tf":1.7320508075688772},"427":{"tf":2.0},"428":{"tf":2.449489742783178},"429":{"tf":2.0}}}}},"df":2,"docs":{"176":{"tf":1.0},"2":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"418":{"tf":1.0}}}},"r":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"380":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"327":{"tf":1.0}}}}},"df":26,"docs":{"102":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"152":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"214":{"tf":1.0},"243":{"tf":1.4142135623730951},"250":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.0},"330":{"tf":1.7320508075688772},"346":{"tf":1.0},"359":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"403":{"tf":1.4142135623730951},"416":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"403":{"tf":1.4142135623730951}}}},"r":{"df":11,"docs":{"156":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"365":{"tf":1.7320508075688772},"366":{"tf":1.0},"389":{"tf":1.0},"6":{"tf":1.4142135623730951},"72":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":2.23606797749979}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}},"df":6,"docs":{"166":{"tf":1.0},"291":{"tf":1.0},"316":{"tf":1.0},"375":{"tf":1.7320508075688772},"429":{"tf":1.0},"88":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"151":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"363":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"é":{"df":1,"docs":{"347":{"tf":1.0}}}}},"t":{"/":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":5,"docs":{"10":{"tf":1.0},"319":{"tf":1.0},"348":{"tf":1.0},"449":{"tf":2.23606797749979},"451":{"tf":1.0}},"h":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"=":{"$":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":9,"docs":{"166":{"tf":1.0},"177":{"tf":1.0},"323":{"tf":1.0},"376":{"tf":1.0},"383":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"21":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"440":{"tf":1.7320508075688772},"441":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"396":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"df":3,"docs":{"101":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"259":{"tf":1.0},"351":{"tf":1.0},"364":{"tf":1.4142135623730951},"390":{"tf":1.0}}}}}}},"y":{"df":1,"docs":{"214":{"tf":1.0}}}},"c":{"df":1,"docs":{"291":{"tf":1.0}}},"df":19,"docs":{"104":{"tf":1.7320508075688772},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.4142135623730951},"116":{"tf":1.4142135623730951},"122":{"tf":1.0},"163":{"tf":1.0},"166":{"tf":1.0},"178":{"tf":1.0},"183":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"320":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0}},"e":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"166":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0}}}}},"df":3,"docs":{"175":{"tf":1.4142135623730951},"183":{"tf":1.0},"348":{"tf":1.0}}},"df":1,"docs":{"147":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"160":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{},"l":{"/":{"5":{"\\\\":{".":{"8":{"0":{"3":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"148":{"tf":1.0},"347":{"tf":1.0},"417":{"tf":1.0},"419":{"tf":1.0}},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":22,"docs":{"1":{"tf":1.0},"166":{"tf":1.0},"179":{"tf":1.0},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"281":{"tf":1.0},"300":{"tf":1.0},"39":{"tf":1.7320508075688772},"393":{"tf":1.0},"40":{"tf":1.0},"416":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"427":{"tf":1.4142135623730951},"430":{"tf":1.7320508075688772},"431":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"346":{"tf":1.0},"84":{"tf":1.0}}}}},"df":5,"docs":{"247":{"tf":1.0},"347":{"tf":1.4142135623730951},"397":{"tf":1.0},"412":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}}}},"o":{"df":1,"docs":{"20":{"tf":1.0}},"n":{"df":4,"docs":{"37":{"tf":1.7320508075688772},"38":{"tf":1.0},"449":{"tf":1.0},"8":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"190":{"tf":1.4142135623730951}}}}}}},"df":1,"docs":{"1":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"445":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"df":10,"docs":{"16":{"tf":1.4142135623730951},"168":{"tf":1.0},"171":{"tf":1.0},"202":{"tf":1.0},"328":{"tf":1.0},"332":{"tf":1.4142135623730951},"347":{"tf":1.0},"352":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"288":{"tf":1.0}}}}}},"x":{"df":2,"docs":{"19":{"tf":1.0},"8":{"tf":1.0}}}}},"g":{"[":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"448":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"b":{"a":{"\\\\":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"197":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"w":{"d":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"102":{"tf":1.0},"109":{"tf":1.0}}},"df":0,"docs":{}}}},"df":7,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.0},"287":{"tf":1.0},"413":{"tf":1.0},"75":{"tf":1.0}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":13,"docs":{"102":{"tf":1.4142135623730951},"103":{"tf":1.4142135623730951},"107":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"110":{"tf":1.4142135623730951},"114":{"tf":1.4142135623730951},"120":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"124":{"tf":1.4142135623730951},"125":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951},"132":{"tf":1.4142135623730951},"370":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"189":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"443":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"175":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"322":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":18,"docs":{"145":{"tf":1.0},"161":{"tf":1.0},"164":{"tf":2.23606797749979},"166":{"tf":1.0},"169":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"183":{"tf":1.4142135623730951},"185":{"tf":1.0},"186":{"tf":1.0},"317":{"tf":2.0},"318":{"tf":1.4142135623730951},"319":{"tf":2.0},"375":{"tf":1.4142135623730951},"377":{"tf":1.0},"381":{"tf":1.0},"447":{"tf":2.23606797749979}},"e":{"\'":{")":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"318":{"tf":1.4142135623730951},"320":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"345":{"tf":1.0},"350":{"tf":1.4142135623730951}}}},"è":{"c":{"df":2,"docs":{"287":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":2,"docs":{"231":{"tf":1.0},"249":{"tf":1.4142135623730951}}}}},"k":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"394":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"288":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":76,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"170":{"tf":1.4142135623730951},"176":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"390":{"tf":1.4142135623730951},"392":{"tf":1.4142135623730951},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"290":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":2,"docs":{"189":{"tf":1.0},"190":{"tf":1.0}}},"z":{"df":1,"docs":{"296":{"tf":1.0}}}}},"df":0,"docs":{},"n":{"df":3,"docs":{"108":{"tf":1.0},"352":{"tf":1.0},"85":{"tf":1.0}},"s":{"/":{"0":{"0":{"1":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"231":{"tf":1.0},"412":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"325":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":14,"docs":{"279":{"tf":1.0},"313":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"320":{"tf":1.7320508075688772},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"325":{"tf":1.0},"327":{"tf":1.0},"334":{"tf":1.0},"396":{"tf":1.0},"403":{"tf":1.0},"443":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"u":{"df":14,"docs":{"104":{"tf":1.0},"107":{"tf":1.4142135623730951},"122":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"181":{"tf":1.0},"19":{"tf":1.0},"293":{"tf":1.0},"319":{"tf":1.0},"347":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.7320508075688772},"357":{"tf":1.7320508075688772},"421":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"101":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"147":{"tf":1.0},"347":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"171":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}},"df":6,"docs":{"147":{"tf":1.0},"15":{"tf":1.0},"2":{"tf":1.0},"23":{"tf":1.0},"412":{"tf":1.0},"81":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"442":{"tf":1.0},"451":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"418":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"l":{"df":1,"docs":{"355":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":5,"docs":{"352":{"tf":1.0},"354":{"tf":2.23606797749979},"357":{"tf":1.4142135623730951},"414":{"tf":1.0},"443":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"(":{"df":2,"docs":{"104":{"tf":1.0},"208":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":32,"docs":{"104":{"tf":2.0},"105":{"tf":1.0},"106":{"tf":2.0},"107":{"tf":1.7320508075688772},"108":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":2.0},"134":{"tf":1.7320508075688772},"153":{"tf":1.0},"160":{"tf":1.0},"189":{"tf":3.872983346207417},"208":{"tf":1.0},"210":{"tf":1.0},"23":{"tf":1.4142135623730951},"250":{"tf":1.0},"262":{"tf":1.7320508075688772},"263":{"tf":1.0},"300":{"tf":1.0},"313":{"tf":1.0},"326":{"tf":1.4142135623730951},"372":{"tf":1.0},"375":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":2.23606797749979}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"134":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":21,"docs":{"100":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951},"104":{"tf":1.4142135623730951},"106":{"tf":1.0},"108":{"tf":1.0},"162":{"tf":1.4142135623730951},"180":{"tf":1.0},"191":{"tf":1.4142135623730951},"195":{"tf":1.7320508075688772},"20":{"tf":1.0},"206":{"tf":1.0},"280":{"tf":1.0},"325":{"tf":1.0},"348":{"tf":1.0},"375":{"tf":2.8284271247461903},"396":{"tf":1.0},"406":{"tf":1.7320508075688772},"407":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"429":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"444":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"df":6,"docs":{"205":{"tf":1.0},"291":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"88":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{":":{"1":{"6":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{":":{"/":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"b":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"84":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":1,"docs":{"109":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"102":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"84":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"197":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":38,"docs":{"109":{"tf":1.4142135623730951},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"204":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.7320508075688772},"232":{"tf":1.0},"240":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"291":{"tf":2.23606797749979},"299":{"tf":1.0},"300":{"tf":1.7320508075688772},"316":{"tf":1.0},"323":{"tf":1.0},"348":{"tf":1.0},"355":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951},"84":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"96":{"tf":1.0}}}}}}}}}},"u":{"df":0,"docs":{},"r":{"df":155,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"11":{"tf":1.0},"125":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"16":{"tf":1.4142135623730951},"160":{"tf":1.0},"167":{"tf":1.4142135623730951},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"176":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.4142135623730951},"2":{"tf":2.449489742783178},"213":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"243":{"tf":1.7320508075688772},"244":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"25":{"tf":1.0},"251":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"256":{"tf":1.4142135623730951},"257":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.4142135623730951},"281":{"tf":1.0},"282":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.7320508075688772},"29":{"tf":1.0},"290":{"tf":2.0},"291":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.4142135623730951},"317":{"tf":1.0},"318":{"tf":1.4142135623730951},"322":{"tf":1.0},"323":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.4142135623730951},"35":{"tf":1.0},"351":{"tf":1.4142135623730951},"353":{"tf":1.0},"354":{"tf":1.4142135623730951},"356":{"tf":1.0},"357":{"tf":2.0},"359":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"397":{"tf":1.4142135623730951},"401":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"418":{"tf":1.0},"421":{"tf":1.4142135623730951},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"444":{"tf":1.4142135623730951},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":2.23606797749979},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.4142135623730951}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":8,"docs":{"10":{"tf":1.7320508075688772},"151":{"tf":1.0},"16":{"tf":1.0},"281":{"tf":1.4142135623730951},"3":{"tf":1.0},"347":{"tf":1.4142135623730951},"76":{"tf":1.7320508075688772},"82":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"176":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"5":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":7,"docs":{"164":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.0},"287":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0}}},"z":{"df":2,"docs":{"284":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951}}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"167":{"tf":1.0},"171":{"tf":1.0},"6":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}}},"df":13,"docs":{"174":{"tf":2.0},"186":{"tf":1.0},"272":{"tf":1.7320508075688772},"273":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.7320508075688772},"413":{"tf":1.0},"436":{"tf":1.7320508075688772},"437":{"tf":1.0},"447":{"tf":1.7320508075688772}}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":175,"docs":{"135":{"tf":1.7320508075688772},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":1.0},"161":{"tf":1.0},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"286":{"tf":1.0},"3":{"tf":1.0},"306":{"tf":1.7320508075688772},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.7320508075688772},"310":{"tf":1.0},"311":{"tf":1.0},"312":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"32":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"329":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"35":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"36":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0}}}}}}},"df":25,"docs":{"149":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"151":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"277":{"tf":1.0},"278":{"tf":1.0},"286":{"tf":1.4142135623730951},"287":{"tf":1.0},"288":{"tf":1.4142135623730951},"301":{"tf":1.0},"308":{"tf":1.7320508075688772},"309":{"tf":1.0},"313":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":1.4142135623730951},"363":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"403":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.0},"99":{"tf":1.4142135623730951}},"e":{"df":1,"docs":{"287":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":34,"docs":{"13":{"tf":2.23606797749979},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"242":{"tf":1.0},"243":{"tf":1.0},"277":{"tf":1.4142135623730951},"284":{"tf":2.0},"285":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.4142135623730951},"299":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.7320508075688772},"87":{"tf":1.0},"92":{"tf":1.7320508075688772},"93":{"tf":1.0}}}},"s":{"df":1,"docs":{"147":{"tf":1.0}}},"è":{"df":0,"docs":{},"r":{"df":11,"docs":{"16":{"tf":1.0},"278":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"301":{"tf":1.4142135623730951},"302":{"tf":1.7320508075688772},"303":{"tf":1.0},"313":{"tf":1.0},"5":{"tf":1.0},"85":{"tf":1.0},"98":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"293":{"tf":1.0}},"r":{"df":1,"docs":{"76":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"16":{"tf":1.0},"287":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"357":{"tf":1.0}}}}}}}},"i":{"df":3,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"241":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"248":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"422":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"449":{"tf":1.0},"82":{"tf":1.0}}}}},"df":11,"docs":{"148":{"tf":1.0},"189":{"tf":1.4142135623730951},"234":{"tf":1.4142135623730951},"240":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"351":{"tf":1.0},"354":{"tf":1.0},"375":{"tf":1.0},"415":{"tf":1.4142135623730951},"420":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"232":{"tf":1.0}}}}},"df":1,"docs":{"317":{"tf":1.0}},"é":{"df":1,"docs":{"357":{"tf":1.4142135623730951}}}}}}},"v":{"df":4,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.0}},"é":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"189":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":4,"docs":{"153":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"104":{"tf":1.0},"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":5,"docs":{"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"3":{"tf":1.0},"357":{"tf":1.0},"88":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":6,"docs":{"134":{"tf":1.0},"148":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"184":{"tf":1.0},"96":{"tf":1.0}},"u":{"df":4,"docs":{"287":{"tf":1.0},"370":{"tf":1.0},"413":{"tf":1.0},"420":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"24":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"348":{"tf":1.0},"394":{"tf":1.0},"89":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"é":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}}},"d":{"df":2,"docs":{"147":{"tf":1.7320508075688772},"167":{"tf":1.4142135623730951}},"u":{"c":{"df":0,"docs":{},"t":{"df":51,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"2":{"tf":1.0},"252":{"tf":1.0},"276":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.4142135623730951},"94":{"tf":1.7320508075688772},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"9":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"176":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.4142135623730951},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"293":{"tf":1.0},"375":{"tf":1.4142135623730951},"380":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":7,"docs":{"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.4142135623730951},"353":{"tf":1.0},"356":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"179":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}}}}},"df":11,"docs":{"158":{"tf":1.4142135623730951},"16":{"tf":1.0},"166":{"tf":1.0},"181":{"tf":1.0},"276":{"tf":1.0},"289":{"tf":1.4142135623730951},"294":{"tf":2.449489742783178},"299":{"tf":1.0},"388":{"tf":1.0},"447":{"tf":2.0},"8":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"86":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"163":{"tf":1.0},"166":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"214":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"357":{"tf":1.0}}},"r":{"df":4,"docs":{"357":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0}},"i":{"df":0,"docs":{},"é":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"175":{"tf":1.0},"21":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.0},"202":{"tf":1.7320508075688772},"330":{"tf":1.0},"331":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"413":{"tf":1.0},"419":{"tf":1.0}}}}},"df":3,"docs":{"133":{"tf":1.4142135623730951},"202":{"tf":1.7320508075688772},"288":{"tf":1.0}}},"è":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.0}}}},"é":{"df":0,"docs":{},"g":{"df":1,"docs":{"393":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"187":{"tf":1.0}}}},"é":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"243":{"tf":1.0},"250":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":3,"docs":{"145":{"tf":1.0},"147":{"tf":1.0},"153":{"tf":1.0}}}}}}}}},"x":{"df":0,"docs":{},"i":{"df":9,"docs":{"121":{"tf":1.0},"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":2.23606797749979},"72":{"tf":1.0},"89":{"tf":1.0}}},"y":{"/":{"c":{"a":{"d":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"445":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"445":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"445":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"_":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"x":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"202":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"121":{"tf":1.0},"202":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"202":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"é":{"a":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"15":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"231":{"tf":1.0},"245":{"tf":1.4142135623730951}}},"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":1.0},"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"394":{"tf":1.0}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"21":{"tf":1.0},"318":{"tf":1.0},"377":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"146":{"tf":1.0}},"r":{"df":3,"docs":{"103":{"tf":1.4142135623730951},"111":{"tf":1.4142135623730951},"287":{"tf":1.0}}},"z":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"2":{"tf":1.7320508075688772},"71":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"330":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"86":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":10,"docs":{"249":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"300":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"u":{"df":1,"docs":{"374":{"tf":1.0}}}}},"ê":{"df":0,"docs":{},"t":{"df":3,"docs":{"128":{"tf":1.4142135623730951},"160":{"tf":1.0},"2":{"tf":1.0}},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"72":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"447":{"tf":1.0}}}}}},"s":{"df":3,"docs":{"109":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{">":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":2,"docs":{"21":{"tf":1.0},"86":{"tf":1.0}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"l":{"df":5,"docs":{"185":{"tf":1.4142135623730951},"286":{"tf":1.0},"288":{"tf":1.4142135623730951},"291":{"tf":1.7320508075688772},"323":{"tf":1.0}}}}},"t":{"df":1,"docs":{"298":{"tf":1.0}}},"u":{"b":{"df":3,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"c":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":7,"docs":{"134":{"tf":2.0},"19":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"276":{"tf":1.0},"331":{"tf":1.4142135623730951},"427":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":5,"docs":{"166":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"424":{"tf":1.0}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":20,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"109":{"tf":1.0},"133":{"tf":1.0},"14":{"tf":1.0},"151":{"tf":1.0},"16":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"243":{"tf":1.0},"276":{"tf":1.0},"294":{"tf":1.0},"374":{"tf":1.0},"83":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":16,"docs":{"127":{"tf":1.0},"133":{"tf":1.0},"164":{"tf":1.0},"17":{"tf":1.0},"176":{"tf":1.0},"252":{"tf":1.0},"254":{"tf":1.0},"288":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":1.0},"327":{"tf":1.0},"347":{"tf":1.0},"351":{"tf":1.0},"364":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"l":{"df":15,"docs":{"10":{"tf":1.0},"132":{"tf":1.0},"167":{"tf":1.0},"2":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"301":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.7320508075688772},"7":{"tf":1.0},"70":{"tf":1.0},"8":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"396":{"tf":1.0}}}},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"2":{"tf":1.0},"287":{"tf":1.4142135623730951}}}}}},"[":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":25,"docs":{"123":{"tf":1.0},"133":{"tf":1.4142135623730951},"148":{"tf":1.0},"16":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"173":{"tf":1.4142135623730951},"175":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.7320508075688772},"184":{"tf":1.0},"186":{"tf":1.4142135623730951},"285":{"tf":1.0},"294":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.7320508075688772},"321":{"tf":1.7320508075688772},"355":{"tf":1.0},"380":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"425":{"tf":2.449489742783178},"96":{"tf":1.0}}}},"t":{"df":2,"docs":{"169":{"tf":1.0},"180":{"tf":1.0}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"3":{"df":1,"docs":{"115":{"tf":1.0}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":7,"docs":{"161":{"tf":1.0},"174":{"tf":1.0},"370":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"447":{"tf":1.0},"449":{"tf":1.0}}}}}}},"é":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":78,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"286":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"q":{"a":{"df":22,"docs":{"277":{"tf":1.0},"279":{"tf":1.4142135623730951},"280":{"tf":1.4142135623730951},"365":{"tf":1.7320508075688772},"366":{"tf":1.0},"388":{"tf":1.7320508075688772},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"421":{"tf":1.4142135623730951}}},"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"u":{"a":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"444":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"444":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"388":{"tf":1.0}},"é":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"168":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"n":{"d":{"df":11,"docs":{"10":{"tf":1.0},"128":{"tf":1.4142135623730951},"147":{"tf":1.4142135623730951},"173":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.0},"3":{"tf":2.23606797749979},"355":{"tf":1.0},"396":{"tf":1.0},"76":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":3,"docs":{"2":{"tf":1.0},"3":{"tf":1.4142135623730951},"346":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":37,"docs":{"1":{"tf":1.4142135623730951},"109":{"tf":1.0},"113":{"tf":1.0},"133":{"tf":2.0},"147":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.0},"171":{"tf":1.0},"18":{"tf":1.0},"188":{"tf":1.0},"20":{"tf":1.0},"214":{"tf":1.0},"244":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"289":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.4142135623730951},"319":{"tf":1.0},"331":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0},"4":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"5":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}},"l":{"(":{"df":1,"docs":{"104":{"tf":1.0}}},"df":5,"docs":{"250":{"tf":1.0},"279":{"tf":1.0},"442":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"’":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"402":{"tf":1.0}}}},"u":{"df":1,"docs":{"166":{"tf":1.0}}}},"i":{"df":30,"docs":{"1":{"tf":1.0},"133":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"16":{"tf":1.0},"161":{"tf":1.4142135623730951},"165":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"178":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":2.23606797749979},"214":{"tf":1.0},"22":{"tf":1.4142135623730951},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"3":{"tf":1.0},"317":{"tf":1.0},"327":{"tf":1.0},"347":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"416":{"tf":1.0},"420":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"p":{"df":10,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"179":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"416":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"161":{"tf":1.0},"18":{"tf":1.0},"286":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"288":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"276":{"tf":1.0}},"n":{"df":1,"docs":{"446":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"’":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"253":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{},"x":{"df":1,"docs":{"86":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"242":{"tf":1.0},"244":{"tf":1.0},"354":{"tf":1.0}}}}}}},"r":{"2":{"3":{"df":1,"docs":{"383":{"tf":1.0}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"158":{"tf":1.7320508075688772},"166":{"tf":1.0},"174":{"tf":1.0},"296":{"tf":1.4142135623730951},"379":{"tf":1.4142135623730951}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{">":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"152":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"290":{"tf":1.0}}}}}}},"n":{"d":{"df":3,"docs":{"102":{"tf":1.7320508075688772},"290":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"127":{"tf":1.4142135623730951},"293":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.0},"357":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"380":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"184":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"=":{"1":{"0":{"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"3":{"0":{"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":1,"docs":{"236":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}},"df":10,"docs":{"200":{"tf":1.4142135623730951},"201":{"tf":1.0},"215":{"tf":1.7320508075688772},"216":{"tf":1.0},"326":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":1.0},"74":{"tf":1.0}}}}},"b":{"a":{"c":{"df":5,"docs":{"281":{"tf":1.0},"3":{"tf":1.0},"416":{"tf":1.0},"430":{"tf":1.7320508075688772},"431":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"292":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.4142135623730951}},"e":{"a":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}}}},"i":{"df":2,"docs":{"85":{"tf":1.0},"87":{"tf":1.0}}},"m":{"df":3,"docs":{"21":{"tf":1.0},"373":{"tf":1.4142135623730951},"428":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":6,"docs":{"123":{"tf":1.0},"161":{"tf":1.0},"21":{"tf":1.0},"294":{"tf":2.0},"373":{"tf":1.4142135623730951},"428":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"292":{"tf":1.0},"403":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":11,"docs":{"180":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.4142135623730951},"289":{"tf":1.0},"356":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"380":{"tf":1.0},"406":{"tf":1.7320508075688772},"407":{"tf":1.0},"425":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":4,"docs":{"279":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"213":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"244":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"288":{"tf":1.0},"88":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"124":{"tf":1.0},"181":{"tf":1.0},"390":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"d":{"df":4,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"174":{"tf":1.0},"178":{"tf":1.0},"286":{"tf":1.0},"291":{"tf":1.0}},"é":{"df":4,"docs":{"171":{"tf":1.0},"211":{"tf":1.0},"316":{"tf":1.0},"357":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.0}}}},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"327":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"6":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"df":4,"docs":{"443":{"tf":1.0},"444":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":9,"docs":{"108":{"tf":1.0},"117":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"396":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":4,"docs":{"133":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"330":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"242":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.4142135623730951},"253":{"tf":1.0},"347":{"tf":1.4142135623730951}}}},"df":7,"docs":{"172":{"tf":1.0},"180":{"tf":1.0},"186":{"tf":1.4142135623730951},"237":{"tf":1.0},"252":{"tf":1.4142135623730951},"254":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"131":{"tf":1.4142135623730951}}}}}}}},"df":2,"docs":{"316":{"tf":1.0},"402":{"tf":1.0}},"f":{"=":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":4,"docs":{"180":{"tf":1.0},"424":{"tf":1.4142135623730951},"425":{"tf":2.0},"428":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"241":{"tf":1.0},"373":{"tf":1.0}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"238":{"tf":1.0}},"s":{"=":{"7":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"375":{"tf":1.4142135623730951},"394":{"tf":1.0}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}}}}},"s":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"23":{"tf":1.0}},"s":{"df":3,"docs":{"133":{"tf":1.0},"23":{"tf":1.0},"88":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"193":{"tf":1.4142135623730951},"205":{"tf":2.23606797749979},"214":{"tf":1.0}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"325":{"tf":1.0},"327":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0},"86":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"(":{"d":{"b":{"df":1,"docs":{"423":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"146":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"165":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"183":{"tf":1.0},"184":{"tf":1.0},"19":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"292":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"152":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"82":{"tf":1.0},"84":{"tf":1.0}}}}}}}}},"y":{"df":3,"docs":{"189":{"tf":1.0},"213":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"113":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"296":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":2,"docs":{"21":{"tf":1.0},"6":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"277":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951}}}}}},"o":{"a":{"d":{"df":6,"docs":{"105":{"tf":1.4142135623730951},"116":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"199":{"tf":1.0},"203":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"u":{"df":3,"docs":{"234":{"tf":1.0},"244":{"tf":1.0},"254":{"tf":1.0}}},"â":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"326":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"330":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":1,"docs":{"330":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"238":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":12,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0},"289":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"210":{"tf":1.0}}},"df":0,"docs":{}}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"202":{"tf":1.7320508075688772},"214":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":2,"docs":{"109":{"tf":1.0},"419":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"83":{"tf":1.4142135623730951},"88":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":2,"docs":{"362":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":2,"docs":{"21":{"tf":1.0},"299":{"tf":1.0}},"r":{"df":1,"docs":{"287":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}}}},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"375":{"tf":1.0},"428":{"tf":1.0}}},"z":{"df":1,"docs":{"86":{"tf":1.0}}}},"r":{"df":1,"docs":{"89":{"tf":1.0}}},"u":{"df":2,"docs":{"333":{"tf":1.0},"418":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"118":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"124":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"290":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"424":{"tf":1.7320508075688772},"425":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"449":{"tf":1.0}}}}},"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"318":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"21":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"=":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"428":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.4142135623730951},"428":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{")":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"428":{"tf":1.0}}}}}}}}},"df":20,"docs":{"123":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"287":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.4142135623730951},"349":{"tf":1.0},"356":{"tf":1.4142135623730951},"359":{"tf":1.0},"372":{"tf":1.0},"376":{"tf":1.0},"379":{"tf":1.7320508075688772},"380":{"tf":1.0},"382":{"tf":1.7320508075688772},"413":{"tf":1.4142135623730951},"419":{"tf":1.7320508075688772},"424":{"tf":1.4142135623730951},"425":{"tf":1.4142135623730951},"428":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"449":{"tf":1.0}}}},"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"o":{"df":0,"docs":{},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}},"}":{"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"[":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"p":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"360":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"16":{"tf":1.0},"294":{"tf":1.4142135623730951},"346":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"372":{"tf":1.0},"376":{"tf":1.4142135623730951},"423":{"tf":1.4142135623730951},"425":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"y":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"325":{"tf":1.0},"331":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"423":{"tf":1.0},"428":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"427":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"423":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"348":{"tf":1.4142135623730951},"372":{"tf":1.0},"383":{"tf":1.0},"423":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":1,"docs":{"349":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"423":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{".":{".":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"396":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}},"v":{"c":{"df":1,"docs":{"423":{"tf":3.605551275463989}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"347":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"95":{"tf":1.0}},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"q":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"198":{"tf":2.0}}}}}},"df":0,"docs":{}},"/":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}},"df":5,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"200":{"tf":1.4142135623730951},"204":{"tf":1.0},"208":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":14,"docs":{"10":{"tf":1.0},"198":{"tf":1.0},"2":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"301":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.7320508075688772},"7":{"tf":1.0},"70":{"tf":1.0},"8":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"i":{"df":16,"docs":{"149":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"151":{"tf":1.0},"171":{"tf":1.4142135623730951},"173":{"tf":1.0},"200":{"tf":1.4142135623730951},"232":{"tf":1.0},"250":{"tf":1.4142135623730951},"286":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"313":{"tf":1.0},"323":{"tf":1.4142135623730951},"356":{"tf":1.0},"395":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"99":{"tf":1.4142135623730951}},"r":{"df":1,"docs":{"166":{"tf":1.0}},"e":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"ê":{"df":0,"docs":{},"t":{"df":14,"docs":{"196":{"tf":1.0},"240":{"tf":1.0},"281":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.4142135623730951},"354":{"tf":1.0},"422":{"tf":1.7320508075688772},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"316":{"tf":1.0},"449":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":2,"docs":{"356":{"tf":1.0},"428":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"373":{"tf":1.0}}},"p":{"df":0,"docs":{},"o":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":4,"docs":{"346":{"tf":1.0},"349":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":2.0}},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"376":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"359":{"tf":1.0},"399":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"2":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"371":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"316":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":3,"docs":{"326":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0}}},"df":0,"docs":{}}}},"v":{"c":{"df":1,"docs":{"423":{"tf":2.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":16,"docs":{"107":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"127":{"tf":1.0},"133":{"tf":1.0},"172":{"tf":1.0},"204":{"tf":1.0},"213":{"tf":1.0},"232":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.4142135623730951},"252":{"tf":1.0},"84":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"137":{"tf":1.7320508075688772},"138":{"tf":1.0},"448":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}},"df":17,"docs":{"108":{"tf":1.0},"155":{"tf":1.0},"166":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.4142135623730951},"290":{"tf":1.0},"3":{"tf":1.0},"316":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"404":{"tf":1.7320508075688772},"405":{"tf":1.0},"449":{"tf":1.0},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"212":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"134":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"351":{"tf":1.0},"353":{"tf":1.0}},"n":{"df":6,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"294":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"208":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":2,"docs":{"161":{"tf":1.4142135623730951},"347":{"tf":1.0}}}}},"y":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"397":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"351":{"tf":1.0},"353":{"tf":2.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"187":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":2.6457513110645907},"72":{"tf":1.0},"89":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"277":{"tf":1.0},"279":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}},"ç":{"df":0,"docs":{},"u":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":1,"docs":{"104":{"tf":1.0}},"n":{"df":4,"docs":{"174":{"tf":1.0},"317":{"tf":1.0},"355":{"tf":1.0},"83":{"tf":1.0}}}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"98":{"tf":1.4142135623730951}}}}}},"m":{"df":3,"docs":{"116":{"tf":1.0},"163":{"tf":1.0},"205":{"tf":1.0}}},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"83":{"tf":1.0},"86":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":6,"docs":{"291":{"tf":1.0},"359":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951},"416":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"294":{"tf":1.0},"84":{"tf":2.8284271247461903}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"444":{"tf":1.0}}}}}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"167":{"tf":1.0},"375":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"163":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"347":{"tf":1.0}}}},"df":9,"docs":{"279":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"335":{"tf":1.7320508075688772},"336":{"tf":1.0},"369":{"tf":1.0},"375":{"tf":2.23606797749979},"414":{"tf":1.0},"421":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"316":{"tf":1.0}}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"364":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0}}}}},"é":{"df":1,"docs":{"95":{"tf":1.0}}}},"v":{"df":0,"docs":{},"r":{"df":1,"docs":{"347":{"tf":1.0}}}}},"w":{"df":1,"docs":{"291":{"tf":1.0}}}},"r":{"]":{"df":0,"docs":{},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{".":{"*":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"[":{"_":{"df":1,"docs":{"193":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"a":{"df":2,"docs":{"19":{"tf":1.0},"383":{"tf":1.0}}},"df":1,"docs":{"427":{"tf":3.1622776601683795}},"y":{"df":0,"docs":{},"n":{"c":{"df":13,"docs":{"100":{"tf":1.4142135623730951},"113":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"150":{"tf":1.0},"163":{"tf":1.0},"165":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"183":{"tf":1.0},"296":{"tf":1.0},"448":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"447":{"tf":1.0}}}},"n":{"[":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{".":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":18,"docs":{"118":{"tf":1.0},"164":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":2.0},"252":{"tf":1.0},"287":{"tf":1.7320508075688772},"291":{"tf":1.0},"293":{"tf":1.7320508075688772},"299":{"tf":1.0},"313":{"tf":2.0},"316":{"tf":1.0},"320":{"tf":1.0},"324":{"tf":2.23606797749979},"327":{"tf":1.4142135623730951},"334":{"tf":1.0},"403":{"tf":1.0},"85":{"tf":1.4142135623730951}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"153":{"tf":1.0},"155":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"444":{"tf":1.0}}}}}},"@":{"<":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"160":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":31,"docs":{"145":{"tf":1.7320508075688772},"146":{"tf":1.4142135623730951},"147":{"tf":2.23606797749979},"148":{"tf":2.0},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.7320508075688772},"152":{"tf":1.0},"153":{"tf":2.0},"154":{"tf":2.449489742783178},"155":{"tf":1.4142135623730951},"156":{"tf":1.7320508075688772},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":1.7320508075688772},"161":{"tf":1.7320508075688772},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"166":{"tf":2.6457513110645907},"167":{"tf":2.449489742783178},"172":{"tf":1.0},"187":{"tf":1.0},"210":{"tf":1.4142135623730951},"296":{"tf":1.0},"420":{"tf":1.4142135623730951},"443":{"tf":1.0},"444":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"153":{"tf":1.4142135623730951},"287":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{")":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"193":{"tf":1.0},"374":{"tf":1.0},"96":{"tf":1.0}}}},"t":{".":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"=":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"255":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"102":{"tf":1.0},"83":{"tf":1.0}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"c":{"df":3,"docs":{"286":{"tf":1.0},"288":{"tf":1.7320508075688772},"300":{"tf":1.0}}},"df":22,"docs":{"1":{"tf":1.0},"148":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.4142135623730951},"2":{"tf":1.0},"234":{"tf":1.0},"286":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"296":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"316":{"tf":1.4142135623730951},"320":{"tf":1.0},"372":{"tf":1.0},"392":{"tf":1.4142135623730951},"416":{"tf":1.0},"418":{"tf":1.0},"447":{"tf":1.0},"449":{"tf":1.0},"82":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"100":{"tf":1.0},"300":{"tf":1.4142135623730951}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"237":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"414":{"tf":1.4142135623730951}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"414":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":20,"docs":{"276":{"tf":1.0},"279":{"tf":1.4142135623730951},"280":{"tf":1.0},"289":{"tf":1.0},"358":{"tf":2.0},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.7320508075688772},"364":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"408":{"tf":1.7320508075688772},"409":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":4,"docs":{"361":{"tf":1.0},"364":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"416":{"tf":1.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"w":{"[":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"292":{"tf":1.0},"370":{"tf":2.0},"413":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":92,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"280":{"tf":1.4142135623730951},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"361":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"388":{"tf":2.23606797749979},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.7320508075688772},"392":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.7320508075688772},"398":{"tf":1.7320508075688772},"399":{"tf":1.0},"40":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"42":{"tf":1.0},"421":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}},"é":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"134":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951}}}}}},"df":2,"docs":{"186":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"151":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"214":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":144,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"282":{"tf":1.0},"283":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"193":{"tf":1.0},"205":{"tf":1.0},"207":{"tf":1.0},"23":{"tf":1.0},"357":{"tf":1.0},"377":{"tf":1.4142135623730951},"84":{"tf":1.0}},"l":{"df":4,"docs":{"109":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.0},"95":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}},"f":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":102,"docs":{"227":{"tf":1.7320508075688772},"228":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.7320508075688772},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"239":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"256":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"280":{"tf":1.7320508075688772},"3":{"tf":1.0},"310":{"tf":1.0},"345":{"tf":1.0},"367":{"tf":1.7320508075688772},"368":{"tf":1.0},"369":{"tf":1.4142135623730951},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"421":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"75":{"tf":1.7320508075688772},"9":{"tf":1.7320508075688772},"95":{"tf":1.0}}},"df":0,"docs":{}},"z":{"df":1,"docs":{"442":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":16,"docs":{"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"244":{"tf":1.4142135623730951},"246":{"tf":1.4142135623730951},"247":{"tf":1.4142135623730951},"248":{"tf":1.4142135623730951},"249":{"tf":1.7320508075688772},"250":{"tf":1.0},"252":{"tf":1.4142135623730951},"253":{"tf":1.4142135623730951},"254":{"tf":1.4142135623730951},"255":{"tf":2.0},"257":{"tf":1.4142135623730951},"258":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"215":{"tf":1.7320508075688772},"216":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"184":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}},"é":{"df":1,"docs":{"417":{"tf":1.0}}}}}}}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"146":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0},"293":{"tf":1.0},"314":{"tf":1.4142135623730951},"322":{"tf":1.0},"360":{"tf":1.0},"376":{"tf":1.4142135623730951},"429":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772}}}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"133":{"tf":1.0},"15":{"tf":1.0},"81":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"u":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}}},"è":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"8":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"192":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":54,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"352":{"tf":1.0},"412":{"tf":1.0},"71":{"tf":1.0},"82":{"tf":1.4142135623730951},"87":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.7320508075688772},"98":{"tf":1.0},"99":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"é":{"df":1,"docs":{"383":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"181":{"tf":1.0}},"t":{"df":4,"docs":{"356":{"tf":1.0},"380":{"tf":1.0},"422":{"tf":1.0},"427":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"u":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"181":{"tf":1.4142135623730951},"244":{"tf":1.0},"285":{"tf":1.0}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":3,"docs":{"161":{"tf":1.0},"299":{"tf":1.0},"425":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":5,"docs":{"179":{"tf":1.0},"199":{"tf":1.0},"328":{"tf":1.0},"363":{"tf":1.0},"399":{"tf":1.0}}}}}}}},"v":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"319":{"tf":1.0},"397":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}}}},"è":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}}},"é":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}}},"ô":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":18,"docs":{"1":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.4142135623730951},"150":{"tf":1.0},"171":{"tf":1.0},"235":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.7320508075688772},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"381":{"tf":1.0},"390":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.0},"86":{"tf":1.0},"9":{"tf":1.0}}}}}},"s":{"\'":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"/":{"^":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"107":{"tf":1.0},"122":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"/":{"$":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"_":{"3":{"2":{"/":{"$":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"i":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"116":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"[":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"a":{"df":4,"docs":{"382":{"tf":1.0},"394":{"tf":1.0},"82":{"tf":1.4142135623730951},"86":{"tf":1.0}},"i":{"df":1,"docs":{"5":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.0}}}},"n":{"df":35,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"129":{"tf":1.4142135623730951},"14":{"tf":1.0},"146":{"tf":1.0},"150":{"tf":1.0},"16":{"tf":1.4142135623730951},"163":{"tf":1.0},"166":{"tf":1.0},"168":{"tf":1.0},"177":{"tf":1.0},"199":{"tf":1.0},"237":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"288":{"tf":1.0},"316":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.4142135623730951},"347":{"tf":1.0},"350":{"tf":1.4142135623730951},"352":{"tf":1.0},"358":{"tf":1.0},"364":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0},"417":{"tf":1.0},"444":{"tf":1.0},"446":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0},"89":{"tf":1.0}},"t":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"388":{"tf":1.0}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"183":{"tf":1.0},"354":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"f":{"df":2,"docs":{"381":{"tf":1.4142135623730951},"97":{"tf":1.0}}},"r":{"a":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"285":{"tf":1.0},"80":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":11,"docs":{"137":{"tf":1.7320508075688772},"138":{"tf":1.0},"274":{"tf":1.7320508075688772},"275":{"tf":1.0},"446":{"tf":1.0},"448":{"tf":2.0},"71":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"19":{"tf":1.7320508075688772},"253":{"tf":1.0}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{".":{"c":{"d":{"df":0,"docs":{},"x":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"y":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"x":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"180":{"tf":1.0},"185":{"tf":1.0}}}}}}}}},"df":27,"docs":{"1":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":2.6457513110645907},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.4142135623730951},"177":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"180":{"tf":3.872983346207417},"181":{"tf":1.4142135623730951},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":2.0},"185":{"tf":1.4142135623730951},"186":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.4142135623730951},"447":{"tf":1.0},"49":{"tf":1.7320508075688772},"50":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"169":{"tf":1.0},"180":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"c":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":72,"docs":{"11":{"tf":1.4142135623730951},"135":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"139":{"tf":1.4142135623730951},"141":{"tf":1.4142135623730951},"143":{"tf":1.4142135623730951},"215":{"tf":1.4142135623730951},"217":{"tf":1.4142135623730951},"219":{"tf":1.4142135623730951},"221":{"tf":1.4142135623730951},"223":{"tf":1.4142135623730951},"225":{"tf":1.4142135623730951},"227":{"tf":1.4142135623730951},"229":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"260":{"tf":1.4142135623730951},"262":{"tf":1.4142135623730951},"264":{"tf":1.4142135623730951},"266":{"tf":1.4142135623730951},"268":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"272":{"tf":1.4142135623730951},"274":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"302":{"tf":1.4142135623730951},"304":{"tf":1.4142135623730951},"306":{"tf":1.4142135623730951},"308":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"335":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"339":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"343":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"365":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"384":{"tf":1.4142135623730951},"386":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"404":{"tf":1.4142135623730951},"406":{"tf":1.4142135623730951},"408":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"432":{"tf":1.4142135623730951},"434":{"tf":1.4142135623730951},"436":{"tf":1.4142135623730951},"438":{"tf":1.4142135623730951},"440":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"47":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"90":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"n":{"df":4,"docs":{"169":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"380":{"tf":1.0}},"n":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.4142135623730951},"208":{"tf":1.0}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}}},"é":{"df":0,"docs":{},"m":{"a":{"df":14,"docs":{"241":{"tf":1.4142135623730951},"260":{"tf":1.7320508075688772},"261":{"tf":1.0},"280":{"tf":1.4142135623730951},"3":{"tf":1.0},"345":{"tf":1.0},"348":{"tf":1.4142135623730951},"380":{"tf":1.0},"386":{"tf":1.7320508075688772},"387":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"75":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"383":{"tf":1.0}}}}},"p":{"df":2,"docs":{"109":{"tf":1.0},"116":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"420":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":18,"docs":{"145":{"tf":1.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.4142135623730951},"150":{"tf":1.4142135623730951},"151":{"tf":1.0},"152":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.4142135623730951},"161":{"tf":1.0},"165":{"tf":1.0},"171":{"tf":1.0},"2":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.0},"325":{"tf":1.0},"4":{"tf":1.0},"448":{"tf":1.4142135623730951},"450":{"tf":1.4142135623730951}},"s":{"/":{"df":0,"docs":{},"e":{"2":{"df":2,"docs":{"313":{"tf":1.0},"327":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"é":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"147":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":11,"docs":{"16":{"tf":1.4142135623730951},"177":{"tf":1.0},"23":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0},"82":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"353":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"199":{"tf":2.0}}}},"df":0,"docs":{}}},"c":{"df":1,"docs":{"394":{"tf":2.6457513110645907}},"o":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"349":{"tf":1.0},"85":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"4":{"a":{"7":{"df":0,"docs":{},"f":{"2":{"c":{"9":{"df":0,"docs":{},"e":{"1":{"b":{"8":{"d":{"3":{"df":0,"docs":{},"f":{"6":{"a":{"0":{"df":0,"docs":{},"e":{"5":{"c":{"2":{"b":{"9":{"d":{"7":{"df":0,"docs":{},"f":{"4":{"a":{"1":{"df":0,"docs":{},"e":{"8":{"c":{"3":{"b":{"6":{"d":{"9":{"df":0,"docs":{},"f":{"2":{"a":{"5":{"df":0,"docs":{},"e":{"8":{"c":{"1":{"b":{"4":{"d":{"7":{"df":0,"docs":{},"f":{"0":{"a":{"3":{"df":0,"docs":{},"e":{"6":{"c":{"9":{"b":{"2":{"d":{"5":{"df":0,"docs":{},"f":{"8":{"a":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"_":{"3":{"2":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"83":{"tf":1.0},"88":{"tf":1.4142135623730951}}}}}},"df":8,"docs":{"167":{"tf":1.0},"243":{"tf":1.0},"250":{"tf":1.0},"318":{"tf":1.0},"382":{"tf":1.7320508075688772},"390":{"tf":1.0},"393":{"tf":2.23606797749979},"403":{"tf":1.0}}}},"è":{"df":0,"docs":{},"t":{"df":2,"docs":{"290":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"150":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":1.0},"20":{"tf":1.0},"284":{"tf":1.0},"451":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"177":{"tf":1.0},"181":{"tf":1.0},"186":{"tf":1.0},"418":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"[":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"169":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"d":{"df":6,"docs":{"107":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}},"df":17,"docs":{"104":{"tf":1.0},"16":{"tf":1.7320508075688772},"161":{"tf":1.4142135623730951},"166":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.0},"177":{"tf":1.0},"253":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"358":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0},"412":{"tf":1.0},"451":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0}},"e":{"d":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":4,"docs":{"249":{"tf":1.0},"314":{"tf":1.4142135623730951},"325":{"tf":1.0},"443":{"tf":1.0}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":12,"docs":{"185":{"tf":1.4142135623730951},"255":{"tf":1.0},"291":{"tf":1.0},"348":{"tf":2.6457513110645907},"349":{"tf":2.449489742783178},"351":{"tf":2.0},"355":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.7320508075688772},"428":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"f":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"d":{"b":{"df":1,"docs":{"242":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"71":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":79,"docs":{"12":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"2":{"tf":1.0},"21":{"tf":1.0},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"279":{"tf":1.0},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"380":{"tf":1.0},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"74":{"tf":1.0},"78":{"tf":1.4142135623730951},"8":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"208":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"d":{"df":3,"docs":{"133":{"tf":1.0},"160":{"tf":1.0},"316":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"390":{"tf":1.0},"393":{"tf":1.0}}}},"df":0,"docs":{}}}},"q":{"df":1,"docs":{"206":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":11,"docs":{"16":{"tf":1.0},"180":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"r":{"a":{"df":2,"docs":{"214":{"tf":1.0},"258":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}},"t":{"df":1,"docs":{"346":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"373":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"325":{"tf":1.0},"327":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"4":{"0":{"0":{"0":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"238":{"tf":1.0},"96":{"tf":1.0}}}}}}},"df":22,"docs":{"101":{"tf":1.4142135623730951},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"109":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"148":{"tf":1.0},"202":{"tf":1.0},"291":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"300":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"414":{"tf":1.0},"85":{"tf":1.4142135623730951},"95":{"tf":1.0},"97":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":26,"docs":{"1":{"tf":1.0},"102":{"tf":1.4142135623730951},"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"16":{"tf":1.0},"160":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.7320508075688772},"172":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"211":{"tf":1.0},"287":{"tf":1.7320508075688772},"296":{"tf":1.4142135623730951},"316":{"tf":1.7320508075688772},"347":{"tf":1.0},"355":{"tf":1.4142135623730951},"356":{"tf":1.0},"374":{"tf":1.0},"393":{"tf":1.0},"414":{"tf":1.4142135623730951},"418":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":37,"docs":{"104":{"tf":1.0},"124":{"tf":1.0},"205":{"tf":1.0},"249":{"tf":1.0},"252":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"262":{"tf":1.7320508075688772},"263":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"337":{"tf":1.7320508075688772},"338":{"tf":1.0},"359":{"tf":1.7320508075688772},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":2.0},"372":{"tf":1.4142135623730951},"375":{"tf":1.0},"384":{"tf":1.7320508075688772},"385":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.4142135623730951},"402":{"tf":1.0},"413":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.0},"75":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"87":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"96":{"tf":1.7320508075688772}},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":3,"docs":{"292":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":18,"docs":{"103":{"tf":1.0},"105":{"tf":1.7320508075688772},"106":{"tf":1.4142135623730951},"287":{"tf":1.0},"327":{"tf":1.0},"363":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.4142135623730951},"399":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"82":{"tf":1.4142135623730951},"98":{"tf":1.0}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"413":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"t":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":15,"docs":{"123":{"tf":1.0},"163":{"tf":1.4142135623730951},"17":{"tf":1.0},"173":{"tf":1.0},"186":{"tf":1.0},"241":{"tf":1.0},"250":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.0},"313":{"tf":1.0},"319":{"tf":2.0},"375":{"tf":1.0},"417":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"426":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"314":{"tf":1.0},"325":{"tf":1.0}}}},"df":12,"docs":{"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"160":{"tf":1.0},"162":{"tf":1.4142135623730951},"166":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":15,"docs":{"102":{"tf":1.4142135623730951},"112":{"tf":1.4142135623730951},"147":{"tf":1.0},"165":{"tf":1.0},"167":{"tf":1.0},"19":{"tf":1.0},"234":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"287":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.0},"352":{"tf":1.0},"420":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"281":{"tf":1.0},"352":{"tf":1.0},"357":{"tf":1.0},"5":{"tf":1.0},"76":{"tf":1.0}}}}}}}}}},"f":{"df":1,"docs":{"116":{"tf":1.0}}},"h":{"a":{"2":{"5":{"6":{"(":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},":":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":2,"docs":{"293":{"tf":1.0},"85":{"tf":1.0}},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":3,"docs":{"177":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"180":{"tf":1.0},"184":{"tf":1.4142135623730951},"373":{"tf":1.0},"380":{"tf":1.0},"393":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.4142135623730951}}}}},"df":4,"docs":{"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"177":{"tf":1.0},"288":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":8,"docs":{"20":{"tf":1.0},"288":{"tf":1.0},"317":{"tf":1.0},"356":{"tf":1.4142135623730951},"357":{"tf":1.0},"374":{"tf":1.0},"449":{"tf":1.0},"84":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"133":{"tf":1.0}}}},"w":{"df":1,"docs":{"100":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"r":{"_":{"df":1,"docs":{"375":{"tf":1.0}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}}},"df":3,"docs":{"333":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"444":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"375":{"tf":1.0}}}},"df":125,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"119":{"tf":1.0},"12":{"tf":1.0},"134":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"171":{"tf":1.4142135623730951},"172":{"tf":1.0},"18":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":2.0},"19":{"tf":1.7320508075688772},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"199":{"tf":1.0},"20":{"tf":1.7320508075688772},"204":{"tf":1.0},"208":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.4142135623730951},"214":{"tf":1.4142135623730951},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"23":{"tf":1.4142135623730951},"230":{"tf":1.0},"244":{"tf":1.7320508075688772},"248":{"tf":1.0},"249":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"277":{"tf":1.4142135623730951},"28":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"288":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"293":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":1.4142135623730951},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.4142135623730951},"36":{"tf":1.0},"363":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.0},"376":{"tf":1.4142135623730951},"38":{"tf":1.0},"380":{"tf":1.7320508075688772},"385":{"tf":1.0},"387":{"tf":1.0},"389":{"tf":1.0},"399":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.4142135623730951},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"413":{"tf":1.7320508075688772},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.7320508075688772},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.7320508075688772},"89":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"184":{"tf":1.0}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"147":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"199":{"tf":1.0},"352":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"317":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":4,"docs":{"103":{"tf":1.0},"169":{"tf":1.0},"287":{"tf":1.0},"357":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"206":{"tf":1.0},"214":{"tf":1.0},"244":{"tf":1.0},"98":{"tf":1.0}}}}}},"k":{"df":1,"docs":{"206":{"tf":1.0}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"p":{"_":{"d":{"b":{"=":{"1":{"df":1,"docs":{"132":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"=":{"1":{"df":1,"docs":{"132":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":2,"docs":{"146":{"tf":1.0},"165":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"397":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"g":{"df":5,"docs":{"331":{"tf":1.0},"348":{"tf":1.0},"383":{"tf":1.0},"423":{"tf":1.4142135623730951},"428":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":6,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"318":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}}},"_":{"df":1,"docs":{"236":{"tf":1.0}},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"=":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"297":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"5":{"8":{"7":{"df":1,"docs":{"297":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}}},"df":17,"docs":{"141":{"tf":1.7320508075688772},"142":{"tf":1.0},"189":{"tf":1.0},"213":{"tf":1.4142135623730951},"250":{"tf":1.0},"297":{"tf":1.0},"3":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":2.0},"416":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"101":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"161":{"tf":1.0},"300":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"72":{"tf":1.0}},"t":{"df":2,"docs":{"244":{"tf":1.0},"288":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"(":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"df":1,"docs":{"259":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"t":{"df":31,"docs":{"153":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"168":{"tf":1.0},"175":{"tf":1.0},"234":{"tf":1.4142135623730951},"237":{"tf":1.0},"240":{"tf":1.4142135623730951},"249":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.4142135623730951},"312":{"tf":1.0},"332":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.0},"357":{"tf":1.0},"364":{"tf":1.0},"375":{"tf":1.7320508075688772},"376":{"tf":1.0},"377":{"tf":1.0},"382":{"tf":1.4142135623730951},"417":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0},"87":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.0}}}}},"df":1,"docs":{"373":{"tf":1.0}},"i":{"df":19,"docs":{"160":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0}}}}},"u":{"df":3,"docs":{"161":{"tf":1.0},"244":{"tf":1.0},"373":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"442":{"tf":1.0},"89":{"tf":1.0}}}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}},"r":{"df":1,"docs":{"301":{"tf":1.0}}}}}},"i":{"df":1,"docs":{"277":{"tf":1.0}}}},"r":{"c":{"df":15,"docs":{"100":{"tf":1.4142135623730951},"146":{"tf":1.0},"148":{"tf":1.0},"152":{"tf":1.0},"163":{"tf":1.4142135623730951},"165":{"tf":1.0},"174":{"tf":1.0},"208":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"299":{"tf":1.0},"358":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{":":{"]":{"]":{"*":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"[":{"[":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"e":{":":{"]":{"]":{"+":{"[":{"0":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"169":{"tf":1.0},"184":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":3,"docs":{"313":{"tf":1.0},"314":{"tf":1.0},"318":{"tf":2.0}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"é":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"243":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":7,"docs":{"153":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.4142135623730951},"312":{"tf":1.0},"320":{"tf":1.0},"375":{"tf":1.0},"416":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"l":{"df":2,"docs":{"291":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"43":{"tf":1.7320508075688772},"44":{"tf":1.0},"8":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}},"r":{"c":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":2,"docs":{"174":{"tf":1.0},"428":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"s":{"df":9,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"212":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":11,"docs":{"347":{"tf":1.4142135623730951},"348":{"tf":1.7320508075688772},"349":{"tf":1.0},"355":{"tf":2.23606797749979},"357":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.4142135623730951},"380":{"tf":1.0},"418":{"tf":1.0},"445":{"tf":1.0},"9":{"tf":1.0}}},"f":{"df":1,"docs":{"288":{"tf":1.0}},"l":{"df":1,"docs":{"177":{"tf":1.0}}}},"h":{"+":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"420":{"tf":1.0}}},"df":0,"docs":{}}}}}},".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"193":{"tf":2.0},"205":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":3,"docs":{"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"166":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"108":{"tf":1.0},"113":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":4,"docs":{"123":{"tf":1.0},"19":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"294":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"294":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"287":{"tf":1.0}}}}}},":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"84":{"tf":1.4142135623730951}},"s":{":":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"424":{"tf":1.0},"426":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"372":{"tf":1.0},"424":{"tf":1.4142135623730951},"426":{"tf":1.4142135623730951}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"=":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"2":{"2":{"2":{"2":{"df":2,"docs":{"102":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"236":{"tf":1.0},"238":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"d":{":":{"2":{"2":{"df":1,"docs":{"122":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":15,"docs":{"103":{"tf":1.4142135623730951},"104":{"tf":2.0},"105":{"tf":2.0},"107":{"tf":1.4142135623730951},"122":{"tf":1.7320508075688772},"124":{"tf":1.0},"127":{"tf":1.4142135623730951},"133":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"204":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"97":{"tf":1.0},"98":{"tf":1.0}}},"df":103,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"107":{"tf":1.4142135623730951},"108":{"tf":2.0},"109":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"120":{"tf":1.4142135623730951},"121":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"123":{"tf":1.0},"124":{"tf":2.449489742783178},"126":{"tf":1.0},"127":{"tf":2.23606797749979},"129":{"tf":1.0},"13":{"tf":1.4142135623730951},"130":{"tf":1.0},"133":{"tf":1.7320508075688772},"134":{"tf":1.7320508075688772},"14":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"150":{"tf":1.7320508075688772},"151":{"tf":1.4142135623730951},"153":{"tf":2.0},"16":{"tf":2.0},"160":{"tf":1.7320508075688772},"163":{"tf":1.7320508075688772},"166":{"tf":2.0},"167":{"tf":1.4142135623730951},"169":{"tf":2.23606797749979},"171":{"tf":1.7320508075688772},"172":{"tf":1.0},"174":{"tf":1.0},"183":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"19":{"tf":2.8284271247461903},"193":{"tf":1.0},"20":{"tf":2.8284271247461903},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.7320508075688772},"219":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"220":{"tf":1.0},"23":{"tf":2.449489742783178},"24":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":2.449489742783178},"289":{"tf":1.0},"293":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"296":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"300":{"tf":1.7320508075688772},"326":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"370":{"tf":2.0},"372":{"tf":1.0},"374":{"tf":2.0},"375":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.0},"392":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"416":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.4142135623730951},"424":{"tf":5.0},"425":{"tf":4.358898943540674},"426":{"tf":1.4142135623730951},"427":{"tf":1.0},"448":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"85":{"tf":1.7320508075688772},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"372":{"tf":1.0},"374":{"tf":1.0},"383":{"tf":1.0},"424":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"193":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{"df":1,"docs":{"202":{"tf":1.0}}},"r":{"df":4,"docs":{"375":{"tf":2.449489742783178},"414":{"tf":1.0},"418":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"286":{"tf":1.0},"300":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":10,"docs":{"161":{"tf":1.0},"209":{"tf":1.4142135623730951},"444":{"tf":2.23606797749979},"451":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"87":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"177":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"442":{"tf":1.0}}}}},"r":{"d":{"df":5,"docs":{"276":{"tf":1.0},"326":{"tf":1.0},"330":{"tf":1.0},"372":{"tf":1.0},"417":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":6,"docs":{"183":{"tf":1.0},"278":{"tf":1.0},"291":{"tf":1.4142135623730951},"293":{"tf":1.0},"300":{"tf":1.0},"85":{"tf":2.0}},"e":{"d":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"4":{"5":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":3,"docs":{"204":{"tf":1.0},"207":{"tf":1.0},"348":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"175":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":2,"docs":{"355":{"tf":1.0},"361":{"tf":1.0}}},"i":{"c":{"/":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"292":{"tf":1.0},"389":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"292":{"tf":1.7320508075688772},"389":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"447":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":4,"docs":{"292":{"tf":1.0},"375":{"tf":1.4142135623730951},"400":{"tf":1.0},"418":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":8,"docs":{"232":{"tf":1.0},"233":{"tf":1.4142135623730951},"238":{"tf":1.4142135623730951},"246":{"tf":1.4142135623730951},"255":{"tf":1.0},"258":{"tf":1.4142135623730951},"375":{"tf":1.0},"380":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"347":{"tf":1.0}}}}}}}},"u":{"df":18,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"113":{"tf":1.0},"124":{"tf":1.4142135623730951},"127":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.4142135623730951},"188":{"tf":1.0},"204":{"tf":1.7320508075688772},"206":{"tf":1.0},"207":{"tf":1.0},"318":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}},"s":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"348":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"104":{"tf":1.0},"164":{"tf":1.0},"17":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"300":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"175":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"317":{"tf":1.4142135623730951}}}},"o":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"287":{"tf":1.4142135623730951},"293":{"tf":1.0},"413":{"tf":1.0}}}},"df":5,"docs":{"177":{"tf":1.0},"178":{"tf":1.0},"244":{"tf":1.0},"419":{"tf":1.0},"82":{"tf":1.0}},"é":{"df":3,"docs":{"234":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"287":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":6,"docs":{"274":{"tf":1.7320508075688772},"275":{"tf":1.0},"310":{"tf":1.0},"43":{"tf":1.7320508075688772},"44":{"tf":1.0},"76":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":17,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.0},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"115":{"tf":1.0},"120":{"tf":1.4142135623730951},"121":{"tf":2.0},"133":{"tf":1.7320508075688772},"134":{"tf":1.0},"187":{"tf":1.0},"317":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.0},"424":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}},"é":{"df":2,"docs":{"169":{"tf":1.0},"175":{"tf":1.0}}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"119":{"tf":1.0},"167":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"257":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"234":{"tf":1.0},"236":{"tf":1.7320508075688772},"258":{"tf":1.0},"375":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":6,"docs":{"284":{"tf":1.0},"289":{"tf":1.0},"314":{"tf":1.4142135623730951},"372":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"356":{"tf":1.0},"369":{"tf":1.0},"421":{"tf":1.0}}}},"é":{"df":1,"docs":{"3":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}}},"u":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":6,"docs":{"169":{"tf":2.0},"287":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"370":{"tf":1.0},"413":{"tf":2.449489742783178},"82":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":1,"docs":{"393":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"317":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":2,"docs":{"164":{"tf":1.0},"175":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"85":{"tf":1.0}}}}}}}}}},"è":{"df":3,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"424":{"tf":1.0}}}},"df":0,"docs":{},"h":{"df":1,"docs":{"19":{"tf":1.0}}}},"d":{"df":0,"docs":{},"o":{"df":44,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":2.0},"107":{"tf":1.4142135623730951},"108":{"tf":2.23606797749979},"109":{"tf":2.6457513110645907},"113":{"tf":1.4142135623730951},"115":{"tf":1.7320508075688772},"116":{"tf":2.6457513110645907},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":2.23606797749979},"122":{"tf":1.7320508075688772},"124":{"tf":2.0},"126":{"tf":1.4142135623730951},"127":{"tf":1.7320508075688772},"129":{"tf":1.0},"130":{"tf":1.7320508075688772},"133":{"tf":1.0},"151":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"188":{"tf":1.7320508075688772},"189":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"201":{"tf":1.0},"203":{"tf":1.4142135623730951},"204":{"tf":2.0},"205":{"tf":2.0},"206":{"tf":1.4142135623730951},"207":{"tf":2.0},"212":{"tf":1.0},"213":{"tf":1.4142135623730951},"288":{"tf":1.0},"300":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}},"df":1,"docs":{"442":{"tf":1.0}}},"t":{"df":2,"docs":{"147":{"tf":1.0},"211":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"351":{"tf":1.0}}}}}}},"i":{"df":1,"docs":{"7":{"tf":1.0}},"t":{"df":3,"docs":{"156":{"tf":1.0},"3":{"tf":1.0},"362":{"tf":1.0}}},"v":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"293":{"tf":1.0},"301":{"tf":1.0},"414":{"tf":1.0},"6":{"tf":1.0},"84":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"278":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":1.7320508075688772}}}},"i":{"df":4,"docs":{"175":{"tf":1.4142135623730951},"346":{"tf":1.0},"8":{"tf":1.0},"85":{"tf":1.0}}},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"295":{"tf":1.4142135623730951},"390":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":3,"docs":{"59":{"tf":1.7320508075688772},"60":{"tf":1.0},"9":{"tf":1.0}}}}},"s":{"df":6,"docs":{"278":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"8":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":7,"docs":{"165":{"tf":1.0},"23":{"tf":1.0},"327":{"tf":1.0},"353":{"tf":1.4142135623730951},"360":{"tf":1.0},"376":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"442":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"81":{"tf":1.0}}}}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":2,"docs":{"184":{"tf":1.0},"382":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":90,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"103":{"tf":1.4142135623730951},"104":{"tf":1.7320508075688772},"105":{"tf":1.0},"113":{"tf":1.0},"120":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"13":{"tf":1.0},"133":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"147":{"tf":1.4142135623730951},"15":{"tf":1.0},"150":{"tf":1.4142135623730951},"151":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":2.0},"161":{"tf":1.4142135623730951},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":2.0},"172":{"tf":1.0},"173":{"tf":1.7320508075688772},"177":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"18":{"tf":2.0},"183":{"tf":1.0},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"191":{"tf":1.0},"192":{"tf":1.0},"194":{"tf":1.0},"198":{"tf":1.4142135623730951},"2":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":1.7320508075688772},"210":{"tf":1.0},"211":{"tf":1.4142135623730951},"212":{"tf":1.0},"217":{"tf":1.7320508075688772},"218":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"244":{"tf":1.0},"248":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"291":{"tf":1.0},"294":{"tf":1.7320508075688772},"296":{"tf":1.0},"327":{"tf":1.0},"331":{"tf":1.0},"346":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.7320508075688772},"360":{"tf":1.0},"363":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"376":{"tf":1.4142135623730951},"381":{"tf":1.0},"393":{"tf":1.7320508075688772},"396":{"tf":1.0},"397":{"tf":1.4142135623730951},"4":{"tf":1.0},"412":{"tf":1.0},"419":{"tf":1.7320508075688772},"442":{"tf":1.0},"443":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.7320508075688772},"66":{"tf":1.0},"72":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"94":{"tf":1.4142135623730951},"95":{"tf":1.7320508075688772}},"f":{"a":{"c":{"df":1,"docs":{"208":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"167":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"v":{"c":{"df":2,"docs":{"348":{"tf":3.4641016151377544},"426":{"tf":4.0}}},"df":0,"docs":{}},"w":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"181":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"df":11,"docs":{"1":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.0},"177":{"tf":2.0},"180":{"tf":1.7320508075688772},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"370":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.4142135623730951}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"m":{"df":7,"docs":{"133":{"tf":1.0},"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"150":{"tf":1.0}},"n":{"df":0,"docs":{},"i":{"df":3,"docs":{"160":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0}},"s":{"df":4,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0},"23":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":4,"docs":{"105":{"tf":1.0},"59":{"tf":1.7320508075688772},"60":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":21,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"113":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"118":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.4142135623730951},"126":{"tf":1.0},"127":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"172":{"tf":1.0},"188":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"213":{"tf":1.0},"252":{"tf":1.0},"300":{"tf":1.0}}}}},"d":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"446":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"446":{"tf":1.0}}}}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"4":{"5":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":11,"docs":{"113":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":1.4142135623730951},"185":{"tf":1.0},"189":{"tf":2.0},"444":{"tf":1.0},"446":{"tf":2.449489742783178},"73":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.7320508075688772},"91":{"tf":1.0}}},"df":1,"docs":{"199":{"tf":1.0}}}},"è":{"df":0,"docs":{},"m":{"df":20,"docs":{"103":{"tf":1.4142135623730951},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"122":{"tf":1.4142135623730951},"124":{"tf":1.0},"134":{"tf":1.0},"168":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"232":{"tf":2.0},"244":{"tf":1.0},"288":{"tf":1.7320508075688772},"373":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"419":{"tf":1.4142135623730951},"423":{"tf":1.0},"429":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}}}},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{".":{"*":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"131":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{".":{"*":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"131":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"290":{"tf":1.0}}}},"t":{"df":19,"docs":{"10":{"tf":1.0},"102":{"tf":1.0},"167":{"tf":1.4142135623730951},"169":{"tf":1.0},"17":{"tf":2.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"22":{"tf":1.0},"357":{"tf":1.0},"383":{"tf":1.4142135623730951},"388":{"tf":1.0},"391":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951},"394":{"tf":1.0},"396":{"tf":1.0},"403":{"tf":1.0},"445":{"tf":1.0},"67":{"tf":1.7320508075688772},"68":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"416":{"tf":1.7320508075688772}}}},"df":1,"docs":{"420":{"tf":1.0}},"é":{"df":1,"docs":{"147":{"tf":1.0}}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":5,"docs":{"281":{"tf":1.0},"345":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"327":{"tf":1.0}}}}}}}}}},"v":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}}}}},"û":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}},"’":{"a":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"2":{"tf":1.4142135623730951},"276":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"82":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"451":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":4,"docs":{"210":{"tf":1.0},"296":{"tf":1.0},"327":{"tf":1.0},"85":{"tf":1.0}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"146":{"tf":1.4142135623730951},"242":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"[":{"df":0,"docs":{},"t":{"df":0,"docs":{},"â":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":1,"docs":{"352":{"tf":1.0}}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":11,"docs":{"175":{"tf":1.0},"232":{"tf":1.0},"239":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.7320508075688772},"293":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"372":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"153":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":8,"docs":{"13":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"19":{"tf":1.7320508075688772},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0}},"g":{"df":2,"docs":{"373":{"tf":1.7320508075688772},"375":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"207":{"tf":1.4142135623730951}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"/":{"d":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"323":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"113":{"tf":1.0},"292":{"tf":1.4142135623730951},"389":{"tf":1.0}}}}},"df":1,"docs":{"292":{"tf":1.0}}},"df":0,"docs":{}}}}}},"n":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"253":{"tf":1.0},"4":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":24,"docs":{"146":{"tf":1.0},"165":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"289":{"tf":1.4142135623730951},"290":{"tf":1.4142135623730951},"291":{"tf":1.4142135623730951},"292":{"tf":1.4142135623730951},"293":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"349":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"89":{"tf":1.4142135623730951}},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}},"r":{"d":{"df":1,"docs":{"107":{"tf":1.4142135623730951}}},"df":2,"docs":{"171":{"tf":1.0},"180":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":1,"docs":{"293":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"169":{"tf":1.0}}}},"t":{"df":2,"docs":{"348":{"tf":1.0},"6":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"277":{"tf":1.0}}}},"df":0,"docs":{}}},"b":{"df":5,"docs":{"169":{"tf":1.0},"287":{"tf":1.0},"356":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}},"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":18,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"124":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"16":{"tf":2.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"203":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"352":{"tf":1.0},"362":{"tf":1.0},"83":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"372":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.4142135623730951}}}}}},"df":9,"docs":{"179":{"tf":1.0},"313":{"tf":1.0},"317":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0},"382":{"tf":1.7320508075688772},"424":{"tf":1.0},"425":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"314":{"tf":1.0},"325":{"tf":1.0}}}},"df":2,"docs":{"314":{"tf":1.0},"327":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":7,"docs":{"15":{"tf":1.0},"280":{"tf":1.4142135623730951},"286":{"tf":1.0},"3":{"tf":1.0},"75":{"tf":1.4142135623730951},"81":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}}}},"df":9,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.4142135623730951}},"e":{"df":15,"docs":{"105":{"tf":1.0},"109":{"tf":1.0},"121":{"tf":1.0},"127":{"tf":1.0},"189":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"201":{"tf":1.0}}},"l":{"df":1,"docs":{"442":{"tf":1.0}}},"m":{"df":0,"docs":{},"p":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"312":{"tf":1.0}}}}},"df":5,"docs":{"15":{"tf":1.0},"207":{"tf":1.0},"286":{"tf":1.0},"377":{"tf":1.4142135623730951},"81":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"t":{"df":93,"docs":{"12":{"tf":1.0},"133":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"161":{"tf":1.0},"2":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"235":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"287":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.7320508075688772},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"389":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"418":{"tf":1.0},"42":{"tf":1.0},"428":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":2.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"451":{"tf":2.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"e":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"451":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"451":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"451":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"161":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"358":{"tf":1.0},"447":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":1,"docs":{"189":{"tf":1.0}}}},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":7,"docs":{"106":{"tf":1.0},"16":{"tf":1.0},"160":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"(":{"\'":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"328":{"tf":1.0}}}}}},"df":0,"docs":{}},".":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"e":{"(":{"\'":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},":":{"df":0,"docs":{},"e":{"2":{"df":5,"docs":{"313":{"tf":1.0},"320":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.0},"403":{"tf":1.0}},"e":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"324":{"tf":1.0},"327":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"316":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":52,"docs":{"107":{"tf":1.0},"119":{"tf":1.4142135623730951},"123":{"tf":2.23606797749979},"124":{"tf":1.0},"146":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":2.23606797749979},"164":{"tf":1.4142135623730951},"166":{"tf":1.0},"171":{"tf":1.0},"174":{"tf":2.0},"20":{"tf":1.0},"206":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"235":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.4142135623730951},"279":{"tf":1.4142135623730951},"296":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"310":{"tf":2.0},"311":{"tf":1.0},"312":{"tf":3.0},"313":{"tf":2.0},"314":{"tf":2.8284271247461903},"315":{"tf":1.7320508075688772},"316":{"tf":2.449489742783178},"317":{"tf":2.6457513110645907},"318":{"tf":2.23606797749979},"319":{"tf":2.0},"320":{"tf":3.4641016151377544},"321":{"tf":1.4142135623730951},"322":{"tf":2.0},"323":{"tf":1.0},"324":{"tf":1.7320508075688772},"325":{"tf":2.6457513110645907},"326":{"tf":2.0},"327":{"tf":1.7320508075688772},"328":{"tf":2.0},"329":{"tf":1.7320508075688772},"330":{"tf":1.4142135623730951},"331":{"tf":1.4142135623730951},"332":{"tf":1.7320508075688772},"333":{"tf":1.4142135623730951},"334":{"tf":2.449489742783178},"380":{"tf":1.0},"389":{"tf":1.4142135623730951},"395":{"tf":1.4142135623730951},"397":{"tf":2.8284271247461903},"403":{"tf":1.7320508075688772},"447":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"166":{"tf":1.0},"316":{"tf":1.0},"397":{"tf":1.0},"419":{"tf":1.0}}},"z":{"df":2,"docs":{"300":{"tf":1.0},"451":{"tf":1.0}}}},"s":{"/":{"df":0,"docs":{},"e":{"2":{"df":1,"docs":{"325":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"318":{"tf":1.0},"320":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"334":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"316":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"é":{"df":1,"docs":{"95":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"t":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"241":{"tf":1.4142135623730951},"318":{"tf":1.0},"319":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"333":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"é":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"348":{"tf":1.4142135623730951},"349":{"tf":1.0}}}}}}},"è":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"333":{"tf":1.0}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":3,"docs":{"208":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":9,"docs":{"104":{"tf":1.0},"133":{"tf":1.0},"175":{"tf":1.0},"183":{"tf":1.4142135623730951},"318":{"tf":1.0},"354":{"tf":1.0},"380":{"tf":1.0},"397":{"tf":1.0},"84":{"tf":1.4142135623730951}}}}},"r":{"df":2,"docs":{"118":{"tf":1.0},"446":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"z":{"df":1,"docs":{"241":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"23":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"377":{"tf":1.0},"426":{"tf":1.0}}},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"l":{"df":7,"docs":{"124":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.4142135623730951},"445":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"89":{"tf":1.0}},"n":{"df":0,"docs":{},"p":{"df":9,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"212":{"tf":1.0},"88":{"tf":1.0}}}},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"1":{".":{"2":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"205":{"tf":1.7320508075688772}}}}}},"df":2,"docs":{"116":{"tf":1.4142135623730951},"161":{"tf":1.0}}}}}}}}},"p":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"205":{"tf":1.4142135623730951}}}}}},"df":1,"docs":{"109":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{}}},"o":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"210":{"tf":1.0},"451":{"tf":1.0}}}}}}}}}},"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"125":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"451":{"tf":1.0}}}}}}}}}}}},"d":{"df":0,"docs":{},"o":{"df":72,"docs":{"12":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}}},"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"i":{"df":1,"docs":{"17":{"tf":1.7320508075688772}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"390":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":13,"docs":{"180":{"tf":1.0},"189":{"tf":1.4142135623730951},"194":{"tf":1.0},"208":{"tf":1.0},"313":{"tf":1.0},"37":{"tf":1.7320508075688772},"375":{"tf":1.0},"38":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.7320508075688772},"449":{"tf":1.0},"8":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}},"df":0,"docs":{}},"|":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"(":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":4,"docs":{"169":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.0},"380":{"tf":1.0}}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":5,"docs":{"148":{"tf":1.4142135623730951},"169":{"tf":1.0},"370":{"tf":1.0},"420":{"tf":1.0},"96":{"tf":1.0}}}}},"n":{"df":13,"docs":{"13":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"16":{"tf":2.6457513110645907},"17":{"tf":2.23606797749979},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":2.23606797749979},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"300":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":1,"docs":{"97":{"tf":1.4142135623730951}}}}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"169":{"tf":1.0},"176":{"tf":1.0},"207":{"tf":1.4142135623730951},"277":{"tf":1.0},"294":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.0}}}},"u":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"df":17,"docs":{"189":{"tf":1.0},"2":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"288":{"tf":1.0},"292":{"tf":1.0},"312":{"tf":1.0},"324":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"362":{"tf":1.0},"381":{"tf":1.4142135623730951},"382":{"tf":1.0},"383":{"tf":1.7320508075688772},"400":{"tf":1.0},"403":{"tf":1.0},"85":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"442":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"291":{"tf":1.0},"299":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"148":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"df":32,"docs":{"16":{"tf":1.4142135623730951},"173":{"tf":1.0},"18":{"tf":1.4142135623730951},"207":{"tf":1.0},"214":{"tf":1.0},"217":{"tf":1.7320508075688772},"218":{"tf":1.0},"235":{"tf":1.0},"276":{"tf":1.0},"288":{"tf":1.0},"293":{"tf":1.4142135623730951},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"361":{"tf":1.0},"375":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"393":{"tf":2.0},"394":{"tf":1.0},"396":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"451":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"414":{"tf":1.0}},"r":{"df":1,"docs":{"394":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"k":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"a":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":30,"docs":{"1":{"tf":1.0},"168":{"tf":2.0},"169":{"tf":1.4142135623730951},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.4142135623730951},"177":{"tf":1.0},"178":{"tf":2.0},"179":{"tf":1.4142135623730951},"180":{"tf":1.4142135623730951},"181":{"tf":1.7320508075688772},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.0},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"195":{"tf":1.0},"196":{"tf":1.0},"208":{"tf":1.4142135623730951},"211":{"tf":1.4142135623730951},"370":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.4142135623730951},"186":{"tf":1.0}}}}},"é":{"df":1,"docs":{"393":{"tf":1.0}}}},"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"396":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"119":{"tf":1.0},"150":{"tf":1.0},"171":{"tf":1.0}}}}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"146":{"tf":1.0},"153":{"tf":1.0},"171":{"tf":1.0},"419":{"tf":1.0},"83":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"442":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"133":{"tf":1.0},"376":{"tf":1.0},"383":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}}}},"ç":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":10,"docs":{"104":{"tf":1.0},"133":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"19":{"tf":1.0},"202":{"tf":1.0},"286":{"tf":1.0},"292":{"tf":1.0},"394":{"tf":1.0},"98":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"428":{"tf":1.0}}}}}}},"_":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"171":{"tf":1.0},"174":{"tf":1.7320508075688772},"413":{"tf":1.0},"428":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"{":{"a":{"df":0,"docs":{},"r":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"319":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":4,"docs":{"173":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.4142135623730951},"375":{"tf":1.0}}}}}},"p":{"df":1,"docs":{"163":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":5,"docs":{"169":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"87":{"tf":1.0},"96":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"v":{"df":5,"docs":{"166":{"tf":1.0},"244":{"tf":1.0},"288":{"tf":1.0},"451":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":13,"docs":{"122":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":2.23606797749979},"133":{"tf":1.0},"189":{"tf":3.3166247903554},"211":{"tf":1.0},"243":{"tf":2.0},"249":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.0},"377":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}},"y":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"+":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"u":{"df":13,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":2.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"5":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"443":{"tf":1.0}},"r":{"df":1,"docs":{"74":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"257":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":173,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":1.7320508075688772},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"12":{"tf":1.4142135623730951},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"13":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"14":{"tf":1.4142135623730951},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"22":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"23":{"tf":1.0},"230":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"277":{"tf":2.23606797749979},"278":{"tf":1.7320508075688772},"28":{"tf":1.4142135623730951},"282":{"tf":1.7320508075688772},"283":{"tf":1.4142135623730951},"284":{"tf":1.4142135623730951},"285":{"tf":1.4142135623730951},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"300":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.4142135623730951},"304":{"tf":1.0},"305":{"tf":1.4142135623730951},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"444":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":2.8284271247461903},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"7":{"tf":1.7320508075688772},"70":{"tf":1.0},"72":{"tf":2.449489742783178},"73":{"tf":1.7320508075688772},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.4142135623730951},"92":{"tf":1.0},"93":{"tf":1.4142135623730951},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}}}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":8,"docs":{"250":{"tf":1.0},"3":{"tf":1.7320508075688772},"372":{"tf":1.0},"377":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"â":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":9,"docs":{"148":{"tf":1.0},"169":{"tf":1.0},"279":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"357":{"tf":1.0},"420":{"tf":1.0},"74":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951},"96":{"tf":1.0}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":3,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.4142135623730951}}}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":4,"docs":{"151":{"tf":1.0},"288":{"tf":1.0},"291":{"tf":1.0},"81":{"tf":1.0}}}}}}},"df":8,"docs":{"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"185":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"291":{"tf":1.0},"84":{"tf":1.0}},"f":{"df":0,"docs":{},"w":{"df":6,"docs":{"108":{"tf":2.23606797749979},"127":{"tf":1.4142135623730951},"188":{"tf":1.7320508075688772},"189":{"tf":1.7320508075688772},"214":{"tf":1.0},"88":{"tf":1.0}}}},"i":{",":{"df":0,"docs":{},"h":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":18,"docs":{"102":{"tf":1.0},"123":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.4142135623730951},"247":{"tf":1.0},"248":{"tf":1.0},"281":{"tf":1.0},"318":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"333":{"tf":1.4142135623730951},"348":{"tf":3.1622776601683795},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"438":{"tf":1.7320508075688772},"439":{"tf":1.0},"96":{"tf":1.0}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"132":{"tf":1.4142135623730951},"181":{"tf":1.0},"242":{"tf":1.0}}}}}}}}}},"n":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}}}}}},"b":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}}}}},"df":286,"docs":{"1":{"tf":2.449489742783178},"102":{"tf":1.7320508075688772},"104":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.4142135623730951},"123":{"tf":1.0},"128":{"tf":1.4142135623730951},"135":{"tf":1.0},"136":{"tf":1.4142135623730951},"137":{"tf":1.0},"138":{"tf":1.4142135623730951},"139":{"tf":1.0},"14":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"141":{"tf":1.0},"142":{"tf":1.4142135623730951},"143":{"tf":1.0},"144":{"tf":1.4142135623730951},"145":{"tf":1.4142135623730951},"146":{"tf":1.4142135623730951},"147":{"tf":2.449489742783178},"148":{"tf":1.0},"149":{"tf":1.0},"15":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.4142135623730951},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.7320508075688772},"16":{"tf":2.8284271247461903},"160":{"tf":1.0},"161":{"tf":1.0},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.7320508075688772},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"169":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"171":{"tf":1.0},"173":{"tf":1.7320508075688772},"174":{"tf":1.4142135623730951},"175":{"tf":1.7320508075688772},"176":{"tf":1.4142135623730951},"177":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":2.0},"18":{"tf":2.23606797749979},"181":{"tf":1.0},"184":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":2.6457513110645907},"190":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":2.0},"20":{"tf":1.7320508075688772},"206":{"tf":1.0},"21":{"tf":1.7320508075688772},"210":{"tf":1.0},"213":{"tf":1.7320508075688772},"214":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.4142135623730951},"217":{"tf":1.0},"218":{"tf":1.4142135623730951},"219":{"tf":1.0},"220":{"tf":1.4142135623730951},"221":{"tf":1.0},"222":{"tf":1.4142135623730951},"223":{"tf":1.0},"224":{"tf":1.4142135623730951},"225":{"tf":2.0},"226":{"tf":1.7320508075688772},"227":{"tf":1.0},"228":{"tf":1.4142135623730951},"229":{"tf":1.0},"23":{"tf":1.0},"230":{"tf":1.4142135623730951},"232":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.7320508075688772},"244":{"tf":1.7320508075688772},"25":{"tf":1.0},"252":{"tf":1.4142135623730951},"253":{"tf":1.4142135623730951},"254":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"260":{"tf":1.0},"261":{"tf":1.4142135623730951},"262":{"tf":1.0},"263":{"tf":1.4142135623730951},"264":{"tf":1.0},"265":{"tf":1.4142135623730951},"266":{"tf":1.0},"267":{"tf":1.4142135623730951},"268":{"tf":1.0},"269":{"tf":1.4142135623730951},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.4142135623730951},"272":{"tf":1.0},"273":{"tf":1.4142135623730951},"274":{"tf":1.0},"275":{"tf":1.4142135623730951},"276":{"tf":1.0},"277":{"tf":2.23606797749979},"278":{"tf":1.0},"279":{"tf":2.23606797749979},"28":{"tf":1.4142135623730951},"282":{"tf":1.0},"283":{"tf":1.4142135623730951},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"294":{"tf":1.7320508075688772},"296":{"tf":1.4142135623730951},"299":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.4142135623730951},"304":{"tf":2.0},"305":{"tf":1.7320508075688772},"306":{"tf":1.0},"307":{"tf":1.4142135623730951},"308":{"tf":1.0},"309":{"tf":1.4142135623730951},"31":{"tf":1.0},"312":{"tf":1.0},"316":{"tf":1.7320508075688772},"317":{"tf":1.4142135623730951},"319":{"tf":1.0},"32":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"322":{"tf":2.0},"327":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":2.6457513110645907},"332":{"tf":2.0},"334":{"tf":2.0},"335":{"tf":2.0},"336":{"tf":1.7320508075688772},"337":{"tf":2.0},"338":{"tf":1.7320508075688772},"339":{"tf":2.0},"34":{"tf":1.4142135623730951},"340":{"tf":1.7320508075688772},"341":{"tf":1.0},"342":{"tf":1.4142135623730951},"343":{"tf":2.0},"344":{"tf":1.7320508075688772},"345":{"tf":1.7320508075688772},"346":{"tf":1.4142135623730951},"347":{"tf":2.23606797749979},"348":{"tf":1.0},"349":{"tf":1.7320508075688772},"35":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.4142135623730951},"352":{"tf":1.7320508075688772},"353":{"tf":1.0},"354":{"tf":1.4142135623730951},"355":{"tf":2.0},"356":{"tf":1.0},"357":{"tf":1.0},"36":{"tf":1.4142135623730951},"363":{"tf":2.6457513110645907},"364":{"tf":1.0},"365":{"tf":2.0},"366":{"tf":1.7320508075688772},"367":{"tf":1.0},"368":{"tf":1.4142135623730951},"37":{"tf":2.0},"375":{"tf":1.4142135623730951},"38":{"tf":1.7320508075688772},"382":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.4142135623730951},"386":{"tf":1.0},"387":{"tf":1.4142135623730951},"39":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.4142135623730951},"404":{"tf":1.0},"405":{"tf":1.4142135623730951},"406":{"tf":1.0},"407":{"tf":1.4142135623730951},"408":{"tf":1.0},"409":{"tf":1.4142135623730951},"41":{"tf":2.0},"410":{"tf":1.0},"411":{"tf":1.4142135623730951},"412":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"42":{"tf":1.7320508075688772},"420":{"tf":2.0},"428":{"tf":1.4142135623730951},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.4142135623730951},"432":{"tf":1.0},"433":{"tf":1.4142135623730951},"434":{"tf":1.0},"435":{"tf":1.4142135623730951},"436":{"tf":1.0},"437":{"tf":1.4142135623730951},"438":{"tf":1.0},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"440":{"tf":1.0},"441":{"tf":1.4142135623730951},"442":{"tf":1.7320508075688772},"448":{"tf":1.0},"449":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.4142135623730951},"47":{"tf":2.0},"48":{"tf":1.7320508075688772},"49":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":2.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":2.23606797749979},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772},"81":{"tf":1.0},"82":{"tf":2.0},"83":{"tf":1.7320508075688772},"86":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.4142135623730951},"92":{"tf":1.0},"93":{"tf":1.4142135623730951},"94":{"tf":1.4142135623730951},"95":{"tf":2.0},"98":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":2,"docs":{"85":{"tf":1.0},"88":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"167":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":11,"docs":{"166":{"tf":1.0},"189":{"tf":1.4142135623730951},"21":{"tf":1.0},"23":{"tf":1.0},"241":{"tf":1.0},"242":{"tf":1.0},"246":{"tf":1.4142135623730951},"247":{"tf":1.4142135623730951},"287":{"tf":1.0},"444":{"tf":1.0},"97":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":16,"docs":{"277":{"tf":1.0},"279":{"tf":1.0},"310":{"tf":1.7320508075688772},"311":{"tf":1.0},"312":{"tf":2.0},"313":{"tf":1.0},"314":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0}}}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"133":{"tf":1.0},"193":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"293":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"316":{"tf":1.4142135623730951},"401":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":12,"docs":{"115":{"tf":1.0},"180":{"tf":1.4142135623730951},"300":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":2.0},"349":{"tf":2.6457513110645907},"351":{"tf":1.7320508075688772},"352":{"tf":1.4142135623730951},"353":{"tf":1.0},"355":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951}},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"(":{"d":{"b":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"357":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"348":{"tf":1.4142135623730951},"349":{"tf":1.4142135623730951},"351":{"tf":1.7320508075688772},"357":{"tf":1.0}}}}}}}}}}},"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"241":{"tf":1.0},"255":{"tf":1.0},"425":{"tf":1.0}}}},"b":{"df":0,"docs":{},"i":{"df":2,"docs":{"241":{"tf":1.0},"255":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"351":{"tf":1.0}}},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"353":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":8,"docs":{"109":{"tf":1.0},"178":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"318":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"88":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":5,"docs":{"177":{"tf":1.0},"184":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"424":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"180":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":9,"docs":{"121":{"tf":1.0},"279":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"l":{"df":3,"docs":{"199":{"tf":1.0},"243":{"tf":1.0},"83":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"157":{"tf":1.4142135623730951},"359":{"tf":1.0},"84":{"tf":1.0}}}},"df":2,"docs":{"316":{"tf":2.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"197":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"=":{"<":{"a":{"c":{"df":0,"docs":{},"m":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},">":{"@":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"@":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"166":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"393":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.7320508075688772},"425":{"tf":1.0},"426":{"tf":1.4142135623730951},"427":{"tf":2.0},"429":{"tf":1.0}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"286":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":25,"docs":{"108":{"tf":1.4142135623730951},"113":{"tf":1.0},"151":{"tf":1.4142135623730951},"153":{"tf":1.0},"166":{"tf":2.0},"189":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":1.0},"291":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.4142135623730951},"399":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.7320508075688772},"426":{"tf":1.7320508075688772},"427":{"tf":1.0},"428":{"tf":2.23606797749979},"429":{"tf":2.23606797749979},"86":{"tf":1.4142135623730951},"88":{"tf":1.0},"95":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"m":{"df":5,"docs":{"330":{"tf":1.7320508075688772},"332":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":2.23606797749979}},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"&":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"(":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"360":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"r":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"161":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"161":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}}},"df":2,"docs":{"166":{"tf":1.0},"177":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"159":{"tf":1.0},"185":{"tf":1.4142135623730951},"357":{"tf":1.0}},"i":{"df":4,"docs":{"107":{"tf":1.0},"146":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":34,"docs":{"10":{"tf":1.0},"174":{"tf":1.0},"2":{"tf":1.0},"223":{"tf":1.7320508075688772},"224":{"tf":1.0},"243":{"tf":1.0},"286":{"tf":1.0},"3":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":2.23606797749979},"354":{"tf":1.0},"360":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"377":{"tf":1.0},"379":{"tf":1.0},"396":{"tf":1.0},"4":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.7320508075688772},"5":{"tf":1.4142135623730951},"67":{"tf":1.7320508075688772},"68":{"tf":1.0},"74":{"tf":1.0},"84":{"tf":1.0}}}}}}},"df":21,"docs":{"108":{"tf":1.0},"113":{"tf":1.0},"2":{"tf":1.4142135623730951},"214":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"292":{"tf":1.0},"316":{"tf":1.0},"322":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"373":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"397":{"tf":1.0},"45":{"tf":1.7320508075688772},"451":{"tf":1.4142135623730951},"46":{"tf":1.0},"5":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"291":{"tf":1.0},"84":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}},"é":{"df":2,"docs":{"359":{"tf":1.4142135623730951},"375":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"241":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"v":{"0":{".":{"1":{"9":{".":{"2":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{".":{"0":{"df":2,"docs":{"293":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"df":7,"docs":{"280":{"tf":1.0},"404":{"tf":1.7320508075688772},"405":{"tf":1.0},"449":{"tf":1.4142135623730951},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"9":{"tf":1.0}}},"2":{"0":{".":{"1":{"1":{".":{"0":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"175":{"tf":1.0}}},"6":{"df":1,"docs":{"214":{"tf":1.0}}},"a":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"82":{"tf":1.0}},"l":{"df":1,"docs":{"257":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":17,"docs":{"109":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.4142135623730951},"244":{"tf":1.7320508075688772},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":2.23606797749979},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"290":{"tf":2.8284271247461903},"382":{"tf":1.0},"442":{"tf":1.0},"83":{"tf":2.23606797749979},"95":{"tf":1.0}}}}},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"426":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":17,"docs":{"106":{"tf":1.4142135623730951},"112":{"tf":1.4142135623730951},"204":{"tf":1.4142135623730951},"205":{"tf":1.4142135623730951},"243":{"tf":1.0},"326":{"tf":1.0},"330":{"tf":1.4142135623730951},"373":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.4142135623730951},"393":{"tf":1.7320508075688772},"394":{"tf":1.0},"396":{"tf":1.0},"402":{"tf":2.23606797749979},"423":{"tf":1.0},"429":{"tf":1.0},"98":{"tf":1.0}},"é":{"df":2,"docs":{"372":{"tf":1.0},"403":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":2,"docs":{"241":{"tf":1.0},"255":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"355":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"207":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":2.0},"205":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"161":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"/":{".":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"5":{"4":{"3":{"2":{"df":1,"docs":{"300":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"w":{"df":0,"docs":{},"w":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"/":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"116":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"(":{"1":{"0":{"0":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"317":{"tf":1.4142135623730951}},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":30,"docs":{"150":{"tf":1.0},"152":{"tf":1.4142135623730951},"153":{"tf":2.0},"166":{"tf":1.0},"229":{"tf":1.7320508075688772},"230":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.4142135623730951},"244":{"tf":1.0},"249":{"tf":2.449489742783178},"258":{"tf":1.4142135623730951},"285":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.7320508075688772},"75":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"288":{"tf":1.0}}}}}},"|":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":6,"docs":{"100":{"tf":1.0},"121":{"tf":1.0},"166":{"tf":1.0},"259":{"tf":1.0},"88":{"tf":1.0},"97":{"tf":1.0}},"e":{"c":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"428":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"167":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"b":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":27,"docs":{"107":{"tf":1.0},"119":{"tf":1.0},"128":{"tf":1.4142135623730951},"134":{"tf":1.4142135623730951},"146":{"tf":1.0},"151":{"tf":1.0},"156":{"tf":1.0},"160":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"21":{"tf":1.4142135623730951},"211":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"330":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"347":{"tf":1.0},"356":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"6":{"tf":1.0},"86":{"tf":1.0},"98":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"375":{"tf":1.0}},"i":{"df":1,"docs":{"375":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"16":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":15,"docs":{"101":{"tf":1.0},"146":{"tf":1.4142135623730951},"15":{"tf":1.0},"160":{"tf":1.4142135623730951},"163":{"tf":1.0},"164":{"tf":1.0},"171":{"tf":1.0},"177":{"tf":1.0},"188":{"tf":1.0},"286":{"tf":2.0},"288":{"tf":2.8284271247461903},"291":{"tf":1.4142135623730951},"300":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"84":{"tf":1.0}}}}}},"t":{"df":1,"docs":{"18":{"tf":1.0}}}},"t":{"df":1,"docs":{"447":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}},"x":{"df":1,"docs":{"10":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}}},"i":{"a":{"df":55,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.4142135623730951},"113":{"tf":1.0},"120":{"tf":1.4142135623730951},"123":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"16":{"tf":1.0},"164":{"tf":1.4142135623730951},"189":{"tf":1.0},"193":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"296":{"tf":1.0},"312":{"tf":1.0},"323":{"tf":1.4142135623730951},"325":{"tf":1.0},"327":{"tf":1.0},"332":{"tf":1.0},"347":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":2.0},"375":{"tf":1.0},"376":{"tf":1.0},"378":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"82":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"e":{"df":8,"docs":{"14":{"tf":1.0},"173":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.4142135623730951},"244":{"tf":1.0},"290":{"tf":1.0},"318":{"tf":1.0},"327":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":5,"docs":{"10":{"tf":1.0},"393":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"86":{"tf":1.0}}}},"w":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"179":{"tf":1.0}}}}}}}}}}},"v":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"179":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"252":{"tf":1.0}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"419":{"tf":1.0}}}}}},"l":{"df":12,"docs":{"16":{"tf":1.0},"175":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"22":{"tf":1.0},"232":{"tf":1.0},"258":{"tf":1.0},"299":{"tf":1.0},"313":{"tf":1.0},"318":{"tf":1.0},"357":{"tf":1.0},"86":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"df":1,"docs":{"16":{"tf":1.0}},"e":{"df":2,"docs":{"153":{"tf":1.0},"23":{"tf":1.0}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}},"df":1,"docs":{"327":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"352":{"tf":1.0},"356":{"tf":1.4142135623730951}}},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"m":{"df":2,"docs":{"147":{"tf":1.0},"81":{"tf":1.0}}},"o":{"df":2,"docs":{"18":{"tf":1.0},"86":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":2,"docs":{"17":{"tf":1.0},"21":{"tf":1.0}},"r":{"df":85,"docs":{"12":{"tf":1.4142135623730951},"125":{"tf":1.0},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"150":{"tf":1.0},"155":{"tf":1.0},"17":{"tf":1.0},"174":{"tf":1.0},"189":{"tf":1.0},"210":{"tf":1.0},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"23":{"tf":1.0},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"293":{"tf":1.0},"30":{"tf":1.4142135623730951},"300":{"tf":1.0},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"313":{"tf":1.0},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"86":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}},"u":{"df":0,"docs":{},"m":{"df":4,"docs":{"82":{"tf":1.0},"84":{"tf":2.23606797749979},"85":{"tf":1.0},"88":{"tf":1.0}}},"t":{"df":1,"docs":{"214":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"r":{"df":21,"docs":{"104":{"tf":1.0},"160":{"tf":1.0},"198":{"tf":1.4142135623730951},"279":{"tf":1.0},"284":{"tf":1.4142135623730951},"285":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":2.0},"296":{"tf":1.0},"3":{"tf":1.0},"301":{"tf":1.0},"442":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":2.449489742783178},"88":{"tf":1.0},"95":{"tf":1.7320508075688772}},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\\\":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":22,"docs":{"159":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"277":{"tf":1.4142135623730951},"281":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.4142135623730951},"3":{"tf":2.0},"300":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"76":{"tf":1.0},"80":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.7320508075688772},"88":{"tf":1.0},"89":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"357":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":4,"docs":{"199":{"tf":1.0},"281":{"tf":1.0},"3":{"tf":1.0},"76":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"n":{"df":1,"docs":{"211":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":3,"docs":{"214":{"tf":1.0},"290":{"tf":1.0},"397":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":6,"docs":{"272":{"tf":1.7320508075688772},"273":{"tf":1.0},"281":{"tf":1.0},"436":{"tf":1.7320508075688772},"437":{"tf":1.0},"76":{"tf":1.0}}},"u":{"df":0,"docs":{},"e":{"df":33,"docs":{"10":{"tf":1.0},"124":{"tf":1.0},"16":{"tf":1.4142135623730951},"232":{"tf":1.4142135623730951},"276":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"281":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"412":{"tf":1.7320508075688772},"413":{"tf":1.7320508075688772},"414":{"tf":1.0},"415":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"381":{"tf":1.0}},"s":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"x":{"b":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"364":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":13,"docs":{"124":{"tf":1.4142135623730951},"160":{"tf":1.7320508075688772},"162":{"tf":1.4142135623730951},"171":{"tf":1.0},"177":{"tf":1.0},"18":{"tf":1.0},"288":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"448":{"tf":1.0},"83":{"tf":1.0}}},"df":10,"docs":{"146":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"330":{"tf":3.0},"331":{"tf":2.449489742783178},"332":{"tf":2.23606797749979},"333":{"tf":2.449489742783178},"414":{"tf":1.7320508075688772},"6":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"319":{"tf":1.0}}}},"r":{"df":23,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"118":{"tf":1.4142135623730951},"119":{"tf":1.0},"133":{"tf":2.0},"14":{"tf":1.0},"166":{"tf":1.4142135623730951},"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"188":{"tf":1.0},"206":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.0},"255":{"tf":1.7320508075688772},"285":{"tf":1.0},"287":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"393":{"tf":1.7320508075688772},"80":{"tf":1.0}}},"z":{"df":11,"docs":{"288":{"tf":1.7320508075688772},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.7320508075688772},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.4142135623730951}}}},"é":{"df":2,"docs":{"22":{"tf":1.0},"393":{"tf":1.0}}}}}}}}},"w":{"[":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"174":{"tf":1.0},"294":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.4142135623730951},"403":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"è":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"356":{"tf":1.0},"357":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"206":{"tf":1.0},"348":{"tf":3.7416573867739413},"352":{"tf":1.0}},"e":{"b":{"+":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"417":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":30,"docs":{"148":{"tf":1.0},"16":{"tf":1.0},"173":{"tf":1.0},"187":{"tf":1.0},"199":{"tf":1.0},"279":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.0},"293":{"tf":1.4142135623730951},"294":{"tf":1.0},"299":{"tf":1.0},"335":{"tf":1.7320508075688772},"336":{"tf":1.0},"370":{"tf":2.23606797749979},"375":{"tf":2.0},"383":{"tf":1.0},"392":{"tf":1.0},"413":{"tf":2.449489742783178},"417":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":3.4641016151377544},"426":{"tf":2.8284271247461903},"428":{"tf":3.7416573867739413},"429":{"tf":2.6457513110645907},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":3,"docs":{"279":{"tf":1.0},"341":{"tf":1.7320508075688772},"342":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"97":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"447":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"380":{"tf":1.0}}}}}}}}},"o":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"153":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"353":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"[":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":25,"docs":{"102":{"tf":1.4142135623730951},"146":{"tf":1.0},"148":{"tf":1.4142135623730951},"161":{"tf":1.0},"166":{"tf":1.0},"169":{"tf":2.23606797749979},"175":{"tf":1.0},"183":{"tf":1.4142135623730951},"189":{"tf":1.0},"194":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"281":{"tf":1.0},"304":{"tf":1.7320508075688772},"305":{"tf":1.0},"327":{"tf":1.0},"352":{"tf":1.4142135623730951},"354":{"tf":2.0},"357":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":1.0},"440":{"tf":1.7320508075688772},"441":{"tf":1.0},"450":{"tf":1.0},"96":{"tf":1.0}}}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":5,"docs":{"279":{"tf":1.0},"301":{"tf":1.0},"308":{"tf":1.7320508075688772},"309":{"tf":1.0},"5":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"148":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":10,"docs":{"148":{"tf":1.0},"151":{"tf":1.0},"161":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"312":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"389":{"tf":1.4142135623730951},"403":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":1,"docs":{"189":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"294":{"tf":1.0}}}}}}},"x":{"8":{"6":{"_":{"6":{"4":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"133":{"tf":1.4142135623730951},"166":{"tf":1.0},"180":{"tf":1.0},"202":{"tf":3.0},"206":{"tf":1.0},"214":{"tf":1.0},"279":{"tf":1.0},"349":{"tf":1.0},"356":{"tf":1.0},"394":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.4142135623730951}},"r":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"w":{"df":1,"docs":{"348":{"tf":1.0}}},"x":{"df":1,"docs":{"394":{"tf":1.0}},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}}},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"379":{"tf":1.0},"380":{"tf":1.0},"9":{"tf":1.0}}}}},"df":6,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"169":{"tf":1.0},"188":{"tf":1.0},"346":{"tf":1.0},"82":{"tf":1.0}}},"z":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":2,"docs":{"383":{"tf":1.0},"393":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"393":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":3,"docs":{"189":{"tf":1.0},"198":{"tf":1.0},"201":{"tf":1.7320508075688772}}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":6,"docs":{"324":{"tf":1.0},"352":{"tf":1.4142135623730951},"355":{"tf":1.0},"389":{"tf":1.4142135623730951},"400":{"tf":1.0},"418":{"tf":1.4142135623730951}}}}}}}},"title":{"root":{"0":{"2":{"df":3,"docs":{"25":{"tf":1.0},"302":{"tf":1.0},"90":{"tf":1.0}}},"3":{"df":3,"docs":{"27":{"tf":1.0},"304":{"tf":1.0},"92":{"tf":1.0}}},"4":{"df":1,"docs":{"29":{"tf":1.0}}},"7":{"4":{"df":3,"docs":{"264":{"tf":1.0},"383":{"tf":1.0},"391":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"102":{"tf":1.0}}},"1":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"0":{"df":1,"docs":{"166":{"tf":1.0}}},"1":{"df":1,"docs":{"167":{"tf":1.0}}},"a":{"df":1,"docs":{"105":{"tf":1.0}}},"b":{"df":1,"docs":{"106":{"tf":1.0}}},"c":{"df":2,"docs":{"107":{"tf":1.0},"122":{"tf":1.0}}},"d":{"df":1,"docs":{"108":{"tf":1.0}}},"df":13,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"146":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.0},"188":{"tf":1.0},"233":{"tf":1.0},"288":{"tf":1.0},"316":{"tf":1.0},"346":{"tf":1.0},"389":{"tf":1.0},"423":{"tf":1.0},"83":{"tf":1.0}}},"2":{".":{"1":{"df":2,"docs":{"171":{"tf":1.0},"392":{"tf":1.0}}},"2":{"df":2,"docs":{"172":{"tf":1.0},"393":{"tf":1.0}}},"3":{"df":2,"docs":{"173":{"tf":1.0},"394":{"tf":1.0}}},"4":{"df":1,"docs":{"174":{"tf":1.0}}},"5":{"df":1,"docs":{"175":{"tf":1.0}}},"df":0,"docs":{}},"0":{"2":{"2":{"df":1,"docs":{"103":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"df":3,"docs":{"107":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0}}},"df":13,"docs":{"106":{"tf":1.0},"109":{"tf":1.0},"147":{"tf":1.0},"170":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":1.0},"239":{"tf":1.0},"289":{"tf":1.0},"317":{"tf":1.0},"348":{"tf":1.0},"391":{"tf":1.0},"424":{"tf":1.0},"84":{"tf":1.0}},"f":{"a":{"df":5,"docs":{"13":{"tf":1.0},"18":{"tf":1.0},"217":{"tf":1.0},"35":{"tf":1.0},"432":{"tf":1.0}}},"df":0,"docs":{}}},"3":{".":{"1":{"df":3,"docs":{"177":{"tf":1.0},"191":{"tf":1.0},"396":{"tf":1.0}}},"2":{"df":3,"docs":{"178":{"tf":1.0},"192":{"tf":1.0},"397":{"tf":1.0}}},"3":{"df":2,"docs":{"179":{"tf":1.0},"193":{"tf":1.0}}},"4":{"df":2,"docs":{"180":{"tf":1.0},"194":{"tf":1.0}}},"5":{"df":2,"docs":{"181":{"tf":1.0},"195":{"tf":1.0}}},"6":{"df":1,"docs":{"196":{"tf":1.0}}},"7":{"df":1,"docs":{"197":{"tf":1.0}}},"8":{"df":1,"docs":{"198":{"tf":1.0}}},"9":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"79":{"tf":1.0}}},"a":{"df":1,"docs":{"111":{"tf":1.0}}},"b":{"df":1,"docs":{"112":{"tf":1.0}}},"c":{"df":1,"docs":{"113":{"tf":1.0}}},"df":12,"docs":{"110":{"tf":1.0},"148":{"tf":1.0},"176":{"tf":1.0},"19":{"tf":1.0},"190":{"tf":1.0},"244":{"tf":1.0},"290":{"tf":1.0},"318":{"tf":1.0},"349":{"tf":1.0},"395":{"tf":1.0},"425":{"tf":1.0},"85":{"tf":1.0}}},"4":{".":{"1":{"df":3,"docs":{"201":{"tf":1.0},"351":{"tf":1.0},"399":{"tf":1.0}}},"2":{"df":3,"docs":{"202":{"tf":1.0},"352":{"tf":1.0},"400":{"tf":1.0}}},"3":{"df":3,"docs":{"203":{"tf":1.0},"353":{"tf":1.0},"401":{"tf":1.0}}},"4":{"df":2,"docs":{"354":{"tf":1.0},"402":{"tf":1.0}}},"5":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":1,"docs":{"115":{"tf":1.0}}},"b":{"df":1,"docs":{"116":{"tf":1.0}}},"c":{"df":1,"docs":{"117":{"tf":1.0}}},"d":{"df":1,"docs":{"118":{"tf":1.0}}},"df":13,"docs":{"114":{"tf":1.0},"149":{"tf":1.0},"182":{"tf":1.0},"20":{"tf":1.0},"200":{"tf":1.0},"245":{"tf":1.0},"291":{"tf":1.0},"319":{"tf":1.0},"350":{"tf":1.0},"398":{"tf":1.0},"426":{"tf":1.0},"53":{"tf":1.0},"86":{"tf":1.0}},"e":{"df":1,"docs":{"119":{"tf":1.0}}}},"5":{"a":{"df":1,"docs":{"121":{"tf":1.0}}},"b":{"df":1,"docs":{"122":{"tf":1.0}}},"c":{"df":1,"docs":{"123":{"tf":1.0}}},"df":11,"docs":{"107":{"tf":1.0},"120":{"tf":1.0},"152":{"tf":1.0},"186":{"tf":1.0},"204":{"tf":1.0},"21":{"tf":1.0},"249":{"tf":1.0},"292":{"tf":1.0},"356":{"tf":1.0},"403":{"tf":1.0},"427":{"tf":1.0}}},"6":{"df":7,"docs":{"124":{"tf":1.0},"157":{"tf":1.0},"207":{"tf":1.0},"250":{"tf":1.0},"293":{"tf":1.0},"357":{"tf":1.0},"428":{"tf":1.0}}},"7":{"a":{"df":1,"docs":{"126":{"tf":1.0}}},"b":{"df":1,"docs":{"127":{"tf":1.0}}},"df":6,"docs":{"125":{"tf":1.0},"161":{"tf":1.0},"208":{"tf":1.0},"251":{"tf":1.0},"294":{"tf":1.0},"429":{"tf":1.0}}},"8":{".":{"1":{"df":1,"docs":{"210":{"tf":1.0}}},"2":{"df":1,"docs":{"211":{"tf":1.0}}},"3":{"df":1,"docs":{"212":{"tf":1.0}}},"4":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":1,"docs":{"129":{"tf":1.0}}},"b":{"df":1,"docs":{"130":{"tf":1.0}}},"c":{"df":1,"docs":{"131":{"tf":1.0}}},"df":4,"docs":{"128":{"tf":1.0},"162":{"tf":1.0},"209":{"tf":1.0},"256":{"tf":1.0}}},"9":{"df":3,"docs":{"132":{"tf":1.0},"165":{"tf":1.0},"214":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"197":{"tf":1.0},"198":{"tf":1.0},"363":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"192":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"37":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"427":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"è":{"d":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":3,"docs":{"13":{"tf":1.0},"173":{"tf":1.0},"18":{"tf":1.0}}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"332":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"223":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"251":{"tf":1.0},"86":{"tf":1.0}}}}}}},"df":1,"docs":{"332":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":14,"docs":{"121":{"tf":1.0},"129":{"tf":1.0},"13":{"tf":1.0},"202":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"315":{"tf":1.0},"318":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"363":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"421":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":4,"docs":{"264":{"tf":1.0},"383":{"tf":1.0},"388":{"tf":1.0},"391":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"196":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":9,"docs":{"179":{"tf":1.0},"192":{"tf":1.0},"316":{"tf":1.0},"343":{"tf":1.0},"384":{"tf":1.0},"404":{"tf":1.0},"408":{"tf":1.0},"449":{"tf":1.4142135623730951},"55":{"tf":1.0}}},"p":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"239":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"è":{"df":2,"docs":{"107":{"tf":1.0},"165":{"tf":1.0}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":6,"docs":{"148":{"tf":1.0},"169":{"tf":1.0},"268":{"tf":1.0},"325":{"tf":1.0},"369":{"tf":1.0},"380":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"292":{"tf":1.0},"400":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"304":{"tf":1.0},"440":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"u":{"df":2,"docs":{"152":{"tf":1.0},"160":{"tf":1.0}}}},"df":0,"docs":{}}}}},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"225":{"tf":1.0}}}}},"df":3,"docs":{"129":{"tf":1.0},"242":{"tf":1.0},"245":{"tf":1.0}},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"330":{"tf":1.0},"35":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"118":{"tf":1.0}}}},"s":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"x":{"df":2,"docs":{"17":{"tf":1.0},"402":{"tf":1.0}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"321":{"tf":1.0},"351":{"tf":1.0},"365":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":10,"docs":{"100":{"tf":1.0},"155":{"tf":1.0},"159":{"tf":1.0},"18":{"tf":1.0},"187":{"tf":1.0},"284":{"tf":1.0},"29":{"tf":1.0},"79":{"tf":1.0},"90":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"448":{"tf":1.0}}}}}},"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"206":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"356":{"tf":1.0},"419":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":5,"docs":{"260":{"tf":1.0},"291":{"tf":1.0},"339":{"tf":1.0},"346":{"tf":1.0},"386":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"156":{"tf":1.0}}}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"è":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"442":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"c":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"399":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":5,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"110":{"tf":1.0},"112":{"tf":1.0},"171":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"a":{"df":2,"docs":{"156":{"tf":1.0},"244":{"tf":1.0}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"304":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"395":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"n":{"df":1,"docs":{"418":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"1":{"tf":1.0},"161":{"tf":1.0},"451":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"115":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"3":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"350":{"tf":1.0}}}}}},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"205":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"186":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}},"i":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"447":{"tf":1.0},"57":{"tf":1.0}}}}}},"/":{"c":{"d":{"df":1,"docs":{"378":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"148":{"tf":1.0}}}},"df":18,"docs":{"145":{"tf":1.0},"165":{"tf":1.0},"168":{"tf":1.0},"170":{"tf":1.0},"173":{"tf":1.0},"183":{"tf":1.0},"210":{"tf":1.0},"221":{"tf":1.0},"272":{"tf":1.0},"29":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.0},"380":{"tf":1.0},"382":{"tf":1.0},"420":{"tf":1.0},"436":{"tf":1.0},"447":{"tf":1.4142135623730951}}},"l":{"df":5,"docs":{"13":{"tf":1.0},"179":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"426":{"tf":1.0}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"449":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":3,"docs":{"123":{"tf":1.0},"356":{"tf":1.0},"424":{"tf":1.4142135623730951}},"r":{"df":1,"docs":{"25":{"tf":1.0}}},"z":{"df":1,"docs":{"289":{"tf":1.0}}}}}},"é":{"df":1,"docs":{"33":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":3,"docs":{"100":{"tf":1.0},"25":{"tf":1.0},"398":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"155":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"27":{"tf":1.0},"65":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"320":{"tf":1.0},"324":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"420":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"3":{"tf":1.0},"451":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"284":{"tf":1.0},"294":{"tf":1.0},"43":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"389":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"284":{"tf":1.0},"292":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"155":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"237":{"tf":1.0},"245":{"tf":1.0},"319":{"tf":1.0}}}},"s":{"df":3,"docs":{"378":{"tf":1.0},"381":{"tf":1.0},"79":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"281":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":1,"docs":{"86":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"415":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":2,"docs":{"116":{"tf":1.0},"130":{"tf":1.0}},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"105":{"tf":1.0},"155":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":11,"docs":{"127":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"172":{"tf":1.0},"180":{"tf":1.0},"233":{"tf":1.0},"239":{"tf":1.0},"35":{"tf":1.0},"447":{"tf":1.0},"83":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"284":{"tf":1.0},"290":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"264":{"tf":1.0},"388":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"95":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":1,"docs":{"358":{"tf":1.0}},"t":{"df":2,"docs":{"302":{"tf":1.0},"308":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"277":{"tf":1.0},"372":{"tf":1.0},"408":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"183":{"tf":1.0},"184":{"tf":1.0},"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"df":1,"docs":{"362":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"396":{"tf":1.0}}}}}}}}},"û":{"df":0,"docs":{},"t":{"df":1,"docs":{"349":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"369":{"tf":1.0},"370":{"tf":1.0},"371":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"é":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"423":{"tf":1.0},"429":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"13":{"tf":1.0},"21":{"tf":1.0}},"r":{"df":5,"docs":{"179":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"304":{"tf":1.0},"37":{"tf":1.0}}},"z":{"df":4,"docs":{"294":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"292":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"205":{"tf":1.0}}}}}}},"y":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}},"ô":{"df":0,"docs":{},"t":{"df":3,"docs":{"200":{"tf":1.0},"355":{"tf":1.0},"67":{"tf":1.0}}}}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"210":{"tf":1.0},"272":{"tf":1.0},"381":{"tf":1.0},"420":{"tf":1.0},"436":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"438":{"tf":1.0}}}}}}},"n":{"df":6,"docs":{"20":{"tf":1.0},"202":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"4":{"tf":1.0},"428":{"tf":1.0}}}},"b":{"df":4,"docs":{"247":{"tf":1.0},"259":{"tf":1.0},"349":{"tf":1.0},"354":{"tf":1.0}}},"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":53,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"134":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"164":{"tf":1.0},"17":{"tf":1.0},"171":{"tf":1.0},"206":{"tf":1.0},"235":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"250":{"tf":1.0},"260":{"tf":1.4142135623730951},"270":{"tf":1.0},"274":{"tf":1.0},"291":{"tf":1.0},"298":{"tf":1.0},"308":{"tf":1.0},"314":{"tf":1.0},"320":{"tf":1.0},"326":{"tf":1.4142135623730951},"329":{"tf":1.0},"331":{"tf":1.0},"339":{"tf":1.4142135623730951},"341":{"tf":1.0},"346":{"tf":1.4142135623730951},"353":{"tf":1.0},"386":{"tf":1.4142135623730951},"389":{"tf":1.0},"391":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"415":{"tf":1.0},"419":{"tf":1.0},"422":{"tf":1.0},"427":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"434":{"tf":1.0},"442":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.0},"53":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"83":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"178":{"tf":1.0},"211":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"110":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"111":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"u":{"df":0,"docs":{},"i":{"df":3,"docs":{"158":{"tf":1.0},"163":{"tf":1.0},"451":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"232":{"tf":1.0}}}}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":1,"docs":{"250":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"295":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"145":{"tf":1.0},"151":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"232":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"198":{"tf":1.0}}}}}}},"n":{"df":1,"docs":{"128":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"109":{"tf":1.0},"444":{"tf":1.4142135623730951},"79":{"tf":1.4142135623730951},"84":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"2":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"128":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":5,"docs":{"260":{"tf":1.0},"291":{"tf":1.0},"339":{"tf":1.0},"346":{"tf":1.0},"386":{"tf":1.0}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"35":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"u":{"df":10,"docs":{"107":{"tf":1.0},"112":{"tf":1.0},"146":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.0},"165":{"tf":1.0},"25":{"tf":1.0},"348":{"tf":1.0},"432":{"tf":1.0},"57":{"tf":1.0}},"r":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"187":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"125":{"tf":1.0}}}}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":5,"docs":{"231":{"tf":1.0},"239":{"tf":1.0},"243":{"tf":1.0},"247":{"tf":1.0},"257":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"é":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"182":{"tf":1.0}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"250":{"tf":1.0},"438":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"201":{"tf":1.0}}}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"i":{"df":3,"docs":{"154":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"158":{"tf":1.0},"243":{"tf":1.0}}}}},"df":0,"docs":{}},"j":{"df":1,"docs":{"392":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"204":{"tf":1.0},"242":{"tf":1.0},"414":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"79":{"tf":1.0},"85":{"tf":1.0}}}}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"133":{"tf":1.0},"166":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"219":{"tf":1.0},"221":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"370":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"103":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"110":{"tf":1.0},"113":{"tf":1.0},"270":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"116":{"tf":1.0},"178":{"tf":1.0}}}}}}},"ô":{"df":0,"docs":{},"t":{"df":10,"docs":{"13":{"tf":1.0},"173":{"tf":1.0},"21":{"tf":1.0},"294":{"tf":1.0},"331":{"tf":1.0},"345":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0}}}}},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"122":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"256":{"tf":1.0},"276":{"tf":1.0}}}}}}}}}}}},"’":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"16":{"tf":1.0},"232":{"tf":1.0},"287":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":3,"docs":{"152":{"tf":1.0},"229":{"tf":1.0},"443":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"401":{"tf":1.0}}}}}}},"x":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"449":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"150":{"tf":1.0},"420":{"tf":1.0},"98":{"tf":1.0}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"252":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"350":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"n":{"df":4,"docs":{"175":{"tf":1.0},"255":{"tf":1.0},"423":{"tf":1.0},"49":{"tf":1.0}},"e":{"df":2,"docs":{"426":{"tf":1.0},"69":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"2":{"df":3,"docs":{"313":{"tf":1.0},"318":{"tf":1.0},"322":{"tf":1.0}}},"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":3,"docs":{"174":{"tf":1.0},"272":{"tf":1.0},"436":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"255":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"3":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"114":{"tf":1.0},"117":{"tf":1.0},"94":{"tf":1.0}}}}}}},"d":{"df":1,"docs":{"322":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"343":{"tf":1.0}}}}}}}},"df":10,"docs":{"170":{"tf":1.0},"176":{"tf":1.0},"278":{"tf":1.0},"362":{"tf":1.0},"390":{"tf":1.0},"392":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.0},"94":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"165":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.0},"426":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"370":{"tf":1.0}}}},"v":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"102":{"tf":1.0},"131":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":11,"docs":{"152":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"159":{"tf":1.0},"172":{"tf":1.0},"233":{"tf":1.0},"246":{"tf":1.0},"249":{"tf":1.0},"259":{"tf":1.0},"290":{"tf":1.0},"443":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"t":{"c":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"j":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":27,"docs":{"13":{"tf":1.0},"131":{"tf":1.0},"137":{"tf":1.0},"168":{"tf":1.0},"17":{"tf":1.0},"204":{"tf":1.0},"214":{"tf":1.0},"23":{"tf":1.0},"243":{"tf":1.0},"245":{"tf":1.0},"25":{"tf":1.0},"262":{"tf":1.0},"284":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.0},"308":{"tf":1.0},"333":{"tf":1.0},"378":{"tf":1.0},"382":{"tf":1.0},"384":{"tf":1.0},"39":{"tf":1.0},"448":{"tf":1.0},"45":{"tf":1.0},"59":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"154":{"tf":1.0},"155":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"311":{"tf":1.0}}}}},"df":1,"docs":{"129":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":6,"docs":{"10":{"tf":1.0},"266":{"tf":1.0},"281":{"tf":1.0},"410":{"tf":1.0},"63":{"tf":1.0},"76":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"159":{"tf":1.0}}}}},"df":0,"docs":{}}},"o":{"df":2,"docs":{"195":{"tf":1.0},"196":{"tf":1.0}},"s":{"df":1,"docs":{"120":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":3,"docs":{"345":{"tf":1.0},"381":{"tf":1.0},"47":{"tf":1.0}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"321":{"tf":1.0}}}}},"df":0,"docs":{}}}},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"125":{"tf":1.0},"187":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"259":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"m":{"df":1,"docs":{"249":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"393":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"107":{"tf":1.0}}}}}}},"f":{"df":1,"docs":{"43":{"tf":1.0}}},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"172":{"tf":1.0},"189":{"tf":1.0},"235":{"tf":1.0},"419":{"tf":1.0},"443":{"tf":1.0},"57":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"190":{"tf":1.0},"205":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}}},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"328":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"348":{"tf":1.0},"422":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"102":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}},"é":{"df":1,"docs":{"295":{"tf":1.0}}}}}}},"df":2,"docs":{"327":{"tf":1.0},"432":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"253":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0}}}}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"361":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"217":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":4,"docs":{"359":{"tf":1.0},"363":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"402":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}}}}}}}},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"389":{"tf":1.0},"390":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"331":{"tf":1.0},"401":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"t":{"df":7,"docs":{"120":{"tf":1.0},"123":{"tf":1.0},"356":{"tf":1.0},"373":{"tf":1.0},"406":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":27,"docs":{"1":{"tf":1.0},"110":{"tf":1.0},"139":{"tf":1.0},"155":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"172":{"tf":1.0},"180":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"20":{"tf":1.0},"209":{"tf":1.0},"284":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"416":{"tf":1.0},"442":{"tf":1.0},"447":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0},"79":{"tf":1.0},"96":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"124":{"tf":1.0},"201":{"tf":1.0},"268":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"135":{"tf":1.0},"251":{"tf":1.0},"256":{"tf":1.0},"306":{"tf":1.0},"31":{"tf":1.0}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"169":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"223":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"417":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"434":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":4,"docs":{"360":{"tf":1.0},"364":{"tf":1.0},"376":{"tf":1.0},"406":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"x":{"df":2,"docs":{"418":{"tf":1.0},"438":{"tf":1.0}}}},"t":{"df":0,"docs":{},"p":{"df":3,"docs":{"114":{"tf":1.0},"119":{"tf":1.0},"94":{"tf":1.0}}}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"244":{"tf":1.0},"248":{"tf":1.0},"259":{"tf":1.0},"420":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"353":{"tf":1.0}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"341":{"tf":1.0},"343":{"tf":1.0},"360":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"194":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"345":{"tf":1.0},"349":{"tf":1.0},"47":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"311":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"242":{"tf":1.0}}}}}},"df":1,"docs":{"104":{"tf":1.0}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"429":{"tf":1.0}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"177":{"tf":1.0},"188":{"tf":1.0},"79":{"tf":1.0},"90":{"tf":1.0}}},"n":{"c":{"df":1,"docs":{"225":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"384":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"168":{"tf":1.0}}}},"é":{"df":1,"docs":{"296":{"tf":1.0}}}}}}}},"p":{"df":1,"docs":{"101":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"326":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":2,"docs":{"27":{"tf":1.0},"45":{"tf":1.0}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":6,"docs":{"128":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"139":{"tf":1.0},"165":{"tf":1.0}}}}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"434":{"tf":1.0},"45":{"tf":1.0}}}}},"df":27,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"116":{"tf":1.0},"13":{"tf":1.0},"130":{"tf":1.0},"150":{"tf":1.0},"158":{"tf":1.0},"163":{"tf":1.0},"168":{"tf":1.0},"170":{"tf":1.0},"173":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"209":{"tf":1.0},"221":{"tf":1.0},"241":{"tf":1.0},"255":{"tf":1.0},"260":{"tf":1.0},"29":{"tf":1.0},"291":{"tf":1.0},"346":{"tf":1.0},"35":{"tf":1.0},"352":{"tf":1.0},"365":{"tf":1.0},"386":{"tf":1.0},"4":{"tf":1.0},"85":{"tf":1.0}},"n":{"c":{"df":1,"docs":{"150":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"310":{"tf":1.0},"322":{"tf":1.0}}},"z":{"df":1,"docs":{"293":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"298":{"tf":1.0}}}}}},"df":1,"docs":{"150":{"tf":1.0}},"e":{"df":49,"docs":{"10":{"tf":1.0},"100":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"121":{"tf":1.0},"129":{"tf":1.0},"145":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.0},"176":{"tf":1.0},"181":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"223":{"tf":1.0},"249":{"tf":1.0},"251":{"tf":1.0},"256":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"292":{"tf":1.0},"310":{"tf":1.0},"322":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"39":{"tf":1.4142135623730951},"419":{"tf":1.0},"45":{"tf":1.4142135623730951},"451":{"tf":1.0},"49":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"96":{"tf":1.0}},"t":{"df":0,"docs":{},"’":{"df":3,"docs":{"114":{"tf":1.0},"117":{"tf":1.0},"94":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"350":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}},"t":{"df":4,"docs":{"198":{"tf":1.0},"200":{"tf":1.4142135623730951},"214":{"tf":1.0},"215":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"392":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"94":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"181":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"238":{"tf":1.0},"243":{"tf":1.0},"329":{"tf":1.0}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"100":{"tf":1.0},"156":{"tf":1.0},"321":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":1.0}}}}},"t":{"df":1,"docs":{"202":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":2,"docs":{"185":{"tf":1.0},"85":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"191":{"tf":1.0},"195":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"421":{"tf":1.0}}}},"o":{"df":0,"docs":{},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"109":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"’":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"293":{"tf":1.0},"414":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"412":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":2,"docs":{"290":{"tf":1.0},"326":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"187":{"tf":1.0},"217":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"298":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"147":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"347":{"tf":1.0}}}},"df":0,"docs":{}}}}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"100":{"tf":1.0},"150":{"tf":1.0},"163":{"tf":1.0},"94":{"tf":1.0}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":4,"docs":{"276":{"tf":1.0},"451":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.0}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"394":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"208":{"tf":1.0},"396":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":3,"docs":{"365":{"tf":1.0},"403":{"tf":1.0},"43":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":7,"docs":{"117":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"139":{"tf":1.0},"170":{"tf":1.0},"176":{"tf":1.0},"390":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"339":{"tf":1.0},"450":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"127":{"tf":1.0}}}},"df":1,"docs":{"154":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"79":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":4,"docs":{"128":{"tf":1.0},"132":{"tf":1.0},"165":{"tf":1.0},"94":{"tf":1.0}}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":6,"docs":{"174":{"tf":1.0},"272":{"tf":1.4142135623730951},"378":{"tf":1.0},"379":{"tf":1.0},"417":{"tf":1.0},"436":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"165":{"tf":1.0}},"i":{"df":4,"docs":{"105":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0}}}}},"è":{"df":0,"docs":{},"l":{"df":4,"docs":{"270":{"tf":1.0},"430":{"tf":1.0},"53":{"tf":1.0},"65":{"tf":1.0}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"207":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"337":{"tf":1.0},"416":{"tf":1.0}}}}}}}},"n":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"333":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":2,"docs":{"333":{"tf":1.0},"428":{"tf":1.0}},"u":{"df":1,"docs":{"4":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":8,"docs":{"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"120":{"tf":1.0},"130":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"238":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"209":{"tf":1.0}}},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"213":{"tf":1.0},"297":{"tf":1.0},"377":{"tf":1.0},"61":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":5,"docs":{"106":{"tf":1.0},"128":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"334":{"tf":1.0}}}},"df":0,"docs":{}}}}},"é":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"o":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"143":{"tf":1.0},"244":{"tf":1.0},"248":{"tf":1.0},"254":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"14":{"tf":1.0},"285":{"tf":1.0},"80":{"tf":1.0}}}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"199":{"tf":1.0},"389":{"tf":1.0},"392":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"150":{"tf":1.0}},"n":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"360":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"356":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"112":{"tf":1.0},"296":{"tf":1.0},"381":{"tf":1.0}}}}}}}}}},"r":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"98":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":2,"docs":{"174":{"tf":1.0},"19":{"tf":1.0}},"t":{"df":1,"docs":{"356":{"tf":1.0}}},"v":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"p":{"a":{"df":10,"docs":{"13":{"tf":1.0},"156":{"tf":1.0},"199":{"tf":1.0},"23":{"tf":1.0},"264":{"tf":1.0},"284":{"tf":1.0},"300":{"tf":1.0},"383":{"tf":1.0},"391":{"tf":1.0},"88":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"223":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"è":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"17":{"tf":1.0},"231":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}}}}},"df":8,"docs":{"158":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"243":{"tf":1.0},"349":{"tf":1.0},"369":{"tf":1.0},"393":{"tf":1.0},"395":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"365":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"440":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"364":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"39":{"tf":1.0},"427":{"tf":1.0},"430":{"tf":1.0},"53":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"347":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"190":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":12,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"107":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"114":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"128":{"tf":1.0},"132":{"tf":1.0}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"164":{"tf":1.0},"175":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"350":{"tf":1.0}}}},"è":{"df":0,"docs":{},"g":{"df":1,"docs":{"249":{"tf":1.0}}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"170":{"tf":1.0},"176":{"tf":1.0},"390":{"tf":1.0},"392":{"tf":1.0}}}},"df":0,"docs":{},"y":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"318":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"u":{"df":2,"docs":{"107":{"tf":1.0},"421":{"tf":1.0}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"354":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"106":{"tf":1.0},"107":{"tf":1.0},"134":{"tf":1.0},"262":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"162":{"tf":1.0},"406":{"tf":1.0}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"197":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"109":{"tf":1.0},"212":{"tf":1.0},"291":{"tf":1.0}}}}}}}}}},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"251":{"tf":1.0},"256":{"tf":1.0},"279":{"tf":1.0},"354":{"tf":1.0},"421":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":4,"docs":{"10":{"tf":1.0},"281":{"tf":1.0},"347":{"tf":1.0},"76":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"25":{"tf":1.0}}},"z":{"df":2,"docs":{"284":{"tf":1.0},"294":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"174":{"tf":1.0},"272":{"tf":1.0},"436":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"135":{"tf":1.0},"306":{"tf":1.0},"31":{"tf":1.0}}}}}}},"df":10,"docs":{"149":{"tf":1.0},"15":{"tf":1.0},"171":{"tf":1.0},"286":{"tf":1.0},"288":{"tf":1.0},"308":{"tf":1.0},"323":{"tf":1.0},"403":{"tf":1.0},"81":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"13":{"tf":1.4142135623730951},"21":{"tf":1.0},"284":{"tf":1.4142135623730951},"294":{"tf":1.0},"86":{"tf":1.0},"92":{"tf":1.0}}}},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"302":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":5,"docs":{"189":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"249":{"tf":1.0},"415":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"357":{"tf":1.0}}}}}}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":2,"docs":{"183":{"tf":1.0},"184":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"24":{"tf":1.0},"301":{"tf":1.0},"89":{"tf":1.0}}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"94":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"20":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"352":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"158":{"tf":1.0},"289":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"i":{"df":1,"docs":{"445":{"tf":1.4142135623730951}}}}},"é":{"c":{"df":0,"docs":{},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"245":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"103":{"tf":1.0},"111":{"tf":1.0}}},"z":{"df":1,"docs":{"291":{"tf":1.0}}}}}},"df":0,"docs":{}}},"ê":{"df":0,"docs":{},"t":{"df":1,"docs":{"128":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":3,"docs":{"27":{"tf":1.0},"41":{"tf":1.0},"69":{"tf":1.0}}}},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"321":{"tf":1.0},"425":{"tf":1.4142135623730951}}}}}},"q":{"a":{"df":2,"docs":{"365":{"tf":1.0},"388":{"tf":1.0}}},"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"128":{"tf":1.0},"147":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"i":{"df":2,"docs":{"161":{"tf":1.0},"2":{"tf":1.0}},"p":{"df":2,"docs":{"27":{"tf":1.0},"39":{"tf":1.0}}}},"’":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"158":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"127":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"200":{"tf":1.0},"215":{"tf":1.0}}}}},"b":{"a":{"c":{"df":1,"docs":{"430":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"406":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"é":{"df":1,"docs":{"357":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"245":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"131":{"tf":1.0}}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"203":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"118":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"419":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"331":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"q":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"198":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"200":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"27":{"tf":1.0},"41":{"tf":1.0},"69":{"tf":1.0}}}}},"i":{"df":10,"docs":{"149":{"tf":1.0},"15":{"tf":1.0},"171":{"tf":1.0},"200":{"tf":1.0},"286":{"tf":1.0},"288":{"tf":1.0},"323":{"tf":1.0},"395":{"tf":1.0},"81":{"tf":1.0},"99":{"tf":1.0}}},"ê":{"df":0,"docs":{},"t":{"df":1,"docs":{"422":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"371":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"137":{"tf":1.0},"448":{"tf":1.0}}}}},"df":3,"docs":{"316":{"tf":1.0},"404":{"tf":1.0},"55":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":1,"docs":{"161":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"445":{"tf":1.4142135623730951}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"335":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"145":{"tf":1.0},"151":{"tf":1.0},"154":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"312":{"tf":1.0},"316":{"tf":1.0},"392":{"tf":1.0}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"358":{"tf":1.0},"408":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"361":{"tf":1.0},"388":{"tf":1.0},"391":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0}}}}}},"é":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"134":{"tf":1.0},"22":{"tf":1.0},"299":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":2,"docs":{"186":{"tf":1.0},"208":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":7,"docs":{"227":{"tf":1.0},"235":{"tf":1.0},"280":{"tf":1.0},"367":{"tf":1.0},"51":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}}},"g":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":11,"docs":{"243":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"215":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"314":{"tf":1.0},"429":{"tf":1.0},"83":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"97":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"427":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"ô":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"146":{"tf":1.0},"346":{"tf":1.0},"53":{"tf":1.0}}}}}},"s":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"129":{"tf":1.0},"350":{"tf":1.0}}},"u":{"df":0,"docs":{},"f":{"df":1,"docs":{"381":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"137":{"tf":1.0},"274":{"tf":1.0},"448":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"184":{"tf":1.0},"49":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"a":{"df":5,"docs":{"241":{"tf":1.0},"260":{"tf":1.0},"348":{"tf":1.0},"386":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"146":{"tf":1.0},"150":{"tf":1.0},"156":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"c":{"df":1,"docs":{"394":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"382":{"tf":1.0}}}}}},"df":2,"docs":{"161":{"tf":1.0},"33":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"171":{"tf":1.0},"355":{"tf":1.0}}}}},"i":{"c":{"df":6,"docs":{"262":{"tf":1.0},"337":{"tf":1.0},"359":{"tf":1.0},"363":{"tf":1.0},"384":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"319":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"162":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"102":{"tf":1.0},"112":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"i":{"df":7,"docs":{"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"141":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"160":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"100":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"209":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"43":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"355":{"tf":1.0}}},"h":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":4,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"122":{"tf":1.0}}},"df":10,"docs":{"120":{"tf":1.0},"13":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"219":{"tf":1.0},"33":{"tf":1.0},"374":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0}}},"r":{"df":1,"docs":{"418":{"tf":1.0}}}},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"209":{"tf":1.0},"444":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"233":{"tf":1.0},"238":{"tf":1.0},"246":{"tf":1.0},"258":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":2,"docs":{"274":{"tf":1.0},"43":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"120":{"tf":1.0},"121":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"236":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}},"é":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.0}}}},"i":{"df":1,"docs":{"175":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"295":{"tf":1.0},"390":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"353":{"tf":1.0}}}}}}},"r":{"df":12,"docs":{"103":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"161":{"tf":1.0},"173":{"tf":1.0},"198":{"tf":1.0},"217":{"tf":1.0},"419":{"tf":1.0},"65":{"tf":1.0},"94":{"tf":1.0}}}},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"177":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"d":{"df":2,"docs":{"446":{"tf":1.4142135623730951},"90":{"tf":1.0}}},"df":0,"docs":{}}},"è":{"df":0,"docs":{},"m":{"df":6,"docs":{"103":{"tf":1.0},"107":{"tf":1.0},"122":{"tf":1.0},"232":{"tf":1.0},"288":{"tf":1.0},"419":{"tf":1.0}}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"167":{"tf":1.0},"17":{"tf":1.0},"383":{"tf":1.0},"391":{"tf":1.0},"393":{"tf":1.0},"67":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"416":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"’":{"a":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"239":{"tf":1.0},"241":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"153":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":2,"docs":{"13":{"tf":1.0},"19":{"tf":1.0}},"p":{"df":0,"docs":{},"e":{"df":19,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"301":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0}}}},"r":{"d":{"df":1,"docs":{"107":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"442":{"tf":1.0},"451":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":19,"docs":{"119":{"tf":1.0},"123":{"tf":1.0},"164":{"tf":1.0},"206":{"tf":1.0},"310":{"tf":1.0},"312":{"tf":1.0},"313":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"320":{"tf":1.0},"322":{"tf":1.0},"326":{"tf":1.0},"329":{"tf":1.0},"334":{"tf":1.0},"395":{"tf":1.0},"397":{"tf":1.0}}}}},"o":{"d":{"df":0,"docs":{},"o":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"17":{"tf":1.0}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}},"n":{"df":3,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"u":{"df":1,"docs":{"381":{"tf":1.0}},"t":{"df":1,"docs":{"217":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"168":{"tf":1.0},"178":{"tf":1.0},"211":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"176":{"tf":1.0}}}}}},"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"96":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":6,"docs":{"11":{"tf":1.0},"278":{"tf":1.0},"282":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0}}}}}}}}},"â":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"333":{"tf":1.0},"438":{"tf":1.0}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"132":{"tf":1.0}}}}}}}}}},"n":{"df":29,"docs":{"102":{"tf":1.0},"128":{"tf":1.0},"159":{"tf":1.0},"173":{"tf":1.0},"179":{"tf":1.0},"18":{"tf":1.0},"225":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"294":{"tf":1.0},"304":{"tf":1.0},"321":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"363":{"tf":1.4142135623730951},"365":{"tf":1.0},"37":{"tf":1.0},"41":{"tf":1.0},"428":{"tf":1.0},"47":{"tf":1.0},"94":{"tf":1.0}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"246":{"tf":1.0},"247":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"310":{"tf":1.0},"312":{"tf":1.0}}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"351":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"157":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"185":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"223":{"tf":1.0},"429":{"tf":1.0},"5":{"tf":1.0},"67":{"tf":1.0}}}}}}},"df":2,"docs":{"45":{"tf":1.0},"451":{"tf":1.0}},"é":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}}},"v":{"1":{"df":2,"docs":{"404":{"tf":1.0},"55":{"tf":1.0}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"243":{"tf":1.0},"255":{"tf":1.0}}}}},"i":{"d":{"df":5,"docs":{"106":{"tf":1.0},"112":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"402":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"152":{"tf":1.0},"153":{"tf":1.0},"229":{"tf":1.0},"238":{"tf":1.0},"249":{"tf":1.0},"382":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"128":{"tf":1.0},"356":{"tf":1.0}}}},"i":{"a":{"df":4,"docs":{"110":{"tf":1.0},"120":{"tf":1.0},"164":{"tf":1.0},"364":{"tf":1.0}}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"21":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"69":{"tf":1.0}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":3,"docs":{"198":{"tf":1.0},"284":{"tf":1.0},"294":{"tf":1.0}}}}},"s":{"df":2,"docs":{"272":{"tf":1.0},"436":{"tf":1.0}}},"u":{"df":0,"docs":{},"e":{"df":6,"docs":{"16":{"tf":1.0},"232":{"tf":1.0},"287":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"124":{"tf":1.0},"162":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"118":{"tf":1.0},"255":{"tf":1.0}}},"z":{"df":1,"docs":{"288":{"tf":1.0}}}}}}}}}},"w":{"df":0,"docs":{},"e":{"b":{"df":4,"docs":{"335":{"tf":1.0},"375":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"341":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"304":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"440":{"tf":1.0}}}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"308":{"tf":1.0}}}}}}}}}},"z":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"201":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"418":{"tf":1.0}}}}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"OR","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}}')); | |
| 1 | < \ No newline at end of file |
A
book/template/docker/docker-compose.minimal.yml
+101
-0
@@ -0,0 +1,101 @@
| 1 | +# ============================================================================= | |
| 2 | +# Gitrust — Docker Compose minimal (dev local / évaluation) | |
| 3 | +# ============================================================================= | |
| 4 | +# Usage : | |
| 5 | +# cp template/env/dev-local.env .env | |
| 6 | +# # Editer .env : JWT_SECRET (openssl rand -hex 32), ADMIN_PASSWORD | |
| 7 | +# docker compose up -d | |
| 8 | +# docker compose logs -f gitrust | |
| 9 | +# | |
| 10 | +# Ce fichier démarre uniquement les services indispensables : | |
| 11 | +# - gitrust : application principale (HTTP :4000, SSH :2222) | |
| 12 | +# - postgres : base de données PostgreSQL 15 | |
| 13 | +# | |
| 14 | +# Pour une stack production (Redis sessions, SMTP local, CI runner) : | |
| 15 | +# voir template/docker/docker-compose.production.yml | |
| 16 | +# ============================================================================= | |
| 17 | + | |
| 18 | +services: | |
| 19 | + | |
| 20 | + # --------------------------------------------------------------------------- | |
| 21 | + # gitrust — application principale | |
| 22 | + # --------------------------------------------------------------------------- | |
| 23 | + gitrust: | |
| 24 | + # Remplacer par l'image officielle publiée sur le registry du projet. | |
| 25 | + # Format attendu : ghcr.io/<org>/gitrust:<tag> | |
| 26 | + # Exemple : ghcr.io/gitrust/gitrust:latest | |
| 27 | + image: ghcr.io/gitrust/gitrust:latest # <AJUSTER_REGISTRY_ET_TAG> | |
| 28 | + | |
| 29 | + depends_on: | |
| 30 | + postgres: | |
| 31 | + condition: service_healthy | |
| 32 | + | |
| 33 | + ports: | |
| 34 | + # HTTP — interface web et API REST | |
| 35 | + - "4000:4000" | |
| 36 | + # SSH — git clone/push via SSH | |
| 37 | + - "2222:2222" | |
| 38 | + | |
| 39 | + volumes: | |
| 40 | + # Bare repos git (persistés entre redémarrages) | |
| 41 | + - gitrust_repos:/opt/gitrust/data/repos | |
| 42 | + # Clé hôte SSH (générée au premier démarrage, doit survivre aux redémarrages) | |
| 43 | + - gitrust_keys:/opt/gitrust/data | |
| 44 | + | |
| 45 | + env_file: | |
| 46 | + # Le .env doit être dans le même dossier que ce fichier (ou à la racine du projet). | |
| 47 | + # Variables critiques à renseigner avant le premier démarrage : | |
| 48 | + # DATABASE_URL, JWT_SECRET, ADMIN_PASSWORD | |
| 49 | + - ./.env | |
| 50 | + | |
| 51 | + restart: unless-stopped | |
| 52 | + | |
| 53 | + healthcheck: | |
| 54 | + test: ["CMD", "curl", "-f", "http://localhost:4000/api/v1/auth/me"] | |
| 55 | + interval: 30s | |
| 56 | + timeout: 10s | |
| 57 | + retries: 5 | |
| 58 | + start_period: 20s | |
| 59 | + | |
| 60 | + # --------------------------------------------------------------------------- | |
| 61 | + # postgres — base de données | |
| 62 | + # --------------------------------------------------------------------------- | |
| 63 | + postgres: | |
| 64 | + image: postgres:15-alpine | |
| 65 | + | |
| 66 | + environment: | |
| 67 | + # Ces valeurs doivent correspondre à DATABASE_URL dans .env. | |
| 68 | + # Format : postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} | |
| 69 | + POSTGRES_USER: gitrust | |
| 70 | + POSTGRES_PASSWORD: gitrust # <CHANGER_EN_PRODUCTION> | |
| 71 | + POSTGRES_DB: gitrust_dev | |
| 72 | + | |
| 73 | + volumes: | |
| 74 | + - postgres_data:/var/lib/postgresql/data | |
| 75 | + | |
| 76 | + # Ne pas exposer PostgreSQL sur le réseau hôte en production. | |
| 77 | + # Décommenter uniquement pour debug local (accès psql depuis l'hôte) : | |
| 78 | + # ports: | |
| 79 | + # - "127.0.0.1:5432:5432" | |
| 80 | + | |
| 81 | + restart: unless-stopped | |
| 82 | + | |
| 83 | + healthcheck: | |
| 84 | + test: ["CMD-SHELL", "pg_isready -U gitrust -d gitrust_dev"] | |
| 85 | + interval: 10s | |
| 86 | + timeout: 5s | |
| 87 | + retries: 5 | |
| 88 | + | |
| 89 | +# ----------------------------------------------------------------------------- | |
| 90 | +# Volumes nommés — persistés sur le système hôte | |
| 91 | +# ----------------------------------------------------------------------------- | |
| 92 | +volumes: | |
| 93 | + # Bare repos git : contient tous les dépôts hébergés | |
| 94 | + gitrust_repos: | |
| 95 | + | |
| 96 | + # Clé hôte SSH ed25519 — NE PAS SUPPRIMER après le premier démarrage. | |
| 97 | + # La supprimer invalide les known_hosts de tous les utilisateurs. | |
| 98 | + gitrust_keys: | |
| 99 | + | |
| 100 | + # Données PostgreSQL | |
| 101 | + postgres_data: |
A
book/template/env/dev-local.env
+173
-0
@@ -0,0 +1,173 @@
| 1 | +# ============================================================================= | |
| 2 | +# Gitrust — Configuration de developpement local | |
| 3 | +# ============================================================================= | |
| 4 | +# Usage : | |
| 5 | +# cp template/env/dev-local.env .env | |
| 6 | +# $EDITOR .env # ajuster DATABASE_URL, JWT_SECRET, ADMIN_PASSWORD | |
| 7 | +# docker compose up -d # demarre postgres puis gitrust | |
| 8 | +# | |
| 9 | +# Ce fichier cible un poste de dev local avec Docker Compose. | |
| 10 | +# NE PAS utiliser tel quel en production — voir template/env/production-mono-machine.env | |
| 11 | +# ============================================================================= | |
| 12 | + | |
| 13 | + | |
| 14 | +# ============================================================================= | |
| 15 | +# 1. BASE DE DONNEES | |
| 16 | +# ============================================================================= | |
| 17 | +# Valeurs par defaut compatibles avec docker-compose.minimal.yml (service postgres). | |
| 18 | +# Le mot de passe "gitrust" est acceptable en dev local uniquement. | |
| 19 | +DATABASE_URL=postgres://gitrust:gitrust@localhost:5432/gitrust_dev | |
| 20 | + | |
| 21 | + | |
| 22 | +# ============================================================================= | |
| 23 | +# 2. SERVEUR HTTP | |
| 24 | +# ============================================================================= | |
| 25 | +# Accessible depuis localhost et le LAN local (pratique pour tester sur mobile). | |
| 26 | +SERVER_HOST=0.0.0.0 | |
| 27 | +SERVER_PORT=4000 | |
| 28 | + | |
| 29 | + | |
| 30 | +# ============================================================================= | |
| 31 | +# 3. LOGGING | |
| 32 | +# ============================================================================= | |
| 33 | +# Mode debug : toutes les requetes, migrations, sessions affichees. | |
| 34 | +# Syntaxe avancee : "info,gitrust_core=debug,sea_orm=warn" | |
| 35 | +RUST_LOG=debug | |
| 36 | + | |
| 37 | + | |
| 38 | +# ============================================================================= | |
| 39 | +# 4. SERVEUR SSH GIT | |
| 40 | +# ============================================================================= | |
| 41 | +# Cle hote generee automatiquement au premier demarrage si absente. | |
| 42 | +# En dev : chemin relatif OK. En prod : chemin absolu obligatoire. | |
| 43 | +# Permissions requises : 600, proprietaire = user qui lance gitrust. | |
| 44 | +SSH_HOST_KEY_PATH=./data/ssh_host_ed25519_key | |
| 45 | + | |
| 46 | +# Port SSH non-privilegie — pas de conflit avec sshd systeme (port 22). | |
| 47 | +SSH_PORT=2222 | |
| 48 | +SSH_LISTEN_ADDR=0.0.0.0 | |
| 49 | + | |
| 50 | +# Affiché dans l'UI pour les instructions "Clone via SSH". | |
| 51 | +SSH_PUBLIC_HOST=localhost | |
| 52 | + | |
| 53 | + | |
| 54 | +# ============================================================================= | |
| 55 | +# 5. JWT & AUTHENTIFICATION | |
| 56 | +# ============================================================================= | |
| 57 | +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| 58 | +# JWT_SECRET DOIT etre regenere avant tout usage reel. | |
| 59 | +# Commande : openssl rand -hex 32 | |
| 60 | +# Les valeurs generiques ("change-me", "my-secret-key", etc.) sont REJETEES | |
| 61 | +# au demarrage par AuthConfig::from_env(). | |
| 62 | +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| 63 | +JWT_SECRET=<REMPLACER_openssl_rand_-hex_32> | |
| 64 | + | |
| 65 | +JWT_EXPIRATION_MINUTES=15 | |
| 66 | +JWT_ISSUER=gitrust-dev | |
| 67 | +REFRESH_TOKEN_EXPIRATION_DAYS=7 | |
| 68 | +REMEMBER_ME_EXPIRATION_DAYS=30 | |
| 69 | + | |
| 70 | + | |
| 71 | +# ============================================================================= | |
| 72 | +# 6. SESSIONS | |
| 73 | +# ============================================================================= | |
| 74 | +SESSION_TIMEOUT_MINUTES=30 | |
| 75 | +# seaorm : persiste en base PostgreSQL — recommande meme en dev. | |
| 76 | +# memory : volatil, perdu au redemarrage (dev ultra-rapide uniquement). | |
| 77 | +SESSION_BACKEND=seaorm | |
| 78 | + | |
| 79 | + | |
| 80 | +# ============================================================================= | |
| 81 | +# 7. RATE LIMITING — assoupli pour les tests | |
| 82 | +# ============================================================================= | |
| 83 | +# Valeurs larges pour ne pas bloquer les tests intensifs en dev. | |
| 84 | +# voir .env.example ligne 134 pour les valeurs de production recommandees. | |
| 85 | +RATE_LIMIT_LOGIN_PER_MINUTE=60 | |
| 86 | +RATE_LIMIT_REFRESH_PER_MINUTE=120 | |
| 87 | +RATE_LIMIT_GENERAL_PER_MINUTE=1000 | |
| 88 | + | |
| 89 | + | |
| 90 | +# ============================================================================= | |
| 91 | +# 8. COOKIES & DEBUG | |
| 92 | +# ============================================================================= | |
| 93 | +# APP_DEBUG=true desactive les cookies Secure pour HTTP local. | |
| 94 | +# Ne jamais mettre true en production. | |
| 95 | +APP_DEBUG=true | |
| 96 | +COOKIE_SECURE=false | |
| 97 | +COOKIE_SAME_SITE=Lax | |
| 98 | + | |
| 99 | + | |
| 100 | +# ============================================================================= | |
| 101 | +# 9. ADMIN INITIAL | |
| 102 | +# ============================================================================= | |
| 103 | +# Cree l'utilisateur admin au premier demarrage si la table users est vide. | |
| 104 | +ADMIN_USERNAME=admin | |
| 105 | +ADMIN_EMAIL=admin@localhost.dev | |
| 106 | +# Remplacer par un mot de passe quelconque en dev (min 8 chars). | |
| 107 | +ADMIN_PASSWORD=<REMPLACER_MOT_DE_PASSE_DEV> | |
| 108 | + | |
| 109 | + | |
| 110 | +# ============================================================================= | |
| 111 | +# 10. EMAIL SMTP — desactive en dev | |
| 112 | +# ============================================================================= | |
| 113 | +# SMTP non configure = gitrust demarre, mais les emails ne partent pas. | |
| 114 | +# Pour tester les emails en local, utiliser Mailpit (docker run -p 1025:1025 -p 8025:8025 axllent/mailpit). | |
| 115 | +# Puis decommenter les lignes ci-dessous : | |
| 116 | +# SMTP_HOST=localhost | |
| 117 | +# SMTP_PORT=1025 | |
| 118 | +# SMTP_USER=dev | |
| 119 | +# SMTP_PASSWORD=dev | |
| 120 | +# SMTP_FROM=noreply@localhost.dev | |
| 121 | +# SMTP_FROM_NAME=Gitrust Dev | |
| 122 | +# SMTP_USE_TLS=false | |
| 123 | +# SMTP_USE_STARTTLS=false | |
| 124 | +# SMTP_ACCEPT_INVALID_CERTS=true | |
| 125 | +# EMAIL_BASE_URL=http://localhost:4000 | |
| 126 | +EMAIL_VALIDATION_REQUIRED=false | |
| 127 | + | |
| 128 | + | |
| 129 | +# ============================================================================= | |
| 130 | +# 11. INSCRIPTION | |
| 131 | +# ============================================================================= | |
| 132 | +# Ouvert en dev pour faciliter les tests multi-utilisateurs. | |
| 133 | +ALLOW_REGISTRATION=true | |
| 134 | + | |
| 135 | + | |
| 136 | +# ============================================================================= | |
| 137 | +# 12. APPLICATION | |
| 138 | +# ============================================================================= | |
| 139 | +APP_NAME="Gitrust Dev" | |
| 140 | +DEFAULT_LOCALE=fr | |
| 141 | + | |
| 142 | + | |
| 143 | +# ============================================================================= | |
| 144 | +# 15. DEPOTS GIT | |
| 145 | +# ============================================================================= | |
| 146 | +# Chemin relatif acceptable en dev (binaire lance depuis la racine du projet). | |
| 147 | +# En prod : chemin absolu obligatoire (/opt/gitrust/data/repos). | |
| 148 | +GIT_REPOS_BASE_PATH=./data/repos | |
| 149 | + | |
| 150 | + | |
| 151 | +# ============================================================================= | |
| 152 | +# 18. CI/CD DAGGER — desactive en dev par defaut | |
| 153 | +# ============================================================================= | |
| 154 | +# Mettre CI_ENABLED=true uniquement si dagger est installe et teste localement. | |
| 155 | +CI_ENABLED=false | |
| 156 | +CI_MAX_CONCURRENT=2 | |
| 157 | +CI_DEFAULT_TIMEOUT=3600 | |
| 158 | +CI_WORKSPACE_PATH=/tmp/gitrust-ci | |
| 159 | +CI_LOG_RETENTION_DAYS=7 | |
| 160 | + | |
| 161 | + | |
| 162 | +# ============================================================================= | |
| 163 | +# 20. IMPORT DE DEPOTS EXTERNES | |
| 164 | +# ============================================================================= | |
| 165 | +IMPORT_MAX_CONCURRENT=1 | |
| 166 | +IMPORT_TIMEOUT_SECS=1800 | |
| 167 | + | |
| 168 | + | |
| 169 | +# ============================================================================= | |
| 170 | +# 21. SBOM / DEPENDENCY-TRACK — desactive en dev | |
| 171 | +# ============================================================================= | |
| 172 | +CI_SBOM_ENABLED=false | |
| 173 | +CI_DTRACK_ENABLED=false |
A
book/template/index.html
+362
-0
@@ -0,0 +1,362 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Catalogue des templates - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/template/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="bibliothèque-de-templates-gitrust"><a class="header" href="#bibliothèque-de-templates-gitrust">Bibliothèque de templates gitrust</a></h1> | |
| 181 | +<p>Bienvenue dans l’atelier gitrust. Chaque fichier ici est <strong>standalone et copiable tel quel</strong> — un fichier, un cas d’usage. Les commentaires internes suffisent à l’adapter. Pour les explications pédagogiques, référez-vous aux manuels qui pointent vers ces templates.</p> | |
| 182 | +<blockquote> | |
| 183 | +<p><strong>Convention</strong> : copiez le fichier qui correspond à votre cas, adaptez les valeurs marquées <code>CHANGE_ME</code>, puis supprimez les commentaires si vous le souhaitez. Ne modifiez pas les fichiers dans ce dépôt — travaillez toujours sur une copie locale.</p> | |
| 184 | +</blockquote> | |
| 185 | +<hr> | |
| 186 | +<h2 id="fichiers-denvironnement-env"><a class="header" href="#fichiers-denvironnement-env">Fichiers d’environnement (<code>env/</code>)</a></h2> | |
| 187 | +<div class="table-wrapper"> | |
| 188 | +<table> | |
| 189 | +<thead> | |
| 190 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 191 | +</thead> | |
| 192 | +<tbody> | |
| 193 | +<tr><td><a href="env/dev-local.env"><code>env/dev-local.env</code></a></td><td>Instance de développement local sur <code>localhost:4000</code> — PostgreSQL local, pas de TLS, debug activé</td></tr> | |
| 194 | +<tr><td><a href="env/production-mono-machine.env"><code>env/production-mono-machine.env</code></a></td><td>Production mono-machine derrière reverse-proxy — PostgreSQL, SMTP, Redis sessions, TLS délégué</td></tr> | |
| 195 | +<tr><td><a href="env/production-ci-heavy.env"><code>env/production-ci-heavy.env</code></a></td><td>Production avec CI runners distants intensifs — tuning pool de connexions, rate limiting ajusté</td></tr> | |
| 196 | +<tr><td><a href="env/tests-e2e.env"><code>env/tests-e2e.env</code></a></td><td>Environnement E2E Playwright — base éphémère, seed de données, SMTP mock</td></tr> | |
| 197 | +</tbody> | |
| 198 | +</table> | |
| 199 | +</div> | |
| 200 | +<hr> | |
| 201 | +<h2 id="stacks-docker-docker"><a class="header" href="#stacks-docker-docker">Stacks Docker (<code>docker/</code>)</a></h2> | |
| 202 | +<div class="table-wrapper"> | |
| 203 | +<table> | |
| 204 | +<thead> | |
| 205 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 206 | +</thead> | |
| 207 | +<tbody> | |
| 208 | +<tr><td><a href="docker/docker-compose.minimal.yml"><code>docker/docker-compose.minimal.yml</code></a></td><td>Stack minimale : gitrust + PostgreSQL uniquement — idéale pour l’évaluation et les tutoriels</td></tr> | |
| 209 | +<tr><td><a href="docker/docker-compose.production.yml"><code>docker/docker-compose.production.yml</code></a></td><td>Stack production : gitrust + PostgreSQL + Redis sessions + relay SMTP Postfix</td></tr> | |
| 210 | +<tr><td><a href="docker/docker-compose.with-ci-runner.yml"><code>docker/docker-compose.with-ci-runner.yml</code></a></td><td>Stack production + CI runner Dagger en sidecar — pour instances avec builds fréquents</td></tr> | |
| 211 | +<tr><td><a href="docker/podman-quadlet.container"><code>docker/podman-quadlet.container</code></a></td><td>Alternative Podman Quadlet — déploiement rootless systemd-native sans Docker daemon</td></tr> | |
| 212 | +</tbody> | |
| 213 | +</table> | |
| 214 | +</div> | |
| 215 | +<hr> | |
| 216 | +<h2 id="reverse-proxy-reverse-proxy"><a class="header" href="#reverse-proxy-reverse-proxy">Reverse-proxy (<code>reverse-proxy/</code>)</a></h2> | |
| 217 | +<div class="table-wrapper"> | |
| 218 | +<table> | |
| 219 | +<thead> | |
| 220 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 221 | +</thead> | |
| 222 | +<tbody> | |
| 223 | +<tr><td><a href="reverse-proxy/nginx-tls.conf"><code>reverse-proxy/nginx-tls.conf</code></a></td><td>Nginx avec TLS Let’s Encrypt — virtual host gitrust, headers de sécurité, proxy WebSocket SSE</td></tr> | |
| 224 | +<tr><td><a href="reverse-proxy/caddy-Caddyfile"><code>reverse-proxy/caddy-Caddyfile</code></a></td><td>Caddyfile — TLS automatique, configuration minimale, idéal pour les petites instances</td></tr> | |
| 225 | +<tr><td><a href="reverse-proxy/traefik-dynamic.yml"><code>reverse-proxy/traefik-dynamic.yml</code></a></td><td>Traefik config dynamique — intégration labels Docker, middlewares rate-limit et auth</td></tr> | |
| 226 | +</tbody> | |
| 227 | +</table> | |
| 228 | +</div> | |
| 229 | +<hr> | |
| 230 | +<h2 id="systemd-systemd"><a class="header" href="#systemd-systemd">Systemd (<code>systemd/</code>)</a></h2> | |
| 231 | +<div class="table-wrapper"> | |
| 232 | +<table> | |
| 233 | +<thead> | |
| 234 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 235 | +</thead> | |
| 236 | +<tbody> | |
| 237 | +<tr><td><a href="systemd/gitrust.service"><code>systemd/gitrust.service</code></a></td><td>Service systemd avec hardening AppArmor/seccomp — pour déploiement binaire natif sans Docker</td></tr> | |
| 238 | +<tr><td><a href="systemd/gitrust-backup.timer"><code>systemd/gitrust-backup.timer</code></a></td><td>Timer systemd de sauvegarde quotidienne — déclenche <code>backup.sh</code> à 2h00 avec journalisation</td></tr> | |
| 239 | +</tbody> | |
| 240 | +</table> | |
| 241 | +</div> | |
| 242 | +<hr> | |
| 243 | +<h2 id="configurations-ci-gitrust-ciyml-ci"><a class="header" href="#configurations-ci-gitrust-ciyml-ci">Configurations CI (<code>.gitrust-ci.yml</code>) (<code>ci/</code>)</a></h2> | |
| 244 | +<div class="table-wrapper"> | |
| 245 | +<table> | |
| 246 | +<thead> | |
| 247 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 248 | +</thead> | |
| 249 | +<tbody> | |
| 250 | +<tr><td><a href="ci/rust.gitrust-ci.yml"><code>ci/rust.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Rust — fmt, clippy, test, audit de dépendances, SBOM</td></tr> | |
| 251 | +<tr><td><a href="ci/go.gitrust-ci.yml"><code>ci/go.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Go — vet, staticcheck, test, build multi-arch</td></tr> | |
| 252 | +<tr><td><a href="ci/python.gitrust-ci.yml"><code>ci/python.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Python — ruff, mypy, pytest, packaging wheel</td></tr> | |
| 253 | +<tr><td><a href="ci/node.gitrust-ci.yml"><code>ci/node.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Node.js — ESLint, Vitest, build, audit npm</td></tr> | |
| 254 | +<tr><td><a href="ci/dagger-power-mode/dagger.json"><code>ci/dagger-power-mode/dagger.json</code></a></td><td>Squelette Dagger Power Mode — module Go minimal à étendre pour pipelines complexes</td></tr> | |
| 255 | +<tr><td><a href="ci/dagger-power-mode/main.go"><code>ci/dagger-power-mode/main.go</code></a></td><td>Module Dagger Go — fonctions build/test/publish prêtes à adapter</td></tr> | |
| 256 | +</tbody> | |
| 257 | +</table> | |
| 258 | +</div> | |
| 259 | +<hr> | |
| 260 | +<h2 id="scripts-de-sauvegarde-et-restauration-backup"><a class="header" href="#scripts-de-sauvegarde-et-restauration-backup">Scripts de sauvegarde et restauration (<code>backup/</code>)</a></h2> | |
| 261 | +<div class="table-wrapper"> | |
| 262 | +<table> | |
| 263 | +<thead> | |
| 264 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 265 | +</thead> | |
| 266 | +<tbody> | |
| 267 | +<tr><td><a href="backup/backup.sh"><code>backup/backup.sh</code></a></td><td>Sauvegarde complète — <code>pg_dump</code> + <code>rsync</code> des dépôts bare + copie des clés SSH host</td></tr> | |
| 268 | +<tr><td><a href="backup/restore.sh"><code>backup/restore.sh</code></a></td><td>Restauration complète depuis une archive de sauvegarde — avec vérification d’intégrité</td></tr> | |
| 269 | +</tbody> | |
| 270 | +</table> | |
| 271 | +</div> | |
| 272 | +<hr> | |
| 273 | +<h2 id="clients-api-dexemple-api-clients"><a class="header" href="#clients-api-dexemple-api-clients">Clients API d’exemple (<code>api-clients/</code>)</a></h2> | |
| 274 | +<p>Ces exemples illustrent l’authentification par Personal Access Token (PAT) et les opérations CRUD de base sur l’API REST gitrust v1.</p> | |
| 275 | +<div class="table-wrapper"> | |
| 276 | +<table> | |
| 277 | +<thead> | |
| 278 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 279 | +</thead> | |
| 280 | +<tbody> | |
| 281 | +<tr><td><a href="api-clients/python-create-repo.py"><code>api-clients/python-create-repo.py</code></a></td><td>Client Python — créer un dépôt via l’API v1 avec <code>httpx</code> et PAT</td></tr> | |
| 282 | +<tr><td><a href="api-clients/rust-list-repos.rs"><code>api-clients/rust-list-repos.rs</code></a></td><td>Client Rust — lister les dépôts avec pagination via <code>reqwest</code> et PAT</td></tr> | |
| 283 | +<tr><td><a href="api-clients/curl-pat-auth.sh"><code>api-clients/curl-pat-auth.sh</code></a></td><td>Shell curl — exemples d’authentification PAT, GET/POST/DELETE sur les endpoints principaux</td></tr> | |
| 284 | +</tbody> | |
| 285 | +</table> | |
| 286 | +</div> | |
| 287 | +<hr> | |
| 288 | +<h2 id="scripts-de-migration-migration"><a class="header" href="#scripts-de-migration-migration">Scripts de migration (<code>migration/</code>)</a></h2> | |
| 289 | +<div class="table-wrapper"> | |
| 290 | +<table> | |
| 291 | +<thead> | |
| 292 | +<tr><th>Fichier</th><th>Cas d’usage</th></tr> | |
| 293 | +</thead> | |
| 294 | +<tbody> | |
| 295 | +<tr><td><a href="migration/from-gitea.sh"><code>migration/from-gitea.sh</code></a></td><td>Import en masse depuis Gitea — dépôts, membres, issues via le worker d’import gitrust</td></tr> | |
| 296 | +<tr><td><a href="migration/from-forgejo.sh"><code>migration/from-forgejo.sh</code></a></td><td>Import en masse depuis Forgejo — même mécanique, adaptée à l’API Forgejo</td></tr> | |
| 297 | +</tbody> | |
| 298 | +</table> | |
| 299 | +</div> | |
| 300 | +<hr> | |
| 301 | +<h2 id="comment-utiliser-ces-templates-depuis-les-manuels"><a class="header" href="#comment-utiliser-ces-templates-depuis-les-manuels">Comment utiliser ces templates depuis les manuels</a></h2> | |
| 302 | +<p>Les manuels narratifs pointent vers ces fichiers depuis leurs sections how-to. Par exemple :</p> | |
| 303 | +<ul> | |
| 304 | +<li><code>administration_manual/how-to/configurer-smtp.md</code> → <em>« Copiez <code>template/env/production-mono-machine.env</code> puis… »</em></li> | |
| 305 | +<li><code>administration_manual/tutorials/01-installation-docker.md</code> → <em>« La stack s’appuie sur <code>template/docker/docker-compose.minimal.yml</code> »</em></li> | |
| 306 | +<li><code>developer_manual/how-to/implementer-endpoint-api.md</code> → <em>« Testez avec <code>template/api-clients/curl-pat-auth.sh</code> »</em></li> | |
| 307 | +</ul> | |
| 308 | +<p>Les templates ne contiennent pas d’explication pédagogique — tout le contexte se trouve dans les manuels.</p> | |
| 309 | + | |
| 310 | + </main> | |
| 311 | + | |
| 312 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 313 | + <!-- Mobile navigation buttons --> | |
| 314 | + <a rel="prev" href="../developer_manual/explanation/patron-worker-async.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 315 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 316 | + </a> | |
| 317 | + | |
| 318 | + | |
| 319 | + <div style="clear: both"></div> | |
| 320 | + </nav> | |
| 321 | + </div> | |
| 322 | + </div> | |
| 323 | + | |
| 324 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 325 | + <a rel="prev" href="../developer_manual/explanation/patron-worker-async.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 326 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 327 | + </a> | |
| 328 | + | |
| 329 | + </nav> | |
| 330 | + | |
| 331 | + </div> | |
| 332 | + | |
| 333 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 334 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 335 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 336 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 337 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + <script> | |
| 342 | + window.playground_copyable = true; | |
| 343 | + </script> | |
| 344 | + | |
| 345 | + | |
| 346 | + <script src="../elasticlunr-ef4e11c1.min.js"></script> | |
| 347 | + <script src="../mark-09e88c2c.min.js"></script> | |
| 348 | + <script src="../searcher-c2a407aa.js"></script> | |
| 349 | + | |
| 350 | + <script src="../clipboard-1626706a.min.js"></script> | |
| 351 | + <script src="../highlight-abc7f01d.js"></script> | |
| 352 | + <script src="../book-a0b12cfe.js"></script> | |
| 353 | + | |
| 354 | + <!-- Custom JS scripts --> | |
| 355 | + <script src="../theme/mermaid-eefea253.min.js"></script> | |
| 356 | + <script src="../theme/mermaid-init-ccf746f1.js"></script> | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + </div> | |
| 361 | + </body> | |
| 362 | +</html> |
A
book/template/reverse-proxy/nginx-tls.conf
+208
-0
@@ -0,0 +1,208 @@
| 1 | +# ============================================================================= | |
| 2 | +# Gitrust — Reverse proxy Nginx avec TLS (Let's Encrypt) | |
| 3 | +# ============================================================================= | |
| 4 | +# Déploiement : | |
| 5 | +# sudo cp template/reverse-proxy/nginx-tls.conf /etc/nginx/sites-available/gitrust | |
| 6 | +# sudo ln -s /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust | |
| 7 | +# sudo nginx -t && sudo systemctl reload nginx | |
| 8 | +# | |
| 9 | +# TLS (Let's Encrypt, après que le bloc HTTP ci-dessous soit actif) : | |
| 10 | +# sudo certbot --nginx -d <YOUR_DOMAIN> | |
| 11 | +# | |
| 12 | +# SSH git : | |
| 13 | +# Nginx HTTP ne peut pas proxifier SSH. Deux options : | |
| 14 | +# 1) Exposer le port 2222 directement dans le firewall (recommandé, simple) | |
| 15 | +# 2) Proxy stream nginx sur :22 → 127.0.0.1:2222 (voir commentaire en bas) | |
| 16 | +# Prérequis : paquet libnginx-mod-stream + bloc stream{} dans nginx.conf | |
| 17 | +# ============================================================================= | |
| 18 | + | |
| 19 | +upstream gitrust_backend { | |
| 20 | + server 127.0.0.1:4000; | |
| 21 | + keepalive 32; | |
| 22 | +} | |
| 23 | + | |
| 24 | +# ============================================================================= | |
| 25 | +# HTTP — redirection HTTPS + ACME challenge Let's Encrypt | |
| 26 | +# ============================================================================= | |
| 27 | +server { | |
| 28 | + listen 80; | |
| 29 | + listen [::]:80; | |
| 30 | + server_name <YOUR_DOMAIN>; # Remplacer par le FQDN de l'instance | |
| 31 | + | |
| 32 | + # Répertoire de validation certbot — doit être accessible avant TLS | |
| 33 | + location /.well-known/acme-challenge/ { | |
| 34 | + root /var/www/html; | |
| 35 | + } | |
| 36 | + | |
| 37 | + # Tout le reste → HTTPS permanent | |
| 38 | + location / { | |
| 39 | + return 301 https://$host$request_uri; | |
| 40 | + } | |
| 41 | +} | |
| 42 | + | |
| 43 | +# ============================================================================= | |
| 44 | +# HTTPS — reverse proxy vers gitrust | |
| 45 | +# ============================================================================= | |
| 46 | +server { | |
| 47 | + listen 443 ssl; | |
| 48 | + listen [::]:443 ssl; | |
| 49 | + # Syntaxe nginx >= 1.25. Pour nginx <= 1.24, remplacer les deux lignes | |
| 50 | + # listen ci-dessus par : | |
| 51 | + # listen 443 ssl http2; | |
| 52 | + # listen [::]:443 ssl http2; | |
| 53 | + http2 on; | |
| 54 | + server_name <YOUR_DOMAIN>; # Remplacer par le FQDN de l'instance | |
| 55 | + | |
| 56 | + # ------------------------------------------------------------------------- | |
| 57 | + # TLS — certificats Let's Encrypt (remplis automatiquement par certbot) | |
| 58 | + # ------------------------------------------------------------------------- | |
| 59 | + # Décommenter après : sudo certbot --nginx -d <YOUR_DOMAIN> | |
| 60 | + # ssl_certificate /etc/letsencrypt/live/<YOUR_DOMAIN>/fullchain.pem; | |
| 61 | + # ssl_certificate_key /etc/letsencrypt/live/<YOUR_DOMAIN>/privkey.pem; | |
| 62 | + # include /etc/letsencrypt/options-ssl-nginx.conf; | |
| 63 | + # ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; | |
| 64 | + | |
| 65 | + # Certificat auto-signé pour valider la config avant certbot (commenter après) | |
| 66 | + ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; | |
| 67 | + ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; | |
| 68 | + | |
| 69 | + # Hardening TLS | |
| 70 | + ssl_protocols TLSv1.2 TLSv1.3; | |
| 71 | + ssl_prefer_server_ciphers on; | |
| 72 | + ssl_session_cache shared:SSL:10m; | |
| 73 | + ssl_session_timeout 1d; | |
| 74 | + | |
| 75 | + # ------------------------------------------------------------------------- | |
| 76 | + # En-têtes de sécurité | |
| 77 | + # ------------------------------------------------------------------------- | |
| 78 | + # HSTS : force HTTPS pendant 1 an, inclut sous-domaines. | |
| 79 | + # Attention : n'activer includeSubDomains que si TOUS les sous-domaines ont TLS. | |
| 80 | + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |
| 81 | + | |
| 82 | + # Empêche le navigateur de détecter automatiquement le type MIME (MIME sniffing) | |
| 83 | + add_header X-Content-Type-Options "nosniff" always; | |
| 84 | + | |
| 85 | + # Politique referrer : envoie l'origine complète pour requêtes same-origin, | |
| 86 | + # uniquement l'origine (sans path) pour requêtes cross-origin HTTPS. | |
| 87 | + add_header Referrer-Policy "strict-origin-when-cross-origin" always; | |
| 88 | + | |
| 89 | + # Empêche l'intégration dans des iframes d'autres origines | |
| 90 | + add_header X-Frame-Options "SAMEORIGIN" always; | |
| 91 | + | |
| 92 | + # ------------------------------------------------------------------------- | |
| 93 | + # Taille max des corps de requête | |
| 94 | + # ------------------------------------------------------------------------- | |
| 95 | + # 1G pour les git push HTTP de gros dépôts (monorepos, dépôts avec LFS, | |
| 96 | + # binaires commités). Réduire si l'espace disque est contraint. | |
| 97 | + # La location git spécifique ci-dessous passe à 2G pour les push volumineux. | |
| 98 | + client_max_body_size 1G; | |
| 99 | + client_body_buffer_size 128k; | |
| 100 | + | |
| 101 | + # ------------------------------------------------------------------------- | |
| 102 | + # Timeouts étendus pour clone/push de gros dépôts | |
| 103 | + # ------------------------------------------------------------------------- | |
| 104 | + proxy_connect_timeout 300s; | |
| 105 | + proxy_send_timeout 3600s; | |
| 106 | + proxy_read_timeout 3600s; | |
| 107 | + send_timeout 3600s; | |
| 108 | + | |
| 109 | + # ------------------------------------------------------------------------- | |
| 110 | + # Logs | |
| 111 | + # ------------------------------------------------------------------------- | |
| 112 | + access_log /var/log/nginx/gitrust.access.log; | |
| 113 | + error_log /var/log/nginx/gitrust.error.log warn; | |
| 114 | + | |
| 115 | + # ========================================================================= | |
| 116 | + # Route principale — toutes les pages et l'API REST | |
| 117 | + # ========================================================================= | |
| 118 | + location / { | |
| 119 | + proxy_pass http://gitrust_backend; | |
| 120 | + proxy_http_version 1.1; | |
| 121 | + | |
| 122 | + # En-têtes forwarded | |
| 123 | + proxy_set_header Host $host; | |
| 124 | + proxy_set_header X-Real-IP $remote_addr; | |
| 125 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 126 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 127 | + proxy_set_header X-Forwarded-Host $host; | |
| 128 | + proxy_set_header X-Forwarded-Port $server_port; | |
| 129 | + | |
| 130 | + # Keep-alive vers l'upstream (connexion réutilisée) | |
| 131 | + proxy_set_header Connection ""; | |
| 132 | + | |
| 133 | + # SSE et WebSocket — désactiver la mise en tampon pour : | |
| 134 | + # - notifications temps réel (/notifications/stream) | |
| 135 | + # - logs CI en streaming (/repos/.../ci/.../logs) | |
| 136 | + # - HTMX SSE | |
| 137 | + proxy_buffering off; | |
| 138 | + proxy_cache off; | |
| 139 | + proxy_set_header X-Accel-Buffering no; | |
| 140 | + } | |
| 141 | + | |
| 142 | + # ========================================================================= | |
| 143 | + # Git smart HTTP — clone et push via HTTPS | |
| 144 | + # ========================================================================= | |
| 145 | + # Pattern : /<owner>/<repo>.git/info/refs, /git-upload-pack, /git-receive-pack | |
| 146 | + location ~ ^/[^/]+/[^/]+\.git/ { | |
| 147 | + proxy_pass http://gitrust_backend; | |
| 148 | + proxy_http_version 1.1; | |
| 149 | + | |
| 150 | + proxy_set_header Host $host; | |
| 151 | + proxy_set_header X-Real-IP $remote_addr; | |
| 152 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 153 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 154 | + | |
| 155 | + # Désactiver la mise en tampon côté client ET serveur pour les push/clone | |
| 156 | + proxy_buffering off; | |
| 157 | + proxy_request_buffering off; | |
| 158 | + proxy_cache off; | |
| 159 | + | |
| 160 | + # Push de gros dépôts peut dépasser 1G (monorepos lourds) | |
| 161 | + client_max_body_size 2G; | |
| 162 | + } | |
| 163 | + | |
| 164 | + # ========================================================================= | |
| 165 | + # Assets statiques — optionnel : servir directement depuis le filesystem | |
| 166 | + # ========================================================================= | |
| 167 | + # Décommenter si les fichiers /opt/gitrust/static/ sont lisibles par www-data. | |
| 168 | + # Réduit la charge sur gitrust pour CSS/JS/images (cache navigateur 7 jours). | |
| 169 | + # location ^~ /static/ { | |
| 170 | + # alias /opt/gitrust/static/; | |
| 171 | + # expires 7d; | |
| 172 | + # add_header Cache-Control "public, immutable"; | |
| 173 | + # try_files $uri @gitrust; | |
| 174 | + # } | |
| 175 | + # location @gitrust { | |
| 176 | + # proxy_pass http://gitrust_backend; | |
| 177 | + # } | |
| 178 | +} | |
| 179 | + | |
| 180 | +# ============================================================================= | |
| 181 | +# BONUS — Proxy SSH git via nginx stream (port 22 → gitrust SSH :2222) | |
| 182 | +# ============================================================================= | |
| 183 | +# ATTENTION : ce bloc `stream {}` est de niveau RACINE nginx et NE PEUT PAS | |
| 184 | +# être placé dans ce fichier (qui est inclus dans le bloc http{}). | |
| 185 | +# Le décommenter ici provoquerait : nginx: [emerg] "stream" directive is not allowed here | |
| 186 | +# | |
| 187 | +# Méthode correcte : ajouter le bloc ci-dessous À LA FIN de /etc/nginx/nginx.conf | |
| 188 | +# (hors du bloc http{}), ou dans /etc/nginx/conf.d-stream/gitrust-ssh.conf | |
| 189 | +# inclus au niveau racine. | |
| 190 | +# | |
| 191 | +# Prérequis : | |
| 192 | +# - paquet libnginx-mod-stream installé (apt install libnginx-mod-stream) | |
| 193 | +# - sshd système déplacé sur un autre port (ex: 2022) si l'hôte est aussi administré par SSH | |
| 194 | +# | |
| 195 | +# stream { | |
| 196 | +# upstream gitrust_ssh { | |
| 197 | +# server 127.0.0.1:2222; | |
| 198 | +# } | |
| 199 | +# server { | |
| 200 | +# listen 22; | |
| 201 | +# listen [::]:22; | |
| 202 | +# proxy_pass gitrust_ssh; | |
| 203 | +# proxy_timeout 1h; | |
| 204 | +# proxy_connect_timeout 30s; | |
| 205 | +# error_log /var/log/nginx/gitrust-ssh-stream.log; | |
| 206 | +# } | |
| 207 | +# } | |
| 208 | +# ============================================================================= |
A
book/template/systemd/gitrust.service
+112
-0
@@ -0,0 +1,112 @@
| 1 | +# ============================================================================= | |
| 2 | +# Gitrust — unité systemd avec hardening | |
| 3 | +# ============================================================================= | |
| 4 | +# Déploiement : | |
| 5 | +# sudo cp template/systemd/gitrust.service /etc/systemd/system/gitrust.service | |
| 6 | +# sudo systemctl daemon-reload | |
| 7 | +# sudo systemctl enable --now gitrust | |
| 8 | +# sudo systemctl status gitrust | |
| 9 | +# | |
| 10 | +# Prérequis : | |
| 11 | +# - Binaire installé dans /opt/gitrust/gitrust (chmod 755, owned by root) | |
| 12 | +# - Utilisateur et groupe système créés : | |
| 13 | +# sudo useradd --system --no-create-home --shell /usr/sbin/nologin gitrust | |
| 14 | +# - Répertoire de données créé et attribué : | |
| 15 | +# sudo mkdir -p /opt/gitrust/data/repos /opt/gitrust/data/ssh_keys | |
| 16 | +# sudo chown -R gitrust:gitrust /opt/gitrust/data | |
| 17 | +# - Fichier .env placé dans /opt/gitrust/.env (chmod 640, owned by root:gitrust) | |
| 18 | +# ============================================================================= | |
| 19 | + | |
| 20 | +[Unit] | |
| 21 | +Description=Gitrust - Self-hosted Git platform | |
| 22 | +Documentation=https://gitrust.eu/docs | |
| 23 | +After=network.target postgresql.service | |
| 24 | +# postgresql.service : décommenter si PostgreSQL tourne sur la même machine. | |
| 25 | +# Retirer si PostgreSQL est distant (le service ne doit pas bloquer au démarrage). | |
| 26 | +Wants=network.target | |
| 27 | + | |
| 28 | +[Service] | |
| 29 | +Type=simple | |
| 30 | +User=gitrust | |
| 31 | +Group=gitrust | |
| 32 | +WorkingDirectory=/opt/gitrust | |
| 33 | +EnvironmentFile=/opt/gitrust/.env | |
| 34 | +ExecStart=/opt/gitrust/gitrust | |
| 35 | +Restart=on-failure | |
| 36 | +RestartSec=5 | |
| 37 | + | |
| 38 | +# ------------------------------------------------------------------------- | |
| 39 | +# Hardening systemd | |
| 40 | +# ------------------------------------------------------------------------- | |
| 41 | + | |
| 42 | +# Interdit d'acquérir de nouveaux privilèges via execve (setuid/setgid binaires) | |
| 43 | +NoNewPrivileges=true | |
| 44 | + | |
| 45 | +# Système de fichiers racine en lecture seule (hors ReadWritePaths ci-dessous) | |
| 46 | +ProtectSystem=strict | |
| 47 | + | |
| 48 | +# Répertoires home des utilisateurs inaccessibles | |
| 49 | +ProtectHome=true | |
| 50 | + | |
| 51 | +# /tmp et /var/tmp privés et isolés du reste du système | |
| 52 | +PrivateTmp=true | |
| 53 | + | |
| 54 | +# Périphériques physiques inaccessibles (/dev/sda, /dev/mem, etc.) | |
| 55 | +PrivateDevices=true | |
| 56 | + | |
| 57 | +# Espace de noms réseau partagé avec l'hôte (gitrust a besoin du réseau) | |
| 58 | +# PrivateNetwork=false # valeur par défaut, laisser commenté | |
| 59 | + | |
| 60 | +# Protège le kernel et les paramètres systèmes (/proc/sys, /sys, etc.) | |
| 61 | +ProtectKernelTunables=true | |
| 62 | +ProtectKernelModules=true | |
| 63 | +ProtectKernelLogs=true | |
| 64 | +ProtectControlGroups=true | |
| 65 | + | |
| 66 | +# Restreint les appels système aux familles nécessaires pour Rust/tokio/git2 | |
| 67 | +SystemCallArchitectures=native | |
| 68 | + | |
| 69 | +# Limite les familles d'appels système autorisés | |
| 70 | +# @system-service couvre les appels standards pour un serveur (network, io, process) | |
| 71 | +SystemCallFilter=@system-service @network-io @file-system @io-event @process | |
| 72 | + | |
| 73 | +# Interdit d'écrire en mémoire exécutable (exploits JIT/shellcode) | |
| 74 | +MemoryDenyWriteExecute=true | |
| 75 | + | |
| 76 | +# Interdit de modifier les capabilities du processus | |
| 77 | +RestrictRealtime=true | |
| 78 | +LockPersonality=true | |
| 79 | + | |
| 80 | +# Limite les namespaces créables (gitrust n'a pas besoin de créer de namespaces) | |
| 81 | +RestrictNamespaces=true | |
| 82 | + | |
| 83 | +# ------------------------------------------------------------------------- | |
| 84 | +# Chemins en écriture — tout le reste est en lecture seule (ProtectSystem=strict) | |
| 85 | +# ------------------------------------------------------------------------- | |
| 86 | +# Repos git bare, clé hôte SSH, workspaces CI temporaires | |
| 87 | +ReadWritePaths=/opt/gitrust/data | |
| 88 | +# Workspace CI (si CI_WORKSPACE_PATH pointe ailleurs que /opt/gitrust/data) | |
| 89 | +# ReadWritePaths=/var/lib/gitrust-ci | |
| 90 | + | |
| 91 | +# ------------------------------------------------------------------------- | |
| 92 | +# Ports privilégiés (< 1024) | |
| 93 | +# ------------------------------------------------------------------------- | |
| 94 | +# Décommenter UNIQUEMENT si gitrust doit écouter directement sur :80 ou :22. | |
| 95 | +# En configuration normale (nginx devant, SSH sur :2222), cette ligne est inutile. | |
| 96 | +# AmbientCapabilities=CAP_NET_BIND_SERVICE | |
| 97 | + | |
| 98 | +# ------------------------------------------------------------------------- | |
| 99 | +# Journalisation | |
| 100 | +# ------------------------------------------------------------------------- | |
| 101 | +StandardOutput=journal | |
| 102 | +StandardError=journal | |
| 103 | +SyslogIdentifier=gitrust | |
| 104 | + | |
| 105 | +# ------------------------------------------------------------------------- | |
| 106 | +# Limites de ressources | |
| 107 | +# ------------------------------------------------------------------------- | |
| 108 | +# Nombre de fichiers ouverts — gros dépôts git2 + connexions SSH simultanées | |
| 109 | +LimitNOFILE=65536 | |
| 110 | + | |
| 111 | +[Install] | |
| 112 | +WantedBy=multi-user.target |
A
book/theme/mermaid-eefea253.min.js
+2609
-0
@@ -0,0 +1,2609 @@
| 1 | +/* MIT Licensed. Copyright (c) 2014 - 2022 Knut Sveidqvist */ | |
| 2 | +/* For license information please see https://github.com/mermaid-js/mermaid/blob/develop/LICENSE */ | |
| 3 | +"use strict";var __esbuild_esm_mermaid=(()=>{var B2e=Object.create;var by=Object.defineProperty;var F2e=Object.getOwnPropertyDescriptor;var $2e=Object.getOwnPropertyNames;var z2e=Object.getPrototypeOf,G2e=Object.prototype.hasOwnProperty;var o=(t,e)=>by(t,"name",{value:e,configurable:!0});var N=(t,e)=>()=>(t&&(e=t(t=0)),e);var Mi=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),hr=(t,e)=>{for(var r in e)by(t,r,{get:e[r],enumerable:!0})},L4=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of $2e(e))!G2e.call(t,i)&&i!==r&&by(t,i,{get:()=>e[i],enumerable:!(n=F2e(e,i))||n.enumerable});return t},Sr=(t,e,r)=>(L4(t,e,"default"),r&&L4(r,e,"default")),Sa=(t,e,r)=>(r=t!=null?B2e(z2e(t)):{},L4(e||!t||!t.__esModule?by(r,"default",{value:t,enumerable:!0}):r,t)),V2e=t=>L4(by({},"__esModule",{value:!0}),t);var R4=Mi((EC,SC)=>{"use strict";(function(t,e){typeof EC=="object"&&typeof SC<"u"?SC.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(EC,function(){"use strict";var t=1e3,e=6e4,r=36e5,n="millisecond",i="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|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,v={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:o(function(k){var L=["th","st","nd","rd"],R=k%100;return"["+k+(L[(R-20)%10]||L[R]||L[0])+"]"},"ordinal")},x=o(function(k,L,R){var O=String(k);return!O||O.length>=L?k:""+Array(L+1-O.length).join(R)+k},"m"),b={s:x,z:o(function(k){var L=-k.utcOffset(),R=Math.abs(L),O=Math.floor(R/60),M=R%60;return(L<=0?"+":"-")+x(O,2,"0")+":"+x(M,2,"0")},"z"),m:o(function k(L,R){if(L.date()<R.date())return-k(R,L);var O=12*(R.year()-L.year())+(R.month()-L.month()),M=L.clone().add(O,h),B=R-M<0,F=L.clone().add(O+(B?-1:1),h);return+(-(O+(R-M)/(B?M-F:F-M))||0)},"t"),a:o(function(k){return k<0?Math.ceil(k)||0:Math.floor(k)},"a"),p:o(function(k){return{M:h,y:d,w:u,d:l,D:p,h:s,m:a,s:i,ms:n,Q:f}[k]||String(k||"").toLowerCase().replace(/s$/,"")},"p"),u:o(function(k){return k===void 0},"u")},w="en",C={};C[w]=v;var T="$isDayjsObject",E=o(function(k){return k instanceof I||!(!k||!k[T])},"S"),A=o(function k(L,R,O){var M;if(!L)return w;if(typeof L=="string"){var B=L.toLowerCase();C[B]&&(M=B),R&&(C[B]=R,M=B);var F=L.split("-");if(!M&&F.length>1)return k(F[0])}else{var P=L.name;C[P]=L,M=P}return!O&&M&&(w=M),M||!O&&w},"t"),S=o(function(k,L){if(E(k))return k.clone();var R=typeof L=="object"?L:{};return R.date=k,R.args=arguments,new I(R)},"O"),_=b;_.l=A,_.i=E,_.w=function(k,L){return S(k,{locale:L.$L,utc:L.$u,x:L.$x,$offset:L.$offset})};var I=function(){function k(R){this.$L=A(R.locale,null,!0),this.parse(R),this.$x=this.$x||R.x||{},this[T]=!0}o(k,"M");var L=k.prototype;return L.parse=function(R){this.$d=function(O){var M=O.date,B=O.utc;if(M===null)return new Date(NaN);if(_.u(M))return new Date;if(M instanceof Date)return new Date(M);if(typeof M=="string"&&!/Z$/i.test(M)){var F=M.match(g);if(F){var P=F[2]-1||0,z=(F[7]||"0").substring(0,3);return B?new Date(Date.UTC(F[1],P,F[3]||1,F[4]||0,F[5]||0,F[6]||0,z)):new Date(F[1],P,F[3]||1,F[4]||0,F[5]||0,F[6]||0,z)}}return new Date(M)}(R),this.init()},L.init=function(){var R=this.$d;this.$y=R.getFullYear(),this.$M=R.getMonth(),this.$D=R.getDate(),this.$W=R.getDay(),this.$H=R.getHours(),this.$m=R.getMinutes(),this.$s=R.getSeconds(),this.$ms=R.getMilliseconds()},L.$utils=function(){return _},L.isValid=function(){return this.$d.toString()!==m},L.isSame=function(R,O){var M=S(R);return this.startOf(O)<=M&&M<=this.endOf(O)},L.isAfter=function(R,O){return S(R)<this.startOf(O)},L.isBefore=function(R,O){return this.endOf(O)<S(R)},L.$g=function(R,O,M){return _.u(R)?this[O]:this.set(M,R)},L.unix=function(){return Math.floor(this.valueOf()/1e3)},L.valueOf=function(){return this.$d.getTime()},L.startOf=function(R,O){var M=this,B=!!_.u(O)||O,F=_.p(R),P=o(function(le,he){var K=_.w(M.$u?Date.UTC(M.$y,he,le):new Date(M.$y,he,le),M);return B?K:K.endOf(l)},"l"),z=o(function(le,he){return _.w(M.toDate()[le].apply(M.toDate("s"),(B?[0,0,0,0]:[23,59,59,999]).slice(he)),M)},"$"),$=this.$W,H=this.$M,Q=this.$D,j="set"+(this.$u?"UTC":"");switch(F){case d:return B?P(1,0):P(31,11);case h:return B?P(1,H):P(0,H+1);case u:var ie=this.$locale().weekStart||0,ne=($<ie?$+7:$)-ie;return P(B?Q-ne:Q+(6-ne),H);case l:case p:return z(j+"Hours",0);case s:return z(j+"Minutes",1);case a:return z(j+"Seconds",2);case i:return z(j+"Milliseconds",3);default:return this.clone()}},L.endOf=function(R){return this.startOf(R,!1)},L.$set=function(R,O){var M,B=_.p(R),F="set"+(this.$u?"UTC":""),P=(M={},M[l]=F+"Date",M[p]=F+"Date",M[h]=F+"Month",M[d]=F+"FullYear",M[s]=F+"Hours",M[a]=F+"Minutes",M[i]=F+"Seconds",M[n]=F+"Milliseconds",M)[B],z=B===l?this.$D+(O-this.$W):O;if(B===h||B===d){var $=this.clone().set(p,1);$.$d[P](z),$.init(),this.$d=$.set(p,Math.min(this.$D,$.daysInMonth())).$d}else P&&this.$d[P](z);return this.init(),this},L.set=function(R,O){return this.clone().$set(R,O)},L.get=function(R){return this[_.p(R)]()},L.add=function(R,O){var M,B=this;R=Number(R);var F=_.p(O),P=o(function(H){var Q=S(B);return _.w(Q.date(Q.date()+Math.round(H*R)),B)},"y");if(F===h)return this.set(h,this.$M+R);if(F===d)return this.set(d,this.$y+R);if(F===l)return P(1);if(F===u)return P(7);var z=(M={},M[a]=e,M[s]=r,M[i]=t,M)[F]||1,$=this.$d.getTime()+R*z;return _.w($,this)},L.subtract=function(R,O){return this.add(-1*R,O)},L.format=function(R){var O=this,M=this.$locale();if(!this.isValid())return M.invalidDate||m;var B=R||"YYYY-MM-DDTHH:mm:ssZ",F=_.z(this),P=this.$H,z=this.$m,$=this.$M,H=M.weekdays,Q=M.months,j=M.meridiem,ie=o(function(he,K,X,te){return he&&(he[K]||he(O,B))||X[K].slice(0,te)},"h"),ne=o(function(he){return _.s(P%12||12,he,"0")},"d"),le=j||function(he,K,X){var te=he<12?"AM":"PM";return X?te.toLowerCase():te};return B.replace(y,function(he,K){return K||function(X){switch(X){case"YY":return String(O.$y).slice(-2);case"YYYY":return _.s(O.$y,4,"0");case"M":return $+1;case"MM":return _.s($+1,2,"0");case"MMM":return ie(M.monthsShort,$,Q,3);case"MMMM":return ie(Q,$);case"D":return O.$D;case"DD":return _.s(O.$D,2,"0");case"d":return String(O.$W);case"dd":return ie(M.weekdaysMin,O.$W,H,2);case"ddd":return ie(M.weekdaysShort,O.$W,H,3);case"dddd":return H[O.$W];case"H":return String(P);case"HH":return _.s(P,2,"0");case"h":return ne(1);case"hh":return ne(2);case"a":return le(P,z,!0);case"A":return le(P,z,!1);case"m":return String(z);case"mm":return _.s(z,2,"0");case"s":return String(O.$s);case"ss":return _.s(O.$s,2,"0");case"SSS":return _.s(O.$ms,3,"0");case"Z":return F}return null}(he)||F.replace(":","")})},L.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},L.diff=function(R,O,M){var B,F=this,P=_.p(O),z=S(R),$=(z.utcOffset()-this.utcOffset())*e,H=this-z,Q=o(function(){return _.m(F,z)},"D");switch(P){case d:B=Q()/12;break;case h:B=Q();break;case f:B=Q()/3;break;case u:B=(H-$)/6048e5;break;case l:B=(H-$)/864e5;break;case s:B=H/r;break;case a:B=H/e;break;case i:B=H/t;break;default:B=H}return M?B:_.a(B)},L.daysInMonth=function(){return this.endOf(h).$D},L.$locale=function(){return C[this.$L]},L.locale=function(R,O){if(!R)return this.$L;var M=this.clone(),B=A(R,O,!0);return B&&(M.$L=B),M},L.clone=function(){return _.w(this.$d,this)},L.toDate=function(){return new Date(this.valueOf())},L.toJSON=function(){return this.isValid()?this.toISOString():null},L.toISOString=function(){return this.$d.toISOString()},L.toString=function(){return this.$d.toUTCString()},k}(),D=I.prototype;return S.prototype=D,[["$ms",n],["$s",i],["$m",a],["$H",s],["$W",l],["$M",h],["$y",d],["$D",p]].forEach(function(k){D[k[1]]=function(L){return this.$g(L,k[0],k[1])}}),S.extend=function(k,L){return k.$i||(k(L,I,S),k.$i=!0),S},S.locale=A,S.isDayjs=E,S.unix=function(k){return S(1e3*k)},S.en=C[w],S.Ls=C,S.p={},S})});var CF,eu,Y,wy,bo,vt=N(()=>{"use strict";CF=Sa(R4(),1),eu={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Y={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},wy=o(function(t="fatal"){let e=eu.fatal;typeof t=="string"?t.toLowerCase()in eu&&(e=eu[t]):typeof t=="number"&&(e=t),Y.trace=()=>{},Y.debug=()=>{},Y.info=()=>{},Y.warn=()=>{},Y.error=()=>{},Y.fatal=()=>{},e<=eu.fatal&&(Y.fatal=console.error?console.error.bind(console,bo("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",bo("FATAL"))),e<=eu.error&&(Y.error=console.error?console.error.bind(console,bo("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",bo("ERROR"))),e<=eu.warn&&(Y.warn=console.warn?console.warn.bind(console,bo("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",bo("WARN"))),e<=eu.info&&(Y.info=console.info?console.info.bind(console,bo("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",bo("INFO"))),e<=eu.debug&&(Y.debug=console.debug?console.debug.bind(console,bo("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",bo("DEBUG"))),e<=eu.trace&&(Y.trace=console.debug?console.debug.bind(console,bo("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",bo("TRACE")))},"setLogLevel"),bo=o(t=>`%c${(0,CF.default)().format("ss.SSS")} : ${t} : `,"format")});var U2e,e0,CC,AF,N4=N(()=>{"use strict";U2e=Object.freeze({left:0,top:0,width:16,height:16}),e0=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),CC=Object.freeze({...U2e,...e0}),AF=Object.freeze({...CC,body:"",hidden:!1})});var H2e,_F,DF=N(()=>{"use strict";N4();H2e=Object.freeze({width:null,height:null}),_F=Object.freeze({...H2e,...e0})});var AC,M4,LF=N(()=>{"use strict";AC=o((t,e,r,n="")=>{let i=t.split(":");if(t.slice(0,1)==="@"){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let l=i.pop(),u=i.pop(),h={provider:i.length>0?i[0]:n,prefix:u,name:l};return e&&!M4(h)?null:h}let a=i[0],s=a.split("-");if(s.length>1){let l={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!M4(l)?null:l}if(r&&n===""){let l={provider:n,prefix:"",name:a};return e&&!M4(l,r)?null:l}return null},"stringToIcon"),M4=o((t,e)=>t?!!((e&&t.prefix===""||t.prefix)&&t.name):!1,"validateIconName")});function RF(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}var NF=N(()=>{"use strict";o(RF,"mergeIconTransformations")});function _C(t,e){let r=RF(t,e);for(let n in AF)n in e0?n in t&&!(n in r)&&(r[n]=e0[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}var MF=N(()=>{"use strict";N4();NF();o(_C,"mergeIconData")});function IF(t,e){let r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);function a(s){if(r[s])return i[s]=[];if(!(s in i)){i[s]=null;let l=n[s]&&n[s].parent,u=l&&a(l);u&&(i[s]=[l].concat(u))}return i[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(n))).forEach(a),i}var OF=N(()=>{"use strict";o(IF,"getIconsTree")});function PF(t,e,r){let n=t.icons,i=t.aliases||Object.create(null),a={};function s(l){a=_C(n[l]||i[l],a)}return o(s,"parse"),s(e),r.forEach(s),_C(t,a)}function DC(t,e){if(t.icons[e])return PF(t,e,[]);let r=IF(t,[e])[e];return r?PF(t,e,r):null}var BF=N(()=>{"use strict";MF();OF();o(PF,"internalGetIconData");o(DC,"getIconData")});function LC(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let n=t.split(W2e);if(n===null||!n.length)return t;let i=[],a=n.shift(),s=q2e.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?i.push(a):i.push(Math.ceil(l*e*r)/r)}else i.push(a);if(a=n.shift(),a===void 0)return i.join("");s=!s}}var W2e,q2e,FF=N(()=>{"use strict";W2e=/(-?[0-9.]*[0-9]+[0-9.]*)/g,q2e=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(LC,"calculateSize")});function Y2e(t,e="defs"){let r="",n=t.indexOf("<"+e);for(;n>=0;){let i=t.indexOf(">",n),a=t.indexOf("</"+e);if(i===-1||a===-1)break;let s=t.indexOf(">",a);if(s===-1)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(s+1)}return{defs:r,content:t}}function X2e(t,e){return t?"<defs>"+t+"</defs>"+e:e}function $F(t,e,r){let n=Y2e(t);return X2e(n.defs,e+n.content+r)}var zF=N(()=>{"use strict";o(Y2e,"splitSVGDefs");o(X2e,"mergeDefsAndContent");o($F,"wrapSVGContent")});function RC(t,e){let r={...CC,...t},n={..._F,...e},i={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,n].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,w=y.rotate;x?b?w+=2:(v.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),v.push("scale(-1 1)"),i.top=i.left=0):b&&(v.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),v.push("scale(1 -1)"),i.top=i.left=0);let C;switch(w<0&&(w-=Math.floor(w/4)*4),w=w%4,w){case 1:C=i.height/2+i.top,v.unshift("rotate(90 "+C.toString()+" "+C.toString()+")");break;case 2:v.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:C=i.width/2+i.left,v.unshift("rotate(-90 "+C.toString()+" "+C.toString()+")");break}w%2===1&&(i.left!==i.top&&(C=i.left,i.left=i.top,i.top=C),i.width!==i.height&&(C=i.width,i.width=i.height,i.height=C)),v.length&&(a=$F(a,'<g transform="'+v.join(" ")+'">',"</g>"))});let s=n.width,l=n.height,u=i.width,h=i.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=LC(d,u/h)):(f=s==="auto"?u:s,d=l===null?LC(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{j2e(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[i.left,i.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var j2e,GF=N(()=>{"use strict";N4();DF();FF();zF();j2e=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(RC,"iconToSVG")});function NC(t,e=Q2e){let r=[],n;for(;n=K2e.exec(t);)r.push(n[1]);if(!r.length)return t;let i="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(Z2e++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+i+"$3")}),t=t.replace(new RegExp(i,"g"),""),t}var K2e,Q2e,Z2e,VF=N(()=>{"use strict";K2e=/\sid="(\S+)"/g,Q2e="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),Z2e=0;o(NC,"replaceIDs")});function MC(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let n in e)r+=" "+n+'="'+e[n]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+r+">"+t+"</svg>"}var UF=N(()=>{"use strict";o(MC,"iconToHTML")});var WF=Mi((iit,HF)=>{"use strict";var t0=1e3,r0=t0*60,n0=r0*60,Wf=n0*24,J2e=Wf*7,exe=Wf*365.25;HF.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return txe(t);if(r==="number"&&isFinite(t))return e.long?nxe(t):rxe(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function txe(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*exe;case"weeks":case"week":case"w":return r*J2e;case"days":case"day":case"d":return r*Wf;case"hours":case"hour":case"hrs":case"hr":case"h":return r*n0;case"minutes":case"minute":case"mins":case"min":case"m":return r*r0;case"seconds":case"second":case"secs":case"sec":case"s":return r*t0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}o(txe,"parse");function rxe(t){var e=Math.abs(t);return e>=Wf?Math.round(t/Wf)+"d":e>=n0?Math.round(t/n0)+"h":e>=r0?Math.round(t/r0)+"m":e>=t0?Math.round(t/t0)+"s":t+"ms"}o(rxe,"fmtShort");function nxe(t){var e=Math.abs(t);return e>=Wf?I4(t,e,Wf,"day"):e>=n0?I4(t,e,n0,"hour"):e>=r0?I4(t,e,r0,"minute"):e>=t0?I4(t,e,t0,"second"):t+" ms"}o(nxe,"fmtLong");function I4(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}o(I4,"plural")});var YF=Mi((sit,qF)=>{"use strict";function ixe(t){r.debug=r,r.default=r,r.coerce=u,r.disable=s,r.enable=i,r.enabled=l,r.humanize=WF(),r.destroy=h,Object.keys(t).forEach(f=>{r[f]=t[f]}),r.names=[],r.skips=[],r.formatters={};function e(f){let d=0;for(let p=0;p<f.length;p++)d=(d<<5)-d+f.charCodeAt(p),d|=0;return r.colors[Math.abs(d)%r.colors.length]}o(e,"selectColor"),r.selectColor=e;function r(f){let d,p=null,m,g;function y(...v){if(!y.enabled)return;let x=y,b=Number(new Date),w=b-(d||b);x.diff=w,x.prev=d,x.curr=b,d=b,v[0]=r.coerce(v[0]),typeof v[0]!="string"&&v.unshift("%O");let C=0;v[0]=v[0].replace(/%([a-zA-Z%])/g,(E,A)=>{if(E==="%%")return"%";C++;let S=r.formatters[A];if(typeof S=="function"){let _=v[C];E=S.call(x,_),v.splice(C,1),C--}return E}),r.formatArgs.call(x,v),(x.log||r.log).apply(x,v)}return o(y,"debug"),y.namespace=f,y.useColors=r.useColors(),y.color=r.selectColor(f),y.extend=n,y.destroy=r.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:o(()=>p!==null?p:(m!==r.namespaces&&(m=r.namespaces,g=r.enabled(f)),g),"get"),set:o(v=>{p=v},"set")}),typeof r.init=="function"&&r.init(y),y}o(r,"createDebug");function n(f,d){let p=r(this.namespace+(typeof d>"u"?":":d)+f);return p.log=this.log,p}o(n,"extend");function i(f){r.save(f),r.namespaces=f,r.names=[],r.skips=[];let d=(typeof f=="string"?f:"").trim().replace(" ",",").split(",").filter(Boolean);for(let p of d)p[0]==="-"?r.skips.push(p.slice(1)):r.names.push(p)}o(i,"enable");function a(f,d){let p=0,m=0,g=-1,y=0;for(;p<f.length;)if(m<d.length&&(d[m]===f[p]||d[m]==="*"))d[m]==="*"?(g=m,y=p,m++):(p++,m++);else if(g!==-1)m=g+1,y++,p=y;else return!1;for(;m<d.length&&d[m]==="*";)m++;return m===d.length}o(a,"matchesTemplate");function s(){let f=[...r.names,...r.skips.map(d=>"-"+d)].join(",");return r.enable(""),f}o(s,"disable");function l(f){for(let d of r.skips)if(a(f,d))return!1;for(let d of r.names)if(a(f,d))return!0;return!1}o(l,"enabled");function u(f){return f instanceof Error?f.stack||f.message:f}o(u,"coerce");function h(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return o(h,"destroy"),r.enable(r.load()),r}o(ixe,"setup");qF.exports=ixe});var XF=Mi((qs,O4)=>{"use strict";qs.formatArgs=sxe;qs.save=oxe;qs.load=lxe;qs.useColors=axe;qs.storage=cxe();qs.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();qs.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function axe(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}o(axe,"useColors");function sxe(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+O4.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}o(sxe,"formatArgs");qs.log=console.debug||console.log||(()=>{});function oxe(t){try{t?qs.storage.setItem("debug",t):qs.storage.removeItem("debug")}catch{}}o(oxe,"save");function lxe(){let t;try{t=qs.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}o(lxe,"load");function cxe(){try{return localStorage}catch{}}o(cxe,"localstorage");O4.exports=YF()(qs);var{formatters:uxe}=O4.exports;uxe.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var uit,jF=N(()=>{"use strict";LF();BF();GF();VF();UF();uit=Sa(XF(),1)});var OC,IC,KF,P4,hxe,wo,tu=N(()=>{"use strict";vt();jF();OC={body:'<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/><text transform="translate(21.16 64.67)" style="fill: #fff; font-family: ArialMT, Arial; font-size: 67.75px;"><tspan x="0" y="0">?</tspan></text></g>',height:80,width:80},IC=new Map,KF=new Map,P4=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(Y.debug("Registering icon pack:",e.name),"loader"in e)KF.set(e.name,e.loader);else if("icons"in e)IC.set(e.name,e.icons);else throw Y.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),hxe=o(async(t,e)=>{let r=AC(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let i=IC.get(n);if(!i){let s=KF.get(n);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{i={...await s(),prefix:n},IC.set(n,i)}catch(l){throw Y.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=DC(i,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),wo=o(async(t,e)=>{let r;try{r=await hxe(t,e?.fallbackPrefix)}catch(a){Y.error(a),r=OC}let n=RC(r,e);return MC(NC(n.body),n.attributes)},"getIconSVG")});function B4(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=Array.from(typeof t=="string"?[t]:t);n[n.length-1]=n[n.length-1].replace(/\r?\n([\t ]*)$/,"");var i=n.reduce(function(l,u){var h=u.match(/\n([\t ]+|(?!\s).)/g);return h?l.concat(h.map(function(f){var d,p;return(p=(d=f.match(/[\t ]/g))===null||d===void 0?void 0:d.length)!==null&&p!==void 0?p:0})):l},[]);if(i.length){var a=new RegExp(` | |
| 4 | +[ ]{`+Math.min.apply(Math,i)+"}","g");n=n.map(function(l){return l.replace(a,` | |
| 5 | +`)})}n[0]=n[0].replace(/^\r?\n/,"");var s=n[0];return e.forEach(function(l,u){var h=s.match(/(?:^|\n)( *)$/),f=h?h[1]:"",d=l;typeof l=="string"&&l.includes(` | |
| 6 | +`)&&(d=String(l).split(` | |
| 7 | +`).map(function(p,m){return m===0?p:""+f+p}).join(` | |
| 8 | +`)),s+=d+n[u+1]}),s}var PC=N(()=>{"use strict";o(B4,"dedent")});var F4,qf,QF,$4=N(()=>{"use strict";F4=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,qf=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,QF=/\s*%%.*\n/gm});var i0,BC=N(()=>{"use strict";i0=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var Yf,a0,z4,FC,ZF,Xf=N(()=>{"use strict";vt();$4();BC();Yf={},a0=o(function(t,e){t=t.replace(F4,"").replace(qf,"").replace(QF,` | |
| 9 | +`);for(let[r,{detector:n}]of Object.entries(Yf))if(n(t,e))return r;throw new i0(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),z4=o((...t)=>{for(let{id:e,detector:r,loader:n}of t)FC(e,r,n)},"registerLazyLoadedDiagrams"),FC=o((t,e,r)=>{Yf[t]&&Y.warn(`Detector with key ${t} already exists. Overwriting.`),Yf[t]={detector:e,loader:r},Y.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),ZF=o(t=>Yf[t].loader,"getDiagramLoader")});var Ty,JF,$C=N(()=>{"use strict";Ty=function(){var t=o(function($e,Re,Ie,be){for(Ie=Ie||{},be=$e.length;be--;Ie[$e[be]]=Re);return Ie},"o"),e=[1,24],r=[1,25],n=[1,26],i=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],w=[1,35],C=[1,36],T=[1,37],E=[1,38],A=[1,39],S=[1,40],_=[1,41],I=[1,42],D=[1,43],k=[1,44],L=[1,45],R=[1,46],O=[1,47],M=[1,48],B=[1,50],F=[1,51],P=[1,52],z=[1,53],$=[1,54],H=[1,55],Q=[1,56],j=[1,57],ie=[1,58],ne=[1,59],le=[1,60],he=[14,42],K=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],X=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],te=[1,82],J=[1,83],se=[1,84],ue=[1,85],Z=[12,14,42],Se=[12,14,33,42],ce=[12,14,33,42,76,77,79,80],ae=[12,33],Oe=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],ge={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:o(function(Re,Ie,be,W,de,re,oe){var V=re.length-1;switch(de){case 3:W.setDirection("TB");break;case 4:W.setDirection("BT");break;case 5:W.setDirection("RL");break;case 6:W.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:W.setC4Type(re[V-3]);break;case 19:W.setTitle(re[V].substring(6)),this.$=re[V].substring(6);break;case 20:W.setAccDescription(re[V].substring(15)),this.$=re[V].substring(15);break;case 21:this.$=re[V].trim(),W.setTitle(this.$);break;case 22:case 23:this.$=re[V].trim(),W.setAccDescription(this.$);break;case 28:re[V].splice(2,0,"ENTERPRISE"),W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 29:re[V].splice(2,0,"SYSTEM"),W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 30:W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 31:re[V].splice(2,0,"CONTAINER"),W.addContainerBoundary(...re[V]),this.$=re[V];break;case 32:W.addDeploymentNode("node",...re[V]),this.$=re[V];break;case 33:W.addDeploymentNode("nodeL",...re[V]),this.$=re[V];break;case 34:W.addDeploymentNode("nodeR",...re[V]),this.$=re[V];break;case 35:W.popBoundaryParseStack();break;case 39:W.addPersonOrSystem("person",...re[V]),this.$=re[V];break;case 40:W.addPersonOrSystem("external_person",...re[V]),this.$=re[V];break;case 41:W.addPersonOrSystem("system",...re[V]),this.$=re[V];break;case 42:W.addPersonOrSystem("system_db",...re[V]),this.$=re[V];break;case 43:W.addPersonOrSystem("system_queue",...re[V]),this.$=re[V];break;case 44:W.addPersonOrSystem("external_system",...re[V]),this.$=re[V];break;case 45:W.addPersonOrSystem("external_system_db",...re[V]),this.$=re[V];break;case 46:W.addPersonOrSystem("external_system_queue",...re[V]),this.$=re[V];break;case 47:W.addContainer("container",...re[V]),this.$=re[V];break;case 48:W.addContainer("container_db",...re[V]),this.$=re[V];break;case 49:W.addContainer("container_queue",...re[V]),this.$=re[V];break;case 50:W.addContainer("external_container",...re[V]),this.$=re[V];break;case 51:W.addContainer("external_container_db",...re[V]),this.$=re[V];break;case 52:W.addContainer("external_container_queue",...re[V]),this.$=re[V];break;case 53:W.addComponent("component",...re[V]),this.$=re[V];break;case 54:W.addComponent("component_db",...re[V]),this.$=re[V];break;case 55:W.addComponent("component_queue",...re[V]),this.$=re[V];break;case 56:W.addComponent("external_component",...re[V]),this.$=re[V];break;case 57:W.addComponent("external_component_db",...re[V]),this.$=re[V];break;case 58:W.addComponent("external_component_queue",...re[V]),this.$=re[V];break;case 60:W.addRel("rel",...re[V]),this.$=re[V];break;case 61:W.addRel("birel",...re[V]),this.$=re[V];break;case 62:W.addRel("rel_u",...re[V]),this.$=re[V];break;case 63:W.addRel("rel_d",...re[V]),this.$=re[V];break;case 64:W.addRel("rel_l",...re[V]),this.$=re[V];break;case 65:W.addRel("rel_r",...re[V]),this.$=re[V];break;case 66:W.addRel("rel_b",...re[V]),this.$=re[V];break;case 67:re[V].splice(0,1),W.addRel("rel",...re[V]),this.$=re[V];break;case 68:W.updateElStyle("update_el_style",...re[V]),this.$=re[V];break;case 69:W.updateRelStyle("update_rel_style",...re[V]),this.$=re[V];break;case 70:W.updateLayoutConfig("update_layout_config",...re[V]),this.$=re[V];break;case 71:this.$=[re[V]];break;case 72:re[V].unshift(re[V-1]),this.$=re[V];break;case 73:case 75:this.$=re[V].trim();break;case 74:let xe={};xe[re[V-1].trim()]=re[V].trim(),this.$=xe;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:70,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:71,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:72,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:73,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{14:[1,74]},t(he,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le}),t(he,[2,14]),t(K,[2,16],{12:[1,76]}),t(he,[2,36],{12:[1,77]}),t(X,[2,19]),t(X,[2,20]),{25:[1,78]},{27:[1,79]},t(X,[2,23]),{35:80,75:81,76:te,77:J,79:se,80:ue},{35:86,75:81,76:te,77:J,79:se,80:ue},{35:87,75:81,76:te,77:J,79:se,80:ue},{35:88,75:81,76:te,77:J,79:se,80:ue},{35:89,75:81,76:te,77:J,79:se,80:ue},{35:90,75:81,76:te,77:J,79:se,80:ue},{35:91,75:81,76:te,77:J,79:se,80:ue},{35:92,75:81,76:te,77:J,79:se,80:ue},{35:93,75:81,76:te,77:J,79:se,80:ue},{35:94,75:81,76:te,77:J,79:se,80:ue},{35:95,75:81,76:te,77:J,79:se,80:ue},{35:96,75:81,76:te,77:J,79:se,80:ue},{35:97,75:81,76:te,77:J,79:se,80:ue},{35:98,75:81,76:te,77:J,79:se,80:ue},{35:99,75:81,76:te,77:J,79:se,80:ue},{35:100,75:81,76:te,77:J,79:se,80:ue},{35:101,75:81,76:te,77:J,79:se,80:ue},{35:102,75:81,76:te,77:J,79:se,80:ue},{35:103,75:81,76:te,77:J,79:se,80:ue},{35:104,75:81,76:te,77:J,79:se,80:ue},t(Z,[2,59]),{35:105,75:81,76:te,77:J,79:se,80:ue},{35:106,75:81,76:te,77:J,79:se,80:ue},{35:107,75:81,76:te,77:J,79:se,80:ue},{35:108,75:81,76:te,77:J,79:se,80:ue},{35:109,75:81,76:te,77:J,79:se,80:ue},{35:110,75:81,76:te,77:J,79:se,80:ue},{35:111,75:81,76:te,77:J,79:se,80:ue},{35:112,75:81,76:te,77:J,79:se,80:ue},{35:113,75:81,76:te,77:J,79:se,80:ue},{35:114,75:81,76:te,77:J,79:se,80:ue},{35:115,75:81,76:te,77:J,79:se,80:ue},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{12:[1,118],33:[1,117]},{35:119,75:81,76:te,77:J,79:se,80:ue},{35:120,75:81,76:te,77:J,79:se,80:ue},{35:121,75:81,76:te,77:J,79:se,80:ue},{35:122,75:81,76:te,77:J,79:se,80:ue},{35:123,75:81,76:te,77:J,79:se,80:ue},{35:124,75:81,76:te,77:J,79:se,80:ue},{35:125,75:81,76:te,77:J,79:se,80:ue},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(he,[2,15]),t(K,[2,17],{21:22,19:130,22:e,23:r,24:n,26:i,28:a}),t(he,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:n,26:i,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le}),t(X,[2,21]),t(X,[2,22]),t(Z,[2,39]),t(Se,[2,71],{75:81,35:132,76:te,77:J,79:se,80:ue}),t(ce,[2,73]),{78:[1,133]},t(ce,[2,75]),t(ce,[2,76]),t(Z,[2,40]),t(Z,[2,41]),t(Z,[2,42]),t(Z,[2,43]),t(Z,[2,44]),t(Z,[2,45]),t(Z,[2,46]),t(Z,[2,47]),t(Z,[2,48]),t(Z,[2,49]),t(Z,[2,50]),t(Z,[2,51]),t(Z,[2,52]),t(Z,[2,53]),t(Z,[2,54]),t(Z,[2,55]),t(Z,[2,56]),t(Z,[2,57]),t(Z,[2,58]),t(Z,[2,60]),t(Z,[2,61]),t(Z,[2,62]),t(Z,[2,63]),t(Z,[2,64]),t(Z,[2,65]),t(Z,[2,66]),t(Z,[2,67]),t(Z,[2,68]),t(Z,[2,69]),t(Z,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(ae,[2,28]),t(ae,[2,29]),t(ae,[2,30]),t(ae,[2,31]),t(ae,[2,32]),t(ae,[2,33]),t(ae,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(K,[2,18]),t(he,[2,38]),t(Se,[2,72]),t(ce,[2,74]),t(Z,[2,24]),t(Z,[2,35]),t(Oe,[2,25]),t(Oe,[2,26],{12:[1,138]}),t(Oe,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:o(function(Re,Ie){if(Ie.recoverable)this.trace(Re);else{var be=new Error(Re);throw be.hash=Ie,be}},"parseError"),parse:o(function(Re){var Ie=this,be=[0],W=[],de=[null],re=[],oe=this.table,V="",xe=0,q=0,pe=0,ve=2,Pe=1,_e=re.slice.call(arguments,1),we=Object.create(this.lexer),Ve={yy:{}};for(var De in this.yy)Object.prototype.hasOwnProperty.call(this.yy,De)&&(Ve.yy[De]=this.yy[De]);we.setInput(Re,Ve.yy),Ve.yy.lexer=we,Ve.yy.parser=this,typeof we.yylloc>"u"&&(we.yylloc={});var qe=we.yylloc;re.push(qe);var at=we.options&&we.options.ranges;typeof Ve.yy.parseError=="function"?this.parseError=Ve.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Rt(nt){be.length=be.length-2*nt,de.length=de.length-nt,re.length=re.length-nt}o(Rt,"popStack");function st(){var nt;return nt=W.pop()||we.lex()||Pe,typeof nt!="number"&&(nt instanceof Array&&(W=nt,nt=W.pop()),nt=Ie.symbols_[nt]||nt),nt}o(st,"lex");for(var Ue,ct,We,ot,Yt,bt,Mt={},xt,ut,Et,ft;;){if(We=be[be.length-1],this.defaultActions[We]?ot=this.defaultActions[We]:((Ue===null||typeof Ue>"u")&&(Ue=st()),ot=oe[We]&&oe[We][Ue]),typeof ot>"u"||!ot.length||!ot[0]){var yt="";ft=[];for(xt in oe[We])this.terminals_[xt]&&xt>ve&&ft.push("'"+this.terminals_[xt]+"'");we.showPosition?yt="Parse error on line "+(xe+1)+`: | |
| 10 | +`+we.showPosition()+` | |
| 11 | +Expecting `+ft.join(", ")+", got '"+(this.terminals_[Ue]||Ue)+"'":yt="Parse error on line "+(xe+1)+": Unexpected "+(Ue==Pe?"end of input":"'"+(this.terminals_[Ue]||Ue)+"'"),this.parseError(yt,{text:we.match,token:this.terminals_[Ue]||Ue,line:we.yylineno,loc:qe,expected:ft})}if(ot[0]instanceof Array&&ot.length>1)throw new Error("Parse Error: multiple actions possible at state: "+We+", token: "+Ue);switch(ot[0]){case 1:be.push(Ue),de.push(we.yytext),re.push(we.yylloc),be.push(ot[1]),Ue=null,ct?(Ue=ct,ct=null):(q=we.yyleng,V=we.yytext,xe=we.yylineno,qe=we.yylloc,pe>0&&pe--);break;case 2:if(ut=this.productions_[ot[1]][1],Mt.$=de[de.length-ut],Mt._$={first_line:re[re.length-(ut||1)].first_line,last_line:re[re.length-1].last_line,first_column:re[re.length-(ut||1)].first_column,last_column:re[re.length-1].last_column},at&&(Mt._$.range=[re[re.length-(ut||1)].range[0],re[re.length-1].range[1]]),bt=this.performAction.apply(Mt,[V,q,xe,Ve.yy,ot[1],de,re].concat(_e)),typeof bt<"u")return bt;ut&&(be=be.slice(0,-1*ut*2),de=de.slice(0,-1*ut),re=re.slice(0,-1*ut)),be.push(this.productions_[ot[1]][0]),de.push(Mt.$),re.push(Mt._$),Et=oe[be[be.length-2]][be[be.length-1]],be.push(Et);break;case 3:return!0}}return!0},"parse")},ze=function(){var $e={EOF:1,parseError:o(function(Ie,be){if(this.yy.parser)this.yy.parser.parseError(Ie,be);else throw new Error(Ie)},"parseError"),setInput:o(function(Re,Ie){return this.yy=Ie||this.yy||{},this._input=Re,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Re=this._input[0];this.yytext+=Re,this.yyleng++,this.offset++,this.match+=Re,this.matched+=Re;var Ie=Re.match(/(?:\r\n?|\n).*/g);return Ie?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Re},"input"),unput:o(function(Re){var Ie=Re.length,be=Re.split(/(?:\r\n?|\n)/g);this._input=Re+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ie),this.offset-=Ie;var W=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),be.length-1&&(this.yylineno-=be.length-1);var de=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:be?(be.length===W.length?this.yylloc.first_column:0)+W[W.length-be.length].length-be[0].length:this.yylloc.first_column-Ie},this.options.ranges&&(this.yylloc.range=[de[0],de[0]+this.yyleng-Ie]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 12 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Re){this.unput(this.match.slice(Re))},"less"),pastInput:o(function(){var Re=this.matched.substr(0,this.matched.length-this.match.length);return(Re.length>20?"...":"")+Re.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Re=this.match;return Re.length<20&&(Re+=this._input.substr(0,20-Re.length)),(Re.substr(0,20)+(Re.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Re=this.pastInput(),Ie=new Array(Re.length+1).join("-");return Re+this.upcomingInput()+` | |
| 13 | +`+Ie+"^"},"showPosition"),test_match:o(function(Re,Ie){var be,W,de;if(this.options.backtrack_lexer&&(de={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(de.yylloc.range=this.yylloc.range.slice(0))),W=Re[0].match(/(?:\r\n?|\n).*/g),W&&(this.yylineno+=W.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:W?W[W.length-1].length-W[W.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Re[0].length},this.yytext+=Re[0],this.match+=Re[0],this.matches=Re,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Re[0].length),this.matched+=Re[0],be=this.performAction.call(this,this.yy,this,Ie,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),be)return be;if(this._backtrack){for(var re in de)this[re]=de[re];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Re,Ie,be,W;this._more||(this.yytext="",this.match="");for(var de=this._currentRules(),re=0;re<de.length;re++)if(be=this._input.match(this.rules[de[re]]),be&&(!Ie||be[0].length>Ie[0].length)){if(Ie=be,W=re,this.options.backtrack_lexer){if(Re=this.test_match(be,de[re]),Re!==!1)return Re;if(this._backtrack){Ie=!1;continue}else return!1}else if(!this.options.flex)break}return Ie?(Re=this.test_match(Ie,de[W]),Re!==!1?Re:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 14 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ie=this.next();return Ie||this.lex()},"lex"),begin:o(function(Ie){this.conditionStack.push(Ie)},"begin"),popState:o(function(){var Ie=this.conditionStack.length-1;return Ie>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ie){return Ie=this.conditionStack.length-1-Math.abs(Ie||0),Ie>=0?this.conditionStack[Ie]:"INITIAL"},"topState"),pushState:o(function(Ie){this.begin(Ie)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Ie,be,W,de){var re=de;switch(W){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";break;case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return $e}();ge.lexer=ze;function He(){this.yy={}}return o(He,"Parser"),He.prototype=ge,ge.Parser=He,new He}();Ty.parser=Ty;JF=Ty});var zC,Gn,s0=N(()=>{"use strict";zC=o((t,e,{depth:r=2,clobber:n=!1}={})=>{let i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>zC(t,a,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=zC(t[a],e[a],{depth:r-1,clobber:n})):(n||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Gn=zC});var G4,e$,t$=N(()=>{"use strict";G4={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:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},n)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let i=r<.5?r*(1+e):r+e-r*e,a=2*r-i;switch(n){case"r":return G4.hue2rgb(a,i,t+.3333333333333333)*255;case"g":return G4.hue2rgb(a,i,t)*255;case"b":return G4.hue2rgb(a,i,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;let i=Math.max(t,e,r),a=Math.min(t,e,r),s=(i+a)/2;if(n==="l")return s*100;if(i===a)return 0;let l=i-a,u=s>.5?l/(2-i-a):l/(i+a);if(n==="s")return u*100;switch(i){case t:return((e-r)/l+(e<r?6:0))*60;case e:return((r-t)/l+2)*60;case r:return((t-e)/l+4)*60;default:return-1}},"rgb2hsl")},e$=G4});var fxe,r$,n$=N(()=>{"use strict";fxe={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},r$=fxe});var dxe,i$,a$=N(()=>{"use strict";dxe={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},i$=dxe});var pxe,jt,Wl=N(()=>{"use strict";t$();n$();a$();pxe={channel:e$,lang:r$,unit:i$},jt=pxe});var ru,Ii,ky=N(()=>{"use strict";Wl();ru={};for(let t=0;t<=255;t++)ru[t]=jt.unit.dec2hex(t);Ii={ALL:0,RGB:1,HSL:2}});var GC,s$,o$=N(()=>{"use strict";ky();GC=class{static{o(this,"Type")}constructor(){this.type=Ii.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=Ii.ALL}is(e){return this.type===e}},s$=GC});var VC,l$,c$=N(()=>{"use strict";Wl();o$();ky();VC=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new s$}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=Ii.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:n,l:i}=e;r===void 0&&(e.h=jt.channel.rgb2hsl(e,"h")),n===void 0&&(e.s=jt.channel.rgb2hsl(e,"s")),i===void 0&&(e.l=jt.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:n,b:i}=e;r===void 0&&(e.r=jt.channel.hsl2rgb(e,"r")),n===void 0&&(e.g=jt.channel.hsl2rgb(e,"g")),i===void 0&&(e.b=jt.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(Ii.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(Ii.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(Ii.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(Ii.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(Ii.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(Ii.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},l$=VC});var mxe,ih,Ey=N(()=>{"use strict";c$();mxe=new l$({r:0,g:0,b:0,a:0},"transparent"),ih=mxe});var u$,jf,UC=N(()=>{"use strict";Ey();ky();u$={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(u$.re);if(!e)return;let r=e[1],n=parseInt(r,16),i=r.length,a=i%4===0,s=i>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return ih.set({r:(n>>u*(h+3)&f)*l,g:(n>>u*(h+2)&f)*l,b:(n>>u*(h+1)&f)*l,a:a?(n&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`#${ru[Math.round(e)]}${ru[Math.round(r)]}${ru[Math.round(n)]}${ru[Math.round(i*255)]}`:`#${ru[Math.round(e)]}${ru[Math.round(r)]}${ru[Math.round(n)]}`},"stringify")},jf=u$});var V4,Sy,h$=N(()=>{"use strict";Wl();Ey();V4={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:o(t=>{let e=t.match(V4.hueRe);if(e){let[,r,n]=e;switch(n){case"grad":return jt.channel.clamp.h(parseFloat(r)*.9);case"rad":return jt.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return jt.channel.clamp.h(parseFloat(r)*360)}}return jt.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(V4.re);if(!r)return;let[,n,i,a,s,l]=r;return ih.set({h:V4._hue2deg(n),s:jt.channel.clamp.s(parseFloat(i)),l:jt.channel.clamp.l(parseFloat(a)),a:s?jt.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%, ${i})`:`hsl(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%)`},"stringify")},Sy=V4});var U4,HC,f$=N(()=>{"use strict";UC();U4={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:o(t=>{t=t.toLowerCase();let e=U4.colors[t];if(e)return jf.parse(e)},"parse"),stringify:o(t=>{let e=jf.stringify(t);for(let r in U4.colors)if(U4.colors[r]===e)return r},"stringify")},HC=U4});var d$,Cy,p$=N(()=>{"use strict";Wl();Ey();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:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(d$.re);if(!r)return;let[,n,i,a,s,l,u,h,f]=r;return ih.set({r:jt.channel.clamp.r(i?parseFloat(n)*2.55:parseFloat(n)),g:jt.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:jt.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?jt.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)}, ${jt.lang.round(i)})`:`rgb(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)})`},"stringify")},Cy=d$});var gxe,Oi,nu=N(()=>{"use strict";UC();h$();f$();p$();ky();gxe={format:{keyword:HC,hex:jf,rgb:Cy,rgba:Cy,hsl:Sy,hsla:Sy},parse:o(t=>{if(typeof t!="string")return t;let e=jf.parse(t)||Cy.parse(t)||Sy.parse(t)||HC.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(Ii.HSL)||t.data.r===void 0?Sy.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Cy.stringify(t):jf.stringify(t),"stringify")},Oi=gxe});var yxe,H4,WC=N(()=>{"use strict";Wl();nu();yxe=o((t,e)=>{let r=Oi.parse(t);for(let n in e)r[n]=jt.channel.clamp[n](e[n]);return Oi.stringify(r)},"change"),H4=yxe});var vxe,qa,qC=N(()=>{"use strict";Wl();Ey();nu();WC();vxe=o((t,e,r=0,n=1)=>{if(typeof t!="number")return H4(t,{a:e});let i=ih.set({r:jt.channel.clamp.r(t),g:jt.channel.clamp.g(e),b:jt.channel.clamp.b(r),a:jt.channel.clamp.a(n)});return Oi.stringify(i)},"rgba"),qa=vxe});var xxe,Kf,m$=N(()=>{"use strict";Wl();nu();xxe=o((t,e)=>jt.lang.round(Oi.parse(t)[e]),"channel"),Kf=xxe});var bxe,g$,y$=N(()=>{"use strict";Wl();nu();bxe=o(t=>{let{r:e,g:r,b:n}=Oi.parse(t),i=.2126*jt.channel.toLinear(e)+.7152*jt.channel.toLinear(r)+.0722*jt.channel.toLinear(n);return jt.lang.round(i)},"luminance"),g$=bxe});var wxe,v$,x$=N(()=>{"use strict";y$();wxe=o(t=>g$(t)>=.5,"isLight"),v$=wxe});var Txe,ca,b$=N(()=>{"use strict";x$();Txe=o(t=>!v$(t),"isDark"),ca=Txe});var kxe,W4,YC=N(()=>{"use strict";Wl();nu();kxe=o((t,e,r)=>{let n=Oi.parse(t),i=n[e],a=jt.channel.clamp[e](i+r);return i!==a&&(n[e]=a),Oi.stringify(n)},"adjustChannel"),W4=kxe});var Exe,Dt,w$=N(()=>{"use strict";YC();Exe=o((t,e)=>W4(t,"l",e),"lighten"),Dt=Exe});var Sxe,Ot,T$=N(()=>{"use strict";YC();Sxe=o((t,e)=>W4(t,"l",-e),"darken"),Ot=Sxe});var Cxe,Me,k$=N(()=>{"use strict";nu();WC();Cxe=o((t,e)=>{let r=Oi.parse(t),n={};for(let i in e)e[i]&&(n[i]=r[i]+e[i]);return H4(t,n)},"adjust"),Me=Cxe});var Axe,E$,S$=N(()=>{"use strict";nu();qC();Axe=o((t,e,r=50)=>{let{r:n,g:i,b:a,a:s}=Oi.parse(t),{r:l,g:u,b:h,a:f}=Oi.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=n*y+l*v,b=i*y+u*v,w=a*y+h*v,C=s*d+f*(1-d);return qa(x,b,w,C)},"mix"),E$=Axe});var _xe,wt,C$=N(()=>{"use strict";nu();S$();_xe=o((t,e=100)=>{let r=Oi.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,E$(r,t,e)},"invert"),wt=_xe});var A$=N(()=>{"use strict";qC();m$();b$();w$();T$();k$();C$()});var Ys=N(()=>{"use strict";A$()});var ah,sh,Ay=N(()=>{"use strict";ah="#ffffff",sh="#f2f2f2"});var Ti,o0=N(()=>{"use strict";Ys();Ti=o((t,e)=>e?Me(t,{s:-40,l:10}):Me(t,{s:-40,l:-10}),"mkBorder")});var jC,_$,D$=N(()=>{"use strict";Ys();Ay();o0();jC=class{static{o(this,"Theme")}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(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||Me(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||Me(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Ti(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Ti(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||wt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||wt(this.tertiaryColor),this.lineColor=this.lineColor||wt(this.background),this.arrowheadColor=this.arrowheadColor||wt(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?Ot(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||this.actorBorder,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||Ot(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||wt(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||Dt(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.darkMode?(this.rowOdd=this.rowOdd||Ot(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10)):(this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.mainBkg,5)),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||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScale"+r]=Ot(this["cScale"+r],75);else for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScale"+r]=Ot(this["cScale"+r],25);for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScaleInv"+r]=this["cScaleInv"+r]||wt(this["cScale"+r]);for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this.darkMode?this["cScalePeer"+r]=this["cScalePeer"+r]||Dt(this["cScale"+r],10):this["cScalePeer"+r]=this["cScalePeer"+r]||Ot(this["cScale"+r],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScaleLabel"+r]=this["cScaleLabel"+r]||this.scaleLabelColor;let e=this.darkMode?-4:-1;for(let r=0;r<5;r++)this["surface"+r]=this["surface"+r]||Me(this.mainBkg,{h:180,s:-15,l:e*(5+r*3)}),this["surfacePeer"+r]=this["surfacePeer"+r]||Me(this.mainBkg,{h:180,s:-15,l:e*(8+r*3)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||Me(this.primaryColor,{h:64}),this.fillType3=this.fillType3||Me(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||Me(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||Me(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||Me(this.primaryColor,{h:128}),this.fillType7=this.fillType7||Me(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||Me(this.primaryColor,{l:-10}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-10}),this.pie6=this.pie6||Me(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||Me(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||Me(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.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.archEdgeColor=this.archEdgeColor||"#777",this.archEdgeArrowColor=this.archEdgeArrowColor||"#777",this.archEdgeWidth=this.archEdgeWidth||"3",this.archGroupBorderColor=this.archGroupBorderColor||"#000",this.archGroupBorderWidth=this.archGroupBorderWidth||"2px",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(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:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.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?Ot(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||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(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||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},_$=o(t=>{let e=new jC;return e.calculate(t),e},"getThemeVariables")});var KC,L$,R$=N(()=>{"use strict";Ys();o0();KC=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Dt(this.primaryColor,16),this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=wt(this.background),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Dt(wt("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=qa(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=Ot("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Ot(this.sectionBkgColor,10),this.taskBorderColor=qa(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=qa(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.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Dt(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=Dt(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=Dt(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,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=Dt(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.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,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=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(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||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330});for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||wt(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScalePeer"+e]=this["cScalePeer"+e]||Dt(this["cScale"+e],10);for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(-10+e*4)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(-7+e*4)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["pie"+e]=this["cScale"+e];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||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(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:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22"},this.packet={startByteColor:this.primaryTextColor,endByteColor:this.primaryTextColor,labelColor:this.primaryTextColor,titleColor:this.primaryTextColor,blockStrokeColor:this.primaryTextColor,blockFillColor:this.background},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},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?Ot(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=Dt(this.secondaryColor,20),this.git1=Dt(this.pie2||this.secondaryColor,20),this.git2=Dt(this.pie3||this.tertiaryColor,20),this.git3=Dt(this.pie4||Me(this.primaryColor,{h:-30}),20),this.git4=Dt(this.pie5||Me(this.primaryColor,{h:-60}),20),this.git5=Dt(this.pie6||Me(this.primaryColor,{h:-90}),10),this.git6=Dt(this.pie7||Me(this.primaryColor,{h:60}),10),this.git7=Dt(this.pie8||Me(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(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||Dt(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Dt(this.background,2),this.nodeBorder=this.nodeBorder||"#999"}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},L$=o(t=>{let e=new KC;return e.calculate(t),e},"getThemeVariables")});var QC,oh,_y=N(()=>{"use strict";Ys();o0();Ay();QC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=Me(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(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="rgba(232,232,232, 0.8)",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="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="#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=qa(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.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=Ot(this["cScale"+e],10),this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||Me(this["cScale"+e],{h:180});for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,l:-(7+e*5)});if(this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,this.labelTextColor!=="calculated"){this.cScaleLabel0=this.cScaleLabel0||wt(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||wt(this.labelTextColor);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||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=Dt(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.actorLineColor=this.actorBorder,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.rowOdd=this.rowOdd||Dt(this.primaryColor,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.primaryColor,1),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=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||Me(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||Me(this.primaryColor,{l:-10}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-30}),this.pie6=this.pie6||Me(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||Me(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||Me(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||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(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.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.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||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||Ot(wt(this.git0),25),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(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||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(Object.keys(this).forEach(n=>{this[n]==="calculated"&&(this[n]=void 0)}),typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},oh=o(t=>{let e=new QC;return e.calculate(t),e},"getThemeVariables")});var ZC,N$,M$=N(()=>{"use strict";Ys();Ay();o0();ZC=class{static{o(this,"Theme")}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=Dt("#cde498",10),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.primaryColor),this.lineColor=wt(this.background),this.textColor=wt(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="calculated",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.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=Ot(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.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=Ot(this["cScale"+e],10),this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||Me(this["cScale"+e],{h:180});this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(8+e*5)});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.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.mainBkg,20),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=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(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||Me(this.primaryColor,{l:-30}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-30}),this.pie6=this.pie6||Me(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||Me(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||Me(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||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(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.packet={startByteColor:this.primaryTextColor,endByteColor:this.primaryTextColor,labelColor:this.primaryTextColor,titleColor:this.primaryTextColor,blockStrokeColor:this.primaryTextColor,blockFillColor:this.mainBkg},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.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||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(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||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},N$=o(t=>{let e=new ZC;return e.calculate(t),e},"getThemeVariables")});var JC,I$,O$=N(()=>{"use strict";Ys();o0();Ay();JC=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Dt(this.contrast,55),this.background="#ffffff",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(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=this.actorBorder,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.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=Dt(this.contrast,55),this.border2=this.contrast,this.actorBorder=Dt(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,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 e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||wt(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this.darkMode?this["cScalePeer"+e]=this["cScalePeer"+e]||Dt(this["cScale"+e],10):this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{l:-(8+e*5)});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=Dt(this.contrast,30),this.sectionBkgColor2=Dt(this.contrast,30),this.taskBorderColor=Ot(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=Dt(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=Ot(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,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=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128});for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["pie"+e]=this["cScale"+e];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||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(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:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},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=Ot(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||Me(this.primaryColor,{h:-30}),this.git4=this.pie5||Me(this.primaryColor,{h:-60}),this.git5=this.pie6||Me(this.primaryColor,{h:-90}),this.git6=this.pie7||Me(this.primaryColor,{h:60}),this.git7=this.pie8||Me(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(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||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},I$=o(t=>{let e=new JC;return e.calculate(t),e},"getThemeVariables")});var To,q4=N(()=>{"use strict";D$();R$();_y();M$();O$();To={base:{getThemeVariables:_$},dark:{getThemeVariables:L$},default:{getThemeVariables:oh},forest:{getThemeVariables:N$},neutral:{getThemeVariables:I$}}});var ql,P$=N(()=>{"use strict";ql={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},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,hideEmptyMembersBox:!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,nodeSpacing:140,rankSpacing:80,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},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},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,parallelCommits:!1,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:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var B$,F$,$$,or,Ya=N(()=>{"use strict";q4();P$();B$={...ql,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF"},themeCSS:void 0,themeVariables:To.default.getThemeVariables(),sequence:{...ql.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...ql.gantt,tickInterval:void 0,useWidth:void 0},c4:{...ql.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...ql.pie,useWidth:984},xyChart:{...ql.xyChart,useWidth:void 0},requirement:{...ql.requirement,useWidth:void 0},packet:{...ql.packet},radar:{...ql.radar}},F$=o((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:typeof t[n]=="object"&&t[n]!==null?[...r,e+n,...F$(t[n],"")]:[...r,e+n],[]),"keyify"),$$=new Set(F$(B$,"")),or=B$});var l0,Dxe,e7=N(()=>{"use strict";Ya();vt();l0=o(t=>{if(Y.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>l0(e));return}for(let e of Object.keys(t)){if(Y.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!$$.has(e)||t[e]==null){Y.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){Y.debug("sanitizing object",e),l0(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let n of r)e.includes(n)&&(Y.debug("sanitizing css option",e),t[e]=Dxe(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}Y.debug("After sanitization",t)}},"sanitizeDirective"),Dxe=o(t=>{let e=0,r=0;for(let n of t){if(e<r)return"{ /* ERROR: Unbalanced CSS */ }";n==="{"?e++:n==="}"&&r++}return e!==r?"{ /* ERROR: Unbalanced CSS */ }":t},"sanitizeCss")});var lh,xs,G$,c0,Dy,Y4,t7,V$,U$,r7,X4,cr,H$,W$,Ly,Lxe,z$,Rxe,q$,ji=N(()=>{"use strict";s0();vt();q4();Ya();e7();lh=Object.freeze(or),xs=Gn({},lh),c0=[],Dy=Gn({},lh),Y4=o((t,e)=>{let r=Gn({},t),n={};for(let i of e)H$(i),n=Gn(n,i);if(r=Gn(r,n),n.theme&&n.theme in To){let i=Gn({},G$),a=Gn(i.themeVariables||{},n.themeVariables);r.theme&&r.theme in To&&(r.themeVariables=To[r.theme].getThemeVariables(a))}return Dy=r,q$(Dy),Dy},"updateCurrentConfig"),t7=o(t=>(xs=Gn({},lh),xs=Gn(xs,t),t.theme&&To[t.theme]&&(xs.themeVariables=To[t.theme].getThemeVariables(t.themeVariables)),Y4(xs,c0),xs),"setSiteConfig"),V$=o(t=>{G$=Gn({},t)},"saveConfigFromInitialize"),U$=o(t=>(xs=Gn(xs,t),Y4(xs,c0),xs),"updateSiteConfig"),r7=o(()=>Gn({},xs),"getSiteConfig"),X4=o(t=>(q$(t),Gn(Dy,t),cr()),"setConfig"),cr=o(()=>Gn({},Dy),"getConfig"),H$=o(t=>{t&&(["secure",...xs.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(Y.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=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&H$(t[e])}))},"sanitize"),W$=o(t=>{l0(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),c0.push(t),Y4(xs,c0)},"addDirective"),Ly=o((t=xs)=>{c0=[],Y4(t,c0)},"reset"),Lxe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},z$={},Rxe=o(t=>{z$[t]||(Y.warn(Lxe[t]),z$[t]=!0)},"issueWarning"),q$=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&Rxe("LAZY_LOAD_DEPRECATED")},"checkConfig")});function Ka(t){return function(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];return l7(t,e,n)}}function $xe(t){return function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return c7(t,r)}}function Cr(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Q4;Y$&&Y$(t,null);let n=e.length;for(;n--;){let i=e[n];if(typeof i=="string"){let a=r(i);a!==i&&(Nxe(e)||(e[n]=a),i=a)}t[i]=!0}return t}function zxe(t){for(let e=0;e<t.length;e++)sl(t,e)||(t[e]=null);return t}function Qf(t){let e=nz(null);for(let[r,n]of rz(t))sl(t,r)&&(Array.isArray(n)?e[r]=zxe(n):n&&typeof n=="object"&&n.constructor===Object?e[r]=Qf(n):e[r]=n);return e}function Iy(t,e){for(;t!==null;){let n=Ixe(t,e);if(n){if(n.get)return Ka(n.get);if(typeof n.value=="function")return Ka(n.value)}t=Mxe(t)}function r(){return null}return o(r,"fallbackValue"),r}function sz(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Qxe(),e=o(At=>sz(At),"DOMPurify");if(e.version="3.2.4",e.removed=[],!t||!t.document||t.document.nodeType!==Oy.document||!t.Element)return e.isSupported=!1,e;let{document:r}=t,n=r,i=n.currentScript,{DocumentFragment:a,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:h,NamedNodeMap:f=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:m}=t,g=u.prototype,y=Iy(g,"cloneNode"),v=Iy(g,"remove"),x=Iy(g,"nextSibling"),b=Iy(g,"childNodes"),w=Iy(g,"parentNode");if(typeof s=="function"){let At=r.createElement("template");At.content&&At.content.ownerDocument&&(r=At.content.ownerDocument)}let C,T="",{implementation:E,createNodeIterator:A,createDocumentFragment:S,getElementsByTagName:_}=r,{importNode:I}=n,D=tz();e.isSupported=typeof rz=="function"&&typeof w=="function"&&E&&E.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:k,ERB_EXPR:L,TMPLIT_EXPR:R,DATA_ATTR:O,ARIA_ATTR:M,IS_SCRIPT_OR_DATA:B,ATTR_WHITESPACE:F,CUSTOM_ELEMENT:P}=ez,{IS_ALLOWED_URI:z}=ez,$=null,H=Cr({},[...K$,...i7,...a7,...s7,...Q$]),Q=null,j=Cr({},[...Z$,...o7,...J$,...K4]),ie=Object.seal(nz(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}})),ne=null,le=null,he=!0,K=!0,X=!1,te=!0,J=!1,se=!0,ue=!1,Z=!1,Se=!1,ce=!1,ae=!1,Oe=!1,ge=!0,ze=!1,He="user-content-",$e=!0,Re=!1,Ie={},be=null,W=Cr({},["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"]),de=null,re=Cr({},["audio","video","img","source","image","track"]),oe=null,V=Cr({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),xe="http://www.w3.org/1998/Math/MathML",q="http://www.w3.org/2000/svg",pe="http://www.w3.org/1999/xhtml",ve=pe,Pe=!1,_e=null,we=Cr({},[xe,q,pe],n7),Ve=Cr({},["mi","mo","mn","ms","mtext"]),De=Cr({},["annotation-xml"]),qe=Cr({},["title","style","font","a","script"]),at=null,Rt=["application/xhtml+xml","text/html"],st="text/html",Ue=null,ct=null,We=r.createElement("form"),ot=o(function(Ce){return Ce instanceof RegExp||Ce instanceof Function},"isRegexOrFunction"),Yt=o(function(){let Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(ct&&ct===Ce)){if((!Ce||typeof Ce!="object")&&(Ce={}),Ce=Qf(Ce),at=Rt.indexOf(Ce.PARSER_MEDIA_TYPE)===-1?st:Ce.PARSER_MEDIA_TYPE,Ue=at==="application/xhtml+xml"?n7:Q4,$=sl(Ce,"ALLOWED_TAGS")?Cr({},Ce.ALLOWED_TAGS,Ue):H,Q=sl(Ce,"ALLOWED_ATTR")?Cr({},Ce.ALLOWED_ATTR,Ue):j,_e=sl(Ce,"ALLOWED_NAMESPACES")?Cr({},Ce.ALLOWED_NAMESPACES,n7):we,oe=sl(Ce,"ADD_URI_SAFE_ATTR")?Cr(Qf(V),Ce.ADD_URI_SAFE_ATTR,Ue):V,de=sl(Ce,"ADD_DATA_URI_TAGS")?Cr(Qf(re),Ce.ADD_DATA_URI_TAGS,Ue):re,be=sl(Ce,"FORBID_CONTENTS")?Cr({},Ce.FORBID_CONTENTS,Ue):W,ne=sl(Ce,"FORBID_TAGS")?Cr({},Ce.FORBID_TAGS,Ue):{},le=sl(Ce,"FORBID_ATTR")?Cr({},Ce.FORBID_ATTR,Ue):{},Ie=sl(Ce,"USE_PROFILES")?Ce.USE_PROFILES:!1,he=Ce.ALLOW_ARIA_ATTR!==!1,K=Ce.ALLOW_DATA_ATTR!==!1,X=Ce.ALLOW_UNKNOWN_PROTOCOLS||!1,te=Ce.ALLOW_SELF_CLOSE_IN_ATTR!==!1,J=Ce.SAFE_FOR_TEMPLATES||!1,se=Ce.SAFE_FOR_XML!==!1,ue=Ce.WHOLE_DOCUMENT||!1,ce=Ce.RETURN_DOM||!1,ae=Ce.RETURN_DOM_FRAGMENT||!1,Oe=Ce.RETURN_TRUSTED_TYPE||!1,Se=Ce.FORCE_BODY||!1,ge=Ce.SANITIZE_DOM!==!1,ze=Ce.SANITIZE_NAMED_PROPS||!1,$e=Ce.KEEP_CONTENT!==!1,Re=Ce.IN_PLACE||!1,z=Ce.ALLOWED_URI_REGEXP||iz,ve=Ce.NAMESPACE||pe,Ve=Ce.MATHML_TEXT_INTEGRATION_POINTS||Ve,De=Ce.HTML_INTEGRATION_POINTS||De,ie=Ce.CUSTOM_ELEMENT_HANDLING||{},Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ie.tagNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ie.attributeNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&typeof Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(ie.allowCustomizedBuiltInElements=Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),J&&(K=!1),ae&&(ce=!0),Ie&&($=Cr({},Q$),Q=[],Ie.html===!0&&(Cr($,K$),Cr(Q,Z$)),Ie.svg===!0&&(Cr($,i7),Cr(Q,o7),Cr(Q,K4)),Ie.svgFilters===!0&&(Cr($,a7),Cr(Q,o7),Cr(Q,K4)),Ie.mathMl===!0&&(Cr($,s7),Cr(Q,J$),Cr(Q,K4))),Ce.ADD_TAGS&&($===H&&($=Qf($)),Cr($,Ce.ADD_TAGS,Ue)),Ce.ADD_ATTR&&(Q===j&&(Q=Qf(Q)),Cr(Q,Ce.ADD_ATTR,Ue)),Ce.ADD_URI_SAFE_ATTR&&Cr(oe,Ce.ADD_URI_SAFE_ATTR,Ue),Ce.FORBID_CONTENTS&&(be===W&&(be=Qf(be)),Cr(be,Ce.FORBID_CONTENTS,Ue)),$e&&($["#text"]=!0),ue&&Cr($,["html","head","body"]),$.table&&(Cr($,["tbody"]),delete ne.tbody),Ce.TRUSTED_TYPES_POLICY){if(typeof Ce.TRUSTED_TYPES_POLICY.createHTML!="function")throw My('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ce.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw My('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');C=Ce.TRUSTED_TYPES_POLICY,T=C.createHTML("")}else C===void 0&&(C=Zxe(m,i)),C!==null&&typeof T=="string"&&(T=C.createHTML(""));ja&&ja(Ce),ct=Ce}},"_parseConfig"),bt=Cr({},[...i7,...a7,...Gxe]),Mt=Cr({},[...s7,...Vxe]),xt=o(function(Ce){let tt=w(Ce);(!tt||!tt.tagName)&&(tt={namespaceURI:ve,tagName:"template"});let St=Q4(Ce.tagName),mr=Q4(tt.tagName);return _e[Ce.namespaceURI]?Ce.namespaceURI===q?tt.namespaceURI===pe?St==="svg":tt.namespaceURI===xe?St==="svg"&&(mr==="annotation-xml"||Ve[mr]):!!bt[St]:Ce.namespaceURI===xe?tt.namespaceURI===pe?St==="math":tt.namespaceURI===q?St==="math"&&De[mr]:!!Mt[St]:Ce.namespaceURI===pe?tt.namespaceURI===q&&!De[mr]||tt.namespaceURI===xe&&!Ve[mr]?!1:!Mt[St]&&(qe[St]||!bt[St]):!!(at==="application/xhtml+xml"&&_e[Ce.namespaceURI]):!1},"_checkValidNamespace"),ut=o(function(Ce){Ry(e.removed,{element:Ce});try{w(Ce).removeChild(Ce)}catch{v(Ce)}},"_forceRemove"),Et=o(function(Ce,tt){try{Ry(e.removed,{attribute:tt.getAttributeNode(Ce),from:tt})}catch{Ry(e.removed,{attribute:null,from:tt})}if(tt.removeAttribute(Ce),Ce==="is")if(ce||ae)try{ut(tt)}catch{}else try{tt.setAttribute(Ce,"")}catch{}},"_removeAttribute"),ft=o(function(Ce){let tt=null,St=null;if(Se)Ce="<remove></remove>"+Ce;else{let gn=j$(Ce,/^[\r\n\t ]+/);St=gn&&gn[0]}at==="application/xhtml+xml"&&ve===pe&&(Ce='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+Ce+"</body></html>");let mr=C?C.createHTML(Ce):Ce;if(ve===pe)try{tt=new p().parseFromString(mr,at)}catch{}if(!tt||!tt.documentElement){tt=E.createDocument(ve,"template",null);try{tt.documentElement.innerHTML=Pe?T:mr}catch{}}let rn=tt.body||tt.documentElement;return Ce&&St&&rn.insertBefore(r.createTextNode(St),rn.childNodes[0]||null),ve===pe?_.call(tt,ue?"html":"body")[0]:ue?tt.documentElement:rn},"_initDocument"),yt=o(function(Ce){return A.call(Ce.ownerDocument||Ce,Ce,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),nt=o(function(Ce){return Ce instanceof d&&(typeof Ce.nodeName!="string"||typeof Ce.textContent!="string"||typeof Ce.removeChild!="function"||!(Ce.attributes instanceof f)||typeof Ce.removeAttribute!="function"||typeof Ce.setAttribute!="function"||typeof Ce.namespaceURI!="string"||typeof Ce.insertBefore!="function"||typeof Ce.hasChildNodes!="function")},"_isClobbered"),dn=o(function(Ce){return typeof l=="function"&&Ce instanceof l},"_isNode");function Tt(At,Ce,tt){j4(At,St=>{St.call(e,Ce,tt,ct)})}o(Tt,"_executeHooks");let On=o(function(Ce){let tt=null;if(Tt(D.beforeSanitizeElements,Ce,null),nt(Ce))return ut(Ce),!0;let St=Ue(Ce.nodeName);if(Tt(D.uponSanitizeElement,Ce,{tagName:St,allowedTags:$}),Ce.hasChildNodes()&&!dn(Ce.firstElementChild)&&Xa(/<[/\w]/g,Ce.innerHTML)&&Xa(/<[/\w]/g,Ce.textContent)||Ce.nodeType===Oy.progressingInstruction||se&&Ce.nodeType===Oy.comment&&Xa(/<[/\w]/g,Ce.data))return ut(Ce),!0;if(!$[St]||ne[St]){if(!ne[St]&&_r(St)&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,St)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(St)))return!1;if($e&&!be[St]){let mr=w(Ce)||Ce.parentNode,rn=b(Ce)||Ce.childNodes;if(rn&&mr){let gn=rn.length;for(let Zr=gn-1;Zr>=0;--Zr){let Ni=y(rn[Zr],!0);Ni.__removalCount=(Ce.__removalCount||0)+1,mr.insertBefore(Ni,x(Ce))}}}return ut(Ce),!0}return Ce instanceof u&&!xt(Ce)||(St==="noscript"||St==="noembed"||St==="noframes")&&Xa(/<\/no(script|embed|frames)/i,Ce.innerHTML)?(ut(Ce),!0):(J&&Ce.nodeType===Oy.text&&(tt=Ce.textContent,j4([k,L,R],mr=>{tt=Ny(tt,mr," ")}),Ce.textContent!==tt&&(Ry(e.removed,{element:Ce.cloneNode()}),Ce.textContent=tt)),Tt(D.afterSanitizeElements,Ce,null),!1)},"_sanitizeElements"),tn=o(function(Ce,tt,St){if(ge&&(tt==="id"||tt==="name")&&(St in r||St in We))return!1;if(!(K&&!le[tt]&&Xa(O,tt))){if(!(he&&Xa(M,tt))){if(!Q[tt]||le[tt]){if(!(_r(Ce)&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,Ce)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(Ce))&&(ie.attributeNameCheck instanceof RegExp&&Xa(ie.attributeNameCheck,tt)||ie.attributeNameCheck instanceof Function&&ie.attributeNameCheck(tt))||tt==="is"&&ie.allowCustomizedBuiltInElements&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,St)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(St))))return!1}else if(!oe[tt]){if(!Xa(z,Ny(St,F,""))){if(!((tt==="src"||tt==="xlink:href"||tt==="href")&&Ce!=="script"&&Bxe(St,"data:")===0&&de[Ce])){if(!(X&&!Xa(B,Ny(St,F,"")))){if(St)return!1}}}}}}return!0},"_isValidAttribute"),_r=o(function(Ce){return Ce!=="annotation-xml"&&j$(Ce,P)},"_isBasicCustomElement"),Dr=o(function(Ce){Tt(D.beforeSanitizeAttributes,Ce,null);let{attributes:tt}=Ce;if(!tt||nt(Ce))return;let St={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Q,forceKeepAttr:void 0},mr=tt.length;for(;mr--;){let rn=tt[mr],{name:gn,namespaceURI:Zr,value:Ni}=rn,Zn=Ue(gn),Sn=gn==="value"?Ni:Fxe(Ni);if(St.attrName=Zn,St.attrValue=Sn,St.keepAttr=!0,St.forceKeepAttr=void 0,Tt(D.uponSanitizeAttribute,Ce,St),Sn=St.attrValue,ze&&(Zn==="id"||Zn==="name")&&(Et(gn,Ce),Sn=He+Sn),se&&Xa(/((--!?|])>)|<\/(style|title)/i,Sn)){Et(gn,Ce);continue}if(St.forceKeepAttr||(Et(gn,Ce),!St.keepAttr))continue;if(!te&&Xa(/\/>/i,Sn)){Et(gn,Ce);continue}J&&j4([k,L,R],et=>{Sn=Ny(Sn,et," ")});let Hr=Ue(Ce.nodeName);if(tn(Hr,Zn,Sn)){if(C&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Zr)switch(m.getAttributeType(Hr,Zn)){case"TrustedHTML":{Sn=C.createHTML(Sn);break}case"TrustedScriptURL":{Sn=C.createScriptURL(Sn);break}}try{Zr?Ce.setAttributeNS(Zr,gn,Sn):Ce.setAttribute(gn,Sn),nt(Ce)?ut(Ce):X$(e.removed)}catch{}}}Tt(D.afterSanitizeAttributes,Ce,null)},"_sanitizeAttributes"),Pn=o(function At(Ce){let tt=null,St=yt(Ce);for(Tt(D.beforeSanitizeShadowDOM,Ce,null);tt=St.nextNode();)Tt(D.uponSanitizeShadowNode,tt,null),On(tt),Dr(tt),tt.content instanceof a&&At(tt.content);Tt(D.afterSanitizeShadowDOM,Ce,null)},"_sanitizeShadowDOM");return e.sanitize=function(At){let Ce=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},tt=null,St=null,mr=null,rn=null;if(Pe=!At,Pe&&(At="<!-->"),typeof At!="string"&&!dn(At))if(typeof At.toString=="function"){if(At=At.toString(),typeof At!="string")throw My("dirty is not a string, aborting")}else throw My("toString is not a function");if(!e.isSupported)return At;if(Z||Yt(Ce),e.removed=[],typeof At=="string"&&(Re=!1),Re){if(At.nodeName){let Ni=Ue(At.nodeName);if(!$[Ni]||ne[Ni])throw My("root node is forbidden and cannot be sanitized in-place")}}else if(At instanceof l)tt=ft("<!---->"),St=tt.ownerDocument.importNode(At,!0),St.nodeType===Oy.element&&St.nodeName==="BODY"||St.nodeName==="HTML"?tt=St:tt.appendChild(St);else{if(!ce&&!J&&!ue&&At.indexOf("<")===-1)return C&&Oe?C.createHTML(At):At;if(tt=ft(At),!tt)return ce?null:Oe?T:""}tt&&Se&&ut(tt.firstChild);let gn=yt(Re?At:tt);for(;mr=gn.nextNode();)On(mr),Dr(mr),mr.content instanceof a&&Pn(mr.content);if(Re)return At;if(ce){if(ae)for(rn=S.call(tt.ownerDocument);tt.firstChild;)rn.appendChild(tt.firstChild);else rn=tt;return(Q.shadowroot||Q.shadowrootmode)&&(rn=I.call(n,rn,!0)),rn}let Zr=ue?tt.outerHTML:tt.innerHTML;return ue&&$["!doctype"]&&tt.ownerDocument&&tt.ownerDocument.doctype&&tt.ownerDocument.doctype.name&&Xa(az,tt.ownerDocument.doctype.name)&&(Zr="<!DOCTYPE "+tt.ownerDocument.doctype.name+`> | |
| 15 | +`+Zr),J&&j4([k,L,R],Ni=>{Zr=Ny(Zr,Ni," ")}),C&&Oe?C.createHTML(Zr):Zr},e.setConfig=function(){let At=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Yt(At),Z=!0},e.clearConfig=function(){ct=null,Z=!1},e.isValidAttribute=function(At,Ce,tt){ct||Yt({});let St=Ue(At),mr=Ue(Ce);return tn(St,mr,tt)},e.addHook=function(At,Ce){typeof Ce=="function"&&Ry(D[At],Ce)},e.removeHook=function(At,Ce){if(Ce!==void 0){let tt=Oxe(D[At],Ce);return tt===-1?void 0:Pxe(D[At],tt,1)[0]}return X$(D[At])},e.removeHooks=function(At){D[At]=[]},e.removeAllHooks=function(){D=tz()},e}var rz,Y$,Nxe,Mxe,Ixe,ja,ko,nz,l7,c7,j4,Oxe,X$,Ry,Pxe,Q4,n7,j$,Ny,Bxe,Fxe,sl,Xa,My,K$,i7,a7,Gxe,s7,Vxe,Q$,Z$,o7,J$,K4,Uxe,Hxe,Wxe,qxe,Yxe,iz,Xxe,jxe,az,Kxe,ez,Oy,Qxe,Zxe,tz,ch,u7=N(()=>{"use strict";({entries:rz,setPrototypeOf:Y$,isFrozen:Nxe,getPrototypeOf:Mxe,getOwnPropertyDescriptor:Ixe}=Object),{freeze:ja,seal:ko,create:nz}=Object,{apply:l7,construct:c7}=typeof Reflect<"u"&&Reflect;ja||(ja=o(function(e){return e},"freeze"));ko||(ko=o(function(e){return e},"seal"));l7||(l7=o(function(e,r,n){return e.apply(r,n)},"apply"));c7||(c7=o(function(e,r){return new e(...r)},"construct"));j4=Ka(Array.prototype.forEach),Oxe=Ka(Array.prototype.lastIndexOf),X$=Ka(Array.prototype.pop),Ry=Ka(Array.prototype.push),Pxe=Ka(Array.prototype.splice),Q4=Ka(String.prototype.toLowerCase),n7=Ka(String.prototype.toString),j$=Ka(String.prototype.match),Ny=Ka(String.prototype.replace),Bxe=Ka(String.prototype.indexOf),Fxe=Ka(String.prototype.trim),sl=Ka(Object.prototype.hasOwnProperty),Xa=Ka(RegExp.prototype.test),My=$xe(TypeError);o(Ka,"unapply");o($xe,"unconstruct");o(Cr,"addToSet");o(zxe,"cleanArray");o(Qf,"clone");o(Iy,"lookupGetter");K$=ja(["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"]),i7=ja(["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"]),a7=ja(["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"]),Gxe=ja(["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"]),s7=ja(["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"]),Vxe=ja(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Q$=ja(["#text"]),Z$=ja(["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","popover","popovertarget","popovertargetaction","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","wrap","xmlns","slot"]),o7=ja(["accent-height","accumulate","additive","alignment-baseline","amplitude","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","exponent","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","intercept","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","slope","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","tablevalues","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"]),J$=ja(["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"]),K4=ja(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Uxe=ko(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Hxe=ko(/<%[\w\W]*|[\w\W]*%>/gm),Wxe=ko(/\$\{[\w\W]*/gm),qxe=ko(/^data-[\-\w.\u00B7-\uFFFF]+$/),Yxe=ko(/^aria-[\-\w]+$/),iz=ko(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Xxe=ko(/^(?:\w+script|data):/i),jxe=ko(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),az=ko(/^html$/i),Kxe=ko(/^[a-z][.\w]*(-[.\w]+)+$/i),ez=Object.freeze({__proto__:null,ARIA_ATTR:Yxe,ATTR_WHITESPACE:jxe,CUSTOM_ELEMENT:Kxe,DATA_ATTR:qxe,DOCTYPE_NAME:az,ERB_EXPR:Hxe,IS_ALLOWED_URI:iz,IS_SCRIPT_OR_DATA:Xxe,MUSTACHE_EXPR:Uxe,TMPLIT_EXPR:Wxe}),Oy={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Qxe=o(function(){return typeof window>"u"?null:window},"getGlobal"),Zxe=o(function(e,r){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let n=null,i="data-tt-policy-suffix";r&&r.hasAttribute(i)&&(n=r.getAttribute(i));let a="dompurify"+(n?"#"+n:"");try{return e.createPolicy(a,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}},"_createTrustedTypesPolicy"),tz=o(function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},"_createHooksMap");o(sz,"createDOMPurify");ch=sz()});var MG={};hr(MG,{default:()=>q4e});function abe(t){return String(t).replace(ibe,e=>nbe[e])}function cbe(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function gbe(t){for(var e=0;e<k7.length;e++)for(var r=k7[e],n=0;n<r.blocks.length;n++){var i=r.blocks[n];if(t>=i[0]&&t<=i[1])return r.name}return null}function $z(t){for(var e=0;e<u3.length;e+=2)if(t>=u3[e]&&t<=u3[e+1])return!0;return!1}function Abe(t,e){jl[t]=e}function P7(t,e,r){if(!jl[e])throw new Error("Font metrics not found for font: "+e+".");var n=t.charCodeAt(0),i=jl[e][n];if(!i&&t[0]in lz&&(n=lz[t[0]].charCodeAt(0),i=jl[e][n]),!i&&r==="text"&&$z(n)&&(i=jl[e][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}function _be(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!h7[e]){var r=h7[e]={cssEmPerMu:Z4.quad[e]/18};for(var n in Z4)Z4.hasOwnProperty(n)&&(r[n]=Z4[n][e])}return h7[e]}function hz(t){if(t instanceof Ts)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function Nbe(t){if(t instanceof td)return t;throw new Error("Expected span<HtmlDomNode> but got "+String(t)+".")}function G(t,e,r,n,i,a){An[t][i]={font:e,group:r,replace:n},a&&n&&(An[t][n]=An[t][i])}function Nt(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},u=0;u<r.length;++u)jz[r[u]]=l;e&&(a&&(p3[e]=a),s&&(m3[e]=s))}function rd(t){var{type:e,htmlBuilder:r,mathmlBuilder:n}=t;Nt({type:e,names:[],props:{numArgs:0},handler(){throw new Error("Should never be called.")},htmlBuilder:r,mathmlBuilder:n})}function a3(t,e){var r=lu(["base"],t,e),n=lu(["strut"]);return n.style.height=kt(r.height+r.depth),r.depth&&(n.style.verticalAlign=kt(-r.depth)),r.children.unshift(n),r}function _7(t,e){var r=null;t.length===1&&t[0].type==="tag"&&(r=t[0].tag,t=t[0].body);var n=Pi(t,e,"root"),i;n.length===2&&n[1].hasClass("tag")&&(i=n.pop());for(var a=[],s=[],l=0;l<n.length;l++)if(s.push(n[l]),n[l].hasClass("mbin")||n[l].hasClass("mrel")||n[l].hasClass("allowbreak")){for(var u=!1;l<n.length-1&&n[l+1].hasClass("mspace")&&!n[l+1].hasClass("newline");)l++,s.push(n[l]),n[l].hasClass("nobreak")&&(u=!0);u||(a.push(a3(s,e)),s=[])}else n[l].hasClass("newline")&&(s.pop(),s.length>0&&(a.push(a3(s,e)),s=[]),a.push(n[l]));s.length>0&&a.push(a3(s,e));var h;r?(h=a3(Pi(r,e,!0)),h.classes=["tag"],a.push(h)):i&&a.push(i);var f=lu(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=kt(f.height+f.depth),f.depth&&(d.style.verticalAlign=kt(-f.depth))}return f}function Qz(t){return new ed(t)}function gz(t,e,r,n,i){var a=ks(t,r),s;a.length===1&&a[0]instanceof ws&&Jt.contains(["mrow","mtable"],a[0].type)?s=a[0]:s=new dt.MathNode("mrow",a);var l=new dt.MathNode("annotation",[new dt.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new dt.MathNode("semantics",[s,l]),h=new dt.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");var f=i?"katex":"katex-mathml";return Be.makeSpan([f],[h])}function xr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function z7(t){var e=w3(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function w3(t){return t&&(t.type==="atom"||Ibe.hasOwnProperty(t.type))?t:null}function tG(t,e){var r=Pi(t.body,e,!0);return u4e([t.mclass],r,e)}function rG(t,e){var r,n=ks(t.body,e);return t.mclass==="minner"?r=new dt.MathNode("mpadded",n):t.mclass==="mord"?t.isCharacterBox?(r=n[0],r.type="mi"):r=new dt.MathNode("mi",n):(t.isCharacterBox?(r=n[0],r.type="mo"):r=new dt.MathNode("mo",n),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function d4e(t,e,r){var n=h4e[t];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[i,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function p4e(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new gt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var n=[],i=[n],a=0;a<e.length;a++){for(var s=e[a],l=yz(),u=0;u<s.length;u++)if(!vz(s[u]))l.body.push(s[u]);else{n.push(l),u+=1;var h=z7(s[u]).text,f=new Array(2);if(f[0]={type:"ordgroup",mode:"math",body:[]},f[1]={type:"ordgroup",mode:"math",body:[]},!("=|.".indexOf(h)>-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;m<s.length;m++){if(f4e(s[m],h)){p=!1,u=m;break}if(vz(s[m]))throw new gt("Missing a "+h+" character to complete a CD arrow.",s[m]);f[d].body.push(s[m])}if(p)throw new gt("Missing a "+h+" character to complete a CD arrow.",s[u])}else throw new gt('Expected one of "<>AV=|." after @',s[u]);var g=d4e(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};n.push(y),l=yz()}a%2===0?n.push(l):n.shift(),n=[],i.push(n)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}function k3(t,e){var r=w3(t);if(r&&Jt.contains(A4e,r.text))return r;throw r?new gt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new gt("Invalid delimiter type '"+t.type+"'",t)}function bz(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function Ql(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},u=0;u<r.length;++u)mG[r[u]]=l;a&&(p3[e]=a),s&&(m3[e]=s)}function fe(t,e){gG[t]=e}function wz(t){var e=[];t.consumeSpaces();var r=t.fetch().text;for(r==="\\relax"&&(t.consume(),t.consumeSpaces(),r=t.fetch().text);r==="\\hline"||r==="\\hdashline";)t.consume(),e.push(r==="\\hdashline"),t.consumeSpaces(),r=t.fetch().text;return e}function W7(t){if(t.indexOf("ed")===-1)return t.indexOf("*")===-1}function ph(t,e,r){var{hskipBeforeAndAfter:n,addJot:i,cols:a,arraystretch:s,colSeparationType:l,autoTag:u,singleRow:h,emptySingleRow:f,maxNumCols:d,leqno:p}=e;if(t.gullet.beginGroup(),h||t.gullet.macros.set("\\cr","\\\\\\relax"),!s){var m=t.gullet.expandMacroAsText("\\arraystretch");if(m==null)s=1;else if(s=parseFloat(m),!s||s<0)throw new gt("Invalid \\arraystretch: "+m)}t.gullet.beginGroup();var g=[],y=[g],v=[],x=[],b=u!=null?[]:void 0;function w(){u&&t.gullet.macros.set("\\@eqnsw","1",!0)}o(w,"beginRow");function C(){b&&(t.gullet.macros.get("\\df@tag")?(b.push(t.subparse([new So("\\df@tag")])),t.gullet.macros.set("\\df@tag",void 0,!0)):b.push(!!u&&t.gullet.macros.get("\\@eqnsw")==="1"))}for(o(C,"endRow"),w(),x.push(wz(t));;){var T=t.parseExpression(!1,h?"\\end":"\\\\");t.gullet.endGroup(),t.gullet.beginGroup(),T={type:"ordgroup",mode:t.mode,body:T},r&&(T={type:"styling",mode:t.mode,style:r,body:[T]}),g.push(T);var E=t.fetch().text;if(E==="&"){if(d&&g.length===d){if(h||l)throw new gt("Too many tab characters: &",t.nextToken);t.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}t.consume()}else if(E==="\\end"){C(),g.length===1&&T.type==="styling"&&T.body[0].body.length===0&&(y.length>1||!f)&&y.pop(),x.length<y.length+1&&x.push([]);break}else if(E==="\\\\"){t.consume();var A=void 0;t.gullet.future().text!==" "&&(A=t.parseSizeGroup(!0)),v.push(A?A.value:null),C(),x.push(wz(t)),g=[],y.push(g),w()}else throw new gt("Expected & or \\\\ or \\cr or \\end",t.nextToken)}return t.gullet.endGroup(),t.gullet.endGroup(),{type:"array",mode:t.mode,addJot:i,arraystretch:s,body:y,cols:a,rowGaps:v,hskipBeforeAndAfter:n,hLinesBeforeRow:x,colSeparationType:l,tags:b,leqno:p}}function q7(t){return t.slice(0,1)==="d"?"display":"text"}function SG(t,e,r){for(var n=Pi(t,e,!1),i=e.sizeMultiplier/r.sizeMultiplier,a=0;a<n.length;a++){var s=n[a].classes.indexOf("sizing");s<0?Array.prototype.push.apply(n[a].classes,e.sizingClasses(r)):n[a].classes[s+1]==="reset-size"+e.size&&(n[a].classes[s+1]="reset-size"+r.size),n[a].height*=i,n[a].depth*=i}return Be.makeFragment(n)}var Xs,So,gt,Jxe,ebe,tbe,rbe,nbe,ibe,Fz,sbe,obe,lbe,Jt,c3,zy,Yl,O7,h3,f0,su,Gy,Eo,d0,Qa,Xl,ube,hbe,fbe,dbe,pbe,mbe,tr,k7,u3,h0,ybe,vbe,xbe,bbe,wbe,Tbe,kbe,Ebe,Sbe,oz,Cbe,ed,jl,Z4,lz,h7,Dbe,cz,uz,f3,E7,Lbe,zz,ti,kt,fh,Gz,Vz,Uz,td,Vy,S7,Rbe,Ts,ll,Kl,Uy,Mbe,Ibe,An,U,it,ee,ke,Vn,It,Za,p0,er,ki,js,x3,Ee,uu,Le,Hz,fz,f7,J4,dz,d7,e3,d3,Py,t3,sr,Jn,Ca,iu,uh,C7,By,r3,n3,pz,Obe,b3,ol,Pbe,Bbe,Fbe,$be,zbe,B7,bs,Wz,Gbe,Vbe,qz,Ube,Hbe,Wbe,qbe,i3,Yz,Xz,Ybe,Be,ei,Zf,au,Xbe,jbe,jz,p3,m3,g3,di,lu,Kbe,Qbe,Zbe,Jbe,Pi,mz,Kz,e4e,A7,Hy,Fr,ws,Jf,D7,dt,Co,F7,$7,ks,dh,yn,Zz,Jz,t4e,r4e,n4e,i4e,a4e,s4e,o4e,l4e,cu,G7,eG,c4e,s3,u4e,T3,h4e,yz,vz,f4e,nG,iG,L7,aG,m4e,sG,Fy,V7,oG,g4e,y4e,lG,p7,m7,R7,o3,v4e,x4e,cG,g7,y7,v7,b4e,uG,w4e,hG,$y,T4e,k4e,E4e,fG,S4e,dG,pG,C4e,ou,xz,A4e,U7,H7,mG,gG,E3,Zl,_4e,Jl,yG,Tz,vG,xG,kz,bG,Y7,X7,Ez,Sz,wG,D4e,x7,Cz,TG,kG,m0,Wy,L4e,R4e,EG,N4e,Az,M4e,_z,I4e,CG,b7,w7,Dz,Lz,Rz,O4e,Nz,Mz,hh,AG,P4e,B4e,F4e,$4e,N7,z4e,G4e,y3,M7,V4e,Iz,j7,Oz,K7,_G,DG,LG,I7,Pz,l3,T7,Bz,v3,Q7,RG,U4e,H4e,NG,Z7,W4e,q4e,IG=N(()=>{"use strict";Xs=class t{static{o(this,"SourceLocation")}constructor(e,r,n){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=n}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},So=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,Xs.range(this,e))}},gt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n="KaTeX parse error: "+e,i,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;i=s.start,a=s.end,i===l.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var u=l.slice(i,a).replace(/[^]/g,"$&\u0332"),h;i>15?h="\u2026"+l.slice(i-15,i):h=l.slice(0,i);var f;a+15<l.length?f=l.slice(a,a+15)+"\u2026":f=l.slice(a),n+=h+u+f}var d=new Error(n);return d.name="ParseError",d.__proto__=t.prototype,d.position=i,i!=null&&a!=null&&(d.length=a-i),d.rawMessage=e,d}};gt.prototype.__proto__=Error.prototype;Jxe=o(function(e,r){return e.indexOf(r)!==-1},"contains"),ebe=o(function(e,r){return e===void 0?r:e},"deflt"),tbe=/([A-Z])/g,rbe=o(function(e){return e.replace(tbe,"-$1").toLowerCase()},"hyphenate"),nbe={"&":"&",">":">","<":"<",'"':""","'":"'"},ibe=/[&><"']/g;o(abe,"escape");Fz=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),sbe=o(function(e){var r=Fz(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),obe=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),lbe=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),Jt={contains:Jxe,deflt:ebe,escape:abe,hyphenate:rbe,getBaseElem:Fz,isCharacterBox:sbe,protocolFromUrl:lbe},c3={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand <n>",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(cbe,"getDefaultValue");zy=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in c3)if(c3.hasOwnProperty(r)){var n=c3[r];this[r]=e[r]!==void 0?n.processor?n.processor(e[r]):e[r]:cbe(n)}}reportNonstrict(e,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(e,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new gt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,n){var i=this.strict;if(typeof i=="function")try{i=i(e,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=Jt.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var n=typeof this.trust=="function"?this.trust(e):this.trust;return!!n}},Yl=class{static{o(this,"Style")}constructor(e,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=n}sup(){return Xl[ube[this.id]]}sub(){return Xl[hbe[this.id]]}fracNum(){return Xl[fbe[this.id]]}fracDen(){return Xl[dbe[this.id]]}cramp(){return Xl[pbe[this.id]]}text(){return Xl[mbe[this.id]]}isTight(){return this.size>=2}},O7=0,h3=1,f0=2,su=3,Gy=4,Eo=5,d0=6,Qa=7,Xl=[new Yl(O7,0,!1),new Yl(h3,0,!0),new Yl(f0,1,!1),new Yl(su,1,!0),new Yl(Gy,2,!1),new Yl(Eo,2,!0),new Yl(d0,3,!1),new Yl(Qa,3,!0)],ube=[Gy,Eo,Gy,Eo,d0,Qa,d0,Qa],hbe=[Eo,Eo,Eo,Eo,Qa,Qa,Qa,Qa],fbe=[f0,su,Gy,Eo,d0,Qa,d0,Qa],dbe=[su,su,Eo,Eo,Qa,Qa,Qa,Qa],pbe=[h3,h3,su,su,Eo,Eo,Qa,Qa],mbe=[O7,h3,f0,su,f0,su,f0,su],tr={DISPLAY:Xl[O7],TEXT:Xl[f0],SCRIPT:Xl[Gy],SCRIPTSCRIPT:Xl[d0]},k7=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(gbe,"scriptFromCodepoint");u3=[];k7.forEach(t=>t.blocks.forEach(e=>u3.push(...e)));o($z,"supportedCodepoint");h0=80,ybe=o(function(e,r){return"M95,"+(622+e+r)+` | |
| 16 | +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 | |
| 17 | +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 | |
| 18 | +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 | |
| 19 | +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 | |
| 20 | +c69,-144,104.5,-217.7,106.5,-221 | |
| 21 | +l`+e/2.075+" -"+e+` | |
| 22 | +c5.3,-9.3,12,-14,20,-14 | |
| 23 | +H400000v`+(40+e)+`H845.2724 | |
| 24 | +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 | |
| 25 | +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z | |
| 26 | +M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),vbe=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119 | |
| 27 | +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 | |
| 28 | +c340,-704.7,510.7,-1060.3,512,-1067 | |
| 29 | +l`+e/2.084+" -"+e+` | |
| 30 | +c4.7,-7.3,11,-11,19,-11 | |
| 31 | +H40000v`+(40+e)+`H1012.3 | |
| 32 | +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 | |
| 33 | +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 | |
| 34 | +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 | |
| 35 | +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z | |
| 36 | +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),xbe=o(function(e,r){return"M983 "+(10+e+r)+` | |
| 37 | +l`+e/3.13+" -"+e+` | |
| 38 | +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` | |
| 39 | +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 | |
| 40 | +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 | |
| 41 | +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 | |
| 42 | +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 | |
| 43 | +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 | |
| 44 | +c53.7,-170.3,84.5,-266.8,92.5,-289.5z | |
| 45 | +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),bbe=o(function(e,r){return"M424,"+(2398+e+r)+` | |
| 46 | +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 | |
| 47 | +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 | |
| 48 | +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 | |
| 49 | +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 | |
| 50 | +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 | |
| 51 | +v`+(40+e)+`H1014.6 | |
| 52 | +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 | |
| 53 | +c-2,6,-10,9,-24,9 | |
| 54 | +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+` | |
| 55 | +h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),wbe=o(function(e,r){return"M473,"+(2713+e+r)+` | |
| 56 | +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` | |
| 57 | +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 | |
| 58 | +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 | |
| 59 | +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 | |
| 60 | +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 | |
| 61 | +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, | |
| 62 | +606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),Tbe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),kbe=o(function(e,r,n){var i=n-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+` | |
| 63 | +H742v`+i+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 | |
| 64 | +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 | |
| 65 | +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 | |
| 66 | +219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),Ebe=o(function(e,r,n){r=1e3*r;var i="";switch(e){case"sqrtMain":i=ybe(r,h0);break;case"sqrtSize1":i=vbe(r,h0);break;case"sqrtSize2":i=xbe(r,h0);break;case"sqrtSize3":i=bbe(r,h0);break;case"sqrtSize4":i=wbe(r,h0);break;case"sqrtTall":i=kbe(r,h0,n)}return i},"sqrtPath"),Sbe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),oz={doubleleftarrow:`M262 157 | |
| 67 | +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 | |
| 68 | + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 | |
| 69 | + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 | |
| 70 | +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 | |
| 71 | + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 | |
| 72 | +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 | |
| 73 | +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z | |
| 74 | +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l | |
| 75 | +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 | |
| 76 | + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 | |
| 77 | +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 | |
| 78 | +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 | |
| 79 | +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 | |
| 80 | +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 | |
| 81 | +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 | |
| 82 | + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 | |
| 83 | +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 | |
| 84 | +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 | |
| 85 | + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 | |
| 86 | + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 | |
| 87 | + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 | |
| 88 | +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 | |
| 89 | + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 | |
| 90 | + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 | |
| 91 | + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 | |
| 92 | +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 | |
| 93 | +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 | |
| 94 | + 435 0h399565z`,leftgroupunder:`M400000 262 | |
| 95 | +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 | |
| 96 | + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 | |
| 97 | +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 | |
| 98 | +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 | |
| 99 | +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 | |
| 100 | + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 | |
| 101 | +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 | |
| 102 | +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z | |
| 103 | +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 | |
| 104 | + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 | |
| 105 | + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 | |
| 106 | +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 | |
| 107 | + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 | |
| 108 | +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 | |
| 109 | +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 | |
| 110 | +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 | |
| 111 | +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 | |
| 112 | + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z | |
| 113 | +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z | |
| 114 | +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 | |
| 115 | +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 | |
| 116 | +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 | |
| 117 | + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z | |
| 118 | +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334 | |
| 119 | +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 | |
| 120 | +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 | |
| 121 | + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 | |
| 122 | + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 | |
| 123 | +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 | |
| 124 | + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 | |
| 125 | + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 | |
| 126 | +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 | |
| 127 | +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z | |
| 128 | +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 | |
| 129 | +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 | |
| 130 | +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z | |
| 131 | +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 | |
| 132 | +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 | |
| 133 | +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z | |
| 134 | +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 | |
| 135 | +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 | |
| 136 | +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z | |
| 137 | +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 | |
| 138 | +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 | |
| 139 | +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 | |
| 140 | + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 | |
| 141 | + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 | |
| 142 | +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 | |
| 143 | +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 | |
| 144 | + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l | |
| 145 | +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 | |
| 146 | +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 | |
| 147 | +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 | |
| 148 | + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 | |
| 149 | +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 | |
| 150 | + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 | |
| 151 | + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 | |
| 152 | +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 | |
| 153 | +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 | |
| 154 | + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 | |
| 155 | +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 | |
| 156 | + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z | |
| 157 | +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 | |
| 158 | + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 | |
| 159 | +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 | |
| 160 | +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 | |
| 161 | + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 | |
| 162 | + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 | |
| 163 | +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z | |
| 164 | +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 | |
| 165 | + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 | |
| 166 | +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 | |
| 167 | + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z | |
| 168 | +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 | |
| 169 | + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 | |
| 170 | +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 | |
| 171 | +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 | |
| 172 | + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 | |
| 173 | +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 | |
| 174 | +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 | |
| 175 | +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 | |
| 176 | + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 | |
| 177 | +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 | |
| 178 | + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 | |
| 179 | + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 | |
| 180 | +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 | |
| 181 | + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 | |
| 182 | +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 | |
| 183 | + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 | |
| 184 | + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 | |
| 185 | +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 | |
| 186 | +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 | |
| 187 | + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 | |
| 188 | +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 | |
| 189 | + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 | |
| 190 | +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 | |
| 191 | + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 | |
| 192 | + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 | |
| 193 | + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 | |
| 194 | +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 | |
| 195 | + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 | |
| 196 | + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 | |
| 197 | + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 | |
| 198 | +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 | |
| 199 | +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 | |
| 200 | +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 | |
| 201 | +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 | |
| 202 | +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 | |
| 203 | +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 | |
| 204 | +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 | |
| 205 | +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 | |
| 206 | +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 | |
| 207 | +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, | |
| 208 | +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, | |
| 209 | +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, | |
| 210 | +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, | |
| 211 | +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 | |
| 212 | +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 | |
| 213 | +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 | |
| 214 | +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 | |
| 215 | +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 | |
| 216 | +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 | |
| 217 | +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z | |
| 218 | +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 | |
| 219 | +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 | |
| 220 | +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 | |
| 221 | +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 | |
| 222 | +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 | |
| 223 | +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 | |
| 224 | +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 | |
| 225 | +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 | |
| 226 | +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 | |
| 227 | +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 | |
| 228 | +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z | |
| 229 | +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 | |
| 230 | +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, | |
| 231 | +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 | |
| 232 | +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z | |
| 233 | +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 | |
| 234 | +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, | |
| 235 | +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, | |
| 236 | +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z | |
| 237 | +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 | |
| 238 | +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, | |
| 239 | +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 | |
| 240 | +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z | |
| 241 | +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Cbe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 | |
| 242 | +H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z | |
| 243 | +M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 | |
| 244 | +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 | |
| 245 | +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 | |
| 246 | +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 | |
| 247 | +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z | |
| 248 | +M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 | |
| 249 | +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 | |
| 250 | +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z | |
| 251 | +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z | |
| 252 | +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z | |
| 253 | +M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z | |
| 254 | +M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 | |
| 255 | +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, | |
| 256 | +-36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, | |
| 257 | +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 | |
| 258 | +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, | |
| 259 | +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 | |
| 260 | +l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, | |
| 261 | +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, | |
| 262 | +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 | |
| 263 | +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` | |
| 264 | +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 | |
| 265 | +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 | |
| 266 | +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 | |
| 267 | +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 | |
| 268 | +l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, | |
| 269 | +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),ed=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return Jt.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),r=0;r<this.children.length;r++)e.appendChild(this.children[r].toNode());return e}toMarkup(){for(var e="",r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e}toText(){var e=o(r=>r.toText(),"toText");return this.children.map(e).join("")}},jl={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Z4={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},lz={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(Abe,"setFontMetrics");o(P7,"getCharacterMetrics");h7={};o(_be,"getGlobalMetrics");Dbe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],cz=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],uz=o(function(e,r){return r.size<2?e:Dbe[e-1][r.size-1]},"sizeAtStyle"),f3=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=cz[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:uz(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:cz[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=uz(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=_be(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};f3.BASESIZE=6;E7={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},Lbe={ex:!0,em:!0,mu:!0},zz=o(function(e){return typeof e!="string"&&(e=e.unit),e in E7||e in Lbe||e==="ex"},"validUnit"),ti=o(function(e,r){var n;if(e.unit in E7)n=E7[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,e.unit==="ex")n=i.fontMetrics().xHeight;else if(e.unit==="em")n=i.fontMetrics().quad;else throw new gt("Invalid unit: '"+e.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*n,r.maxSize)},"calculateSize"),kt=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),fh=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),Gz=o(function(e,r,n){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},"initNode"),Vz=o(function(e){var r=document.createElement(e);r.className=fh(this.classes);for(var n in this.style)this.style.hasOwnProperty(n)&&(r.style[n]=this.style[n]);for(var i in this.attributes)this.attributes.hasOwnProperty(i)&&r.setAttribute(i,this.attributes[i]);for(var a=0;a<this.children.length;a++)r.appendChild(this.children[a].toNode());return r},"toNode"),Uz=o(function(e){var r="<"+e;this.classes.length&&(r+=' class="'+Jt.escape(fh(this.classes))+'"');var n="";for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(r+=' style="'+Jt.escape(n)+'"');for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&(r+=" "+a+'="'+Jt.escape(this.attributes[a])+'"');r+=">";for(var s=0;s<this.children.length;s++)r+=this.children[s].toMarkup();return r+="</"+e+">",r},"toMarkup"),td=class{static{o(this,"Span")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,Gz.call(this,e,n,i),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return Vz.call(this,"span")}toMarkup(){return Uz.call(this,"span")}},Vy=class{static{o(this,"Anchor")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Gz.call(this,r,i),this.children=n||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return Vz.call(this,"a")}toMarkup(){return Uz.call(this,"a")}},S7=class{static{o(this,"Img")}constructor(e,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=n}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e='<img src="'+Jt.escape(this.src)+'"'+(' alt="'+Jt.escape(this.alt)+'"'),r="";for(var n in this.style)this.style.hasOwnProperty(n)&&(r+=Jt.hyphenate(n)+":"+this.style[n]+";");return r&&(e+=' style="'+Jt.escape(r)+'"'),e+="'/>",e}},Rbe={\u00EE:"\u0131\u0302",\u00EF:"\u0131\u0308",\u00ED:"\u0131\u0301",\u00EC:"\u0131\u0300"},Ts=class{static{o(this,"SymbolNode")}constructor(e,r,n,i,a,s,l,u){this.text=void 0,this.height=void 0,this.depth=void 0,this.italic=void 0,this.skew=void 0,this.width=void 0,this.maxFontSize=void 0,this.classes=void 0,this.style=void 0,this.text=e,this.height=r||0,this.depth=n||0,this.italic=i||0,this.skew=a||0,this.width=s||0,this.classes=l||[],this.style=u||{},this.maxFontSize=0;var h=gbe(this.text.charCodeAt(0));h&&this.classes.push(h+"_fallback"),/[îïíì]/.test(this.text)&&(this.text=Rbe[this.text])}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createTextNode(this.text),r=null;this.italic>0&&(r=document.createElement("span"),r.style.marginRight=kt(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=fh(this.classes));for(var n in this.style)this.style.hasOwnProperty(n)&&(r=r||document.createElement("span"),r.style[n]=this.style[n]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="<span";this.classes.length&&(e=!0,r+=' class="',r+=Jt.escape(fh(this.classes)),r+='"');var n="";this.italic>0&&(n+="margin-right:"+this.italic+"em;");for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(e=!0,r+=' style="'+Jt.escape(n)+'"');var a=Jt.escape(this.text);return e?(r+=">",r+=a,r+="</span>",r):a}},ll=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);for(var i=0;i<this.children.length;i++)r.appendChild(this.children[i].toNode());return r}toMarkup(){var e='<svg xmlns="http://www.w3.org/2000/svg"';for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="'+Jt.escape(this.attributes[r])+'"');e+=">";for(var n=0;n<this.children.length;n++)e+=this.children[n].toMarkup();return e+="</svg>",e}},Kl=class{static{o(this,"PathNode")}constructor(e,r){this.pathName=void 0,this.alternate=void 0,this.pathName=e,this.alternate=r}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"path");return this.alternate?r.setAttribute("d",this.alternate):r.setAttribute("d",oz[this.pathName]),r}toMarkup(){return this.alternate?'<path d="'+Jt.escape(this.alternate)+'"/>':'<path d="'+Jt.escape(oz[this.pathName])+'"/>'}},Uy=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var e="<line";for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="'+Jt.escape(this.attributes[r])+'"');return e+="/>",e}};o(hz,"assertSymbolDomNode");o(Nbe,"assertSpan");Mbe={bin:1,close:1,inner:1,open:1,punct:1,rel:1},Ibe={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},An={math:{},text:{}};o(G,"defineSymbol");U="math",it="text",ee="main",ke="ams",Vn="accent-token",It="bin",Za="close",p0="inner",er="mathord",ki="op-token",js="open",x3="punct",Ee="rel",uu="spacing",Le="textord";G(U,ee,Ee,"\u2261","\\equiv",!0);G(U,ee,Ee,"\u227A","\\prec",!0);G(U,ee,Ee,"\u227B","\\succ",!0);G(U,ee,Ee,"\u223C","\\sim",!0);G(U,ee,Ee,"\u22A5","\\perp");G(U,ee,Ee,"\u2AAF","\\preceq",!0);G(U,ee,Ee,"\u2AB0","\\succeq",!0);G(U,ee,Ee,"\u2243","\\simeq",!0);G(U,ee,Ee,"\u2223","\\mid",!0);G(U,ee,Ee,"\u226A","\\ll",!0);G(U,ee,Ee,"\u226B","\\gg",!0);G(U,ee,Ee,"\u224D","\\asymp",!0);G(U,ee,Ee,"\u2225","\\parallel");G(U,ee,Ee,"\u22C8","\\bowtie",!0);G(U,ee,Ee,"\u2323","\\smile",!0);G(U,ee,Ee,"\u2291","\\sqsubseteq",!0);G(U,ee,Ee,"\u2292","\\sqsupseteq",!0);G(U,ee,Ee,"\u2250","\\doteq",!0);G(U,ee,Ee,"\u2322","\\frown",!0);G(U,ee,Ee,"\u220B","\\ni",!0);G(U,ee,Ee,"\u221D","\\propto",!0);G(U,ee,Ee,"\u22A2","\\vdash",!0);G(U,ee,Ee,"\u22A3","\\dashv",!0);G(U,ee,Ee,"\u220B","\\owns");G(U,ee,x3,".","\\ldotp");G(U,ee,x3,"\u22C5","\\cdotp");G(U,ee,Le,"#","\\#");G(it,ee,Le,"#","\\#");G(U,ee,Le,"&","\\&");G(it,ee,Le,"&","\\&");G(U,ee,Le,"\u2135","\\aleph",!0);G(U,ee,Le,"\u2200","\\forall",!0);G(U,ee,Le,"\u210F","\\hbar",!0);G(U,ee,Le,"\u2203","\\exists",!0);G(U,ee,Le,"\u2207","\\nabla",!0);G(U,ee,Le,"\u266D","\\flat",!0);G(U,ee,Le,"\u2113","\\ell",!0);G(U,ee,Le,"\u266E","\\natural",!0);G(U,ee,Le,"\u2663","\\clubsuit",!0);G(U,ee,Le,"\u2118","\\wp",!0);G(U,ee,Le,"\u266F","\\sharp",!0);G(U,ee,Le,"\u2662","\\diamondsuit",!0);G(U,ee,Le,"\u211C","\\Re",!0);G(U,ee,Le,"\u2661","\\heartsuit",!0);G(U,ee,Le,"\u2111","\\Im",!0);G(U,ee,Le,"\u2660","\\spadesuit",!0);G(U,ee,Le,"\xA7","\\S",!0);G(it,ee,Le,"\xA7","\\S");G(U,ee,Le,"\xB6","\\P",!0);G(it,ee,Le,"\xB6","\\P");G(U,ee,Le,"\u2020","\\dag");G(it,ee,Le,"\u2020","\\dag");G(it,ee,Le,"\u2020","\\textdagger");G(U,ee,Le,"\u2021","\\ddag");G(it,ee,Le,"\u2021","\\ddag");G(it,ee,Le,"\u2021","\\textdaggerdbl");G(U,ee,Za,"\u23B1","\\rmoustache",!0);G(U,ee,js,"\u23B0","\\lmoustache",!0);G(U,ee,Za,"\u27EF","\\rgroup",!0);G(U,ee,js,"\u27EE","\\lgroup",!0);G(U,ee,It,"\u2213","\\mp",!0);G(U,ee,It,"\u2296","\\ominus",!0);G(U,ee,It,"\u228E","\\uplus",!0);G(U,ee,It,"\u2293","\\sqcap",!0);G(U,ee,It,"\u2217","\\ast");G(U,ee,It,"\u2294","\\sqcup",!0);G(U,ee,It,"\u25EF","\\bigcirc",!0);G(U,ee,It,"\u2219","\\bullet",!0);G(U,ee,It,"\u2021","\\ddagger");G(U,ee,It,"\u2240","\\wr",!0);G(U,ee,It,"\u2A3F","\\amalg");G(U,ee,It,"&","\\And");G(U,ee,Ee,"\u27F5","\\longleftarrow",!0);G(U,ee,Ee,"\u21D0","\\Leftarrow",!0);G(U,ee,Ee,"\u27F8","\\Longleftarrow",!0);G(U,ee,Ee,"\u27F6","\\longrightarrow",!0);G(U,ee,Ee,"\u21D2","\\Rightarrow",!0);G(U,ee,Ee,"\u27F9","\\Longrightarrow",!0);G(U,ee,Ee,"\u2194","\\leftrightarrow",!0);G(U,ee,Ee,"\u27F7","\\longleftrightarrow",!0);G(U,ee,Ee,"\u21D4","\\Leftrightarrow",!0);G(U,ee,Ee,"\u27FA","\\Longleftrightarrow",!0);G(U,ee,Ee,"\u21A6","\\mapsto",!0);G(U,ee,Ee,"\u27FC","\\longmapsto",!0);G(U,ee,Ee,"\u2197","\\nearrow",!0);G(U,ee,Ee,"\u21A9","\\hookleftarrow",!0);G(U,ee,Ee,"\u21AA","\\hookrightarrow",!0);G(U,ee,Ee,"\u2198","\\searrow",!0);G(U,ee,Ee,"\u21BC","\\leftharpoonup",!0);G(U,ee,Ee,"\u21C0","\\rightharpoonup",!0);G(U,ee,Ee,"\u2199","\\swarrow",!0);G(U,ee,Ee,"\u21BD","\\leftharpoondown",!0);G(U,ee,Ee,"\u21C1","\\rightharpoondown",!0);G(U,ee,Ee,"\u2196","\\nwarrow",!0);G(U,ee,Ee,"\u21CC","\\rightleftharpoons",!0);G(U,ke,Ee,"\u226E","\\nless",!0);G(U,ke,Ee,"\uE010","\\@nleqslant");G(U,ke,Ee,"\uE011","\\@nleqq");G(U,ke,Ee,"\u2A87","\\lneq",!0);G(U,ke,Ee,"\u2268","\\lneqq",!0);G(U,ke,Ee,"\uE00C","\\@lvertneqq");G(U,ke,Ee,"\u22E6","\\lnsim",!0);G(U,ke,Ee,"\u2A89","\\lnapprox",!0);G(U,ke,Ee,"\u2280","\\nprec",!0);G(U,ke,Ee,"\u22E0","\\npreceq",!0);G(U,ke,Ee,"\u22E8","\\precnsim",!0);G(U,ke,Ee,"\u2AB9","\\precnapprox",!0);G(U,ke,Ee,"\u2241","\\nsim",!0);G(U,ke,Ee,"\uE006","\\@nshortmid");G(U,ke,Ee,"\u2224","\\nmid",!0);G(U,ke,Ee,"\u22AC","\\nvdash",!0);G(U,ke,Ee,"\u22AD","\\nvDash",!0);G(U,ke,Ee,"\u22EA","\\ntriangleleft");G(U,ke,Ee,"\u22EC","\\ntrianglelefteq",!0);G(U,ke,Ee,"\u228A","\\subsetneq",!0);G(U,ke,Ee,"\uE01A","\\@varsubsetneq");G(U,ke,Ee,"\u2ACB","\\subsetneqq",!0);G(U,ke,Ee,"\uE017","\\@varsubsetneqq");G(U,ke,Ee,"\u226F","\\ngtr",!0);G(U,ke,Ee,"\uE00F","\\@ngeqslant");G(U,ke,Ee,"\uE00E","\\@ngeqq");G(U,ke,Ee,"\u2A88","\\gneq",!0);G(U,ke,Ee,"\u2269","\\gneqq",!0);G(U,ke,Ee,"\uE00D","\\@gvertneqq");G(U,ke,Ee,"\u22E7","\\gnsim",!0);G(U,ke,Ee,"\u2A8A","\\gnapprox",!0);G(U,ke,Ee,"\u2281","\\nsucc",!0);G(U,ke,Ee,"\u22E1","\\nsucceq",!0);G(U,ke,Ee,"\u22E9","\\succnsim",!0);G(U,ke,Ee,"\u2ABA","\\succnapprox",!0);G(U,ke,Ee,"\u2246","\\ncong",!0);G(U,ke,Ee,"\uE007","\\@nshortparallel");G(U,ke,Ee,"\u2226","\\nparallel",!0);G(U,ke,Ee,"\u22AF","\\nVDash",!0);G(U,ke,Ee,"\u22EB","\\ntriangleright");G(U,ke,Ee,"\u22ED","\\ntrianglerighteq",!0);G(U,ke,Ee,"\uE018","\\@nsupseteqq");G(U,ke,Ee,"\u228B","\\supsetneq",!0);G(U,ke,Ee,"\uE01B","\\@varsupsetneq");G(U,ke,Ee,"\u2ACC","\\supsetneqq",!0);G(U,ke,Ee,"\uE019","\\@varsupsetneqq");G(U,ke,Ee,"\u22AE","\\nVdash",!0);G(U,ke,Ee,"\u2AB5","\\precneqq",!0);G(U,ke,Ee,"\u2AB6","\\succneqq",!0);G(U,ke,Ee,"\uE016","\\@nsubseteqq");G(U,ke,It,"\u22B4","\\unlhd");G(U,ke,It,"\u22B5","\\unrhd");G(U,ke,Ee,"\u219A","\\nleftarrow",!0);G(U,ke,Ee,"\u219B","\\nrightarrow",!0);G(U,ke,Ee,"\u21CD","\\nLeftarrow",!0);G(U,ke,Ee,"\u21CF","\\nRightarrow",!0);G(U,ke,Ee,"\u21AE","\\nleftrightarrow",!0);G(U,ke,Ee,"\u21CE","\\nLeftrightarrow",!0);G(U,ke,Ee,"\u25B3","\\vartriangle");G(U,ke,Le,"\u210F","\\hslash");G(U,ke,Le,"\u25BD","\\triangledown");G(U,ke,Le,"\u25CA","\\lozenge");G(U,ke,Le,"\u24C8","\\circledS");G(U,ke,Le,"\xAE","\\circledR");G(it,ke,Le,"\xAE","\\circledR");G(U,ke,Le,"\u2221","\\measuredangle",!0);G(U,ke,Le,"\u2204","\\nexists");G(U,ke,Le,"\u2127","\\mho");G(U,ke,Le,"\u2132","\\Finv",!0);G(U,ke,Le,"\u2141","\\Game",!0);G(U,ke,Le,"\u2035","\\backprime");G(U,ke,Le,"\u25B2","\\blacktriangle");G(U,ke,Le,"\u25BC","\\blacktriangledown");G(U,ke,Le,"\u25A0","\\blacksquare");G(U,ke,Le,"\u29EB","\\blacklozenge");G(U,ke,Le,"\u2605","\\bigstar");G(U,ke,Le,"\u2222","\\sphericalangle",!0);G(U,ke,Le,"\u2201","\\complement",!0);G(U,ke,Le,"\xF0","\\eth",!0);G(it,ee,Le,"\xF0","\xF0");G(U,ke,Le,"\u2571","\\diagup");G(U,ke,Le,"\u2572","\\diagdown");G(U,ke,Le,"\u25A1","\\square");G(U,ke,Le,"\u25A1","\\Box");G(U,ke,Le,"\u25CA","\\Diamond");G(U,ke,Le,"\xA5","\\yen",!0);G(it,ke,Le,"\xA5","\\yen",!0);G(U,ke,Le,"\u2713","\\checkmark",!0);G(it,ke,Le,"\u2713","\\checkmark");G(U,ke,Le,"\u2136","\\beth",!0);G(U,ke,Le,"\u2138","\\daleth",!0);G(U,ke,Le,"\u2137","\\gimel",!0);G(U,ke,Le,"\u03DD","\\digamma",!0);G(U,ke,Le,"\u03F0","\\varkappa");G(U,ke,js,"\u250C","\\@ulcorner",!0);G(U,ke,Za,"\u2510","\\@urcorner",!0);G(U,ke,js,"\u2514","\\@llcorner",!0);G(U,ke,Za,"\u2518","\\@lrcorner",!0);G(U,ke,Ee,"\u2266","\\leqq",!0);G(U,ke,Ee,"\u2A7D","\\leqslant",!0);G(U,ke,Ee,"\u2A95","\\eqslantless",!0);G(U,ke,Ee,"\u2272","\\lesssim",!0);G(U,ke,Ee,"\u2A85","\\lessapprox",!0);G(U,ke,Ee,"\u224A","\\approxeq",!0);G(U,ke,It,"\u22D6","\\lessdot");G(U,ke,Ee,"\u22D8","\\lll",!0);G(U,ke,Ee,"\u2276","\\lessgtr",!0);G(U,ke,Ee,"\u22DA","\\lesseqgtr",!0);G(U,ke,Ee,"\u2A8B","\\lesseqqgtr",!0);G(U,ke,Ee,"\u2251","\\doteqdot");G(U,ke,Ee,"\u2253","\\risingdotseq",!0);G(U,ke,Ee,"\u2252","\\fallingdotseq",!0);G(U,ke,Ee,"\u223D","\\backsim",!0);G(U,ke,Ee,"\u22CD","\\backsimeq",!0);G(U,ke,Ee,"\u2AC5","\\subseteqq",!0);G(U,ke,Ee,"\u22D0","\\Subset",!0);G(U,ke,Ee,"\u228F","\\sqsubset",!0);G(U,ke,Ee,"\u227C","\\preccurlyeq",!0);G(U,ke,Ee,"\u22DE","\\curlyeqprec",!0);G(U,ke,Ee,"\u227E","\\precsim",!0);G(U,ke,Ee,"\u2AB7","\\precapprox",!0);G(U,ke,Ee,"\u22B2","\\vartriangleleft");G(U,ke,Ee,"\u22B4","\\trianglelefteq");G(U,ke,Ee,"\u22A8","\\vDash",!0);G(U,ke,Ee,"\u22AA","\\Vvdash",!0);G(U,ke,Ee,"\u2323","\\smallsmile");G(U,ke,Ee,"\u2322","\\smallfrown");G(U,ke,Ee,"\u224F","\\bumpeq",!0);G(U,ke,Ee,"\u224E","\\Bumpeq",!0);G(U,ke,Ee,"\u2267","\\geqq",!0);G(U,ke,Ee,"\u2A7E","\\geqslant",!0);G(U,ke,Ee,"\u2A96","\\eqslantgtr",!0);G(U,ke,Ee,"\u2273","\\gtrsim",!0);G(U,ke,Ee,"\u2A86","\\gtrapprox",!0);G(U,ke,It,"\u22D7","\\gtrdot");G(U,ke,Ee,"\u22D9","\\ggg",!0);G(U,ke,Ee,"\u2277","\\gtrless",!0);G(U,ke,Ee,"\u22DB","\\gtreqless",!0);G(U,ke,Ee,"\u2A8C","\\gtreqqless",!0);G(U,ke,Ee,"\u2256","\\eqcirc",!0);G(U,ke,Ee,"\u2257","\\circeq",!0);G(U,ke,Ee,"\u225C","\\triangleq",!0);G(U,ke,Ee,"\u223C","\\thicksim");G(U,ke,Ee,"\u2248","\\thickapprox");G(U,ke,Ee,"\u2AC6","\\supseteqq",!0);G(U,ke,Ee,"\u22D1","\\Supset",!0);G(U,ke,Ee,"\u2290","\\sqsupset",!0);G(U,ke,Ee,"\u227D","\\succcurlyeq",!0);G(U,ke,Ee,"\u22DF","\\curlyeqsucc",!0);G(U,ke,Ee,"\u227F","\\succsim",!0);G(U,ke,Ee,"\u2AB8","\\succapprox",!0);G(U,ke,Ee,"\u22B3","\\vartriangleright");G(U,ke,Ee,"\u22B5","\\trianglerighteq");G(U,ke,Ee,"\u22A9","\\Vdash",!0);G(U,ke,Ee,"\u2223","\\shortmid");G(U,ke,Ee,"\u2225","\\shortparallel");G(U,ke,Ee,"\u226C","\\between",!0);G(U,ke,Ee,"\u22D4","\\pitchfork",!0);G(U,ke,Ee,"\u221D","\\varpropto");G(U,ke,Ee,"\u25C0","\\blacktriangleleft");G(U,ke,Ee,"\u2234","\\therefore",!0);G(U,ke,Ee,"\u220D","\\backepsilon");G(U,ke,Ee,"\u25B6","\\blacktriangleright");G(U,ke,Ee,"\u2235","\\because",!0);G(U,ke,Ee,"\u22D8","\\llless");G(U,ke,Ee,"\u22D9","\\gggtr");G(U,ke,It,"\u22B2","\\lhd");G(U,ke,It,"\u22B3","\\rhd");G(U,ke,Ee,"\u2242","\\eqsim",!0);G(U,ee,Ee,"\u22C8","\\Join");G(U,ke,Ee,"\u2251","\\Doteq",!0);G(U,ke,It,"\u2214","\\dotplus",!0);G(U,ke,It,"\u2216","\\smallsetminus");G(U,ke,It,"\u22D2","\\Cap",!0);G(U,ke,It,"\u22D3","\\Cup",!0);G(U,ke,It,"\u2A5E","\\doublebarwedge",!0);G(U,ke,It,"\u229F","\\boxminus",!0);G(U,ke,It,"\u229E","\\boxplus",!0);G(U,ke,It,"\u22C7","\\divideontimes",!0);G(U,ke,It,"\u22C9","\\ltimes",!0);G(U,ke,It,"\u22CA","\\rtimes",!0);G(U,ke,It,"\u22CB","\\leftthreetimes",!0);G(U,ke,It,"\u22CC","\\rightthreetimes",!0);G(U,ke,It,"\u22CF","\\curlywedge",!0);G(U,ke,It,"\u22CE","\\curlyvee",!0);G(U,ke,It,"\u229D","\\circleddash",!0);G(U,ke,It,"\u229B","\\circledast",!0);G(U,ke,It,"\u22C5","\\centerdot");G(U,ke,It,"\u22BA","\\intercal",!0);G(U,ke,It,"\u22D2","\\doublecap");G(U,ke,It,"\u22D3","\\doublecup");G(U,ke,It,"\u22A0","\\boxtimes",!0);G(U,ke,Ee,"\u21E2","\\dashrightarrow",!0);G(U,ke,Ee,"\u21E0","\\dashleftarrow",!0);G(U,ke,Ee,"\u21C7","\\leftleftarrows",!0);G(U,ke,Ee,"\u21C6","\\leftrightarrows",!0);G(U,ke,Ee,"\u21DA","\\Lleftarrow",!0);G(U,ke,Ee,"\u219E","\\twoheadleftarrow",!0);G(U,ke,Ee,"\u21A2","\\leftarrowtail",!0);G(U,ke,Ee,"\u21AB","\\looparrowleft",!0);G(U,ke,Ee,"\u21CB","\\leftrightharpoons",!0);G(U,ke,Ee,"\u21B6","\\curvearrowleft",!0);G(U,ke,Ee,"\u21BA","\\circlearrowleft",!0);G(U,ke,Ee,"\u21B0","\\Lsh",!0);G(U,ke,Ee,"\u21C8","\\upuparrows",!0);G(U,ke,Ee,"\u21BF","\\upharpoonleft",!0);G(U,ke,Ee,"\u21C3","\\downharpoonleft",!0);G(U,ee,Ee,"\u22B6","\\origof",!0);G(U,ee,Ee,"\u22B7","\\imageof",!0);G(U,ke,Ee,"\u22B8","\\multimap",!0);G(U,ke,Ee,"\u21AD","\\leftrightsquigarrow",!0);G(U,ke,Ee,"\u21C9","\\rightrightarrows",!0);G(U,ke,Ee,"\u21C4","\\rightleftarrows",!0);G(U,ke,Ee,"\u21A0","\\twoheadrightarrow",!0);G(U,ke,Ee,"\u21A3","\\rightarrowtail",!0);G(U,ke,Ee,"\u21AC","\\looparrowright",!0);G(U,ke,Ee,"\u21B7","\\curvearrowright",!0);G(U,ke,Ee,"\u21BB","\\circlearrowright",!0);G(U,ke,Ee,"\u21B1","\\Rsh",!0);G(U,ke,Ee,"\u21CA","\\downdownarrows",!0);G(U,ke,Ee,"\u21BE","\\upharpoonright",!0);G(U,ke,Ee,"\u21C2","\\downharpoonright",!0);G(U,ke,Ee,"\u21DD","\\rightsquigarrow",!0);G(U,ke,Ee,"\u21DD","\\leadsto");G(U,ke,Ee,"\u21DB","\\Rrightarrow",!0);G(U,ke,Ee,"\u21BE","\\restriction");G(U,ee,Le,"\u2018","`");G(U,ee,Le,"$","\\$");G(it,ee,Le,"$","\\$");G(it,ee,Le,"$","\\textdollar");G(U,ee,Le,"%","\\%");G(it,ee,Le,"%","\\%");G(U,ee,Le,"_","\\_");G(it,ee,Le,"_","\\_");G(it,ee,Le,"_","\\textunderscore");G(U,ee,Le,"\u2220","\\angle",!0);G(U,ee,Le,"\u221E","\\infty",!0);G(U,ee,Le,"\u2032","\\prime");G(U,ee,Le,"\u25B3","\\triangle");G(U,ee,Le,"\u0393","\\Gamma",!0);G(U,ee,Le,"\u0394","\\Delta",!0);G(U,ee,Le,"\u0398","\\Theta",!0);G(U,ee,Le,"\u039B","\\Lambda",!0);G(U,ee,Le,"\u039E","\\Xi",!0);G(U,ee,Le,"\u03A0","\\Pi",!0);G(U,ee,Le,"\u03A3","\\Sigma",!0);G(U,ee,Le,"\u03A5","\\Upsilon",!0);G(U,ee,Le,"\u03A6","\\Phi",!0);G(U,ee,Le,"\u03A8","\\Psi",!0);G(U,ee,Le,"\u03A9","\\Omega",!0);G(U,ee,Le,"A","\u0391");G(U,ee,Le,"B","\u0392");G(U,ee,Le,"E","\u0395");G(U,ee,Le,"Z","\u0396");G(U,ee,Le,"H","\u0397");G(U,ee,Le,"I","\u0399");G(U,ee,Le,"K","\u039A");G(U,ee,Le,"M","\u039C");G(U,ee,Le,"N","\u039D");G(U,ee,Le,"O","\u039F");G(U,ee,Le,"P","\u03A1");G(U,ee,Le,"T","\u03A4");G(U,ee,Le,"X","\u03A7");G(U,ee,Le,"\xAC","\\neg",!0);G(U,ee,Le,"\xAC","\\lnot");G(U,ee,Le,"\u22A4","\\top");G(U,ee,Le,"\u22A5","\\bot");G(U,ee,Le,"\u2205","\\emptyset");G(U,ke,Le,"\u2205","\\varnothing");G(U,ee,er,"\u03B1","\\alpha",!0);G(U,ee,er,"\u03B2","\\beta",!0);G(U,ee,er,"\u03B3","\\gamma",!0);G(U,ee,er,"\u03B4","\\delta",!0);G(U,ee,er,"\u03F5","\\epsilon",!0);G(U,ee,er,"\u03B6","\\zeta",!0);G(U,ee,er,"\u03B7","\\eta",!0);G(U,ee,er,"\u03B8","\\theta",!0);G(U,ee,er,"\u03B9","\\iota",!0);G(U,ee,er,"\u03BA","\\kappa",!0);G(U,ee,er,"\u03BB","\\lambda",!0);G(U,ee,er,"\u03BC","\\mu",!0);G(U,ee,er,"\u03BD","\\nu",!0);G(U,ee,er,"\u03BE","\\xi",!0);G(U,ee,er,"\u03BF","\\omicron",!0);G(U,ee,er,"\u03C0","\\pi",!0);G(U,ee,er,"\u03C1","\\rho",!0);G(U,ee,er,"\u03C3","\\sigma",!0);G(U,ee,er,"\u03C4","\\tau",!0);G(U,ee,er,"\u03C5","\\upsilon",!0);G(U,ee,er,"\u03D5","\\phi",!0);G(U,ee,er,"\u03C7","\\chi",!0);G(U,ee,er,"\u03C8","\\psi",!0);G(U,ee,er,"\u03C9","\\omega",!0);G(U,ee,er,"\u03B5","\\varepsilon",!0);G(U,ee,er,"\u03D1","\\vartheta",!0);G(U,ee,er,"\u03D6","\\varpi",!0);G(U,ee,er,"\u03F1","\\varrho",!0);G(U,ee,er,"\u03C2","\\varsigma",!0);G(U,ee,er,"\u03C6","\\varphi",!0);G(U,ee,It,"\u2217","*",!0);G(U,ee,It,"+","+");G(U,ee,It,"\u2212","-",!0);G(U,ee,It,"\u22C5","\\cdot",!0);G(U,ee,It,"\u2218","\\circ",!0);G(U,ee,It,"\xF7","\\div",!0);G(U,ee,It,"\xB1","\\pm",!0);G(U,ee,It,"\xD7","\\times",!0);G(U,ee,It,"\u2229","\\cap",!0);G(U,ee,It,"\u222A","\\cup",!0);G(U,ee,It,"\u2216","\\setminus",!0);G(U,ee,It,"\u2227","\\land");G(U,ee,It,"\u2228","\\lor");G(U,ee,It,"\u2227","\\wedge",!0);G(U,ee,It,"\u2228","\\vee",!0);G(U,ee,Le,"\u221A","\\surd");G(U,ee,js,"\u27E8","\\langle",!0);G(U,ee,js,"\u2223","\\lvert");G(U,ee,js,"\u2225","\\lVert");G(U,ee,Za,"?","?");G(U,ee,Za,"!","!");G(U,ee,Za,"\u27E9","\\rangle",!0);G(U,ee,Za,"\u2223","\\rvert");G(U,ee,Za,"\u2225","\\rVert");G(U,ee,Ee,"=","=");G(U,ee,Ee,":",":");G(U,ee,Ee,"\u2248","\\approx",!0);G(U,ee,Ee,"\u2245","\\cong",!0);G(U,ee,Ee,"\u2265","\\ge");G(U,ee,Ee,"\u2265","\\geq",!0);G(U,ee,Ee,"\u2190","\\gets");G(U,ee,Ee,">","\\gt",!0);G(U,ee,Ee,"\u2208","\\in",!0);G(U,ee,Ee,"\uE020","\\@not");G(U,ee,Ee,"\u2282","\\subset",!0);G(U,ee,Ee,"\u2283","\\supset",!0);G(U,ee,Ee,"\u2286","\\subseteq",!0);G(U,ee,Ee,"\u2287","\\supseteq",!0);G(U,ke,Ee,"\u2288","\\nsubseteq",!0);G(U,ke,Ee,"\u2289","\\nsupseteq",!0);G(U,ee,Ee,"\u22A8","\\models");G(U,ee,Ee,"\u2190","\\leftarrow",!0);G(U,ee,Ee,"\u2264","\\le");G(U,ee,Ee,"\u2264","\\leq",!0);G(U,ee,Ee,"<","\\lt",!0);G(U,ee,Ee,"\u2192","\\rightarrow",!0);G(U,ee,Ee,"\u2192","\\to");G(U,ke,Ee,"\u2271","\\ngeq",!0);G(U,ke,Ee,"\u2270","\\nleq",!0);G(U,ee,uu,"\xA0","\\ ");G(U,ee,uu,"\xA0","\\space");G(U,ee,uu,"\xA0","\\nobreakspace");G(it,ee,uu,"\xA0","\\ ");G(it,ee,uu,"\xA0"," ");G(it,ee,uu,"\xA0","\\space");G(it,ee,uu,"\xA0","\\nobreakspace");G(U,ee,uu,null,"\\nobreak");G(U,ee,uu,null,"\\allowbreak");G(U,ee,x3,",",",");G(U,ee,x3,";",";");G(U,ke,It,"\u22BC","\\barwedge",!0);G(U,ke,It,"\u22BB","\\veebar",!0);G(U,ee,It,"\u2299","\\odot",!0);G(U,ee,It,"\u2295","\\oplus",!0);G(U,ee,It,"\u2297","\\otimes",!0);G(U,ee,Le,"\u2202","\\partial",!0);G(U,ee,It,"\u2298","\\oslash",!0);G(U,ke,It,"\u229A","\\circledcirc",!0);G(U,ke,It,"\u22A1","\\boxdot",!0);G(U,ee,It,"\u25B3","\\bigtriangleup");G(U,ee,It,"\u25BD","\\bigtriangledown");G(U,ee,It,"\u2020","\\dagger");G(U,ee,It,"\u22C4","\\diamond");G(U,ee,It,"\u22C6","\\star");G(U,ee,It,"\u25C3","\\triangleleft");G(U,ee,It,"\u25B9","\\triangleright");G(U,ee,js,"{","\\{");G(it,ee,Le,"{","\\{");G(it,ee,Le,"{","\\textbraceleft");G(U,ee,Za,"}","\\}");G(it,ee,Le,"}","\\}");G(it,ee,Le,"}","\\textbraceright");G(U,ee,js,"{","\\lbrace");G(U,ee,Za,"}","\\rbrace");G(U,ee,js,"[","\\lbrack",!0);G(it,ee,Le,"[","\\lbrack",!0);G(U,ee,Za,"]","\\rbrack",!0);G(it,ee,Le,"]","\\rbrack",!0);G(U,ee,js,"(","\\lparen",!0);G(U,ee,Za,")","\\rparen",!0);G(it,ee,Le,"<","\\textless",!0);G(it,ee,Le,">","\\textgreater",!0);G(U,ee,js,"\u230A","\\lfloor",!0);G(U,ee,Za,"\u230B","\\rfloor",!0);G(U,ee,js,"\u2308","\\lceil",!0);G(U,ee,Za,"\u2309","\\rceil",!0);G(U,ee,Le,"\\","\\backslash");G(U,ee,Le,"\u2223","|");G(U,ee,Le,"\u2223","\\vert");G(it,ee,Le,"|","\\textbar",!0);G(U,ee,Le,"\u2225","\\|");G(U,ee,Le,"\u2225","\\Vert");G(it,ee,Le,"\u2225","\\textbardbl");G(it,ee,Le,"~","\\textasciitilde");G(it,ee,Le,"\\","\\textbackslash");G(it,ee,Le,"^","\\textasciicircum");G(U,ee,Ee,"\u2191","\\uparrow",!0);G(U,ee,Ee,"\u21D1","\\Uparrow",!0);G(U,ee,Ee,"\u2193","\\downarrow",!0);G(U,ee,Ee,"\u21D3","\\Downarrow",!0);G(U,ee,Ee,"\u2195","\\updownarrow",!0);G(U,ee,Ee,"\u21D5","\\Updownarrow",!0);G(U,ee,ki,"\u2210","\\coprod");G(U,ee,ki,"\u22C1","\\bigvee");G(U,ee,ki,"\u22C0","\\bigwedge");G(U,ee,ki,"\u2A04","\\biguplus");G(U,ee,ki,"\u22C2","\\bigcap");G(U,ee,ki,"\u22C3","\\bigcup");G(U,ee,ki,"\u222B","\\int");G(U,ee,ki,"\u222B","\\intop");G(U,ee,ki,"\u222C","\\iint");G(U,ee,ki,"\u222D","\\iiint");G(U,ee,ki,"\u220F","\\prod");G(U,ee,ki,"\u2211","\\sum");G(U,ee,ki,"\u2A02","\\bigotimes");G(U,ee,ki,"\u2A01","\\bigoplus");G(U,ee,ki,"\u2A00","\\bigodot");G(U,ee,ki,"\u222E","\\oint");G(U,ee,ki,"\u222F","\\oiint");G(U,ee,ki,"\u2230","\\oiiint");G(U,ee,ki,"\u2A06","\\bigsqcup");G(U,ee,ki,"\u222B","\\smallint");G(it,ee,p0,"\u2026","\\textellipsis");G(U,ee,p0,"\u2026","\\mathellipsis");G(it,ee,p0,"\u2026","\\ldots",!0);G(U,ee,p0,"\u2026","\\ldots",!0);G(U,ee,p0,"\u22EF","\\@cdots",!0);G(U,ee,p0,"\u22F1","\\ddots",!0);G(U,ee,Le,"\u22EE","\\varvdots");G(U,ee,Vn,"\u02CA","\\acute");G(U,ee,Vn,"\u02CB","\\grave");G(U,ee,Vn,"\xA8","\\ddot");G(U,ee,Vn,"~","\\tilde");G(U,ee,Vn,"\u02C9","\\bar");G(U,ee,Vn,"\u02D8","\\breve");G(U,ee,Vn,"\u02C7","\\check");G(U,ee,Vn,"^","\\hat");G(U,ee,Vn,"\u20D7","\\vec");G(U,ee,Vn,"\u02D9","\\dot");G(U,ee,Vn,"\u02DA","\\mathring");G(U,ee,er,"\uE131","\\@imath");G(U,ee,er,"\uE237","\\@jmath");G(U,ee,Le,"\u0131","\u0131");G(U,ee,Le,"\u0237","\u0237");G(it,ee,Le,"\u0131","\\i",!0);G(it,ee,Le,"\u0237","\\j",!0);G(it,ee,Le,"\xDF","\\ss",!0);G(it,ee,Le,"\xE6","\\ae",!0);G(it,ee,Le,"\u0153","\\oe",!0);G(it,ee,Le,"\xF8","\\o",!0);G(it,ee,Le,"\xC6","\\AE",!0);G(it,ee,Le,"\u0152","\\OE",!0);G(it,ee,Le,"\xD8","\\O",!0);G(it,ee,Vn,"\u02CA","\\'");G(it,ee,Vn,"\u02CB","\\`");G(it,ee,Vn,"\u02C6","\\^");G(it,ee,Vn,"\u02DC","\\~");G(it,ee,Vn,"\u02C9","\\=");G(it,ee,Vn,"\u02D8","\\u");G(it,ee,Vn,"\u02D9","\\.");G(it,ee,Vn,"\xB8","\\c");G(it,ee,Vn,"\u02DA","\\r");G(it,ee,Vn,"\u02C7","\\v");G(it,ee,Vn,"\xA8",'\\"');G(it,ee,Vn,"\u02DD","\\H");G(it,ee,Vn,"\u25EF","\\textcircled");Hz={"--":!0,"---":!0,"``":!0,"''":!0};G(it,ee,Le,"\u2013","--",!0);G(it,ee,Le,"\u2013","\\textendash");G(it,ee,Le,"\u2014","---",!0);G(it,ee,Le,"\u2014","\\textemdash");G(it,ee,Le,"\u2018","`",!0);G(it,ee,Le,"\u2018","\\textquoteleft");G(it,ee,Le,"\u2019","'",!0);G(it,ee,Le,"\u2019","\\textquoteright");G(it,ee,Le,"\u201C","``",!0);G(it,ee,Le,"\u201C","\\textquotedblleft");G(it,ee,Le,"\u201D","''",!0);G(it,ee,Le,"\u201D","\\textquotedblright");G(U,ee,Le,"\xB0","\\degree",!0);G(it,ee,Le,"\xB0","\\degree");G(it,ee,Le,"\xB0","\\textdegree",!0);G(U,ee,Le,"\xA3","\\pounds");G(U,ee,Le,"\xA3","\\mathsterling",!0);G(it,ee,Le,"\xA3","\\pounds");G(it,ee,Le,"\xA3","\\textsterling",!0);G(U,ke,Le,"\u2720","\\maltese");G(it,ke,Le,"\u2720","\\maltese");fz='0123456789/@."';for(J4=0;J4<fz.length;J4++)f7=fz.charAt(J4),G(U,ee,Le,f7,f7);dz='0123456789!@*()-=+";:?/.,';for(e3=0;e3<dz.length;e3++)d7=dz.charAt(e3),G(it,ee,Le,d7,d7);d3="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";for(t3=0;t3<d3.length;t3++)Py=d3.charAt(t3),G(U,ee,er,Py,Py),G(it,ee,Le,Py,Py);G(U,ke,Le,"C","\u2102");G(it,ke,Le,"C","\u2102");G(U,ke,Le,"H","\u210D");G(it,ke,Le,"H","\u210D");G(U,ke,Le,"N","\u2115");G(it,ke,Le,"N","\u2115");G(U,ke,Le,"P","\u2119");G(it,ke,Le,"P","\u2119");G(U,ke,Le,"Q","\u211A");G(it,ke,Le,"Q","\u211A");G(U,ke,Le,"R","\u211D");G(it,ke,Le,"R","\u211D");G(U,ke,Le,"Z","\u2124");G(it,ke,Le,"Z","\u2124");G(U,ee,er,"h","\u210E");G(it,ee,er,"h","\u210E");sr="";for(Ca=0;Ca<d3.length;Ca++)Jn=d3.charAt(Ca),sr=String.fromCharCode(55349,56320+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56372+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56424+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56580+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56684+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56736+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56788+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56840+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56944+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),Ca<26&&(sr=String.fromCharCode(55349,56632+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56476+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr));sr="\u{1D55C}";G(U,ee,er,"k",sr);G(it,ee,Le,"k",sr);for(uh=0;uh<10;uh++)iu=uh.toString(),sr=String.fromCharCode(55349,57294+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57314+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57324+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57334+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr);C7="\xD0\xDE\xFE";for(r3=0;r3<C7.length;r3++)By=C7.charAt(r3),G(U,ee,er,By,By),G(it,ee,Le,By,By);n3=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],pz=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],Obe=o(function(e,r){var n=e.charCodeAt(0),i=e.charCodeAt(1),a=(n-55296)*1024+(i-56320)+65536,s=r==="math"?0:1;if(119808<=a&&a<120484){var l=Math.floor((a-119808)/26);return[n3[l][2],n3[l][s]]}else if(120782<=a&&a<=120831){var u=Math.floor((a-120782)/10);return[pz[u][2],pz[u][s]]}else{if(a===120485||a===120486)return[n3[0][2],n3[0][s]];if(120486<a&&a<120782)return["",""];throw new gt("Unsupported character: "+e)}},"wideCharacterFont"),b3=o(function(e,r,n){return An[n][e]&&An[n][e].replace&&(e=An[n][e].replace),{value:e,metrics:P7(e,r,n)}},"lookupSymbol"),ol=o(function(e,r,n,i,a){var s=b3(e,r,n),l=s.metrics;e=s.value;var u;if(l){var h=l.italic;(n==="text"||i&&i.font==="mathit")&&(h=0),u=new Ts(e,l.height,l.depth,h,l.skew,l.width,a)}else typeof console<"u"&&console.warn("No character metrics "+("for '"+e+"' in style '"+r+"' and mode '"+n+"'")),u=new Ts(e,0,0,0,0,0,a);if(i){u.maxFontSize=i.sizeMultiplier,i.style.isTight()&&u.classes.push("mtight");var f=i.getColor();f&&(u.style.color=f)}return u},"makeSymbol"),Pbe=o(function(e,r,n,i){return i===void 0&&(i=[]),n.font==="boldsymbol"&&b3(e,"Main-Bold",r).metrics?ol(e,"Main-Bold",r,n,i.concat(["mathbf"])):e==="\\"||An[r][e].font==="main"?ol(e,"Main-Regular",r,n,i):ol(e,"AMS-Regular",r,n,i.concat(["amsrm"]))},"mathsym"),Bbe=o(function(e,r,n,i,a){return a!=="textord"&&b3(e,"Math-BoldItalic",r).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}},"boldsymbol"),Fbe=o(function(e,r,n){var i=e.mode,a=e.text,s=["mord"],l=i==="math"||i==="text"&&r.font,u=l?r.font:r.fontFamily,h="",f="";if(a.charCodeAt(0)===55349&&([h,f]=Obe(a,i)),h.length>0)return ol(a,h,i,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=Bbe(a,i,r,s,n);d=m.fontName,p=[m.fontClass]}else l?(d=Yz[u].fontName,p=[u]):(d=i3(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(b3(a,d,i).metrics)return ol(a,d,i,r,s.concat(p));if(Hz.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y<a.length;y++)g.push(ol(a[y],d,i,r,s.concat(p)));return qz(g)}}if(n==="mathord")return ol(a,"Math-Italic",i,r,s.concat(["mathnormal"]));if(n==="textord"){var v=An[i][a]&&An[i][a].font;if(v==="ams"){var x=i3("amsrm",r.fontWeight,r.fontShape);return ol(a,x,i,r,s.concat("amsrm",r.fontWeight,r.fontShape))}else if(v==="main"||!v){var b=i3("textrm",r.fontWeight,r.fontShape);return ol(a,b,i,r,s.concat(r.fontWeight,r.fontShape))}else{var w=i3(v,r.fontWeight,r.fontShape);return ol(a,w,i,r,s.concat(w,r.fontWeight,r.fontShape))}}else throw new Error("unexpected type: "+n+" in makeOrd")},"makeOrd"),$be=o((t,e)=>{if(fh(t.classes)!==fh(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n in t.style)if(t.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;for(var i in e.style)if(e.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;return!0},"canCombine"),zbe=o(t=>{for(var e=0;e<t.length-1;e++){var r=t[e],n=t[e+1];r instanceof Ts&&n instanceof Ts&&$be(r,n)&&(r.text+=n.text,r.height=Math.max(r.height,n.height),r.depth=Math.max(r.depth,n.depth),r.italic=n.italic,t.splice(e+1,1),e--)}return t},"tryCombineChars"),B7=o(function(e){for(var r=0,n=0,i=0,a=0;a<e.children.length;a++){var s=e.children[a];s.height>r&&(r=s.height),s.depth>n&&(n=s.depth),s.maxFontSize>i&&(i=s.maxFontSize)}e.height=r,e.depth=n,e.maxFontSize=i},"sizeElementFromChildren"),bs=o(function(e,r,n,i){var a=new td(e,r,n,i);return B7(a),a},"makeSpan"),Wz=o((t,e,r,n)=>new td(t,e,r,n),"makeSvgSpan"),Gbe=o(function(e,r,n){var i=bs([e],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=kt(i.height),i.maxFontSize=1,i},"makeLineSpan"),Vbe=o(function(e,r,n,i){var a=new Vy(e,r,n,i);return B7(a),a},"makeAnchor"),qz=o(function(e){var r=new ed(e);return B7(r),r},"makeFragment"),Ube=o(function(e,r){return e instanceof ed?bs([],[e],r):e},"wrapFragment"),Hbe=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,s=1;s<r.length;s++){var l=-r[s].shift-a-r[s].elem.depth,u=l-(r[s-1].elem.height+r[s-1].elem.depth);a=a+l,n.push({type:"kern",size:u}),n.push(r[s])}return{children:n,depth:i}}var h;if(e.positionType==="top"){for(var f=e.positionData,d=0;d<e.children.length;d++){var p=e.children[d];f-=p.type==="kern"?p.size:p.elem.height+p.elem.depth}h=f}else if(e.positionType==="bottom")h=-e.positionData;else{var m=e.children[0];if(m.type!=="elem")throw new Error('First child must have type "elem".');if(e.positionType==="shift")h=-m.elem.depth-e.positionData;else if(e.positionType==="firstBaseline")h=-m.elem.depth;else throw new Error("Invalid positionType "+e.positionType+".")}return{children:e.children,depth:h}},"getVListChildrenAndDepth"),Wbe=o(function(e,r){for(var{children:n,depth:i}=Hbe(e),a=0,s=0;s<n.length;s++){var l=n[s];if(l.type==="elem"){var u=l.elem;a=Math.max(a,u.maxFontSize,u.height)}}a+=2;var h=bs(["pstrut"],[]);h.style.height=kt(a);for(var f=[],d=i,p=i,m=i,g=0;g<n.length;g++){var y=n[g];if(y.type==="kern")m+=y.size;else{var v=y.elem,x=y.wrapperClasses||[],b=y.wrapperStyle||{},w=bs(x,[h,v],void 0,b);w.style.top=kt(-a-m-v.depth),y.marginLeft&&(w.style.marginLeft=y.marginLeft),y.marginRight&&(w.style.marginRight=y.marginRight),f.push(w),m+=v.height+v.depth}d=Math.min(d,m),p=Math.max(p,m)}var C=bs(["vlist"],f);C.style.height=kt(p);var T;if(d<0){var E=bs([],[]),A=bs(["vlist"],[E]);A.style.height=kt(-d);var S=bs(["vlist-s"],[new Ts("\u200B")]);T=[bs(["vlist-r"],[C,S]),bs(["vlist-r"],[A])]}else T=[bs(["vlist-r"],[C])];var _=bs(["vlist-t"],T);return T.length===2&&_.classes.push("vlist-t2"),_.height=p,_.depth=-d,_},"makeVList"),qbe=o((t,e)=>{var r=bs(["mspace"],[],e),n=ti(t,e);return r.style.marginRight=kt(n),r},"makeGlue"),i3=o(function(e,r,n){var i="";switch(e){case"amsrm":i="AMS";break;case"textrm":i="Main";break;case"textsf":i="SansSerif";break;case"texttt":i="Typewriter";break;default:i=e}var a;return r==="textbf"&&n==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",i+"-"+a},"retrieveTextFontName"),Yz={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Xz={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ybe=o(function(e,r){var[n,i,a]=Xz[e],s=new Kl(n),l=new ll([s],{width:kt(i),height:kt(a),style:"width:"+kt(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=Wz(["overlay"],[l],r);return u.height=a,u.style.height=kt(a),u.style.width=kt(i),u},"staticSvg"),Be={fontMap:Yz,makeSymbol:ol,mathsym:Pbe,makeSpan:bs,makeSvgSpan:Wz,makeLineSpan:Gbe,makeAnchor:Vbe,makeFragment:qz,wrapFragment:Ube,makeVList:Wbe,makeOrd:Fbe,makeGlue:qbe,staticSvg:Ybe,svgData:Xz,tryCombineChars:zbe},ei={number:3,unit:"mu"},Zf={number:4,unit:"mu"},au={number:5,unit:"mu"},Xbe={mord:{mop:ei,mbin:Zf,mrel:au,minner:ei},mop:{mord:ei,mop:ei,mrel:au,minner:ei},mbin:{mord:Zf,mop:Zf,mopen:Zf,minner:Zf},mrel:{mord:au,mop:au,mopen:au,minner:au},mopen:{},mclose:{mop:ei,mbin:Zf,mrel:au,minner:ei},mpunct:{mord:ei,mop:ei,mrel:au,mopen:ei,mclose:ei,mpunct:ei,minner:ei},minner:{mord:ei,mop:ei,mbin:Zf,mrel:au,mopen:ei,mpunct:ei,minner:ei}},jbe={mord:{mop:ei},mop:{mord:ei,mop:ei},mbin:{},mrel:{},mopen:{},mclose:{mop:ei},mpunct:{},minner:{mop:ei}},jz={},p3={},m3={};o(Nt,"defineFunction");o(rd,"defineFunctionBuilders");g3=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),di=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),lu=Be.makeSpan,Kbe=["leftmost","mbin","mopen","mrel","mop","mpunct"],Qbe=["rightmost","mrel","mclose","mpunct"],Zbe={display:tr.DISPLAY,text:tr.TEXT,script:tr.SCRIPT,scriptscript:tr.SCRIPTSCRIPT},Jbe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Pi=o(function(e,r,n,i){i===void 0&&(i=[null,null]);for(var a=[],s=0;s<e.length;s++){var l=Fr(e[s],r);if(l instanceof ed){var u=l.children;a.push(...u)}else a.push(l)}if(Be.tryCombineChars(a),!n)return a;var h=r;if(e.length===1){var f=e[0];f.type==="sizing"?h=r.havingSize(f.size):f.type==="styling"&&(h=r.havingStyle(Zbe[f.style]))}var d=lu([i[0]||"leftmost"],[],r),p=lu([i[1]||"rightmost"],[],r),m=n==="root";return mz(a,(g,y)=>{var v=y.classes[0],x=g.classes[0];v==="mbin"&&Jt.contains(Qbe,x)?y.classes[0]="mord":x==="mbin"&&Jt.contains(Kbe,v)&&(g.classes[0]="mord")},{node:d},p,m),mz(a,(g,y)=>{var v=A7(y),x=A7(g),b=v&&x?g.hasClass("mtight")?jbe[v][x]:Xbe[v][x]:null;if(b)return Be.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),mz=o(function t(e,r,n,i,a){i&&e.push(i);for(var s=0;s<e.length;s++){var l=e[s],u=Kz(l);if(u){t(u.children,r,n,null,a);continue}var h=!l.hasClass("mspace");if(h){var f=r(l,n.node);f&&(n.insertAfter?n.insertAfter(f):(e.unshift(f),s++))}h?n.node=l:a&&l.hasClass("newline")&&(n.node=lu(["leftmost"])),n.insertAfter=(d=>p=>{e.splice(d+1,0,p),s++})(s)}i&&e.pop()},"traverseNonSpaceNodes"),Kz=o(function(e){return e instanceof ed||e instanceof Vy||e instanceof td&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),e4e=o(function t(e,r){var n=Kz(e);if(n){var i=n.children;if(i.length){if(r==="right")return t(i[i.length-1],"right");if(r==="left")return t(i[0],"left")}}return e},"getOutermostNode"),A7=o(function(e,r){return e?(r&&(e=e4e(e,r)),Jbe[e.classes[0]]||null):null},"getTypeOfDomTree"),Hy=o(function(e,r){var n=["nulldelimiter"].concat(e.baseSizingClasses());return lu(r.concat(n))},"makeNullDelimiter"),Fr=o(function(e,r,n){if(!e)return lu();if(p3[e.type]){var i=p3[e.type](e,r);if(n&&r.size!==n.size){i=lu(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(a3,"buildHTMLUnbreakable");o(_7,"buildHTML");o(Qz,"newDocumentFragment");ws=class{static{o(this,"MathNode")}constructor(e,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=fh(this.classes));for(var n=0;n<this.children.length;n++)e.appendChild(this.children[n].toNode());return e}toMarkup(){var e="<"+this.type;for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="',e+=Jt.escape(this.attributes[r]),e+='"');this.classes.length>0&&(e+=' class ="'+Jt.escape(fh(this.classes))+'"'),e+=">";for(var n=0;n<this.children.length;n++)e+=this.children[n].toMarkup();return e+="</"+this.type+">",e}toText(){return this.children.map(e=>e.toText()).join("")}},Jf=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return Jt.escape(this.toText())}toText(){return this.text}},D7=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",kt(this.width)),e}toMarkup(){return this.character?"<mtext>"+this.character+"</mtext>":'<mspace width="'+kt(this.width)+'"/>'}toText(){return this.character?this.character:" "}},dt={MathNode:ws,TextNode:Jf,SpaceNode:D7,newDocumentFragment:Qz},Co=o(function(e,r,n){return An[r][e]&&An[r][e].replace&&e.charCodeAt(0)!==55349&&!(Hz.hasOwnProperty(e)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(e=An[r][e].replace),new dt.TextNode(e)},"makeText"),F7=o(function(e){return e.length===1?e[0]:new dt.MathNode("mrow",e)},"makeRow"),$7=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var n=r.font;if(!n||n==="mathnormal")return null;var i=e.mode;if(n==="mathit")return"italic";if(n==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(n==="mathbf")return"bold";if(n==="mathbb")return"double-struck";if(n==="mathfrak")return"fraktur";if(n==="mathscr"||n==="mathcal")return"script";if(n==="mathsf")return"sans-serif";if(n==="mathtt")return"monospace";var a=e.text;if(Jt.contains(["\\imath","\\jmath"],a))return null;An[i][a]&&An[i][a].replace&&(a=An[i][a].replace);var s=Be.fontMap[n].fontName;return P7(a,s,i)?Be.fontMap[n].variant:null},"getVariant"),ks=o(function(e,r,n){if(e.length===1){var i=yn(e[0],r);return n&&i instanceof ws&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],s,l=0;l<e.length;l++){var u=yn(e[l],r);if(u instanceof ws&&s instanceof ws){if(u.type==="mtext"&&s.type==="mtext"&&u.getAttribute("mathvariant")===s.getAttribute("mathvariant")){s.children.push(...u.children);continue}else if(u.type==="mn"&&s.type==="mn"){s.children.push(...u.children);continue}else if(u.type==="mi"&&u.children.length===1&&s.type==="mn"){var h=u.children[0];if(h instanceof Jf&&h.text==="."){s.children.push(...u.children);continue}}else if(s.type==="mi"&&s.children.length===1){var f=s.children[0];if(f instanceof Jf&&f.text==="\u0338"&&(u.type==="mo"||u.type==="mi"||u.type==="mn")){var d=u.children[0];d instanceof Jf&&d.text.length>0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),dh=o(function(e,r,n){return F7(ks(e,r,n))},"buildExpressionRow"),yn=o(function(e,r){if(!e)return new dt.MathNode("mrow");if(m3[e.type]){var n=m3[e.type](e,r);return n}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(gz,"buildMathML");Zz=o(function(e){return new f3({style:e.displayMode?tr.DISPLAY:tr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),Jz=o(function(e,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),e=Be.makeSpan(n,[e])}return e},"displayWrap"),t4e=o(function(e,r,n){var i=Zz(n),a;if(n.output==="mathml")return gz(e,r,i,n.displayMode,!0);if(n.output==="html"){var s=_7(e,i);a=Be.makeSpan(["katex"],[s])}else{var l=gz(e,r,i,n.displayMode,!1),u=_7(e,i);a=Be.makeSpan(["katex"],[l,u])}return Jz(a,n)},"buildTree"),r4e=o(function(e,r,n){var i=Zz(n),a=_7(e,i),s=Be.makeSpan(["katex"],[a]);return Jz(s,n)},"buildHTMLTree"),n4e={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},i4e=o(function(e){var r=new dt.MathNode("mo",[new dt.TextNode(n4e[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),a4e={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},s4e=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),o4e=o(function(e,r){function n(){var l=4e5,u=e.label.slice(1);if(Jt.contains(["widehat","widecheck","widetilde","utilde"],u)){var h=e,f=s4e(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new Kl(p),v=new ll([y],{width:"100%",height:kt(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:Be.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=a4e[u],[w,C,T]=b,E=T/1e3,A=w.length,S,_;if(A===1){var I=b[3];S=["hide-tail"],_=[I]}else if(A===2)S=["halfarrow-left","halfarrow-right"],_=["xMinYMin","xMaxYMin"];else if(A===3)S=["brace-left","brace-center","brace-right"],_=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support | |
| 270 | + `+A+" children.");for(var D=0;D<A;D++){var k=new Kl(w[D]),L=new ll([k],{width:"400em",height:kt(E),viewBox:"0 0 "+l+" "+T,preserveAspectRatio:_[D]+" slice"}),R=Be.makeSvgSpan([S[D]],[L],r);if(A===1)return{span:R,minWidth:C,height:E};R.style.height=kt(E),x.push(R)}return{span:Be.makeSpan(["stretchy"],x,r),minWidth:C,height:E}}}o(n,"buildSvgSpan_");var{span:i,minWidth:a,height:s}=n();return i.height=s,i.style.height=kt(s),a>0&&(i.style.minWidth=kt(a)),i},"svgSpan"),l4e=o(function(e,r,n,i,a){var s,l=e.height+e.depth+n+i;if(/fbox|color|angl/.test(r)){if(s=Be.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new Uy({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new Uy({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new ll(h,{width:"100%",height:kt(l)});s=Be.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=kt(l),s},"encloseSpan"),cu={encloseSpan:l4e,mathMLnode:i4e,svgSpan:o4e};o(xr,"assertNodeType");o(z7,"assertSymbolNodeType");o(w3,"checkSymbolNodeType");G7=o((t,e)=>{var r,n,i;t&&t.type==="supsub"?(n=xr(t.base,"accent"),r=n.base,t.base=r,i=Nbe(Fr(t,e)),t.base=n):(n=xr(t,"accent"),r=n.base);var a=Fr(r,e.havingCrampedStyle()),s=n.isShifty&&Jt.isCharacterBox(r),l=0;if(s){var u=Jt.getBaseElem(r),h=Fr(u,e.havingCrampedStyle());l=hz(h).skew}var f=n.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(n.isStretchy)p=cu.svgSpan(n,e),p=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+kt(2*l)+")",marginLeft:kt(2*l)}:void 0}]},e);else{var m,g;n.label==="\\vec"?(m=Be.staticSvg("vec",e),g=Be.svgData.vec[1]):(m=Be.makeOrd({mode:n.mode,text:n.label},e,"textord"),m=hz(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=Be.makeSpan(["accent-body"],[m]);var y=n.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=kt(v),n.label==="\\textcircled"&&(p.style.top=".2em"),p=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=Be.makeSpan(["mord","accent"],[p],e);return i?(i.children[0]=x,i.height=Math.max(x.height,i.height),i.classes[0]="mord",i):x},"htmlBuilder$a"),eG=o((t,e)=>{var r=t.isStretchy?cu.mathMLnode(t.label):new dt.MathNode("mo",[Co(t.label,t.mode)]),n=new dt.MathNode("mover",[yn(t.base,e),r]);return n.setAttribute("accent","true"),n},"mathmlBuilder$9"),c4e=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));Nt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=g3(e[0]),n=!c4e.test(t.funcName),i=!n||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:n,isShifty:i,base:r}},"handler"),htmlBuilder:G7,mathmlBuilder:eG});Nt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],n=t.parser.mode;return n==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:G7,mathmlBuilder:eG});Nt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},"handler"),htmlBuilder:o((t,e)=>{var r=Fr(t.base,e),n=cu.svgSpan(t,e),i=t.label==="\\utilde"?.12:0,a=Be.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},e);return Be.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=cu.mathMLnode(t.label),n=new dt.MathNode("munder",[yn(t.base,e),r]);return n.setAttribute("accentunder","true"),n},"mathmlBuilder")});s3=o(t=>{var e=new dt.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");Nt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n,funcName:i}=t;return{type:"xArrow",mode:n.mode,label:i,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,n=e.havingStyle(r.sup()),i=Be.wrapFragment(Fr(t.body,n,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var s;t.below&&(n=e.havingStyle(r.sub()),s=Be.wrapFragment(Fr(t.below,n,e),e),s.classes.push(a+"-arrow-pad"));var l=cu.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(i.depth>.25||t.label==="\\xleftequilibrium")&&(h-=i.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),Be.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=cu.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(t.body){var i=s3(yn(t.body,e));if(t.below){var a=s3(yn(t.below,e));n=new dt.MathNode("munderover",[r,a,i])}else n=new dt.MathNode("mover",[r,i])}else if(t.below){var s=s3(yn(t.below,e));n=new dt.MathNode("munder",[r,s])}else n=s3(),n=new dt.MathNode("mover",[r,n]);return n}});u4e=Be.makeSpan;o(tG,"htmlBuilder$9");o(rG,"mathmlBuilder$8");Nt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:di(i),isCharacterBox:Jt.isCharacterBox(i)}},htmlBuilder:tG,mathmlBuilder:rG});T3=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");Nt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:T3(e[0]),body:di(e[1]),isCharacterBox:Jt.isCharacterBox(e[1])}}});Nt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:n}=t,i=e[1],a=e[0],s;n!=="\\stackrel"?s=T3(i):s="mrel";var l={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:di(i)},u={type:"supsub",mode:a.mode,base:l,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:Jt.isCharacterBox(u)}},htmlBuilder:tG,mathmlBuilder:rG});Nt({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:T3(e[0]),body:di(e[0])}},htmlBuilder(t,e){var r=Pi(t.body,e,!0),n=Be.makeSpan([t.mclass],r,e);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(t,e){var r=ks(t.body,e),n=new dt.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});h4e={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},yz=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),vz=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),f4e=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(d4e,"cdArrow");o(p4e,"parseCD");Nt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),n=Be.wrapFragment(Fr(t.label,r,e),e);return n.classes.push("cd-label-"+t.side),n.style.bottom=kt(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(t,e){var r=new dt.MathNode("mrow",[yn(t.label,e)]);return r=new dt.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new dt.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Nt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=Be.wrapFragment(Fr(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new dt.MathNode("mrow",[yn(t.fragment,e)])}});Nt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,n=xr(e[0],"ordgroup"),i=n.body,a="",s=0;s<i.length;s++){var l=xr(i[s],"textord");a+=l.text}var u=parseInt(a),h;if(isNaN(u))throw new gt("\\@char has non-numeric argument "+a);if(u<0||u>=1114111)throw new gt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});nG=o((t,e)=>{var r=Pi(t.body,e.withColor(t.color),!1);return Be.makeFragment(r)},"htmlBuilder$8"),iG=o((t,e)=>{var r=ks(t.body,e.withColor(t.color)),n=new dt.MathNode("mstyle",r);return n.setAttribute("mathcolor",t.color),n},"mathmlBuilder$7");Nt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,n=xr(e[0],"color-token").color,i=e[1];return{type:"color",mode:r.mode,color:n,body:di(i)}},htmlBuilder:nG,mathmlBuilder:iG});Nt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:n}=t,i=xr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:nG,mathmlBuilder:iG});Nt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:n}=t,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&xr(i,"size").value}},htmlBuilder(t,e){var r=Be.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=kt(ti(t.size,e)))),r},mathmlBuilder(t,e){var r=new dt.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",kt(ti(t.size,e)))),r}});L7={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},aG=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new gt("Expected a control sequence",t);return e},"checkControlSequence"),m4e=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),sG=o((t,e,r,n)=>{var i=t.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,i,n)},"letCommand");Nt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var n=e.fetch();if(L7[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=L7[n.text]),xr(e.parseFunction(),"internal");throw new gt("Invalid token after macro prefix",n)}});Nt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new gt("Expected a control sequence",n);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(n=e.gullet.popToken(),n.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(n=e.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new gt('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new gt('Argument number "'+n.text+'" out of order');a++,l.push([])}else{if(n.text==="EOF")throw new gt("Expected a macro definition");l[a].push(n.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(i,{tokens:u,numArgs:a,delimiters:l},r===L7[r]),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=aG(e.gullet.popToken());e.gullet.consumeSpaces();var i=m4e(e);return sG(e,n,i,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=aG(e.gullet.popToken()),i=e.gullet.popToken(),a=e.gullet.popToken();return sG(e,n,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(i),{type:"internal",mode:e.mode}}});Fy=o(function(e,r,n){var i=An.math[e]&&An.math[e].replace,a=P7(i||e,r,n);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),V7=o(function(e,r,n,i){var a=n.havingBaseStyle(r),s=Be.makeSpan(i.concat(a.sizingClasses(n)),[e],n),l=a.sizeMultiplier/n.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),oG=o(function(e,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=kt(a),e.height-=a,e.depth+=a},"centerSpan"),g4e=o(function(e,r,n,i,a,s){var l=Be.makeSymbol(e,"Main-Regular",a,i),u=V7(l,r,i,s);return n&&oG(u,i,r),u},"makeSmallDelim"),y4e=o(function(e,r,n,i){return Be.makeSymbol(e,"Size"+r+"-Regular",n,i)},"mathrmSize"),lG=o(function(e,r,n,i,a,s){var l=y4e(e,r,a,i),u=V7(Be.makeSpan(["delimsizing","size"+r],[l],i),tr.TEXT,i,s);return n&&oG(u,i,tr.TEXT),u},"makeLargeDelim"),p7=o(function(e,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=Be.makeSpan(["delimsizinginner",i],[Be.makeSpan([],[Be.makeSymbol(e,r,n)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),m7=o(function(e,r,n){var i=jl["Size4-Regular"][e.charCodeAt(0)]?jl["Size4-Regular"][e.charCodeAt(0)][4]:jl["Size1-Regular"][e.charCodeAt(0)][4],a=new Kl("inner",Sbe(e,Math.round(1e3*r))),s=new ll([a],{width:kt(i),height:kt(r),style:"width:"+kt(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=Be.makeSvgSpan([],[s],n);return l.height=r,l.style.height=kt(r),l.style.width=kt(i),{type:"elem",elem:l}},"makeInner"),R7=.008,o3={type:"kern",size:-1*R7},v4e=["|","\\lvert","\\rvert","\\vert"],x4e=["\\|","\\lVert","\\rVert","\\Vert"],cG=o(function(e,r,n,i,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):Jt.contains(v4e,e)?(h="\u2223",d="vert",p=333):Jt.contains(x4e,e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=Fy(l,m,a),y=g.height+g.depth,v=Fy(h,m,a),x=v.height+v.depth,b=Fy(f,m,a),w=b.height+b.depth,C=0,T=1;if(u!==null){var E=Fy(u,m,a);C=E.height+E.depth,T=2}var A=y+w+C,S=Math.max(0,Math.ceil((r-A)/(T*x))),_=A+S*T*x,I=i.fontMetrics().axisHeight;n&&(I*=i.sizeMultiplier);var D=_/2-I,k=[];if(d.length>0){var L=_-y-w,R=Math.round(_*1e3),O=Cbe(d,Math.round(L*1e3)),M=new Kl(d,O),B=(p/1e3).toFixed(3)+"em",F=(R/1e3).toFixed(3)+"em",P=new ll([M],{width:B,height:F,viewBox:"0 0 "+p+" "+R}),z=Be.makeSvgSpan([],[P],i);z.height=R/1e3,z.style.width=B,z.style.height=F,k.push({type:"elem",elem:z})}else{if(k.push(p7(f,m,a)),k.push(o3),u===null){var $=_-y-w+2*R7;k.push(m7(h,$,i))}else{var H=(_-y-w-C)/2+2*R7;k.push(m7(h,H,i)),k.push(o3),k.push(p7(u,m,a)),k.push(o3),k.push(m7(h,H,i))}k.push(o3),k.push(p7(l,m,a))}var Q=i.havingBaseStyle(tr.TEXT),j=Be.makeVList({positionType:"bottom",positionData:D,children:k},Q);return V7(Be.makeSpan(["delimsizing","mult"],[j],Q),tr.TEXT,i,s)},"makeStackedDelim"),g7=80,y7=.08,v7=o(function(e,r,n,i,a){var s=Ebe(e,i,n),l=new Kl(e,s),u=new ll([l],{width:"400em",height:kt(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return Be.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),b4e=o(function(e,r){var n=r.havingBaseSizing(),i=dG("\\surd",e*n.sizeMultiplier,fG,n),a=n.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return i.type==="small"?(f=1e3+1e3*s+g7,e<1?a=1:e<1.4&&(a=.7),u=(1+s+y7)/a,h=(1+s)/a,l=v7("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):i.type==="large"?(f=(1e3+g7)*$y[i.size],h=($y[i.size]+s)/a,u=($y[i.size]+s+y7)/a,l=v7("sqrtSize"+i.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+y7,h=e+s,f=Math.floor(1e3*e+s)+g7,l=v7("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=kt(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),uG=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],w4e=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],hG=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],$y=[0,1.2,1.8,2.4,3],T4e=o(function(e,r,n,i,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),Jt.contains(uG,e)||Jt.contains(hG,e))return lG(e,r,!1,n,i,a);if(Jt.contains(w4e,e))return cG(e,$y[r],!1,n,i,a);throw new gt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),k4e=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],E4e=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"stack"}],fG=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],S4e=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),dG=o(function(e,r,n,i){for(var a=Math.min(2,3-i.style.size),s=a;s<n.length&&n[s].type!=="stack";s++){var l=Fy(e,S4e(n[s]),"math"),u=l.height+l.depth;if(n[s].type==="small"){var h=i.havingBaseStyle(n[s].style);u*=h.sizeMultiplier}if(u>r)return n[s]}return n[n.length-1]},"traverseSequence"),pG=o(function(e,r,n,i,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;Jt.contains(hG,e)?l=k4e:Jt.contains(uG,e)?l=fG:l=E4e;var u=dG(e,r,l,i);return u.type==="small"?g4e(e,u.style,n,i,a,s):u.type==="large"?lG(e,u.size,n,i,a,s):cG(e,r,n,i,a,s)},"makeCustomSizedDelim"),C4e=o(function(e,r,n,i,a,s){var l=i.fontMetrics().axisHeight*i.sizeMultiplier,u=901,h=5/i.fontMetrics().ptPerEm,f=Math.max(r-l,n+l),d=Math.max(f/500*u,2*f-h);return pG(e,d,!0,i,a,s)},"makeLeftRightDelim"),ou={sqrtImage:b4e,sizedDelim:T4e,sizeToMaxHeight:$y,customSizedDelim:pG,leftRightDelim:C4e},xz={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},A4e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(k3,"checkDelimiter");Nt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=k3(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:xz[t.funcName].size,mclass:xz[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?Be.makeSpan([t.mclass]):ou.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(Co(t.delim,t.mode));var r=new dt.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=kt(ou.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r},"mathmlBuilder")});o(bz,"assertParsed");Nt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new gt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:k3(e[0],t).text,color:r}},"handler")});Nt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=k3(e[0],t),n=t.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=xr(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{bz(t);for(var r=Pi(t.body,e,!0,["mopen","mclose"]),n=0,i=0,a=!1,s=0;s<r.length;s++)r[s].isMiddle?a=!0:(n=Math.max(r[s].height,n),i=Math.max(r[s].depth,i));n*=e.sizeMultiplier,i*=e.sizeMultiplier;var l;if(t.left==="."?l=Hy(e,["mopen"]):l=ou.leftRightDelim(t.left,n,i,e,t.mode,["mopen"]),r.unshift(l),a)for(var u=1;u<r.length;u++){var h=r[u],f=h.isMiddle;f&&(r[u]=ou.leftRightDelim(f.delim,n,i,f.options,t.mode,[]))}var d;if(t.right===".")d=Hy(e,["mclose"]);else{var p=t.rightColor?e.withColor(t.rightColor):e;d=ou.leftRightDelim(t.right,n,i,p,t.mode,["mclose"])}return r.push(d),Be.makeSpan(["minner"],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{bz(t);var r=ks(t.body,e);if(t.left!=="."){var n=new dt.MathNode("mo",[Co(t.left,t.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(t.right!=="."){var i=new dt.MathNode("mo",[Co(t.right,t.mode)]);i.setAttribute("fence","true"),t.rightColor&&i.setAttribute("mathcolor",t.rightColor),r.push(i)}return F7(r)},"mathmlBuilder")});Nt({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=k3(e[0],t);if(!t.parser.leftrightDepth)throw new gt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=Hy(e,[]);else{r=ou.sizedDelim(t.delim,1,e,t.mode,[]);var n={delim:t.delim,options:e};r.isMiddle=n}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?Co("|","text"):Co(t.delim,t.mode),n=new dt.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n},"mathmlBuilder")});U7=o((t,e)=>{var r=Be.wrapFragment(Fr(t.body,e),e),n=t.label.slice(1),i=e.sizeMultiplier,a,s=0,l=Jt.isCharacterBox(t.body);if(n==="sout")a=Be.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else if(n==="phase"){var u=ti({number:.6,unit:"pt"},e),h=ti({number:.35,unit:"ex"},e),f=e.havingBaseSizing();i=i/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=kt(d/2+u);var p=Math.floor(1e3*d*i),m=Tbe(p),g=new ll([new Kl("phase",m)],{width:"400em",height:kt(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=Be.makeSvgSpan(["hide-tail"],[g],e),a.style.height=kt(d),s=r.depth+u+h}else{/cancel/.test(n)?l||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(n)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(n==="colorbox"?0:x),v=y):n==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=cu.encloseSpan(r,n,y,v,e),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=kt(x)):n==="angl"&&x!==.049&&(a.style.borderTopWidth=kt(x),a.style.borderRightWidth=kt(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var w=/cancel|phase/.test(n)?["svg-align"]:[];b=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:w}]},e)}return/cancel/.test(n)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(n)&&!l?Be.makeSpan(["mord","cancel-lap"],[b],e):Be.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),H7=o((t,e)=>{var r=0,n=new dt.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[yn(t.body,e)]);switch(t.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var i=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);n.setAttribute("style","border: "+i+"em solid "+String(t.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&n.setAttribute("mathbackground",t.backgroundColor),n},"mathmlBuilder$6");Nt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:s}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=xr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});Nt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});mG={};o(Ql,"defineEnvironment");gG={};o(fe,"defineMacro");o(wz,"getHLines");E3=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new gt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(W7,"getAutoTag");o(ph,"parseArray");o(q7,"dCellStyle");Zl=o(function(e,r){var n,i,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(tr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?ti({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,w=0;function C(ae){for(var Oe=0;Oe<ae.length;++Oe)Oe>0&&(w+=.25),h.push({pos:w,isDashed:ae[Oe]})}for(o(C,"setHLinePos"),C(s[0]),n=0;n<e.body.length;++n){var T=e.body[n],E=x,A=b;l<T.length&&(l=T.length);var S=new Array(T.length);for(i=0;i<T.length;++i){var _=Fr(T[i],r);A<_.depth&&(A=_.depth),E<_.height&&(E=_.height),S[i]=_}var I=e.rowGaps[n],D=0;I&&(D=ti(I,r),D>0&&(D+=b,A<D&&(A=D),D=0)),e.addJot&&(A+=y),S.height=E,S.depth=A,w+=E,S.pos=w,w+=A+D,u[n]=S,C(s[n+1])}var k=w/2+r.fontMetrics().axisHeight,L=e.cols||[],R=[],O,M,B=[];if(e.tags&&e.tags.some(ae=>ae))for(n=0;n<a;++n){var F=u[n],P=F.pos-k,z=e.tags[n],$=void 0;z===!0?$=Be.makeSpan(["eqn-num"],[],r):z===!1?$=Be.makeSpan([],[],r):$=Be.makeSpan([],Pi(z,r,!0),r),$.depth=F.depth,$.height=F.height,B.push({type:"elem",elem:$,shift:P})}for(i=0,M=0;i<l||M<L.length;++i,++M){for(var H=L[M]||{},Q=!0;H.type==="separator";){if(Q||(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(r.fontMetrics().doubleRuleSep),R.push(O)),H.separator==="|"||H.separator===":"){var j=H.separator==="|"?"solid":"dashed",ie=Be.makeSpan(["vertical-separator"],[],r);ie.style.height=kt(w),ie.style.borderRightWidth=kt(f),ie.style.borderRightStyle=j,ie.style.margin="0 "+kt(-f/2);var ne=w-k;ne&&(ie.style.verticalAlign=kt(-ne)),R.push(ie)}else throw new gt("Invalid separator type: "+H.separator);M++,H=L[M]||{},Q=!1}if(!(i>=l)){var le=void 0;(i>0||e.hskipBeforeAndAfter)&&(le=Jt.deflt(H.pregap,p),le!==0&&(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(le),R.push(O)));var he=[];for(n=0;n<a;++n){var K=u[n],X=K[i];if(X){var te=K.pos-k;X.depth=K.depth,X.height=K.height,he.push({type:"elem",elem:X,shift:te})}}he=Be.makeVList({positionType:"individualShift",children:he},r),he=Be.makeSpan(["col-align-"+(H.align||"c")],[he]),R.push(he),(i<l-1||e.hskipBeforeAndAfter)&&(le=Jt.deflt(H.postgap,p),le!==0&&(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(le),R.push(O)))}}if(u=Be.makeSpan(["mtable"],R),h.length>0){for(var J=Be.makeLineSpan("hline",r,f),se=Be.makeLineSpan("hdashline",r,f),ue=[{type:"elem",elem:u,shift:0}];h.length>0;){var Z=h.pop(),Se=Z.pos-k;Z.isDashed?ue.push({type:"elem",elem:se,shift:Se}):ue.push({type:"elem",elem:J,shift:Se})}u=Be.makeVList({positionType:"individualShift",children:ue},r)}if(B.length===0)return Be.makeSpan(["mord"],[u],r);var ce=Be.makeVList({positionType:"individualShift",children:B},r);return ce=Be.makeSpan(["tag"],[ce],r),Be.makeFragment([u,ce])},"htmlBuilder"),_4e={c:"center ",l:"left ",r:"right "},Jl=o(function(e,r){for(var n=[],i=new dt.MathNode("mtd",[],["mtr-glue"]),a=new dt.MathNode("mtd",[],["mml-eqn-num"]),s=0;s<e.body.length;s++){for(var l=e.body[s],u=[],h=0;h<l.length;h++)u.push(new dt.MathNode("mtd",[yn(l[h],r)]));e.tags&&e.tags[s]&&(u.unshift(i),u.push(i),e.leqno?u.unshift(a):u.push(a)),n.push(new dt.MathNode("mtr",u))}var f=new dt.MathNode("mtable",n),d=e.arraystretch===.5?.1:.16+e.arraystretch-1+(e.addJot?.09:0);f.setAttribute("rowspacing",kt(d));var p="",m="";if(e.cols&&e.cols.length>0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var w=x;w<b;w++)g[w].type==="align"?(m+=_4e[g[w].align],v&&(y+="none "),v=!0):g[w].type==="separator"&&v&&(y+=g[w].separator==="|"?"solid ":"dashed ",v=!1);f.setAttribute("columnalign",m.trim()),/[sd]/.test(y)&&f.setAttribute("columnlines",y.trim())}if(e.colSeparationType==="align"){for(var C=e.cols||[],T="",E=1;E<C.length;E++)T+=E%2?"0em ":"1em ";f.setAttribute("columnspacing",T.trim())}else e.colSeparationType==="alignat"||e.colSeparationType==="gather"?f.setAttribute("columnspacing","0em"):e.colSeparationType==="small"?f.setAttribute("columnspacing","0.2778em"):e.colSeparationType==="CD"?f.setAttribute("columnspacing","0.5em"):f.setAttribute("columnspacing","1em");var A="",S=e.hLinesBeforeRow;p+=S[0].length>0?"left ":"",p+=S[S.length-1].length>0?"right ":"";for(var _=1;_<S.length-1;_++)A+=S[_].length===0?"none ":S[_][0]?"dashed ":"solid ";return/[sd]/.test(A)&&f.setAttribute("rowlines",A.trim()),p!==""&&(f=new dt.MathNode("menclose",[f]),f.setAttribute("notation",p.trim())),e.arraystretch&&e.arraystretch<1&&(f=new dt.MathNode("mstyle",[f]),f.setAttribute("scriptlevel","1")),f},"mathmlBuilder"),yG=o(function(e,r){e.envName.indexOf("ed")===-1&&E3(e);var n=[],i=e.envName.indexOf("at")>-1?"alignat":"align",a=e.envName==="split",s=ph(e.parser,{cols:n,addJot:!0,autoTag:a?void 0:W7(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d<r[0].body.length;d++){var p=xr(r[0].body[d],"textord");f+=p.text}l=Number(f),u=l*2}var m=!u;s.body.forEach(function(x){for(var b=1;b<x.length;b+=2){var w=xr(x[b],"styling"),C=xr(w.body[0],"ordgroup");C.body.unshift(h)}if(m)u<x.length&&(u=x.length);else{var T=x.length/2;if(l<T)throw new gt("Too many math in a row: "+("expected "+l+", but got "+T),x[0])}});for(var g=0;g<u;++g){var y="r",v=0;g%2===1?y="l":g>0&&m&&(v=1),n[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");Ql({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=w3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=z7(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new gt("Unknown column alignment: "+u,s)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return ph(t.parser,a,q7(t.envName))},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var i=t.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,"lcr".indexOf(r)===-1)throw new gt("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=ph(t.parser,n,q7(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=ph(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=w3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=z7(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new gt("Unknown column alignment: "+u,s)});if(i.length>1)throw new gt("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=ph(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new gt("{subarray} can contain only one column");return a},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=ph(t.parser,e,q7(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:yG,htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){Jt.contains(["gather","gather*"],t.envName)&&E3(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:W7(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return ph(t.parser,e,"display")},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:yG,htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){E3(t);var e={autoTag:W7(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return ph(t.parser,e,"display")},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["CD"],props:{numArgs:0},handler(t){return E3(t),p4e(t.parser)},htmlBuilder:Zl,mathmlBuilder:Jl});fe("\\nonumber","\\gdef\\@eqnsw{0}");fe("\\notag","\\nonumber");Nt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new gt(t.funcName+" valid only within array environment")}});Tz=mG;Nt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];if(i.type!=="ordgroup")throw new gt("Invalid environment name",i);for(var a="",s=0;s<i.body.length;++s)a+=xr(i.body[s],"textord").text;if(n==="\\begin"){if(!Tz.hasOwnProperty(a))throw new gt("No such environment: "+a,i);var l=Tz[a],{args:u,optArgs:h}=r.parseArguments("\\begin{"+a+"}",l),f={mode:r.mode,envName:a,parser:r},d=l.handler(f,u,h);r.expect("\\end",!1);var p=r.nextToken,m=xr(r.parseFunction(),"environment");if(m.name!==a)throw new gt("Mismatch: \\begin{"+a+"} matched by \\end{"+m.name+"}",p);return d}return{type:"environment",mode:r.mode,name:a,nameGroup:i}}});vG=o((t,e)=>{var r=t.font,n=e.withFont(r);return Fr(t.body,n)},"htmlBuilder$5"),xG=o((t,e)=>{var r=t.font,n=e.withFont(r);return yn(t.body,n)},"mathmlBuilder$4"),kz={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Nt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=g3(e[0]),a=n;return a in kz&&(a=kz[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},"handler"),htmlBuilder:vG,mathmlBuilder:xG});Nt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,n=e[0],i=Jt.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:T3(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:i}},"handler")});Nt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,breakOnTokenText:i}=t,{mode:a}=r,s=r.parseExpression(!0,i),l="math"+n.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:vG,mathmlBuilder:xG});bG=o((t,e)=>{var r=e;return t==="display"?r=r.id>=tr.SCRIPT.id?r.text():tr.DISPLAY:t==="text"&&r.size===tr.DISPLAY.size?r=tr.TEXT:t==="script"?r=tr.SCRIPT:t==="scriptscript"&&(r=tr.SCRIPTSCRIPT),r},"adjustStyle"),Y7=o((t,e)=>{var r=bG(t.size,e.style),n=r.fracNum(),i=r.fracDen(),a;a=e.havingStyle(n);var s=Fr(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height<l?l:s.height,s.depth=s.depth<u?u:s.depth}a=e.havingStyle(i);var h=Fr(t.denom,a,e),f,d,p;t.hasBarLine?(t.barSize?(d=ti(t.barSize,e),f=Be.makeLineSpan("frac-line",e,d)):f=Be.makeLineSpan("frac-line",e),d=f.height,p=f.height):(f=null,d=0,p=e.fontMetrics().defaultRuleThickness);var m,g,y;r.size===tr.DISPLAY.size||t.size==="display"?(m=e.fontMetrics().num1,d>0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d)<g&&(m+=g-(m-s.depth-(b+.5*d))),b-.5*d-(h.height-y)<g&&(y+=g-(b-.5*d-(h.height-y)));var w=-(b-.5*d);v=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:h,shift:y},{type:"elem",elem:f,shift:w},{type:"elem",elem:s,shift:-m}]},e)}else{var x=m-s.depth-(h.height-y);x<g&&(m+=.5*(g-x),y+=.5*(g-x)),v=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:h,shift:y},{type:"elem",elem:s,shift:-m}]},e)}a=e.havingStyle(r),v.height*=a.sizeMultiplier/e.sizeMultiplier,v.depth*=a.sizeMultiplier/e.sizeMultiplier;var C;r.size===tr.DISPLAY.size?C=e.fontMetrics().delim1:r.size===tr.SCRIPTSCRIPT.size?C=e.havingStyle(tr.SCRIPT).fontMetrics().delim2:C=e.fontMetrics().delim2;var T,E;return t.leftDelim==null?T=Hy(e,["mopen"]):T=ou.customSizedDelim(t.leftDelim,C,!0,e.havingStyle(r),t.mode,["mopen"]),t.continued?E=Be.makeSpan([]):t.rightDelim==null?E=Hy(e,["mclose"]):E=ou.customSizedDelim(t.rightDelim,C,!0,e.havingStyle(r),t.mode,["mclose"]),Be.makeSpan(["mord"].concat(a.sizingClasses(e)),[T,Be.makeSpan(["mfrac"],[v]),E],e)},"htmlBuilder$4"),X7=o((t,e)=>{var r=new dt.MathNode("mfrac",[yn(t.numer,e),yn(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var n=ti(t.barSize,e);r.setAttribute("linethickness",kt(n))}var i=bG(t.size,e.style);if(i.size!==e.style.size){r=new dt.MathNode("mstyle",[r]);var a=i.size===tr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new dt.MathNode("mo",[new dt.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new dt.MathNode("mo",[new dt.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return F7(s)}return r},"mathmlBuilder$3");Nt({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1],s,l=null,u=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:i,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:Y7,mathmlBuilder:X7});Nt({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:i,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});Nt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:n}=t,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:i,token:n}}});Ez=["display","text","script","scriptscript"],Sz=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");Nt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,n=e[4],i=e[5],a=g3(e[0]),s=a.type==="atom"&&a.family==="open"?Sz(a.text):null,l=g3(e[1]),u=l.type==="atom"&&l.family==="close"?Sz(l.text):null,h=xr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=xr(m.body[0],"textord");p=Ez[Number(g.text)]}}else m=xr(m,"textord"),p=Ez[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:Y7,mathmlBuilder:X7});Nt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:n,token:i}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:xr(e[0],"size").value,token:i}}});Nt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=obe(xr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:Y7,mathmlBuilder:X7});wG=o((t,e)=>{var r=e.style,n,i;t.type==="supsub"?(n=t.sup?Fr(t.sup,e.havingStyle(r.sup()),e):Fr(t.sub,e.havingStyle(r.sub()),e),i=xr(t.base,"horizBrace")):i=xr(t,"horizBrace");var a=Fr(i.base,e.havingBaseStyle(tr.DISPLAY)),s=cu.svgSpan(i,e),l;if(i.isOver?(l=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=Be.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),n){var u=Be.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e);i.isOver?l=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:n}]},e):l=Be.makeVList({positionType:"bottom",positionData:u.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return Be.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),D4e=o((t,e)=>{var r=cu.mathMLnode(t.label);return new dt.MathNode(t.isOver?"mover":"munder",[yn(t.base,e),r])},"mathmlBuilder$2");Nt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:e[0]}},htmlBuilder:wG,mathmlBuilder:D4e});Nt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[1],i=xr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:di(n)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e,!1);return Be.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=dh(t.body,e);return r instanceof ws||(r=new ws("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});Nt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=xr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a<n.length;a++){var s=n[a];s==="~"&&(s="\\textasciitilde"),i.push({type:"textord",mode:"text",text:s})}var l={type:"text",mode:r.mode,font:"\\texttt",body:i};return{type:"href",mode:r.mode,href:n,body:di(l)}},"handler")});Nt({type:"hbox",names:["\\hbox"],props:{numArgs:1,argTypes:["text"],allowedInText:!0,primitive:!0},handler(t,e){var{parser:r}=t;return{type:"hbox",mode:r.mode,body:di(e[0])}},htmlBuilder(t,e){var r=Pi(t.body,e,!1);return Be.makeFragment(r)},mathmlBuilder(t,e){return new dt.MathNode("mrow",ks(t.body,e))}});Nt({type:"html",names:["\\htmlClass","\\htmlId","\\htmlStyle","\\htmlData"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,token:i}=t,a=xr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(n){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f<h.length;f++){var d=h[f].split("=");if(d.length!==2)throw new gt("Error parsing key-value for \\htmlData");u["data-"+d[0].trim()]=d[1].trim()}l={command:"\\htmlData",attributes:u};break}default:throw new Error("Unrecognized html command")}return r.settings.isTrusted(l)?{type:"html",mode:r.mode,attributes:u,body:di(s)}:r.formatUnsupportedCmd(n)},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e,!1),n=["enclosing"];t.attributes.class&&n.push(...t.attributes.class.trim().split(/\s+/));var i=Be.makeSpan(n,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&i.setAttribute(a,t.attributes[a]);return i},"htmlBuilder"),mathmlBuilder:o((t,e)=>dh(t.body,e),"mathmlBuilder")});Nt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:di(e[0]),mathml:di(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.html,e,!1);return Be.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>dh(t.mathml,e),"mathmlBuilder")});x7=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new gt("Invalid size: '"+e+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!zz(n))throw new gt("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n},"sizeData");Nt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:n}=t,i={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=xr(r[0],"raw").string,h=u.split(","),f=0;f<h.length;f++){var d=h[f].split("=");if(d.length===2){var p=d[1].trim();switch(d[0].trim()){case"alt":l=p;break;case"width":i=x7(p);break;case"height":a=x7(p);break;case"totalheight":s=x7(p);break;default:throw new gt("Invalid key: '"+d[0]+"' in \\includegraphics.")}}}var m=xr(e[0],"url").url;return l===""&&(l=m,l=l.replace(/^.*[\\/]/,""),l=l.substring(0,l.lastIndexOf("."))),n.settings.isTrusted({command:"\\includegraphics",url:m})?{type:"includegraphics",mode:n.mode,alt:l,width:i,height:a,totalheight:s,src:m}:n.formatUnsupportedCmd("\\includegraphics")},"handler"),htmlBuilder:o((t,e)=>{var r=ti(t.height,e),n=0;t.totalheight.number>0&&(n=ti(t.totalheight,e)-r);var i=0;t.width.number>0&&(i=ti(t.width,e));var a={height:kt(r+n)};i>0&&(a.width=kt(i)),n>0&&(a.verticalAlign=kt(-n));var s=new S7(t.src,t.alt,a);return s.height=r,s.depth=n,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var n=ti(t.height,e),i=0;if(t.totalheight.number>0&&(i=ti(t.totalheight,e)-n,r.setAttribute("valign",kt(-i))),r.setAttribute("height",kt(n+i)),t.width.number>0){var a=ti(t.width,e);r.setAttribute("width",kt(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});Nt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=xr(e[0],"size");if(r.settings.strict){var a=n[1]==="m",s=i.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(t,e){return Be.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=ti(t.dimension,e);return new dt.SpaceNode(r)}});Nt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=Be.makeSpan([],[Fr(t.body,e)]),r=Be.makeSpan(["inner"],[r],e)):r=Be.makeSpan(["inner"],[Fr(t.body,e)]);var n=Be.makeSpan(["fix"],[]),i=Be.makeSpan([t.alignment],[r,n],e),a=Be.makeSpan(["strut"]);return a.style.height=kt(i.height+i.depth),i.depth&&(a.style.verticalAlign=kt(-i.depth)),i.children.unshift(a),i=Be.makeSpan(["thinbox"],[i],e),Be.makeSpan(["mord","vbox"],[i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mpadded",[yn(t.body,e)]);if(t.alignment!=="rlap"){var n=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});Nt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:n}=t,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",s=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",body:s}}});Nt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new gt("Mismatched "+t.funcName)}});Cz=o((t,e)=>{switch(e.style.size){case tr.DISPLAY.size:return t.display;case tr.TEXT.size:return t.text;case tr.SCRIPT.size:return t.script;case tr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");Nt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:di(e[0]),text:di(e[1]),script:di(e[2]),scriptscript:di(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=Cz(t,e),n=Pi(r,e,!1);return Be.makeFragment(n)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Cz(t,e);return dh(r,e)},"mathmlBuilder")});TG=o((t,e,r,n,i,a,s)=>{t=Be.makeSpan([],[t]);var l=r&&Jt.isCharacterBox(r),u,h;if(e){var f=Fr(e,n.havingStyle(i.sup()),n);h={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=Fr(r,n.havingStyle(i.sub()),n);u={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=n.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=Be.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:kt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:kt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(u){var g=t.height-s;p=Be.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:kt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},n)}else if(h){var y=t.depth+s;p=Be.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:kt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else return t;var v=[p];if(u&&a!==0&&!l){var x=Be.makeSpan(["mspace"],[],n);x.style.marginRight=kt(a),v.unshift(x)}return Be.makeSpan(["mop","op-limits"],v,n)},"assembleSupSub"),kG=["\\smallint"],m0=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"op"),i=!0):a=xr(t,"op");var s=e.style,l=!1;s.size===tr.DISPLAY.size&&a.symbol&&!Jt.contains(kG,a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=Be.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=Be.staticSvg(f+"Size"+(l?"2":"1"),e);u=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=Pi(a.body,e,!0);m.length===1&&m[0]instanceof Ts?(u=m[0],u.classes[0]="mop"):u=Be.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y<a.name.length;y++)g.push(Be.mathsym(a.name[y],a.mode,e));u=Be.makeSpan(["mop"],g,e)}var v=0,x=0;return(u instanceof Ts||a.name==="\\oiint"||a.name==="\\oiiint")&&!a.suppressBaseShift&&(v=(u.height-u.depth)/2-e.fontMetrics().axisHeight,x=u.italic),i?TG(u,r,n,e,s,x,v):(v&&(u.style.position="relative",u.style.top=kt(v)),u)},"htmlBuilder$2"),Wy=o((t,e)=>{var r;if(t.symbol)r=new ws("mo",[Co(t.name,t.mode)]),Jt.contains(kG,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ws("mo",ks(t.body,e));else{r=new ws("mi",[new Jf(t.name.slice(1))]);var n=new ws("mo",[Co("\u2061","text")]);t.parentIsSupSub?r=new ws("mrow",[r,n]):r=Qz([r,n])}return r},"mathmlBuilder$1"),L4e={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};Nt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=n;return i.length===1&&(i=L4e[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},"handler"),htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:di(n)}},"handler"),htmlBuilder:m0,mathmlBuilder:Wy});R4e={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};Nt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,n=r;return n.length===1&&(n=R4e[n]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:m0,mathmlBuilder:Wy});EG=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"operatorname"),i=!0):a=xr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=Pi(l,e.withFont("mathrm"),!0),h=0;h<u.length;h++){var f=u[h];f instanceof Ts&&(f.text=f.text.replace(/\u2212/,"-").replace(/\u2217/,"*"))}s=Be.makeSpan(["mop"],u,e)}else s=Be.makeSpan(["mop"],[],e);return i?TG(s,r,n,e,e.style,0,0):s},"htmlBuilder$1"),N4e=o((t,e)=>{for(var r=ks(t.body,e.withFont("mathrm")),n=!0,i=0;i<r.length;i++){var a=r[i];if(!(a instanceof dt.SpaceNode))if(a instanceof dt.MathNode)switch(a.type){case"mi":case"mn":case"ms":case"mspace":case"mtext":break;case"mo":{var s=a.children[0];a.children.length===1&&s instanceof dt.TextNode?s.text=s.text.replace(/\u2212/,"-").replace(/\u2217/,"*"):n=!1;break}default:n=!1}else n=!1}if(n){var l=r.map(f=>f.toText()).join("");r=[new dt.TextNode(l)]}var u=new dt.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new dt.MathNode("mo",[Co("\u2061","text")]);return t.parentIsSupSub?new dt.MathNode("mrow",[u,h]):dt.newDocumentFragment([u,h])},"mathmlBuilder");Nt({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"operatorname",mode:r.mode,body:di(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:EG,mathmlBuilder:N4e});fe("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");rd({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?Be.makeFragment(Pi(t.body,e,!1)):Be.makeSpan(["mord"],Pi(t.body,e,!0),e)},mathmlBuilder(t,e){return dh(t.body,e,!0)}});Nt({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,n=e[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(t,e){var r=Fr(t.body,e.havingCrampedStyle()),n=Be.makeLineSpan("overline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]},e);return Be.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("mover",[yn(t.body,e),r]);return n.setAttribute("accent","true"),n}});Nt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"phantom",mode:r.mode,body:di(n)}},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e.withPhantom(),!1);return Be.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(t.body,e);return new dt.MathNode("mphantom",r)},"mathmlBuilder")});Nt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"hphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan([],[Fr(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n<r.children.length;n++)r.children[n].height=0,r.children[n].depth=0;return r=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e),Be.makeSpan(["mord"],[r],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(di(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("height","0px"),i.setAttribute("depth","0px"),i},"mathmlBuilder")});Nt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"vphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan(["inner"],[Fr(t.body,e.withPhantom())]),n=Be.makeSpan(["fix"],[]);return Be.makeSpan(["mord","rlap"],[r,n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(di(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("width","0px"),i},"mathmlBuilder")});Nt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,n=xr(e[0],"size").value,i=e[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(t,e){var r=Fr(t.body,e),n=ti(t.dy,e);return Be.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new dt.MathNode("mpadded",[yn(t.body,e)]),n=t.dy.number+t.dy.unit;return r.setAttribute("voffset",n),r}});Nt({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});Nt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(t,e,r){var{parser:n}=t,i=r[0],a=xr(e[0],"size"),s=xr(e[1],"size");return{type:"rule",mode:n.mode,shift:i&&xr(i,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=Be.makeSpan(["mord","rule"],[],e),n=ti(t.width,e),i=ti(t.height,e),a=t.shift?ti(t.shift,e):0;return r.style.borderRightWidth=kt(n),r.style.borderTopWidth=kt(i),r.style.bottom=kt(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=ti(t.width,e),n=ti(t.height,e),i=t.shift?ti(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new dt.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",kt(r)),s.setAttribute("height",kt(n));var l=new dt.MathNode("mpadded",[s]);return i>=0?l.setAttribute("height",kt(i)):(l.setAttribute("height",kt(i)),l.setAttribute("depth",kt(-i))),l.setAttribute("voffset",kt(i)),l}});o(SG,"sizingGroup");Az=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],M4e=o((t,e)=>{var r=e.havingSize(t.size);return SG(t.body,r,e)},"htmlBuilder");Nt({type:"sizing",names:Az,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:Az.indexOf(n)+1,body:a}},"handler"),htmlBuilder:M4e,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),n=ks(t.body,r),i=new dt.MathNode("mstyle",n);return i.setAttribute("mathsize",kt(r.sizeMultiplier)),i},"mathmlBuilder")});Nt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:n}=t,i=!1,a=!1,s=r[0]&&xr(r[0],"ordgroup");if(s)for(var l="",u=0;u<s.body.length;++u){var h=s.body[u];if(l=h.text,l==="t")i=!0;else if(l==="b")a=!0;else{i=!1,a=!1;break}}else i=!0,a=!0;var f=e[0];return{type:"smash",mode:n.mode,body:f,smashHeight:i,smashDepth:a}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan([],[Fr(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var n=0;n<r.children.length;n++)r.children[n].height=0;if(t.smashDepth&&(r.depth=0,r.children))for(var i=0;i<r.children.length;i++)r.children[i].depth=0;var a=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e);return Be.makeSpan(["mord"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mpadded",[yn(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});Nt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n}=t,i=r[0],a=e[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(t,e){var r=Fr(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=Be.wrapFragment(r,e);var n=e.fontMetrics(),i=n.defaultRuleThickness,a=i;e.style.id<tr.TEXT.id&&(a=e.fontMetrics().xHeight);var s=i+a/4,l=r.height+r.depth+s+i,{span:u,ruleWidth:h,advanceWidth:f}=ou.sqrtImage(l,e),d=u.height-h;d>r.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=kt(f);var m=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(tr.SCRIPTSCRIPT),y=Fr(t.index,g,e),v=.6*(m.height-m.depth),x=Be.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=Be.makeSpan(["root"],[x]);return Be.makeSpan(["mord","sqrt"],[b,m],e)}else return Be.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:n}=t;return n?new dt.MathNode("mroot",[yn(r,e),yn(n,e)]):new dt.MathNode("msqrt",[yn(r,e)])}});_z={display:tr.DISPLAY,text:tr.TEXT,script:tr.SCRIPT,scriptscript:tr.SCRIPTSCRIPT};Nt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!0,r),s=n.slice(1,n.length-5);return{type:"styling",mode:i.mode,style:s,body:a}},htmlBuilder(t,e){var r=_z[t.style],n=e.havingStyle(r).withFont("");return SG(t.body,n,e)},mathmlBuilder(t,e){var r=_z[t.style],n=e.havingStyle(r),i=ks(t.body,n),a=new dt.MathNode("mstyle",i),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});I4e=o(function(e,r){var n=e.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===tr.DISPLAY.size||n.alwaysHandleSupSub);return i?m0:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===tr.DISPLAY.size||n.limits);return a?EG:null}else{if(n.type==="accent")return Jt.isCharacterBox(n.base)?G7:null;if(n.type==="horizBrace"){var s=!e.sub;return s===n.isOver?wG:null}else return null}else return null},"htmlBuilderDelegate");rd({type:"supsub",htmlBuilder(t,e){var r=I4e(t,e);if(r)return r(t,e);var{base:n,sup:i,sub:a}=t,s=Fr(n,e),l,u,h=e.fontMetrics(),f=0,d=0,p=n&&Jt.isCharacterBox(n);if(i){var m=e.havingStyle(e.style.sup());l=Fr(i,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=Fr(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===tr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=kt(.5/h.ptPerEm/v),b=null;if(u){var w=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof Ts||w)&&(b=kt(-s.italic))}var C;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var T=h.defaultRuleThickness,E=4*T;if(f-l.depth-(u.height-d)<E){d=E-(f-l.depth)+u.height;var A=.8*h.xHeight-(f-l.depth);A>0&&(f+=A,d-=A)}var S=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];C=Be.makeVList({positionType:"individualShift",children:S},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var _=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];C=Be.makeVList({positionType:"shift",positionData:d,children:_},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),C=Be.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var I=A7(s,"right")||"mord";return Be.makeSpan([I],[s,Be.makeSpan(["msupsub"],[C])],e)},mathmlBuilder(t,e){var r=!1,n,i;t.base&&t.base.type==="horizBrace"&&(i=!!t.sup,i===t.base.isOver&&(r=!0,n=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[yn(t.base,e)];t.sub&&a.push(yn(t.sub,e)),t.sup&&a.push(yn(t.sup,e));var s;if(r)s=n?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===tr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===tr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===tr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===tr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===tr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===tr.DISPLAY)?s="mover":s="msup"}return new dt.MathNode(s,a)}});rd({type:"atom",htmlBuilder(t,e){return Be.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[Co(t.text,t.mode)]);if(t.family==="bin"){var n=$7(t,e);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});CG={mi:"italic",mn:"normal",mtext:"normal"};rd({type:"mathord",htmlBuilder(t,e){return Be.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new dt.MathNode("mi",[Co(t.text,t.mode,e)]),n=$7(t,e)||"italic";return n!==CG[r.type]&&r.setAttribute("mathvariant",n),r}});rd({type:"textord",htmlBuilder(t,e){return Be.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=Co(t.text,t.mode,e),n=$7(t,e)||"normal",i;return t.mode==="text"?i=new dt.MathNode("mtext",[r]):/[0-9]/.test(t.text)?i=new dt.MathNode("mn",[r]):t.text==="\\prime"?i=new dt.MathNode("mo",[r]):i=new dt.MathNode("mi",[r]),n!==CG[i.type]&&i.setAttribute("mathvariant",n),i}});b7={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},w7={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};rd({type:"spacing",htmlBuilder(t,e){if(w7.hasOwnProperty(t.text)){var r=w7[t.text].className||"";if(t.mode==="text"){var n=Be.makeOrd(t,e,"textord");return n.classes.push(r),n}else return Be.makeSpan(["mspace",r],[Be.mathsym(t.text,t.mode,e)],e)}else{if(b7.hasOwnProperty(t.text))return Be.makeSpan(["mspace",b7[t.text]],[],e);throw new gt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(w7.hasOwnProperty(t.text))r=new dt.MathNode("mtext",[new dt.TextNode("\xA0")]);else{if(b7.hasOwnProperty(t.text))return new dt.MathNode("mspace");throw new gt('Unknown type of space "'+t.text+'"')}return r}});Dz=o(()=>{var t=new dt.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");rd({type:"tag",mathmlBuilder(t,e){var r=new dt.MathNode("mtable",[new dt.MathNode("mtr",[Dz(),new dt.MathNode("mtd",[dh(t.body,e)]),Dz(),new dt.MathNode("mtd",[dh(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});Lz={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Rz={"\\textbf":"textbf","\\textmd":"textmd"},O4e={"\\textit":"textit","\\textup":"textup"},Nz=o((t,e)=>{var r=t.font;if(r){if(Lz[r])return e.withTextFontFamily(Lz[r]);if(Rz[r])return e.withTextFontWeight(Rz[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(O4e[r])},"optionsWithFont");Nt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"text",mode:r.mode,body:di(i),font:n}},htmlBuilder(t,e){var r=Nz(t,e),n=Pi(t.body,r,!0);return Be.makeSpan(["mord","text"],n,r)},mathmlBuilder(t,e){var r=Nz(t,e);return dh(t.body,r)}});Nt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Fr(t.body,e),n=Be.makeLineSpan("underline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Be.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]},e);return Be.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("munder",[yn(t.body,e),r]);return n.setAttribute("accentunder","true"),n}});Nt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Fr(t.body,e),n=e.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return Be.makeVList({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new dt.MathNode("mpadded",[yn(t.body,e)],["vcenter"])}});Nt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new gt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=Mz(t),n=[],i=e.havingStyle(e.style.text()),a=0;a<r.length;a++){var s=r[a];s==="~"&&(s="\\textasciitilde"),n.push(Be.makeSymbol(s,"Typewriter-Regular",t.mode,i,["mord","texttt"]))}return Be.makeSpan(["mord","text"].concat(i.sizingClasses(e)),Be.tryCombineChars(n),i)},mathmlBuilder(t,e){var r=new dt.TextNode(Mz(t)),n=new dt.MathNode("mtext",[r]);return n.setAttribute("mathvariant","monospace"),n}});Mz=o(t=>t.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),hh=jz,AG=`[ \r | |
| 271 | + ]`,P4e="\\\\[a-zA-Z@]+",B4e="\\\\[^\uD800-\uDFFF]",F4e="("+P4e+")"+AG+"*",$4e=`\\\\( | |
| 272 | +|[ \r ]+ | |
| 273 | +?)[ \r ]*`,N7="[\u0300-\u036F]",z4e=new RegExp(N7+"+$"),G4e="("+AG+"+)|"+($4e+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(N7+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(N7+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+F4e)+("|"+B4e+")"),y3=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp(G4e,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new So("EOF",new Xs(this,r,r));var n=this.tokenRegex.exec(e);if(n===null||n.index!==r)throw new gt("Unexpected character: '"+e[r]+"'",new So(e[r],new Xs(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=e.indexOf(` | |
| 274 | +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new So(i,new Xs(this,r,this.tokenRegex.lastIndex))}},M7=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new gt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i<this.undefStack.length;i++)delete this.undefStack[i][e];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},V4e=gG;fe("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});fe("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});fe("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});fe("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});fe("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});fe("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");fe("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});Iz={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};fe("\\char",function(t){var e=t.popToken(),r,n="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")n=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new gt("\\char` missing argument");n=e.text.charCodeAt(0)}else r=10;if(r){if(n=Iz[e.text],n==null||n>=r)throw new gt("Invalid base-"+r+" digit "+e.text);for(var i;(i=Iz[t.future().text])!=null&&i<r;)n*=r,n+=i,t.popToken()}return"\\@char{"+n+"}"});j7=o((t,e,r)=>{var n=t.consumeArg().tokens;if(n.length!==1)throw new gt("\\newcommand's first argument must be a macro name");var i=n[0].text,a=t.isDefined(i);if(a&&!e)throw new gt("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!a&&!r)throw new gt("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(n=t.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var l="",u=t.expandNextToken();u.text!=="]"&&u.text!=="EOF";)l+=u.text,u=t.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new gt("Invalid number of arguments: "+l);s=parseInt(l),n=t.consumeArg().tokens}return t.macros.set(i,{tokens:n,numArgs:s}),""},"newcommand");fe("\\newcommand",t=>j7(t,!1,!0));fe("\\renewcommand",t=>j7(t,!0,!1));fe("\\providecommand",t=>j7(t,!0,!0));fe("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});fe("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});fe("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),hh[r],An.math[r],An.text[r]),""});fe("\\bgroup","{");fe("\\egroup","}");fe("~","\\nobreakspace");fe("\\lq","`");fe("\\rq","'");fe("\\aa","\\r a");fe("\\AA","\\r A");fe("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");fe("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");fe("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");fe("\u212C","\\mathscr{B}");fe("\u2130","\\mathscr{E}");fe("\u2131","\\mathscr{F}");fe("\u210B","\\mathscr{H}");fe("\u2110","\\mathscr{I}");fe("\u2112","\\mathscr{L}");fe("\u2133","\\mathscr{M}");fe("\u211B","\\mathscr{R}");fe("\u212D","\\mathfrak{C}");fe("\u210C","\\mathfrak{H}");fe("\u2128","\\mathfrak{Z}");fe("\\Bbbk","\\Bbb{k}");fe("\xB7","\\cdotp");fe("\\llap","\\mathllap{\\textrm{#1}}");fe("\\rlap","\\mathrlap{\\textrm{#1}}");fe("\\clap","\\mathclap{\\textrm{#1}}");fe("\\mathstrut","\\vphantom{(}");fe("\\underbar","\\underline{\\text{#1}}");fe("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');fe("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");fe("\\ne","\\neq");fe("\u2260","\\neq");fe("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");fe("\u2209","\\notin");fe("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");fe("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");fe("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");fe("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");fe("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");fe("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");fe("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");fe("\u27C2","\\perp");fe("\u203C","\\mathclose{!\\mkern-0.8mu!}");fe("\u220C","\\notni");fe("\u231C","\\ulcorner");fe("\u231D","\\urcorner");fe("\u231E","\\llcorner");fe("\u231F","\\lrcorner");fe("\xA9","\\copyright");fe("\xAE","\\textregistered");fe("\uFE0F","\\textregistered");fe("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');fe("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');fe("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');fe("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');fe("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}");fe("\u22EE","\\vdots");fe("\\varGamma","\\mathit{\\Gamma}");fe("\\varDelta","\\mathit{\\Delta}");fe("\\varTheta","\\mathit{\\Theta}");fe("\\varLambda","\\mathit{\\Lambda}");fe("\\varXi","\\mathit{\\Xi}");fe("\\varPi","\\mathit{\\Pi}");fe("\\varSigma","\\mathit{\\Sigma}");fe("\\varUpsilon","\\mathit{\\Upsilon}");fe("\\varPhi","\\mathit{\\Phi}");fe("\\varPsi","\\mathit{\\Psi}");fe("\\varOmega","\\mathit{\\Omega}");fe("\\substack","\\begin{subarray}{c}#1\\end{subarray}");fe("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");fe("\\boxed","\\fbox{$\\displaystyle{#1}$}");fe("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");fe("\\implies","\\DOTSB\\;\\Longrightarrow\\;");fe("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");Oz={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};fe("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in Oz?e=Oz[r]:(r.slice(0,4)==="\\not"||r in An.math&&Jt.contains(["bin","rel"],An.math[r].group))&&(e="\\dotsb"),e});K7={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};fe("\\dotso",function(t){var e=t.future().text;return e in K7?"\\ldots\\,":"\\ldots"});fe("\\dotsc",function(t){var e=t.future().text;return e in K7&&e!==","?"\\ldots\\,":"\\ldots"});fe("\\cdots",function(t){var e=t.future().text;return e in K7?"\\@cdots\\,":"\\@cdots"});fe("\\dotsb","\\cdots");fe("\\dotsm","\\cdots");fe("\\dotsi","\\!\\cdots");fe("\\dotsx","\\ldots\\,");fe("\\DOTSI","\\relax");fe("\\DOTSB","\\relax");fe("\\DOTSX","\\relax");fe("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");fe("\\,","\\tmspace+{3mu}{.1667em}");fe("\\thinspace","\\,");fe("\\>","\\mskip{4mu}");fe("\\:","\\tmspace+{4mu}{.2222em}");fe("\\medspace","\\:");fe("\\;","\\tmspace+{5mu}{.2777em}");fe("\\thickspace","\\;");fe("\\!","\\tmspace-{3mu}{.1667em}");fe("\\negthinspace","\\!");fe("\\negmedspace","\\tmspace-{4mu}{.2222em}");fe("\\negthickspace","\\tmspace-{5mu}{.277em}");fe("\\enspace","\\kern.5em ");fe("\\enskip","\\hskip.5em\\relax");fe("\\quad","\\hskip1em\\relax");fe("\\qquad","\\hskip2em\\relax");fe("\\tag","\\@ifstar\\tag@literal\\tag@paren");fe("\\tag@paren","\\tag@literal{({#1})}");fe("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new gt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});fe("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");fe("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");fe("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");fe("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");fe("\\newline","\\\\\\relax");fe("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");_G=kt(jl["Main-Regular"][84][1]-.7*jl["Main-Regular"][65][1]);fe("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+_G+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");fe("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+_G+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");fe("\\hspace","\\@ifstar\\@hspacer\\@hspace");fe("\\@hspace","\\hskip #1\\relax");fe("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");fe("\\ordinarycolon",":");fe("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");fe("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');fe("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');fe("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');fe("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');fe("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');fe("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');fe("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');fe("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');fe("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');fe("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');fe("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');fe("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');fe("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');fe("\u2237","\\dblcolon");fe("\u2239","\\eqcolon");fe("\u2254","\\coloneqq");fe("\u2255","\\eqqcolon");fe("\u2A74","\\Coloneqq");fe("\\ratio","\\vcentcolon");fe("\\coloncolon","\\dblcolon");fe("\\colonequals","\\coloneqq");fe("\\coloncolonequals","\\Coloneqq");fe("\\equalscolon","\\eqqcolon");fe("\\equalscoloncolon","\\Eqqcolon");fe("\\colonminus","\\coloneq");fe("\\coloncolonminus","\\Coloneq");fe("\\minuscolon","\\eqcolon");fe("\\minuscoloncolon","\\Eqcolon");fe("\\coloncolonapprox","\\Colonapprox");fe("\\coloncolonsim","\\Colonsim");fe("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");fe("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");fe("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");fe("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");fe("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");fe("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");fe("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");fe("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");fe("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");fe("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");fe("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");fe("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");fe("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");fe("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");fe("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");fe("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");fe("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");fe("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");fe("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");fe("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");fe("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");fe("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");fe("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");fe("\\imath","\\html@mathml{\\@imath}{\u0131}");fe("\\jmath","\\html@mathml{\\@jmath}{\u0237}");fe("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");fe("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");fe("\u27E6","\\llbracket");fe("\u27E7","\\rrbracket");fe("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");fe("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");fe("\u2983","\\lBrace");fe("\u2984","\\rBrace");fe("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");fe("\u29B5","\\minuso");fe("\\darr","\\downarrow");fe("\\dArr","\\Downarrow");fe("\\Darr","\\Downarrow");fe("\\lang","\\langle");fe("\\rang","\\rangle");fe("\\uarr","\\uparrow");fe("\\uArr","\\Uparrow");fe("\\Uarr","\\Uparrow");fe("\\N","\\mathbb{N}");fe("\\R","\\mathbb{R}");fe("\\Z","\\mathbb{Z}");fe("\\alef","\\aleph");fe("\\alefsym","\\aleph");fe("\\Alpha","\\mathrm{A}");fe("\\Beta","\\mathrm{B}");fe("\\bull","\\bullet");fe("\\Chi","\\mathrm{X}");fe("\\clubs","\\clubsuit");fe("\\cnums","\\mathbb{C}");fe("\\Complex","\\mathbb{C}");fe("\\Dagger","\\ddagger");fe("\\diamonds","\\diamondsuit");fe("\\empty","\\emptyset");fe("\\Epsilon","\\mathrm{E}");fe("\\Eta","\\mathrm{H}");fe("\\exist","\\exists");fe("\\harr","\\leftrightarrow");fe("\\hArr","\\Leftrightarrow");fe("\\Harr","\\Leftrightarrow");fe("\\hearts","\\heartsuit");fe("\\image","\\Im");fe("\\infin","\\infty");fe("\\Iota","\\mathrm{I}");fe("\\isin","\\in");fe("\\Kappa","\\mathrm{K}");fe("\\larr","\\leftarrow");fe("\\lArr","\\Leftarrow");fe("\\Larr","\\Leftarrow");fe("\\lrarr","\\leftrightarrow");fe("\\lrArr","\\Leftrightarrow");fe("\\Lrarr","\\Leftrightarrow");fe("\\Mu","\\mathrm{M}");fe("\\natnums","\\mathbb{N}");fe("\\Nu","\\mathrm{N}");fe("\\Omicron","\\mathrm{O}");fe("\\plusmn","\\pm");fe("\\rarr","\\rightarrow");fe("\\rArr","\\Rightarrow");fe("\\Rarr","\\Rightarrow");fe("\\real","\\Re");fe("\\reals","\\mathbb{R}");fe("\\Reals","\\mathbb{R}");fe("\\Rho","\\mathrm{P}");fe("\\sdot","\\cdot");fe("\\sect","\\S");fe("\\spades","\\spadesuit");fe("\\sub","\\subset");fe("\\sube","\\subseteq");fe("\\supe","\\supseteq");fe("\\Tau","\\mathrm{T}");fe("\\thetasym","\\vartheta");fe("\\weierp","\\wp");fe("\\Zeta","\\mathrm{Z}");fe("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");fe("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");fe("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");fe("\\bra","\\mathinner{\\langle{#1}|}");fe("\\ket","\\mathinner{|{#1}\\rangle}");fe("\\braket","\\mathinner{\\langle{#1}\\rangle}");fe("\\Bra","\\left\\langle#1\\right|");fe("\\Ket","\\left|#1\\right\\rangle");DG=o(t=>e=>{var r=e.consumeArg().tokens,n=e.consumeArg().tokens,i=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),i.length&&p.macros.set("\\|",l));var m=d;if(!d&&i.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?i:n,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),i.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");fe("\\bra@ket",DG(!1));fe("\\bra@set",DG(!0));fe("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");fe("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");fe("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");fe("\\angln","{\\angl n}");fe("\\blue","\\textcolor{##6495ed}{#1}");fe("\\orange","\\textcolor{##ffa500}{#1}");fe("\\pink","\\textcolor{##ff00af}{#1}");fe("\\red","\\textcolor{##df0030}{#1}");fe("\\green","\\textcolor{##28ae7b}{#1}");fe("\\gray","\\textcolor{gray}{#1}");fe("\\purple","\\textcolor{##9d38bd}{#1}");fe("\\blueA","\\textcolor{##ccfaff}{#1}");fe("\\blueB","\\textcolor{##80f6ff}{#1}");fe("\\blueC","\\textcolor{##63d9ea}{#1}");fe("\\blueD","\\textcolor{##11accd}{#1}");fe("\\blueE","\\textcolor{##0c7f99}{#1}");fe("\\tealA","\\textcolor{##94fff5}{#1}");fe("\\tealB","\\textcolor{##26edd5}{#1}");fe("\\tealC","\\textcolor{##01d1c1}{#1}");fe("\\tealD","\\textcolor{##01a995}{#1}");fe("\\tealE","\\textcolor{##208170}{#1}");fe("\\greenA","\\textcolor{##b6ffb0}{#1}");fe("\\greenB","\\textcolor{##8af281}{#1}");fe("\\greenC","\\textcolor{##74cf70}{#1}");fe("\\greenD","\\textcolor{##1fab54}{#1}");fe("\\greenE","\\textcolor{##0d923f}{#1}");fe("\\goldA","\\textcolor{##ffd0a9}{#1}");fe("\\goldB","\\textcolor{##ffbb71}{#1}");fe("\\goldC","\\textcolor{##ff9c39}{#1}");fe("\\goldD","\\textcolor{##e07d10}{#1}");fe("\\goldE","\\textcolor{##a75a05}{#1}");fe("\\redA","\\textcolor{##fca9a9}{#1}");fe("\\redB","\\textcolor{##ff8482}{#1}");fe("\\redC","\\textcolor{##f9685d}{#1}");fe("\\redD","\\textcolor{##e84d39}{#1}");fe("\\redE","\\textcolor{##bc2612}{#1}");fe("\\maroonA","\\textcolor{##ffbde0}{#1}");fe("\\maroonB","\\textcolor{##ff92c6}{#1}");fe("\\maroonC","\\textcolor{##ed5fa6}{#1}");fe("\\maroonD","\\textcolor{##ca337c}{#1}");fe("\\maroonE","\\textcolor{##9e034e}{#1}");fe("\\purpleA","\\textcolor{##ddd7ff}{#1}");fe("\\purpleB","\\textcolor{##c6b9fc}{#1}");fe("\\purpleC","\\textcolor{##aa87ff}{#1}");fe("\\purpleD","\\textcolor{##7854ab}{#1}");fe("\\purpleE","\\textcolor{##543b78}{#1}");fe("\\mintA","\\textcolor{##f5f9e8}{#1}");fe("\\mintB","\\textcolor{##edf2df}{#1}");fe("\\mintC","\\textcolor{##e0e5cc}{#1}");fe("\\grayA","\\textcolor{##f6f7f7}{#1}");fe("\\grayB","\\textcolor{##f0f1f2}{#1}");fe("\\grayC","\\textcolor{##e3e5e6}{#1}");fe("\\grayD","\\textcolor{##d6d8da}{#1}");fe("\\grayE","\\textcolor{##babec2}{#1}");fe("\\grayF","\\textcolor{##888d93}{#1}");fe("\\grayG","\\textcolor{##626569}{#1}");fe("\\grayH","\\textcolor{##3b3e40}{#1}");fe("\\grayI","\\textcolor{##21242c}{#1}");fe("\\kaBlue","\\textcolor{##314453}{#1}");fe("\\kaGreen","\\textcolor{##71B307}{#1}");LG={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},I7=class{static{o(this,"MacroExpander")}constructor(e,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new M7(V4e,r.macros),this.mode=n,this.stack=[]}feed(e){this.lexer=new y3(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,n,i;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new So("EOF",n.loc)),this.pushTokens(i),r.range(n,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],n=e&&e.length>0;n||this.consumeSpaces();var i=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new gt("Extra }",a)}else if(a.text==="EOF")throw new gt("Unexpected end of input in a macro argument, expected '"+(e&&n?e[l]:"}")+"'",a);if(e&&n)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new gt("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;i<n.length;i++){var a=this.popToken();if(n[i]!==a.text)throw new gt("Use of the macro doesn't match its definition",a)}}for(var s=[],l=0;l<e;l++)s.push(this.consumeArg(r&&r[l+1]).tokens);return s}countExpansion(e){if(this.expansionCount+=e,this.expansionCount>this.settings.maxExpand)throw new gt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||e&&i.unexpandable){if(e&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new gt("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,s=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new gt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new gt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new So(e)]):void 0}expandTokens(e){var r=[],n=this.stack.length;for(this.pushTokens(e);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(n=>n.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var n=this.lexer.catcodes[e];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.indexOf("#")!==-1)for(var s=i.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new y3(i,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return i}isDefined(e){return this.macros.has(e)||hh.hasOwnProperty(e)||An.math.hasOwnProperty(e)||An.text.hasOwnProperty(e)||LG.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:hh.hasOwnProperty(e)&&!hh[e].primitive}},Pz=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,l3=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),T7={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},Bz={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},v3=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new I7(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new gt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new So("}")),this.gullet.pushTokens(e);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(e,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(t.endOfExpression.indexOf(i.text)!==-1||r&&i.text===r||e&&hh[i.text]&&hh[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(e){for(var r=-1,n,i=0;i<e.length;i++)if(e[i].type==="infix"){if(r!==-1)throw new gt("only one infix operator per group",e[i].token);r=i,n=e[i].replaceWith}if(r!==-1&&n){var a,s,l=e.slice(0,r),u=e.slice(r+1);l.length===1&&l[0].type==="ordgroup"?a=l[0]:a={type:"ordgroup",mode:this.mode,body:l},u.length===1&&u[0].type==="ordgroup"?s=u[0]:s={type:"ordgroup",mode:this.mode,body:u};var h;return n==="\\\\abovefrac"?h=this.callFunction(n,[a,e[r],s],[]):h=this.callFunction(n,[a,s],[]),[h]}else return e}handleSupSubscript(e){var r=this.fetch(),n=r.text;this.consume(),this.consumeSpaces();var i=this.parseGroup(e);if(!i)throw new gt("Expected group after '"+n+"'",r);return i}formatUnsupportedCmd(e){for(var r=[],n=0;n<e.length;n++)r.push({type:"textord",mode:"text",text:e[n]});var i={type:"text",mode:this.mode,body:r},a={type:"color",mode:this.mode,color:this.settings.errorColor,body:[i]};return a}parseAtom(e){var r=this.parseGroup("atom",e);if(this.mode==="text")return r;for(var n,i;;){this.consumeSpaces();var a=this.fetch();if(a.text==="\\limits"||a.text==="\\nolimits"){if(r&&r.type==="op"){var s=a.text==="\\limits";r.limits=s,r.alwaysHandleSupSub=!0}else if(r&&r.type==="operatorname")r.alwaysHandleSupSub&&(r.limits=a.text==="\\limits");else throw new gt("Limit controls must follow a math operator",a);this.consume()}else if(a.text==="^"){if(n)throw new gt("Double superscript",a);n=this.handleSupSubscript("superscript")}else if(a.text==="_"){if(i)throw new gt("Double subscript",a);i=this.handleSupSubscript("subscript")}else if(a.text==="'"){if(n)throw new gt("Double superscript",a);var l={type:"textord",mode:this.mode,text:"\\prime"},u=[l];for(this.consume();this.fetch().text==="'";)u.push(l),this.consume();this.fetch().text==="^"&&u.push(this.handleSupSubscript("superscript")),n={type:"ordgroup",mode:this.mode,body:u}}else if(l3[a.text]){var h=Pz.test(a.text),f=[];for(f.push(new So(l3[a.text])),this.consume();;){var d=this.fetch().text;if(!l3[d]||Pz.test(d)!==h)break;f.unshift(new So(l3[d])),this.consume()}var p=this.subparse(f);h?i={type:"ordgroup",mode:"math",body:p}:n={type:"ordgroup",mode:"math",body:p}}else break}return n||i?{type:"supsub",mode:this.mode,base:r,sup:n,sub:i}:r}parseFunction(e,r){var n=this.fetch(),i=n.text,a=hh[i];if(!a)return null;if(this.consume(),r&&r!=="atom"&&!a.allowedInArgument)throw new gt("Got function '"+i+"' with no arguments"+(r?" as "+r:""),n);if(this.mode==="text"&&!a.allowedInText)throw new gt("Can't use function '"+i+"' in text mode",n);if(this.mode==="math"&&a.allowedInMath===!1)throw new gt("Can't use function '"+i+"' in math mode",n);var{args:s,optArgs:l}=this.parseArguments(i,a);return this.callFunction(i,s,l,n,e)}callFunction(e,r,n,i,a){var s={funcName:e,parser:this,token:i,breakOnTokenText:a},l=hh[e];if(l&&l.handler)return l.handler(s,r,n);throw new gt("No function handler for "+e)}parseArguments(e,r){var n=r.numArgs+r.numOptionalArgs;if(n===0)return{args:[],optArgs:[]};for(var i=[],a=[],s=0;s<n;s++){var l=r.argTypes&&r.argTypes[s],u=s<r.numOptionalArgs;(r.primitive&&l==null||r.type==="sqrt"&&s===1&&a[0]==null)&&(l="primitive");var h=this.parseGroupOfType("argument to '"+e+"'",l,u);if(u)a.push(h);else if(h!=null)i.push(h);else throw new gt("Null argument, please report this as a bug")}return{args:i,optArgs:a}}parseGroupOfType(e,r,n){switch(r){case"color":return this.parseColorGroup(n);case"size":return this.parseSizeGroup(n);case"url":return this.parseUrlGroup(n);case"math":case"text":return this.parseArgumentGroup(n,r);case"hbox":{var i=this.parseArgumentGroup(n,"text");return i!=null?{type:"styling",mode:i.mode,body:[i],style:"text"}:null}case"raw":{var a=this.parseStringGroup("raw",n);return a!=null?{type:"raw",mode:"text",string:a.text}:null}case"primitive":{if(n)throw new gt("A primitive argument cannot be optional");var s=this.parseGroup(e);if(s==null)throw new gt("Expected group as "+e,this.fetch());return s}case"original":case null:case void 0:return this.parseArgumentGroup(n);default:throw new gt("Unknown group type as "+e,this.fetch())}}consumeSpaces(){for(;this.fetch().text===" ";)this.consume()}parseStringGroup(e,r){var n=this.gullet.scanArgument(r);if(n==null)return null;for(var i="",a;(a=this.fetch()).text!=="EOF";)i+=a.text,this.consume();return this.consume(),n.text=i,n}parseRegexGroup(e,r){for(var n=this.fetch(),i=n,a="",s;(s=this.fetch()).text!=="EOF"&&e.test(a+s.text);)i=s,a+=i.text,this.consume();if(a==="")throw new gt("Invalid "+r+": '"+n.text+"'",n);return n.range(i,a)}parseColorGroup(e){var r=this.parseStringGroup("color",e);if(r==null)return null;var n=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(r.text);if(!n)throw new gt("Invalid color: '"+r.text+"'",r);var i=n[0];return/^[0-9a-f]{6}$/i.test(i)&&(i="#"+i),{type:"color-token",mode:this.mode,color:i}}parseSizeGroup(e){var r,n=!1;if(this.gullet.consumeSpaces(),!e&&this.gullet.future().text!=="{"?r=this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size"):r=this.parseStringGroup("size",e),!r)return null;!e&&r.text.length===0&&(r.text="0pt",n=!0);var i=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(r.text);if(!i)throw new gt("Invalid size: '"+r.text+"'",r);var a={number:+(i[1]+i[2]),unit:i[3]};if(!zz(a))throw new gt("Invalid unit: '"+a.unit+"'",r);return{type:"size",mode:this.mode,value:a,isBlank:n}}parseUrlGroup(e){this.gullet.lexer.setCatcode("%",13),this.gullet.lexer.setCatcode("~",12);var r=this.parseStringGroup("url",e);if(this.gullet.lexer.setCatcode("%",14),this.gullet.lexer.setCatcode("~",13),r==null)return null;var n=r.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:n}}parseArgumentGroup(e,r){var n=this.gullet.scanArgument(e);if(n==null)return null;var i=this.mode;r&&this.switchMode(r),this.gullet.beginGroup();var a=this.parseExpression(!1,"EOF");this.expect("EOF"),this.gullet.endGroup();var s={type:"ordgroup",mode:this.mode,loc:n.loc,body:a};return r&&this.switchMode(i),s}parseGroup(e,r){var n=this.fetch(),i=n.text,a;if(i==="{"||i==="\\begingroup"){this.consume();var s=i==="{"?"}":"\\endgroup";this.gullet.beginGroup();var l=this.parseExpression(!1,s),u=this.fetch();this.expect(s),this.gullet.endGroup(),a={type:"ordgroup",mode:this.mode,loc:Xs.range(n,u),body:l,semisimple:i==="\\begingroup"||void 0}}else if(a=this.parseFunction(r,e)||this.parseSymbol(),a==null&&i[0]==="\\"&&!LG.hasOwnProperty(i)){if(this.settings.throwOnError)throw new gt("Undefined control sequence: "+i,n);a=this.formatUnsupportedCmd(i),this.consume()}return a}formLigatures(e){for(var r=e.length-1,n=0;n<r;++n){var i=e[n],a=i.text;a==="-"&&e[n+1].text==="-"&&(n+1<r&&e[n+2].text==="-"?(e.splice(n,3,{type:"textord",mode:"text",loc:Xs.range(i,e[n+2]),text:"---"}),r-=2):(e.splice(n,2,{type:"textord",mode:"text",loc:Xs.range(i,e[n+1]),text:"--"}),r-=1)),(a==="'"||a==="`")&&e[n+1].text===a&&(e.splice(n,2,{type:"textord",mode:"text",loc:Xs.range(i,e[n+1]),text:a+a}),r-=1)}}parseSymbol(){var e=this.fetch(),r=e.text;if(/^\\verb[^a-zA-Z]/.test(r)){this.consume();var n=r.slice(5),i=n.charAt(0)==="*";if(i&&(n=n.slice(1)),n.length<2||n.charAt(0)!==n.slice(-1))throw new gt(`\\verb assertion failed -- | |
| 275 | + please report what input caused this bug`);return n=n.slice(1,-1),{type:"verb",mode:"text",body:n,star:i}}Bz.hasOwnProperty(r[0])&&!An[this.mode][r[0]]&&(this.settings.strict&&this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+r[0]+'" used in math mode',e),r=Bz[r[0]]+r.slice(1));var a=z4e.exec(r);a&&(r=r.substring(0,a.index),r==="i"?r="\u0131":r==="j"&&(r="\u0237"));var s;if(An[this.mode][r]){this.settings.strict&&this.mode==="math"&&C7.indexOf(r)>=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=An[this.mode][r].group,u=Xs.range(e),h;if(Mbe.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&($z(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:Xs.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d<a[0].length;d++){var p=a[0][d];if(!T7[p])throw new gt("Unknown accent ' "+p+"'",e);var m=T7[p][this.mode]||T7[p].text;if(!m)throw new gt("Accent "+p+" unsupported in "+this.mode+" mode",e);s={type:"accent",mode:this.mode,loc:Xs.range(e),label:m,isStretchy:!1,isShifty:!0,base:s}}return s}};v3.endOfExpression=["}","\\endgroup","\\end","\\right","&"];Q7=o(function(e,r){if(!(typeof e=="string"||e instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var n=new v3(e,r);delete n.gullet.macros.current["\\df@tag"];var i=n.parse();if(delete n.gullet.macros.current["\\current@color"],delete n.gullet.macros.current["\\color"],n.gullet.macros.get("\\df@tag")){if(!r.displayMode)throw new gt("\\tag works only in display equations");i=[{type:"tag",mode:"text",body:i,tag:n.subparse([new So("\\df@tag")])}]}return i},"parseTree"),RG=o(function(e,r,n){r.textContent="";var i=Z7(e,n).toNode();r.appendChild(i)},"render");typeof document<"u"&&document.compatMode!=="CSS1Compat"&&(typeof console<"u"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),RG=o(function(){throw new gt("KaTeX doesn't work in quirks mode.")},"render"));U4e=o(function(e,r){var n=Z7(e,r).toMarkup();return n},"renderToString"),H4e=o(function(e,r){var n=new zy(r);return Q7(e,n)},"generateParseTree"),NG=o(function(e,r,n){if(n.throwOnError||!(e instanceof gt))throw e;var i=Be.makeSpan(["katex-error"],[new Ts(r)]);return i.setAttribute("title",e.toString()),i.setAttribute("style","color:"+n.errorColor),i},"renderError"),Z7=o(function(e,r){var n=new zy(r);try{var i=Q7(e,n);return t4e(i,e,n)}catch(a){return NG(a,e,n)}},"renderToDomTree"),W4e=o(function(e,r){var n=new zy(r);try{var i=Q7(e,n);return r4e(i,e,n)}catch(a){return NG(a,e,n)}},"renderToHTMLTree"),q4e={version:"0.16.11",render:RG,renderToString:U4e,ParseError:gt,SETTINGS_SCHEMA:c3,__parse:H4e,__renderToDomTree:Z7,__renderToHTMLTree:W4e,__setFontMetrics:Abe,__defineSymbol:G,__defineFunction:Nt,__defineMacro:fe,__domTree:{Span:td,Anchor:Vy,SymbolNode:Ts,SvgNode:ll,PathNode:Kl,LineNode:Uy}}});function j4e(){let t="data-temp-href-target";ch.addHook("beforeSanitizeAttributes",e=>{e instanceof Element&&e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),ch.addHook("afterSanitizeAttributes",e=>{e instanceof Element&&e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var nd,Y4e,X4e,BG,OG,Tr,K4e,Q4e,Z4e,J4e,FG,e3e,fr,t3e,r3e,ec,J7,n3e,i3e,PG,eA,pi,id,mh,Ze,gr=N(()=>{"use strict";u7();nd=/<br\s*\/?>/gi,Y4e=o(t=>t?FG(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),X4e=(()=>{let t=!1;return()=>{t||(j4e(),t=!0)}})();o(j4e,"setupDompurifyHooks");BG=o(t=>(X4e(),ch.sanitize(t)),"removeScript"),OG=o((t,e)=>{if(e.flowchart?.htmlLabels!==!1){let r=e.securityLevel;r==="antiscript"||r==="strict"?t=BG(t):r!=="loose"&&(t=FG(t),t=t.replace(/</g,"<").replace(/>/g,">"),t=t.replace(/=/g,"="),t=J4e(t))}return t},"sanitizeMore"),Tr=o((t,e)=>t&&(e.dompurifyConfig?t=ch.sanitize(OG(t,e),e.dompurifyConfig).toString():t=ch.sanitize(OG(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),K4e=o((t,e)=>typeof t=="string"?Tr(t,e):t.flat().map(r=>Tr(r,e)),"sanitizeTextOrArray"),Q4e=o(t=>nd.test(t),"hasBreaks"),Z4e=o(t=>t.split(nd),"splitBreaks"),J4e=o(t=>t.replace(/#br#/g,"<br/>"),"placeholderToBreak"),FG=o(t=>t.replace(nd,"#br#"),"breakToPlaceholder"),e3e=o(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},"getUrl"),fr=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),t3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),r3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),ec=o(function(t){let e=t.split(/(,)/),r=[];for(let n=0;n<e.length;n++){let i=e[n];if(i===","&&n>0&&n+1<e.length){let a=e[n-1],s=e[n+1];n3e(a,s)&&(i=a+","+s,n++,r.pop())}r.push(i3e(i))}return r.join("")},"parseGenericTypes"),J7=o((t,e)=>Math.max(0,t.split(e).length-1),"countOccurrence"),n3e=o((t,e)=>{let r=J7(t,"~"),n=J7(e,"~");return r===1&&n===1},"shouldCombineSets"),i3e=o(t=>{let e=J7(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let n=[...t],i=n.indexOf("~"),a=n.lastIndexOf("~");for(;i!==-1&&a!==-1&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),PG=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),eA=/\$\$(.*)\$\$/g,pi=o(t=>(t.match(eA)?.length??0)>0,"hasKatex"),id=o(async(t,e)=>{t=await mh(t,e);let r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),mh=o(async(t,e)=>{if(!pi(t))return t;if(!(PG()||e.legacyMathML||e.forceLegacyMathML))return t.replace(eA,"MathML is unsupported in this environment.");let{default:r}=await Promise.resolve().then(()=>(IG(),MG)),n=e.forceLegacyMathML||!PG()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(nd).map(i=>pi(i)?`<div style="display: flex; align-items: center; justify-content: center; white-space: nowrap;">${i}</div>`:`<div>${i}</div>`).join("").replace(eA,(i,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:n}).replace(/\n/g," ").replace(/<annotation.*<\/annotation>/g,""))},"renderKatex"),Ze={getRows:Y4e,sanitizeText:Tr,sanitizeTextOrArray:K4e,hasBreaks:Q4e,splitBreaks:Z4e,lineBreakRegex:nd,removeScript:BG,getUrl:e3e,evaluate:fr,getMax:t3e,getMin:r3e}});var a3e,s3e,vn,Ao,Ei=N(()=>{"use strict";vt();a3e=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),s3e=o(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),vn=o(function(t,e,r,n){let i=s3e(e,r,n);a3e(t,i)},"configureSvgSize"),Ao=o(function(t,e,r,n){let i=e.node().getBBox(),a=i.width,s=i.height;Y.info(`SVG bounds: ${a}x${s}`,i);let l=0,u=0;Y.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,Y.info(`Calculated bounds: ${l}x${u}`),vn(e,u,l,n);let h=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var S3,o3e,$G,zG,tA=N(()=>{"use strict";vt();S3={},o3e=o((t,e,r)=>{let n="";return t in S3&&S3[t]?n=S3[t](r):Y.warn(`No theme found for ${t}`),` & { | |
| 276 | + font-family: ${r.fontFamily}; | |
| 277 | + font-size: ${r.fontSize}; | |
| 278 | + fill: ${r.textColor} | |
| 279 | + } | |
| 280 | + @keyframes edge-animation-frame { | |
| 281 | + from { | |
| 282 | + stroke-dashoffset: 0; | |
| 283 | + } | |
| 284 | + } | |
| 285 | + @keyframes dash { | |
| 286 | + to { | |
| 287 | + stroke-dashoffset: 0; | |
| 288 | + } | |
| 289 | + } | |
| 290 | + & .edge-animation-slow { | |
| 291 | + stroke-dasharray: 9,5 !important; | |
| 292 | + stroke-dashoffset: 900; | |
| 293 | + animation: dash 50s linear infinite; | |
| 294 | + stroke-linecap: round; | |
| 295 | + } | |
| 296 | + & .edge-animation-fast { | |
| 297 | + stroke-dasharray: 9,5 !important; | |
| 298 | + stroke-dashoffset: 900; | |
| 299 | + animation: dash 20s linear infinite; | |
| 300 | + stroke-linecap: round; | |
| 301 | + } | |
| 302 | + /* Classes common for multiple diagrams */ | |
| 303 | + | |
| 304 | + & .error-icon { | |
| 305 | + fill: ${r.errorBkgColor}; | |
| 306 | + } | |
| 307 | + & .error-text { | |
| 308 | + fill: ${r.errorTextColor}; | |
| 309 | + stroke: ${r.errorTextColor}; | |
| 310 | + } | |
| 311 | + | |
| 312 | + & .edge-thickness-normal { | |
| 313 | + stroke-width: 1px; | |
| 314 | + } | |
| 315 | + & .edge-thickness-thick { | |
| 316 | + stroke-width: 3.5px | |
| 317 | + } | |
| 318 | + & .edge-pattern-solid { | |
| 319 | + stroke-dasharray: 0; | |
| 320 | + } | |
| 321 | + & .edge-thickness-invisible { | |
| 322 | + stroke-width: 0; | |
| 323 | + fill: none; | |
| 324 | + } | |
| 325 | + & .edge-pattern-dashed{ | |
| 326 | + stroke-dasharray: 3; | |
| 327 | + } | |
| 328 | + .edge-pattern-dotted { | |
| 329 | + stroke-dasharray: 2; | |
| 330 | + } | |
| 331 | + | |
| 332 | + & .marker { | |
| 333 | + fill: ${r.lineColor}; | |
| 334 | + stroke: ${r.lineColor}; | |
| 335 | + } | |
| 336 | + & .marker.cross { | |
| 337 | + stroke: ${r.lineColor}; | |
| 338 | + } | |
| 339 | + | |
| 340 | + & svg { | |
| 341 | + font-family: ${r.fontFamily}; | |
| 342 | + font-size: ${r.fontSize}; | |
| 343 | + } | |
| 344 | + & p { | |
| 345 | + margin: 0 | |
| 346 | + } | |
| 347 | + | |
| 348 | + ${n} | |
| 349 | + | |
| 350 | + ${e} | |
| 351 | +`},"getStyles"),$G=o((t,e)=>{e!==void 0&&(S3[t]=e)},"addStylesForDiagram"),zG=o3e});var qy={};hr(qy,{clear:()=>Ar,getAccDescription:()=>Mr,getAccTitle:()=>Rr,getDiagramTitle:()=>Ir,setAccDescription:()=>Nr,setAccTitle:()=>Lr,setDiagramTitle:()=>$r});var rA,nA,iA,aA,Ar,Lr,Rr,Nr,Mr,$r,Ir,mi=N(()=>{"use strict";gr();ji();rA="",nA="",iA="",aA=o(t=>Tr(t,cr()),"sanitizeText"),Ar=o(()=>{rA="",iA="",nA=""},"clear"),Lr=o(t=>{rA=aA(t).replace(/^\s+/g,"")},"setAccTitle"),Rr=o(()=>rA,"getAccTitle"),Nr=o(t=>{iA=aA(t).replace(/\n\s+/g,` | |
| 352 | +`)},"setAccDescription"),Mr=o(()=>iA,"getAccDescription"),$r=o(t=>{nA=aA(t)},"setDiagramTitle"),Ir=o(()=>nA,"getDiagramTitle")});var GG,l3e,me,Yy,A3,Xy,oA,c3e,C3,ad,jy,sA,zt=N(()=>{"use strict";Xf();vt();ji();gr();Ei();tA();mi();GG=Y,l3e=wy,me=cr,Yy=X4,A3=lh,Xy=o(t=>Tr(t,me()),"sanitizeText"),oA=Ao,c3e=o(()=>qy,"getCommonDb"),C3={},ad=o((t,e,r)=>{C3[t]&&GG.warn(`Diagram with id ${t} already registered. Overwriting.`),C3[t]=e,r&&FC(t,r),$G(t,e.styles),e.injectUtils?.(GG,l3e,me,Xy,oA,c3e(),()=>{})},"registerDiagram"),jy=o(t=>{if(t in C3)return C3[t];throw new sA(t)},"getDiagram"),sA=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var ul,gh,Ja,cl,tc,Ky,lA,cA,_3,D3,VG,u3e,h3e,f3e,d3e,p3e,m3e,g3e,y3e,v3e,x3e,b3e,w3e,T3e,k3e,E3e,S3e,C3e,UG,A3e,_3e,HG,D3e,L3e,R3e,N3e,yh,M3e,I3e,O3e,P3e,B3e,Qy,uA=N(()=>{"use strict";zt();gr();mi();ul=[],gh=[""],Ja="global",cl="",tc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Ky=[],lA="",cA=!1,_3=4,D3=2,u3e=o(function(){return VG},"getC4Type"),h3e=o(function(t){VG=Tr(t,me())},"setC4Type"),f3e=o(function(t,e,r,n,i,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let h={},f=Ky.find(d=>d.from===e&&d.to===r);if(f?h=f:Ky.push(h),h.type=t,h.from=e,h.to=r,h.label={text:n},i==null)h.techn={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.techn={text:i};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=yh()},"addRel"),d3e=o(function(t,e,r,n,i,a,s){if(e===null||r===null)return;let l={},u=ul.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,ul.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.descr={text:""};else if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]={text:f}}else l.descr={text:n};if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]=f}else l.sprite=i;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=Ja,l.wrap=yh()},"addPersonOrSystem"),p3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ul.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ul.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=yh(),u.typeC4Shape={text:t},u.parentBoundary=Ja},"addContainer"),m3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ul.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ul.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=yh(),u.typeC4Shape={text:t},u.parentBoundary=Ja},"addComponent"),g3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=tc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,tc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Ja,a.wrap=yh(),cl=Ja,Ja=t,gh.push(cl)},"addPersonOrSystemBoundary"),y3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=tc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,tc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Ja,a.wrap=yh(),cl=Ja,Ja=t,gh.push(cl)},"addContainerBoundary"),v3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=tc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,tc.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.type={text:"node"};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.type={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=Ja,u.wrap=yh(),cl=Ja,Ja=e,gh.push(cl)},"addDeploymentNode"),x3e=o(function(){Ja=cl,gh.pop(),cl=gh.pop(),gh.push(cl)},"popBoundaryParseStack"),b3e=o(function(t,e,r,n,i,a,s,l,u,h,f){let d=ul.find(p=>p.alias===e);if(!(d===void 0&&(d=tc.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),w3e=o(function(t,e,r,n,i,a,s){let l=Ky.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.textColor=n;if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.lineColor=i;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),T3e=o(function(t,e,r){let n=_3,i=D3;if(typeof e=="object"){let a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(_3=n),i>=1&&(D3=i)},"updateLayoutConfig"),k3e=o(function(){return _3},"getC4ShapeInRow"),E3e=o(function(){return D3},"getC4BoundaryInRow"),S3e=o(function(){return Ja},"getCurrentBoundaryParse"),C3e=o(function(){return cl},"getParentBoundaryParse"),UG=o(function(t){return t==null?ul:ul.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),A3e=o(function(t){return ul.find(e=>e.alias===t)},"getC4Shape"),_3e=o(function(t){return Object.keys(UG(t))},"getC4ShapeKeys"),HG=o(function(t){return t==null?tc:tc.filter(e=>e.parentBoundary===t)},"getBoundaries"),D3e=HG,L3e=o(function(){return Ky},"getRels"),R3e=o(function(){return lA},"getTitle"),N3e=o(function(t){cA=t},"setWrap"),yh=o(function(){return cA},"autoWrap"),M3e=o(function(){ul=[],tc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],cl="",Ja="global",gh=[""],Ky=[],gh=[""],lA="",cA=!1,_3=4,D3=2},"clear"),I3e={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},O3e={FILLED:0,OPEN:1},P3e={LEFTOF:0,RIGHTOF:1,OVER:2},B3e=o(function(t){lA=Tr(t,me())},"setTitle"),Qy={addPersonOrSystem:d3e,addPersonOrSystemBoundary:g3e,addContainer:p3e,addContainerBoundary:y3e,addComponent:m3e,addDeploymentNode:v3e,popBoundaryParseStack:x3e,addRel:f3e,updateElStyle:b3e,updateRelStyle:w3e,updateLayoutConfig:T3e,autoWrap:yh,setWrap:N3e,getC4ShapeArray:UG,getC4Shape:A3e,getC4ShapeKeys:_3e,getBoundaries:HG,getBoundarys:D3e,getCurrentBoundaryParse:S3e,getParentBoundaryParse:C3e,getRels:L3e,getTitle:R3e,getC4Type:u3e,getC4ShapeInRow:k3e,getC4BoundaryInRow:E3e,setAccTitle:Lr,getAccTitle:Rr,getAccDescription:Mr,setAccDescription:Nr,getConfig:o(()=>me().c4,"getConfig"),clear:M3e,LINETYPE:I3e,ARROWTYPE:O3e,PLACEMENT:P3e,setTitle:B3e,setC4Type:h3e}});function sd(t,e){return t==null||e==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}var hA=N(()=>{"use strict";o(sd,"ascending")});function fA(t,e){return t==null||e==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}var WG=N(()=>{"use strict";o(fA,"descending")});function od(t){let e,r,n;t.length!==2?(e=sd,r=o((l,u)=>sd(t(l),u),"compare2"),n=o((l,u)=>t(l)-u,"delta")):(e=t===sd||t===fA?t:F3e,r=t,n=t);function i(l,u,h=0,f=l.length){if(h<f){if(e(u,u)!==0)return f;do{let d=h+f>>>1;r(l[d],u)<0?h=d+1:f=d}while(h<f)}return h}o(i,"left");function a(l,u,h=0,f=l.length){if(h<f){if(e(u,u)!==0)return f;do{let d=h+f>>>1;r(l[d],u)<=0?h=d+1:f=d}while(h<f)}return h}o(a,"right");function s(l,u,h=0,f=l.length){let d=i(l,u,h,f-1);return d>h&&n(l[d-1],u)>-n(l[d],u)?d-1:d}return o(s,"center"),{left:i,center:s,right:a}}function F3e(){return 0}var dA=N(()=>{"use strict";hA();WG();o(od,"bisector");o(F3e,"zero")});function pA(t){return t===null?NaN:+t}var qG=N(()=>{"use strict";o(pA,"number")});var YG,XG,$3e,z3e,mA,jG=N(()=>{"use strict";hA();dA();qG();YG=od(sd),XG=YG.right,$3e=YG.left,z3e=od(pA).center,mA=XG});function KG({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function G3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function V3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function U3e(t){return t!==null&&typeof t=="object"?t.valueOf():t}var g0,QG=N(()=>{"use strict";g0=class extends Map{static{o(this,"InternMap")}constructor(e,r=U3e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[n,i]of e)this.set(n,i)}get(e){return super.get(KG(this,e))}has(e){return super.has(KG(this,e))}set(e,r){return super.set(G3e(this,e),r)}delete(e){return super.delete(V3e(this,e))}};o(KG,"intern_get");o(G3e,"intern_set");o(V3e,"intern_delete");o(U3e,"keyof")});function L3(t,e,r){let n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=H3e?10:a>=W3e?5:a>=q3e?2:1,l,u,h;return i<0?(h=Math.pow(10,-i)/s,l=Math.round(t*h),u=Math.round(e*h),l/h<t&&++l,u/h>e&&--u,h=-h):(h=Math.pow(10,i)*s,l=Math.round(t/h),u=Math.round(e/h),l*h<t&&++l,u*h>e&&--u),u<l&&.5<=r&&r<2?L3(t,e,r*2):[l,u,h]}function R3(t,e,r){if(e=+e,t=+t,r=+r,!(r>0))return[];if(t===e)return[t];let n=e<t,[i,a,s]=n?L3(e,t,r):L3(t,e,r);if(!(a>=i))return[];let l=a-i+1,u=new Array(l);if(n)if(s<0)for(let h=0;h<l;++h)u[h]=(a-h)/-s;else for(let h=0;h<l;++h)u[h]=(a-h)*s;else if(s<0)for(let h=0;h<l;++h)u[h]=(i+h)/-s;else for(let h=0;h<l;++h)u[h]=(i+h)*s;return u}function Zy(t,e,r){return e=+e,t=+t,r=+r,L3(t,e,r)[2]}function y0(t,e,r){e=+e,t=+t,r=+r;let n=e<t,i=n?Zy(e,t,r):Zy(t,e,r);return(n?-1:1)*(i<0?1/-i:i)}var H3e,W3e,q3e,ZG=N(()=>{"use strict";H3e=Math.sqrt(50),W3e=Math.sqrt(10),q3e=Math.sqrt(2);o(L3,"tickSpec");o(R3,"ticks");o(Zy,"tickIncrement");o(y0,"tickStep")});function N3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r<n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r<i||r===void 0&&i>=i)&&(r=i)}return r}var JG=N(()=>{"use strict";o(N3,"max")});function M3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var eV=N(()=>{"use strict";o(M3,"min")});function I3(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n<i;)a[n]=t+n*r;return a}var tV=N(()=>{"use strict";o(I3,"range")});var vh=N(()=>{"use strict";jG();dA();JG();eV();tV();ZG();QG()});function gA(t){return t}var rV=N(()=>{"use strict";o(gA,"default")});function Y3e(t){return"translate("+t+",0)"}function X3e(t){return"translate(0,"+t+")"}function j3e(t){return e=>+t(e)}function K3e(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function Q3e(){return!this.__axis}function iV(t,e){var r=[],n=null,i=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===P3||t===O3?-1:1,f=t===O3||t===yA?"x":"y",d=t===P3||t===vA?Y3e:X3e;function p(m){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),y=i??(e.tickFormat?e.tickFormat.apply(e,r):gA),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,w=+x[x.length-1]+u,C=(e.bandwidth?K3e:j3e)(e.copy(),u),T=m.selection?m.selection():m,E=T.selectAll(".domain").data([null]),A=T.selectAll(".tick").data(g,e).order(),S=A.exit(),_=A.enter().append("g").attr("class","tick"),I=A.select("line"),D=A.select("text");E=E.merge(E.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),A=A.merge(_),I=I.merge(_.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),D=D.merge(_.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===P3?"0em":t===vA?"0.71em":"0.32em")),m!==T&&(E=E.transition(m),A=A.transition(m),I=I.transition(m),D=D.transition(m),S=S.transition(m).attr("opacity",nV).attr("transform",function(k){return isFinite(k=C(k))?d(k+u):this.getAttribute("transform")}),_.attr("opacity",nV).attr("transform",function(k){var L=this.parentNode.__axis;return d((L&&isFinite(L=L(k))?L:C(k))+u)})),S.remove(),E.attr("d",t===O3||t===yA?s?"M"+h*s+","+b+"H"+u+"V"+w+"H"+h*s:"M"+u+","+b+"V"+w:s?"M"+b+","+h*s+"V"+u+"H"+w+"V"+h*s:"M"+b+","+u+"H"+w),A.attr("opacity",1).attr("transform",function(k){return d(C(k)+u)}),I.attr(f+"2",h*a),D.attr(f,h*v).text(y),T.filter(Q3e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===yA?"start":t===O3?"end":"middle"),T.each(function(){this.__axis=C})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(n=m==null?null:Array.from(m),p):n&&n.slice()},p.tickFormat=function(m){return arguments.length?(i=m,p):i},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function xA(t){return iV(P3,t)}function bA(t){return iV(vA,t)}var P3,yA,vA,O3,nV,aV=N(()=>{"use strict";rV();P3=1,yA=2,vA=3,O3=4,nV=1e-6;o(Y3e,"translateX");o(X3e,"translateY");o(j3e,"number");o(K3e,"center");o(Q3e,"entering");o(iV,"axis");o(xA,"axisTop");o(bA,"axisBottom")});var sV=N(()=>{"use strict";aV()});function lV(){for(var t=0,e=arguments.length,r={},n;t<e;++t){if(!(n=arguments[t]+"")||n in r||/[\s.]/.test(n))throw new Error("illegal type: "+n);r[n]=[]}return new B3(r)}function B3(t){this._=t}function J3e(t,e){return t.trim().split(/^|\s+/).map(function(r){var n="",i=r.indexOf(".");if(i>=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}function e5e(t,e){for(var r=0,n=t.length,i;r<n;++r)if((i=t[r]).name===e)return i.value}function oV(t,e,r){for(var n=0,i=t.length;n<i;++n)if(t[n].name===e){t[n]=Z3e,t=t.slice(0,n).concat(t.slice(n+1));break}return r!=null&&t.push({name:e,value:r}),t}var Z3e,wA,cV=N(()=>{"use strict";Z3e={value:o(()=>{},"value")};o(lV,"dispatch");o(B3,"Dispatch");o(J3e,"parseTypenames");B3.prototype=lV.prototype={constructor:B3,on:o(function(t,e){var r=this._,n=J3e(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a<s;)if((i=(t=n[a]).type)&&(i=e5e(r[i],t.name)))return i;return}if(e!=null&&typeof e!="function")throw new Error("invalid callback: "+e);for(;++a<s;)if(i=(t=n[a]).type)r[i]=oV(r[i],t.name,e);else if(e==null)for(i in r)r[i]=oV(r[i],t.name,null);return this},"on"),copy:o(function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new B3(t)},"copy"),call:o(function(t,e){if((i=arguments.length-2)>0)for(var r=new Array(i),n=0,i,a;n<i;++n)r[n]=arguments[n+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=this._[t],n=0,i=a.length;n<i;++n)a[n].value.apply(e,r)},"call"),apply:o(function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var n=this._[t],i=0,a=n.length;i<a;++i)n[i].value.apply(e,r)},"apply")};o(e5e,"get");o(oV,"set");wA=lV});var TA=N(()=>{"use strict";cV()});var F3,kA,EA=N(()=>{"use strict";F3="http://www.w3.org/1999/xhtml",kA={svg:"http://www.w3.org/2000/svg",xhtml:F3,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function rc(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),kA.hasOwnProperty(e)?{space:kA[e],local:t}:t}var $3=N(()=>{"use strict";EA();o(rc,"default")});function t5e(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===F3&&e.documentElement.namespaceURI===F3?e.createElement(t):e.createElementNS(r,t)}}function r5e(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Jy(t){var e=rc(t);return(e.local?r5e:t5e)(e)}var SA=N(()=>{"use strict";$3();EA();o(t5e,"creatorInherit");o(r5e,"creatorFixed");o(Jy,"default")});function n5e(){}function xh(t){return t==null?n5e:function(){return this.querySelector(t)}}var z3=N(()=>{"use strict";o(n5e,"none");o(xh,"default")});function CA(t){typeof t!="function"&&(t=xh(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=new Array(s),u,h,f=0;f<s;++f)(u=a[f])&&(h=t.call(u,u.__data__,f,a))&&("__data__"in u&&(h.__data__=u.__data__),l[f]=h);return new oi(n,this._parents)}var uV=N(()=>{"use strict";hl();z3();o(CA,"default")});function AA(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var hV=N(()=>{"use strict";o(AA,"array")});function i5e(){return[]}function v0(t){return t==null?i5e:function(){return this.querySelectorAll(t)}}var _A=N(()=>{"use strict";o(i5e,"empty");o(v0,"default")});function a5e(t){return function(){return AA(t.apply(this,arguments))}}function DA(t){typeof t=="function"?t=a5e(t):t=v0(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a<r;++a)for(var s=e[a],l=s.length,u,h=0;h<l;++h)(u=s[h])&&(n.push(t.call(u,u.__data__,h,s)),i.push(u));return new oi(n,i)}var fV=N(()=>{"use strict";hl();hV();_A();o(a5e,"arrayAll");o(DA,"default")});function x0(t){return function(){return this.matches(t)}}function G3(t){return function(e){return e.matches(t)}}var ev=N(()=>{"use strict";o(x0,"default");o(G3,"childMatcher")});function o5e(t){return function(){return s5e.call(this.children,t)}}function l5e(){return this.firstElementChild}function LA(t){return this.select(t==null?l5e:o5e(typeof t=="function"?t:G3(t)))}var s5e,dV=N(()=>{"use strict";ev();s5e=Array.prototype.find;o(o5e,"childFind");o(l5e,"childFirst");o(LA,"default")});function u5e(){return Array.from(this.children)}function h5e(t){return function(){return c5e.call(this.children,t)}}function RA(t){return this.selectAll(t==null?u5e:h5e(typeof t=="function"?t:G3(t)))}var c5e,pV=N(()=>{"use strict";ev();c5e=Array.prototype.filter;o(u5e,"children");o(h5e,"childrenFilter");o(RA,"default")});function NA(t){typeof t!="function"&&(t=x0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=[],u,h=0;h<s;++h)(u=a[h])&&t.call(u,u.__data__,h,a)&&l.push(u);return new oi(n,this._parents)}var mV=N(()=>{"use strict";hl();ev();o(NA,"default")});function tv(t){return new Array(t.length)}var MA=N(()=>{"use strict";o(tv,"default")});function IA(){return new oi(this._enter||this._groups.map(tv),this._parents)}function rv(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var OA=N(()=>{"use strict";MA();hl();o(IA,"default");o(rv,"EnterNode");rv.prototype={constructor:rv,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function PA(t){return function(){return t}}var gV=N(()=>{"use strict";o(PA,"default")});function f5e(t,e,r,n,i,a){for(var s=0,l,u=e.length,h=a.length;s<h;++s)(l=e[s])?(l.__data__=a[s],n[s]=l):r[s]=new rv(t,a[s]);for(;s<u;++s)(l=e[s])&&(i[s]=l)}function d5e(t,e,r,n,i,a,s){var l,u,h=new Map,f=e.length,d=a.length,p=new Array(f),m;for(l=0;l<f;++l)(u=e[l])&&(p[l]=m=s.call(u,u.__data__,l,e)+"",h.has(m)?i[l]=u:h.set(m,u));for(l=0;l<d;++l)m=s.call(t,a[l],l,a)+"",(u=h.get(m))?(n[l]=u,u.__data__=a[l],h.delete(m)):r[l]=new rv(t,a[l]);for(l=0;l<f;++l)(u=e[l])&&h.get(p[l])===u&&(i[l]=u)}function p5e(t){return t.__data__}function BA(t,e){if(!arguments.length)return Array.from(this,p5e);var r=e?d5e:f5e,n=this._parents,i=this._groups;typeof t!="function"&&(t=PA(t));for(var a=i.length,s=new Array(a),l=new Array(a),u=new Array(a),h=0;h<a;++h){var f=n[h],d=i[h],p=d.length,m=m5e(t.call(f,f&&f.__data__,h,n)),g=m.length,y=l[h]=new Array(g),v=s[h]=new Array(g),x=u[h]=new Array(p);r(f,d,y,v,x,m,e);for(var b=0,w=0,C,T;b<g;++b)if(C=y[b]){for(b>=w&&(w=b+1);!(T=v[w])&&++w<g;);C._next=T||null}}return s=new oi(s,n),s._enter=l,s._exit=u,s}function m5e(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var yV=N(()=>{"use strict";hl();OA();gV();o(f5e,"bindIndex");o(d5e,"bindKey");o(p5e,"datum");o(BA,"default");o(m5e,"arraylike")});function FA(){return new oi(this._exit||this._groups.map(tv),this._parents)}var vV=N(()=>{"use strict";MA();hl();o(FA,"default")});function $A(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}var xV=N(()=>{"use strict";o($A,"default")});function zA(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),l=new Array(i),u=0;u<s;++u)for(var h=r[u],f=n[u],d=h.length,p=l[u]=new Array(d),m,g=0;g<d;++g)(m=h[g]||f[g])&&(p[g]=m);for(;u<i;++u)l[u]=r[u];return new oi(l,this._parents)}var bV=N(()=>{"use strict";hl();o(zA,"default")});function GA(){for(var t=this._groups,e=-1,r=t.length;++e<r;)for(var n=t[e],i=n.length-1,a=n[i],s;--i>=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var wV=N(()=>{"use strict";o(GA,"default")});function VA(t){t||(t=g5e);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,n=r.length,i=new Array(n),a=0;a<n;++a){for(var s=r[a],l=s.length,u=i[a]=new Array(l),h,f=0;f<l;++f)(h=s[f])&&(u[f]=h);u.sort(e)}return new oi(i,this._parents).order()}function g5e(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}var TV=N(()=>{"use strict";hl();o(VA,"default");o(g5e,"ascending")});function UA(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var kV=N(()=>{"use strict";o(UA,"default")});function HA(){return Array.from(this)}var EV=N(()=>{"use strict";o(HA,"default")});function WA(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],i=0,a=n.length;i<a;++i){var s=n[i];if(s)return s}return null}var SV=N(()=>{"use strict";o(WA,"default")});function qA(){let t=0;for(let e of this)++t;return t}var CV=N(()=>{"use strict";o(qA,"default")});function YA(){return!this.node()}var AV=N(()=>{"use strict";o(YA,"default")});function XA(t){for(var e=this._groups,r=0,n=e.length;r<n;++r)for(var i=e[r],a=0,s=i.length,l;a<s;++a)(l=i[a])&&t.call(l,l.__data__,a,i);return this}var _V=N(()=>{"use strict";o(XA,"default")});function y5e(t){return function(){this.removeAttribute(t)}}function v5e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function x5e(t,e){return function(){this.setAttribute(t,e)}}function b5e(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function w5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function T5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function jA(t,e){var r=rc(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?v5e:y5e:typeof e=="function"?r.local?T5e:w5e:r.local?b5e:x5e)(r,e))}var DV=N(()=>{"use strict";$3();o(y5e,"attrRemove");o(v5e,"attrRemoveNS");o(x5e,"attrConstant");o(b5e,"attrConstantNS");o(w5e,"attrFunction");o(T5e,"attrFunctionNS");o(jA,"default")});function nv(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var KA=N(()=>{"use strict";o(nv,"default")});function k5e(t){return function(){this.style.removeProperty(t)}}function E5e(t,e,r){return function(){this.style.setProperty(t,e,r)}}function S5e(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function QA(t,e,r){return arguments.length>1?this.each((e==null?k5e:typeof e=="function"?S5e:E5e)(t,e,r??"")):bh(this.node(),t)}function bh(t,e){return t.style.getPropertyValue(e)||nv(t).getComputedStyle(t,null).getPropertyValue(e)}var ZA=N(()=>{"use strict";KA();o(k5e,"styleRemove");o(E5e,"styleConstant");o(S5e,"styleFunction");o(QA,"default");o(bh,"styleValue")});function C5e(t){return function(){delete this[t]}}function A5e(t,e){return function(){this[t]=e}}function _5e(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function JA(t,e){return arguments.length>1?this.each((e==null?C5e:typeof e=="function"?_5e:A5e)(t,e)):this.node()[t]}var LV=N(()=>{"use strict";o(C5e,"propertyRemove");o(A5e,"propertyConstant");o(_5e,"propertyFunction");o(JA,"default")});function RV(t){return t.trim().split(/^|\s+/)}function e8(t){return t.classList||new NV(t)}function NV(t){this._node=t,this._names=RV(t.getAttribute("class")||"")}function MV(t,e){for(var r=e8(t),n=-1,i=e.length;++n<i;)r.add(e[n])}function IV(t,e){for(var r=e8(t),n=-1,i=e.length;++n<i;)r.remove(e[n])}function D5e(t){return function(){MV(this,t)}}function L5e(t){return function(){IV(this,t)}}function R5e(t,e){return function(){(e.apply(this,arguments)?MV:IV)(this,t)}}function t8(t,e){var r=RV(t+"");if(arguments.length<2){for(var n=e8(this.node()),i=-1,a=r.length;++i<a;)if(!n.contains(r[i]))return!1;return!0}return this.each((typeof e=="function"?R5e:e?D5e:L5e)(r,e))}var OV=N(()=>{"use strict";o(RV,"classArray");o(e8,"classList");o(NV,"ClassList");NV.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(MV,"classedAdd");o(IV,"classedRemove");o(D5e,"classedTrue");o(L5e,"classedFalse");o(R5e,"classedFunction");o(t8,"default")});function N5e(){this.textContent=""}function M5e(t){return function(){this.textContent=t}}function I5e(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function r8(t){return arguments.length?this.each(t==null?N5e:(typeof t=="function"?I5e:M5e)(t)):this.node().textContent}var PV=N(()=>{"use strict";o(N5e,"textRemove");o(M5e,"textConstant");o(I5e,"textFunction");o(r8,"default")});function O5e(){this.innerHTML=""}function P5e(t){return function(){this.innerHTML=t}}function B5e(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function n8(t){return arguments.length?this.each(t==null?O5e:(typeof t=="function"?B5e:P5e)(t)):this.node().innerHTML}var BV=N(()=>{"use strict";o(O5e,"htmlRemove");o(P5e,"htmlConstant");o(B5e,"htmlFunction");o(n8,"default")});function F5e(){this.nextSibling&&this.parentNode.appendChild(this)}function i8(){return this.each(F5e)}var FV=N(()=>{"use strict";o(F5e,"raise");o(i8,"default")});function $5e(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function a8(){return this.each($5e)}var $V=N(()=>{"use strict";o($5e,"lower");o(a8,"default")});function s8(t){var e=typeof t=="function"?t:Jy(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var zV=N(()=>{"use strict";SA();o(s8,"default")});function z5e(){return null}function o8(t,e){var r=typeof t=="function"?t:Jy(t),n=e==null?z5e:typeof e=="function"?e:xh(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}var GV=N(()=>{"use strict";SA();z3();o(z5e,"constantNull");o(o8,"default")});function G5e(){var t=this.parentNode;t&&t.removeChild(this)}function l8(){return this.each(G5e)}var VV=N(()=>{"use strict";o(G5e,"remove");o(l8,"default")});function V5e(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function U5e(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function c8(t){return this.select(t?U5e:V5e)}var UV=N(()=>{"use strict";o(V5e,"selection_cloneShallow");o(U5e,"selection_cloneDeep");o(c8,"default")});function u8(t){return arguments.length?this.property("__data__",t):this.node().__data__}var HV=N(()=>{"use strict";o(u8,"default")});function H5e(t){return function(e){t.call(this,e,this.__data__)}}function W5e(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function q5e(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,i=e.length,a;r<i;++r)a=e[r],(!t.type||a.type===t.type)&&a.name===t.name?this.removeEventListener(a.type,a.listener,a.options):e[++n]=a;++n?e.length=n:delete this.__on}}}function Y5e(t,e,r){return function(){var n=this.__on,i,a=H5e(e);if(n){for(var s=0,l=n.length;s<l;++s)if((i=n[s]).type===t.type&&i.name===t.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=r),i.value=e;return}}this.addEventListener(t.type,a,r),i={type:t.type,name:t.name,value:e,listener:a,options:r},n?n.push(i):this.__on=[i]}}function h8(t,e,r){var n=W5e(t+""),i,a=n.length,s;if(arguments.length<2){var l=this.node().__on;if(l){for(var u=0,h=l.length,f;u<h;++u)for(i=0,f=l[u];i<a;++i)if((s=n[i]).type===f.type&&s.name===f.name)return f.value}return}for(l=e?Y5e:q5e,i=0;i<a;++i)this.each(l(n[i],e,r));return this}var WV=N(()=>{"use strict";o(H5e,"contextListener");o(W5e,"parseTypenames");o(q5e,"onRemove");o(Y5e,"onAdd");o(h8,"default")});function qV(t,e,r){var n=nv(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function X5e(t,e){return function(){return qV(this,t,e)}}function j5e(t,e){return function(){return qV(this,t,e.apply(this,arguments))}}function f8(t,e){return this.each((typeof e=="function"?j5e:X5e)(t,e))}var YV=N(()=>{"use strict";KA();o(qV,"dispatchEvent");o(X5e,"dispatchConstant");o(j5e,"dispatchFunction");o(f8,"default")});function*d8(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],i=0,a=n.length,s;i<a;++i)(s=n[i])&&(yield s)}var XV=N(()=>{"use strict";o(d8,"default")});function oi(t,e){this._groups=t,this._parents=e}function jV(){return new oi([[document.documentElement]],p8)}function K5e(){return this}var p8,hu,hl=N(()=>{"use strict";uV();fV();dV();pV();mV();yV();OA();vV();xV();bV();wV();TV();kV();EV();SV();CV();AV();_V();DV();ZA();LV();OV();PV();BV();FV();$V();zV();GV();VV();UV();HV();WV();YV();XV();p8=[null];o(oi,"Selection");o(jV,"selection");o(K5e,"selection_selection");oi.prototype=jV.prototype={constructor:oi,select:CA,selectAll:DA,selectChild:LA,selectChildren:RA,filter:NA,data:BA,enter:IA,exit:FA,join:$A,merge:zA,selection:K5e,order:GA,sort:VA,call:UA,nodes:HA,node:WA,size:qA,empty:YA,each:XA,attr:jA,style:QA,property:JA,classed:t8,text:r8,html:n8,raise:i8,lower:a8,append:s8,insert:o8,remove:l8,clone:c8,datum:u8,on:h8,dispatch:f8,[Symbol.iterator]:d8};hu=jV});function Ge(t){return typeof t=="string"?new oi([[document.querySelector(t)]],[document.documentElement]):new oi([[t]],p8)}var KV=N(()=>{"use strict";hl();o(Ge,"default")});var fl=N(()=>{"use strict";ev();$3();KV();hl();z3();_A();ZA()});var QV=N(()=>{"use strict"});function wh(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function b0(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}var m8=N(()=>{"use strict";o(wh,"default");o(b0,"extend")});function Th(){}function JV(){return this.rgb().formatHex()}function iwe(){return this.rgb().formatHex8()}function awe(){return sU(this).formatHsl()}function eU(){return this.rgb().formatRgb()}function pl(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=Q5e.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?tU(e):r===3?new ua(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?V3(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?V3(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Z5e.exec(t))?new ua(e[1],e[2],e[3],1):(e=J5e.exec(t))?new ua(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=ewe.exec(t))?V3(e[1],e[2],e[3],e[4]):(e=twe.exec(t))?V3(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=rwe.exec(t))?iU(e[1],e[2]/100,e[3]/100,1):(e=nwe.exec(t))?iU(e[1],e[2]/100,e[3]/100,e[4]):ZV.hasOwnProperty(t)?tU(ZV[t]):t==="transparent"?new ua(NaN,NaN,NaN,0):null}function tU(t){return new ua(t>>16&255,t>>8&255,t&255,1)}function V3(t,e,r,n){return n<=0&&(t=e=r=NaN),new ua(t,e,r,n)}function y8(t){return t instanceof Th||(t=pl(t)),t?(t=t.rgb(),new ua(t.r,t.g,t.b,t.opacity)):new ua}function T0(t,e,r,n){return arguments.length===1?y8(t):new ua(t,e,r,n??1)}function ua(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function rU(){return`#${ld(this.r)}${ld(this.g)}${ld(this.b)}`}function swe(){return`#${ld(this.r)}${ld(this.g)}${ld(this.b)}${ld((isNaN(this.opacity)?1:this.opacity)*255)}`}function nU(){let t=W3(this.opacity);return`${t===1?"rgb(":"rgba("}${cd(this.r)}, ${cd(this.g)}, ${cd(this.b)}${t===1?")":`, ${t})`}`}function W3(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function cd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ld(t){return t=cd(t),(t<16?"0":"")+t.toString(16)}function iU(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new dl(t,e,r,n)}function sU(t){if(t instanceof dl)return new dl(t.h,t.s,t.l,t.opacity);if(t instanceof Th||(t=pl(t)),!t)return new dl;if(t instanceof dl)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,l=a-i,u=(a+i)/2;return l?(e===a?s=(r-n)/l+(r<n)*6:r===a?s=(n-e)/l+2:s=(e-r)/l+4,l/=u<.5?a+i:2-a-i,s*=60):l=u>0&&u<1?0:s,new dl(s,l,u,t.opacity)}function oU(t,e,r,n){return arguments.length===1?sU(t):new dl(t,e,r,n??1)}function dl(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function aU(t){return t=(t||0)%360,t<0?t+360:t}function U3(t){return Math.max(0,Math.min(1,t||0))}function g8(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var iv,H3,w0,av,nc,Q5e,Z5e,J5e,ewe,twe,rwe,nwe,ZV,v8=N(()=>{"use strict";m8();o(Th,"Color");iv=.7,H3=1/iv,w0="\\s*([+-]?\\d+)\\s*",av="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",nc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Q5e=/^#([0-9a-f]{3,8})$/,Z5e=new RegExp(`^rgb\\(${w0},${w0},${w0}\\)$`),J5e=new RegExp(`^rgb\\(${nc},${nc},${nc}\\)$`),ewe=new RegExp(`^rgba\\(${w0},${w0},${w0},${av}\\)$`),twe=new RegExp(`^rgba\\(${nc},${nc},${nc},${av}\\)$`),rwe=new RegExp(`^hsl\\(${av},${nc},${nc}\\)$`),nwe=new RegExp(`^hsla\\(${av},${nc},${nc},${av}\\)$`),ZV={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};wh(Th,pl,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:JV,formatHex:JV,formatHex8:iwe,formatHsl:awe,formatRgb:eU,toString:eU});o(JV,"color_formatHex");o(iwe,"color_formatHex8");o(awe,"color_formatHsl");o(eU,"color_formatRgb");o(pl,"color");o(tU,"rgbn");o(V3,"rgba");o(y8,"rgbConvert");o(T0,"rgb");o(ua,"Rgb");wh(ua,T0,b0(Th,{brighter(t){return t=t==null?H3:Math.pow(H3,t),new ua(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?iv:Math.pow(iv,t),new ua(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new ua(cd(this.r),cd(this.g),cd(this.b),W3(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:rU,formatHex:rU,formatHex8:swe,formatRgb:nU,toString:nU}));o(rU,"rgb_formatHex");o(swe,"rgb_formatHex8");o(nU,"rgb_formatRgb");o(W3,"clampa");o(cd,"clampi");o(ld,"hex");o(iU,"hsla");o(sU,"hslConvert");o(oU,"hsl");o(dl,"Hsl");wh(dl,oU,b0(Th,{brighter(t){return t=t==null?H3:Math.pow(H3,t),new dl(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?iv:Math.pow(iv,t),new dl(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new ua(g8(t>=240?t-240:t+120,i,n),g8(t,i,n),g8(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new dl(aU(this.h),U3(this.s),U3(this.l),W3(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(){let t=W3(this.opacity);return`${t===1?"hsl(":"hsla("}${aU(this.h)}, ${U3(this.s)*100}%, ${U3(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(aU,"clamph");o(U3,"clampt");o(g8,"hsl2rgb")});var lU,cU,uU=N(()=>{"use strict";lU=Math.PI/180,cU=180/Math.PI});function gU(t){if(t instanceof ic)return new ic(t.l,t.a,t.b,t.opacity);if(t instanceof fu)return yU(t);t instanceof ua||(t=y8(t));var e=T8(t.r),r=T8(t.g),n=T8(t.b),i=x8((.2225045*e+.7168786*r+.0606169*n)/fU),a,s;return e===r&&r===n?a=s=i:(a=x8((.4360747*e+.3850649*r+.1430804*n)/hU),s=x8((.0139322*e+.0971045*r+.7141733*n)/dU)),new ic(116*i-16,500*(a-i),200*(i-s),t.opacity)}function k8(t,e,r,n){return arguments.length===1?gU(t):new ic(t,e,r,n??1)}function ic(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function x8(t){return t>owe?Math.pow(t,1/3):t/mU+pU}function b8(t){return t>k0?t*t*t:mU*(t-pU)}function w8(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function T8(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function lwe(t){if(t instanceof fu)return new fu(t.h,t.c,t.l,t.opacity);if(t instanceof ic||(t=gU(t)),t.a===0&&t.b===0)return new fu(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*cU;return new fu(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function sv(t,e,r,n){return arguments.length===1?lwe(t):new fu(t,e,r,n??1)}function fu(t,e,r,n){this.h=+t,this.c=+e,this.l=+r,this.opacity=+n}function yU(t){if(isNaN(t.h))return new ic(t.l,0,0,t.opacity);var e=t.h*lU;return new ic(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}var q3,hU,fU,dU,pU,k0,mU,owe,vU=N(()=>{"use strict";m8();v8();uU();q3=18,hU=.96422,fU=1,dU=.82521,pU=4/29,k0=6/29,mU=3*k0*k0,owe=k0*k0*k0;o(gU,"labConvert");o(k8,"lab");o(ic,"Lab");wh(ic,k8,b0(Th,{brighter(t){return new ic(this.l+q3*(t??1),this.a,this.b,this.opacity)},darker(t){return new ic(this.l-q3*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=hU*b8(e),t=fU*b8(t),r=dU*b8(r),new ua(w8(3.1338561*e-1.6168667*t-.4906146*r),w8(-.9787684*e+1.9161415*t+.033454*r),w8(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(x8,"xyz2lab");o(b8,"lab2xyz");o(w8,"lrgb2rgb");o(T8,"rgb2lrgb");o(lwe,"hclConvert");o(sv,"hcl");o(fu,"Hcl");o(yU,"hcl2lab");wh(fu,sv,b0(Th,{brighter(t){return new fu(this.h,this.c,this.l+q3*(t??1),this.opacity)},darker(t){return new fu(this.h,this.c,this.l-q3*(t??1),this.opacity)},rgb(){return yU(this).rgb()}}))});var E0=N(()=>{"use strict";v8();vU()});function E8(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function S8(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,l=n<e-1?t[n+2]:2*a-i;return E8((r-n/e)*e,s,i,a,l)}}var C8=N(()=>{"use strict";o(E8,"basis");o(S8,"default")});function A8(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],l=t[(n+2)%e];return E8((r-n/e)*e,i,a,s,l)}}var xU=N(()=>{"use strict";C8();o(A8,"default")});var S0,_8=N(()=>{"use strict";S0=o(t=>()=>t,"default")});function bU(t,e){return function(r){return t+r*e}}function cwe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function wU(t,e){var r=e-t;return r?bU(t,r>180||r<-180?r-360*Math.round(r/360):r):S0(isNaN(t)?e:t)}function TU(t){return(t=+t)==1?du:function(e,r){return r-e?cwe(e,r,t):S0(isNaN(e)?r:e)}}function du(t,e){var r=e-t;return r?bU(t,r):S0(isNaN(t)?e:t)}var D8=N(()=>{"use strict";_8();o(bU,"linear");o(cwe,"exponential");o(wU,"hue");o(TU,"gamma");o(du,"nogamma")});function kU(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,l;for(s=0;s<r;++s)l=T0(e[s]),n[s]=l.r||0,i[s]=l.g||0,a[s]=l.b||0;return n=t(n),i=t(i),a=t(a),l.opacity=1,function(u){return l.r=n(u),l.g=i(u),l.b=a(u),l+""}}}var ud,uwe,hwe,L8=N(()=>{"use strict";E0();C8();xU();D8();ud=o(function t(e){var r=TU(e);function n(i,a){var s=r((i=T0(i)).r,(a=T0(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),h=du(i.opacity,a.opacity);return function(f){return i.r=s(f),i.g=l(f),i.b=u(f),i.opacity=h(f),i+""}}return o(n,"rgb"),n.gamma=t,n},"rgbGamma")(1);o(kU,"rgbSpline");uwe=kU(S8),hwe=kU(A8)});function R8(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i<r;++i)n[i]=t[i]*(1-a)+e[i]*a;return n}}function EU(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}var SU=N(()=>{"use strict";o(R8,"default");o(EU,"isNumberArray")});function CU(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s<n;++s)i[s]=kh(t[s],e[s]);for(;s<r;++s)a[s]=e[s];return function(l){for(s=0;s<n;++s)a[s]=i[s](l);return a}}var AU=N(()=>{"use strict";Y3();o(CU,"genericArray")});function N8(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}var _U=N(()=>{"use strict";o(N8,"default")});function Ki(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var ov=N(()=>{"use strict";o(Ki,"default")});function M8(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=kh(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var DU=N(()=>{"use strict";Y3();o(M8,"default")});function fwe(t){return function(){return t}}function dwe(t){return function(e){return t(e)+""}}function C0(t,e){var r=O8.lastIndex=I8.lastIndex=0,n,i,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(n=O8.exec(t))&&(i=I8.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(n=n[0])===(i=i[0])?l[s]?l[s]+=i:l[++s]=i:(l[++s]=null,u.push({i:s,x:Ki(n,i)})),r=I8.lastIndex;return r<e.length&&(a=e.slice(r),l[s]?l[s]+=a:l[++s]=a),l.length<2?u[0]?dwe(u[0].x):fwe(e):(e=u.length,function(h){for(var f=0,d;f<e;++f)l[(d=u[f]).i]=d.x(h);return l.join("")})}var O8,I8,P8=N(()=>{"use strict";ov();O8=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,I8=new RegExp(O8.source,"g");o(fwe,"zero");o(dwe,"one");o(C0,"default")});function kh(t,e){var r=typeof e,n;return e==null||r==="boolean"?S0(e):(r==="number"?Ki:r==="string"?(n=pl(e))?(e=n,ud):C0:e instanceof pl?ud:e instanceof Date?N8:EU(e)?R8:Array.isArray(e)?CU:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?M8:Ki)(t,e)}var Y3=N(()=>{"use strict";E0();L8();AU();_U();ov();DU();P8();_8();SU();o(kh,"default")});function X3(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var LU=N(()=>{"use strict";o(X3,"default")});function K3(t,e,r,n,i,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*n)&&(r-=t*u,n-=e*u),(l=Math.sqrt(r*r+n*n))&&(r/=l,n/=l,u/=l),t*n<e*r&&(t=-t,e=-e,u=-u,s=-s),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*RU,skewX:Math.atan(u)*RU,scaleX:s,scaleY:l}}var RU,j3,NU=N(()=>{"use strict";RU=180/Math.PI,j3={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(K3,"default")});function MU(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?j3:K3(e.a,e.b,e.c,e.d,e.e,e.f)}function IU(t){return t==null?j3:(Q3||(Q3=document.createElementNS("http://www.w3.org/2000/svg","g")),Q3.setAttribute("transform",t),(t=Q3.transform.baseVal.consolidate())?(t=t.matrix,K3(t.a,t.b,t.c,t.d,t.e,t.f)):j3)}var Q3,OU=N(()=>{"use strict";NU();o(MU,"parseCss");o(IU,"parseSvg")});function PU(t,e,r,n){function i(h){return h.length?h.pop()+" ":""}o(i,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(i(d)+"rotate(",null,n)-2,x:Ki(h,f)})):f&&d.push(i(d)+"rotate("+f+n)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(i(d)+"skewX(",null,n)-2,x:Ki(h,f)}):f&&d.push(i(d)+"skewX("+f+n)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(i(m)+"scale(",null,",",null,")");g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d!==1||p!==1)&&m.push(i(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g<y;)d[(v=p[g]).i]=v.x(m);return d.join("")}}}var B8,F8,BU=N(()=>{"use strict";ov();OU();o(PU,"interpolateTransform");B8=PU(MU,"px, ","px)","deg)"),F8=PU(IU,", ",")",")")});function FU(t){return function(e,r){var n=t((e=sv(e)).h,(r=sv(r)).h),i=du(e.c,r.c),a=du(e.l,r.l),s=du(e.opacity,r.opacity);return function(l){return e.h=n(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}var $8,pwe,$U=N(()=>{"use strict";E0();D8();o(FU,"hcl");$8=FU(wU),pwe=FU(du)});var A0=N(()=>{"use strict";Y3();ov();LU();P8();BU();L8();$U()});function dv(){return hd||(VU(mwe),hd=hv.now()+e5)}function mwe(){hd=0}function fv(){this._call=this._time=this._next=null}function t5(t,e,r){var n=new fv;return n.restart(t,e,r),n}function UU(){dv(),++_0;for(var t=Z3,e;t;)(e=hd-t._time)>=0&&t._call.call(void 0,e),t=t._next;--_0}function zU(){hd=(J3=hv.now())+e5,_0=cv=0;try{UU()}finally{_0=0,ywe(),hd=0}}function gwe(){var t=hv.now(),e=t-J3;e>GU&&(e5-=e,J3=t)}function ywe(){for(var t,e=Z3,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:Z3=r);uv=t,z8(n)}function z8(t){if(!_0){cv&&(cv=clearTimeout(cv));var e=t-hd;e>24?(t<1/0&&(cv=setTimeout(zU,t-hv.now()-e5)),lv&&(lv=clearInterval(lv))):(lv||(J3=hv.now(),lv=setInterval(gwe,GU)),_0=1,VU(zU))}}var _0,cv,lv,GU,Z3,uv,J3,hd,e5,hv,VU,G8=N(()=>{"use strict";_0=0,cv=0,lv=0,GU=1e3,J3=0,hd=0,e5=0,hv=typeof performance=="object"&&performance.now?performance:Date,VU=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(dv,"now");o(mwe,"clearNow");o(fv,"Timer");fv.prototype=t5.prototype={constructor:fv,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?dv():+r)+(e==null?0:+e),!this._next&&uv!==this&&(uv?uv._next=this:Z3=this,uv=this),this._call=t,this._time=r,z8()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,z8())},"stop")};o(t5,"timer");o(UU,"timerFlush");o(zU,"wake");o(gwe,"poke");o(ywe,"nap");o(z8,"sleep")});function pv(t,e,r){var n=new fv;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var HU=N(()=>{"use strict";G8();o(pv,"default")});var r5=N(()=>{"use strict";G8();HU()});function pu(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;bwe(t,r,{name:e,index:n,group:i,on:vwe,tween:xwe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:YU})}function gv(t,e){var r=Bi(t,e);if(r.state>YU)throw new Error("too late; already scheduled");return r}function ha(t,e){var r=Bi(t,e);if(r.state>n5)throw new Error("too late; already running");return r}function Bi(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function bwe(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=t5(a,0,r.time);function a(h){r.state=WU,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==WU)return u();for(f in n)if(m=n[f],m.name===r.name){if(m.state===n5)return pv(s);m.state===qU?(m.state=mv,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete n[f]):+f<e&&(m.state=mv,m.timer.stop(),m.on.call("cancel",t,t.__data__,m.index,m.group),delete n[f])}if(pv(function(){r.state===n5&&(r.state=qU,r.timer.restart(l,r.delay,r.time),l(h))}),r.state=i5,r.on.call("start",t,t.__data__,r.index,r.group),r.state===i5){for(r.state=n5,i=new Array(p=r.tween.length),f=0,d=-1;f<p;++f)(m=r.tween[f].value.call(t,t.__data__,r.index,r.group))&&(i[++d]=m);i.length=d+1}}o(s,"start");function l(h){for(var f=h<r.duration?r.ease.call(null,h/r.duration):(r.timer.restart(u),r.state=a5,1),d=-1,p=i.length;++d<p;)i[d].call(t,f);r.state===a5&&(r.on.call("end",t,t.__data__,r.index,r.group),u())}o(l,"tick");function u(){r.state=mv,r.timer.stop(),delete n[e];for(var h in n)return;delete t.__transition}o(u,"stop")}var vwe,xwe,YU,WU,i5,n5,qU,a5,mv,Es=N(()=>{"use strict";TA();r5();vwe=wA("start","end","cancel","interrupt"),xwe=[],YU=0,WU=1,i5=2,n5=3,qU=4,a5=5,mv=6;o(pu,"default");o(gv,"init");o(ha,"set");o(Bi,"get");o(bwe,"create")});function yv(t,e){var r=t.__transition,n,i,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>i5&&n.state<a5,n.state=mv,n.timer.stop(),n.on.call(i?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete r[s]}a&&delete t.__transition}}var XU=N(()=>{"use strict";Es();o(yv,"default")});function V8(t){return this.each(function(){yv(this,t)})}var jU=N(()=>{"use strict";XU();o(V8,"default")});function wwe(t,e){var r,n;return function(){var i=ha(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,l=n.length;s<l;++s)if(n[s].name===e){n=n.slice(),n.splice(s,1);break}}i.tween=n}}function Twe(t,e,r){var n,i;if(typeof r!="function")throw new Error;return function(){var a=ha(this,t),s=a.tween;if(s!==n){i=(n=s).slice();for(var l={name:e,value:r},u=0,h=i.length;u<h;++u)if(i[u].name===e){i[u]=l;break}u===h&&i.push(l)}a.tween=i}}function U8(t,e){var r=this._id;if(t+="",arguments.length<2){for(var n=Bi(this.node(),r).tween,i=0,a=n.length,s;i<a;++i)if((s=n[i]).name===t)return s.value;return null}return this.each((e==null?wwe:Twe)(r,t,e))}function D0(t,e,r){var n=t._id;return t.each(function(){var i=ha(this,n);(i.value||(i.value={}))[e]=r.apply(this,arguments)}),function(i){return Bi(i,n).value[e]}}var vv=N(()=>{"use strict";Es();o(wwe,"tweenRemove");o(Twe,"tweenFunction");o(U8,"default");o(D0,"tweenValue")});function xv(t,e){var r;return(typeof e=="number"?Ki:e instanceof pl?ud:(r=pl(e))?(e=r,ud):C0)(t,e)}var H8=N(()=>{"use strict";E0();A0();o(xv,"default")});function kwe(t){return function(){this.removeAttribute(t)}}function Ewe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Swe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function Cwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function Awe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function _we(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function W8(t,e){var r=rc(t),n=r==="transform"?F8:xv;return this.attrTween(t,typeof e=="function"?(r.local?_we:Awe)(r,n,D0(this,"attr."+t,e)):e==null?(r.local?Ewe:kwe)(r):(r.local?Cwe:Swe)(r,n,e))}var KU=N(()=>{"use strict";A0();fl();vv();H8();o(kwe,"attrRemove");o(Ewe,"attrRemoveNS");o(Swe,"attrConstant");o(Cwe,"attrConstantNS");o(Awe,"attrFunction");o(_we,"attrFunctionNS");o(W8,"default")});function Dwe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function Lwe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function Rwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Lwe(t,a)),r}return o(i,"tween"),i._value=e,i}function Nwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Dwe(t,a)),r}return o(i,"tween"),i._value=e,i}function q8(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=rc(t);return this.tween(r,(n.local?Rwe:Nwe)(n,e))}var QU=N(()=>{"use strict";fl();o(Dwe,"attrInterpolate");o(Lwe,"attrInterpolateNS");o(Rwe,"attrTweenNS");o(Nwe,"attrTween");o(q8,"default")});function Mwe(t,e){return function(){gv(this,t).delay=+e.apply(this,arguments)}}function Iwe(t,e){return e=+e,function(){gv(this,t).delay=e}}function Y8(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Mwe:Iwe)(e,t)):Bi(this.node(),e).delay}var ZU=N(()=>{"use strict";Es();o(Mwe,"delayFunction");o(Iwe,"delayConstant");o(Y8,"default")});function Owe(t,e){return function(){ha(this,t).duration=+e.apply(this,arguments)}}function Pwe(t,e){return e=+e,function(){ha(this,t).duration=e}}function X8(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Owe:Pwe)(e,t)):Bi(this.node(),e).duration}var JU=N(()=>{"use strict";Es();o(Owe,"durationFunction");o(Pwe,"durationConstant");o(X8,"default")});function Bwe(t,e){if(typeof e!="function")throw new Error;return function(){ha(this,t).ease=e}}function j8(t){var e=this._id;return arguments.length?this.each(Bwe(e,t)):Bi(this.node(),e).ease}var eH=N(()=>{"use strict";Es();o(Bwe,"easeConstant");o(j8,"default")});function Fwe(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;ha(this,t).ease=r}}function K8(t){if(typeof t!="function")throw new Error;return this.each(Fwe(this._id,t))}var tH=N(()=>{"use strict";Es();o(Fwe,"easeVarying");o(K8,"default")});function Q8(t){typeof t!="function"&&(t=x0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=[],u,h=0;h<s;++h)(u=a[h])&&t.call(u,u.__data__,h,a)&&l.push(u);return new es(n,this._parents,this._name,this._id)}var rH=N(()=>{"use strict";fl();fd();o(Q8,"default")});function Z8(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),l=0;l<a;++l)for(var u=e[l],h=r[l],f=u.length,d=s[l]=new Array(f),p,m=0;m<f;++m)(p=u[m]||h[m])&&(d[m]=p);for(;l<n;++l)s[l]=e[l];return new es(s,this._parents,this._name,this._id)}var nH=N(()=>{"use strict";fd();o(Z8,"default")});function $we(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function zwe(t,e,r){var n,i,a=$we(e)?gv:ha;return function(){var s=a(this,t),l=s.on;l!==n&&(i=(n=l).copy()).on(e,r),s.on=i}}function J8(t,e){var r=this._id;return arguments.length<2?Bi(this.node(),r).on.on(t):this.each(zwe(r,t,e))}var iH=N(()=>{"use strict";Es();o($we,"start");o(zwe,"onFunction");o(J8,"default")});function Gwe(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function e_(){return this.on("end.remove",Gwe(this._id))}var aH=N(()=>{"use strict";o(Gwe,"removeFunction");o(e_,"default")});function t_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=xh(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s<i;++s)for(var l=n[s],u=l.length,h=a[s]=new Array(u),f,d,p=0;p<u;++p)(f=l[p])&&(d=t.call(f,f.__data__,p,l))&&("__data__"in f&&(d.__data__=f.__data__),h[p]=d,pu(h[p],e,r,p,h,Bi(f,r)));return new es(a,this._parents,e,r)}var sH=N(()=>{"use strict";fl();fd();Es();o(t_,"default")});function r_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=v0(t));for(var n=this._groups,i=n.length,a=[],s=[],l=0;l<i;++l)for(var u=n[l],h=u.length,f,d=0;d<h;++d)if(f=u[d]){for(var p=t.call(f,f.__data__,d,u),m,g=Bi(f,r),y=0,v=p.length;y<v;++y)(m=p[y])&&pu(m,e,r,y,p,g);a.push(p),s.push(f)}return new es(a,s,e,r)}var oH=N(()=>{"use strict";fl();fd();Es();o(r_,"default")});function n_(){return new Vwe(this._groups,this._parents)}var Vwe,lH=N(()=>{"use strict";fl();Vwe=hu.prototype.constructor;o(n_,"default")});function Uwe(t,e){var r,n,i;return function(){var a=bh(this,t),s=(this.style.removeProperty(t),bh(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function cH(t){return function(){this.style.removeProperty(t)}}function Hwe(t,e,r){var n,i=r+"",a;return function(){var s=bh(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function Wwe(t,e,r){var n,i,a;return function(){var s=bh(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),bh(this,t))),s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l))}}function qwe(t,e){var r,n,i,a="style."+e,s="end."+a,l;return function(){var u=ha(this,t),h=u.on,f=u.value[a]==null?l||(l=cH(e)):void 0;(h!==r||i!==f)&&(n=(r=h).copy()).on(s,i=f),u.on=n}}function i_(t,e,r){var n=(t+="")=="transform"?B8:xv;return e==null?this.styleTween(t,Uwe(t,n)).on("end.style."+t,cH(t)):typeof e=="function"?this.styleTween(t,Wwe(t,n,D0(this,"style."+t,e))).each(qwe(this._id,t)):this.styleTween(t,Hwe(t,n,e),r).on("end.style."+t,null)}var uH=N(()=>{"use strict";A0();fl();Es();vv();H8();o(Uwe,"styleNull");o(cH,"styleRemove");o(Hwe,"styleConstant");o(Wwe,"styleFunction");o(qwe,"styleMaybeRemove");o(i_,"default")});function Ywe(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function Xwe(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&Ywe(t,s,r)),n}return o(a,"tween"),a._value=e,a}function a_(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,Xwe(t,e,r??""))}var hH=N(()=>{"use strict";o(Ywe,"styleInterpolate");o(Xwe,"styleTween");o(a_,"default")});function jwe(t){return function(){this.textContent=t}}function Kwe(t){return function(){var e=t(this);this.textContent=e??""}}function s_(t){return this.tween("text",typeof t=="function"?Kwe(D0(this,"text",t)):jwe(t==null?"":t+""))}var fH=N(()=>{"use strict";vv();o(jwe,"textConstant");o(Kwe,"textFunction");o(s_,"default")});function Qwe(t){return function(e){this.textContent=t.call(this,e)}}function Zwe(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&Qwe(i)),e}return o(n,"tween"),n._value=t,n}function o_(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,Zwe(t))}var dH=N(()=>{"use strict";o(Qwe,"textInterpolate");o(Zwe,"textTween");o(o_,"default")});function l_(){for(var t=this._name,e=this._id,r=s5(),n=this._groups,i=n.length,a=0;a<i;++a)for(var s=n[a],l=s.length,u,h=0;h<l;++h)if(u=s[h]){var f=Bi(u,e);pu(u,t,r,h,s,{time:f.time+f.delay+f.duration,delay:0,duration:f.duration,ease:f.ease})}return new es(n,this._parents,t,r)}var pH=N(()=>{"use strict";fd();Es();o(l_,"default")});function c_(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--i===0&&a()},"value")};r.each(function(){var h=ha(this,n),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),i===0&&a()})}var mH=N(()=>{"use strict";Es();o(c_,"default")});function es(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function gH(t){return hu().transition(t)}function s5(){return++Jwe}var Jwe,mu,fd=N(()=>{"use strict";fl();KU();QU();ZU();JU();eH();tH();rH();nH();iH();aH();sH();oH();lH();uH();hH();fH();dH();pH();vv();mH();Jwe=0;o(es,"Transition");o(gH,"transition");o(s5,"newId");mu=hu.prototype;es.prototype=gH.prototype={constructor:es,select:t_,selectAll:r_,selectChild:mu.selectChild,selectChildren:mu.selectChildren,filter:Q8,merge:Z8,selection:n_,transition:l_,call:mu.call,nodes:mu.nodes,node:mu.node,size:mu.size,empty:mu.empty,each:mu.each,on:J8,attr:W8,attrTween:q8,style:i_,styleTween:a_,text:s_,textTween:o_,remove:e_,tween:U8,delay:Y8,duration:X8,ease:j8,easeVarying:K8,end:c_,[Symbol.iterator]:mu[Symbol.iterator]}});function o5(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var yH=N(()=>{"use strict";o(o5,"cubicInOut")});var u_=N(()=>{"use strict";yH()});function tTe(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function h_(t){var e,r;t instanceof es?(e=t._id,t=t._name):(e=s5(),(r=eTe).time=dv(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a<i;++a)for(var s=n[a],l=s.length,u,h=0;h<l;++h)(u=s[h])&&pu(u,t,e,h,s,r||tTe(u,e));return new es(n,this._parents,t,e)}var eTe,vH=N(()=>{"use strict";fd();Es();u_();r5();eTe={time:null,delay:0,duration:250,ease:o5};o(tTe,"inherit");o(h_,"default")});var xH=N(()=>{"use strict";fl();jU();vH();hu.prototype.interrupt=V8;hu.prototype.transition=h_});var l5=N(()=>{"use strict";xH()});var bH=N(()=>{"use strict"});var wH=N(()=>{"use strict"});var TH=N(()=>{"use strict"});function kH(t){return[+t[0],+t[1]]}function rTe(t){return[kH(t[0]),kH(t[1])]}function f_(t){return{type:t}}var Z0t,J0t,emt,tmt,rmt,nmt,EH=N(()=>{"use strict";l5();bH();wH();TH();({abs:Z0t,max:J0t,min:emt}=Math);o(kH,"number1");o(rTe,"number2");tmt={name:"x",handles:["w","e"].map(f_),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},rmt={name:"y",handles:["n","s"].map(f_),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},nmt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(f_),input:o(function(t){return t==null?null:rTe(t)},"input"),output:o(function(t){return t},"output")};o(f_,"type")});var SH=N(()=>{"use strict";EH()});function CH(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=arguments[e]+t[e]}function iTe(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return CH;let r=10**e;return function(n){this._+=n[0];for(let i=1,a=n.length;i<a;++i)this._+=Math.round(arguments[i]*r)/r+n[i]}}function AH(){return new pd}var d_,p_,dd,nTe,pd,_H=N(()=>{"use strict";d_=Math.PI,p_=2*d_,dd=1e-6,nTe=p_-dd;o(CH,"append");o(iTe,"appendRound");pd=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?CH:iTe(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,i){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(e,r,n,i,a,s){this._append`C${+e},${+r},${+n},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,n,i,a){if(e=+e,r=+r,n=+n,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=n-e,h=i-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>dd)if(!(Math.abs(d*u-h*f)>dd)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=n-s,g=i-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),w=a*Math.tan((d_-Math.acos((y+p-v)/(2*x*b)))/2),C=w/b,T=w/x;Math.abs(C-1)>dd&&this._append`L${e+C*f},${r+C*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+T*u},${this._y1=r+T*h}`}}arc(e,r,n,i,a,s){if(e=+e,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),h=e+l,f=r+u,d=1^s,p=s?i-a:a-i;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>dd||Math.abs(this._y1-f)>dd)&&this._append`L${h},${f}`,n&&(p<0&&(p=p%p_+p_),p>nTe?this._append`A${n},${n},0,1,${d},${e-l},${r-u}A${n},${n},0,1,${d},${this._x1=h},${this._y1=f}`:p>dd&&this._append`A${n},${n},0,${+(p>=d_)},${d},${this._x1=e+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(e,r,n,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}};o(AH,"path");AH.prototype=pd.prototype});var m_=N(()=>{"use strict";_H()});var DH=N(()=>{"use strict"});var LH=N(()=>{"use strict"});var RH=N(()=>{"use strict"});var NH=N(()=>{"use strict"});var MH=N(()=>{"use strict"});var IH=N(()=>{"use strict"});var OH=N(()=>{"use strict"});function g_(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function md(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}var bv=N(()=>{"use strict";o(g_,"default");o(md,"formatDecimalParts")});function ml(t){return t=md(Math.abs(t)),t?t[1]:NaN}var wv=N(()=>{"use strict";bv();o(ml,"default")});function y_(t,e){return function(r,n){for(var i=r.length,a=[],s=0,l=t[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var PH=N(()=>{"use strict";o(y_,"default")});function v_(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var BH=N(()=>{"use strict";o(v_,"default")});function Eh(t){if(!(e=aTe.exec(t)))throw new Error("invalid format: "+t);var e;return new c5({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 c5(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var aTe,x_=N(()=>{"use strict";aTe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Eh,"formatSpecifier");Eh.prototype=c5.prototype;o(c5,"FormatSpecifier");c5.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function b_(t){e:for(var e=t.length,r=1,n=-1,i;r<e;++r)switch(t[r]){case".":n=i=r;break;case"0":n===0&&(n=r),i=r;break;default:if(!+t[r])break e;n>0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var FH=N(()=>{"use strict";o(b_,"default")});function T_(t,e){var r=md(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(w_=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+md(t,Math.max(0,e+a-1))[0]}var w_,k_=N(()=>{"use strict";bv();o(T_,"default")});function u5(t,e){var r=md(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}var $H=N(()=>{"use strict";bv();o(u5,"default")});var E_,zH=N(()=>{"use strict";bv();k_();$H();E_={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:g_,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>u5(t*100,e),"p"),r:u5,s:T_,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function h5(t){return t}var GH=N(()=>{"use strict";o(h5,"default")});function S_(t){var e=t.grouping===void 0||t.thousands===void 0?h5:y_(VH.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?h5:v_(VH.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=Eh(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,w=d.precision,C=d.trim,T=d.type;T==="n"?(b=!0,T="g"):E_[T]||(w===void 0&&(w=12),C=!0,T="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var E=y==="$"?r:y==="#"&&/[boxX]/.test(T)?"0"+T.toLowerCase():"",A=y==="$"?n:/[%p]/.test(T)?s:"",S=E_[T],_=/[defgprs%]/.test(T);w=w===void 0?6:/[gprs]/.test(T)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function I(D){var k=E,L=A,R,O,M;if(T==="c")L=S(D)+L,D="";else{D=+D;var B=D<0||1/D<0;if(D=isNaN(D)?u:S(Math.abs(D),w),C&&(D=b_(D)),B&&+D==0&&g!=="+"&&(B=!1),k=(B?g==="("?g:l:g==="-"||g==="("?"":g)+k,L=(T==="s"?UH[8+w_/3]:"")+L+(B&&g==="("?")":""),_){for(R=-1,O=D.length;++R<O;)if(M=D.charCodeAt(R),48>M||M>57){L=(M===46?i+D.slice(R+1):D.slice(R))+L,D=D.slice(0,R);break}}}b&&!v&&(D=e(D,1/0));var F=k.length+D.length+L.length,P=F<x?new Array(x-F+1).join(p):"";switch(b&&v&&(D=e(P+D,P.length?x-L.length:1/0),P=""),m){case"<":D=k+D+L+P;break;case"=":D=k+P+D+L;break;case"^":D=P.slice(0,F=P.length>>1)+k+D+L+P.slice(F);break;default:D=P+k+D+L;break}return a(D)}return o(I,"format"),I.toString=function(){return d+""},I}o(h,"newFormat");function f(d,p){var m=h((d=Eh(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(ml(p)/3)))*3,y=Math.pow(10,-g),v=UH[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var VH,UH,HH=N(()=>{"use strict";wv();PH();BH();x_();FH();zH();k_();GH();VH=Array.prototype.map,UH=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(S_,"default")});function C_(t){return f5=S_(t),d5=f5.format,p5=f5.formatPrefix,f5}var f5,d5,p5,WH=N(()=>{"use strict";HH();C_({thousands:",",grouping:[3],currency:["$",""]});o(C_,"defaultLocale")});function m5(t){return Math.max(0,-ml(Math.abs(t)))}var qH=N(()=>{"use strict";wv();o(m5,"default")});function g5(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(ml(e)/3)))*3-ml(Math.abs(t)))}var YH=N(()=>{"use strict";wv();o(g5,"default")});function y5(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,ml(e)-ml(t))+1}var XH=N(()=>{"use strict";wv();o(y5,"default")});var A_=N(()=>{"use strict";WH();x_();qH();YH();XH()});var jH=N(()=>{"use strict"});var KH=N(()=>{"use strict"});var QH=N(()=>{"use strict"});var ZH=N(()=>{"use strict"});function Sh(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var Tv=N(()=>{"use strict";o(Sh,"initRange")});function gu(){var t=new g0,e=[],r=[],n=__;function i(a){let s=t.get(a);if(s===void 0){if(n!==__)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(i,"scale"),i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new g0;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return gu(e,r).unknown(n)},Sh.apply(i,arguments),i}var __,D_=N(()=>{"use strict";vh();Tv();__=Symbol("implicit");o(gu,"ordinal")});function L0(){var t=gu().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=i<n,g=m?i:n,y=m?n:i;a=(y-g)/Math.max(1,p-u+h*2),l&&(a=Math.floor(a)),g+=(y-g-a*(p-u))*f,s=a*(1-u),l&&(g=Math.round(g),s=Math.round(s));var v=I3(p).map(function(x){return g+a*x});return r(m?v.reverse():v)}return o(d,"rescale"),t.domain=function(p){return arguments.length?(e(p),d()):e()},t.range=function(p){return arguments.length?([n,i]=p,n=+n,i=+i,d()):[n,i]},t.rangeRound=function(p){return[n,i]=p,n=+n,i=+i,l=!0,d()},t.bandwidth=function(){return s},t.step=function(){return a},t.round=function(p){return arguments.length?(l=!!p,d()):l},t.padding=function(p){return arguments.length?(u=Math.min(1,h=+p),d()):u},t.paddingInner=function(p){return arguments.length?(u=Math.min(1,p),d()):u},t.paddingOuter=function(p){return arguments.length?(h=+p,d()):h},t.align=function(p){return arguments.length?(f=Math.max(0,Math.min(1,p)),d()):f},t.copy=function(){return L0(e(),[n,i]).round(l).paddingInner(u).paddingOuter(h).align(f)},Sh.apply(d(),arguments)}var JH=N(()=>{"use strict";vh();Tv();D_();o(L0,"band")});function L_(t){return function(){return t}}var eW=N(()=>{"use strict";o(L_,"constants")});function R_(t){return+t}var tW=N(()=>{"use strict";o(R_,"number")});function R0(t){return t}function N_(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:L_(isNaN(e)?NaN:.5)}function sTe(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function oTe(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i<n?(n=N_(i,n),a=r(s,a)):(n=N_(n,i),a=r(a,s)),function(l){return a(n(l))}}function lTe(t,e,r){var n=Math.min(t.length,e.length)-1,i=new Array(n),a=new Array(n),s=-1;for(t[n]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<n;)i[s]=N_(t[s],t[s+1]),a[s]=r(e[s],e[s+1]);return function(l){var u=mA(t,l,1,n)-1;return a[u](i[u](l))}}function v5(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function cTe(){var t=rW,e=rW,r=kh,n,i,a,s=R0,l,u,h;function f(){var p=Math.min(t.length,e.length);return s!==R0&&(s=sTe(t[0],t[p-1])),l=p>2?lTe:oTe,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(n),e,r)))(n(s(p)))}return o(d,"scale"),d.invert=function(p){return s(i((h||(h=l(e,t.map(n),Ki)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,R_),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=X3,f()},d.clamp=function(p){return arguments.length?(s=p?!0:R0,f()):s!==R0},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return n=p,i=m,f()}}function kv(){return cTe()(R0,R0)}var rW,M_=N(()=>{"use strict";vh();A0();eW();tW();rW=[0,1];o(R0,"identity");o(N_,"normalize");o(sTe,"clamper");o(oTe,"bimap");o(lTe,"polymap");o(v5,"copy");o(cTe,"transformer");o(kv,"continuous")});function I_(t,e,r,n){var i=y0(t,e,r),a;switch(n=Eh(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=g5(i,s))&&(n.precision=a),p5(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=y5(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=m5(i))&&(n.precision=a-(n.type==="%")*2);break}}return d5(n)}var nW=N(()=>{"use strict";vh();A_();o(I_,"tickFormat")});function uTe(t){var e=t.domain;return t.ticks=function(r){var n=e();return R3(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return I_(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],l=n[a],u,h,f=10;for(l<s&&(h=s,s=l,l=h,h=i,i=a,a=h);f-- >0;){if(h=Zy(s,l,r),h===u)return n[i]=s,n[a]=l,e(n);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function gl(){var t=kv();return t.copy=function(){return v5(t,gl())},Sh.apply(t,arguments),uTe(t)}var iW=N(()=>{"use strict";vh();M_();Tv();nW();o(uTe,"linearish");o(gl,"linear")});function O_(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a<i&&(s=r,r=n,n=s,s=i,i=a,a=s),t[r]=e.floor(i),t[n]=e.ceil(a),t}var aW=N(()=>{"use strict";o(O_,"nice")});function xn(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(i,"interval"),i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{let s=i(a),l=i.ceil(a);return a-s<l-a?s:l},i.offset=(a,s)=>(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{let u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a<s)||!(l>0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(h<a&&a<s);return u},i.filter=a=>xn(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(i.count=(a,s)=>(P_.setTime(+a),B_.setTime(+s),t(P_),t(B_),Math.floor(r(P_,B_))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}var P_,B_,yu=N(()=>{"use strict";P_=new Date,B_=new Date;o(xn,"timeInterval")});var ac,sW,F_=N(()=>{"use strict";yu();ac=xn(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);ac.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?xn(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):ac);sW=ac.range});var Ks,oW,$_=N(()=>{"use strict";yu();Ks=xn(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),oW=Ks.range});var vu,hTe,x5,fTe,z_=N(()=>{"use strict";yu();vu=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),hTe=vu.range,x5=xn(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),fTe=x5.range});var xu,dTe,b5,pTe,G_=N(()=>{"use strict";yu();xu=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),dTe=xu.range,b5=xn(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),pTe=b5.range});var _o,mTe,Sv,gTe,w5,yTe,V_=N(()=>{"use strict";yu();_o=xn(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),mTe=_o.range,Sv=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),gTe=Sv.range,w5=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),yTe=w5.range});function vd(t){return xn(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function xd(t){return xn(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var yl,Ch,T5,k5,oc,E5,S5,cW,vTe,xTe,bTe,wTe,TTe,kTe,bd,N0,uW,hW,Ah,fW,dW,pW,ETe,STe,CTe,ATe,_Te,DTe,U_=N(()=>{"use strict";yu();o(vd,"timeWeekday");yl=vd(0),Ch=vd(1),T5=vd(2),k5=vd(3),oc=vd(4),E5=vd(5),S5=vd(6),cW=yl.range,vTe=Ch.range,xTe=T5.range,bTe=k5.range,wTe=oc.range,TTe=E5.range,kTe=S5.range;o(xd,"utcWeekday");bd=xd(0),N0=xd(1),uW=xd(2),hW=xd(3),Ah=xd(4),fW=xd(5),dW=xd(6),pW=bd.range,ETe=N0.range,STe=uW.range,CTe=hW.range,ATe=Ah.range,_Te=fW.range,DTe=dW.range});var bu,LTe,C5,RTe,H_=N(()=>{"use strict";yu();bu=xn(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),LTe=bu.range,C5=xn(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),RTe=C5.range});var Qs,NTe,vl,MTe,W_=N(()=>{"use strict";yu();Qs=xn(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());Qs.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});NTe=Qs.range,vl=xn(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());vl.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});MTe=vl.range});function gW(t,e,r,n,i,a){let s=[[Ks,1,1e3],[Ks,5,5*1e3],[Ks,15,15*1e3],[Ks,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[i,1,36e5],[i,3,3*36e5],[i,6,6*36e5],[i,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=f<h;p&&([h,f]=[f,h]);let m=d&&typeof d.range=="function"?d:u(h,f,d),g=m?m.range(h,+f+1):[];return p?g.reverse():g}o(l,"ticks");function u(h,f,d){let p=Math.abs(f-h)/d,m=od(([,,v])=>v).right(s,p);if(m===s.length)return t.every(y0(h/31536e6,f/31536e6,d));if(m===0)return ac.every(Math.max(y0(h,f,d),1));let[g,y]=s[p/s[m-1][2]<s[m][2]/p?m-1:m];return g.every(y)}return o(u,"tickInterval"),[l,u]}var OTe,PTe,q_,Y_,yW=N(()=>{"use strict";vh();F_();$_();z_();G_();V_();U_();H_();W_();o(gW,"ticker");[OTe,PTe]=gW(vl,C5,bd,w5,b5,x5),[q_,Y_]=gW(Qs,bu,yl,_o,xu,vu)});var A5=N(()=>{"use strict";F_();$_();z_();G_();V_();U_();H_();W_();yW()});function X_(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 j_(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 Cv(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function K_(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=Av(i),f=_v(i),d=Av(a),p=_v(a),m=Av(s),g=_v(s),y=Av(l),v=_v(l),x=Av(u),b=_v(u),w={a:B,A:F,b:P,B:z,c:null,d:kW,e:kW,f:ake,g:mke,G:yke,H:rke,I:nke,j:ike,L:_W,m:ske,M:oke,p:$,q:H,Q:CW,s:AW,S:lke,u:cke,U:uke,V:hke,w:fke,W:dke,x:null,X:null,y:pke,Y:gke,Z:vke,"%":SW},C={a:Q,A:j,b:ie,B:ne,c:null,d:EW,e:EW,f:Tke,g:Nke,G:Ike,H:xke,I:bke,j:wke,L:LW,m:kke,M:Eke,p:le,q:he,Q:CW,s:AW,S:Ske,u:Cke,U:Ake,V:_ke,w:Dke,W:Lke,x:null,X:null,y:Rke,Y:Mke,Z:Oke,"%":SW},T={a:I,A:D,b:k,B:L,c:R,d:wW,e:wW,f:ZTe,g:bW,G:xW,H:TW,I:TW,j:XTe,L:QTe,m:YTe,M:jTe,p:_,q:qTe,Q:eke,s:tke,S:KTe,u:GTe,U:VTe,V:UTe,w:zTe,W:HTe,x:O,X:M,y:bW,Y:xW,Z:WTe,"%":JTe};w.x=E(r,w),w.X=E(n,w),w.c=E(e,w),C.x=E(r,C),C.X=E(n,C),C.c=E(e,C);function E(K,X){return function(te){var J=[],se=-1,ue=0,Z=K.length,Se,ce,ae;for(te instanceof Date||(te=new Date(+te));++se<Z;)K.charCodeAt(se)===37&&(J.push(K.slice(ue,se)),(ce=vW[Se=K.charAt(++se)])!=null?Se=K.charAt(++se):ce=Se==="e"?" ":"0",(ae=X[Se])&&(Se=ae(te,ce)),J.push(Se),ue=se+1);return J.push(K.slice(ue,se)),J.join("")}}o(E,"newFormat");function A(K,X){return function(te){var J=Cv(1900,void 0,1),se=S(J,K,te+="",0),ue,Z;if(se!=te.length)return null;if("Q"in J)return new Date(J.Q);if("s"in J)return new Date(J.s*1e3+("L"in J?J.L:0));if(X&&!("Z"in J)&&(J.Z=0),"p"in J&&(J.H=J.H%12+J.p*12),J.m===void 0&&(J.m="q"in J?J.q:0),"V"in J){if(J.V<1||J.V>53)return null;"w"in J||(J.w=1),"Z"in J?(ue=j_(Cv(J.y,0,1)),Z=ue.getUTCDay(),ue=Z>4||Z===0?N0.ceil(ue):N0(ue),ue=Sv.offset(ue,(J.V-1)*7),J.y=ue.getUTCFullYear(),J.m=ue.getUTCMonth(),J.d=ue.getUTCDate()+(J.w+6)%7):(ue=X_(Cv(J.y,0,1)),Z=ue.getDay(),ue=Z>4||Z===0?Ch.ceil(ue):Ch(ue),ue=_o.offset(ue,(J.V-1)*7),J.y=ue.getFullYear(),J.m=ue.getMonth(),J.d=ue.getDate()+(J.w+6)%7)}else("W"in J||"U"in J)&&("w"in J||(J.w="u"in J?J.u%7:"W"in J?1:0),Z="Z"in J?j_(Cv(J.y,0,1)).getUTCDay():X_(Cv(J.y,0,1)).getDay(),J.m=0,J.d="W"in J?(J.w+6)%7+J.W*7-(Z+5)%7:J.w+J.U*7-(Z+6)%7);return"Z"in J?(J.H+=J.Z/100|0,J.M+=J.Z%100,j_(J)):X_(J)}}o(A,"newParse");function S(K,X,te,J){for(var se=0,ue=X.length,Z=te.length,Se,ce;se<ue;){if(J>=Z)return-1;if(Se=X.charCodeAt(se++),Se===37){if(Se=X.charAt(se++),ce=T[Se in vW?X.charAt(se++):Se],!ce||(J=ce(K,te,J))<0)return-1}else if(Se!=te.charCodeAt(J++))return-1}return J}o(S,"parseSpecifier");function _(K,X,te){var J=h.exec(X.slice(te));return J?(K.p=f.get(J[0].toLowerCase()),te+J[0].length):-1}o(_,"parsePeriod");function I(K,X,te){var J=m.exec(X.slice(te));return J?(K.w=g.get(J[0].toLowerCase()),te+J[0].length):-1}o(I,"parseShortWeekday");function D(K,X,te){var J=d.exec(X.slice(te));return J?(K.w=p.get(J[0].toLowerCase()),te+J[0].length):-1}o(D,"parseWeekday");function k(K,X,te){var J=x.exec(X.slice(te));return J?(K.m=b.get(J[0].toLowerCase()),te+J[0].length):-1}o(k,"parseShortMonth");function L(K,X,te){var J=y.exec(X.slice(te));return J?(K.m=v.get(J[0].toLowerCase()),te+J[0].length):-1}o(L,"parseMonth");function R(K,X,te){return S(K,e,X,te)}o(R,"parseLocaleDateTime");function O(K,X,te){return S(K,r,X,te)}o(O,"parseLocaleDate");function M(K,X,te){return S(K,n,X,te)}o(M,"parseLocaleTime");function B(K){return s[K.getDay()]}o(B,"formatShortWeekday");function F(K){return a[K.getDay()]}o(F,"formatWeekday");function P(K){return u[K.getMonth()]}o(P,"formatShortMonth");function z(K){return l[K.getMonth()]}o(z,"formatMonth");function $(K){return i[+(K.getHours()>=12)]}o($,"formatPeriod");function H(K){return 1+~~(K.getMonth()/3)}o(H,"formatQuarter");function Q(K){return s[K.getUTCDay()]}o(Q,"formatUTCShortWeekday");function j(K){return a[K.getUTCDay()]}o(j,"formatUTCWeekday");function ie(K){return u[K.getUTCMonth()]}o(ie,"formatUTCShortMonth");function ne(K){return l[K.getUTCMonth()]}o(ne,"formatUTCMonth");function le(K){return i[+(K.getUTCHours()>=12)]}o(le,"formatUTCPeriod");function he(K){return 1+~~(K.getUTCMonth()/3)}return o(he,"formatUTCQuarter"),{format:o(function(K){var X=E(K+="",w);return X.toString=function(){return K},X},"format"),parse:o(function(K){var X=A(K+="",!1);return X.toString=function(){return K},X},"parse"),utcFormat:o(function(K){var X=E(K+="",C);return X.toString=function(){return K},X},"utcFormat"),utcParse:o(function(K){var X=A(K+="",!0);return X.toString=function(){return K},X},"utcParse")}}function Wr(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a<r?new Array(r-a+1).join(e)+i:i)}function $Te(t){return t.replace(FTe,"\\$&")}function Av(t){return new RegExp("^(?:"+t.map($Te).join("|")+")","i")}function _v(t){return new Map(t.map((e,r)=>[e.toLowerCase(),r]))}function zTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function GTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function VTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function UTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function HTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function xW(t,e,r){var n=Qi.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function bW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function WTe(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function qTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function YTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function wW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function XTe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function TW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function jTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function KTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function QTe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function ZTe(t,e,r){var n=Qi.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function JTe(t,e,r){var n=BTe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function eke(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function tke(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function kW(t,e){return Wr(t.getDate(),e,2)}function rke(t,e){return Wr(t.getHours(),e,2)}function nke(t,e){return Wr(t.getHours()%12||12,e,2)}function ike(t,e){return Wr(1+_o.count(Qs(t),t),e,3)}function _W(t,e){return Wr(t.getMilliseconds(),e,3)}function ake(t,e){return _W(t,e)+"000"}function ske(t,e){return Wr(t.getMonth()+1,e,2)}function oke(t,e){return Wr(t.getMinutes(),e,2)}function lke(t,e){return Wr(t.getSeconds(),e,2)}function cke(t){var e=t.getDay();return e===0?7:e}function uke(t,e){return Wr(yl.count(Qs(t)-1,t),e,2)}function DW(t){var e=t.getDay();return e>=4||e===0?oc(t):oc.ceil(t)}function hke(t,e){return t=DW(t),Wr(oc.count(Qs(t),t)+(Qs(t).getDay()===4),e,2)}function fke(t){return t.getDay()}function dke(t,e){return Wr(Ch.count(Qs(t)-1,t),e,2)}function pke(t,e){return Wr(t.getFullYear()%100,e,2)}function mke(t,e){return t=DW(t),Wr(t.getFullYear()%100,e,2)}function gke(t,e){return Wr(t.getFullYear()%1e4,e,4)}function yke(t,e){var r=t.getDay();return t=r>=4||r===0?oc(t):oc.ceil(t),Wr(t.getFullYear()%1e4,e,4)}function vke(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Wr(e/60|0,"0",2)+Wr(e%60,"0",2)}function EW(t,e){return Wr(t.getUTCDate(),e,2)}function xke(t,e){return Wr(t.getUTCHours(),e,2)}function bke(t,e){return Wr(t.getUTCHours()%12||12,e,2)}function wke(t,e){return Wr(1+Sv.count(vl(t),t),e,3)}function LW(t,e){return Wr(t.getUTCMilliseconds(),e,3)}function Tke(t,e){return LW(t,e)+"000"}function kke(t,e){return Wr(t.getUTCMonth()+1,e,2)}function Eke(t,e){return Wr(t.getUTCMinutes(),e,2)}function Ske(t,e){return Wr(t.getUTCSeconds(),e,2)}function Cke(t){var e=t.getUTCDay();return e===0?7:e}function Ake(t,e){return Wr(bd.count(vl(t)-1,t),e,2)}function RW(t){var e=t.getUTCDay();return e>=4||e===0?Ah(t):Ah.ceil(t)}function _ke(t,e){return t=RW(t),Wr(Ah.count(vl(t),t)+(vl(t).getUTCDay()===4),e,2)}function Dke(t){return t.getUTCDay()}function Lke(t,e){return Wr(N0.count(vl(t)-1,t),e,2)}function Rke(t,e){return Wr(t.getUTCFullYear()%100,e,2)}function Nke(t,e){return t=RW(t),Wr(t.getUTCFullYear()%100,e,2)}function Mke(t,e){return Wr(t.getUTCFullYear()%1e4,e,4)}function Ike(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Ah(t):Ah.ceil(t),Wr(t.getUTCFullYear()%1e4,e,4)}function Oke(){return"+0000"}function SW(){return"%"}function CW(t){return+t}function AW(t){return Math.floor(+t/1e3)}var vW,Qi,BTe,FTe,NW=N(()=>{"use strict";A5();o(X_,"localDate");o(j_,"utcDate");o(Cv,"newDate");o(K_,"formatLocale");vW={"-":"",_:" ",0:"0"},Qi=/^\s*\d+/,BTe=/^%/,FTe=/[\\^$*+?|[\]().{}]/g;o(Wr,"pad");o($Te,"requote");o(Av,"formatRe");o(_v,"formatLookup");o(zTe,"parseWeekdayNumberSunday");o(GTe,"parseWeekdayNumberMonday");o(VTe,"parseWeekNumberSunday");o(UTe,"parseWeekNumberISO");o(HTe,"parseWeekNumberMonday");o(xW,"parseFullYear");o(bW,"parseYear");o(WTe,"parseZone");o(qTe,"parseQuarter");o(YTe,"parseMonthNumber");o(wW,"parseDayOfMonth");o(XTe,"parseDayOfYear");o(TW,"parseHour24");o(jTe,"parseMinutes");o(KTe,"parseSeconds");o(QTe,"parseMilliseconds");o(ZTe,"parseMicroseconds");o(JTe,"parseLiteralPercent");o(eke,"parseUnixTimestamp");o(tke,"parseUnixTimestampSeconds");o(kW,"formatDayOfMonth");o(rke,"formatHour24");o(nke,"formatHour12");o(ike,"formatDayOfYear");o(_W,"formatMilliseconds");o(ake,"formatMicroseconds");o(ske,"formatMonthNumber");o(oke,"formatMinutes");o(lke,"formatSeconds");o(cke,"formatWeekdayNumberMonday");o(uke,"formatWeekNumberSunday");o(DW,"dISO");o(hke,"formatWeekNumberISO");o(fke,"formatWeekdayNumberSunday");o(dke,"formatWeekNumberMonday");o(pke,"formatYear");o(mke,"formatYearISO");o(gke,"formatFullYear");o(yke,"formatFullYearISO");o(vke,"formatZone");o(EW,"formatUTCDayOfMonth");o(xke,"formatUTCHour24");o(bke,"formatUTCHour12");o(wke,"formatUTCDayOfYear");o(LW,"formatUTCMilliseconds");o(Tke,"formatUTCMicroseconds");o(kke,"formatUTCMonthNumber");o(Eke,"formatUTCMinutes");o(Ske,"formatUTCSeconds");o(Cke,"formatUTCWeekdayNumberMonday");o(Ake,"formatUTCWeekNumberSunday");o(RW,"UTCdISO");o(_ke,"formatUTCWeekNumberISO");o(Dke,"formatUTCWeekdayNumberSunday");o(Lke,"formatUTCWeekNumberMonday");o(Rke,"formatUTCYear");o(Nke,"formatUTCYearISO");o(Mke,"formatUTCFullYear");o(Ike,"formatUTCFullYearISO");o(Oke,"formatUTCZone");o(SW,"formatLiteralPercent");o(CW,"formatUnixTimestamp");o(AW,"formatUnixTimestampSeconds")});function Q_(t){return M0=K_(t),wd=M0.format,MW=M0.parse,IW=M0.utcFormat,OW=M0.utcParse,M0}var M0,wd,MW,IW,OW,PW=N(()=>{"use strict";NW();Q_({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"]});o(Q_,"defaultLocale")});var Z_=N(()=>{"use strict";PW()});function Pke(t){return new Date(t)}function Bke(t){return t instanceof Date?+t:+new Date(+t)}function BW(t,e,r,n,i,a,s,l,u,h){var f=kv(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),w=h("%B"),C=h("%Y");function T(E){return(u(E)<E?m:l(E)<E?g:s(E)<E?y:a(E)<E?v:n(E)<E?i(E)<E?x:b:r(E)<E?w:C)(E)}return o(T,"tickFormat"),f.invert=function(E){return new Date(d(E))},f.domain=function(E){return arguments.length?p(Array.from(E,Bke)):p().map(Pke)},f.ticks=function(E){var A=p();return t(A[0],A[A.length-1],E??10)},f.tickFormat=function(E,A){return A==null?T:h(A)},f.nice=function(E){var A=p();return(!E||typeof E.range!="function")&&(E=e(A[0],A[A.length-1],E??10)),E?p(O_(A,E)):f},f.copy=function(){return v5(f,BW(t,e,r,n,i,a,s,l,u,h))},f}function _5(){return Sh.apply(BW(q_,Y_,Qs,bu,yl,_o,xu,vu,Ks,wd).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}var FW=N(()=>{"use strict";A5();Z_();M_();Tv();aW();o(Pke,"date");o(Bke,"number");o(BW,"calendar");o(_5,"time")});var $W=N(()=>{"use strict";JH();iW();D_();FW()});function J_(t){for(var e=t.length/6|0,r=new Array(e),n=0;n<e;)r[n]="#"+t.slice(n*6,++n*6);return r}var zW=N(()=>{"use strict";o(J_,"default")});var e9,GW=N(()=>{"use strict";zW();e9=J_("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var VW=N(()=>{"use strict";GW()});function Bn(t){return o(function(){return t},"constant")}var D5=N(()=>{"use strict";o(Bn,"default")});function HW(t){return t>1?0:t<-1?I0:Math.acos(t)}function r9(t){return t>=1?Dv:t<=-1?-Dv:Math.asin(t)}var t9,fa,_h,UW,L5,xl,Td,Zi,I0,Dv,O0,R5=N(()=>{"use strict";t9=Math.abs,fa=Math.atan2,_h=Math.cos,UW=Math.max,L5=Math.min,xl=Math.sin,Td=Math.sqrt,Zi=1e-12,I0=Math.PI,Dv=I0/2,O0=2*I0;o(HW,"acos");o(r9,"asin")});function N5(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new pd(e)}var n9=N(()=>{"use strict";m_();o(N5,"withPath")});function Fke(t){return t.innerRadius}function $ke(t){return t.outerRadius}function zke(t){return t.startAngle}function Gke(t){return t.endAngle}function Vke(t){return t&&t.padAngle}function Uke(t,e,r,n,i,a,s,l){var u=r-t,h=n-e,f=s-i,d=l-a,p=d*u-f*h;if(!(p*p<Zi))return p=(f*(e-a)-d*(t-i))/p,[t+p*u,e+p*h]}function M5(t,e,r,n,i,a,s){var l=t-r,u=e-n,h=(s?a:-a)/Td(l*l+u*u),f=h*u,d=-h*l,p=t+f,m=e+d,g=r+f,y=n+d,v=(p+g)/2,x=(m+y)/2,b=g-p,w=y-m,C=b*b+w*w,T=i-a,E=p*y-g*m,A=(w<0?-1:1)*Td(UW(0,T*T*C-E*E)),S=(E*w-b*A)/C,_=(-E*b-w*A)/C,I=(E*w+b*A)/C,D=(-E*b+w*A)/C,k=S-v,L=_-x,R=I-v,O=D-x;return k*k+L*L>R*R+O*O&&(S=I,_=D),{cx:S,cy:_,x01:-f,y01:-d,x11:S*(i/T-1),y11:_*(i/T-1)}}function bl(){var t=Fke,e=$ke,r=Bn(0),n=null,i=zke,a=Gke,s=Vke,l=null,u=N5(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=i.apply(this,arguments)-Dv,y=a.apply(this,arguments)-Dv,v=t9(y-g),x=y>g;if(l||(l=f=u()),m<p&&(d=m,m=p,p=d),!(m>Zi))l.moveTo(0,0);else if(v>O0-Zi)l.moveTo(m*_h(g),m*xl(g)),l.arc(0,0,m,g,y,!x),p>Zi&&(l.moveTo(p*_h(y),p*xl(y)),l.arc(0,0,p,y,g,x));else{var b=g,w=y,C=g,T=y,E=v,A=v,S=s.apply(this,arguments)/2,_=S>Zi&&(n?+n.apply(this,arguments):Td(p*p+m*m)),I=L5(t9(m-p)/2,+r.apply(this,arguments)),D=I,k=I,L,R;if(_>Zi){var O=r9(_/p*xl(S)),M=r9(_/m*xl(S));(E-=O*2)>Zi?(O*=x?1:-1,C+=O,T-=O):(E=0,C=T=(g+y)/2),(A-=M*2)>Zi?(M*=x?1:-1,b+=M,w-=M):(A=0,b=w=(g+y)/2)}var B=m*_h(b),F=m*xl(b),P=p*_h(T),z=p*xl(T);if(I>Zi){var $=m*_h(w),H=m*xl(w),Q=p*_h(C),j=p*xl(C),ie;if(v<I0)if(ie=Uke(B,F,Q,j,$,H,P,z)){var ne=B-ie[0],le=F-ie[1],he=$-ie[0],K=H-ie[1],X=1/xl(HW((ne*he+le*K)/(Td(ne*ne+le*le)*Td(he*he+K*K)))/2),te=Td(ie[0]*ie[0]+ie[1]*ie[1]);D=L5(I,(p-te)/(X-1)),k=L5(I,(m-te)/(X+1))}else D=k=0}A>Zi?k>Zi?(L=M5(Q,j,B,F,m,k,x),R=M5($,H,P,z,m,k,x),l.moveTo(L.cx+L.x01,L.cy+L.y01),k<I?l.arc(L.cx,L.cy,k,fa(L.y01,L.x01),fa(R.y01,R.x01),!x):(l.arc(L.cx,L.cy,k,fa(L.y01,L.x01),fa(L.y11,L.x11),!x),l.arc(0,0,m,fa(L.cy+L.y11,L.cx+L.x11),fa(R.cy+R.y11,R.cx+R.x11),!x),l.arc(R.cx,R.cy,k,fa(R.y11,R.x11),fa(R.y01,R.x01),!x))):(l.moveTo(B,F),l.arc(0,0,m,b,w,!x)):l.moveTo(B,F),!(p>Zi)||!(E>Zi)?l.lineTo(P,z):D>Zi?(L=M5(P,z,$,H,p,-D,x),R=M5(B,F,Q,j,p,-D,x),l.lineTo(L.cx+L.x01,L.cy+L.y01),D<I?l.arc(L.cx,L.cy,D,fa(L.y01,L.x01),fa(R.y01,R.x01),!x):(l.arc(L.cx,L.cy,D,fa(L.y01,L.x01),fa(L.y11,L.x11),!x),l.arc(0,0,p,fa(L.cy+L.y11,L.cx+L.x11),fa(R.cy+R.y11,R.cx+R.x11),x),l.arc(R.cx,R.cy,D,fa(R.y11,R.x11),fa(R.y01,R.x01),!x))):l.arc(0,0,p,T,C,x)}if(l.closePath(),f)return l=null,f+""||null}return o(h,"arc"),h.centroid=function(){var f=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,d=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-I0/2;return[_h(d)*f,xl(d)*f]},h.innerRadius=function(f){return arguments.length?(t=typeof f=="function"?f:Bn(+f),h):t},h.outerRadius=function(f){return arguments.length?(e=typeof f=="function"?f:Bn(+f),h):e},h.cornerRadius=function(f){return arguments.length?(r=typeof f=="function"?f:Bn(+f),h):r},h.padRadius=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:Bn(+f),h):n},h.startAngle=function(f){return arguments.length?(i=typeof f=="function"?f:Bn(+f),h):i},h.endAngle=function(f){return arguments.length?(a=typeof f=="function"?f:Bn(+f),h):a},h.padAngle=function(f){return arguments.length?(s=typeof f=="function"?f:Bn(+f),h):s},h.context=function(f){return arguments.length?(l=f??null,h):l},h}var WW=N(()=>{"use strict";D5();R5();n9();o(Fke,"arcInnerRadius");o($ke,"arcOuterRadius");o(zke,"arcStartAngle");o(Gke,"arcEndAngle");o(Vke,"arcPadAngle");o(Uke,"intersect");o(M5,"cornerTangents");o(bl,"default")});function Lv(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var Nyt,i9=N(()=>{"use strict";Nyt=Array.prototype.slice;o(Lv,"default")});function qW(t){this._context=t}function wu(t){return new qW(t)}var a9=N(()=>{"use strict";o(qW,"Linear");qW.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(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);break}},"point")};o(wu,"default")});function YW(t){return t[0]}function XW(t){return t[1]}var jW=N(()=>{"use strict";o(YW,"x");o(XW,"y")});function wl(t,e){var r=Bn(!0),n=null,i=wu,a=null,s=N5(l);t=typeof t=="function"?t:t===void 0?YW:Bn(t),e=typeof e=="function"?e:e===void 0?XW:Bn(e);function l(u){var h,f=(u=Lv(u)).length,d,p=!1,m;for(n==null&&(a=i(m=s())),h=0;h<=f;++h)!(h<f&&r(d=u[h],h,u))===p&&((p=!p)?a.lineStart():a.lineEnd()),p&&a.point(+t(d,h,u),+e(d,h,u));if(m)return a=null,m+""||null}return o(l,"line"),l.x=function(u){return arguments.length?(t=typeof u=="function"?u:Bn(+u),l):t},l.y=function(u){return arguments.length?(e=typeof u=="function"?u:Bn(+u),l):e},l.defined=function(u){return arguments.length?(r=typeof u=="function"?u:Bn(!!u),l):r},l.curve=function(u){return arguments.length?(i=u,n!=null&&(a=i(n)),l):i},l.context=function(u){return arguments.length?(u==null?n=a=null:a=i(n=u),l):n},l}var KW=N(()=>{"use strict";i9();D5();a9();n9();jW();o(wl,"default")});function s9(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}var QW=N(()=>{"use strict";o(s9,"default")});function o9(t){return t}var ZW=N(()=>{"use strict";o(o9,"default")});function I5(){var t=o9,e=s9,r=null,n=Bn(0),i=Bn(O0),a=Bn(0);function s(l){var u,h=(l=Lv(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+n.apply(this,arguments),v=Math.min(O0,Math.max(-O0,i.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),w=b*(v<0?-1:1),C;for(u=0;u<h;++u)(C=g[m[u]=u]=+t(l[u],u,l))>0&&(p+=C);for(e!=null?m.sort(function(T,E){return e(g[T],g[E])}):r!=null&&m.sort(function(T,E){return r(l[T],l[E])}),u=0,d=p?(v-h*w)/p:0;u<h;++u,y=x)f=m[u],C=g[f],x=y+(C>0?C*d:0)+w,g[f]={data:l[f],index:u,value:C,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:Bn(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(n=typeof l=="function"?l:Bn(+l),s):n},s.endAngle=function(l){return arguments.length?(i=typeof l=="function"?l:Bn(+l),s):i},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:Bn(+l),s):a},s}var JW=N(()=>{"use strict";i9();D5();QW();ZW();R5();o(I5,"default")});function Rv(t){return new O5(t,!0)}function Nv(t){return new O5(t,!1)}var O5,eq=N(()=>{"use strict";O5=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(Rv,"bumpX");o(Nv,"bumpY")});function Zs(){}var Mv=N(()=>{"use strict";o(Zs,"default")});function P0(t,e,r){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+r)/6)}function Iv(t){this._context=t}function Do(t){return new Iv(t)}var Ov=N(()=>{"use strict";o(P0,"point");o(Iv,"Basis");Iv.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:P0(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(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:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Do,"default")});function tq(t){this._context=t}function P5(t){return new tq(t)}var rq=N(()=>{"use strict";Mv();Ov();o(tq,"BasisClosed");tq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(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},"lineStart"),lineEnd:o(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);break}}},"lineEnd"),point:o(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:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(P5,"default")});function nq(t){this._context=t}function B5(t){return new nq(t)}var iq=N(()=>{"use strict";Ov();o(nq,"BasisOpen");nq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(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 r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(B5,"default")});function aq(t,e){this._basis=new Iv(t),this._beta=e}var l9,sq=N(()=>{"use strict";Ov();o(aq,"Bundle");aq.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+u*a),this._beta*e[l]+(1-this._beta)*(i+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};l9=o(function t(e){function r(n){return e===1?new Iv(n):new aq(n,e)}return o(r,"bundle"),r.beta=function(n){return t(+n)},r},"custom")(.85)});function B0(t,e,r){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-r),t._x2,t._y2)}function F5(t,e){this._context=t,this._k=(1-e)/6}var Pv,Bv=N(()=>{"use strict";o(B0,"point");o(F5,"Cardinal");F5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:B0(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(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:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};Pv=o(function t(e){function r(n){return new F5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function $5(t,e){this._context=t,this._k=(1-e)/6}var c9,u9=N(()=>{"use strict";Mv();Bv();o($5,"CardinalClosed");$5.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(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},"lineStart"),lineEnd:o(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);break}}},"lineEnd"),point:o(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:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};c9=o(function t(e){function r(n){return new $5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function z5(t,e){this._context=t,this._k=(1-e)/6}var h9,f9=N(()=>{"use strict";Bv();o(z5,"CardinalOpen");z5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(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:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};h9=o(function t(e){function r(n){return new z5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function Fv(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Zi){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Zi){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function oq(t,e){this._context=t,this._alpha=e}var $v,G5=N(()=>{"use strict";R5();Bv();o(Fv,"point");o(oq,"CatmullRom");oq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(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},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,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:Fv(this,t,e);break}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},"point")};$v=o(function t(e){function r(n){return e?new oq(n,e):new F5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function lq(t,e){this._context=t,this._alpha=e}var d9,cq=N(()=>{"use strict";u9();Mv();G5();o(lq,"CatmullRomClosed");lq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(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},"lineStart"),lineEnd:o(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);break}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,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:Fv(this,t,e);break}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},"point")};d9=o(function t(e){function r(n){return e?new lq(n,e):new $5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function uq(t,e){this._context=t,this._alpha=e}var p9,hq=N(()=>{"use strict";f9();G5();o(uq,"CatmullRomOpen");uq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(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},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,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:Fv(this,t,e);break}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},"point")};p9=o(function t(e){function r(n){return e?new uq(n,e):new z5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function fq(t){this._context=t}function V5(t){return new fq(t)}var dq=N(()=>{"use strict";Mv();o(fq,"LinearClosed");fq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(V5,"default")});function pq(t){return t<0?-1:1}function mq(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),l=(a*i+s*n)/(n+i);return(pq(a)+pq(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function gq(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function m9(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,l=(a-n)/3;t._context.bezierCurveTo(n+l,i+l*e,a-l,s-l*r,a,s)}function U5(t){this._context=t}function yq(t){this._context=new vq(t)}function vq(t){this._context=t}function zv(t){return new U5(t)}function Gv(t){return new yq(t)}var xq=N(()=>{"use strict";o(pq,"sign");o(mq,"slope3");o(gq,"slope2");o(m9,"point");o(U5,"MonotoneX");U5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:m9(this,this._t0,gq(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(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,m9(this,gq(this,r=mq(this,t,e)),r);break;default:m9(this,this._t0,r=mq(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(yq,"MonotoneY");(yq.prototype=Object.create(U5.prototype)).point=function(t,e){U5.prototype.point.call(this,e,t)};o(vq,"ReflectContext");vq.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)},"bezierCurveTo")};o(zv,"monotoneX");o(Gv,"monotoneY")});function wq(t){this._context=t}function bq(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e<r-1;++e)i[e]=1,a[e]=4,s[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,a[r-1]=7,s[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)n=i[e]/a[e-1],a[e]-=n,s[e]-=n*s[e-1];for(i[r-1]=s[r-1]/a[r-1],e=r-2;e>=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e<r-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}function F0(t){return new wq(t)}var Tq=N(()=>{"use strict";o(wq,"Natural");wq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=bq(t),i=bq(e),a=0,s=1;s<r;++a,++s)this._context.bezierCurveTo(n[0][a],i[0][a],n[1][a],i[1][a],t[s],e[s]);(this._line||this._line!==0&&r===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};o(bq,"controlPoints");o(F0,"default")});function H5(t,e){this._context=t,this._t=e}function $0(t){return new H5(t,.5)}function Vv(t){return new H5(t,0)}function Uv(t){return new H5(t,1)}var kq=N(()=>{"use strict";o(H5,"Step");H5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(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 r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o($0,"default");o(Vv,"stepBefore");o(Uv,"stepAfter")});var Eq=N(()=>{"use strict";WW();KW();JW();rq();iq();Ov();eq();sq();u9();f9();Bv();cq();hq();G5();dq();a9();xq();Tq();kq()});var Sq=N(()=>{"use strict"});var Cq=N(()=>{"use strict"});function Dh(t,e,r){this.k=t,this.x=e,this.y=r}function y9(t){for(;!t.__zoom;)if(!(t=t.parentNode))return g9;return t.__zoom}var g9,v9=N(()=>{"use strict";o(Dh,"Transform");Dh.prototype={constructor:Dh,scale:o(function(t){return t===1?this:new Dh(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Dh(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};g9=new Dh(1,0,0);y9.prototype=Dh.prototype;o(y9,"transform")});var Aq=N(()=>{"use strict"});var _q=N(()=>{"use strict";l5();Sq();Cq();v9();Aq()});var Dq=N(()=>{"use strict";_q();v9()});var dr=N(()=>{"use strict";vh();sV();SH();DH();E0();LH();RH();TA();QV();NH();u_();MH();OH();A_();jH();KH();A0();m_();QH();IH();ZH();$W();VW();fl();Eq();A5();Z_();r5();l5();Dq()});var Lq=Mi(Ji=>{"use strict";Object.defineProperty(Ji,"__esModule",{value:!0});Ji.BLANK_URL=Ji.relativeFirstCharacters=Ji.whitespaceEscapeCharsRegex=Ji.urlSchemeRegex=Ji.ctrlCharactersRegex=Ji.htmlCtrlEntityRegex=Ji.htmlEntitiesRegex=Ji.invalidProtocolRegex=void 0;Ji.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;Ji.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;Ji.htmlCtrlEntityRegex=/&(newline|tab);/gi;Ji.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;Ji.urlSchemeRegex=/^.+(:|:)/gim;Ji.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;Ji.relativeFirstCharacters=[".","/"];Ji.BLANK_URL="about:blank"});var z0=Mi(W5=>{"use strict";Object.defineProperty(W5,"__esModule",{value:!0});W5.sanitizeUrl=void 0;var Aa=Lq();function Hke(t){return Aa.relativeFirstCharacters.indexOf(t[0])>-1}o(Hke,"isRelativeUrlWithoutProtocol");function Wke(t){var e=t.replace(Aa.ctrlCharactersRegex,"");return e.replace(Aa.htmlEntitiesRegex,function(r,n){return String.fromCharCode(n)})}o(Wke,"decodeHtmlCharacters");function qke(t){return URL.canParse(t)}o(qke,"isValidUrl");function Rq(t){try{return decodeURIComponent(t)}catch{return t}}o(Rq,"decodeURI");function Yke(t){if(!t)return Aa.BLANK_URL;var e,r=Rq(t.trim());do r=Wke(r).replace(Aa.htmlCtrlEntityRegex,"").replace(Aa.ctrlCharactersRegex,"").replace(Aa.whitespaceEscapeCharsRegex,"").trim(),r=Rq(r),e=r.match(Aa.ctrlCharactersRegex)||r.match(Aa.htmlEntitiesRegex)||r.match(Aa.htmlCtrlEntityRegex)||r.match(Aa.whitespaceEscapeCharsRegex);while(e&&e.length>0);var n=r;if(!n)return Aa.BLANK_URL;if(Hke(n))return n;var i=n.trimStart(),a=i.match(Aa.urlSchemeRegex);if(!a)return n;var s=a[0].toLowerCase().trim();if(Aa.invalidProtocolRegex.test(s))return Aa.BLANK_URL;var l=i.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!qke(l))return Aa.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(Yke,"sanitizeUrl");W5.sanitizeUrl=Yke});var x9,kd,q5,Nq,Mq,Iq,Tl,Hv,Wv=N(()=>{"use strict";x9=Sa(z0(),1);gr();kd=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class&&r.attr("class",e.class),r},"drawRect"),q5=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};kd(t,r).lower()},"drawBackgroundRect"),Nq=o((t,e)=>{let r=e.text.replace(nd," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),Mq=o((t,e,r,n)=>{let i=t.append("image");i.attr("x",e),i.attr("y",r);let a=(0,x9.sanitizeUrl)(n);i.attr("xlink:href",a)},"drawImage"),Iq=o((t,e,r,n)=>{let i=t.append("use");i.attr("x",e),i.attr("y",r);let a=(0,x9.sanitizeUrl)(n);i.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),Tl=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),Hv=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")});var Oq,b9,Pq,Xke,jke,Kke,Qke,Zke,Jke,eEe,tEe,rEe,nEe,iEe,aEe,Tu,kl,Bq=N(()=>{"use strict";gr();Wv();Oq=Sa(z0(),1),b9=o(function(t,e){return kd(t,e)},"drawRect"),Pq=o(function(t,e,r,n,i,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,Oq.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),Xke=o((t,e,r)=>{let n=t.append("g"),i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",l=a.lineColor?a.lineColor:"#444444",u=a.offsetX?parseInt(a.offsetX):0,h=a.offsetY?parseInt(a.offsetY):0,f="";if(i===0){let p=n.append("line");p.attr("x1",a.startPoint.x),p.attr("y1",a.startPoint.y),p.attr("x2",a.endPoint.x),p.attr("y2",a.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",l),p.style("fill","none"),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),i=-1}else{let p=n.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=r.messageFont();Tu(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+h,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),Tu(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+h,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},"drawRels"),jke=o(function(t,e,r){let n=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};b9(n,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,Tu(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,Tu(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,Tu(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),Kke=o(function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=Tl();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=n,u.width=e.width,u.height=e.height,u.stroke=i,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},b9(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=aEe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":Pq(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,Tu(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?Tu(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&Tu(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,Tu(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),Qke=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),Zke=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),Jke=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),eEe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),tEe=o(function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),rEe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),nEe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertDynamicNumber"),iEe=o(function(t){let r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),aEe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),Tu=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=i.split(Ze.lineBreakRegex);for(let v=0;v<y.length;v++){let x=v*p-p*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",p).style("font-weight",g).style("font-family",m);b.append("tspan").attr("dy",x).text(y[v]).attr("alignment-baseline","mathematical"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)a.hasOwnProperty(s)&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),kl={drawRect:b9,drawBoundary:jke,drawC4Shape:Kke,drawRels:Xke,drawImage:Pq,insertArrowHead:eEe,insertArrowEnd:tEe,insertArrowFilledHead:rEe,insertDynamicNumber:nEe,insertArrowCrossHead:iEe,insertDatabaseIcon:Qke,insertComputerIcon:Zke,insertClockIcon:Jke}});var sEe,X5,w9=N(()=>{"use strict";sEe=typeof global=="object"&&global&&global.Object===Object&&global,X5=sEe});var oEe,lEe,li,Lo=N(()=>{"use strict";w9();oEe=typeof self=="object"&&self&&self.Object===Object&&self,lEe=X5||oEe||Function("return this")(),li=lEe});var cEe,ea,Ed=N(()=>{"use strict";Lo();cEe=li.Symbol,ea=cEe});function fEe(t){var e=uEe.call(t,qv),r=t[qv];try{t[qv]=void 0;var n=!0}catch{}var i=hEe.call(t);return n&&(e?t[qv]=r:delete t[qv]),i}var Fq,uEe,hEe,qv,$q,zq=N(()=>{"use strict";Ed();Fq=Object.prototype,uEe=Fq.hasOwnProperty,hEe=Fq.toString,qv=ea?ea.toStringTag:void 0;o(fEe,"getRawTag");$q=fEe});function mEe(t){return pEe.call(t)}var dEe,pEe,Gq,Vq=N(()=>{"use strict";dEe=Object.prototype,pEe=dEe.toString;o(mEe,"objectToString");Gq=mEe});function vEe(t){return t==null?t===void 0?yEe:gEe:Uq&&Uq in Object(t)?$q(t):Gq(t)}var gEe,yEe,Uq,da,ku=N(()=>{"use strict";Ed();zq();Vq();gEe="[object Null]",yEe="[object Undefined]",Uq=ea?ea.toStringTag:void 0;o(vEe,"baseGetTag");da=vEe});function xEe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var bn,Js=N(()=>{"use strict";o(xEe,"isObject");bn=xEe});function EEe(t){if(!bn(t))return!1;var e=da(t);return e==wEe||e==TEe||e==bEe||e==kEe}var bEe,wEe,TEe,kEe,Si,Yv=N(()=>{"use strict";ku();Js();bEe="[object AsyncFunction]",wEe="[object Function]",TEe="[object GeneratorFunction]",kEe="[object Proxy]";o(EEe,"isFunction");Si=EEe});var SEe,j5,Hq=N(()=>{"use strict";Lo();SEe=li["__core-js_shared__"],j5=SEe});function CEe(t){return!!Wq&&Wq in t}var Wq,qq,Yq=N(()=>{"use strict";Hq();Wq=function(){var t=/[^.]+$/.exec(j5&&j5.keys&&j5.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(CEe,"isMasked");qq=CEe});function DEe(t){if(t!=null){try{return _Ee.call(t)}catch{}try{return t+""}catch{}}return""}var AEe,_Ee,Eu,T9=N(()=>{"use strict";AEe=Function.prototype,_Ee=AEe.toString;o(DEe,"toSource");Eu=DEe});function BEe(t){if(!bn(t)||qq(t))return!1;var e=Si(t)?PEe:REe;return e.test(Eu(t))}var LEe,REe,NEe,MEe,IEe,OEe,PEe,Xq,jq=N(()=>{"use strict";Yv();Yq();Js();T9();LEe=/[\\^$.*+?()[\]{}|]/g,REe=/^\[object .+?Constructor\]$/,NEe=Function.prototype,MEe=Object.prototype,IEe=NEe.toString,OEe=MEe.hasOwnProperty,PEe=RegExp("^"+IEe.call(OEe).replace(LEe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(BEe,"baseIsNative");Xq=BEe});function FEe(t,e){return t?.[e]}var Kq,Qq=N(()=>{"use strict";o(FEe,"getValue");Kq=FEe});function $Ee(t,e){var r=Kq(t,e);return Xq(r)?r:void 0}var Ss,Lh=N(()=>{"use strict";jq();Qq();o($Ee,"getNative");Ss=$Ee});var zEe,Su,Xv=N(()=>{"use strict";Lh();zEe=Ss(Object,"create"),Su=zEe});function GEe(){this.__data__=Su?Su(null):{},this.size=0}var Zq,Jq=N(()=>{"use strict";Xv();o(GEe,"hashClear");Zq=GEe});function VEe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var eY,tY=N(()=>{"use strict";o(VEe,"hashDelete");eY=VEe});function qEe(t){var e=this.__data__;if(Su){var r=e[t];return r===UEe?void 0:r}return WEe.call(e,t)?e[t]:void 0}var UEe,HEe,WEe,rY,nY=N(()=>{"use strict";Xv();UEe="__lodash_hash_undefined__",HEe=Object.prototype,WEe=HEe.hasOwnProperty;o(qEe,"hashGet");rY=qEe});function jEe(t){var e=this.__data__;return Su?e[t]!==void 0:XEe.call(e,t)}var YEe,XEe,iY,aY=N(()=>{"use strict";Xv();YEe=Object.prototype,XEe=YEe.hasOwnProperty;o(jEe,"hashHas");iY=jEe});function QEe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Su&&e===void 0?KEe:e,this}var KEe,sY,oY=N(()=>{"use strict";Xv();KEe="__lodash_hash_undefined__";o(QEe,"hashSet");sY=QEe});function G0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var k9,lY=N(()=>{"use strict";Jq();tY();nY();aY();oY();o(G0,"Hash");G0.prototype.clear=Zq;G0.prototype.delete=eY;G0.prototype.get=rY;G0.prototype.has=iY;G0.prototype.set=sY;k9=G0});function ZEe(){this.__data__=[],this.size=0}var cY,uY=N(()=>{"use strict";o(ZEe,"listCacheClear");cY=ZEe});function JEe(t,e){return t===e||t!==t&&e!==e}var Ro,Sd=N(()=>{"use strict";o(JEe,"eq");Ro=JEe});function e6e(t,e){for(var r=t.length;r--;)if(Ro(t[r][0],e))return r;return-1}var Rh,jv=N(()=>{"use strict";Sd();o(e6e,"assocIndexOf");Rh=e6e});function n6e(t){var e=this.__data__,r=Rh(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():r6e.call(e,r,1),--this.size,!0}var t6e,r6e,hY,fY=N(()=>{"use strict";jv();t6e=Array.prototype,r6e=t6e.splice;o(n6e,"listCacheDelete");hY=n6e});function i6e(t){var e=this.__data__,r=Rh(e,t);return r<0?void 0:e[r][1]}var dY,pY=N(()=>{"use strict";jv();o(i6e,"listCacheGet");dY=i6e});function a6e(t){return Rh(this.__data__,t)>-1}var mY,gY=N(()=>{"use strict";jv();o(a6e,"listCacheHas");mY=a6e});function s6e(t,e){var r=this.__data__,n=Rh(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var yY,vY=N(()=>{"use strict";jv();o(s6e,"listCacheSet");yY=s6e});function V0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var Nh,Kv=N(()=>{"use strict";uY();fY();pY();gY();vY();o(V0,"ListCache");V0.prototype.clear=cY;V0.prototype.delete=hY;V0.prototype.get=dY;V0.prototype.has=mY;V0.prototype.set=yY;Nh=V0});var o6e,Mh,K5=N(()=>{"use strict";Lh();Lo();o6e=Ss(li,"Map"),Mh=o6e});function l6e(){this.size=0,this.__data__={hash:new k9,map:new(Mh||Nh),string:new k9}}var xY,bY=N(()=>{"use strict";lY();Kv();K5();o(l6e,"mapCacheClear");xY=l6e});function c6e(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var wY,TY=N(()=>{"use strict";o(c6e,"isKeyable");wY=c6e});function u6e(t,e){var r=t.__data__;return wY(e)?r[typeof e=="string"?"string":"hash"]:r.map}var Ih,Qv=N(()=>{"use strict";TY();o(u6e,"getMapData");Ih=u6e});function h6e(t){var e=Ih(this,t).delete(t);return this.size-=e?1:0,e}var kY,EY=N(()=>{"use strict";Qv();o(h6e,"mapCacheDelete");kY=h6e});function f6e(t){return Ih(this,t).get(t)}var SY,CY=N(()=>{"use strict";Qv();o(f6e,"mapCacheGet");SY=f6e});function d6e(t){return Ih(this,t).has(t)}var AY,_Y=N(()=>{"use strict";Qv();o(d6e,"mapCacheHas");AY=d6e});function p6e(t,e){var r=Ih(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var DY,LY=N(()=>{"use strict";Qv();o(p6e,"mapCacheSet");DY=p6e});function U0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var Cd,Q5=N(()=>{"use strict";bY();EY();CY();_Y();LY();o(U0,"MapCache");U0.prototype.clear=xY;U0.prototype.delete=kY;U0.prototype.get=SY;U0.prototype.has=AY;U0.prototype.set=DY;Cd=U0});function E9(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(m6e);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(E9.Cache||Cd),r}var m6e,H0,S9=N(()=>{"use strict";Q5();m6e="Expected a function";o(E9,"memoize");E9.Cache=Cd;H0=E9});function g6e(){this.__data__=new Nh,this.size=0}var RY,NY=N(()=>{"use strict";Kv();o(g6e,"stackClear");RY=g6e});function y6e(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var MY,IY=N(()=>{"use strict";o(y6e,"stackDelete");MY=y6e});function v6e(t){return this.__data__.get(t)}var OY,PY=N(()=>{"use strict";o(v6e,"stackGet");OY=v6e});function x6e(t){return this.__data__.has(t)}var BY,FY=N(()=>{"use strict";o(x6e,"stackHas");BY=x6e});function w6e(t,e){var r=this.__data__;if(r instanceof Nh){var n=r.__data__;if(!Mh||n.length<b6e-1)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Cd(n)}return r.set(t,e),this.size=r.size,this}var b6e,$Y,zY=N(()=>{"use strict";Kv();K5();Q5();b6e=200;o(w6e,"stackSet");$Y=w6e});function W0(t){var e=this.__data__=new Nh(t);this.size=e.size}var lc,Zv=N(()=>{"use strict";Kv();NY();IY();PY();FY();zY();o(W0,"Stack");W0.prototype.clear=RY;W0.prototype.delete=MY;W0.prototype.get=OY;W0.prototype.has=BY;W0.prototype.set=$Y;lc=W0});var T6e,q0,C9=N(()=>{"use strict";Lh();T6e=function(){try{var t=Ss(Object,"defineProperty");return t({},"",{}),t}catch{}}(),q0=T6e});function k6e(t,e,r){e=="__proto__"&&q0?q0(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var cc,Y0=N(()=>{"use strict";C9();o(k6e,"baseAssignValue");cc=k6e});function E6e(t,e,r){(r!==void 0&&!Ro(t[e],r)||r===void 0&&!(e in t))&&cc(t,e,r)}var Jv,A9=N(()=>{"use strict";Y0();Sd();o(E6e,"assignMergeValue");Jv=E6e});function S6e(t){return function(e,r,n){for(var i=-1,a=Object(e),s=n(e),l=s.length;l--;){var u=s[t?l:++i];if(r(a[u],u,a)===!1)break}return e}}var GY,VY=N(()=>{"use strict";o(S6e,"createBaseFor");GY=S6e});var C6e,X0,Z5=N(()=>{"use strict";VY();C6e=GY(),X0=C6e});function _6e(t,e){if(e)return t.slice();var r=t.length,n=WY?WY(r):new t.constructor(r);return t.copy(n),n}var qY,UY,A6e,HY,WY,J5,_9=N(()=>{"use strict";Lo();qY=typeof exports=="object"&&exports&&!exports.nodeType&&exports,UY=qY&&typeof module=="object"&&module&&!module.nodeType&&module,A6e=UY&&UY.exports===qY,HY=A6e?li.Buffer:void 0,WY=HY?HY.allocUnsafe:void 0;o(_6e,"cloneBuffer");J5=_6e});var D6e,j0,D9=N(()=>{"use strict";Lo();D6e=li.Uint8Array,j0=D6e});function L6e(t){var e=new t.constructor(t.byteLength);return new j0(e).set(new j0(t)),e}var K0,ew=N(()=>{"use strict";D9();o(L6e,"cloneArrayBuffer");K0=L6e});function R6e(t,e){var r=e?K0(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var tw,L9=N(()=>{"use strict";ew();o(R6e,"cloneTypedArray");tw=R6e});function N6e(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}var rw,R9=N(()=>{"use strict";o(N6e,"copyArray");rw=N6e});var YY,M6e,XY,jY=N(()=>{"use strict";Js();YY=Object.create,M6e=function(){function t(){}return o(t,"object"),function(e){if(!bn(e))return{};if(YY)return YY(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),XY=M6e});function I6e(t,e){return function(r){return t(e(r))}}var nw,N9=N(()=>{"use strict";o(I6e,"overArg");nw=I6e});var O6e,Q0,iw=N(()=>{"use strict";N9();O6e=nw(Object.getPrototypeOf,Object),Q0=O6e});function B6e(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||P6e;return t===r}var P6e,uc,Z0=N(()=>{"use strict";P6e=Object.prototype;o(B6e,"isPrototype");uc=B6e});function F6e(t){return typeof t.constructor=="function"&&!uc(t)?XY(Q0(t)):{}}var aw,M9=N(()=>{"use strict";jY();iw();Z0();o(F6e,"initCloneObject");aw=F6e});function $6e(t){return t!=null&&typeof t=="object"}var ri,No=N(()=>{"use strict";o($6e,"isObjectLike");ri=$6e});function G6e(t){return ri(t)&&da(t)==z6e}var z6e,I9,KY=N(()=>{"use strict";ku();No();z6e="[object Arguments]";o(G6e,"baseIsArguments");I9=G6e});var QY,V6e,U6e,H6e,El,J0=N(()=>{"use strict";KY();No();QY=Object.prototype,V6e=QY.hasOwnProperty,U6e=QY.propertyIsEnumerable,H6e=I9(function(){return arguments}())?I9:function(t){return ri(t)&&V6e.call(t,"callee")&&!U6e.call(t,"callee")},El=H6e});var W6e,Pt,Un=N(()=>{"use strict";W6e=Array.isArray,Pt=W6e});function Y6e(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=q6e}var q6e,em,sw=N(()=>{"use strict";q6e=9007199254740991;o(Y6e,"isLength");em=Y6e});function X6e(t){return t!=null&&em(t.length)&&!Si(t)}var ci,Mo=N(()=>{"use strict";Yv();sw();o(X6e,"isArrayLike");ci=X6e});function j6e(t){return ri(t)&&ci(t)}var Ad,ow=N(()=>{"use strict";Mo();No();o(j6e,"isArrayLikeObject");Ad=j6e});function K6e(){return!1}var ZY,JY=N(()=>{"use strict";o(K6e,"stubFalse");ZY=K6e});var rX,eX,Q6e,tX,Z6e,J6e,Sl,tm=N(()=>{"use strict";Lo();JY();rX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,eX=rX&&typeof module=="object"&&module&&!module.nodeType&&module,Q6e=eX&&eX.exports===rX,tX=Q6e?li.Buffer:void 0,Z6e=tX?tX.isBuffer:void 0,J6e=Z6e||ZY,Sl=J6e});function aSe(t){if(!ri(t)||da(t)!=eSe)return!1;var e=Q0(t);if(e===null)return!0;var r=nSe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&nX.call(r)==iSe}var eSe,tSe,rSe,nX,nSe,iSe,iX,aX=N(()=>{"use strict";ku();iw();No();eSe="[object Object]",tSe=Function.prototype,rSe=Object.prototype,nX=tSe.toString,nSe=rSe.hasOwnProperty,iSe=nX.call(Object);o(aSe,"isPlainObject");iX=aSe});function LSe(t){return ri(t)&&em(t.length)&&!!Fn[da(t)]}var sSe,oSe,lSe,cSe,uSe,hSe,fSe,dSe,pSe,mSe,gSe,ySe,vSe,xSe,bSe,wSe,TSe,kSe,ESe,SSe,CSe,ASe,_Se,DSe,Fn,sX,oX=N(()=>{"use strict";ku();sw();No();sSe="[object Arguments]",oSe="[object Array]",lSe="[object Boolean]",cSe="[object Date]",uSe="[object Error]",hSe="[object Function]",fSe="[object Map]",dSe="[object Number]",pSe="[object Object]",mSe="[object RegExp]",gSe="[object Set]",ySe="[object String]",vSe="[object WeakMap]",xSe="[object ArrayBuffer]",bSe="[object DataView]",wSe="[object Float32Array]",TSe="[object Float64Array]",kSe="[object Int8Array]",ESe="[object Int16Array]",SSe="[object Int32Array]",CSe="[object Uint8Array]",ASe="[object Uint8ClampedArray]",_Se="[object Uint16Array]",DSe="[object Uint32Array]",Fn={};Fn[wSe]=Fn[TSe]=Fn[kSe]=Fn[ESe]=Fn[SSe]=Fn[CSe]=Fn[ASe]=Fn[_Se]=Fn[DSe]=!0;Fn[sSe]=Fn[oSe]=Fn[xSe]=Fn[lSe]=Fn[bSe]=Fn[cSe]=Fn[uSe]=Fn[hSe]=Fn[fSe]=Fn[dSe]=Fn[pSe]=Fn[mSe]=Fn[gSe]=Fn[ySe]=Fn[vSe]=!1;o(LSe,"baseIsTypedArray");sX=LSe});function RSe(t){return function(e){return t(e)}}var Io,_d=N(()=>{"use strict";o(RSe,"baseUnary");Io=RSe});var lX,e2,NSe,O9,MSe,Oo,t2=N(()=>{"use strict";w9();lX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,e2=lX&&typeof module=="object"&&module&&!module.nodeType&&module,NSe=e2&&e2.exports===lX,O9=NSe&&X5.process,MSe=function(){try{var t=e2&&e2.require&&e2.require("util").types;return t||O9&&O9.binding&&O9.binding("util")}catch{}}(),Oo=MSe});var cX,ISe,Oh,r2=N(()=>{"use strict";oX();_d();t2();cX=Oo&&Oo.isTypedArray,ISe=cX?Io(cX):sX,Oh=ISe});function OSe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var n2,P9=N(()=>{"use strict";o(OSe,"safeGet");n2=OSe});function FSe(t,e,r){var n=t[e];(!(BSe.call(t,e)&&Ro(n,r))||r===void 0&&!(e in t))&&cc(t,e,r)}var PSe,BSe,hc,rm=N(()=>{"use strict";Y0();Sd();PSe=Object.prototype,BSe=PSe.hasOwnProperty;o(FSe,"assignValue");hc=FSe});function $Se(t,e,r,n){var i=!r;r||(r={});for(var a=-1,s=e.length;++a<s;){var l=e[a],u=n?n(r[l],t[l],l,r,t):void 0;u===void 0&&(u=t[l]),i?cc(r,l,u):hc(r,l,u)}return r}var Po,Dd=N(()=>{"use strict";rm();Y0();o($Se,"copyObject");Po=$Se});function zSe(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}var uX,hX=N(()=>{"use strict";o(zSe,"baseTimes");uX=zSe});function USe(t,e){var r=typeof t;return e=e??GSe,!!e&&(r=="number"||r!="symbol"&&VSe.test(t))&&t>-1&&t%1==0&&t<e}var GSe,VSe,Ph,i2=N(()=>{"use strict";GSe=9007199254740991,VSe=/^(?:0|[1-9]\d*)$/;o(USe,"isIndex");Ph=USe});function qSe(t,e){var r=Pt(t),n=!r&&El(t),i=!r&&!n&&Sl(t),a=!r&&!n&&!i&&Oh(t),s=r||n||i||a,l=s?uX(t.length,String):[],u=l.length;for(var h in t)(e||WSe.call(t,h))&&!(s&&(h=="length"||i&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||Ph(h,u)))&&l.push(h);return l}var HSe,WSe,lw,B9=N(()=>{"use strict";hX();J0();Un();tm();i2();r2();HSe=Object.prototype,WSe=HSe.hasOwnProperty;o(qSe,"arrayLikeKeys");lw=qSe});function YSe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var fX,dX=N(()=>{"use strict";o(YSe,"nativeKeysIn");fX=YSe});function KSe(t){if(!bn(t))return fX(t);var e=uc(t),r=[];for(var n in t)n=="constructor"&&(e||!jSe.call(t,n))||r.push(n);return r}var XSe,jSe,pX,mX=N(()=>{"use strict";Js();Z0();dX();XSe=Object.prototype,jSe=XSe.hasOwnProperty;o(KSe,"baseKeysIn");pX=KSe});function QSe(t){return ci(t)?lw(t,!0):pX(t)}var Cs,Bh=N(()=>{"use strict";B9();mX();Mo();o(QSe,"keysIn");Cs=QSe});function ZSe(t){return Po(t,Cs(t))}var gX,yX=N(()=>{"use strict";Dd();Bh();o(ZSe,"toPlainObject");gX=ZSe});function JSe(t,e,r,n,i,a,s){var l=n2(t,r),u=n2(e,r),h=s.get(u);if(h){Jv(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Pt(u),m=!p&&Sl(u),g=!p&&!m&&Oh(u);f=u,p||m||g?Pt(l)?f=l:Ad(l)?f=rw(l):m?(d=!1,f=J5(u,!0)):g?(d=!1,f=tw(u,!0)):f=[]:iX(u)||El(u)?(f=l,El(l)?f=gX(l):(!bn(l)||Si(l))&&(f=aw(u))):d=!1}d&&(s.set(u,f),i(f,u,n,a,s),s.delete(u)),Jv(t,r,f)}var vX,xX=N(()=>{"use strict";A9();_9();L9();R9();M9();J0();Un();ow();tm();Yv();Js();aX();r2();P9();yX();o(JSe,"baseMergeDeep");vX=JSe});function bX(t,e,r,n,i){t!==e&&X0(e,function(a,s){if(i||(i=new lc),bn(a))vX(t,e,s,r,bX,n,i);else{var l=n?n(n2(t,s),a,s+"",t,e,i):void 0;l===void 0&&(l=a),Jv(t,s,l)}},Cs)}var wX,TX=N(()=>{"use strict";Zv();A9();Z5();xX();Js();Bh();P9();o(bX,"baseMerge");wX=bX});function eCe(t){return t}var ta,Cu=N(()=>{"use strict";o(eCe,"identity");ta=eCe});function tCe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var kX,EX=N(()=>{"use strict";o(tCe,"apply");kX=tCe});function rCe(t,e,r){return e=SX(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,a=SX(n.length-e,0),s=Array(a);++i<a;)s[i]=n[e+i];i=-1;for(var l=Array(e+1);++i<e;)l[i]=n[i];return l[e]=r(s),kX(t,this,l)}}var SX,cw,F9=N(()=>{"use strict";EX();SX=Math.max;o(rCe,"overRest");cw=rCe});function nCe(t){return function(){return t}}var As,$9=N(()=>{"use strict";o(nCe,"constant");As=nCe});var iCe,CX,AX=N(()=>{"use strict";$9();C9();Cu();iCe=q0?function(t,e){return q0(t,"toString",{configurable:!0,enumerable:!1,value:As(e),writable:!0})}:ta,CX=iCe});function lCe(t){var e=0,r=0;return function(){var n=oCe(),i=sCe-(n-r);if(r=n,i>0){if(++e>=aCe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var aCe,sCe,oCe,_X,DX=N(()=>{"use strict";aCe=800,sCe=16,oCe=Date.now;o(lCe,"shortOut");_X=lCe});var cCe,uw,z9=N(()=>{"use strict";AX();DX();cCe=_X(CX),uw=cCe});function uCe(t,e){return uw(cw(t,e,ta),t+"")}var fc,nm=N(()=>{"use strict";Cu();F9();z9();o(uCe,"baseRest");fc=uCe});function hCe(t,e,r){if(!bn(r))return!1;var n=typeof e;return(n=="number"?ci(r)&&Ph(e,r.length):n=="string"&&e in r)?Ro(r[e],t):!1}var eo,Ld=N(()=>{"use strict";Sd();Mo();i2();Js();o(hCe,"isIterateeCall");eo=hCe});function fCe(t){return fc(function(e,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,s=i>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(i--,a):void 0,s&&eo(r[0],r[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++n<i;){var l=r[n];l&&t(e,l,n,a)}return e})}var hw,G9=N(()=>{"use strict";nm();Ld();o(fCe,"createAssigner");hw=fCe});var dCe,Fh,V9=N(()=>{"use strict";TX();G9();dCe=hw(function(t,e,r){wX(t,e,r)}),Fh=dCe});function W9(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return pCe[r]??e}function vCe(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,NX.sanitizeUrl)(r):r}function OX(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function bCe(t){let e,r=0;t.forEach(i=>{r+=OX(i,e),e=i});let n=r/2;return q9(t,n)}function wCe(t){return t.length===1?t[0]:bCe(t)}function kCe(t,e,r){let n=structuredClone(r);Y.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();let i=25+t,a=q9(n,i),s=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(n[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(n[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2),u}function Y9(t){let e="",r="";for(let n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}function ECe(t){let e="",r="0123456789abcdef",n=r.length;for(let i=0;i<t;i++)e+=r.charAt(Math.floor(Math.random()*n));return e}function dw(t,e){return Q9(t,e).height}function ra(t,e){return Q9(t,e).width}function Z9(t){return"str"in t}function Fi(t,e){return Fh({},t,e)}function $n(t){return t??null}var NX,H9,pCe,mCe,gCe,MX,IX,yCe,xCe,LX,q9,TCe,RX,X9,j9,SCe,CCe,K9,ACe,Q9,U9,fw,_Ce,DCe,Bo,Gt,PX,na,$h,ir=N(()=>{"use strict";NX=Sa(z0(),1);dr();gr();e7();vt();Xf();s0();S9();V9();$4();H9="\u200B",pCe={curveBasis:Do,curveBasisClosed:P5,curveBasisOpen:B5,curveBumpX:Rv,curveBumpY:Nv,curveBundle:l9,curveCardinalClosed:c9,curveCardinalOpen:h9,curveCardinal:Pv,curveCatmullRomClosed:d9,curveCatmullRomOpen:p9,curveCatmullRom:$v,curveLinear:wu,curveLinearClosed:V5,curveMonotoneX:zv,curveMonotoneY:Gv,curveNatural:F0,curveStep:$0,curveStepAfter:Uv,curveStepBefore:Vv},mCe=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,gCe=o(function(t,e){let r=MX(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(r)){let s=r.map(l=>l.args);l0(s),n=Gn(n,[...s])}else n=r.args;if(!n)return;let i=a0(t,e),a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),MX=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${mCe.source})(?=[}][%]{2}).* | |
| 353 | +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),Y.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=qf.exec(t))!==null;)if(n.index===qf.lastIndex&&qf.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){let a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return Y.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),IX=o(function(t){return t.replace(qf,"")},"removeDirectives"),yCe=o(function(t,e){for(let[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");o(W9,"interpolateToCurve");o(vCe,"formatUrl");xCe=o((t,...e)=>{let r=t.split("."),n=r.length-1,i=r[n],a=window;for(let s=0;s<n;s++)if(a=a[r[s]],!a){Y.error(`Function name: ${t} not found in window`);return}a[i](...e)},"runFunc");o(OX,"distance");o(bCe,"traverseEdge");o(wCe,"calcLabelPosition");LX=o((t,e=2)=>{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),q9=o((t,e)=>{let r,n=e;for(let i of t){if(r){let a=OX(i,r);if(a===0)return r;if(a<n)n-=a;else{let s=n/a;if(s<=0)return r;if(s>=1)return{x:i.x,y:i.y};if(s>0&&s<1)return{x:LX((1-s)*r.x+s*i.x,5),y:LX((1-s)*r.y+s*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),TCe=o((t,e,r)=>{Y.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let i=q9(e,25),a=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+i.x)/2,l.y=-Math.cos(s)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");o(kCe,"calcTerminalLabelPosition");o(Y9,"getStylesFromArray");RX=0,X9=o(()=>(RX++,"id-"+Math.random().toString(36).substr(2,12)+"-"+RX),"generateId");o(ECe,"makeRandomHex");j9=o(t=>ECe(t.length),"random"),SCe=o(function(){return{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:""}},"getTextObj"),CCe=o(function(t,e){let r=e.text.replace(Ze.lineBreakRegex," "),[,n]=Bo(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);let a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),K9=H0((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},r),Ze.lineBreakRegex.test(t)))return t;let n=t.split(" ").filter(Boolean),i=[],a="";return n.forEach((s,l)=>{let u=ra(`${s} `,r),h=ra(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=ACe(s,e,"-",r);i.push(a,...p),a=m}else h+u>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),ACe=H0((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);let i=[...t],a=[],s="";return i.forEach((l,u)=>{let h=`${s}${l}`;if(ra(h,n)>=e){let d=u+1,p=i.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);o(dw,"calculateTextHeight");o(ra,"calculateTextWidth");Q9=H0((t,e)=>{let{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};let[,a]=Bo(r),s=["sans-serif",n],l=t.split(Ze.lineBreakRegex),u=[],h=Ge("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=SCe();v.text=y||H9;let x=CCe(f,v).style("font-size",a).style("font-weight",i).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),U9=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},_Ce=o(function(t){return fw=fw||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),fw.innerHTML=t,unescape(fw.textContent)},"entityDecode");o(Z9,"isDetailedError");DCe=o((t,e,r,n)=>{if(!n)return;let i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),Bo=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(Fi,"cleanAndMerge");Gt={assignWithDepth:Gn,wrapLabel:K9,calculateTextHeight:dw,calculateTextWidth:ra,calculateTextDimensions:Q9,cleanAndMerge:Fi,detectInit:gCe,detectDirective:MX,isSubstringInArray:yCe,interpolateToCurve:W9,calcLabelPosition:wCe,calcCardinalityPosition:TCe,calcTerminalLabelPosition:kCe,formatUrl:vCe,getStylesFromArray:Y9,generateId:X9,random:j9,runFunc:xCe,entityDecode:_Ce,insertTitle:DCe,parseFontSize:Bo,InitIDGenerator:U9},PX=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},"encodeEntities"),na=o(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),$h=o((t,e,{counter:r=0,prefix:n,suffix:i},a)=>a||`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");o($n,"handleUndefinedAttr")});function Cl(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=K9(e[t].text,i,n),e[t].textLines=e[t].text.split(Ze.lineBreakRegex).length,e[t].width=i,e[t].height=dw(e[t].text,n);else{let a=e[t].text.split(Ze.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(ra(l,n),e[t].width),s=dw(l,n),e[t].height=e[t].height+s}}function GX(t,e,r,n,i){let a=new yw(i);a.data.widthLimit=r.data.widthLimit/Math.min(J9,n.length);for(let[s,l]of n.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&Vt.wrap,f=pw(Vt);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Cl("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=pw(Vt);Cl("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=pw(Vt);g.fontSize=g.fontSize-2,Cl("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%J9===0){let g=r.data.startx+Vt.diagramMarginX,y=r.data.stopy+Vt.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+Vt.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=i.db.getC4ShapeArray(l.alias),p=i.db.getC4ShapeKeys(l.alias);p.length>0&&zX(a,t,d,p),e=l.alias;let m=i.db.getBoundarys(e);m.length>0&&GX(t,e,a,m,i),l.alias!=="global"&&$X(t,l,a),r.data.stopy=Math.max(a.data.stopy+Vt.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Vt.c4ShapeMargin,r.data.stopx),mw=Math.max(mw,r.data.stopx),gw=Math.max(gw,r.data.stopy)}}var mw,gw,FX,J9,Vt,yw,eD,a2,pw,LCe,$X,zX,_s,BX,RCe,NCe,MCe,tD,VX=N(()=>{"use strict";dr();Bq();vt();$C();gr();uA();zt();s0();ir();Ei();mw=0,gw=0,FX=4,J9=2;Ty.yy=Qy;Vt={},yw=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,eD(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){e[r]===void 0?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>FX)&&(r=this.nextData.startx+e.margin+Vt.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},eD(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},eD=o(function(t){Gn(Vt,t),t.fontFamily&&(Vt.personFontFamily=Vt.systemFontFamily=Vt.messageFontFamily=t.fontFamily),t.fontSize&&(Vt.personFontSize=Vt.systemFontSize=Vt.messageFontSize=t.fontSize),t.fontWeight&&(Vt.personFontWeight=Vt.systemFontWeight=Vt.messageFontWeight=t.fontWeight)},"setConf"),a2=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),pw=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),LCe=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(Cl,"calcC4ShapeTextWH");$X=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Vt.c4ShapeMargin-35;let n=e.wrap&&Vt.wrap,i=pw(Vt);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=ra(e.label.text,i);Cl("label",e,n,i,a),kl.drawBoundary(t,e,Vt)},"drawBoundary"),zX=o(function(t,e,r,n){let i=0;for(let a of n){i=0;let s=r[a],l=a2(Vt,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=ra("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=Vt.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let u=s.wrap&&Vt.wrap,h=Vt.width-Vt.c4ShapePadding*2,f=a2(Vt,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Cl("label",s,u,f,h),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=a2(Vt,s.typeC4Shape.text);Cl("type",s,u,m,h),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=a2(Vt,s.techn.text);Cl("techn",s,u,m,h),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=a2(Vt,s.typeC4Shape.text);Cl("descr",s,u,m,h),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}p=p+Vt.c4ShapePadding,s.width=Math.max(s.width||Vt.width,p,Vt.width),s.height=Math.max(s.height||Vt.height,d,Vt.height),s.margin=s.margin||Vt.c4ShapeMargin,t.insert(s),kl.drawC4Shape(e,s,Vt)}t.bumpLastMargin(Vt.c4ShapeMargin)},"drawC4ShapeArray"),_s=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},BX=o(function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,l=n+t.height/2,u=Math.abs(r-i),h=Math.abs(n-a),f=h/u,d=t.height/t.width,p=null;return n==a&&r<i?p=new _s(r+t.width,l):n==a&&r>i?p=new _s(r,l):r==i&&n<a?p=new _s(s,n+t.height):r==i&&n>a&&(p=new _s(s,n)),r>i&&n<a?d>=f?p=new _s(r,l+f*t.width/2):p=new _s(s-u/h*t.height/2,n+t.height):r<i&&n<a?d>=f?p=new _s(r+t.width,l+f*t.width/2):p=new _s(s+u/h*t.height/2,n+t.height):r<i&&n>a?d>=f?p=new _s(r+t.width,l-f*t.width/2):p=new _s(s+t.height/2*u/h,n):r>i&&n>a&&(d>=f?p=new _s(r,l-t.width/2*f):p=new _s(s-t.height/2*u/h,n)),p},"getIntersectPoint"),RCe=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=BX(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=BX(e,r);return{startPoint:n,endPoint:i}},"getIntersectPoints"),NCe=o(function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Vt.wrap,l=LCe(Vt);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let h=ra(a.label.text,l);Cl("label",a,s,l,h),a.techn&&a.techn.text!==""&&(h=ra(a.techn.text,l),Cl("techn",a,s,l,h)),a.descr&&a.descr.text!==""&&(h=ra(a.descr.text,l),Cl("descr",a,s,l,h));let f=r(a.from),d=r(a.to),p=RCe(f,d);a.startPoint=p.startPoint,a.endPoint=p.endPoint}kl.drawRels(t,e,Vt)},"drawRels");o(GX,"drawInsideBoundary");MCe=o(function(t,e,r,n){Vt=me().c4;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=n.db;n.db.setWrap(Vt.wrap),FX=l.getC4ShapeInRow(),J9=l.getC4BoundaryInRow(),Y.debug(`C:${JSON.stringify(Vt,null,2)}`);let u=i==="sandbox"?s.select(`[id="${e}"]`):Ge(`[id="${e}"]`);kl.insertComputerIcon(u),kl.insertDatabaseIcon(u),kl.insertClockIcon(u);let h=new yw(n);h.setData(Vt.diagramMarginX,Vt.diagramMarginX,Vt.diagramMarginY,Vt.diagramMarginY),h.data.widthLimit=screen.availWidth,mw=Vt.diagramMarginX,gw=Vt.diagramMarginY;let f=n.db.getTitle(),d=n.db.getBoundarys("");GX(u,"",h,d,n),kl.insertArrowHead(u),kl.insertArrowEnd(u),kl.insertArrowCrossHead(u),kl.insertArrowFilledHead(u),NCe(u,n.db.getRels(),n.db.getC4Shape,n),h.data.stopx=mw,h.data.stopy=gw;let p=h.data,g=p.stopy-p.starty+2*Vt.diagramMarginY,v=p.stopx-p.startx+2*Vt.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*Vt.diagramMarginX).attr("y",p.starty+Vt.diagramMarginY),vn(u,g,v,Vt.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-Vt.diagramMarginX+" -"+(Vt.diagramMarginY+x)+" "+v+" "+(g+x)),Y.debug("models:",p)},"draw"),tD={drawPersonOrSystemArray:zX,drawBoundary:$X,setConf:eD,draw:MCe}});var ICe,UX,HX=N(()=>{"use strict";ICe=o(t=>`.person { | |
| 354 | + stroke: ${t.personBorder}; | |
| 355 | + fill: ${t.personBkg}; | |
| 356 | + } | |
| 357 | +`,"getStyles"),UX=ICe});var WX={};hr(WX,{diagram:()=>OCe});var OCe,qX=N(()=>{"use strict";$C();uA();VX();HX();OCe={parser:JF,db:Qy,renderer:tD,styles:UX,init:o(({c4:t,wrap:e})=>{tD.setConf(t),Qy.setWrap(e)},"init")}});function uj(t){return typeof t>"u"||t===null}function $Ce(t){return typeof t=="object"&&t!==null}function zCe(t){return Array.isArray(t)?t:uj(t)?[]:[t]}function GCe(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;r<n;r+=1)i=a[r],t[i]=e[i];return t}function VCe(t,e){var r="",n;for(n=0;n<e;n+=1)r+=t;return r}function UCe(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}function hj(t,e){var r="",n=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(r+='in "'+t.mark.name+'" '),r+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(r+=` | |
| 358 | + | |
| 359 | +`+t.mark.snippet),n+" "+r):n}function o2(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=hj(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}function rD(t,e,r,n,i){var a="",s="",l=Math.floor(i/2)-1;return n-e>l&&(a=" ... ",e=n-l+a.length),r-n>l&&(s=" ...",r=n+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:n-e+a.length}}function nD(t,e){return $i.repeat(" ",e-t.length)+t}function KCe(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],i=[],a,s=-1;a=r.exec(t.buffer);)i.push(a.index),n.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,i.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=rD(t.buffer,n[s-u],i[s-u],t.position-(n[s]-n[s-u]),d),l=$i.repeat(" ",e.indent)+nD((t.line-u+1).toString(),f)+" | "+h.str+` | |
| 360 | +`+l;for(h=rD(t.buffer,n[s],i[s],t.position,d),l+=$i.repeat(" ",e.indent)+nD((t.line+1).toString(),f)+" | "+h.str+` | |
| 361 | +`,l+=$i.repeat("-",e.indent+f+3+h.pos)+`^ | |
| 362 | +`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=rD(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=$i.repeat(" ",e.indent)+nD((t.line+u+1).toString(),f)+" | "+h.str+` | |
| 363 | +`;return l.replace(/\n$/,"")}function e7e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}function t7e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(ZCe.indexOf(r)===-1)throw new Ds('Unknown option "'+r+'" 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(r){return r},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=e7e(e.styleAliases||null),JCe.indexOf(this.kind)===-1)throw new Ds('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function jX(t,e){var r=[];return t[e].forEach(function(n){var i=r.length;r.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=s)}),r[i]=n}),r}function r7e(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function n(i){i.multi?(t.multi[i.kind].push(i),t.multi.fallback.push(i)):t[i.kind][i.tag]=t.fallback[i.tag]=i}for(o(n,"collectType"),e=0,r=arguments.length;e<r;e+=1)arguments[e].forEach(n);return t}function aD(t){return this.extend(t)}function l7e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function c7e(){return null}function u7e(t){return t===null}function f7e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function d7e(t){return t==="true"||t==="True"||t==="TRUE"}function p7e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}function g7e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function y7e(t){return 48<=t&&t<=55}function v7e(t){return 48<=t&&t<=57}function x7e(t){if(t===null)return!1;var e=t.length,r=0,n=!1,i;if(!e)return!1;if(i=t[r],(i==="-"||i==="+")&&(i=t[++r]),i==="0"){if(r+1===e)return!0;if(i=t[++r],i==="b"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(i!=="0"&&i!=="1")return!1;n=!0}return n&&i!=="_"}if(i==="x"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(!g7e(t.charCodeAt(r)))return!1;n=!0}return n&&i!=="_"}if(i==="o"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(!y7e(t.charCodeAt(r)))return!1;n=!0}return n&&i!=="_"}}if(i==="_")return!1;for(;r<e;r++)if(i=t[r],i!=="_"){if(!v7e(t.charCodeAt(r)))return!1;n=!0}return!(!n||i==="_")}function b7e(t){var e=t,r=1,n;if(e.indexOf("_")!==-1&&(e=e.replace(/_/g,"")),n=e[0],(n==="-"||n==="+")&&(n==="-"&&(r=-1),e=e.slice(1),n=e[0]),e==="0")return 0;if(n==="0"){if(e[1]==="b")return r*parseInt(e.slice(2),2);if(e[1]==="x")return r*parseInt(e.slice(2),16);if(e[1]==="o")return r*parseInt(e.slice(2),8)}return r*parseInt(e,10)}function w7e(t){return Object.prototype.toString.call(t)==="[object Number]"&&t%1===0&&!$i.isNegativeZero(t)}function E7e(t){return!(t===null||!k7e.test(t)||t[t.length-1]==="_")}function S7e(t){var e,r;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function A7e(t,e){var r;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($i.isNegativeZero(t))return"-0.0";return r=t.toString(10),C7e.test(r)?r.replace("e",".e"):r}function _7e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||$i.isNegativeZero(t))}function R7e(t){return t===null?!1:dj.exec(t)!==null||pj.exec(t)!==null}function N7e(t){var e,r,n,i,a,s,l,u=0,h=null,f,d,p;if(e=dj.exec(t),e===null&&(e=pj.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,n,i,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function M7e(t){return t.toISOString()}function O7e(t){return t==="<<"||t===null}function B7e(t){if(t===null)return!1;var e,r,n=0,i=t.length,a=uD;for(r=0;r<i;r++)if(e=a.indexOf(t.charAt(r)),!(e>64)){if(e<0)return!1;n+=6}return n%8===0}function F7e(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=uD,s=0,l=[];for(e=0;e<i;e++)e%4===0&&e&&(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function $7e(t){var e="",r=0,n,i,a=t.length,s=uD;for(n=0;n<a;n++)n%3===0&&n&&(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[n];return i=a%3,i===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):i===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):i===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function z7e(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function H7e(t){if(t===null)return!0;var e=[],r,n,i,a,s,l=t;for(r=0,n=l.length;r<n;r+=1){if(i=l[r],s=!1,U7e.call(i)!=="[object Object]")return!1;for(a in i)if(V7e.call(i,a))if(!s)s=!0;else return!1;if(!s)return!1;if(e.indexOf(a)===-1)e.push(a);else return!1}return!0}function W7e(t){return t!==null?t:[]}function X7e(t){if(t===null)return!0;var e,r,n,i,a,s=t;for(a=new Array(s.length),e=0,r=s.length;e<r;e+=1){if(n=s[e],Y7e.call(n)!=="[object Object]"||(i=Object.keys(n),i.length!==1))return!1;a[e]=[i[0],n[i[0]]]}return!0}function j7e(t){if(t===null)return[];var e,r,n,i,a,s=t;for(a=new Array(s.length),e=0,r=s.length;e<r;e+=1)n=s[e],i=Object.keys(n),a[e]=[i[0],n[i[0]]];return a}function Z7e(t){if(t===null)return!0;var e,r=t;for(e in r)if(Q7e.call(r,e)&&r[e]!==null)return!1;return!0}function J7e(t){return t!==null?t:{}}function QX(t){return Object.prototype.toString.call(t)}function dc(t){return t===10||t===13}function Nd(t){return t===9||t===32}function Ls(t){return t===9||t===32||t===10||t===13}function am(t){return t===44||t===91||t===93||t===123||t===125}function aAe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function sAe(t){return t===120?2:t===117?4:t===85?8:0}function oAe(t){return 48<=t&&t<=57?t-48:-1}function ZX(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` | |
| 364 | +`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function lAe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}function cAe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||mj,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 Tj(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=QCe(r),new Ds(e,r)}function Qt(t,e){throw Tj(t,e)}function bw(t,e){t.onWarning&&t.onWarning.call(null,Tj(t,e))}function zh(t,e,r,n){var i,a,s,l;if(e<r){if(l=t.input.slice(e,r),n)for(i=0,a=l.length;i<a;i+=1)s=l.charCodeAt(i),s===9||32<=s&&s<=1114111||Qt(t,"expected valid JSON character");else rAe.test(l)&&Qt(t,"the stream contains non-printable characters");t.result+=l}}function ej(t,e,r,n){var i,a,s,l;for($i.isObject(r)||Qt(t,"cannot merge mappings; the provided source object is unacceptable"),i=Object.keys(r),s=0,l=i.length;s<l;s+=1)a=i[s],Gh.call(e,a)||(e[a]=r[a],n[a]=!0)}function sm(t,e,r,n,i,a,s,l,u){var h,f;if(Array.isArray(i))for(i=Array.prototype.slice.call(i),h=0,f=i.length;h<f;h+=1)Array.isArray(i[h])&&Qt(t,"nested arrays are not supported inside keys"),typeof i=="object"&&QX(i[h])==="[object Object]"&&(i[h]="[object Object]");if(typeof i=="object"&&QX(i)==="[object Object]"&&(i="[object Object]"),i=String(i),e===null&&(e={}),n==="tag:yaml.org,2002:merge")if(Array.isArray(a))for(h=0,f=a.length;h<f;h+=1)ej(t,e,a[h],r);else ej(t,e,a,r);else!t.json&&!Gh.call(r,i)&&Gh.call(e,i)&&(t.line=s||t.line,t.lineStart=l||t.lineStart,t.position=u||t.position,Qt(t,"duplicated mapping key")),i==="__proto__"?Object.defineProperty(e,i,{configurable:!0,enumerable:!0,writable:!0,value:a}):e[i]=a,delete r[i];return e}function hD(t){var e;e=t.input.charCodeAt(t.position),e===10?t.position++:e===13?(t.position++,t.input.charCodeAt(t.position)===10&&t.position++):Qt(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function Ci(t,e,r){for(var n=0,i=t.input.charCodeAt(t.position);i!==0;){for(;Nd(i);)i===9&&t.firstTabInLine===-1&&(t.firstTabInLine=t.position),i=t.input.charCodeAt(++t.position);if(e&&i===35)do i=t.input.charCodeAt(++t.position);while(i!==10&&i!==13&&i!==0);if(dc(i))for(hD(t),i=t.input.charCodeAt(t.position),n++,t.lineIndent=0;i===32;)t.lineIndent++,i=t.input.charCodeAt(++t.position);else break}return r!==-1&&n!==0&&t.lineIndent<r&&bw(t,"deficient indentation"),n}function kw(t){var e=t.position,r;return r=t.input.charCodeAt(e),!!((r===45||r===46)&&r===t.input.charCodeAt(e+1)&&r===t.input.charCodeAt(e+2)&&(e+=3,r=t.input.charCodeAt(e),r===0||Ls(r)))}function fD(t,e){e===1?t.result+=" ":e>1&&(t.result+=$i.repeat(` | |
| 365 | +`,e-1))}function uAe(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Ls(m)||am(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.charCodeAt(t.position+1),Ls(i)||r&&am(i)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(i=t.input.charCodeAt(t.position+1),Ls(i)||r&&am(i))break}else if(m===35){if(n=t.input.charCodeAt(t.position-1),Ls(n))break}else{if(t.position===t.lineStart&&kw(t)||r&&am(m))break;if(dc(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Ci(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(zh(t,a,s,!1),fD(t,t.line-u),a=s=t.position,l=!1),Nd(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return zh(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function hAe(t,e){var r,n,i;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(zh(t,n,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)n=t.position,t.position++,i=t.position;else return!0;else dc(r)?(zh(t,n,i,!0),fD(t,Ci(t,!1,e)),n=i=t.position):t.position===t.lineStart&&kw(t)?Qt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Qt(t,"unexpected end of the stream within a single quoted scalar")}function fAe(t,e){var r,n,i,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return zh(t,r,t.position,!0),t.position++,!0;if(l===92){if(zh(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),dc(l))Ci(t,!1,e);else if(l<256&&bj[l])t.result+=wj[l],t.position++;else if((s=sAe(l))>0){for(i=s,a=0;i>0;i--)l=t.input.charCodeAt(++t.position),(s=aAe(l))>=0?a=(a<<4)+s:Qt(t,"expected hexadecimal character");t.result+=lAe(a),t.position++}else Qt(t,"unknown escape sequence");r=n=t.position}else dc(l)?(zh(t,r,n,!0),fD(t,Ci(t,!1,e)),r=n=t.position):t.position===t.lineStart&&kw(t)?Qt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Qt(t,"unexpected end of the stream within a double quoted scalar")}function dAe(t,e){var r=!0,n,i,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&Qt(t,"expected the node content, but found ','"):Qt(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),Ls(h)&&(d=p=!0,t.position++,Ci(t,!0,e))),n=t.line,i=t.lineStart,a=t.position,om(t,e,vw,!1,!0),v=t.tag,y=t.result,Ci(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===n)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Ci(t,!0,e),om(t,e,vw,!1,!0),x=t.result),m?sm(t,l,g,v,y,x,n,i,a):d?l.push(sm(t,null,g,v,y,x,n,i,a)):l.push(y),Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}Qt(t,"unexpected end of the stream within a flow collection")}function pAe(t,e){var r,n,i=iD,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)n=!1;else if(d===62)n=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)iD===i?i=d===43?KX:tAe:Qt(t,"repeat of a chomping mode identifier");else if((f=oAe(d))>=0)f===0?Qt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Qt(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(Nd(d)){do d=t.input.charCodeAt(++t.position);while(Nd(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!dc(d)&&d!==0)}for(;d!==0;){for(hD(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndent<l)&&d===32;)t.lineIndent++,d=t.input.charCodeAt(++t.position);if(!s&&t.lineIndent>l&&(l=t.lineIndent),dc(d)){u++;continue}if(t.lineIndent<l){i===KX?t.result+=$i.repeat(` | |
| 366 | +`,a?1+u:u):i===iD&&a&&(t.result+=` | |
| 367 | +`);break}for(n?Nd(d)?(h=!0,t.result+=$i.repeat(` | |
| 368 | +`,a?1+u:u)):h?(h=!1,t.result+=$i.repeat(` | |
| 369 | +`,u+1)):u===0?a&&(t.result+=" "):t.result+=$i.repeat(` | |
| 370 | +`,u):t.result+=$i.repeat(` | |
| 371 | +`,a?1+u:u),a=!0,s=!0,u=0,r=t.position;!dc(d)&&d!==0;)d=t.input.charCodeAt(++t.position);zh(t,r,t.position,!1)}return!0}function tj(t,e){var r,n=t.tag,i=t.anchor,a=[],s,l=!1,u;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=a),u=t.input.charCodeAt(t.position);u!==0&&(t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Qt(t,"tab characters must not be used in indentation")),!(u!==45||(s=t.input.charCodeAt(t.position+1),!Ls(s))));){if(l=!0,t.position++,Ci(t,!0,-1)&&t.lineIndent<=e){a.push(null),u=t.input.charCodeAt(t.position);continue}if(r=t.line,om(t,e,yj,!1,!0),a.push(t.result),Ci(t,!0,-1),u=t.input.charCodeAt(t.position),(t.line===r||t.lineIndent>e)&&u!==0)Qt(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break}return l?(t.tag=n,t.anchor=i,t.kind="sequence",t.result=a,!0):!1}function mAe(t,e,r){var n,i,a,s,l,u,h=t.tag,f=t.anchor,d={},p=Object.create(null),m=null,g=null,y=null,v=!1,x=!1,b;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=d),b=t.input.charCodeAt(t.position);b!==0;){if(!v&&t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Qt(t,"tab characters must not be used in indentation")),n=t.input.charCodeAt(t.position+1),a=t.line,(b===63||b===58)&&Ls(n))b===63?(v&&(sm(t,d,p,m,g,null,s,l,u),m=g=y=null),x=!0,v=!0,i=!0):v?(v=!1,i=!0):Qt(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,b=n;else{if(s=t.line,l=t.lineStart,u=t.position,!om(t,r,gj,!1,!0))break;if(t.line===a){for(b=t.input.charCodeAt(t.position);Nd(b);)b=t.input.charCodeAt(++t.position);if(b===58)b=t.input.charCodeAt(++t.position),Ls(b)||Qt(t,"a whitespace character is expected after the key-value separator within a block mapping"),v&&(sm(t,d,p,m,g,null,s,l,u),m=g=y=null),x=!0,v=!1,i=!1,m=t.tag,g=t.result;else if(x)Qt(t,"can not read an implicit mapping pair; a colon is missed");else return t.tag=h,t.anchor=f,!0}else if(x)Qt(t,"can not read a block mapping entry; a multiline key may not be an implicit key");else return t.tag=h,t.anchor=f,!0}if((t.line===a||t.lineIndent>e)&&(v&&(s=t.line,l=t.lineStart,u=t.position),om(t,e,xw,!0,i)&&(v?g=t.result:y=t.result),v||(sm(t,d,p,m,g,y,s,l,u),m=g=y=null),Ci(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)Qt(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return v&&sm(t,d,p,m,g,null,s,l,u),x&&(t.tag=h,t.anchor=f,t.kind="mapping",t.result=d),x}function gAe(t){var e,r=!1,n=!1,i,a,s;if(s=t.input.charCodeAt(t.position),s!==33)return!1;if(t.tag!==null&&Qt(t,"duplication of a tag property"),s=t.input.charCodeAt(++t.position),s===60?(r=!0,s=t.input.charCodeAt(++t.position)):s===33?(n=!0,i="!!",s=t.input.charCodeAt(++t.position)):i="!",e=t.position,r){do s=t.input.charCodeAt(++t.position);while(s!==0&&s!==62);t.position<t.length?(a=t.input.slice(e,t.position),s=t.input.charCodeAt(++t.position)):Qt(t,"unexpected end of the stream within a verbatim tag")}else{for(;s!==0&&!Ls(s);)s===33&&(n?Qt(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(e-1,t.position+1),vj.test(i)||Qt(t,"named tag handle cannot contain such characters"),n=!0,e=t.position+1)),s=t.input.charCodeAt(++t.position);a=t.input.slice(e,t.position),iAe.test(a)&&Qt(t,"tag suffix cannot contain flow indicator characters")}a&&!xj.test(a)&&Qt(t,"tag name cannot contain such characters: "+a);try{a=decodeURIComponent(a)}catch{Qt(t,"tag name is malformed: "+a)}return r?t.tag=a:Gh.call(t.tagMap,i)?t.tag=t.tagMap[i]+a:i==="!"?t.tag="!"+a:i==="!!"?t.tag="tag:yaml.org,2002:"+a:Qt(t,'undeclared tag handle "'+i+'"'),!0}function yAe(t){var e,r;if(r=t.input.charCodeAt(t.position),r!==38)return!1;for(t.anchor!==null&&Qt(t,"duplication of an anchor property"),r=t.input.charCodeAt(++t.position),e=t.position;r!==0&&!Ls(r)&&!am(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&Qt(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function vAe(t){var e,r,n;if(n=t.input.charCodeAt(t.position),n!==42)return!1;for(n=t.input.charCodeAt(++t.position),e=t.position;n!==0&&!Ls(n)&&!am(n);)n=t.input.charCodeAt(++t.position);return t.position===e&&Qt(t,"name of an alias node must contain at least one character"),r=t.input.slice(e,t.position),Gh.call(t.anchorMap,r)||Qt(t,'unidentified alias "'+r+'"'),t.result=t.anchorMap[r],Ci(t,!0,-1),!0}function om(t,e,r,n,i){var a,s,l,u=1,h=!1,f=!1,d,p,m,g,y,v;if(t.listener!==null&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,a=s=l=xw===r||yj===r,n&&Ci(t,!0,-1)&&(h=!0,t.lineIndent>e?u=1:t.lineIndent===e?u=0:t.lineIndent<e&&(u=-1)),u===1)for(;gAe(t)||yAe(t);)Ci(t,!0,-1)?(h=!0,l=a,t.lineIndent>e?u=1:t.lineIndent===e?u=0:t.lineIndent<e&&(u=-1)):l=!1;if(l&&(l=h||i),(u===1||xw===r)&&(vw===r||gj===r?y=e:y=e+1,v=t.position-t.lineStart,u===1?l&&(tj(t,v)||mAe(t,v,y))||dAe(t,y)?f=!0:(s&&pAe(t,y)||hAe(t,y)||fAe(t,y)?f=!0:vAe(t)?(f=!0,(t.tag!==null||t.anchor!==null)&&Qt(t,"alias node should not have any properties")):uAe(t,y,vw===r)&&(f=!0,t.tag===null&&(t.tag="?")),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):u===0&&(f=l&&tj(t,v))),t.tag===null)t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);else if(t.tag==="?"){for(t.result!==null&&t.kind!=="scalar"&&Qt(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d<p;d+=1)if(g=t.implicitTypes[d],g.resolve(t.result)){t.result=g.construct(t.result),t.tag=g.tag,t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);break}}else if(t.tag!=="!"){if(Gh.call(t.typeMap[t.kind||"fallback"],t.tag))g=t.typeMap[t.kind||"fallback"][t.tag];else for(g=null,m=t.typeMap.multi[t.kind||"fallback"],d=0,p=m.length;d<p;d+=1)if(t.tag.slice(0,m[d].tag.length)===m[d].tag){g=m[d];break}g||Qt(t,"unknown tag !<"+t.tag+">"),t.result!==null&&g.kind!==t.kind&&Qt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Qt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function xAe(t){var e=t.position,r,n,i,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Ci(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!Ls(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(r,t.position),i=[],n.length<1&&Qt(t,"directive name must not be less than one character in length");s!==0;){for(;Nd(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!dc(s));break}if(dc(s))break;for(r=t.position;s!==0&&!Ls(s);)s=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}s!==0&&hD(t),Gh.call(JX,n)?JX[n](t,n,i):bw(t,'unknown document directive "'+n+'"')}if(Ci(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Ci(t,!0,-1)):a&&Qt(t,"directives end mark is expected"),om(t,t.lineIndent-1,xw,!1,!0),Ci(t,!0,-1),t.checkLineBreaks&&nAe.test(t.input.slice(e,t.position))&&bw(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&kw(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Ci(t,!0,-1));return}if(t.position<t.length-1)Qt(t,"end of the stream or a document separator is expected");else return}function kj(t,e){t=String(t),e=e||{},t.length!==0&&(t.charCodeAt(t.length-1)!==10&&t.charCodeAt(t.length-1)!==13&&(t+=` | |
| 372 | +`),t.charCodeAt(0)===65279&&(t=t.slice(1)));var r=new cAe(t,e),n=t.indexOf("\0");for(n!==-1&&(r.position=n,Qt(r,"null byte is not allowed in input")),r.input+="\0";r.input.charCodeAt(r.position)===32;)r.lineIndent+=1,r.position+=1;for(;r.position<r.length-1;)xAe(r);return r.documents}function bAe(t,e,r){e!==null&&typeof e=="object"&&typeof r>"u"&&(r=e,e=null);var n=kj(t,r);if(typeof e!="function")return n;for(var i=0,a=n.length;i<a;i+=1)e(n[i])}function wAe(t,e){var r=kj(t,e);if(r.length!==0){if(r.length===1)return r[0];throw new Ds("expected a single document in the stream, but found more")}}function VAe(t,e){var r,n,i,a,s,l,u;if(e===null)return{};for(r={},n=Object.keys(e),i=0,a=n.length;i<a;i+=1)s=n[i],l=String(e[s]),s.slice(0,2)==="!!"&&(s="tag:yaml.org,2002:"+s.slice(2)),u=t.compiledTypeMap.fallback[s],u&&Cj.call(u.styleAliases,l)&&(l=u.styleAliases[l]),r[s]=l;return r}function UAe(t){var e,r,n;if(e=t.toString(16).toUpperCase(),t<=255)r="x",n=2;else if(t<=65535)r="u",n=4;else if(t<=4294967295)r="U",n=8;else throw new Ds("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+r+$i.repeat("0",n-e.length)+e}function WAe(t){this.schema=t.schema||mj,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=$i.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=VAe(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType=t.quotingType==='"'?c2:HAe,this.forceQuotes=t.forceQuotes||!1,this.replacer=typeof t.replacer=="function"?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function rj(t,e){for(var r=$i.repeat(" ",e),n=0,i=-1,a="",s,l=t.length;n<l;)i=t.indexOf(` | |
| 373 | +`,n),i===-1?(s=t.slice(n),n=l):(s=t.slice(n,i+1),n=i+1),s.length&&s!==` | |
| 374 | +`&&(a+=r),a+=s;return a}function oD(t,e){return` | |
| 375 | +`+$i.repeat(" ",t.indent*e)}function qAe(t,e){var r,n,i;for(r=0,n=t.implicitTypes.length;r<n;r+=1)if(i=t.implicitTypes[r],i.resolve(e))return!0;return!1}function Tw(t){return t===CAe||t===EAe}function u2(t){return 32<=t&&t<=126||161<=t&&t<=55295&&t!==8232&&t!==8233||57344<=t&&t<=65533&&t!==dD||65536<=t&&t<=1114111}function nj(t){return u2(t)&&t!==dD&&t!==SAe&&t!==l2}function ij(t,e,r){var n=nj(t),i=n&&!Tw(t);return(r?n:n&&t!==Aj&&t!==_j&&t!==Dj&&t!==Lj&&t!==Rj)&&t!==sD&&!(e===ww&&!i)||nj(e)&&!Tw(e)&&t===sD||e===ww&&i}function YAe(t){return u2(t)&&t!==dD&&!Tw(t)&&t!==MAe&&t!==PAe&&t!==ww&&t!==Aj&&t!==_j&&t!==Dj&&t!==Lj&&t!==Rj&&t!==sD&&t!==LAe&&t!==NAe&&t!==AAe&&t!==$Ae&&t!==IAe&&t!==OAe&&t!==RAe&&t!==_Ae&&t!==DAe&&t!==BAe&&t!==FAe}function XAe(t){return!Tw(t)&&t!==ww}function s2(t,e){var r=t.charCodeAt(e),n;return r>=55296&&r<=56319&&e+1<t.length&&(n=t.charCodeAt(e+1),n>=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}function Nj(t){var e=/^\n* /;return e.test(t)}function jAe(t,e,r,n,i,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=n!==-1,g=-1,y=YAe(s2(t,0))&&XAe(s2(t,t.length-1));if(e||s)for(u=0;u<t.length;h>=65536?u+=2:u++){if(h=s2(t,u),!u2(h))return im;y=y&&ij(h,f,l),f=h}else{for(u=0;u<t.length;h>=65536?u+=2:u++){if(h=s2(t,u),h===l2)d=!0,m&&(p=p||u-g-1>n&&t[g+1]!==" ",g=u);else if(!u2(h))return im;y=y&&ij(h,f,l),f=h}p=p||m&&u-g-1>n&&t[g+1]!==" "}return!d&&!p?y&&!s&&!i(t)?Mj:a===c2?im:lD:r>9&&Nj(t)?im:s?a===c2?im:lD:p?Oj:Ij}function KAe(t,e,r,n,i){t.dump=function(){if(e.length===0)return t.quotingType===c2?'""':"''";if(!t.noCompatMode&&(zAe.indexOf(e)!==-1||GAe.test(e)))return t.quotingType===c2?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return qAe(t,h)}switch(o(u,"testAmbiguity"),jAe(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!n,i)){case Mj:return e;case lD:return"'"+e.replace(/'/g,"''")+"'";case Ij:return"|"+aj(e,t.indent)+sj(rj(e,a));case Oj:return">"+aj(e,t.indent)+sj(rj(QAe(e,s),a));case im:return'"'+ZAe(e)+'"';default:throw new Ds("impossible error: invalid scalar style")}}()}function aj(t,e){var r=Nj(t)?String(e):"",n=t[t.length-1]===` | |
| 376 | +`,i=n&&(t[t.length-2]===` | |
| 377 | +`||t===` | |
| 378 | +`),a=i?"+":n?"":"-";return r+a+` | |
| 379 | +`}function sj(t){return t[t.length-1]===` | |
| 380 | +`?t.slice(0,-1):t}function QAe(t,e){for(var r=/(\n+)([^\n]*)/g,n=function(){var h=t.indexOf(` | |
| 381 | +`);return h=h!==-1?h:t.length,r.lastIndex=h,oj(t.slice(0,h),e)}(),i=t[0]===` | |
| 382 | +`||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",n+=l+(!i&&!a&&u!==""?` | |
| 383 | +`:"")+oj(u,e),i=a}return n}function oj(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,n,i=0,a,s=0,l=0,u="";n=r.exec(t);)l=n.index,l-i>e&&(a=s>i?s:l,u+=` | |
| 384 | +`+t.slice(i,a),i=a+1),s=l;return u+=` | |
| 385 | +`,t.length-i>e&&s>i?u+=t.slice(i,s)+` | |
| 386 | +`+t.slice(s+1):u+=t.slice(i),u.slice(1)}function ZAe(t){for(var e="",r=0,n,i=0;i<t.length;r>=65536?i+=2:i++)r=s2(t,i),n=Da[r],!n&&u2(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||UAe(r);return e}function JAe(t,e,r){var n="",i=t.tag,a,s,l;for(a=0,s=r.length;a<s;a+=1)l=r[a],t.replacer&&(l=t.replacer.call(r,String(a),l)),(Au(t,e,l,!1,!1)||typeof l>"u"&&Au(t,e,null,!1,!1))&&(n!==""&&(n+=","+(t.condenseFlow?"":" ")),n+=t.dump);t.tag=i,t.dump="["+n+"]"}function lj(t,e,r,n){var i="",a=t.tag,s,l,u;for(s=0,l=r.length;s<l;s+=1)u=r[s],t.replacer&&(u=t.replacer.call(r,String(s),u)),(Au(t,e+1,u,!0,!0,!1,!0)||typeof u>"u"&&Au(t,e+1,null,!0,!0,!1,!0))&&((!n||i!=="")&&(i+=oD(t,e)),t.dump&&l2===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=a,t.dump=i||"[]"}function e8e(t,e,r){var n="",i=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s<l;s+=1)f="",n!==""&&(f+=", "),t.condenseFlow&&(f+='"'),u=a[s],h=r[u],t.replacer&&(h=t.replacer.call(r,u,h)),Au(t,e,u,!1,!1)&&(t.dump.length>1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Au(t,e,h,!1,!1)&&(f+=t.dump,n+=f));t.tag=i,t.dump="{"+n+"}"}function t8e(t,e,r,n){var i="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new Ds("sortKeys must be a boolean or a function");for(l=0,u=s.length;l<u;l+=1)p="",(!n||i!=="")&&(p+=oD(t,e)),h=s[l],f=r[h],t.replacer&&(f=t.replacer.call(r,h,f)),Au(t,e+1,h,!0,!0,!0)&&(d=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,d&&(t.dump&&l2===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=oD(t,e)),Au(t,e+1,f,!0,d)&&(t.dump&&l2===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,i+=p));t.tag=a,t.dump=i||"{}"}function cj(t,e,r){var n,i,a,s,l,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;a<s;a+=1)if(l=i[a],(l.instanceOf||l.predicate)&&(!l.instanceOf||typeof e=="object"&&e instanceof l.instanceOf)&&(!l.predicate||l.predicate(e))){if(r?l.multi&&l.representName?t.tag=l.representName(e):t.tag=l.tag:t.tag="?",l.represent){if(u=t.styleMap[l.tag]||l.defaultStyle,Sj.call(l.represent)==="[object Function]")n=l.represent(e,u);else if(Cj.call(l.represent,u))n=l.represent[u](e,u);else throw new Ds("!<"+l.tag+'> tag resolver accepts not "'+u+'" style');t.dump=n}return!0}return!1}function Au(t,e,r,n,i,a,s){t.tag=null,t.dump=r,cj(t,r,!1)||cj(t,r,!0);var l=Sj.call(t.dump),u=n,h;n&&(n=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(i=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")n&&Object.keys(t.dump).length!==0?(t8e(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(e8e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")n&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?lj(t,e-1,t.dump,i):lj(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(JAe(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&KAe(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Ds("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function r8e(t,e){var r=[],n=[],i,a;for(cD(t,r,n),i=0,a=n.length;i<a;i+=1)e.duplicates.push(r[n[i]]);e.usedDuplicates=new Array(a)}function cD(t,e,r){var n,i,a;if(t!==null&&typeof t=="object")if(i=e.indexOf(t),i!==-1)r.indexOf(i)===-1&&r.push(i);else if(e.push(t),Array.isArray(t))for(i=0,a=t.length;i<a;i+=1)cD(t[i],e,r);else for(n=Object.keys(t),i=0,a=n.length;i<a;i+=1)cD(t[n[i]],e,r)}function n8e(t,e){e=e||{};var r=new WAe(e);r.noRefs||r8e(t,r);var n=t;return r.replacer&&(n=r.replacer.call({"":n},"",n)),Au(r,0,n,!0,!0)?r.dump+` | |
| 387 | +`:""}function pD(t,e){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+e+" instead, which is now safe by default.")}}var HCe,WCe,qCe,YCe,XCe,jCe,$i,Ds,QCe,ZCe,JCe,_a,n7e,i7e,a7e,s7e,o7e,h7e,m7e,T7e,k7e,C7e,D7e,fj,L7e,dj,pj,I7e,P7e,uD,G7e,V7e,U7e,q7e,Y7e,K7e,Q7e,eAe,mj,Gh,vw,gj,yj,xw,iD,tAe,KX,rAe,nAe,iAe,vj,xj,bj,wj,Rd,JX,TAe,kAe,Ej,Sj,Cj,dD,EAe,l2,SAe,CAe,AAe,_Ae,sD,DAe,LAe,RAe,NAe,Aj,MAe,ww,IAe,OAe,PAe,BAe,_j,Dj,FAe,Lj,$Ae,Rj,Da,zAe,GAe,HAe,c2,Mj,lD,Ij,Oj,im,i8e,a8e,lm,cm,okt,lkt,ckt,ukt,hkt,Ew=N(()=>{"use strict";o(uj,"isNothing");o($Ce,"isObject");o(zCe,"toArray");o(GCe,"extend");o(VCe,"repeat");o(UCe,"isNegativeZero");HCe=uj,WCe=$Ce,qCe=zCe,YCe=VCe,XCe=UCe,jCe=GCe,$i={isNothing:HCe,isObject:WCe,toArray:qCe,repeat:YCe,isNegativeZero:XCe,extend:jCe};o(hj,"formatError");o(o2,"YAMLException$1");o2.prototype=Object.create(Error.prototype);o2.prototype.constructor=o2;o2.prototype.toString=o(function(e){return this.name+": "+hj(this,e)},"toString");Ds=o2;o(rD,"getLine");o(nD,"padStart");o(KCe,"makeSnippet");QCe=KCe,ZCe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],JCe=["scalar","sequence","mapping"];o(e7e,"compileStyleAliases");o(t7e,"Type$1");_a=t7e;o(jX,"compileList");o(r7e,"compileMap");o(aD,"Schema$1");aD.prototype.extend=o(function(e){var r=[],n=[];if(e instanceof _a)n.push(e);else if(Array.isArray(e))n=n.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit));else throw new Ds("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof _a))throw new Ds("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Ds("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Ds("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(a){if(!(a instanceof _a))throw new Ds("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(aD.prototype);return i.implicit=(this.implicit||[]).concat(r),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=jX(i,"implicit"),i.compiledExplicit=jX(i,"explicit"),i.compiledTypeMap=r7e(i.compiledImplicit,i.compiledExplicit),i},"extend");n7e=aD,i7e=new _a("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),a7e=new _a("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),s7e=new _a("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),o7e=new n7e({explicit:[i7e,a7e,s7e]});o(l7e,"resolveYamlNull");o(c7e,"constructYamlNull");o(u7e,"isNull");h7e=new _a("tag:yaml.org,2002:null",{kind:"scalar",resolve:l7e,construct:c7e,predicate:u7e,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(f7e,"resolveYamlBoolean");o(d7e,"constructYamlBoolean");o(p7e,"isBoolean");m7e=new _a("tag:yaml.org,2002:bool",{kind:"scalar",resolve:f7e,construct:d7e,predicate:p7e,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(g7e,"isHexCode");o(y7e,"isOctCode");o(v7e,"isDecCode");o(x7e,"resolveYamlInteger");o(b7e,"constructYamlInteger");o(w7e,"isInteger");T7e=new _a("tag:yaml.org,2002:int",{kind:"scalar",resolve:x7e,construct:b7e,predicate:w7e,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),k7e=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(E7e,"resolveYamlFloat");o(S7e,"constructYamlFloat");C7e=/^[-+]?[0-9]+e/;o(A7e,"representYamlFloat");o(_7e,"isFloat");D7e=new _a("tag:yaml.org,2002:float",{kind:"scalar",resolve:E7e,construct:S7e,predicate:_7e,represent:A7e,defaultStyle:"lowercase"}),fj=o7e.extend({implicit:[h7e,m7e,T7e,D7e]}),L7e=fj,dj=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),pj=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]))?))?$");o(R7e,"resolveYamlTimestamp");o(N7e,"constructYamlTimestamp");o(M7e,"representYamlTimestamp");I7e=new _a("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:R7e,construct:N7e,instanceOf:Date,represent:M7e});o(O7e,"resolveYamlMerge");P7e=new _a("tag:yaml.org,2002:merge",{kind:"scalar",resolve:O7e}),uD=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= | |
| 388 | +\r`;o(B7e,"resolveYamlBinary");o(F7e,"constructYamlBinary");o($7e,"representYamlBinary");o(z7e,"isBinary");G7e=new _a("tag:yaml.org,2002:binary",{kind:"scalar",resolve:B7e,construct:F7e,predicate:z7e,represent:$7e}),V7e=Object.prototype.hasOwnProperty,U7e=Object.prototype.toString;o(H7e,"resolveYamlOmap");o(W7e,"constructYamlOmap");q7e=new _a("tag:yaml.org,2002:omap",{kind:"sequence",resolve:H7e,construct:W7e}),Y7e=Object.prototype.toString;o(X7e,"resolveYamlPairs");o(j7e,"constructYamlPairs");K7e=new _a("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:X7e,construct:j7e}),Q7e=Object.prototype.hasOwnProperty;o(Z7e,"resolveYamlSet");o(J7e,"constructYamlSet");eAe=new _a("tag:yaml.org,2002:set",{kind:"mapping",resolve:Z7e,construct:J7e}),mj=L7e.extend({implicit:[I7e,P7e],explicit:[G7e,q7e,K7e,eAe]}),Gh=Object.prototype.hasOwnProperty,vw=1,gj=2,yj=3,xw=4,iD=1,tAe=2,KX=3,rAe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,nAe=/[\x85\u2028\u2029]/,iAe=/[,\[\]\{\}]/,vj=/^(?:!|!!|![a-z\-]+!)$/i,xj=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(QX,"_class");o(dc,"is_EOL");o(Nd,"is_WHITE_SPACE");o(Ls,"is_WS_OR_EOL");o(am,"is_FLOW_INDICATOR");o(aAe,"fromHexCode");o(sAe,"escapedHexLen");o(oAe,"fromDecimalCode");o(ZX,"simpleEscapeSequence");o(lAe,"charFromCodepoint");bj=new Array(256),wj=new Array(256);for(Rd=0;Rd<256;Rd++)bj[Rd]=ZX(Rd)?1:0,wj[Rd]=ZX(Rd);o(cAe,"State$1");o(Tj,"generateError");o(Qt,"throwError");o(bw,"throwWarning");JX={YAML:o(function(e,r,n){var i,a,s;e.version!==null&&Qt(e,"duplication of %YAML directive"),n.length!==1&&Qt(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Qt(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),s=parseInt(i[2],10),a!==1&&Qt(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&bw(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,n){var i,a;n.length!==2&&Qt(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],vj.test(i)||Qt(e,"ill-formed tag handle (first argument) of the TAG directive"),Gh.call(e.tagMap,i)&&Qt(e,'there is a previously declared suffix for "'+i+'" tag handle'),xj.test(a)||Qt(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{Qt(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a},"handleTagDirective")};o(zh,"captureSegment");o(ej,"mergeMappings");o(sm,"storeMappingPair");o(hD,"readLineBreak");o(Ci,"skipSeparationSpace");o(kw,"testDocumentSeparator");o(fD,"writeFoldedLines");o(uAe,"readPlainScalar");o(hAe,"readSingleQuotedScalar");o(fAe,"readDoubleQuotedScalar");o(dAe,"readFlowCollection");o(pAe,"readBlockScalar");o(tj,"readBlockSequence");o(mAe,"readBlockMapping");o(gAe,"readTagProperty");o(yAe,"readAnchorProperty");o(vAe,"readAlias");o(om,"composeNode");o(xAe,"readDocument");o(kj,"loadDocuments");o(bAe,"loadAll$1");o(wAe,"load$1");TAe=bAe,kAe=wAe,Ej={loadAll:TAe,load:kAe},Sj=Object.prototype.toString,Cj=Object.prototype.hasOwnProperty,dD=65279,EAe=9,l2=10,SAe=13,CAe=32,AAe=33,_Ae=34,sD=35,DAe=37,LAe=38,RAe=39,NAe=42,Aj=44,MAe=45,ww=58,IAe=61,OAe=62,PAe=63,BAe=64,_j=91,Dj=93,FAe=96,Lj=123,$Ae=124,Rj=125,Da={};Da[0]="\\0";Da[7]="\\a";Da[8]="\\b";Da[9]="\\t";Da[10]="\\n";Da[11]="\\v";Da[12]="\\f";Da[13]="\\r";Da[27]="\\e";Da[34]='\\"';Da[92]="\\\\";Da[133]="\\N";Da[160]="\\_";Da[8232]="\\L";Da[8233]="\\P";zAe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],GAe=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(VAe,"compileStyleMap");o(UAe,"encodeHex");HAe=1,c2=2;o(WAe,"State");o(rj,"indentString");o(oD,"generateNextLine");o(qAe,"testImplicitResolving");o(Tw,"isWhitespace");o(u2,"isPrintable");o(nj,"isNsCharOrWhitespace");o(ij,"isPlainSafe");o(YAe,"isPlainSafeFirst");o(XAe,"isPlainSafeLast");o(s2,"codePointAt");o(Nj,"needIndentIndicator");Mj=1,lD=2,Ij=3,Oj=4,im=5;o(jAe,"chooseScalarStyle");o(KAe,"writeScalar");o(aj,"blockHeader");o(sj,"dropEndingNewline");o(QAe,"foldString");o(oj,"foldLine");o(ZAe,"escapeString");o(JAe,"writeFlowSequence");o(lj,"writeBlockSequence");o(e8e,"writeFlowMapping");o(t8e,"writeBlockMapping");o(cj,"detectType");o(Au,"writeNode");o(r8e,"getDuplicateReferences");o(cD,"inspectNode");o(n8e,"dump$1");i8e=n8e,a8e={dump:i8e};o(pD,"renamed");lm=fj,cm=Ej.load,okt=Ej.loadAll,lkt=a8e.dump,ckt=pD("safeLoad","load"),ukt=pD("safeLoadAll","loadAll"),hkt=pD("safeDump","dump")});function vD(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function Gj(t){Id=t}function nn(t,e=""){let r=typeof t=="string"?t:t.source,n={replace:o((i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(ts.caret,"$1"),r=r.replace(i,s),n},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return n}function pc(t,e){if(e){if(ts.escapeTest.test(t))return t.replace(ts.escapeReplace,Bj)}else if(ts.escapeTestNoEncode.test(t))return t.replace(ts.escapeReplaceNoEncode,Bj);return t}function Fj(t){try{t=encodeURI(t).replace(ts.percentDecode,"%")}catch{return null}return t}function $j(t,e){let r=t.replace(ts.findPipe,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),n=r.split(ts.splitPipe),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push("");for(;i<n.length;i++)n[i]=n[i].trim().replace(ts.slashPipe,"|");return n}function f2(t,e,r){let n=t.length;if(n===0)return"";let i=0;for(;i<n&&t.charAt(n-i-1)===e;)i++;return t.slice(0,n-i)}function $8e(t,e){if(t.indexOf(e[1])===-1)return-1;let r=0;for(let n=0;n<t.length;n++)if(t[n]==="\\")n++;else if(t[n]===e[0])r++;else if(t[n]===e[1]&&(r--,r<0))return n;return-1}function zj(t,e,r,n,i){let a=e.href,s=e.title||null,l=t[1].replace(i.other.outputLinkReplace,"$1");if(t[0].charAt(0)!=="!"){n.state.inLink=!0;let u={type:"link",raw:r,href:a,title:s,text:l,tokens:n.inlineTokens(l)};return n.state.inLink=!1,u}return{type:"image",raw:r,href:a,title:s,text:l}}function z8e(t,e,r){let n=t.match(r.other.indentCodeCompensation);if(n===null)return e;let i=n[1];return e.split(` | |
| 389 | +`).map(a=>{let s=a.match(r.other.beginningSpace);if(s===null)return a;let[l]=s;return l.length>=i.length?a.slice(i.length):a}).join(` | |
| 390 | +`)}function Jr(t,e){return Md.parse(t,e)}var Id,d2,ts,s8e,o8e,l8e,m2,c8e,xD,Vj,Uj,u8e,bD,h8e,wD,f8e,d8e,Aw,TD,p8e,Hj,m8e,kD,Pj,g8e,y8e,v8e,x8e,Wj,b8e,_w,ED,qj,w8e,Yj,T8e,k8e,E8e,Xj,S8e,C8e,jj,A8e,_8e,D8e,L8e,R8e,N8e,M8e,Cw,I8e,Kj,Qj,O8e,SD,P8e,gD,B8e,Sw,h2,F8e,Bj,hm,Al,fm,p2,_l,um,yD,Md,dkt,pkt,mkt,gkt,ykt,vkt,xkt,Zj=N(()=>{"use strict";o(vD,"_getDefaults");Id=vD();o(Gj,"changeDefaults");d2={exec:o(()=>null,"exec")};o(nn,"edit");ts={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:o(t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),"listItemRegex"),nextBulletRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),"nextBulletRegex"),hrRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),"hrRegex"),fencesBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),"fencesBeginRegex"),headingBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),"headingBeginRegex"),htmlBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),"htmlBeginRegex")},s8e=/^(?:[ \t]*(?:\n|$))+/,o8e=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,l8e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,m2=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,c8e=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,xD=/(?:[*+-]|\d{1,9}[.)])/,Vj=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Uj=nn(Vj).replace(/bull/g,xD).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),u8e=nn(Vj).replace(/bull/g,xD).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),bD=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,h8e=/^[^\n]+/,wD=/(?!\s*\])(?:\\.|[^\[\]\\])+/,f8e=nn(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",wD).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),d8e=nn(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,xD).getRegex(),Aw="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",TD=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,p8e=nn("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",TD).replace("tag",Aw).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Hj=nn(bD).replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex(),m8e=nn(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Hj).getRegex(),kD={blockquote:m8e,code:o8e,def:f8e,fences:l8e,heading:c8e,hr:m2,html:p8e,lheading:Uj,list:d8e,newline:s8e,paragraph:Hj,table:d2,text:h8e},Pj=nn("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex(),g8e={...kD,lheading:u8e,table:Pj,paragraph:nn(bD).replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Pj).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex()},y8e={...kD,html:nn(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",TD).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:d2,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:nn(bD).replace("hr",m2).replace("heading",` *#{1,6} *[^ | |
| 391 | +]`).replace("lheading",Uj).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},v8e=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,x8e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Wj=/^( {2,}|\\)\n(?!\s*$)/,b8e=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,_w=/[\p{P}\p{S}]/u,ED=/[\s\p{P}\p{S}]/u,qj=/[^\s\p{P}\p{S}]/u,w8e=nn(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,ED).getRegex(),Yj=/(?!~)[\p{P}\p{S}]/u,T8e=/(?!~)[\s\p{P}\p{S}]/u,k8e=/(?:[^\s\p{P}\p{S}]|~)/u,E8e=/\[[^[\]]*?\]\((?:\\.|[^\\\(\)]|\((?:\\.|[^\\\(\)])*\))*\)|`[^`]*?`|<[^<>]*?>/g,Xj=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,S8e=nn(Xj,"u").replace(/punct/g,_w).getRegex(),C8e=nn(Xj,"u").replace(/punct/g,Yj).getRegex(),jj="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",A8e=nn(jj,"gu").replace(/notPunctSpace/g,qj).replace(/punctSpace/g,ED).replace(/punct/g,_w).getRegex(),_8e=nn(jj,"gu").replace(/notPunctSpace/g,k8e).replace(/punctSpace/g,T8e).replace(/punct/g,Yj).getRegex(),D8e=nn("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,qj).replace(/punctSpace/g,ED).replace(/punct/g,_w).getRegex(),L8e=nn(/\\(punct)/,"gu").replace(/punct/g,_w).getRegex(),R8e=nn(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),N8e=nn(TD).replace("(?:-->|$)","-->").getRegex(),M8e=nn("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",N8e).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Cw=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,I8e=nn(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",Cw).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Kj=nn(/^!?\[(label)\]\[(ref)\]/).replace("label",Cw).replace("ref",wD).getRegex(),Qj=nn(/^!?\[(ref)\](?:\[\])?/).replace("ref",wD).getRegex(),O8e=nn("reflink|nolink(?!\\()","g").replace("reflink",Kj).replace("nolink",Qj).getRegex(),SD={_backpedal:d2,anyPunctuation:L8e,autolink:R8e,blockSkip:E8e,br:Wj,code:x8e,del:d2,emStrongLDelim:S8e,emStrongRDelimAst:A8e,emStrongRDelimUnd:D8e,escape:v8e,link:I8e,nolink:Qj,punctuation:w8e,reflink:Kj,reflinkSearch:O8e,tag:M8e,text:b8e,url:d2},P8e={...SD,link:nn(/^!?\[(label)\]\((.*?)\)/).replace("label",Cw).getRegex(),reflink:nn(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Cw).getRegex()},gD={...SD,emStrongRDelimAst:_8e,emStrongLDelim:C8e,url:nn(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},B8e={...gD,br:nn(Wj).replace("{2,}","*").getRegex(),text:nn(gD.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},Sw={normal:kD,gfm:g8e,pedantic:y8e},h2={normal:SD,gfm:gD,breaks:B8e,pedantic:P8e},F8e={"&":"&","<":"<",">":">",'"':""","'":"'"},Bj=o(t=>F8e[t],"getEscapeReplacement");o(pc,"escape");o(Fj,"cleanUrl");o($j,"splitCells");o(f2,"rtrim");o($8e,"findClosingBracket");o(zj,"outputLink");o(z8e,"indentCodeCompensation");hm=class{static{o(this,"_Tokenizer")}options;rules;lexer;constructor(e){this.options=e||Id}space(e){let r=this.rules.block.newline.exec(e);if(r&&r[0].length>0)return{type:"space",raw:r[0]}}code(e){let r=this.rules.block.code.exec(e);if(r){let n=r[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:r[0],codeBlockStyle:"indented",text:this.options.pedantic?n:f2(n,` | |
| 392 | +`)}}}fences(e){let r=this.rules.block.fences.exec(e);if(r){let n=r[0],i=z8e(n,r[3]||"",this.rules);return{type:"code",raw:n,lang:r[2]?r[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):r[2],text:i}}}heading(e){let r=this.rules.block.heading.exec(e);if(r){let n=r[2].trim();if(this.rules.other.endingHash.test(n)){let i=f2(n,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(n=i.trim())}return{type:"heading",raw:r[0],depth:r[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let r=this.rules.block.hr.exec(e);if(r)return{type:"hr",raw:f2(r[0],` | |
| 393 | +`)}}blockquote(e){let r=this.rules.block.blockquote.exec(e);if(r){let n=f2(r[0],` | |
| 394 | +`).split(` | |
| 395 | +`),i="",a="",s=[];for(;n.length>0;){let l=!1,u=[],h;for(h=0;h<n.length;h++)if(this.rules.other.blockquoteStart.test(n[h]))u.push(n[h]),l=!0;else if(!l)u.push(n[h]);else break;n=n.slice(h);let f=u.join(` | |
| 396 | +`),d=f.replace(this.rules.other.blockquoteSetextReplace,` | |
| 397 | + $1`).replace(this.rules.other.blockquoteSetextReplace2,"");i=i?`${i} | |
| 398 | +${f}`:f,a=a?`${a} | |
| 399 | +${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,s,!0),this.lexer.state.top=p,n.length===0)break;let m=s.at(-1);if(m?.type==="code")break;if(m?.type==="blockquote"){let g=m,y=g.raw+` | |
| 400 | +`+n.join(` | |
| 401 | +`),v=this.blockquote(y);s[s.length-1]=v,i=i.substring(0,i.length-g.raw.length)+v.raw,a=a.substring(0,a.length-g.text.length)+v.text;break}else if(m?.type==="list"){let g=m,y=g.raw+` | |
| 402 | +`+n.join(` | |
| 403 | +`),v=this.list(y);s[s.length-1]=v,i=i.substring(0,i.length-m.raw.length)+v.raw,a=a.substring(0,a.length-g.raw.length)+v.raw,n=y.substring(s.at(-1).raw.length).split(` | |
| 404 | +`);continue}}return{type:"blockquote",raw:i,tokens:s,text:a}}}list(e){let r=this.rules.block.list.exec(e);if(r){let n=r[1].trim(),i=n.length>1,a={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let s=this.rules.other.listItemRegex(n),l=!1;for(;e;){let h=!1,f="",d="";if(!(r=s.exec(e))||this.rules.block.hr.test(e))break;f=r[0],e=e.substring(f.length);let p=r[2].split(` | |
| 405 | +`,1)[0].replace(this.rules.other.listReplaceTabs,b=>" ".repeat(3*b.length)),m=e.split(` | |
| 406 | +`,1)[0],g=!p.trim(),y=0;if(this.options.pedantic?(y=2,d=p.trimStart()):g?y=r[1].length+1:(y=r[2].search(this.rules.other.nonSpaceChar),y=y>4?1:y,d=p.slice(y),y+=r[1].length),g&&this.rules.other.blankLine.test(m)&&(f+=m+` | |
| 407 | +`,e=e.substring(m.length+1),h=!0),!h){let b=this.rules.other.nextBulletRegex(y),w=this.rules.other.hrRegex(y),C=this.rules.other.fencesBeginRegex(y),T=this.rules.other.headingBeginRegex(y),E=this.rules.other.htmlBeginRegex(y);for(;e;){let A=e.split(` | |
| 408 | +`,1)[0],S;if(m=A,this.options.pedantic?(m=m.replace(this.rules.other.listReplaceNesting," "),S=m):S=m.replace(this.rules.other.tabCharGlobal," "),C.test(m)||T.test(m)||E.test(m)||b.test(m)||w.test(m))break;if(S.search(this.rules.other.nonSpaceChar)>=y||!m.trim())d+=` | |
| 409 | +`+S.slice(y);else{if(g||p.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||C.test(p)||T.test(p)||w.test(p))break;d+=` | |
| 410 | +`+m}!g&&!m.trim()&&(g=!0),f+=A+` | |
| 411 | +`,e=e.substring(A.length+1),p=S.slice(y)}}a.loose||(l?a.loose=!0:this.rules.other.doubleBlankLine.test(f)&&(l=!0));let v=null,x;this.options.gfm&&(v=this.rules.other.listIsTask.exec(d),v&&(x=v[0]!=="[ ] ",d=d.replace(this.rules.other.listReplaceTask,""))),a.items.push({type:"list_item",raw:f,task:!!v,checked:x,loose:!1,text:d,tokens:[]}),a.raw+=f}let u=a.items.at(-1);if(u)u.raw=u.raw.trimEnd(),u.text=u.text.trimEnd();else return;a.raw=a.raw.trimEnd();for(let h=0;h<a.items.length;h++)if(this.lexer.state.top=!1,a.items[h].tokens=this.lexer.blockTokens(a.items[h].text,[]),!a.loose){let f=a.items[h].tokens.filter(p=>p.type==="space"),d=f.length>0&&f.some(p=>this.rules.other.anyLine.test(p.raw));a.loose=d}if(a.loose)for(let h=0;h<a.items.length;h++)a.items[h].loose=!0;return a}}html(e){let r=this.rules.block.html.exec(e);if(r)return{type:"html",block:!0,raw:r[0],pre:r[1]==="pre"||r[1]==="script"||r[1]==="style",text:r[0]}}def(e){let r=this.rules.block.def.exec(e);if(r){let n=r[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),i=r[2]?r[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",a=r[3]?r[3].substring(1,r[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):r[3];return{type:"def",tag:n,raw:r[0],href:i,title:a}}}table(e){let r=this.rules.block.table.exec(e);if(!r||!this.rules.other.tableDelimiter.test(r[2]))return;let n=$j(r[1]),i=r[2].replace(this.rules.other.tableAlignChars,"").split("|"),a=r[3]?.trim()?r[3].replace(this.rules.other.tableRowBlankLine,"").split(` | |
| 412 | +`):[],s={type:"table",raw:r[0],header:[],align:[],rows:[]};if(n.length===i.length){for(let l of i)this.rules.other.tableAlignRight.test(l)?s.align.push("right"):this.rules.other.tableAlignCenter.test(l)?s.align.push("center"):this.rules.other.tableAlignLeft.test(l)?s.align.push("left"):s.align.push(null);for(let l=0;l<n.length;l++)s.header.push({text:n[l],tokens:this.lexer.inline(n[l]),header:!0,align:s.align[l]});for(let l of a)s.rows.push($j(l,s.header.length).map((u,h)=>({text:u,tokens:this.lexer.inline(u),header:!1,align:s.align[h]})));return s}}lheading(e){let r=this.rules.block.lheading.exec(e);if(r)return{type:"heading",raw:r[0],depth:r[2].charAt(0)==="="?1:2,text:r[1],tokens:this.lexer.inline(r[1])}}paragraph(e){let r=this.rules.block.paragraph.exec(e);if(r){let n=r[1].charAt(r[1].length-1)===` | |
| 413 | +`?r[1].slice(0,-1):r[1];return{type:"paragraph",raw:r[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let r=this.rules.block.text.exec(e);if(r)return{type:"text",raw:r[0],text:r[0],tokens:this.lexer.inline(r[0])}}escape(e){let r=this.rules.inline.escape.exec(e);if(r)return{type:"escape",raw:r[0],text:r[1]}}tag(e){let r=this.rules.inline.tag.exec(e);if(r)return!this.lexer.state.inLink&&this.rules.other.startATag.test(r[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(r[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(r[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(r[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:r[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:r[0]}}link(e){let r=this.rules.inline.link.exec(e);if(r){let n=r[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=f2(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=$8e(r[2],"()");if(s>-1){let u=(r[0].indexOf("!")===0?5:4)+r[1].length+s;r[2]=r[2].substring(0,s),r[0]=r[0].substring(0,u).trim(),r[3]=""}}let i=r[2],a="";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(i);s&&(i=s[1],a=s[3])}else a=r[3]?r[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?i=i.slice(1):i=i.slice(1,-1)),zj(r,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},r[0],this.lexer,this.rules)}}reflink(e,r){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),a=r[i.toLowerCase()];if(!a){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return zj(n,a,n[0],this.lexer,this.rules)}}emStrong(e,r,n=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!i||i[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(i[1]||i[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...i[0]].length-1,l,u,h=s,f=0,d=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,r=r.slice(-1*e.length+s);(i=d.exec(r))!=null;){if(l=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!l)continue;if(u=[...l].length,i[3]||i[4]){h+=u;continue}else if((i[5]||i[6])&&s%3&&!((s+u)%3)){f+=u;continue}if(h-=u,h>0)continue;u=Math.min(u,u+h+f);let p=[...i[0]][0].length,m=e.slice(0,s+i.index+p+u);if(Math.min(s,u)%2){let y=m.slice(1,-1);return{type:"em",raw:m,text:y,tokens:this.lexer.inlineTokens(y)}}let g=m.slice(2,-2);return{type:"strong",raw:m,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(e){let r=this.rules.inline.code.exec(e);if(r){let n=r[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(n),a=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return i&&a&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:r[0],text:n}}}br(e){let r=this.rules.inline.br.exec(e);if(r)return{type:"br",raw:r[0]}}del(e){let r=this.rules.inline.del.exec(e);if(r)return{type:"del",raw:r[0],text:r[2],tokens:this.lexer.inlineTokens(r[2])}}autolink(e){let r=this.rules.inline.autolink.exec(e);if(r){let n,i;return r[2]==="@"?(n=r[1],i="mailto:"+n):(n=r[1],i=n),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let r;if(r=this.rules.inline.url.exec(e)){let n,i;if(r[2]==="@")n=r[0],i="mailto:"+n;else{let a;do a=r[0],r[0]=this.rules.inline._backpedal.exec(r[0])?.[0]??"";while(a!==r[0]);n=r[0],r[1]==="www."?i="http://"+r[0]:i=r[0]}return{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let r=this.rules.inline.text.exec(e);if(r){let n=this.lexer.state.inRawBlock;return{type:"text",raw:r[0],text:r[0],escaped:n}}}},Al=class t{static{o(this,"_Lexer")}tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Id,this.options.tokenizer=this.options.tokenizer||new hm,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let r={other:ts,block:Sw.normal,inline:h2.normal};this.options.pedantic?(r.block=Sw.pedantic,r.inline=h2.pedantic):this.options.gfm&&(r.block=Sw.gfm,this.options.breaks?r.inline=h2.breaks:r.inline=h2.gfm),this.tokenizer.rules=r}static get rules(){return{block:Sw,inline:h2}}static lex(e,r){return new t(r).lex(e)}static lexInline(e,r){return new t(r).inlineTokens(e)}lex(e){e=e.replace(ts.carriageReturn,` | |
| 414 | +`),this.blockTokens(e,this.tokens);for(let r=0;r<this.inlineQueue.length;r++){let n=this.inlineQueue[r];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,r=[],n=!1){for(this.options.pedantic&&(e=e.replace(ts.tabCharGlobal," ").replace(ts.spaceLine,""));e;){let i;if(this.options.extensions?.block?.some(s=>(i=s.call({lexer:this},e,r))?(e=e.substring(i.raw.length),r.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let s=r.at(-1);i.raw.length===1&&s!==void 0?s.raw+=` | |
| 415 | +`:r.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=` | |
| 416 | +`+i.raw,s.text+=` | |
| 417 | +`+i.text,this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=` | |
| 418 | +`+i.raw,s.text+=` | |
| 419 | +`+i.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title});continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),r.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let s=1/0,l=e.slice(1),u;this.options.extensions.startBlock.forEach(h=>{u=h.call({lexer:this},l),typeof u=="number"&&u>=0&&(s=Math.min(s,u))}),s<1/0&&s>=0&&(a=e.substring(0,s+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let s=r.at(-1);n&&s?.type==="paragraph"?(s.raw+=` | |
| 420 | +`+i.raw,s.text+=` | |
| 421 | +`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i),n=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="text"?(s.raw+=` | |
| 422 | +`+i.raw,s.text+=` | |
| 423 | +`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let n=e,i=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(i=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)l.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(i=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(i=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,i.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let a=!1,s="";for(;e;){a||(s=""),a=!1;let l;if(this.options.extensions?.inline?.some(h=>(l=h.call({lexer:this},e,r))?(e=e.substring(l.raw.length),r.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let h=r.at(-1);l.type==="text"&&h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(l=this.tokenizer.emStrong(e,n,s)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.del(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),r.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),r.push(l);continue}let u=e;if(this.options.extensions?.startInline){let h=1/0,f=e.slice(1),d;this.options.extensions.startInline.forEach(p=>{d=p.call({lexer:this},f),typeof d=="number"&&d>=0&&(h=Math.min(h,d))}),h<1/0&&h>=0&&(u=e.substring(0,h+1))}if(l=this.tokenizer.inlineText(u)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(s=l.raw.slice(-1)),a=!0;let h=r.at(-1);h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(e){let h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return r}},fm=class{static{o(this,"_Renderer")}options;parser;constructor(e){this.options=e||Id}space(e){return""}code({text:e,lang:r,escaped:n}){let i=(r||"").match(ts.notSpaceStart)?.[0],a=e.replace(ts.endingNewline,"")+` | |
| 424 | +`;return i?'<pre><code class="language-'+pc(i)+'">'+(n?a:pc(a,!0))+`</code></pre> | |
| 425 | +`:"<pre><code>"+(n?a:pc(a,!0))+`</code></pre> | |
| 426 | +`}blockquote({tokens:e}){return`<blockquote> | |
| 427 | +${this.parser.parse(e)}</blockquote> | |
| 428 | +`}html({text:e}){return e}heading({tokens:e,depth:r}){return`<h${r}>${this.parser.parseInline(e)}</h${r}> | |
| 429 | +`}hr(e){return`<hr> | |
| 430 | +`}list(e){let r=e.ordered,n=e.start,i="";for(let l=0;l<e.items.length;l++){let u=e.items[l];i+=this.listitem(u)}let a=r?"ol":"ul",s=r&&n!==1?' start="'+n+'"':"";return"<"+a+s+`> | |
| 431 | +`+i+"</"+a+`> | |
| 432 | +`}listitem(e){let r="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+pc(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:!0}):r+=n+" "}return r+=this.parser.parse(e.tokens,!!e.loose),`<li>${r}</li> | |
| 433 | +`}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p> | |
| 434 | +`}table(e){let r="",n="";for(let a=0;a<e.header.length;a++)n+=this.tablecell(e.header[a]);r+=this.tablerow({text:n});let i="";for(let a=0;a<e.rows.length;a++){let s=e.rows[a];n="";for(let l=0;l<s.length;l++)n+=this.tablecell(s[l]);i+=this.tablerow({text:n})}return i&&(i=`<tbody>${i}</tbody>`),`<table> | |
| 435 | +<thead> | |
| 436 | +`+r+`</thead> | |
| 437 | +`+i+`</table> | |
| 438 | +`}tablerow({text:e}){return`<tr> | |
| 439 | +${e}</tr> | |
| 440 | +`}tablecell(e){let r=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+r+`</${n}> | |
| 441 | +`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${pc(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:r,tokens:n}){let i=this.parser.parseInline(n),a=Fj(e);if(a===null)return i;e=a;let s='<a href="'+e+'"';return r&&(s+=' title="'+pc(r)+'"'),s+=">"+i+"</a>",s}image({href:e,title:r,text:n}){let i=Fj(e);if(i===null)return pc(n);e=i;let a=`<img src="${e}" alt="${n}"`;return r&&(a+=` title="${pc(r)}"`),a+=">",a}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:pc(e.text)}},p2=class{static{o(this,"_TextRenderer")}strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}},_l=class t{static{o(this,"_Parser")}options;renderer;textRenderer;constructor(e){this.options=e||Id,this.options.renderer=this.options.renderer||new fm,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new p2}static parse(e,r){return new t(r).parse(e)}static parseInline(e,r){return new t(r).parseInline(e)}parse(e,r=!0){let n="";for(let i=0;i<e.length;i++){let a=e[i];if(this.options.extensions?.renderers?.[a.type]){let l=a,u=this.options.extensions.renderers[l.type].call({parser:this},l);if(u!==!1||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(l.type)){n+=u||"";continue}}let s=a;switch(s.type){case"space":{n+=this.renderer.space(s);continue}case"hr":{n+=this.renderer.hr(s);continue}case"heading":{n+=this.renderer.heading(s);continue}case"code":{n+=this.renderer.code(s);continue}case"table":{n+=this.renderer.table(s);continue}case"blockquote":{n+=this.renderer.blockquote(s);continue}case"list":{n+=this.renderer.list(s);continue}case"html":{n+=this.renderer.html(s);continue}case"paragraph":{n+=this.renderer.paragraph(s);continue}case"text":{let l=s,u=this.renderer.text(l);for(;i+1<e.length&&e[i+1].type==="text";)l=e[++i],u+=` | |
| 442 | +`+this.renderer.text(l);r?n+=this.renderer.paragraph({type:"paragraph",raw:u,text:u,tokens:[{type:"text",raw:u,text:u,escaped:!0}]}):n+=u;continue}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return n}parseInline(e,r=this.renderer){let n="";for(let i=0;i<e.length;i++){let a=e[i];if(this.options.extensions?.renderers?.[a.type]){let l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(a.type)){n+=l||"";continue}}let s=a;switch(s.type){case"escape":{n+=r.text(s);break}case"html":{n+=r.html(s);break}case"link":{n+=r.link(s);break}case"image":{n+=r.image(s);break}case"strong":{n+=r.strong(s);break}case"em":{n+=r.em(s);break}case"codespan":{n+=r.codespan(s);break}case"br":{n+=r.br(s);break}case"del":{n+=r.del(s);break}case"text":{n+=r.text(s);break}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return n}},um=class{static{o(this,"_Hooks")}options;block;constructor(e){this.options=e||Id}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}provideLexer(){return this.block?Al.lex:Al.lexInline}provideParser(){return this.block?_l.parse:_l.parseInline}},yD=class{static{o(this,"Marked")}defaults=vD();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=_l;Renderer=fm;TextRenderer=p2;Lexer=Al;Tokenizer=hm;Hooks=um;constructor(...e){this.use(...e)}walkTokens(e,r){let n=[];for(let i of e)switch(n=n.concat(r.call(this,i)),i.type){case"table":{let a=i;for(let s of a.header)n=n.concat(this.walkTokens(s.tokens,r));for(let s of a.rows)for(let l of s)n=n.concat(this.walkTokens(l.tokens,r));break}case"list":{let a=i;n=n.concat(this.walkTokens(a.items,r));break}default:{let a=i;this.defaults.extensions?.childTokens?.[a.type]?this.defaults.extensions.childTokens[a.type].forEach(s=>{let l=a[s].flat(1/0);n=n.concat(this.walkTokens(l,r))}):a.tokens&&(n=n.concat(this.walkTokens(a.tokens,r)))}}return n}use(...e){let r=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){let s=r.renderers[a.name];s?r.renderers[a.name]=function(...l){let u=a.renderer.apply(this,l);return u===!1&&(u=s.apply(this,l)),u}:r.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=r[a.level];s?s.unshift(a.tokenizer):r[a.level]=[a.tokenizer],a.start&&(a.level==="block"?r.startBlock?r.startBlock.push(a.start):r.startBlock=[a.start]:a.level==="inline"&&(r.startInline?r.startInline.push(a.start):r.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(r.childTokens[a.name]=a.childTokens)}),i.extensions=r),n.renderer){let a=this.defaults.renderer||new fm(this.defaults);for(let s in n.renderer){if(!(s in a))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let l=s,u=n.renderer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d||""}}i.renderer=a}if(n.tokenizer){let a=this.defaults.tokenizer||new hm(this.defaults);for(let s in n.tokenizer){if(!(s in a))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let l=s,u=n.tokenizer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.tokenizer=a}if(n.hooks){let a=this.defaults.hooks||new um;for(let s in n.hooks){if(!(s in a))throw new Error(`hook '${s}' does not exist`);if(["options","block"].includes(s))continue;let l=s,u=n.hooks[l],h=a[l];um.passThroughHooks.has(s)?a[l]=f=>{if(this.defaults.async)return Promise.resolve(u.call(a,f)).then(p=>h.call(a,p));let d=u.call(a,f);return h.call(a,d)}:a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.hooks=a}if(n.walkTokens){let a=this.defaults.walkTokens,s=n.walkTokens;i.walkTokens=function(l){let u=[];return u.push(s.call(this,l)),a&&(u=u.concat(a.call(this,l))),u}}this.defaults={...this.defaults,...i}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,r){return Al.lex(e,r??this.defaults)}parser(e,r){return _l.parse(e,r??this.defaults)}parseMarkdown(e){return o((n,i)=>{let a={...i},s={...this.defaults,...a},l=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&a.async===!1)return l(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let u=s.hooks?s.hooks.provideLexer():e?Al.lex:Al.lexInline,h=s.hooks?s.hooks.provideParser():e?_l.parse:_l.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(f=>u(f,s)).then(f=>s.hooks?s.hooks.processAllTokens(f):f).then(f=>s.walkTokens?Promise.all(this.walkTokens(f,s.walkTokens)).then(()=>f):f).then(f=>h(f,s)).then(f=>s.hooks?s.hooks.postprocess(f):f).catch(l);try{s.hooks&&(n=s.hooks.preprocess(n));let f=u(n,s);s.hooks&&(f=s.hooks.processAllTokens(f)),s.walkTokens&&this.walkTokens(f,s.walkTokens);let d=h(f,s);return s.hooks&&(d=s.hooks.postprocess(d)),d}catch(f){return l(f)}},"parse")}onError(e,r){return n=>{if(n.message+=` | |
| 443 | +Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+pc(n.message+"",!0)+"</pre>";return r?Promise.resolve(i):i}if(r)return Promise.reject(n);throw n}}},Md=new yD;o(Jr,"marked");Jr.options=Jr.setOptions=function(t){return Md.setOptions(t),Jr.defaults=Md.defaults,Gj(Jr.defaults),Jr};Jr.getDefaults=vD;Jr.defaults=Id;Jr.use=function(...t){return Md.use(...t),Jr.defaults=Md.defaults,Gj(Jr.defaults),Jr};Jr.walkTokens=function(t,e){return Md.walkTokens(t,e)};Jr.parseInline=Md.parseInline;Jr.Parser=_l;Jr.parser=_l.parse;Jr.Renderer=fm;Jr.TextRenderer=p2;Jr.Lexer=Al;Jr.lexer=Al.lex;Jr.Tokenizer=hm;Jr.Hooks=um;Jr.parse=Jr;dkt=Jr.options,pkt=Jr.setOptions,mkt=Jr.use,gkt=Jr.walkTokens,ykt=Jr.parseInline,vkt=_l.parse,xkt=Al.lex});function G8e(t,{markdownAutoWrap:e}){let n=t.replace(/<br\/>/g,` | |
| 444 | +`).replace(/\n{2,}/g,` | |
| 445 | +`),i=B4(n);return e===!1?i.replace(/ /g," "):i}function Jj(t,e={}){let r=G8e(t,e),n=Jr.lexer(r),i=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` | |
| 446 | +`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),n.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}),i}function eK(t,{markdownAutoWrap:e}={}){let r=Jr.lexer(t);function n(i){return i.type==="text"?e===!1?i.text.replace(/\n */g,"<br/>").replace(/ /g," "):i.text.replace(/\n */g,"<br/>"):i.type==="strong"?`<strong>${i.tokens?.map(n).join("")}</strong>`:i.type==="em"?`<em>${i.tokens?.map(n).join("")}</em>`:i.type==="paragraph"?`<p>${i.tokens?.map(n).join("")}</p>`:i.type==="space"?"":i.type==="html"?`${i.text}`:i.type==="escape"?i.text:`Unsupported markdown: ${i.type}`}return o(n,"output"),r.map(n).join("")}var tK=N(()=>{"use strict";Zj();PC();o(G8e,"preprocessMarkdown");o(Jj,"markdownToLines");o(eK,"markdownToHTML")});function V8e(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function U8e(t,e){let r=V8e(e.content);return rK(t,[],r,e.type)}function rK(t,e,r,n){if(r.length===0)return[{content:e.join(""),type:n},{content:"",type:n}];let[i,...a]=r,s=[...e,i];return t([{content:s.join(""),type:n}])?rK(t,s,a,n):(e.length===0&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function nK(t,e){if(t.some(({content:r})=>r.includes(` | |
| 447 | +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return CD(t,e)}function CD(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...n];if(i!==""&&s.push({content:i,type:"normal"}),s.push(a),e(s))return CD(t,e,r,s);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){let[l,u]=U8e(e,a);r.push([l]),u.content&&t.unshift(u)}return CD(t,e,r)}var iK=N(()=>{"use strict";o(V8e,"splitTextToChars");o(U8e,"splitWordToFitWidth");o(rK,"splitWordToFitWidthRecursion");o(nK,"splitLineToFitWidth");o(CD,"splitLineToFitWidthRecursion")});function aK(t,e){e&&t.attr("style",e)}async function H8e(t,e,r,n,i=!1){let a=t.append("foreignObject");a.attr("width",`${10*r}px`),a.attr("height",`${10*r}px`);let s=a.append("xhtml:div"),l=e.label;e.label&&pi(e.label)&&(l=await mh(e.label.replace(Ze.lineBreakRegex,` | |
| 448 | +`),me()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),aK(h,e.labelStyle),h.attr("class",`${u} ${n}`),aK(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.style("max-width",r+"px"),s.style("text-align","center"),s.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&s.attr("class","labelBkg");let f=s.node().getBoundingClientRect();return f.width===r&&(s.style("display","table"),s.style("white-space","break-spaces"),s.style("width",r+"px"),f=s.node().getBoundingClientRect()),a.node()}function AD(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function W8e(t,e,r){let n=t.append("text"),i=AD(n,1,e);_D(i,r);let a=i.node().getComputedTextLength();return n.remove(),a}function sK(t,e,r){let n=t.append("text"),i=AD(n,1,e);_D(i,[{content:r,type:"normal"}]);let a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function q8e(t,e,r,n=!1){let a=e.append("g"),s=a.insert("rect").attr("class","background").attr("style","stroke: none"),l=a.append("text").attr("y","-10.1"),u=0;for(let h of r){let f=o(p=>W8e(a,1.1,p)<=t,"checkWidth"),d=f(h)?[h]:nK(h,f);for(let p of d){let m=AD(l,u,1.1);_D(m,p),u++}}if(n){let h=l.node().getBBox(),f=2;return s.attr("x",h.x-f).attr("y",h.y-f).attr("width",h.width+2*f).attr("height",h.height+2*f),a.node()}else return l.node()}function _D(t,e){t.text(""),e.forEach((r,n)=>{let i=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");n===0?i.text(r.content):i.text(" "+r.content)})}function DD(t){return t.replace(/fa[bklrs]?:fa-[\w-]+/g,e=>`<i class='${e.replace(":"," ")}'></i>`)}var Hn,to=N(()=>{"use strict";zt();gr();dr();vt();tK();ir();iK();o(aK,"applyStyle");o(H8e,"addHtmlSpan");o(AD,"createTspan");o(W8e,"computeWidthOfText");o(sK,"computeDimensionOfText");o(q8e,"createFormattedText");o(_D,"updateTextContentAndStyles");o(DD,"replaceIconSubstring");Hn=o(async(t,e="",{style:r="",isTitle:n=!1,classes:i="",useHtmlLabels:a=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},h)=>{if(Y.debug("XYZ createText",e,r,n,i,a,s,"addSvgBackground: ",u),a){let f=eK(e,h),d=DD(na(f)),p=e.replace(/\\\\/g,"\\"),m={isNode:s,label:pi(e)?p:d,labelStyle:r.replace("fill:","color:")};return await H8e(t,m,l,i,u)}else{let f=e.replace(/<br\s*\/?>/g,"<br/>"),d=Jj(f.replace("<br>","<br/>"),h),p=q8e(l,t,d,e?u:!1);if(s){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).attr("style",m)}else{let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Ge(p).select("rect").attr("style",m.replace(/background:/g,"fill:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).select("text").attr("style",g)}return p}},"createText")});function Xt(t){let e=t.map((r,n)=>`${n===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function Fo(t,e,r,n,i,a){let s=[],u=r-t,h=n-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+i*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function Lw(t,e,r,n,i,a){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}var pt,Dw,je,ht,Ft=N(()=>{"use strict";to();zt();dr();Ya();gr();ir();pt=o(async(t,e,r)=>{let n,i=e.useHtmlLabels||fr(me()?.htmlLabels);r?n=r:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",$n(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=await Hn(s,Tr(na(l),me()),{useHtmlLabels:i,width:e.width||me().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img}),h=u.getBBox(),f=(e?.padding??0)/2;if(i){let d=u.children[0],p=Ge(u),m=d.getElementsByTagName("img");if(m){let g=l.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=me().fontSize?me().fontSize:window.getComputedStyle(document.body).fontSize,w=5,[C=or.fontSize]=Bo(b),T=C*w+"px";y.style.minWidth=T,y.style.maxWidth=T}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}return i?s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):s.attr("transform","translate(0, "+-h.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:h,halfPadding:f,label:s}},"labelHelper"),Dw=o(async(t,e,r)=>{let n=r.useHtmlLabels||fr(me()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await Hn(i,Tr(na(e),me()),{useHtmlLabels:n,width:r.width||me()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(fr(me()?.flowchart?.htmlLabels)){let u=a.children[0],h=Ge(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return n?i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):i.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:i}},"insertLabel"),je=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),ht=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(Xt,"createPathFromPoints");o(Fo,"generateFullSineWavePoints");o(Lw,"generateCirclePoints")});function Y8e(t,e){return t.intersect(e)}var oK,lK=N(()=>{"use strict";o(Y8e,"intersectNode");oK=Y8e});function X8e(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x<i&&(h=-h);var f=Math.abs(e*r*l/u);return n.y<a&&(f=-f),{x:i+h,y:a+f}}var Rw,LD=N(()=>{"use strict";o(X8e,"intersectEllipse");Rw=X8e});function j8e(t,e,r){return Rw(t,e,e,r)}var cK,uK=N(()=>{"use strict";LD();o(j8e,"intersectCircle");cK=j8e});function K8e(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&hK(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&hK(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function hK(t,e){return t*e>0}var fK,dK=N(()=>{"use strict";o(K8e,"intersectLine");o(hK,"sameSign");fK=K8e});function Q8e(t,e,r){let n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=n-t.width/2-s,h=i-t.height/2-l;for(let f=0;f<e.length;f++){let d=e[f],p=e[f<e.length-1?f+1:0],m=fK(t,r,{x:u+d.x,y:h+d.y},{x:u+p.x,y:h+p.y});m&&a.push(m)}return a.length?(a.length>1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g<x?-1:g===x?0:1}),a[0]):t}var pK,mK=N(()=>{"use strict";dK();o(Q8e,"intersectPolygon");pK=Q8e});var Z8e,Vh,RD=N(()=>{"use strict";Z8e=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Vh=Z8e});var Ye,Ht=N(()=>{"use strict";lK();uK();LD();mK();RD();Ye={node:oK,circle:cK,ellipse:Rw,polygon:pK,rect:Vh}});var gK,mc,J8e,ND,Qe,Ke,Ut=N(()=>{"use strict";zt();gK=o(t=>{let{handDrawnSeed:e}=me();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),mc=o(t=>{let e=J8e([...t.cssCompiledStyles||[],...t.cssStyles||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),J8e=o(t=>{let e=new Map;return t.forEach(r=>{let[n,i]=r.split(":");e.set(n.trim(),i?.trim())}),e},"styles2Map"),ND=o(t=>t==="color"||t==="font-size"||t==="font-family"||t==="font-weight"||t==="font-style"||t==="text-decoration"||t==="text-align"||t==="text-transform"||t==="line-height"||t==="letter-spacing"||t==="word-spacing"||t==="text-shadow"||t==="text-overflow"||t==="white-space"||t==="word-wrap"||t==="word-break"||t==="overflow-wrap"||t==="hyphens","isLabelStyle"),Qe=o(t=>{let{stylesArray:e}=mc(t),r=[],n=[],i=[],a=[];return e.forEach(s=>{let l=s[0];ND(l)?r.push(s.join(":")+" !important"):(n.push(s.join(":")+" !important"),l.includes("stroke")&&i.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),Ke=o((t,e)=>{let{themeVariables:r,handDrawnSeed:n}=me(),{nodeBorder:i,mainBkg:a}=r,{stylesMap:s}=mc(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||i,seed:n,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0]},e)},"userNodeOverrides")});function MD(t,e,r){if(t&&t.length){let[n,i]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-n)*s-(f-i)*l+n,u[1]=(h-n)*l+(f-i)*s+i}}}function e_e(t,e){return t[0]===e[0]&&t[1]===e[1]}function t_e(t,e,r,n=1){let i=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(i)for(let h of s)MD(h,l,i);let u=function(h,f,d){let p=[];for(let b of h){let w=[...b];e_e(w[0],w[w.length-1])||w.push([w[0][0],w[0][1]]),w.length>2&&p.push(w)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let w=0;w<b.length-1;w++){let C=b[w],T=b[w+1];if(C[1]!==T[1]){let E=Math.min(C[1],T[1]);g.push({ymin:E,ymax:Math.max(C[1],T[1]),x:E===C[1]?C[0]:T[0],islope:(T[0]-C[0])/(T[1]-C[1])})}}if(g.sort((b,w)=>b.ymin<w.ymin?-1:b.ymin>w.ymin?1:b.x<w.x?-1:b.x>w.x?1:b.ymax===w.ymax?0:(b.ymax-w.ymax)/Math.abs(b.ymax-w.ymax)),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let w=0;w<g.length&&!(g[w].ymin>v);w++)b=w;g.splice(0,b+1).forEach(w=>{y.push({s:v,edge:w})})}if(y=y.filter(b=>!(b.edge.ymax<=v)),y.sort((b,w)=>b.edge.x===w.edge.x?0:(b.edge.x-w.edge.x)/Math.abs(b.edge.x-w.edge.x)),(d!==1||x%f==0)&&y.length>1)for(let b=0;b<y.length;b+=2){let w=b+1;if(w>=y.length)break;let C=y[b].edge,T=y[w].edge;m.push([[Math.round(C.x),v],[Math.round(T.x),v]])}v+=d,y.forEach(b=>{b.edge.x=b.edge.x+d*b.edge.islope}),x++}return m}(s,a,n);if(i){for(let h of s)MD(h,l,-i);(function(h,f,d){let p=[];h.forEach(m=>p.push(...m)),MD(p,f,d)})(u,l,-i)}return u}function x2(t,e){var r;let n=e.hachureAngle+90,i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=i),t_e(t,i,n,a||1)}function zw(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function OD(t,e){return t.type===e}function jD(t){let e=[],r=function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:r_e,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:ID,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:yK,text:""},l}(t),n="BOD",i=0,a=r[i];for(;!OD(a,yK);){let s=0,l=[];if(n==="BOD"){if(a.text!=="M"&&a.text!=="m")return jD("M0,0"+t);i++,s=Nw[a.text],n=a.text}else OD(a,ID)?s=Nw[n]:(i++,s=Nw[a.text],n=a.text);if(!(i+s<r.length))throw new Error("Path data ended short");for(let u=i;u<i+s;u++){let h=r[u];if(!OD(h,ID))throw new Error("Param not a number: "+n+","+h.text);l[l.length]=+h.text}if(typeof Nw[n]!="number")throw new Error("Bad segment: "+n);{let u={key:n,data:l};e.push(u),i+=s,a=r[i],n==="M"&&(n="L"),n==="m"&&(n="l")}}return e}function SK(t){let e=0,r=0,n=0,i=0,a=[];for(let{key:s,data:l}of t)switch(s){case"M":a.push({key:"M",data:[...l]}),[e,r]=l,[n,i]=l;break;case"m":e+=l[0],r+=l[1],a.push({key:"M",data:[e,r]}),n=e,i=r;break;case"L":a.push({key:"L",data:[...l]}),[e,r]=l;break;case"l":e+=l[0],r+=l[1],a.push({key:"L",data:[e,r]});break;case"C":a.push({key:"C",data:[...l]}),e=l[4],r=l[5];break;case"c":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function CK(t){let e=[],r="",n=0,i=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[n,i]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),n=f[4],i=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[n,i]=f;break;case"H":n=f[0],e.push({key:"L",data:[n,i]});break;case"V":i=f[0],e.push({key:"L",data:[n,i]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=n+(n-l),p=i+(i-u)):(d=n,p=i),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],n=f[2],i=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=n+(n-l),g=i+(i-u)):(m=n,g=i);let y=n+2*(m-n)/3,v=i+2*(g-i)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,n=d,i=p;break}case"Q":{let[d,p,m,g]=f,y=n+2*(d-n)/3,v=i+2*(p-i)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,n=m,i=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[n,i,v,x,v,x]}),n=v,i=x):(n!==v||i!==x)&&(AK(n,i,v,x,d,p,m,g,y).forEach(function(b){e.push({key:"C",data:b})}),n=v,i=x);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=s}r=h}return e}function g2(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function AK(t,e,r,n,i,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=g2(t,e,-f),[r,n]=g2(r,n,-f);let L=(t-r)/2,R=(e-n)/2,O=L*L/(i*i)+R*R/(a*a);O>1&&(O=Math.sqrt(O),i*=O,a*=O);let M=i*i,B=a*a,F=M*B-M*R*R-B*L*L,P=M*R*R+B*L*L,z=(l===u?-1:1)*Math.sqrt(Math.abs(F/P));y=z*i*R/a+(t+r)/2,v=z*-a*L/i+(e+n)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((n-v)/a).toFixed(9))),t<y&&(m=Math.PI-m),r<y&&(g=Math.PI-g),m<0&&(m=2*Math.PI+m),g<0&&(g=2*Math.PI+g),u&&m>g&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let L=g,R=r,O=n;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=AK(r=y+i*Math.cos(g),n=v+a*Math.sin(g),R,O,i,a,s,0,u,[g,L,y,v])}x=g-m;let b=Math.cos(m),w=Math.sin(m),C=Math.cos(g),T=Math.sin(g),E=Math.tan(x/4),A=4/3*i*E,S=4/3*a*E,_=[t,e],I=[t+A*w,e-S*b],D=[r+A*T,n-S*C],k=[r,n];if(I[0]=2*_[0]-I[0],I[1]=2*_[1]-I[1],h)return[I,D,k].concat(p);{p=[I,D,k].concat(p);let L=[];for(let R=0;R<p.length;R+=3){let O=g2(p[R][0],p[R][1],f),M=g2(p[R+1][0],p[R+1][1],f),B=g2(p[R+2][0],p[R+2][1],f);L.push([O[0],O[1],M[0],M[1],B[0],B[1]])}return L}}function _K(t,e,r,n,i){return{type:"path",ops:Uh(t,e,r,n,i)}}function Ow(t,e,r){let n=(t||[]).length;if(n>2){let i=[];for(let a=0;a<n-1;a++)i.push(...Uh(t[a][0],t[a][1],t[a+1][0],t[a+1][1],r));return e&&i.push(...Uh(t[n-1][0],t[n-1][1],t[0][0],t[0][1],r)),{type:"path",ops:i}}return n===2?_K(t[0][0],t[0][1],t[1][0],t[1][1],r):{type:"path",ops:[]}}function i_e(t,e,r,n,i){return function(a,s){return Ow(a,!0,s)}([[t,e],[t+r,e],[t+r,e+n],[t,e+n]],i)}function vK(t,e){if(t.length){let r=typeof t[0][0]=="number"?[t]:t,n=Mw(r[0],1*(1+.2*e.roughness),e),i=e.disableMultiStroke?[]:Mw(r[0],1.5*(1+.22*e.roughness),wK(e));for(let a=1;a<r.length;a++){let s=r[a];if(s.length){let l=Mw(s,1*(1+.2*e.roughness),e),u=e.disableMultiStroke?[]:Mw(s,1.5*(1+.22*e.roughness),wK(e));for(let h of l)h.op!=="move"&&n.push(h);for(let h of u)h.op!=="move"&&i.push(h)}}return{type:"path",ops:n.concat(i)}}return{type:"path",ops:[]}}function DK(t,e,r){let n=Math.sqrt(2*Math.PI*Math.sqrt((Math.pow(t/2,2)+Math.pow(e/2,2))/2)),i=Math.ceil(Math.max(r.curveStepCount,r.curveStepCount/Math.sqrt(200)*n)),a=2*Math.PI/i,s=Math.abs(t/2),l=Math.abs(e/2),u=1-r.curveFitting;return s+=nr(s*u,r),l+=nr(l*u,r),{increment:a,rx:s,ry:l}}function HD(t,e,r,n){let[i,a]=TK(n.increment,t,e,n.rx,n.ry,1,n.increment*Bw(.1,Bw(.4,1,r),r),r),s=Fw(i,null,r);if(!r.disableMultiStroke&&r.roughness!==0){let[l]=TK(n.increment,t,e,n.rx,n.ry,1.5,0,r),u=Fw(l,null,r);s=s.concat(u)}return{estimatedPoints:a,opset:{type:"path",ops:s}}}function xK(t,e,r,n,i,a,s,l,u){let h=t,f=e,d=Math.abs(r/2),p=Math.abs(n/2);d+=nr(.01*d,u),p+=nr(.01*p,u);let m=i,g=a;for(;m<0;)m+=2*Math.PI,g+=2*Math.PI;g-m>2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=kK(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=kK(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...Uh(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...Uh(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function bK(t,e){let r=CK(SK(jD(t))),n=[],i=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],i=[l[0],l[1]];break;case"L":n.push(...Uh(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;n.push(...a_e(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":n.push(...Uh(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function PD(t,e){let r=[];for(let n of t)if(n.length){let i=e.maxRandomnessOffset||0,a=n.length;if(a>2){r.push({op:"move",data:[n[0][0]+nr(i,e),n[0][1]+nr(i,e)]});for(let s=1;s<a;s++)r.push({op:"lineTo",data:[n[s][0]+nr(i,e),n[s][1]+nr(i,e)]})}}return{type:"fillPath",ops:r}}function dm(t,e){return function(r,n){let i=r.fillStyle||"hachure";if(!Rs[i])switch(i){case"zigzag":Rs[i]||(Rs[i]=new FD(n));break;case"cross-hatch":Rs[i]||(Rs[i]=new $D(n));break;case"dots":Rs[i]||(Rs[i]=new zD(n));break;case"dashed":Rs[i]||(Rs[i]=new GD(n));break;case"zigzag-line":Rs[i]||(Rs[i]=new VD(n));break;default:i="hachure",Rs[i]||(Rs[i]=new v2(n))}return Rs[i]}(e,n_e).fillPolygons(t,e)}function wK(t){let e=Object.assign({},t);return e.randomizer=void 0,t.seed&&(e.seed=t.seed+1),e}function LK(t){return t.randomizer||(t.randomizer=new UD(t.seed||0)),t.randomizer.next()}function Bw(t,e,r,n=1){return r.roughness*n*(LK(r)*(e-t)+t)}function nr(t,e,r=1){return Bw(-t,t,e,r)}function Uh(t,e,r,n,i,a=!1){let s=a?i.disableMultiStrokeFill:i.disableMultiStroke,l=WD(t,e,r,n,i,!0,!1);if(s)return l;let u=WD(t,e,r,n,i,!0,!0);return l.concat(u)}function WD(t,e,r,n,i,a,s){let l=Math.pow(t-r,2)+Math.pow(e-n,2),u=Math.sqrt(l),h=1;h=u<200?1:u>500?.4:-.0016668*u+1.233334;let f=i.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*LK(i),m=i.bowing*i.maxRandomnessOffset*(n-e)/200,g=i.bowing*i.maxRandomnessOffset*(t-r)/200;m=nr(m,i,h),g=nr(g,i,h);let y=[],v=o(()=>nr(d,i,h),"M"),x=o(()=>nr(f,i,h),"k"),b=i.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:nr(f,i,h)),e+(b?0:nr(f,i,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(n-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(n-e)*p+v(),r+(b?0:v()),n+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(n-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(n-e)*p+x(),r+(b?0:x()),n+(b?0:x())]}),y}function Mw(t,e,r){if(!t.length)return[];let n=[];n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]),n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]);for(let i=1;i<t.length;i++)n.push([t[i][0]+nr(e,r),t[i][1]+nr(e,r)]),i===t.length-1&&n.push([t[i][0]+nr(e,r),t[i][1]+nr(e,r)]);return Fw(n,null,r)}function Fw(t,e,r){let n=t.length,i=[];if(n>3){let a=[],s=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+2<n;l++){let u=t[l];a[0]=[u[0],u[1]],a[1]=[u[0]+(s*t[l+1][0]-s*t[l-1][0])/6,u[1]+(s*t[l+1][1]-s*t[l-1][1])/6],a[2]=[t[l+1][0]+(s*t[l][0]-s*t[l+2][0])/6,t[l+1][1]+(s*t[l][1]-s*t[l+2][1])/6],a[3]=[t[l+1][0],t[l+1][1]],i.push({op:"bcurveTo",data:[a[1][0],a[1][1],a[2][0],a[2][1],a[3][0],a[3][1]]})}if(e&&e.length===2){let l=r.maxRandomnessOffset;i.push({op:"lineTo",data:[e[0]+nr(l,r),e[1]+nr(l,r)]})}}else n===3?(i.push({op:"move",data:[t[1][0],t[1][1]]}),i.push({op:"bcurveTo",data:[t[1][0],t[1][1],t[2][0],t[2][1],t[2][0],t[2][1]]})):n===2&&i.push(...WD(t[0][0],t[0][1],t[1][0],t[1][1],r,!0,!0));return i}function TK(t,e,r,n,i,a,s,l){let u=[],h=[];if(l.roughness===0){t/=4,h.push([e+n*Math.cos(-t),r+i*Math.sin(-t)]);for(let f=0;f<=2*Math.PI;f+=t){let d=[e+n*Math.cos(f),r+i*Math.sin(f)];u.push(d),h.push(d)}h.push([e+n*Math.cos(0),r+i*Math.sin(0)]),h.push([e+n*Math.cos(t),r+i*Math.sin(t)])}else{let f=nr(.5,l)-Math.PI/2;h.push([nr(a,l)+e+.9*n*Math.cos(f-t),nr(a,l)+r+.9*i*Math.sin(f-t)]);let d=2*Math.PI+f-.01;for(let p=f;p<d;p+=t){let m=[nr(a,l)+e+n*Math.cos(p),nr(a,l)+r+i*Math.sin(p)];u.push(m),h.push(m)}h.push([nr(a,l)+e+n*Math.cos(f+2*Math.PI+.5*s),nr(a,l)+r+i*Math.sin(f+2*Math.PI+.5*s)]),h.push([nr(a,l)+e+.98*n*Math.cos(f+s),nr(a,l)+r+.98*i*Math.sin(f+s)]),h.push([nr(a,l)+e+.9*n*Math.cos(f+.5*s),nr(a,l)+r+.9*i*Math.sin(f+.5*s)])}return[h,u]}function kK(t,e,r,n,i,a,s,l,u){let h=a+nr(.1,u),f=[];f.push([nr(l,u)+e+.9*n*Math.cos(h-t),nr(l,u)+r+.9*i*Math.sin(h-t)]);for(let d=h;d<=s;d+=t)f.push([nr(l,u)+e+n*Math.cos(d),nr(l,u)+r+i*Math.sin(d)]);return f.push([e+n*Math.cos(s),r+i*Math.sin(s)]),f.push([e+n*Math.cos(s),r+i*Math.sin(s)]),Fw(f,null,u)}function a_e(t,e,r,n,i,a,s,l){let u=[],h=[l.maxRandomnessOffset||1,(l.maxRandomnessOffset||1)+.3],f=[0,0],d=l.disableMultiStroke?1:2,p=l.preserveVertices;for(let m=0;m<d;m++)m===0?u.push({op:"move",data:[s[0],s[1]]}):u.push({op:"move",data:[s[0]+(p?0:nr(h[0],l)),s[1]+(p?0:nr(h[0],l))]}),f=p?[i,a]:[i+nr(h[m],l),a+nr(h[m],l)],u.push({op:"bcurveTo",data:[t+nr(h[m],l),e+nr(h[m],l),r+nr(h[m],l),n+nr(h[m],l),f[0],f[1]]});return u}function y2(t){return[...t]}function EK(t,e=0){let r=t.length;if(r<3)throw new Error("A curve must have at least three points.");let n=[];if(r===3)n.push(y2(t[0]),y2(t[1]),y2(t[2]),y2(t[2]));else{let i=[];i.push(t[0],t[0]);for(let l=1;l<t.length;l++)i.push(t[l]),l===t.length-1&&i.push(t[l]);let a=[],s=1-e;n.push(y2(i[0]));for(let l=1;l+2<i.length;l++){let u=i[l];a[0]=[u[0],u[1]],a[1]=[u[0]+(s*i[l+1][0]-s*i[l-1][0])/6,u[1]+(s*i[l+1][1]-s*i[l-1][1])/6],a[2]=[i[l+1][0]+(s*i[l][0]-s*i[l+2][0])/6,i[l+1][1]+(s*i[l][1]-s*i[l+2][1])/6],a[3]=[i[l+1][0],i[l+1][1]],n.push(a[1],a[2],a[3])}}return n}function Pw(t,e){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)}function s_e(t,e,r){let n=Pw(e,r);if(n===0)return Pw(t,e);let i=((t[0]-e[0])*(r[0]-e[0])+(t[1]-e[1])*(r[1]-e[1]))/n;return i=Math.max(0,Math.min(1,i)),Pw(t,Od(e,r,i))}function Od(t,e,r){return[t[0]+(e[0]-t[0])*r,t[1]+(e[1]-t[1])*r]}function qD(t,e,r,n){let i=n||[];if(function(l,u){let h=l[u+0],f=l[u+1],d=l[u+2],p=l[u+3],m=3*f[0]-2*h[0]-p[0];m*=m;let g=3*f[1]-2*h[1]-p[1];g*=g;let y=3*d[0]-2*p[0]-h[0];y*=y;let v=3*d[1]-2*p[1]-h[1];return v*=v,m<y&&(m=y),g<v&&(g=v),m+g}(t,e)<r){let l=t[e+0];i.length?(a=i[i.length-1],s=l,Math.sqrt(Pw(a,s))>1&&i.push(l)):i.push(l),i.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=Od(u,h,.5),m=Od(h,f,.5),g=Od(f,d,.5),y=Od(p,m,.5),v=Od(m,g,.5),x=Od(y,v,.5);qD([u,p,y,x],0,r,i),qD([x,v,g,d],0,r,i)}var a,s;return i}function o_e(t,e){return $w(t,0,t.length,e)}function $w(t,e,r,n,i){let a=i||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;f<r-1;++f){let d=s_e(t[f],s,l);d>u&&(u=d,h=f)}return Math.sqrt(u)>n?($w(t,e,h+1,n,a),$w(t,h,r,n,a)):(a.length||a.push(s),a.push(l)),a}function BD(t,e=.15,r){let n=[],i=(t.length-1)/3;for(let a=0;a<i;a++)qD(t,3*a,e,n);return r&&r>0?$w(n,0,n.length,r):n}var v2,FD,$D,zD,GD,VD,Rs,UD,r_e,ID,yK,Nw,n_e,ro,pm,YD,Iw,XD,Xe,Wt=N(()=>{"use strict";o(MD,"t");o(e_e,"e");o(t_e,"s");o(x2,"n");v2=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let n=x2(e,r);return{type:"fillSketch",ops:this.renderLines(n,r)}}renderLines(e,r){let n=[];for(let i of e)n.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],r));return n}};o(zw,"a");FD=class extends v2{static{o(this,"h")}fillPolygons(e,r){let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let i=x2(e,Object.assign({},r,{hachureGap:n})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*n*Math.cos(a),u=.5*n*Math.sin(a);for(let[h,f]of i)zw([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},$D=class extends v2{static{o(this,"r")}fillPolygons(e,r){let n=this._fillPolygons(e,r),i=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,i);return n.ops=n.ops.concat(a.ops),n}},zD=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let n=x2(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(n,r)}dotsOnLines(e,r){let n=[],i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=i/4;for(let l of e){let u=zw(l),h=u/i,f=Math.ceil(h)-1,d=u-f*i,p=(l[0][0]+l[1][0])/2-i/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g<f;g++){let y=m+d+g*i,v=p-s+2*Math.random()*s,x=y-s+2*Math.random()*s,b=this.helper.ellipse(v,x,a,a,r);n.push(...b.ops)}}return{type:"fillSketch",ops:n}}},GD=class{static{o(this,"c")}constructor(e){this.helper=e}fillPolygons(e,r){let n=x2(e,r);return{type:"fillSketch",ops:this.dashedLine(n,r)}}dashedLine(e,r){let n=r.dashOffset<0?r.hachureGap<0?4*r.strokeWidth:r.hachureGap:r.dashOffset,i=r.dashGap<0?r.hachureGap<0?4*r.strokeWidth:r.hachureGap:r.dashGap,a=[];return e.forEach(s=>{let l=zw(s),u=Math.floor(l/(n+i)),h=(l+i-u*(n+i))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m<u;m++){let g=m*(n+i),y=g+n,v=[f[0]+g*Math.cos(p)+h*Math.cos(p),f[1]+g*Math.sin(p)+h*Math.sin(p)],x=[f[0]+y*Math.cos(p)+h*Math.cos(p),f[1]+y*Math.sin(p)+h*Math.sin(p)];a.push(...this.helper.doubleLineOps(v[0],v[1],x[0],x[1],r))}}),a}},VD=class{static{o(this,"l")}constructor(e){this.helper=e}fillPolygons(e,r){let n=r.hachureGap<0?4*r.strokeWidth:r.hachureGap,i=r.zigzagOffset<0?n:r.zigzagOffset,a=x2(e,r=Object.assign({},r,{hachureGap:n+i}));return{type:"fillSketch",ops:this.zigzagLines(a,i,r)}}zigzagLines(e,r,n){let i=[];return e.forEach(a=>{let s=zw(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d<l;d++){let p=2*d*r,m=2*(d+1)*r,g=Math.sqrt(2*Math.pow(r,2)),y=[u[0]+p*Math.cos(f),u[1]+p*Math.sin(f)],v=[u[0]+m*Math.cos(f),u[1]+m*Math.sin(f)],x=[y[0]+g*Math.cos(f+Math.PI/4),y[1]+g*Math.sin(f+Math.PI/4)];i.push(...this.helper.doubleLineOps(y[0],y[1],x[0],x[1],n),...this.helper.doubleLineOps(x[0],x[1],v[0],v[1],n))}}),i}},Rs={},UD=class{static{o(this,"p")}constructor(e){this.seed=e}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}},r_e=0,ID=1,yK=2,Nw={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};o(OD,"k");o(jD,"b");o(SK,"y");o(CK,"m");o(g2,"w");o(AK,"x");n_e={randOffset:o(function(t,e){return nr(t,e)},"randOffset"),randOffsetWithRange:o(function(t,e,r){return Bw(t,e,r)},"randOffsetWithRange"),ellipse:o(function(t,e,r,n,i){let a=DK(r,n,i);return HD(t,e,i,a).opset},"ellipse"),doubleLineOps:o(function(t,e,r,n,i){return Uh(t,e,r,n,i,!0)},"doubleLineOps")};o(_K,"v");o(Ow,"S");o(i_e,"O");o(vK,"L");o(DK,"T");o(HD,"D");o(xK,"A");o(bK,"_");o(PD,"I");o(dm,"C");o(wK,"z");o(LK,"W");o(Bw,"E");o(nr,"G");o(Uh,"$");o(WD,"R");o(Mw,"j");o(Fw,"q");o(TK,"F");o(kK,"V");o(a_e,"Z");o(y2,"Q");o(EK,"H");o(Pw,"N");o(s_e,"B");o(Od,"J");o(qD,"K");o(o_e,"U");o($w,"X");o(BD,"Y");ro="none",pm=class{static{o(this,"et")}constructor(e){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=e||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(e){return e?Object.assign({},this.defaultOptions,e):this.defaultOptions}_d(e,r,n){return{shape:e,sets:r||[],options:n||this.defaultOptions}}line(e,r,n,i,a){let s=this._o(a);return this._d("line",[_K(e,r,n,i,s)],s)}rectangle(e,r,n,i,a){let s=this._o(a),l=[],u=i_e(e,r,n,i,s);if(s.fill){let h=[[e,r],[e+n,r],[e+n,r+i],[e,r+i]];s.fillStyle==="solid"?l.push(PD([h],s)):l.push(dm([h],s))}return s.stroke!==ro&&l.push(u),this._d("rectangle",l,s)}ellipse(e,r,n,i,a){let s=this._o(a),l=[],u=DK(n,i,s),h=HD(e,r,s,u);if(s.fill)if(s.fillStyle==="solid"){let f=HD(e,r,s,u).opset;f.type="fillPath",l.push(f)}else l.push(dm([h.estimatedPoints],s));return s.stroke!==ro&&l.push(h.opset),this._d("ellipse",l,s)}circle(e,r,n,i){let a=this.ellipse(e,r,n,n,i);return a.shape="circle",a}linearPath(e,r){let n=this._o(r);return this._d("linearPath",[Ow(e,!1,n)],n)}arc(e,r,n,i,a,s,l=!1,u){let h=this._o(u),f=[],d=xK(e,r,n,i,a,s,l,!0,h);if(l&&h.fill)if(h.fillStyle==="solid"){let p=Object.assign({},h);p.disableMultiStroke=!0;let m=xK(e,r,n,i,a,s,!0,!1,p);m.type="fillPath",f.push(m)}else f.push(function(p,m,g,y,v,x,b){let w=p,C=m,T=Math.abs(g/2),E=Math.abs(y/2);T+=nr(.01*T,b),E+=nr(.01*E,b);let A=v,S=x;for(;A<0;)A+=2*Math.PI,S+=2*Math.PI;S-A>2*Math.PI&&(A=0,S=2*Math.PI);let _=(S-A)/b.curveStepCount,I=[];for(let D=A;D<=S;D+=_)I.push([w+T*Math.cos(D),C+E*Math.sin(D)]);return I.push([w+T*Math.cos(S),C+E*Math.sin(S)]),I.push([w,C]),dm([I],b)}(e,r,n,i,a,s,h));return h.stroke!==ro&&f.push(d),this._d("arc",f,h)}curve(e,r){let n=this._o(r),i=[],a=vK(e,n);if(n.fill&&n.fill!==ro)if(n.fillStyle==="solid"){let s=vK(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...BD(EK([h[0],h[0],h[1],h[2]]),10,(1+n.roughness)/2)):s.push(...BD(EK(h),10,(1+n.roughness)/2))}s.length&&i.push(dm([s],n))}return n.stroke!==ro&&i.push(a),this._d("curve",i,n)}polygon(e,r){let n=this._o(r),i=[],a=Ow(e,!0,n);return n.fill&&(n.fillStyle==="solid"?i.push(PD([e],n)):i.push(dm([e],n))),n.stroke!==ro&&i.push(a),this._d("polygon",i,n)}path(e,r){let n=this._o(r),i=[];if(!e)return this._d("path",i,n);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=n.fill&&n.fill!=="transparent"&&n.fill!==ro,s=n.stroke!==ro,l=!!(n.simplification&&n.simplification<1),u=function(f,d,p){let m=CK(SK(jD(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...BD(x,d)),x=[]},"i"),w=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:T,data:E}of m)switch(T){case"M":w(),v=[E[0],E[1]],y.push(v);break;case"L":b(),y.push([E[0],E[1]]);break;case"C":if(!x.length){let A=y.length?y[y.length-1]:v;x.push([A[0],A[1]])}x.push([E[0],E[1]]),x.push([E[2],E[3]]),x.push([E[4],E[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(w(),!p)return g;let C=[];for(let T of g){let E=o_e(T,p);E.length&&C.push(E)}return C}(e,1,l?4-4*(n.simplification||1):(1+n.roughness)/2),h=bK(e,n);if(a)if(n.fillStyle==="solid")if(u.length===1){let f=bK(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else i.push(PD(u,n));else i.push(dm(u,n));return s&&(l?u.forEach(f=>{i.push(Ow(f,!1,n))}):i.push(h)),this._d("path",i,n)}opsToPath(e,r){let n="";for(let i of e.ops){let a=typeof r=="number"&&r>=0?i.data.map(s=>+s.toFixed(r)):i.data;switch(i.op){case"move":n+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":n+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":n+=`L${a[0]} ${a[1]} `}}return n.trim()}toPaths(e){let r=e.sets||[],n=e.options||this.defaultOptions,i=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:n.stroke,strokeWidth:n.strokeWidth,fill:ro};break;case"fillPath":s={d:this.opsToPath(a),stroke:ro,strokeWidth:0,fill:n.fill||ro};break;case"fillSketch":s=this.fillSketch(a,n)}s&&i.push(s)}return i}fillSketch(e,r){let n=r.fillWeight;return n<0&&(n=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||ro,strokeWidth:n,fill:ro}}_mergedShape(e){return e.filter((r,n)=>n===0||r.op!=="move")}},YD=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new pm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":i.save(),i.strokeStyle=n.stroke==="none"?"transparent":n.stroke,i.lineWidth=n.strokeWidth,n.strokeLineDash&&i.setLineDash(n.strokeLineDash),n.strokeLineDashOffset&&(i.lineDashOffset=n.strokeLineDashOffset),this._drawToContext(i,s,a),i.restore();break;case"fillPath":{i.save(),i.fillStyle=n.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,a,l),i.restore();break}case"fillSketch":this.fillSketch(i,s,n)}}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2),e.save(),n.fillLineDash&&e.setLineDash(n.fillLineDash),n.fillLineDashOffset&&(e.lineDashOffset=n.fillLineDashOffset),e.strokeStyle=n.fill||"",e.lineWidth=i,this._drawToContext(e,r,n.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,n,i="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof n=="number"&&n>=0?a.data.map(l=>+l.toFixed(n)):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(i):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s),s}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s),s}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s),s}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a),a}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n),n}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n),n}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h),h}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n),n}path(e,r){let n=this.gen.path(e,r);return this.draw(n),n}},Iw="http://www.w3.org/2000/svg",XD=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new pm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,a=i.createElementNS(Iw,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=i.createElementNS(Iw,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",n.stroke),u.setAttribute("stroke-width",n.strokeWidth+""),u.setAttribute("fill","none"),n.strokeLineDash&&u.setAttribute("stroke-dasharray",n.strokeLineDash.join(" ").trim()),n.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${n.strokeLineDashOffset}`);break;case"fillPath":u=i.createElementNS(Iw,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",n.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(i,l,n)}u&&a.appendChild(u)}return a}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2);let a=e.createElementNS(Iw,"path");return a.setAttribute("d",this.opsToPath(r,n.fixedDecimalPlaceDigits)),a.setAttribute("stroke",n.fill||""),a.setAttribute("stroke-width",i+""),a.setAttribute("fill","none"),n.fillLineDash&&a.setAttribute("stroke-dasharray",n.fillLineDash.join(" ").trim()),n.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${n.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s)}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s)}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s)}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a)}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n)}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n)}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h)}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n)}path(e,r){let n=this.gen.path(e,r);return this.draw(n)}},Xe={canvas:o((t,e)=>new YD(t,e),"canvas"),svg:o((t,e)=>new XD(t,e),"svg"),generator:o(t=>new pm(t),"generator"),newSeed:o(()=>pm.newSeed(),"newSeed")}});function RK(t,e){let{labelStyles:r}=Qe(e);e.labelStyle=r;let n=ht(e),i=n;n||(i="anchor");let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=Xe.svg(a),h=Ke(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",$n(l)),je(e,d),e.intersect=function(p){return Y.info("Circle intersect",e,s,p),Ye.circle(e,s,p)},a}var NK=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(RK,"anchor")});function MK(t,e,r,n,i,a,s){let u=(t+r)/2,h=(e+n)/2,f=Math.atan2(n-e,r-t),d=(r-t)/2,p=(n-e)/2,m=d/i,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*i*Math.cos(f)*(s?-1:1),w=Math.atan2((e-b)/a,(t-x)/i),T=Math.atan2((n-b)/a,(r-x)/i)-w;s&&T<0&&(T+=2*Math.PI),!s&&T>0&&(T-=2*Math.PI);let E=[];for(let A=0;A<20;A++){let S=A/19,_=w+S*T,I=x+i*Math.cos(_),D=b+a*Math.sin(_);E.push({x:I,y:D})}return E}async function IK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding+20,l=a.height+e.padding,u=l/2,h=u/(2.5+l/50),{cssStyles:f}=e,d=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...MK(-s/2,-l/2,-s/2,l/2,h,u,!1),{x:s/2,y:l/2},...MK(s/2,l/2,s/2,-l/2,h,u,!0)],p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(d),y=p.path(g,m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(${h/2}, 0)`),je(e,v),e.intersect=function(x){return Ye.polygon(e,d,x)},i}var OK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(MK,"generateArcPoints");o(IK,"bowTieRect")});function La(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var _u=N(()=>{"use strict";o(La,"insertPolygonShape")});async function PK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.height+e.padding,l=12,u=a.width+e.padding+l,h=0,f=u,d=-s,p=0,m=[{x:h+l,y:d},{x:f,y:d},{x:f,y:p},{x:h,y:p},{x:h,y:d+l},{x:h+l,y:d}],g,{cssStyles:y}=e;if(e.look==="handDrawn"){let v=Xe.svg(i),x=Ke(e,{}),b=Xt(m),w=v.path(b,x);g=i.insert(()=>w,":first-child").attr("transform",`translate(${-u/2}, ${s/2})`),y&&g.attr("style",y)}else g=La(i,u,s,m);return n&&g.attr("style",n),je(e,g),e.intersect=function(v){return Ye.polygon(e,m,v)},i}var BK=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();Ft();o(PK,"card")});function FK(t,e){let{nodeStyles:r}=Qe(e);e.label="";let n=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:i}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=Xe.svg(n),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=Xt(s),f=l.path(h,u),d=n.insert(()=>f,":first-child");return i&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",i),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return Ye.polygon(e,s,p)},n}var $K=N(()=>{"use strict";Ht();Wt();Ut();Ft();o(FK,"choice")});async function zK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await pt(t,e,ht(e)),l=a.width/2+s,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=f.circle(0,0,l*2,d);u=i.insert(()=>p,":first-child"),u.attr("class","basic label-container").attr("style",$n(h))}else u=i.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",l).attr("cx",0).attr("cy",0);return je(e,u),e.intersect=function(f){return Y.info("Circle intersect",e,l,f),Ye.circle(e,l,f)},i}var GK=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(zK,"circle")});function l_e(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=t*2,i={x:n/2*e,y:n/2*r},a={x:-(n/2)*e,y:n/2*r},s={x:-(n/2)*e,y:-(n/2)*r},l={x:n/2*e,y:-(n/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y} | |
| 449 | + M ${i.x},${i.y} L ${s.x},${s.y}`}function VK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r,e.label="";let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=Xe.svg(i),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=l_e(a),d=l.path(f,u),p=i.insert(()=>h,":first-child");return p.insert(()=>d),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),je(e,p),e.intersect=function(m){return Y.info("crossedCircle intersect",e,{radius:a,point:m}),Ye.circle(e,a,m)},i}var UK=N(()=>{"use strict";vt();Ft();Ut();Wt();Ht();o(l_e,"createLine");o(VK,"crossedCircle")});function Hh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}async function HK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Hh(l/2,-u/2,h,30,-90,0),{x:-l/2-h,y:h},...Hh(l/2+h*2,-h,h,20,-180,-270),...Hh(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:-u/2},...Hh(l/2,u/2,h,20,0,90)],p=[{x:l/2,y:-u/2-h},{x:-l/2,y:-u/2-h},...Hh(l/2,-u/2,h,20,-90,0),{x:-l/2-h,y:-h},...Hh(l/2+l*.1,-h,h,20,-180,-270),...Hh(l/2+l*.1,h,h,20,-90,-180),{x:-l/2-h,y:u/2},...Hh(l/2,u/2,h,20,0,90),{x:-l/2,y:u/2+h},{x:l/2,y:u/2+h}],m=Xe.svg(i),g=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let v=Xt(d).replace("Z",""),x=m.path(v,g),b=Xt(p),w=m.path(b,{...g}),C=i.insert("g",":first-child");return C.insert(()=>w,":first-child").attr("stroke-opacity",0),C.insert(()=>x,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${h}, 0)`),s.attr("transform",`translate(${-l/2+h-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var WK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Hh,"generateCirclePoints");o(HK,"curlyBraceLeft")});function Wh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:m,y:g})}return s}async function qK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Wh(l/2,-u/2,h,20,-90,0),{x:l/2+h,y:-h},...Wh(l/2+h*2,-h,h,20,-180,-270),...Wh(l/2+h*2,h,h,20,-90,-180),{x:l/2+h,y:u/2},...Wh(l/2,u/2,h,20,0,90)],p=[{x:-l/2,y:-u/2-h},{x:l/2,y:-u/2-h},...Wh(l/2,-u/2,h,20,-90,0),{x:l/2+h,y:-h},...Wh(l/2+h*2,-h,h,20,-180,-270),...Wh(l/2+h*2,h,h,20,-90,-180),{x:l/2+h,y:u/2},...Wh(l/2,u/2,h,20,0,90),{x:l/2,y:u/2+h},{x:-l/2,y:u/2+h}],m=Xe.svg(i),g=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let v=Xt(d).replace("Z",""),x=m.path(v,g),b=Xt(p),w=m.path(b,{...g}),C=i.insert("g",":first-child");return C.insert(()=>w,":first-child").attr("stroke-opacity",0),C.insert(()=>x,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${-h}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var YK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Wh,"generateCirclePoints");o(qK,"curlyBraceRight")});function Ra(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}async function XK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Ra(l/2,-u/2,h,30,-90,0),{x:-l/2-h,y:h},...Ra(l/2+h*2,-h,h,20,-180,-270),...Ra(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:-u/2},...Ra(l/2,u/2,h,20,0,90)],p=[...Ra(-l/2+h+h/2,-u/2,h,20,-90,-180),{x:l/2-h/2,y:h},...Ra(-l/2-h/2,-h,h,20,0,90),...Ra(-l/2-h/2,h,h,20,-90,0),{x:l/2-h/2,y:-h},...Ra(-l/2+h+h/2,u/2,h,30,-180,-270)],m=[{x:l/2,y:-u/2-h},{x:-l/2,y:-u/2-h},...Ra(l/2,-u/2,h,20,-90,0),{x:-l/2-h,y:-h},...Ra(l/2+h*2,-h,h,20,-180,-270),...Ra(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:u/2},...Ra(l/2,u/2,h,20,0,90),{x:-l/2,y:u/2+h},{x:l/2-h-h/2,y:u/2+h},...Ra(-l/2+h+h/2,-u/2,h,20,-90,-180),{x:l/2-h/2,y:h},...Ra(-l/2-h/2,-h,h,20,0,90),...Ra(-l/2-h/2,h,h,20,-90,0),{x:l/2-h/2,y:-h},...Ra(-l/2+h+h/2,u/2,h,30,-180,-270)],g=Xe.svg(i),y=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let x=Xt(d).replace("Z",""),b=g.path(x,y),C=Xt(p).replace("Z",""),T=g.path(C,y),E=Xt(m),A=g.path(E,{...y}),S=i.insert("g",":first-child");return S.insert(()=>A,":first-child").attr("stroke-opacity",0),S.insert(()=>b,":first-child"),S.insert(()=>T,":first-child"),S.attr("class","text"),f&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${h-h/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(_){return Ye.polygon(e,m,_)},i}var jK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Ra,"generateCirclePoints");o(XK,"curlyBraces")});async function KK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=80,l=20,u=Math.max(s,(a.width+(e.padding??0)*2)*1.25,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=u,y=h,v=g-f,x=y/4,b=[{x:v,y:0},{x,y:0},{x:0,y:y/2},{x,y},{x:v,y},...Lw(-v,-y/2,f,50,270,90)],w=Xt(b),C=p.path(w,m),T=i.insert(()=>C,":first-child");return T.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",n),T.attr("transform",`translate(${-u/2}, ${-h/2})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var QK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(KK,"curvedTrapezoid")});async function ZK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+e.padding,e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+e.padding,e.height??0),d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=u_e(0,0,l,f,u,h),y=h_e(0,h,l,f,u,h),v=m.path(g,Ke(e,{})),x=m.path(y,Ke(e,{fill:"none"}));d=i.insert(()=>x,":first-child"),d=i.insert(()=>v,":first-child"),d.attr("class","basic label-container"),p&&d.attr("style",p)}else{let m=c_e(0,0,l,f,u,h);d=i.insert("path",":first-child").attr("d",m).attr("class","basic label-container").attr("style",$n(p)).attr("style",n)}return d.attr("label-offset-y",h),d.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,d),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+(e.padding??0)/1.5-(a.y-(a.top??0))})`),e.intersect=function(m){let g=Ye.rect(e,m),y=g.x-(e.x??0);if(u!=0&&(Math.abs(y)<(e.width??0)/2||Math.abs(y)==(e.width??0)/2&&Math.abs(g.y-(e.y??0))>(e.height??0)/2-h)){let v=h*h*(1-y*y/(u*u));v>0&&(v=Math.sqrt(v)),v=h-v,m.y-(e.y??0)>0&&(v=-v),g.y+=v}return g},i}var c_e,u_e,h_e,JK=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();c_e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createCylinderPathD"),u_e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createOuterCylinderPathD"),h_e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(ZK,"cylinder")});async function eQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+e.padding,u=a.height+e.padding,h=u*.2,f=-l/2,d=-u/2-h/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d+h},{x:-f,y:d+h},{x:-f,y:-d},{x:f,y:-d},{x:f,y:d},{x:-f,y:d},{x:-f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${f+(e.padding??0)/2-(a.x-(a.left??0))}, ${d+h+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var tQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(eQ,"dividedRectangle")});async function rQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await pt(t,e,ht(e)),u=a.width/2+s+5,h=a.width/2+s,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{roughness:.2,strokeWidth:2.5}),g=Ke(e,{roughness:.2,strokeWidth:1.5}),y=p.circle(0,0,u*2,m),v=p.circle(0,0,h*2,g);f=i.insert("g",":first-child"),f.attr("class",$n(e.cssClasses)).attr("style",$n(d)),f.node()?.appendChild(y),f.node()?.appendChild(v)}else{f=i.insert("g",":first-child");let p=f.insert("circle",":first-child"),m=f.insert("circle");f.attr("class","basic label-container").attr("style",n),p.attr("class","outer-circle").attr("style",n).attr("r",u).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",n).attr("r",h).attr("cx",0).attr("cy",0)}return je(e,f),e.intersect=function(p){return Y.info("DoubleCircle intersect",e,u,p),Ye.circle(e,u,p)},i}var nQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(rQ,"doublecircle")});function iQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.label="",e.labelStyle=n;let a=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=Xe.svg(a),{nodeBorder:h}=r,f=Ke(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),je(e,p),e.intersect=function(m){return Y.info("filledCircle intersect",e,{radius:s,point:m}),Ye.circle(e,s,m)},a}var aQ=N(()=>{"use strict";Wt();vt();Ht();Ut();Ft();o(iQ,"filledCircle")});async function sQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=l+a.height,h=l+a.height,f=[{x:0,y:-u},{x:h,y:-u},{x:h/2,y:0}],{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(f),y=p.path(g,m),v=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`);return d&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),e.width=l,e.height=u,je(e,v),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${-u/2+(e.padding??0)/2+(a.y-(a.top??0))})`),e.intersect=function(x){return Y.info("Triangle intersect",e,f,x),Ye.polygon(e,f,x)},i}var oQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();Ft();o(sQ,"flippedTriangle")});function lQ(t,e,{dir:r,config:{state:n,themeVariables:i}}){let{nodeStyles:a}=Qe(e);e.label="";let s=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=Xe.svg(s),m=Ke(e,{stroke:i.lineColor,fill:i.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),je(e,y);let v=n?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return Ye.rect(e,x)},s}var cQ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(lQ,"forkJoin")});async function uQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i=80,a=50,{shapeSvg:s,bbox:l}=await pt(t,e,ht(e)),u=Math.max(i,l.width+(e.padding??0)*2,e?.width??0),h=Math.max(a,l.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(s),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-u/2,y:-h/2},{x:u/2-f,y:-h/2},...Lw(-u/2+f,0,f,50,90,270),{x:u/2-f,y:h/2},{x:-u/2,y:h/2}],y=Xt(g),v=p.path(y,m),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),je(e,x),e.intersect=function(b){return Y.info("Pill intersect",e,{radius:f,point:b}),Ye.polygon(e,g,b)},s}var hQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();o(uQ,"halfRoundedRectangle")});async function fQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=4,l=a.height+e.padding,u=l/s,h=a.width+2*u+e.padding,f=[{x:u,y:0},{x:h-u,y:0},{x:h,y:-l/2},{x:h-u,y:-l},{x:u,y:-l},{x:0,y:-l/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=Ke(e,{}),y=f_e(0,0,h,l,u),v=m.path(y,g);d=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${l/2})`),p&&d.attr("style",p)}else d=La(i,h,l,f);return n&&d.attr("style",n),e.width=h,e.height=l,je(e,d),e.intersect=function(m){return Ye.polygon(e,f,m)},i}var f_e,dQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();f_e=o((t,e,r,n,i)=>[`M${t+i},${e}`,`L${t+r-i},${e}`,`L${t+r},${e-n/2}`,`L${t+r-i},${e-n}`,`L${t+i},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createHexagonPathD");o(fQ,"hexagon")});async function pQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.label="",e.labelStyle=r;let{shapeSvg:i}=await pt(t,e,ht(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=Xe.svg(i),h=Ke(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=Xt(f),p=u.path(d,h),m=i.insert(()=>p,":first-child");return m.attr("class","basic label-container"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),n&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",n),m.attr("transform",`translate(${-a/2}, ${-s/2})`),je(e,m),e.intersect=function(g){return Y.info("Pill intersect",e,{points:f}),Ye.polygon(e,f,g)},i}var mQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();o(pQ,"hourglass")});async function gQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await pt(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=mc(e),x=-g/2,b=-m/2,w=e.label?8:0,C=Xe.svg(h),T=Ke(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let E=C.rectangle(x,b,g,m,T),A=Math.max(g,f.width),S=m+f.height+w,_=C.rectangle(-A/2,-S/2,A,S,{...T,fill:"transparent",stroke:"none"}),I=h.insert(()=>E,":first-child"),D=h.insert(()=>_);if(e.icon){let k=h.append("g");k.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let L=k.node().getBBox(),R=L.width,O=L.height,M=L.x,B=L.y;k.attr("transform",`translate(${-R/2-M},${p?f.height/2+w/2-O/2-B:-f.height/2-w/2-O/2-B})`),k.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-S/2:S/2-f.height})`),I.attr("transform",`translate(0,${p?f.height/2+w/2:-f.height/2-w/2})`),je(e,D),e.intersect=function(k){if(Y.info("iconSquare intersect",e,k),!e.label)return Ye.rect(e,k);let L=e.x??0,R=e.y??0,O=e.height??0,M=[];return p?M=[{x:L-f.width/2,y:R-O/2},{x:L+f.width/2,y:R-O/2},{x:L+f.width/2,y:R-O/2+f.height+w},{x:L+g/2,y:R-O/2+f.height+w},{x:L+g/2,y:R+O/2},{x:L-g/2,y:R+O/2},{x:L-g/2,y:R-O/2+f.height+w},{x:L-f.width/2,y:R-O/2+f.height+w}]:M=[{x:L-g/2,y:R-O/2},{x:L+g/2,y:R-O/2},{x:L+g/2,y:R-O/2+m},{x:L+f.width/2,y:R-O/2+m},{x:L+f.width/2/2,y:R+O/2},{x:L-f.width/2,y:R+O/2},{x:L-f.width/2,y:R-O/2+m},{x:L-g/2,y:R-O/2+m}],Ye.polygon(e,M,k)},h}var yQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();Ft();o(gQ,"icon")});async function vQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await pt(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=mc(e),b=Xe.svg(h),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=x.get("fill");w.stroke=C??v;let T=h.append("g");e.icon&&T.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let E=T.node().getBBox(),A=E.width,S=E.height,_=E.x,I=E.y,D=Math.max(A,S)*Math.SQRT2+p*2,k=b.circle(0,0,D,w),L=Math.max(D,f.width),R=D+f.height+m,O=b.rectangle(-L/2,-R/2,L,R,{...w,fill:"transparent",stroke:"none"}),M=h.insert(()=>k,":first-child"),B=h.insert(()=>O);return T.attr("transform",`translate(${-A/2-_},${g?f.height/2+m/2-S/2-I:-f.height/2-m/2-S/2-I})`),T.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-R/2:R/2-f.height})`),M.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),je(e,B),e.intersect=function(F){return Y.info("iconSquare intersect",e,F),Ye.rect(e,F)},h}var xQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();Ft();o(vQ,"iconCircle")});var Na,qh=N(()=>{"use strict";Na=o((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD")});async function bQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await pt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=mc(e),w=-y/2,C=-g/2,T=e.label?8:0,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=b.get("fill");A.stroke=S??x;let _=E.path(Na(w,C,y,g,5),A),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...A,fill:"transparent",stroke:"none"}),L=h.insert(()=>_,":first-child").attr("class","icon-shape2"),R=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let M=O.node().getBBox(),B=M.width,F=M.height,P=M.x,z=M.y;O.attr("transform",`translate(${-B/2-P},${m?f.height/2+T/2-F/2-z:-f.height/2-T/2-F/2-z})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),L.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,R),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let M=e.x??0,B=e.y??0,F=e.height??0,P=[];return m?P=[{x:M-f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2+f.height+T},{x:M+y/2,y:B-F/2+f.height+T},{x:M+y/2,y:B+F/2},{x:M-y/2,y:B+F/2},{x:M-y/2,y:B-F/2+f.height+T},{x:M-f.width/2,y:B-F/2+f.height+T}]:P=[{x:M-y/2,y:B-F/2},{x:M+y/2,y:B-F/2},{x:M+y/2,y:B-F/2+g},{x:M+f.width/2,y:B-F/2+g},{x:M+f.width/2/2,y:B+F/2},{x:M-f.width/2,y:B+F/2},{x:M-f.width/2,y:B-F/2+g},{x:M-y/2,y:B-F/2+g}],Ye.polygon(e,P,O)},h}var wQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();qh();Ft();o(bQ,"iconRounded")});async function TQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await pt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=mc(e),w=-y/2,C=-g/2,T=e.label?8:0,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=b.get("fill");A.stroke=S??x;let _=E.path(Na(w,C,y,g,.1),A),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...A,fill:"transparent",stroke:"none"}),L=h.insert(()=>_,":first-child"),R=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let M=O.node().getBBox(),B=M.width,F=M.height,P=M.x,z=M.y;O.attr("transform",`translate(${-B/2-P},${m?f.height/2+T/2-F/2-z:-f.height/2-T/2-F/2-z})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),L.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,R),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let M=e.x??0,B=e.y??0,F=e.height??0,P=[];return m?P=[{x:M-f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2+f.height+T},{x:M+y/2,y:B-F/2+f.height+T},{x:M+y/2,y:B+F/2},{x:M-y/2,y:B+F/2},{x:M-y/2,y:B-F/2+f.height+T},{x:M-f.width/2,y:B-F/2+f.height+T}]:P=[{x:M-y/2,y:B-F/2},{x:M+y/2,y:B-F/2},{x:M+y/2,y:B-F/2+g},{x:M+f.width/2,y:B-F/2+g},{x:M+f.width/2/2,y:B+F/2},{x:M-f.width/2,y:B+F/2},{x:M-f.width/2,y:B-F/2+g},{x:M-y/2,y:B-F/2+g}],Ye.polygon(e,P,O)},h}var kQ=N(()=>{"use strict";Wt();vt();tu();Ht();qh();Ut();Ft();o(TQ,"iconSquare")});async function EQ(t,e,{config:{flowchart:r}}){let n=new Image;n.src=e?.img??"",await n.decode();let i=Number(n.naturalWidth.toString().replace("px","")),a=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=i/a;let{labelStyles:s}=Qe(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??i),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await pt(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=Xe.svg(d),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=b.rectangle(y,v,h,f,w),T=Math.max(h,p.width),E=f+p.height+x,A=b.rectangle(-T/2,-E/2,T,E,{...w,fill:"none",stroke:"none"}),S=d.insert(()=>C,":first-child"),_=d.insert(()=>A);if(e.img){let I=d.append("image");I.attr("href",e.img),I.attr("width",h),I.attr("height",f),I.attr("preserveAspectRatio","none"),I.attr("transform",`translate(${-h/2},${g?E/2-f:-E/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),S.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),je(e,_),e.intersect=function(I){if(Y.info("iconSquare intersect",e,I),!e.label)return Ye.rect(e,I);let D=e.x??0,k=e.y??0,L=e.height??0,R=[];return g?R=[{x:D-p.width/2,y:k-L/2},{x:D+p.width/2,y:k-L/2},{x:D+p.width/2,y:k-L/2+p.height+x},{x:D+h/2,y:k-L/2+p.height+x},{x:D+h/2,y:k+L/2},{x:D-h/2,y:k+L/2},{x:D-h/2,y:k-L/2+p.height+x},{x:D-p.width/2,y:k-L/2+p.height+x}]:R=[{x:D-h/2,y:k-L/2},{x:D+h/2,y:k-L/2},{x:D+h/2,y:k-L/2+f},{x:D+p.width/2,y:k-L/2+f},{x:D+p.width/2/2,y:k+L/2},{x:D-p.width/2,y:k+L/2},{x:D-p.width/2,y:k-L/2+f},{x:D-h/2,y:k-L/2+f}],Ye.polygon(e,R,I)},d}var SQ=N(()=>{"use strict";Wt();vt();Ht();Ut();Ft();o(EQ,"imageSquare")});async function CQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var AQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(CQ,"inv_trapezoid")});async function Du(t,e,r){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n;let{shapeSvg:a,bbox:s}=await pt(t,e,ht(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=Xe.svg(a),v=Ke(e,{}),x=p||m?y.path(Na(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",$n(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",i).attr("rx",$n(p)).attr("ry",$n(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return je(e,d),e.intersect=function(y){return Ye.rect(e,y)},a}var mm=N(()=>{"use strict";Ft();Ht();qh();Ut();Wt();ir();o(Du,"drawRect")});async function _Q(t,e){let{shapeSvg:r,bbox:n,label:i}=await pt(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-(n.width/2)-(n.x-(n.left??0))}, ${-(n.height/2)-(n.y-(n.top??0))})`),je(e,a),e.intersect=function(u){return Ye.rect(e,u)},r}var DQ=N(()=>{"use strict";mm();Ft();Ht();o(_Q,"labelRect")});async function LQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-(3*l)/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var RQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(LQ,"lean_left")});async function NQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var MQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(NQ,"lean_right")});function IQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.label="",e.labelStyle=r;let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=Xe.svg(i),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=Xt(h),m=f.path(p,d),g=i.insert(()=>m,":first-child");return a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),n&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",n),g.attr("transform",`translate(-${s/2},${-l})`),je(e,g),e.intersect=function(y){return Y.info("lightningBolt intersect",e,y),Ye.polygon(e,h,y)},i}var OQ=N(()=>{"use strict";vt();Ft();Ut();Wt();Ht();Ft();o(IQ,"lightningBolt")});async function PQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+(e.padding??0),e.height??0),d=f*.1,p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=Xe.svg(i),y=p_e(0,0,l,f,u,h,d),v=m_e(0,h,l,f,u,h),x=Ke(e,{}),b=g.path(y,x),w=g.path(v,x);i.insert(()=>w,":first-child").attr("class","line"),p=i.insert(()=>b,":first-child"),p.attr("class","basic label-container"),m&&p.attr("style",m)}else{let g=d_e(0,0,l,f,u,h,d);p=i.insert("path",":first-child").attr("d",g).attr("class","basic label-container").attr("style",$n(m)).attr("style",n)}return p.attr("label-offset-y",h),p.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,p),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),e.intersect=function(g){let y=Ye.rect(e,g),v=y.x-(e.x??0);if(u!=0&&(Math.abs(v)<(e.width??0)/2||Math.abs(v)==(e.width??0)/2&&Math.abs(y.y-(e.y??0))>(e.height??0)/2-h)){let x=h*h*(1-v*v/(u*u));x>0&&(x=Math.sqrt(x)),x=h-x,g.y-(e.y??0)>0&&(x=-x),y.y+=x}return y},i}var d_e,p_e,m_e,BQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();d_e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),p_e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),m_e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(PQ,"linedCylinder")});async function FQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-l/2-l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:f/2},...Fo(-l/2-l/2*.1,f/2,l/2+l/2*.1,f/2,h,.8),{x:l/2+l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:-f/2},{x:-l/2,y:-f/2},{x:-l/2,y:f/2*1.1},{x:-l/2,y:-f/2}],y=p.polygon(g.map(x=>[x.x,x.y]),m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,v),e.intersect=function(x){return Ye.polygon(e,g,x)},i}var $Q=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(FQ,"linedWaveEdgedRect")});async function zQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d+h},{x:f-h,y:d+u+h},{x:f+l-h,y:d+u+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d+u-h},{x:f+l+h,y:d+u-h},{x:f+l+h,y:d-h},{x:f+h,y:d-h},{x:f+h,y:d},{x:f,y:d},{x:f,y:d+h}],v=[{x:f,y:d+h},{x:f+l-h,y:d+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d},{x:f,y:d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),w=Xt(v),C=m.path(w,{...g,fill:"none"}),T=i.insert(()=>C,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)-h-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var GQ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(zQ,"multiRect")});async function VQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,d=-l/2,p=-f/2,m=5,{cssStyles:g}=e,y=Fo(d-m,p+f+m,d+l-m,p+f+m,h,.8),v=y?.[y.length-1],x=[{x:d-m,y:p+m},{x:d-m,y:p+f+m},...y,{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:v.y-2*m},{x:d+l+m,y:v.y-2*m},{x:d+l+m,y:p-m},{x:d+m,y:p-m},{x:d+m,y:p},{x:d,y:p},{x:d,y:p+m}],b=[{x:d,y:p+m},{x:d+l-m,y:p+m},{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:p},{x:d,y:p}],w=Xe.svg(i),C=Ke(e,{});e.look!=="handDrawn"&&(C.roughness=0,C.fillStyle="solid");let T=Xt(x),E=w.path(T,C),A=Xt(b),S=w.path(A,C),_=i.insert(()=>E,":first-child");return _.insert(()=>S),_.attr("class","basic label-container"),g&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",g),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-(a.width/2)-m-(a.x-(a.left??0))}, ${-(a.height/2)+m-h/2-(a.y-(a.top??0))})`),je(e,_),e.intersect=function(I){return Ye.polygon(e,x,I)},i}var UQ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(VQ,"multiWaveEdgedRectangle")});async function HQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n,e.useHtmlLabels||cr().flowchart?.htmlLabels!==!1||(e.centerLabel=!0);let{shapeSvg:s,bbox:l}=await pt(t,e,ht(e)),u=Math.max(l.width+(e.padding??0)*2,e?.width??0),h=Math.max(l.height+(e.padding??0)*2,e?.height??0),f=-u/2,d=-h/2,{cssStyles:p}=e,m=Xe.svg(s),g=Ke(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=m.rectangle(f,d,u,h,g),v=s.insert(()=>y,":first-child");return v.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",i),je(e,v),e.intersect=function(x){return Ye.rect(e,x)},s}var WQ=N(()=>{"use strict";Wt();Ht();Ut();Ft();ji();o(HQ,"note")});async function qQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=s+l,h=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=g_e(0,0,u),y=p.path(g,m);f=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`),d&&f.attr("style",d)}else f=La(i,u,u,h);return n&&f.attr("style",n),je(e,f),e.intersect=function(p){return Y.debug(`APA12 Intersect called SPLIT | |
| 450 | +point:`,p,` | |
| 451 | +node: | |
| 452 | +`,e,` | |
| 453 | +res:`,Ye.polygon(e,h,p)),Ye.polygon(e,h,p)},i}var g_e,YQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();_u();g_e=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(qQ,"question")});async function XQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e?.width??0),u=Math.max(a.height+(e.padding??0),e?.height??0),h=-l/2,f=-u/2,d=f/2,p=[{x:h+d,y:f},{x:h,y:0},{x:h+d,y:-f},{x:-h,y:-f},{x:-h,y:f}],{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=Xt(p),x=g.path(v,y),b=i.insert(()=>x,":first-child");return b.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(${-d/2},0)`),s.attr("transform",`translate(${-d/2-a.width/2-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,p,w)},i}var jQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(XQ,"rect_left_inv_arrow")});function y_e(t,e){e&&t.attr("style",e)}async function v_e(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label;t.label&&pi(t.label)&&(n=await mh(t.label.replace(Ze.lineBreakRegex,` | |
| 454 | +`),me()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+n+"</span>"),y_e(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var x_e,gc,Gw=N(()=>{"use strict";dr();vt();zt();gr();ir();o(y_e,"applyStyle");o(v_e,"addHtmlLabel");x_e=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),fr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),Y.info("vertexText"+i);let a={isNode:n,label:na(i).replace(/fa[blrs]?:fa-[\w-]+/g,l=>`<i class='${l.replace(":"," ")}'></i>`),labelStyle:e&&e.replace("fill:","color:")};return await v_e(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),gc=x_e});async function KQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i;e.cssClasses?i="node "+e.cssClasses:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",n),u=e.description,h=e.label,f=l.node().appendChild(await gc(h,e.labelStyle,!0,!0)),d={width:0,height:0};if(fr(me()?.flowchart?.htmlLabels)){let S=f.children[0],_=Ge(f);d=S.getBoundingClientRect(),_.attr("width",d.width),_.attr("height",d.height)}Y.info("Text 2",u);let p=u||[],m=f.getBBox(),g=l.node().appendChild(await gc(p.join?p.join("<br/>"):p,e.labelStyle,!0,!0)),y=g.children[0],v=Ge(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;Ge(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),Ge(f).attr("transform","translate( "+(d.width<m.width?0:-(m.width-d.width)/2)+", 0)"),d=l.node().getBBox(),l.attr("transform","translate("+-d.width/2+", "+(-d.height/2-x+3)+")");let b=d.width+(e.padding||0),w=d.height+(e.padding||0),C=-d.width/2-x,T=-d.height/2-x,E,A;if(e.look==="handDrawn"){let S=Xe.svg(a),_=Ke(e,{}),I=S.path(Na(C,T,b,w,e.rx||0),_),D=S.line(-d.width/2-x,-d.height/2-x+m.height+x,d.width/2+x,-d.height/2-x+m.height+x,_);A=a.insert(()=>(Y.debug("Rough node insert CXC",I),D),":first-child"),E=a.insert(()=>(Y.debug("Rough node insert CXC",I),I),":first-child")}else E=s.insert("rect",":first-child"),A=s.insert("line"),E.attr("class","outer title-state").attr("style",n).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),A.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return je(e,E),e.intersect=function(S){return Ye.rect(e,S)},a}var QQ=N(()=>{"use strict";dr();gr();Ft();Gw();Ht();Ut();Wt();zt();qh();vt();o(KQ,"rectWithTitle")});async function ZQ(t,e){let r={rx:5,ry:5,classes:"",labelPaddingX:(e?.padding||0)*1,labelPaddingY:(e?.padding||0)*1};return Du(t,e,r)}var JQ=N(()=>{"use strict";mm();o(ZQ,"roundedRect")});async function eZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=e?.padding??0,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=-a.width/2-l,d=-a.height/2-l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d},{x:f+u+8,y:d},{x:f+u+8,y:d+h},{x:f-8,y:d+h},{x:f-8,y:d},{x:f,y:d},{x:f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container").attr("style",$n(p)),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${-u/2+4+(e.padding??0)-(a.x-(a.left??0))},${-h/2+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var tZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();o(eZ,"shadedProcess")});async function rZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=-l/2,f=-u/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:h,y:f},{x:h,y:f+u},{x:h+l,y:f+u},{x:h+l,y:f-u/2}],y=Xt(g),v=p.path(y,m),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),x.attr("transform",`translate(0, ${u/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))}, ${-u/4+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.polygon(e,g,b)},i}var nZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(rZ,"slopedRect")});async function iZ(t,e){let r={rx:0,ry:0,classes:"",labelPaddingX:(e?.padding||0)*2,labelPaddingY:(e?.padding||0)*1};return Du(t,e,r)}var aZ=N(()=>{"use strict";mm();o(iZ,"squareRect")});async function sZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.height+e.padding,l=a.width+s/4+e.padding,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=Na(-l/2,-s/2,l,s,s/2),m=f.path(p,d);u=i.insert(()=>m,":first-child"),u.attr("class","basic label-container").attr("style",$n(h))}else u=i.insert("rect",":first-child"),u.attr("class","basic label-container").attr("style",n).attr("rx",s/2).attr("ry",s/2).attr("x",-l/2).attr("y",-s/2).attr("width",l).attr("height",s);return je(e,u),e.intersect=function(f){return Ye.rect(e,f)},i}var oZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();qh();ir();o(sZ,"stadium")});async function lZ(t,e){return Du(t,e,{rx:5,ry:5,classes:"flowchart-node"})}var cZ=N(()=>{"use strict";mm();o(lZ,"state")});function uZ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u}=r,h=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),f=Xe.svg(h),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=f.circle(0,0,14,{...d,stroke:s,strokeWidth:2}),m=l??u,g=f.circle(0,0,5,{...d,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),y=h.insert(()=>p,":first-child");return y.insert(()=>g),a&&y.selectAll("path").attr("style",a),i&&y.selectAll("path").attr("style",i),je(e,y),e.intersect=function(v){return Ye.circle(e,7,v)},h}var hZ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(uZ,"stateEnd")});function fZ(t,e,{config:{themeVariables:r}}){let{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a;if(e.look==="handDrawn"){let l=Xe.svg(i).circle(0,0,14,gK(n));a=i.insert(()=>l),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else a=i.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return je(e,a),e.intersect=function(s){return Ye.circle(e,7,s)},i}var dZ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(fZ,"stateStart")});async function pZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=(e?.padding||0)/2,l=a.width+e.padding,u=a.height+e.padding,h=-a.width/2-s,f=-a.height/2-s,d=[{x:0,y:0},{x:l,y:0},{x:l,y:-u},{x:0,y:-u},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-u},{x:-8,y:-u},{x:-8,y:0}];if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=p.rectangle(h-8,f,l+16,u,m),y=p.line(h,f,h,f+u,m),v=p.line(h+l,f,h+l,f+u,m);i.insert(()=>y,":first-child"),i.insert(()=>v,":first-child");let x=i.insert(()=>g,":first-child"),{cssStyles:b}=e;x.attr("class","basic label-container").attr("style",$n(b)),je(e,x)}else{let p=La(i,l,u,d);n&&p.attr("style",n),je(e,p)}return e.intersect=function(p){return Ye.polygon(e,d,p)},i}var mZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();ir();o(pZ,"subroutine")});async function gZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=-s/2,h=-l/2,f=.2*l,d=.2*l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:u-f/2,y:h},{x:u+s+f/2,y:h},{x:u+s+f/2,y:h+l},{x:u-f/2,y:h+l}],v=[{x:u+s-f/2,y:h+l},{x:u+s+f/2,y:h+l},{x:u+s+f/2,y:h+l-d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),w=Xt(v),C=m.path(w,{...g,fillStyle:"solid"}),T=i.insert(()=>C,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var yZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(gZ,"taggedRect")});async function vZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...Fo(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,w=[{x:x+l-f,y:(b+u)*1.4},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...Fo(x+l,(b+u)*1.3,x+l-f,(b+u)*1.5,-u*.03,.5)],C=Xt(v),T=g.path(C,y),E=Xt(w),A=g.path(E,{...y,fillStyle:"solid"}),S=i.insert(()=>A,":first-child");return S.insert(()=>T,":first-child"),S.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(_){return Ye.polygon(e,v,_)},i}var xZ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(vZ,"taggedWaveEdgedRectangle")});async function bZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+e.padding,e?.width||0),l=Math.max(a.height+e.padding,e?.height||0),u=-s/2,h=-l/2,f=i.insert("rect",":first-child");return f.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),je(e,f),e.intersect=function(d){return Ye.rect(e,d)},i}var wZ=N(()=>{"use strict";Ft();Ht();Ut();o(bZ,"text")});async function TZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s,halfPadding:l}=await pt(t,e,ht(e)),u=e.look==="neo"?l*2:l,h=a.height+u,f=h/2,d=f/(2.5+h/50),p=a.width+d+u,{cssStyles:m}=e,g;if(e.look==="handDrawn"){let y=Xe.svg(i),v=w_e(0,0,p,h,d,f),x=T_e(0,0,p,h,d,f),b=y.path(v,Ke(e,{})),w=y.path(x,Ke(e,{fill:"none"}));g=i.insert(()=>w,":first-child"),g=i.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=b_e(0,0,p,h,d,f);g=i.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",$n(m)).attr("style",n),g.attr("class","basic label-container"),m&&g.selectAll("path").attr("style",m),n&&g.selectAll("path").attr("style",n)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),s.attr("transform",`translate(${-(a.width/2)-d-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,g),e.intersect=function(y){let v=Ye.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(Math.abs(b))),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},i}var b_e,w_e,T_e,kZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();ir();b_e=o((t,e,r,n,i,a)=>`M${t},${e} | |
| 455 | + a${i},${a} 0,0,1 0,${-n} | |
| 456 | + l${r},0 | |
| 457 | + a${i},${a} 0,0,1 0,${n} | |
| 458 | + M${r},${-n} | |
| 459 | + a${i},${a} 0,0,0 0,${n} | |
| 460 | + l${-r},0`,"createCylinderPathD"),w_e=o((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),T_e=o((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");o(TZ,"tiltedCylinder")});async function EZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var SZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(EZ,"trapezoid")});async function CZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=60,l=20,u=Math.max(s,a.width+(e.padding??0)*2,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),{cssStyles:f}=e,d=Xe.svg(i),p=Ke(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=[{x:-u/2*.8,y:-h/2},{x:u/2*.8,y:-h/2},{x:u/2,y:-h/2*.6},{x:u/2,y:h/2},{x:-u/2,y:h/2},{x:-u/2,y:-h/2*.6}],g=Xt(m),y=d.path(g,p),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),je(e,v),e.intersect=function(x){return Ye.polygon(e,m,x)},i}var AZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(CZ,"trapezoidalPentagon")});async function _Z(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=fr(me().flowchart?.htmlLabels),u=a.width+(e.padding??0),h=u+a.height,f=u+a.height,d=[{x:0,y:0},{x:f,y:0},{x:f/2,y:-h}],{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=Xt(d),v=m.path(y,g),x=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${h/2})`);return p&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),e.width=u,e.height=h,je(e,x),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${h/2-(a.height+(e.padding??0)/(l?2:1)-(a.y-(a.top??0)))})`),e.intersect=function(b){return Y.info("Triangle intersect",e,d,b),Ye.polygon(e,d,b)},i}var DZ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();Ft();gr();zt();o(_Z,"triangle")});async function LZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=u+h,{cssStyles:d}=e,m=70-l,g=m>0?m/2:0,y=Xe.svg(i),v=Ke(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-l/2-g,y:f/2},...Fo(-l/2-g,f/2,l/2+g,f/2,h,.8),{x:l/2+g,y:-f/2},{x:-l/2-g,y:-f/2}],b=Xt(x),w=y.path(b,v),C=i.insert(()=>w,":first-child");return C.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,x,T)},i}var RZ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(LZ,"waveEdgedRectangle")});async function NZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=100,l=50,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=u/h,d=u,p=h;d>p*f?p=d/f:d=p*f,d=Math.max(d,s),p=Math.max(p,l);let m=Math.min(p*.2,p/4),g=p+m*2,{cssStyles:y}=e,v=Xe.svg(i),x=Ke(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:-d/2,y:g/2},...Fo(-d/2,g/2,d/2,g/2,m,1),{x:d/2,y:-g/2},...Fo(d/2,-g/2,-d/2,-g/2,m,-1)],w=Xt(b),C=v.path(w,x),T=i.insert(()=>C,":first-child");return T.attr("class","basic label-container"),y&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",y),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var MZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(NZ,"waveRectangle")});async function IZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d-h},{x:f-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d-h}],v=`M${f-h},${d-h} L${f+l},${d-h} L${f+l},${d+u} L${f-h},${d+u} L${f-h},${d-h} | |
| 461 | + M${f-h},${d} L${f+l},${d} | |
| 462 | + M${f},${d-h} L${f},${d+u}`;e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("transform",`translate(${h/2}, ${h/2})`),b.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)+h/2-(a.x-(a.left??0))}, ${-(a.height/2)+h/2-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,y,w)},i}var OZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(IZ,"windowPane")});async function KD(t,e){let r=e;if(r.alias&&(e.label=r.alias),e.look==="handDrawn"){let{themeVariables:P}=cr(),{background:z}=P,$={...e,id:e.id+"-background",look:"default",cssStyles:["stroke: none",`fill: ${z}`]};await KD(t,$)}let n=cr();e.useHtmlLabels=n.htmlLabels;let i=n.er?.diagramPadding??10,a=n.er?.entityPadding??6,{cssStyles:s}=e,{labelStyles:l}=Qe(e);if(r.attributes.length===0&&e.label){let P={rx:0,ry:0,labelPaddingX:i,labelPaddingY:i*1.5,classes:""};ra(e.label,n)+P.labelPaddingX*2<n.er.minEntityWidth&&(e.width=n.er.minEntityWidth);let z=await Du(t,e,P);if(!fr(n.htmlLabels)){let $=z.select("text"),H=$.node()?.getBBox();$.attr("transform",`translate(${-H.width/2}, 0)`)}return z}n.htmlLabels||(i*=1.25,a*=1.25);let u=ht(e);u||(u="node default");let h=t.insert("g").attr("class",u).attr("id",e.domId||e.id),f=await b2(h,e.label??"",n,0,0,["name"],l);f.height+=a;let d=0,p=[],m=0,g=0,y=0,v=0,x=!0,b=!0;for(let P of r.attributes){let z=await b2(h,P.type,n,0,d,["attribute-type"],l);m=Math.max(m,z.width+i);let $=await b2(h,P.name,n,0,d,["attribute-name"],l);g=Math.max(g,$.width+i);let H=await b2(h,P.keys.join(),n,0,d,["attribute-keys"],l);y=Math.max(y,H.width+i);let Q=await b2(h,P.comment,n,0,d,["attribute-comment"],l);v=Math.max(v,Q.width+i),d+=Math.max(z.height,$.height,H.height,Q.height)+a,p.push(d)}p.pop();let w=4;y<=i&&(x=!1,y=0,w--),v<=i&&(b=!1,v=0,w--);let C=h.node().getBBox();if(f.width+i*2-(m+g+y+v)>0){let P=f.width+i*2-(m+g+y+v);m+=P/w,g+=P/w,y>0&&(y+=P/w),v>0&&(v+=P/w)}let T=m+g+y+v,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=Math.max(C.width+i*2,e?.width||0,T),_=Math.max(C.height+(p[0]||d)+a,e?.height||0),I=-S/2,D=-_/2;h.selectAll("g:not(:first-child)").each((P,z,$)=>{let H=Ge($[z]),Q=H.attr("transform"),j=0,ie=0;if(Q){let le=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(Q);le&&(j=parseFloat(le[1]),ie=parseFloat(le[2]),H.attr("class").includes("attribute-name")?j+=m:H.attr("class").includes("attribute-keys")?j+=m+g:H.attr("class").includes("attribute-comment")&&(j+=m+g+y))}H.attr("transform",`translate(${I+i/2+j}, ${ie+D+f.height+a/2})`)}),h.select(".name").attr("transform","translate("+-f.width/2+", "+(D+a/2)+")");let k=E.rectangle(I,D,S,_,A),L=h.insert(()=>k,":first-child").attr("style",s.join("")),{themeVariables:R}=cr(),{rowEven:O,rowOdd:M,nodeBorder:B}=R;p.push(0);for(let[P,z]of p.entries()){if(P===0&&p.length>1)continue;let $=P%2===0&&z!==0,H=E.rectangle(I,f.height+D+z,S,f.height,{...A,fill:$?O:M,stroke:B});h.insert(()=>H,"g.label").attr("style",s.join("")).attr("class",`row-rect-${P%2===0?"even":"odd"}`)}let F=E.line(I,f.height+D,S+I,f.height+D,A);h.insert(()=>F).attr("class","divider"),F=E.line(m+I,f.height+D,m+I,_+D,A),h.insert(()=>F).attr("class","divider"),x&&(F=E.line(m+g+I,f.height+D,m+g+I,_+D,A),h.insert(()=>F).attr("class","divider")),b&&(F=E.line(m+g+y+I,f.height+D,m+g+y+I,_+D,A),h.insert(()=>F).attr("class","divider"));for(let P of p)F=E.line(I,f.height+D+P,S+I,f.height+D+P,A),h.insert(()=>F).attr("class","divider");return je(e,L),e.intersect=function(P){return Ye.rect(e,P)},h}async function b2(t,e,r,n=0,i=0,a=[],s=""){let l=t.insert("g").attr("class",`label ${a.join(" ")}`).attr("transform",`translate(${n}, ${i})`).attr("style",s);e!==ec(e)&&(e=ec(e),e=e.replaceAll("<","<").replaceAll(">",">"));let u=l.node().appendChild(await Hn(l,e,{width:ra(e,r)+100,style:s,useHtmlLabels:r.htmlLabels},r));if(e.includes("<")||e.includes(">")){let f=u.children[0];for(f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">");f.childNodes[0];)f=f.childNodes[0],f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">")}let h=u.getBBox();if(fr(r.htmlLabels)){let f=u.children[0];f.style.textAlign="start";let d=Ge(u);h=f.getBoundingClientRect(),d.attr("width",h.width),d.attr("height",h.height)}return h}var PZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();mm();ji();to();gr();dr();ir();o(KD,"erBox");o(b2,"addText")});async function BZ(t,e,r,n,i=r.class.padding??12){let a=n?0:3,s=t.insert("g").attr("class",ht(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await Vw(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await Vw(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let w=await Vw(h,b,y,[b.parseClassifier()]);y+=w+a}m=h.node().getBBox().height,m<=0&&(m=i/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let w=await Vw(f,b,v,[b.parseClassifier()]);v+=w+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+i*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+i*4:i*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function Vw(t,e,r,n=[]){let i=t.insert("g").attr("class","label").attr("style",n.join("; ")),a=cr(),s="useHtmlLabels"in e?e.useHtmlLabels:fr(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),pi(l)&&(s=!0);let u=await Hn(i,Xy(na(l)),{width:ra(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=Ge(u);f=d.innerHTML.split("<br>").length,d.innerHTML.includes("</math>")&&(f+=d.innerHTML.split("<mrow>").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,C=parseInt(b,10)*5+"px";y.style.minWidth=C,y.style.maxWidth=C}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{n.includes("font-weight: bolder")&&Ge(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(d.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return i.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var FZ=N(()=>{"use strict";dr();ji();Ft();ir();zt();to();gr();o(BZ,"textHelper");o(Vw,"addText")});async function $Z(t,e){let r=me(),n=r.class.padding??12,i=n,a=e.useHtmlLabels??fr(r.htmlLabels)??!0,s=e;s.annotations=s.annotations??[],s.members=s.members??[],s.methods=s.methods??[];let{shapeSvg:l,bbox:u}=await BZ(t,e,r,a,i),{labelStyles:h,nodeStyles:f}=Qe(e);e.labelStyle=h,e.cssStyles=s.styles||"";let d=s.styles?.join(";")||f||"";e.cssStyles||(e.cssStyles=d.replaceAll("!important","").split(";"));let p=s.members.length===0&&s.methods.length===0&&!r.class?.hideEmptyMembersBox,m=Xe.svg(l),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=u.width,v=u.height;s.members.length===0&&s.methods.length===0?v+=i:s.members.length>0&&s.methods.length===0&&(v+=i*2);let x=-y/2,b=-v/2,w=m.rectangle(x-n,b-n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0),y+2*n,v+2*n+(p?n*2:s.members.length===0&&s.methods.length===0?-n:0),g),C=l.insert(()=>w,":first-child");C.attr("class","basic label-container");let T=C.node().getBBox();l.selectAll(".text").each((_,I,D)=>{let k=Ge(D[I]),L=k.attr("transform"),R=0;if(L){let F=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(L);F&&(R=parseFloat(F[2]))}let O=R+b+n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0);a||(O-=4);let M=x;(k.attr("class").includes("label-group")||k.attr("class").includes("annotation-group"))&&(M=-k.node()?.getBBox().width/2||0,l.selectAll("text").each(function(B,F,P){window.getComputedStyle(P[F]).textAnchor==="middle"&&(M=0)})),k.attr("transform",`translate(${M}, ${O})`)});let E=l.select(".annotation-group").node().getBBox().height-(p?n/2:0)||0,A=l.select(".label-group").node().getBBox().height-(p?n/2:0)||0,S=l.select(".members-group").node().getBBox().height-(p?n/2:0)||0;if(s.members.length>0||s.methods.length>0||p){let _=m.line(T.x,E+A+b+n,T.x+T.width,E+A+b+n,g);l.insert(()=>_).attr("class","divider").attr("style",d)}if(p||s.members.length>0||s.methods.length>0){let _=m.line(T.x,E+A+S+b+i*2+n,T.x+T.width,E+A+S+b+n+i*2,g);l.insert(()=>_).attr("class","divider").attr("style",d)}if(s.look!=="handDrawn"&&l.selectAll("path").attr("style",d),C.select(":nth-child(2)").attr("style",d),l.selectAll(".divider").select("path").attr("style",d),e.labelStyle?l.selectAll("span").attr("style",e.labelStyle):l.selectAll("span").attr("style",d),!a){let _=RegExp(/color\s*:\s*([^;]*)/),I=_.exec(d);if(I){let D=I[0].replace("color","fill");l.selectAll("tspan").attr("style",D)}else if(h){let D=_.exec(h);if(D){let k=D[0].replace("color","fill");l.selectAll("tspan").attr("style",k)}}}return je(e,C),e.intersect=function(_){return Ye.rect(e,_)},l}var zZ=N(()=>{"use strict";Ft();zt();dr();Wt();Ut();Ht();FZ();gr();o($Z,"classBox")});async function GZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i=e,a=e,s=20,l=20,u="verifyMethod"in e,h=ht(e),f=t.insert("g").attr("class",h).attr("id",e.domId??e.id),d;u?d=await Lu(f,`<<${i.type}>>`,0,e.labelStyle):d=await Lu(f,"<<Element>>",0,e.labelStyle);let p=d,m=await Lu(f,i.name,p,e.labelStyle+"; font-weight: bold;");if(p+=m+l,u){let E=await Lu(f,`${i.requirementId?`Id: ${i.requirementId}`:""}`,p,e.labelStyle);p+=E;let A=await Lu(f,`${i.text?`Text: ${i.text}`:""}`,p,e.labelStyle);p+=A;let S=await Lu(f,`${i.risk?`Risk: ${i.risk}`:""}`,p,e.labelStyle);p+=S,await Lu(f,`${i.verifyMethod?`Verification: ${i.verifyMethod}`:""}`,p,e.labelStyle)}else{let E=await Lu(f,`${a.type?`Type: ${a.type}`:""}`,p,e.labelStyle);p+=E,await Lu(f,`${a.docRef?`Doc Ref: ${a.docRef}`:""}`,p,e.labelStyle)}let g=(f.node()?.getBBox().width??200)+s,y=(f.node()?.getBBox().height??200)+s,v=-g/2,x=-y/2,b=Xe.svg(f),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=b.rectangle(v,x,g,y,w),T=f.insert(()=>C,":first-child");if(T.attr("class","basic label-container").attr("style",n),f.selectAll(".label").each((E,A,S)=>{let _=Ge(S[A]),I=_.attr("transform"),D=0,k=0;if(I){let M=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(I);M&&(D=parseFloat(M[1]),k=parseFloat(M[2]))}let L=k-y/2,R=v+s/2;(A===0||A===1)&&(R=D),_.attr("transform",`translate(${R}, ${L+s})`)}),p>d+m+l){let E=b.line(v,x+d+m+l,v+g,x+d+m+l,w);f.insert(()=>E).attr("style",n)}return je(e,T),e.intersect=function(E){return Ye.rect(e,E)},f}async function Lu(t,e,r,n=""){if(e==="")return 0;let i=t.insert("g").attr("class","label").attr("style",n),a=me(),s=a.htmlLabels??!0,l=await Hn(i,Xy(na(e)),{width:ra(e,a)+50,classes:"markdown-node-label",useHtmlLabels:s,style:n},a),u;if(s){let h=l.children[0],f=Ge(l);u=h.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}else{let h=l.children[0];for(let f of h.children)f.textContent=f.textContent.replaceAll(">",">").replaceAll("<","<"),n&&f.setAttribute("style",n);u=l.getBBox(),u.height+=6}return i.attr("transform",`translate(${-u.width/2},${-u.height/2+r})`),u.height}var VZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();zt();to();dr();o(GZ,"requirementBox");o(Lu,"addText")});async function UZ(t,e,{config:r}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await pt(t,e,ht(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await Dw(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await Dw(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await Dw(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,w=e?.width||0,C=Math.max(y.height,x.height)/2,T=Math.max(u.height+b*2,e?.height||0)+C,E=-w/2,A=-T/2;h.attr("transform","translate("+(f-w/2)+", "+(-C-u.height/2)+")"),g.attr("transform","translate("+(f-w/2)+", "+(-C+u.height/2)+")"),v.attr("transform","translate("+(f+w/2-x.width-2*a)+", "+(-C+u.height/2)+")");let S,{rx:_,ry:I}=e,{cssStyles:D}=e;if(e.look==="handDrawn"){let k=Xe.svg(l),L=Ke(e,{}),R=_||I?k.path(Na(E,A,w,T,_||0),L):k.rectangle(E,A,w,T,L);S=l.insert(()=>R,":first-child"),S.attr("class","basic label-container").attr("style",D||null)}else{S=l.insert("rect",":first-child"),S.attr("class","basic label-container __APA__").attr("style",i).attr("rx",_??5).attr("ry",I??5).attr("x",E).attr("y",A).attr("width",w).attr("height",T);let k="priority"in e&&e.priority;if(k){let L=l.append("line"),R=E+2,O=A+Math.floor((_??0)/2),M=A+T-Math.floor((_??0)/2);L.attr("x1",R).attr("y1",O).attr("x2",R).attr("y2",M).attr("stroke-width","4").attr("stroke",k_e(k))}}return je(e,S),e.height=T,e.intersect=function(k){return Ye.rect(e,k)},l}var k_e,HZ=N(()=>{"use strict";Ft();Ht();qh();Ut();Wt();k_e=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(UZ,"kanbanItem")});function WZ(t){return t in QD}var E_e,S_e,QD,ZD=N(()=>{"use strict";NK();OK();BK();$K();GK();UK();WK();YK();jK();QK();JK();tQ();nQ();aQ();oQ();cQ();hQ();dQ();mQ();yQ();xQ();wQ();kQ();SQ();AQ();DQ();RQ();MQ();OQ();BQ();$Q();GQ();UQ();WQ();YQ();jQ();QQ();JQ();tZ();nZ();aZ();oZ();cZ();hZ();dZ();mZ();yZ();xZ();wZ();kZ();SZ();AZ();DZ();RZ();MZ();OZ();PZ();zZ();VZ();HZ();E_e=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:iZ},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:ZQ},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:sZ},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:pZ},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:ZK},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:zK},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:qQ},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:fQ},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:NQ},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:LQ},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:EZ},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:CQ},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:rQ},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:bZ},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:PK},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:eZ},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:fZ},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:uZ},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:lQ},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:pQ},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:HK},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:qK},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:XK},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:IQ},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:LZ},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:uQ},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:TZ},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:PQ},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:KK},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:eQ},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:_Z},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:IZ},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:iQ},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:CZ},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:sQ},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:rZ},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:VQ},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:zQ},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:IK},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:VK},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:vZ},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:gZ},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:NZ},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:XQ},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:FQ}],S_e=o(()=>{let e=[...Object.entries({state:lZ,choice:FK,note:HQ,rectWithTitle:KQ,labelRect:_Q,iconSquare:TQ,iconCircle:vQ,icon:gQ,iconRounded:bQ,imageSquare:EQ,anchor:RK,kanbanItem:UZ,classBox:$Z,erBox:KD,requirementBox:GZ}),...E_e.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(i=>[i,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),QD=S_e();o(WZ,"isValidShape")});var C_e,Uw,qZ=N(()=>{"use strict";dr();Ew();zt();vt();ZD();ir();gr();mi();C_e="flowchart-",Uw=class{constructor(){this.vertexCounter=0;this.config=me();this.vertices=new Map;this.edges=[];this.classes=new Map;this.subGraphs=[];this.subGraphLookup=new Map;this.tooltips=new Map;this.subCount=0;this.firstGraphFlag=!0;this.secCount=-1;this.posCrossRef=[];this.funs=[];this.setAccTitle=Lr;this.setAccDescription=Nr;this.setDiagramTitle=$r;this.getAccTitle=Rr;this.getAccDescription=Mr;this.getDiagramTitle=Ir;this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{o(this,"FlowDB")}sanitizeText(e){return Ze.sanitizeText(e,this.config)}lookUpDomId(e){for(let r of this.vertices.values())if(r.id===e)return r.domId;return e}addVertex(e,r,n,i,a,s,l={},u){if(!e||e.trim().length===0)return;let h;if(u!==void 0){let m;u.includes(` | |
| 463 | +`)?m=u+` | |
| 464 | +`:m=`{ | |
| 465 | +`+u+` | |
| 466 | +}`,h=cm(m,{schema:lm})}let f=this.edges.find(m=>m.id===e);if(f){let m=h;m?.animate!==void 0&&(f.animate=m.animate),m?.animation!==void 0&&(f.animation=m.animation);return}let d,p=this.vertices.get(e);if(p===void 0&&(p={id:e,labelType:"text",domId:C_e+e+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(e,p)),this.vertexCounter++,r!==void 0?(this.config=me(),d=this.sanitizeText(r.text.trim()),p.labelType=r.type,d.startsWith('"')&&d.endsWith('"')&&(d=d.substring(1,d.length-1)),p.text=d):p.text===void 0&&(p.text=e),n!==void 0&&(p.type=n),i?.forEach(m=>{p.styles.push(m)}),a?.forEach(m=>{p.classes.push(m)}),s!==void 0&&(p.dir=s),p.props===void 0?p.props=l:l!==void 0&&Object.assign(p.props,l),h!==void 0){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!WZ(h.shape))throw new Error(`No such shape: ${h.shape}.`);p.type=h?.shape}h?.label&&(p.text=h?.label),h?.icon&&(p.icon=h?.icon,!h.label?.trim()&&p.text===e&&(p.text="")),h?.form&&(p.form=h?.form),h?.pos&&(p.pos=h?.pos),h?.img&&(p.img=h?.img,!h.label?.trim()&&p.text===e&&(p.text="")),h?.constraint&&(p.constraint=h.constraint),h.w&&(p.assetWidth=Number(h.w)),h.h&&(p.assetHeight=Number(h.h))}}addSingleLink(e,r,n,i){let l={start:e,end:r,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};Y.info("abc78 Got edge...",l);let u=n.text;if(u!==void 0&&(l.text=this.sanitizeText(u.text.trim()),l.text.startsWith('"')&&l.text.endsWith('"')&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=u.type),n!==void 0&&(l.type=n.type,l.stroke=n.stroke,l.length=n.length>10?10:n.length),i&&!this.edges.some(h=>h.id===i))l.id=i,l.isUserDefinedId=!0;else{let h=this.edges.filter(f=>f.start===l.start&&f.end===l.end);h.length===0?l.id=$h(l.start,l.end,{counter:0,prefix:"L"}):l.id=$h(l.start,l.end,{counter:h.length+1,prefix:"L"})}if(this.edges.length<(this.config.maxEdges??500))Y.info("Pushing edge..."),this.edges.push(l);else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}. | |
| 467 | + | |
| 468 | +Initialize mermaid with maxEdges set to a higher number to allow more edges. | |
| 469 | +You cannot set this config via configuration inside the diagram as it is a secure config. | |
| 470 | +You have to call mermaid.initialize.`)}isLinkData(e){return e!==null&&typeof e=="object"&&"id"in e&&typeof e.id=="string"}addLink(e,r,n){let i=this.isLinkData(n)?n.id.replace("@",""):void 0;Y.info("addLink",e,r,i);for(let a of e)for(let s of r){let l=a===e[e.length-1],u=s===r[0];l&&u?this.addSingleLink(a,s,n,i):this.addSingleLink(a,s,n,void 0)}}updateLinkInterpolate(e,r){e.forEach(n=>{n==="default"?this.edges.defaultInterpolate=r:this.edges[n].interpolate=r})}updateLink(e,r){e.forEach(n=>{if(typeof n=="number"&&n>=this.edges.length)throw new Error(`The index ${n} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);n==="default"?this.edges.defaultStyle=r:(this.edges[n].style=r,(this.edges[n]?.style?.length??0)>0&&!this.edges[n]?.style?.some(i=>i?.startsWith("fill"))&&this.edges[n]?.style?.push("fill:none"))})}addClass(e,r){let n=r.join().replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");e.split(",").forEach(i=>{let a=this.classes.get(i);a===void 0&&(a={id:i,styles:[],textStyles:[]},this.classes.set(i,a)),n?.forEach(s=>{if(/color/.exec(s)){let l=s.replace("fill","bgFill");a.textStyles.push(l)}a.styles.push(s)})})}setDirection(e){this.direction=e,/.*</.exec(this.direction)&&(this.direction="RL"),/.*\^/.exec(this.direction)&&(this.direction="BT"),/.*>/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),this.direction==="TD"&&(this.direction="TB")}setClass(e,r){for(let n of e.split(",")){let i=this.vertices.get(n);i&&i.classes.push(r);let a=this.edges.find(l=>l.id===n);a&&a.classes.push(r);let s=this.subGraphLookup.get(n);s&&s.classes.push(r)}}setTooltip(e,r){if(r!==void 0){r=this.sanitizeText(r);for(let n of e.split(","))this.tooltips.set(this.version==="gen-1"?this.lookUpDomId(n):n,r)}}setClickFun(e,r,n){let i=this.lookUpDomId(e);if(me().securityLevel!=="loose"||r===void 0)return;let a=[];if(typeof n=="string"){a=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let l=0;l<a.length;l++){let u=a[l].trim();u.startsWith('"')&&u.endsWith('"')&&(u=u.substr(1,u.length-2)),a[l]=u}}a.length===0&&a.push(e);let s=this.vertices.get(e);s&&(s.haveCallback=!0,this.funs.push(()=>{let l=document.querySelector(`[id="${i}"]`);l!==null&&l.addEventListener("click",()=>{Gt.runFunc(r,...a)},!1)}))}setLink(e,r,n){e.split(",").forEach(i=>{let a=this.vertices.get(i);a!==void 0&&(a.link=Gt.formatUrl(r,this.config),a.linkTarget=n)}),this.setClass(e,"clickable")}getTooltip(e){return this.tooltips.get(e)}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFun(i,r,n)}),this.setClass(e,"clickable")}bindFunctions(e){this.funs.forEach(r=>{r(e)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(e){let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=a.currentTarget?.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.bottom+"px"),r.html(r.html().replace(/<br\/>/g,"<br/>")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})}clear(e="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=e,this.config=me(),Ar()}setGen(e){this.version=e||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(e,r,n){let i=e.text.trim(),a=n.text;e===n&&/\s/.exec(n.text)&&(i=void 0);let s=o(f=>{let d={boolean:{},number:{},string:{}},p=[],m;return{nodeList:f.filter(function(y){let v=typeof y;return y.stmt&&y.stmt==="dir"?(m=y.value,!1):y.trim()===""?!1:v in d?d[v].hasOwnProperty(y)?!1:d[v][y]=!0:p.includes(y)?!1:p.push(y)}),dir:m}},"uniq"),{nodeList:l,dir:u}=s(r.flat());if(this.version==="gen-1")for(let f=0;f<l.length;f++)l[f]=this.lookUpDomId(l[f]);i=i??"subGraph"+this.subCount,a=a||"",a=this.sanitizeText(a),this.subCount=this.subCount+1;let h={id:i,nodes:l,title:a.trim(),classes:[],dir:u,labelType:n.type};return Y.info("Adding",h.id,h.nodes,h.dir),h.nodes=this.makeUniq(h,this.subGraphs).nodes,this.subGraphs.push(h),this.subGraphLookup.set(i,h),i}getPosForId(e){for(let[r,n]of this.subGraphs.entries())if(n.id===e)return r;return-1}indexNodes2(e,r){let n=this.subGraphs[r].nodes;if(this.secCount=this.secCount+1,this.secCount>2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=r,this.subGraphs[r].id===e)return{result:!0,count:0};let i=0,a=1;for(;i<n.length;){let s=this.getPosForId(n[i]);if(s>=0){let l=this.indexNodes2(e,s);if(l.result)return{result:!0,count:a+l.count};a=a+l.count}i=i+1}return{result:!1,count:a}}getDepthFirstPos(e){return this.posCrossRef[e]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return this.firstGraphFlag?(this.firstGraphFlag=!1,!0):!1}destructStartLink(e){let r=e.trim(),n="arrow_open";switch(r[0]){case"<":n="arrow_point",r=r.slice(1);break;case"x":n="arrow_cross",r=r.slice(1);break;case"o":n="arrow_circle",r=r.slice(1);break}let i="normal";return r.includes("=")&&(i="thick"),r.includes(".")&&(i="dotted"),{type:n,stroke:i}}countChar(e,r){let n=r.length,i=0;for(let a=0;a<n;++a)r[a]===e&&++i;return i}destructEndLink(e){let r=e.trim(),n=r.slice(0,-1),i="arrow_open";switch(r.slice(-1)){case"x":i="arrow_cross",r.startsWith("x")&&(i="double_"+i,n=n.slice(1));break;case">":i="arrow_point",r.startsWith("<")&&(i="double_"+i,n=n.slice(1));break;case"o":i="arrow_circle",r.startsWith("o")&&(i="double_"+i,n=n.slice(1));break}let a="normal",s=n.length-1;n.startsWith("=")&&(a="thick"),n.startsWith("~")&&(a="invisible");let l=this.countChar(".",n);return l&&(a="dotted",s=l),{type:i,stroke:a,length:s}}destructLink(e,r){let n=this.destructEndLink(e),i;if(r){if(i=this.destructStartLink(r),i.stroke!==n.stroke)return{type:"INVALID",stroke:"INVALID"};if(i.type==="arrow_open")i.type=n.type;else{if(i.type!==n.type)return{type:"INVALID",stroke:"INVALID"};i.type="double_"+i.type}return i.type==="double_arrow"&&(i.type="double_arrow_point"),i.length=n.length,i}return n}exists(e,r){for(let n of e)if(n.nodes.includes(r))return!0;return!1}makeUniq(e,r){let n=[];return e.nodes.forEach((i,a)=>{this.exists(r,i)||n.push(e.nodes[a])}),{nodes:n}}getTypeFromVertex(e){if(e.img)return"imageSquare";if(e.icon)return e.form==="circle"?"iconCircle":e.form==="square"?"iconSquare":e.form==="rounded"?"iconRounded":"icon";switch(e.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return e.type}}findNode(e,r){return e.find(n=>n.id===r)}destructEdgeType(e){let r="none",n="arrow_point";switch(e){case"arrow_point":case"arrow_circle":case"arrow_cross":n=e;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":r=e.replace("double_",""),n=r;break}return{arrowTypeStart:r,arrowTypeEnd:n}}addNodeFromVertex(e,r,n,i,a,s){let l=n.get(e.id),u=i.get(e.id)??!1,h=this.findNode(r,e.id);if(h)h.cssStyles=e.styles,h.cssCompiledStyles=this.getCompiledStyles(e.classes),h.cssClasses=e.classes.join(" ");else{let f={id:e.id,label:e.text,labelStyle:"",parentId:l,padding:a.flowchart?.padding||8,cssStyles:e.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...e.classes]),cssClasses:"default "+e.classes.join(" "),dir:e.dir,domId:e.domId,look:s,link:e.link,linkTarget:e.linkTarget,tooltip:this.getTooltip(e.id),icon:e.icon,pos:e.pos,img:e.img,assetWidth:e.assetWidth,assetHeight:e.assetHeight,constraint:e.constraint};u?r.push({...f,isGroup:!0,shape:"rect"}):r.push({...f,isGroup:!1,shape:this.getTypeFromVertex(e)})}}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}getData(){let e=me(),r=[],n=[],i=this.getSubGraphs(),a=new Map,s=new Map;for(let h=i.length-1;h>=0;h--){let f=i[h];f.nodes.length>0&&s.set(f.id,!0);for(let d of f.nodes)a.set(d,f.id)}for(let h=i.length-1;h>=0;h--){let f=i[h];r.push({id:f.id,label:f.title,labelStyle:"",parentId:a.get(f.id),padding:8,cssCompiledStyles:this.getCompiledStyles(f.classes),cssClasses:f.classes.join(" "),shape:"rect",dir:f.dir,isGroup:!0,look:e.look})}this.getVertices().forEach(h=>{this.addNodeFromVertex(h,r,a,s,e,e.look||"classic")});let u=this.getEdges();return u.forEach((h,f)=>{let{arrowTypeStart:d,arrowTypeEnd:p}=this.destructEdgeType(h.type),m=[...u.defaultStyle??[]];h.style&&m.push(...h.style);let g={id:$h(h.start,h.end,{counter:f,prefix:"L"},h.id),isUserDefinedId:h.isUserDefinedId,start:h.start,end:h.end,type:h.type??"normal",label:h.text,labelpos:"c",thickness:h.stroke,minlen:h.length,classes:h?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":d,arrowTypeEnd:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":p,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(h.classes),labelStyle:m,style:m,pattern:h.stroke,look:e.look,animate:h.animate,animation:h.animation,curve:h.interpolate||this.edges.defaultInterpolate||e.flowchart?.curve};n.push(g)}),{nodes:r,edges:n,other:{},config:e}}defaultConfig(){return A3.flowchart}}});var yc,gm=N(()=>{"use strict";dr();yc=o((t,e)=>{let r;return e==="sandbox"&&(r=Ge("#i"+t)),(e==="sandbox"?Ge(r.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${t}"]`)},"getDiagramElement")});var Ru,w2=N(()=>{"use strict";Ru=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,n=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:n}},"getSubGraphTitleMargins")});var YZ,A_e,__e,D_e,L_e,R_e,N_e,XZ,ym,jZ,Hw=N(()=>{"use strict";zt();gr();vt();w2();dr();Wt();to();RD();Gw();qh();Ut();YZ=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Qe(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=fr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Hn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0}),y=g.getBBox();if(fr(r.flowchart.htmlLabels)){let A=g.children[0],S=Ge(g);y=A.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let C;if(e.look==="handDrawn"){let A=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:i}),_=A.path(Na(b,w,v,x,0),S);C=d.insert(()=>(Y.debug("Rough node insert CXC",_),_),":first-child"),C.select("path:nth-child(2)").attr("style",h.join(";")),C.select("path").attr("style",f.join(";").replace("fill","stroke"))}else C=d.insert("rect",":first-child"),C.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Ru(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let A=m.select("span");A&&A.attr("style",l)}let E=C.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(A){return Vh(e,A)},{cluster:d,labelBBox:y}},"rect"),A_e=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return Vh(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),__e=o(async(t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=n,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=d.node().appendChild(await gc(e.label,e.labelStyle,void 0,!0)),g=m.getBBox();if(fr(r.flowchart.htmlLabels)){let _=m.children[0],I=Ge(m);g=_.getBoundingClientRect(),I.attr("width",g.width),I.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,w=e.height+y-g.height-6,C=e.x-x/2,T=e.y-b/2;e.width=x;let E=e.y-e.height/2-v+g.height+2,A;if(e.look==="handDrawn"){let _=e.cssClasses.includes("statediagram-cluster-alt"),I=Xe.svg(h),D=e.rx||e.ry?I.path(Na(C,T,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):I.rectangle(C,T,x,b,{seed:i});A=h.insert(()=>D,":first-child");let k=I.rectangle(C,E,x,w,{fill:_?a:s,fillStyle:_?"hachure":"solid",stroke:u,seed:i});A=h.insert(()=>D,":first-child"),p=h.insert(()=>k)}else A=f.insert("rect",":first-child"),A.attr("class","outer").attr("x",C).attr("y",T).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",C).attr("y",E).attr("width",x).attr("height",w);d.attr("transform",`translate(${e.x-g.width/2}, ${T+1-(fr(r.flowchart.htmlLabels)?0:3)})`);let S=A.node().getBBox();return e.height=S.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(_){return Vh(e,_)},{cluster:h,labelBBox:g}},"roundedWithTitle"),D_e=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Qe(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=fr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Hn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(fr(r.flowchart.htmlLabels)){let A=g.children[0],S=Ge(g);y=A.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let C;if(e.look==="handDrawn"){let A=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:i}),_=A.path(Na(b,w,v,x,e.rx),S);C=d.insert(()=>(Y.debug("Rough node insert CXC",_),_),":first-child"),C.select("path:nth-child(2)").attr("style",h.join(";")),C.select("path").attr("style",f.join(";").replace("fill","stroke"))}else C=d.insert("rect",":first-child"),C.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Ru(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let A=m.select("span");A&&A.attr("style",l)}let E=C.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(A){return Vh(e,A)},{cluster:d,labelBBox:y}},"kanbanSection"),L_e=o((t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=Xe.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});m=s.insert(()=>v,":first-child")}else m=l.insert("rect",":first-child"),m.attr("class","divider").attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look);let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return Vh(e,y)},{cluster:s,labelBBox:{}}},"divider"),R_e=YZ,N_e={rect:YZ,squareRect:R_e,roundedWithTitle:__e,noteGroup:A_e,divider:L_e,kanbanSection:D_e},XZ=new Map,ym=o(async(t,e)=>{let r=e.shape||"rect",n=await N_e[r](t,e);return XZ.set(e.id,n),n},"insertCluster"),jZ=o(()=>{XZ=new Map},"clear")});function Ww(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=Wn(t),e=Wn(e);let[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var $o,Wn,qw,JD=N(()=>{"use strict";$o={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};o(Ww,"calculateDeltaAndAngle");Wn=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),qw=o(t=>({x:o(function(e,r,n){let i=0,a=Wn(n[0]).x<Wn(n[n.length-1]).x?"left":"right";if(r===0&&Object.hasOwn($o,t.arrowTypeStart)){let{angle:m,deltaX:g}=Ww(n[0],n[1]);i=$o[t.arrowTypeStart]*Math.cos(m)*(g>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn($o,t.arrowTypeEnd)){let{angle:m,deltaX:g}=Ww(n[n.length-1],n[n.length-2]);i=$o[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),l=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),u=Math.abs(Wn(e).x-Wn(n[0]).x),h=Math.abs(Wn(e).y-Wn(n[0]).y),f=$o[t.arrowTypeStart],d=$o[t.arrowTypeEnd],p=1;if(s<d&&s>0&&l<d){let m=d+p-s;m*=a==="right"?-1:1,i-=m}if(u<f&&u>0&&h<f){let m=f+p-u;m*=a==="right"?-1:1,i+=m}return Wn(e).x+i},"x"),y:o(function(e,r,n){let i=0,a=Wn(n[0]).y<Wn(n[n.length-1]).y?"down":"up";if(r===0&&Object.hasOwn($o,t.arrowTypeStart)){let{angle:m,deltaY:g}=Ww(n[0],n[1]);i=$o[t.arrowTypeStart]*Math.abs(Math.sin(m))*(g>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn($o,t.arrowTypeEnd)){let{angle:m,deltaY:g}=Ww(n[n.length-1],n[n.length-2]);i=$o[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),l=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),u=Math.abs(Wn(e).y-Wn(n[0]).y),h=Math.abs(Wn(e).x-Wn(n[0]).x),f=$o[t.arrowTypeStart],d=$o[t.arrowTypeEnd],p=1;if(s<d&&s>0&&l<d){let m=d+p-s;m*=a==="up"?-1:1,i-=m}if(u<f&&u>0&&h<f){let m=f+p-u;m*=a==="up"?-1:1,i+=m}return Wn(e).y+i},"y")}),"getLineFunctionsWithOffset")});var QZ,M_e,KZ,ZZ=N(()=>{"use strict";vt();QZ=o((t,e,r,n,i,a)=>{e.arrowTypeStart&&KZ(t,"start",e.arrowTypeStart,r,n,i,a),e.arrowTypeEnd&&KZ(t,"end",e.arrowTypeEnd,r,n,i,a)},"addEdgeMarkers"),M_e={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},KZ=o((t,e,r,n,i,a,s)=>{let l=M_e[r];if(!l){Y.warn(`Unknown arrow type: ${r}`);return}let u=l.type,f=`${i}_${a}-${u}${e==="start"?"Start":"End"}`;if(s&&s.trim()!==""){let d=s.replace(/[^\dA-Za-z]/g,"_"),p=`${f}_${d}`;if(!document.getElementById(p)){let m=document.getElementById(f);if(m){let g=m.cloneNode(!0);g.id=p,g.querySelectorAll("path, circle, line").forEach(v=>{v.setAttribute("stroke",s),l.fill&&v.setAttribute("fill",s)}),m.parentNode?.appendChild(g)}}t.attr(`marker-${e}`,`url(${n}#${p})`)}else t.attr(`marker-${e}`,`url(${n}#${f})`)},"addEdgeMarker")});function Yw(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function P_e(t){let e=[],r=[];for(let n=1;n<t.length-1;n++){let i=t[n-1],a=t[n],s=t[n+1];(i.x===a.x&&a.y===s.y&&Math.abs(a.x-s.x)>5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===s.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}var Xw,pa,tJ,T2,jw,Kw,I_e,O_e,JZ,eJ,B_e,Qw,eL=N(()=>{"use strict";zt();gr();vt();to();ir();JD();w2();dr();Wt();Gw();ZZ();Ut();Xw=new Map,pa=new Map,tJ=o(()=>{Xw.clear(),pa.clear()},"clear"),T2=o(t=>t?t.reduce((r,n)=>r+";"+n,""):"","getLabelStyles"),jw=o(async(t,e)=>{let r=fr(me().flowchart.htmlLabels),n=await Hn(t,e.label,{style:T2(e.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});Y.info("abc82",e,e.labelType);let i=t.insert("g").attr("class","edgeLabel"),a=i.insert("g").attr("class","label");a.node().appendChild(n);let s=n.getBBox();if(r){let u=n.children[0],h=Ge(n);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}a.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Xw.set(e.id,i),e.width=s.width,e.height=s.height;let l;if(e.startLabelLeft){let u=await gc(e.startLabelLeft,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startLeft=h,Yw(l,e.startLabelLeft)}if(e.startLabelRight){let u=await gc(e.startLabelRight,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=h.node().appendChild(u),f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startRight=h,Yw(l,e.startLabelRight)}if(e.endLabelLeft){let u=await gc(e.endLabelLeft,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endLeft=h,Yw(l,e.endLabelLeft)}if(e.endLabelRight){let u=await gc(e.endLabelRight,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endRight=h,Yw(l,e.endLabelRight)}return n},"insertEdgeLabel");o(Yw,"setTerminalWidth");Kw=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,Xw.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Ru(n);if(t.label){let a=Xw.get(t.id),s=t.x,l=t.y;if(r){let u=Gt.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=pa.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=pa.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=pa.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=pa.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),I_e=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),O_e=o((t,e,r)=>{Y.debug(`intersection calc abc89: | |
| 471 | + outsidePoint: ${JSON.stringify(e)} | |
| 472 | + insidePoint : ${JSON.stringify(r)} | |
| 473 | + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.x<e.x?s-a:s+a,u=t.height/2,h=Math.abs(e.y-r.y),f=Math.abs(e.x-r.x);if(Math.abs(i-e.y)*s>Math.abs(n-e.x)*u){let d=r.y<e.y?e.y-u-i:i-u-e.y;l=f*d/h;let p={x:r.x<e.x?r.x+l:r.x-f+l,y:r.y<e.y?r.y+h-d:r.y-h+d};return l===0&&(p.x=e.x,p.y=e.y),f===0&&(p.x=e.x),h===0&&(p.y=e.y),Y.debug(`abc89 top/bottom calc, Q ${h}, q ${d}, R ${f}, r ${l}`,p),p}else{r.x<e.x?l=e.x-s-n:l=n-s-e.x;let d=h*l/f,p=r.x<e.x?r.x+f-l:r.x-f+l,m=r.y<e.y?r.y+d:r.y-d;return Y.debug(`sides calc abc89, Q ${h}, q ${d}, R ${f}, r ${l}`,{_x:p,_y:m}),l===0&&(p=e.x,m=e.y),f===0&&(p=e.x),h===0&&(m=e.y),{x:p,y:m}}},"intersection"),JZ=o((t,e)=>{Y.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(Y.info("abc88 checking point",a,e),!I_e(e,a)&&!i){let s=O_e(e,n,a);Y.debug("abc88 inside",a,n,s),Y.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?Y.warn("abc88 no intersect",s,r):r.push(s),i=!0}else Y.warn("abc88 outside",a,n),n=a,i||r.push(a)}),Y.debug("returning points",r),r},"cutPathAtIntersect");o(P_e,"extractCornerPoints");eJ=o(function(t,e,r){let n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),s=r/a;return{x:e.x-s*n,y:e.y-s*i}},"findAdjacentPoint"),B_e=o(function(t){let{cornerPointPositions:e}=P_e(t),r=[];for(let n=0;n<t.length;n++)if(e.includes(n)){let i=t[n-1],a=t[n+1],s=t[n],l=eJ(i,s,5),u=eJ(a,s,5),h=u.x-l.x,f=u.y-l.y;r.push(l);let d=Math.sqrt(2)*2,p={x:s.x,y:s.y};if(Math.abs(a.x-i.x)>10&&Math.abs(a.y-i.y)>=10){Y.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else Y.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(p,u)}else r.push(t[n]);return r},"fixCorners"),Qw=o(function(t,e,r,n,i,a,s){let{handDrawnSeed:l}=me(),u=e.points,h=!1,f=i;var d=a;let p=[];for(let _ in e.cssCompiledStyles)ND(_)||p.push(e.cssCompiledStyles[_]);d.intersect&&f.intersect&&(u=u.slice(1,e.points.length-1),u.unshift(f.intersect(u[0])),Y.debug("Last point APA12",e.start,"-->",e.end,u[u.length-1],d,d.intersect(u[u.length-1])),u.push(d.intersect(u[u.length-1]))),e.toCluster&&(Y.info("to cluster abc88",r.get(e.toCluster)),u=JZ(e.points,r.get(e.toCluster).node),h=!0),e.fromCluster&&(Y.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(u,null,2)),u=JZ(u.reverse(),r.get(e.fromCluster).node).reverse(),h=!0);let m=u.filter(_=>!Number.isNaN(_.y));m=B_e(m);let g=Do;switch(g=wu,e.curve){case"linear":g=wu;break;case"basis":g=Do;break;case"cardinal":g=Pv;break;case"bumpX":g=Rv;break;case"bumpY":g=Nv;break;case"catmullRom":g=$v;break;case"monotoneX":g=zv;break;case"monotoneY":g=Gv;break;case"natural":g=F0;break;case"step":g=$0;break;case"stepAfter":g=Uv;break;case"stepBefore":g=Vv;break;default:g=Do}let{x:y,y:v}=qw(e),x=wl().x(y).y(v).curve(g),b;switch(e.thickness){case"normal":b="edge-thickness-normal";break;case"thick":b="edge-thickness-thick";break;case"invisible":b="edge-thickness-invisible";break;default:b="edge-thickness-normal"}switch(e.pattern){case"solid":b+=" edge-pattern-solid";break;case"dotted":b+=" edge-pattern-dotted";break;case"dashed":b+=" edge-pattern-dashed";break;default:b+=" edge-pattern-solid"}let w,C=x(m),T=Array.isArray(e.style)?e.style:[e.style],E=T.find(_=>_?.startsWith("stroke:"));if(e.look==="handDrawn"){let _=Xe.svg(t);Object.assign([],m);let I=_.path(C,{roughness:.3,seed:l});b+=" transition",w=Ge(I).select("path").attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")).attr("style",T?T.reduce((k,L)=>k+";"+L,""):"");let D=w.attr("d");w.attr("d",D),t.node().appendChild(w.node())}else{let _=p.join(";"),I=T?T.reduce((L,R)=>L+R+";",""):"",D="";e.animate&&(D=" edge-animation-fast"),e.animation&&(D=" edge-animation-"+e.animation);let k=_?_+";"+I+";":I;w=t.append("path").attr("d",C).attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")+(D??"")).attr("style",k),E=k.match(/stroke:([^;]+)/)?.[1]}let A="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(A=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,A=A.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),Y.info("arrowTypeStart",e.arrowTypeStart),Y.info("arrowTypeEnd",e.arrowTypeEnd),QZ(w,e,A,s,n,E);let S={};return h&&(S.updatedPath=u),S.originalPath=e.points,S},"insertEdge")});var F_e,$_e,z_e,G_e,V_e,U_e,H_e,W_e,q_e,Y_e,X_e,j_e,K_e,Q_e,Z_e,J_e,e9e,Zw,tL=N(()=>{"use strict";vt();F_e=o((t,e,r,n)=>{e.forEach(i=>{e9e[i](t,r,n)})},"insertMarkers"),$_e=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),z_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),G_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),V_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),U_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),H_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),W_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),q_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),Y_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),X_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),j_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("d","M9,0 L9,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),i.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),K_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),Q_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),i.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),Z_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0 | |
| 474 | + L20,10 | |
| 475 | + M20,10 | |
| 476 | + L0,20`)},"requirement_arrow"),J_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),e9e={extension:$_e,composition:z_e,aggregation:G_e,dependency:V_e,lollipop:U_e,point:H_e,circle:W_e,cross:q_e,barb:Y_e,only_one:X_e,zero_or_one:j_e,one_or_more:K_e,zero_or_more:Q_e,requirement_arrow:Z_e,requirement_contains:J_e},Zw=F_e});async function vm(t,e,r){let n,i;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?QD[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),Jw.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}var Jw,rJ,nJ,k2,eT=N(()=>{"use strict";vt();ZD();Jw=new Map;o(vm,"insertNode");rJ=o((t,e)=>{Jw.set(e.id,t)},"setNodeElem"),nJ=o(()=>{Jw.clear()},"clear"),k2=o(t=>{let e=Jw.get(t.id);Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var iJ,aJ=N(()=>{"use strict";ji();gr();vt();Hw();eL();tL();eT();Ft();ir();iJ={common:Ze,getConfig:cr,insertCluster:ym,insertEdge:Qw,insertEdgeLabel:jw,insertMarkers:Zw,insertNode:vm,interpolateToCurve:W9,labelHelper:pt,log:Y,positionEdgeLabel:Kw}});function r9e(t){return typeof t=="symbol"||ri(t)&&da(t)==t9e}var t9e,no,Pd=N(()=>{"use strict";ku();No();t9e="[object Symbol]";o(r9e,"isSymbol");no=r9e});function n9e(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}var Ns,Bd=N(()=>{"use strict";o(n9e,"arrayMap");Ns=n9e});function lJ(t){if(typeof t=="string")return t;if(Pt(t))return Ns(t,lJ)+"";if(no(t))return oJ?oJ.call(t):"";var e=t+"";return e=="0"&&1/t==-i9e?"-0":e}var i9e,sJ,oJ,cJ,uJ=N(()=>{"use strict";Ed();Bd();Un();Pd();i9e=1/0,sJ=ea?ea.prototype:void 0,oJ=sJ?sJ.toString:void 0;o(lJ,"baseToString");cJ=lJ});function s9e(t){for(var e=t.length;e--&&a9e.test(t.charAt(e)););return e}var a9e,hJ,fJ=N(()=>{"use strict";a9e=/\s/;o(s9e,"trimmedEndIndex");hJ=s9e});function l9e(t){return t&&t.slice(0,hJ(t)+1).replace(o9e,"")}var o9e,dJ,pJ=N(()=>{"use strict";fJ();o9e=/^\s+/;o(l9e,"baseTrim");dJ=l9e});function d9e(t){if(typeof t=="number")return t;if(no(t))return mJ;if(bn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=bn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=dJ(t);var r=u9e.test(t);return r||h9e.test(t)?f9e(t.slice(2),r?2:8):c9e.test(t)?mJ:+t}var mJ,c9e,u9e,h9e,f9e,gJ,yJ=N(()=>{"use strict";pJ();Js();Pd();mJ=NaN,c9e=/^[-+]0x[0-9a-f]+$/i,u9e=/^0b[01]+$/i,h9e=/^0o[0-7]+$/i,f9e=parseInt;o(d9e,"toNumber");gJ=d9e});function m9e(t){if(!t)return t===0?t:0;if(t=gJ(t),t===vJ||t===-vJ){var e=t<0?-1:1;return e*p9e}return t===t?t:0}var vJ,p9e,xm,rL=N(()=>{"use strict";yJ();vJ=1/0,p9e=17976931348623157e292;o(m9e,"toFinite");xm=m9e});function g9e(t){var e=xm(t),r=e%1;return e===e?r?e-r:e:0}var vc,bm=N(()=>{"use strict";rL();o(g9e,"toInteger");vc=g9e});var y9e,tT,xJ=N(()=>{"use strict";Lh();Lo();y9e=Ss(li,"WeakMap"),tT=y9e});function v9e(){}var ni,nL=N(()=>{"use strict";o(v9e,"noop");ni=v9e});function x9e(t,e){for(var r=-1,n=t==null?0:t.length;++r<n&&e(t[r],r,t)!==!1;);return t}var rT,iL=N(()=>{"use strict";o(x9e,"arrayEach");rT=x9e});function b9e(t,e,r,n){for(var i=t.length,a=r+(n?1:-1);n?a--:++a<i;)if(e(t[a],a,t))return a;return-1}var nT,aL=N(()=>{"use strict";o(b9e,"baseFindIndex");nT=b9e});function w9e(t){return t!==t}var bJ,wJ=N(()=>{"use strict";o(w9e,"baseIsNaN");bJ=w9e});function T9e(t,e,r){for(var n=r-1,i=t.length;++n<i;)if(t[n]===e)return n;return-1}var TJ,kJ=N(()=>{"use strict";o(T9e,"strictIndexOf");TJ=T9e});function k9e(t,e,r){return e===e?TJ(t,e,r):nT(t,bJ,r)}var wm,iT=N(()=>{"use strict";aL();wJ();kJ();o(k9e,"baseIndexOf");wm=k9e});function E9e(t,e){var r=t==null?0:t.length;return!!r&&wm(t,e,0)>-1}var aT,sL=N(()=>{"use strict";iT();o(E9e,"arrayIncludes");aT=E9e});var S9e,EJ,SJ=N(()=>{"use strict";N9();S9e=nw(Object.keys,Object),EJ=S9e});function _9e(t){if(!uc(t))return EJ(t);var e=[];for(var r in Object(t))A9e.call(t,r)&&r!="constructor"&&e.push(r);return e}var C9e,A9e,Tm,sT=N(()=>{"use strict";Z0();SJ();C9e=Object.prototype,A9e=C9e.hasOwnProperty;o(_9e,"baseKeys");Tm=_9e});function D9e(t){return ci(t)?lw(t):Tm(t)}var zr,xc=N(()=>{"use strict";B9();sT();Mo();o(D9e,"keys");zr=D9e});var L9e,R9e,N9e,ma,CJ=N(()=>{"use strict";rm();Dd();G9();Mo();Z0();xc();L9e=Object.prototype,R9e=L9e.hasOwnProperty,N9e=hw(function(t,e){if(uc(e)||ci(e)){Po(e,zr(e),t);return}for(var r in e)R9e.call(e,r)&&hc(t,r,e[r])}),ma=N9e});function O9e(t,e){if(Pt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||no(t)?!0:I9e.test(t)||!M9e.test(t)||e!=null&&t in Object(e)}var M9e,I9e,km,oT=N(()=>{"use strict";Un();Pd();M9e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,I9e=/^\w*$/;o(O9e,"isKey");km=O9e});function B9e(t){var e=H0(t,function(n){return r.size===P9e&&r.clear(),n}),r=e.cache;return e}var P9e,AJ,_J=N(()=>{"use strict";S9();P9e=500;o(B9e,"memoizeCapped");AJ=B9e});var F9e,$9e,z9e,DJ,LJ=N(()=>{"use strict";_J();F9e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$9e=/\\(\\)?/g,z9e=AJ(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(F9e,function(r,n,i,a){e.push(i?a.replace($9e,"$1"):n||r)}),e}),DJ=z9e});function G9e(t){return t==null?"":cJ(t)}var lT,oL=N(()=>{"use strict";uJ();o(G9e,"toString");lT=G9e});function V9e(t,e){return Pt(t)?t:km(t,e)?[t]:DJ(lT(t))}var Yh,E2=N(()=>{"use strict";Un();oT();LJ();oL();o(V9e,"castPath");Yh=V9e});function H9e(t){if(typeof t=="string"||no(t))return t;var e=t+"";return e=="0"&&1/t==-U9e?"-0":e}var U9e,bc,Em=N(()=>{"use strict";Pd();U9e=1/0;o(H9e,"toKey");bc=H9e});function W9e(t,e){e=Yh(e,t);for(var r=0,n=e.length;t!=null&&r<n;)t=t[bc(e[r++])];return r&&r==n?t:void 0}var Xh,S2=N(()=>{"use strict";E2();Em();o(W9e,"baseGet");Xh=W9e});function q9e(t,e,r){var n=t==null?void 0:Xh(t,e);return n===void 0?r:n}var RJ,NJ=N(()=>{"use strict";S2();o(q9e,"get");RJ=q9e});function Y9e(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t}var Sm,cT=N(()=>{"use strict";o(Y9e,"arrayPush");Sm=Y9e});function X9e(t){return Pt(t)||El(t)||!!(MJ&&t&&t[MJ])}var MJ,IJ,OJ=N(()=>{"use strict";Ed();J0();Un();MJ=ea?ea.isConcatSpreadable:void 0;o(X9e,"isFlattenable");IJ=X9e});function PJ(t,e,r,n,i){var a=-1,s=t.length;for(r||(r=IJ),i||(i=[]);++a<s;){var l=t[a];e>0&&r(l)?e>1?PJ(l,e-1,r,n,i):Sm(i,l):n||(i[i.length]=l)}return i}var wc,Cm=N(()=>{"use strict";cT();OJ();o(PJ,"baseFlatten");wc=PJ});function j9e(t){var e=t==null?0:t.length;return e?wc(t,1):[]}var qr,uT=N(()=>{"use strict";Cm();o(j9e,"flatten");qr=j9e});function K9e(t){return uw(cw(t,void 0,qr),t+"")}var BJ,FJ=N(()=>{"use strict";uT();F9();z9();o(K9e,"flatRest");BJ=K9e});function Q9e(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(i);++n<i;)a[n]=t[n+e];return a}var hT,lL=N(()=>{"use strict";o(Q9e,"baseSlice");hT=Q9e});function sDe(t){return aDe.test(t)}var Z9e,J9e,eDe,tDe,rDe,nDe,iDe,aDe,$J,zJ=N(()=>{"use strict";Z9e="\\ud800-\\udfff",J9e="\\u0300-\\u036f",eDe="\\ufe20-\\ufe2f",tDe="\\u20d0-\\u20ff",rDe=J9e+eDe+tDe,nDe="\\ufe0e\\ufe0f",iDe="\\u200d",aDe=RegExp("["+iDe+Z9e+rDe+nDe+"]");o(sDe,"hasUnicode");$J=sDe});function oDe(t,e,r,n){var i=-1,a=t==null?0:t.length;for(n&&a&&(r=t[++i]);++i<a;)r=e(r,t[i],i,t);return r}var GJ,VJ=N(()=>{"use strict";o(oDe,"arrayReduce");GJ=oDe});function lDe(t,e){return t&&Po(e,zr(e),t)}var UJ,HJ=N(()=>{"use strict";Dd();xc();o(lDe,"baseAssign");UJ=lDe});function cDe(t,e){return t&&Po(e,Cs(e),t)}var WJ,qJ=N(()=>{"use strict";Dd();Bh();o(cDe,"baseAssignIn");WJ=cDe});function uDe(t,e){for(var r=-1,n=t==null?0:t.length,i=0,a=[];++r<n;){var s=t[r];e(s,r,t)&&(a[i++]=s)}return a}var Am,fT=N(()=>{"use strict";o(uDe,"arrayFilter");Am=uDe});function hDe(){return[]}var dT,cL=N(()=>{"use strict";o(hDe,"stubArray");dT=hDe});var fDe,dDe,YJ,pDe,_m,pT=N(()=>{"use strict";fT();cL();fDe=Object.prototype,dDe=fDe.propertyIsEnumerable,YJ=Object.getOwnPropertySymbols,pDe=YJ?function(t){return t==null?[]:(t=Object(t),Am(YJ(t),function(e){return dDe.call(t,e)}))}:dT,_m=pDe});function mDe(t,e){return Po(t,_m(t),e)}var XJ,jJ=N(()=>{"use strict";Dd();pT();o(mDe,"copySymbols");XJ=mDe});var gDe,yDe,mT,uL=N(()=>{"use strict";cT();iw();pT();cL();gDe=Object.getOwnPropertySymbols,yDe=gDe?function(t){for(var e=[];t;)Sm(e,_m(t)),t=Q0(t);return e}:dT,mT=yDe});function vDe(t,e){return Po(t,mT(t),e)}var KJ,QJ=N(()=>{"use strict";Dd();uL();o(vDe,"copySymbolsIn");KJ=vDe});function xDe(t,e,r){var n=e(t);return Pt(t)?n:Sm(n,r(t))}var gT,hL=N(()=>{"use strict";cT();Un();o(xDe,"baseGetAllKeys");gT=xDe});function bDe(t){return gT(t,zr,_m)}var C2,fL=N(()=>{"use strict";hL();pT();xc();o(bDe,"getAllKeys");C2=bDe});function wDe(t){return gT(t,Cs,mT)}var yT,dL=N(()=>{"use strict";hL();uL();Bh();o(wDe,"getAllKeysIn");yT=wDe});var TDe,vT,ZJ=N(()=>{"use strict";Lh();Lo();TDe=Ss(li,"DataView"),vT=TDe});var kDe,xT,JJ=N(()=>{"use strict";Lh();Lo();kDe=Ss(li,"Promise"),xT=kDe});var EDe,jh,pL=N(()=>{"use strict";Lh();Lo();EDe=Ss(li,"Set"),jh=EDe});var eee,SDe,tee,ree,nee,iee,CDe,ADe,_De,DDe,LDe,Fd,io,$d=N(()=>{"use strict";ZJ();K5();JJ();pL();xJ();ku();T9();eee="[object Map]",SDe="[object Object]",tee="[object Promise]",ree="[object Set]",nee="[object WeakMap]",iee="[object DataView]",CDe=Eu(vT),ADe=Eu(Mh),_De=Eu(xT),DDe=Eu(jh),LDe=Eu(tT),Fd=da;(vT&&Fd(new vT(new ArrayBuffer(1)))!=iee||Mh&&Fd(new Mh)!=eee||xT&&Fd(xT.resolve())!=tee||jh&&Fd(new jh)!=ree||tT&&Fd(new tT)!=nee)&&(Fd=o(function(t){var e=da(t),r=e==SDe?t.constructor:void 0,n=r?Eu(r):"";if(n)switch(n){case CDe:return iee;case ADe:return eee;case _De:return tee;case DDe:return ree;case LDe:return nee}return e},"getTag"));io=Fd});function MDe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&NDe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var RDe,NDe,aee,see=N(()=>{"use strict";RDe=Object.prototype,NDe=RDe.hasOwnProperty;o(MDe,"initCloneArray");aee=MDe});function IDe(t,e){var r=e?K0(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var oee,lee=N(()=>{"use strict";ew();o(IDe,"cloneDataView");oee=IDe});function PDe(t){var e=new t.constructor(t.source,ODe.exec(t));return e.lastIndex=t.lastIndex,e}var ODe,cee,uee=N(()=>{"use strict";ODe=/\w*$/;o(PDe,"cloneRegExp");cee=PDe});function BDe(t){return fee?Object(fee.call(t)):{}}var hee,fee,dee,pee=N(()=>{"use strict";Ed();hee=ea?ea.prototype:void 0,fee=hee?hee.valueOf:void 0;o(BDe,"cloneSymbol");dee=BDe});function nLe(t,e,r){var n=t.constructor;switch(e){case qDe:return K0(t);case FDe:case $De:return new n(+t);case YDe:return oee(t,r);case XDe:case jDe:case KDe:case QDe:case ZDe:case JDe:case eLe:case tLe:case rLe:return tw(t,r);case zDe:return new n;case GDe:case HDe:return new n(t);case VDe:return cee(t);case UDe:return new n;case WDe:return dee(t)}}var FDe,$De,zDe,GDe,VDe,UDe,HDe,WDe,qDe,YDe,XDe,jDe,KDe,QDe,ZDe,JDe,eLe,tLe,rLe,mee,gee=N(()=>{"use strict";ew();lee();uee();pee();L9();FDe="[object Boolean]",$De="[object Date]",zDe="[object Map]",GDe="[object Number]",VDe="[object RegExp]",UDe="[object Set]",HDe="[object String]",WDe="[object Symbol]",qDe="[object ArrayBuffer]",YDe="[object DataView]",XDe="[object Float32Array]",jDe="[object Float64Array]",KDe="[object Int8Array]",QDe="[object Int16Array]",ZDe="[object Int32Array]",JDe="[object Uint8Array]",eLe="[object Uint8ClampedArray]",tLe="[object Uint16Array]",rLe="[object Uint32Array]";o(nLe,"initCloneByTag");mee=nLe});function aLe(t){return ri(t)&&io(t)==iLe}var iLe,yee,vee=N(()=>{"use strict";$d();No();iLe="[object Map]";o(aLe,"baseIsMap");yee=aLe});var xee,sLe,bee,wee=N(()=>{"use strict";vee();_d();t2();xee=Oo&&Oo.isMap,sLe=xee?Io(xee):yee,bee=sLe});function lLe(t){return ri(t)&&io(t)==oLe}var oLe,Tee,kee=N(()=>{"use strict";$d();No();oLe="[object Set]";o(lLe,"baseIsSet");Tee=lLe});var Eee,cLe,See,Cee=N(()=>{"use strict";kee();_d();t2();Eee=Oo&&Oo.isSet,cLe=Eee?Io(Eee):Tee,See=cLe});function bT(t,e,r,n,i,a){var s,l=e&uLe,u=e&hLe,h=e&fLe;if(r&&(s=i?r(t,n,i,a):r(t)),s!==void 0)return s;if(!bn(t))return t;var f=Pt(t);if(f){if(s=aee(t),!l)return rw(t,s)}else{var d=io(t),p=d==_ee||d==yLe;if(Sl(t))return J5(t,l);if(d==Dee||d==Aee||p&&!i){if(s=u||p?{}:aw(t),!l)return u?KJ(t,WJ(s,t)):XJ(t,UJ(s,t))}else{if(!_n[d])return i?t:{};s=mee(t,d,l)}}a||(a=new lc);var m=a.get(t);if(m)return m;a.set(t,s),See(t)?t.forEach(function(v){s.add(bT(v,e,r,v,t,a))}):bee(t)&&t.forEach(function(v,x){s.set(x,bT(v,e,r,x,t,a))});var g=h?u?yT:C2:u?Cs:zr,y=f?void 0:g(t);return rT(y||t,function(v,x){y&&(x=v,v=t[x]),hc(s,x,bT(v,e,r,x,t,a))}),s}var uLe,hLe,fLe,Aee,dLe,pLe,mLe,gLe,_ee,yLe,vLe,xLe,Dee,bLe,wLe,TLe,kLe,ELe,SLe,CLe,ALe,_Le,DLe,LLe,RLe,NLe,MLe,ILe,OLe,_n,wT,mL=N(()=>{"use strict";Zv();iL();rm();HJ();qJ();_9();R9();jJ();QJ();fL();dL();$d();see();gee();M9();Un();tm();wee();Js();Cee();xc();Bh();uLe=1,hLe=2,fLe=4,Aee="[object Arguments]",dLe="[object Array]",pLe="[object Boolean]",mLe="[object Date]",gLe="[object Error]",_ee="[object Function]",yLe="[object GeneratorFunction]",vLe="[object Map]",xLe="[object Number]",Dee="[object Object]",bLe="[object RegExp]",wLe="[object Set]",TLe="[object String]",kLe="[object Symbol]",ELe="[object WeakMap]",SLe="[object ArrayBuffer]",CLe="[object DataView]",ALe="[object Float32Array]",_Le="[object Float64Array]",DLe="[object Int8Array]",LLe="[object Int16Array]",RLe="[object Int32Array]",NLe="[object Uint8Array]",MLe="[object Uint8ClampedArray]",ILe="[object Uint16Array]",OLe="[object Uint32Array]",_n={};_n[Aee]=_n[dLe]=_n[SLe]=_n[CLe]=_n[pLe]=_n[mLe]=_n[ALe]=_n[_Le]=_n[DLe]=_n[LLe]=_n[RLe]=_n[vLe]=_n[xLe]=_n[Dee]=_n[bLe]=_n[wLe]=_n[TLe]=_n[kLe]=_n[NLe]=_n[MLe]=_n[ILe]=_n[OLe]=!0;_n[gLe]=_n[_ee]=_n[ELe]=!1;o(bT,"baseClone");wT=bT});function BLe(t){return wT(t,PLe)}var PLe,an,gL=N(()=>{"use strict";mL();PLe=4;o(BLe,"clone");an=BLe});function zLe(t){return wT(t,FLe|$Le)}var FLe,$Le,yL,Lee=N(()=>{"use strict";mL();FLe=1,$Le=4;o(zLe,"cloneDeep");yL=zLe});function GLe(t){for(var e=-1,r=t==null?0:t.length,n=0,i=[];++e<r;){var a=t[e];a&&(i[n++]=a)}return i}var Tc,Ree=N(()=>{"use strict";o(GLe,"compact");Tc=GLe});function ULe(t){return this.__data__.set(t,VLe),this}var VLe,Nee,Mee=N(()=>{"use strict";VLe="__lodash_hash_undefined__";o(ULe,"setCacheAdd");Nee=ULe});function HLe(t){return this.__data__.has(t)}var Iee,Oee=N(()=>{"use strict";o(HLe,"setCacheHas");Iee=HLe});function TT(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new Cd;++e<r;)this.add(t[e])}var Dm,kT=N(()=>{"use strict";Q5();Mee();Oee();o(TT,"SetCache");TT.prototype.add=TT.prototype.push=Nee;TT.prototype.has=Iee;Dm=TT});function WLe(t,e){for(var r=-1,n=t==null?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}var ET,vL=N(()=>{"use strict";o(WLe,"arraySome");ET=WLe});function qLe(t,e){return t.has(e)}var Lm,ST=N(()=>{"use strict";o(qLe,"cacheHas");Lm=qLe});function jLe(t,e,r,n,i,a){var s=r&YLe,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&XLe?new Dm:void 0;for(a.set(t,e),a.set(e,t);++d<l;){var g=t[d],y=e[d];if(n)var v=s?n(y,g,d,e,t,a):n(g,y,d,t,e,a);if(v!==void 0){if(v)continue;p=!1;break}if(m){if(!ET(e,function(x,b){if(!Lm(m,b)&&(g===x||i(g,x,r,n,a)))return m.push(b)})){p=!1;break}}else if(!(g===y||i(g,y,r,n,a))){p=!1;break}}return a.delete(t),a.delete(e),p}var YLe,XLe,CT,xL=N(()=>{"use strict";kT();vL();ST();YLe=1,XLe=2;o(jLe,"equalArrays");CT=jLe});function KLe(t){var e=-1,r=Array(t.size);return t.forEach(function(n,i){r[++e]=[i,n]}),r}var Pee,Bee=N(()=>{"use strict";o(KLe,"mapToArray");Pee=KLe});function QLe(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var Rm,AT=N(()=>{"use strict";o(QLe,"setToArray");Rm=QLe});function hRe(t,e,r,n,i,a,s){switch(r){case uRe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case cRe:return!(t.byteLength!=e.byteLength||!a(new j0(t),new j0(e)));case eRe:case tRe:case iRe:return Ro(+t,+e);case rRe:return t.name==e.name&&t.message==e.message;case aRe:case oRe:return t==e+"";case nRe:var l=Pee;case sRe:var u=n&ZLe;if(l||(l=Rm),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;n|=JLe,s.set(t,e);var f=CT(l(t),l(e),n,i,a,s);return s.delete(t),f;case lRe:if(bL)return bL.call(t)==bL.call(e)}return!1}var ZLe,JLe,eRe,tRe,rRe,nRe,iRe,aRe,sRe,oRe,lRe,cRe,uRe,Fee,bL,$ee,zee=N(()=>{"use strict";Ed();D9();Sd();xL();Bee();AT();ZLe=1,JLe=2,eRe="[object Boolean]",tRe="[object Date]",rRe="[object Error]",nRe="[object Map]",iRe="[object Number]",aRe="[object RegExp]",sRe="[object Set]",oRe="[object String]",lRe="[object Symbol]",cRe="[object ArrayBuffer]",uRe="[object DataView]",Fee=ea?ea.prototype:void 0,bL=Fee?Fee.valueOf:void 0;o(hRe,"equalByTag");$ee=hRe});function mRe(t,e,r,n,i,a){var s=r&fRe,l=C2(t),u=l.length,h=C2(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:pRe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d<u;){p=l[d];var x=t[p],b=e[p];if(n)var w=s?n(b,x,p,e,t,a):n(x,b,p,t,e,a);if(!(w===void 0?x===b||i(x,b,r,n,a):w)){y=!1;break}v||(v=p=="constructor")}if(y&&!v){var C=t.constructor,T=e.constructor;C!=T&&"constructor"in t&&"constructor"in e&&!(typeof C=="function"&&C instanceof C&&typeof T=="function"&&T instanceof T)&&(y=!1)}return a.delete(t),a.delete(e),y}var fRe,dRe,pRe,Gee,Vee=N(()=>{"use strict";fL();fRe=1,dRe=Object.prototype,pRe=dRe.hasOwnProperty;o(mRe,"equalObjects");Gee=mRe});function vRe(t,e,r,n,i,a){var s=Pt(t),l=Pt(e),u=s?Hee:io(t),h=l?Hee:io(e);u=u==Uee?_T:u,h=h==Uee?_T:h;var f=u==_T,d=h==_T,p=u==h;if(p&&Sl(t)){if(!Sl(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new lc),s||Oh(t)?CT(t,e,r,n,i,a):$ee(t,e,u,r,n,i,a);if(!(r&gRe)){var m=f&&Wee.call(t,"__wrapped__"),g=d&&Wee.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new lc),i(y,v,r,n,a)}}return p?(a||(a=new lc),Gee(t,e,r,n,i,a)):!1}var gRe,Uee,Hee,_T,yRe,Wee,qee,Yee=N(()=>{"use strict";Zv();xL();zee();Vee();$d();Un();tm();r2();gRe=1,Uee="[object Arguments]",Hee="[object Array]",_T="[object Object]",yRe=Object.prototype,Wee=yRe.hasOwnProperty;o(vRe,"baseIsEqualDeep");qee=vRe});function Xee(t,e,r,n,i){return t===e?!0:t==null||e==null||!ri(t)&&!ri(e)?t!==t&&e!==e:qee(t,e,r,n,Xee,i)}var DT,wL=N(()=>{"use strict";Yee();No();o(Xee,"baseIsEqual");DT=Xee});function wRe(t,e,r,n){var i=r.length,a=i,s=!n;if(t==null)return!a;for(t=Object(t);i--;){var l=r[i];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++i<a;){l=r[i];var u=l[0],h=t[u],f=l[1];if(s&&l[2]){if(h===void 0&&!(u in t))return!1}else{var d=new lc;if(n)var p=n(h,f,u,t,e,d);if(!(p===void 0?DT(f,h,xRe|bRe,n,d):p))return!1}}return!0}var xRe,bRe,jee,Kee=N(()=>{"use strict";Zv();wL();xRe=1,bRe=2;o(wRe,"baseIsMatch");jee=wRe});function TRe(t){return t===t&&!bn(t)}var LT,TL=N(()=>{"use strict";Js();o(TRe,"isStrictComparable");LT=TRe});function kRe(t){for(var e=zr(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,LT(i)]}return e}var Qee,Zee=N(()=>{"use strict";TL();xc();o(kRe,"getMatchData");Qee=kRe});function ERe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var RT,kL=N(()=>{"use strict";o(ERe,"matchesStrictComparable");RT=ERe});function SRe(t){var e=Qee(t);return e.length==1&&e[0][2]?RT(e[0][0],e[0][1]):function(r){return r===t||jee(r,t,e)}}var Jee,ete=N(()=>{"use strict";Kee();Zee();kL();o(SRe,"baseMatches");Jee=SRe});function CRe(t,e){return t!=null&&e in Object(t)}var tte,rte=N(()=>{"use strict";o(CRe,"baseHasIn");tte=CRe});function ARe(t,e,r){e=Yh(e,t);for(var n=-1,i=e.length,a=!1;++n<i;){var s=bc(e[n]);if(!(a=t!=null&&r(t,s)))break;t=t[s]}return a||++n!=i?a:(i=t==null?0:t.length,!!i&&em(i)&&Ph(s,i)&&(Pt(t)||El(t)))}var NT,EL=N(()=>{"use strict";E2();J0();Un();i2();sw();Em();o(ARe,"hasPath");NT=ARe});function _Re(t,e){return t!=null&&NT(t,e,tte)}var MT,SL=N(()=>{"use strict";rte();EL();o(_Re,"hasIn");MT=_Re});function RRe(t,e){return km(t)&<(e)?RT(bc(t),e):function(r){var n=RJ(r,t);return n===void 0&&n===e?MT(r,t):DT(e,n,DRe|LRe)}}var DRe,LRe,nte,ite=N(()=>{"use strict";wL();NJ();SL();oT();TL();kL();Em();DRe=1,LRe=2;o(RRe,"baseMatchesProperty");nte=RRe});function NRe(t){return function(e){return e?.[t]}}var IT,CL=N(()=>{"use strict";o(NRe,"baseProperty");IT=NRe});function MRe(t){return function(e){return Xh(e,t)}}var ate,ste=N(()=>{"use strict";S2();o(MRe,"basePropertyDeep");ate=MRe});function IRe(t){return km(t)?IT(bc(t)):ate(t)}var ote,lte=N(()=>{"use strict";CL();ste();oT();Em();o(IRe,"property");ote=IRe});function ORe(t){return typeof t=="function"?t:t==null?ta:typeof t=="object"?Pt(t)?nte(t[0],t[1]):Jee(t):ote(t)}var pn,rs=N(()=>{"use strict";ete();ite();Cu();Un();lte();o(ORe,"baseIteratee");pn=ORe});function PRe(t,e,r,n){for(var i=-1,a=t==null?0:t.length;++i<a;){var s=t[i];e(n,s,r(s),t)}return n}var cte,ute=N(()=>{"use strict";o(PRe,"arrayAggregator");cte=PRe});function BRe(t,e){return t&&X0(t,e,zr)}var Nm,OT=N(()=>{"use strict";Z5();xc();o(BRe,"baseForOwn");Nm=BRe});function FRe(t,e){return function(r,n){if(r==null)return r;if(!ci(r))return t(r,n);for(var i=r.length,a=e?i:-1,s=Object(r);(e?a--:++a<i)&&n(s[a],a,s)!==!1;);return r}}var hte,fte=N(()=>{"use strict";Mo();o(FRe,"createBaseEach");hte=FRe});var $Re,Ms,Kh=N(()=>{"use strict";OT();fte();$Re=hte(Nm),Ms=$Re});function zRe(t,e,r,n){return Ms(t,function(i,a,s){e(n,i,r(i),s)}),n}var dte,pte=N(()=>{"use strict";Kh();o(zRe,"baseAggregator");dte=zRe});function GRe(t,e){return function(r,n){var i=Pt(r)?cte:dte,a=e?e():{};return i(r,t,pn(n,2),a)}}var mte,gte=N(()=>{"use strict";ute();pte();rs();Un();o(GRe,"createAggregator");mte=GRe});var VRe,PT,yte=N(()=>{"use strict";Lo();VRe=o(function(){return li.Date.now()},"now"),PT=VRe});var vte,URe,HRe,Qh,xte=N(()=>{"use strict";nm();Sd();Ld();Bh();vte=Object.prototype,URe=vte.hasOwnProperty,HRe=fc(function(t,e){t=Object(t);var r=-1,n=e.length,i=n>2?e[2]:void 0;for(i&&eo(e[0],e[1],i)&&(n=1);++r<n;)for(var a=e[r],s=Cs(a),l=-1,u=s.length;++l<u;){var h=s[l],f=t[h];(f===void 0||Ro(f,vte[h])&&!URe.call(t,h))&&(t[h]=a[h])}return t}),Qh=HRe});function WRe(t,e,r){for(var n=-1,i=t==null?0:t.length;++n<i;)if(r(e,t[n]))return!0;return!1}var BT,AL=N(()=>{"use strict";o(WRe,"arrayIncludesWith");BT=WRe});function YRe(t,e,r,n){var i=-1,a=aT,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=Ns(e,Io(r))),n?(a=BT,s=!1):e.length>=qRe&&(a=Lm,s=!1,e=new Dm(e));e:for(;++i<l;){var f=t[i],d=r==null?f:r(f);if(f=n||f!==0?f:0,s&&d===d){for(var p=h;p--;)if(e[p]===d)continue e;u.push(f)}else a(e,d,n)||u.push(f)}return u}var qRe,bte,wte=N(()=>{"use strict";kT();sL();AL();Bd();_d();ST();qRe=200;o(YRe,"baseDifference");bte=YRe});var XRe,Zh,Tte=N(()=>{"use strict";wte();Cm();nm();ow();XRe=fc(function(t,e){return Ad(t)?bte(t,wc(e,1,Ad,!0)):[]}),Zh=XRe});function jRe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var ga,kte=N(()=>{"use strict";o(jRe,"last");ga=jRe});function KRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:vc(e),hT(t,e<0?0:e,n)):[]}var gi,Ete=N(()=>{"use strict";lL();bm();o(KRe,"drop");gi=KRe});function QRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:vc(e),e=n-e,hT(t,0,e<0?0:e)):[]}var Nu,Ste=N(()=>{"use strict";lL();bm();o(QRe,"dropRight");Nu=QRe});function ZRe(t){return typeof t=="function"?t:ta}var Mm,FT=N(()=>{"use strict";Cu();o(ZRe,"castFunction");Mm=ZRe});function JRe(t,e){var r=Pt(t)?rT:Ms;return r(t,Mm(e))}var Ae,$T=N(()=>{"use strict";iL();Kh();FT();Un();o(JRe,"forEach");Ae=JRe});var Cte=N(()=>{"use strict";$T()});function eNe(t,e){for(var r=-1,n=t==null?0:t.length;++r<n;)if(!e(t[r],r,t))return!1;return!0}var Ate,_te=N(()=>{"use strict";o(eNe,"arrayEvery");Ate=eNe});function tNe(t,e){var r=!0;return Ms(t,function(n,i,a){return r=!!e(n,i,a),r}),r}var Dte,Lte=N(()=>{"use strict";Kh();o(tNe,"baseEvery");Dte=tNe});function rNe(t,e,r){var n=Pt(t)?Ate:Dte;return r&&eo(t,e,r)&&(e=void 0),n(t,pn(e,3))}var Ma,Rte=N(()=>{"use strict";_te();Lte();rs();Un();Ld();o(rNe,"every");Ma=rNe});function nNe(t,e){var r=[];return Ms(t,function(n,i,a){e(n,i,a)&&r.push(n)}),r}var zT,_L=N(()=>{"use strict";Kh();o(nNe,"baseFilter");zT=nNe});function iNe(t,e){var r=Pt(t)?Am:zT;return r(t,pn(e,3))}var Yr,DL=N(()=>{"use strict";fT();_L();rs();Un();o(iNe,"filter");Yr=iNe});function aNe(t){return function(e,r,n){var i=Object(e);if(!ci(e)){var a=pn(r,3);e=zr(e),r=o(function(l){return a(i[l],l,i)},"predicate")}var s=t(e,r,n);return s>-1?i[a?e[s]:s]:void 0}}var Nte,Mte=N(()=>{"use strict";rs();Mo();xc();o(aNe,"createFind");Nte=aNe});function oNe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:vc(r);return i<0&&(i=sNe(n+i,0)),nT(t,pn(e,3),i)}var sNe,Ite,Ote=N(()=>{"use strict";aL();rs();bm();sNe=Math.max;o(oNe,"findIndex");Ite=oNe});var lNe,ns,Pte=N(()=>{"use strict";Mte();Ote();lNe=Nte(Ite),ns=lNe});function cNe(t){return t&&t.length?t[0]:void 0}var ia,Bte=N(()=>{"use strict";o(cNe,"head");ia=cNe});var Fte=N(()=>{"use strict";Bte()});function uNe(t,e){var r=-1,n=ci(t)?Array(t.length):[];return Ms(t,function(i,a,s){n[++r]=e(i,a,s)}),n}var GT,LL=N(()=>{"use strict";Kh();Mo();o(uNe,"baseMap");GT=uNe});function hNe(t,e){var r=Pt(t)?Ns:GT;return r(t,pn(e,3))}var Je,Im=N(()=>{"use strict";Bd();rs();LL();Un();o(hNe,"map");Je=hNe});function fNe(t,e){return wc(Je(t,e),1)}var ya,RL=N(()=>{"use strict";Cm();Im();o(fNe,"flatMap");ya=fNe});function dNe(t,e){return t==null?t:X0(t,Mm(e),Cs)}var NL,$te=N(()=>{"use strict";Z5();FT();Bh();o(dNe,"forIn");NL=dNe});function pNe(t,e){return t&&Nm(t,Mm(e))}var ML,zte=N(()=>{"use strict";OT();FT();o(pNe,"forOwn");ML=pNe});var mNe,gNe,yNe,IL,Gte=N(()=>{"use strict";Y0();gte();mNe=Object.prototype,gNe=mNe.hasOwnProperty,yNe=mte(function(t,e,r){gNe.call(t,r)?t[r].push(e):cc(t,r,[e])}),IL=yNe});function vNe(t,e){return t>e}var Vte,Ute=N(()=>{"use strict";o(vNe,"baseGt");Vte=vNe});function wNe(t,e){return t!=null&&bNe.call(t,e)}var xNe,bNe,Hte,Wte=N(()=>{"use strict";xNe=Object.prototype,bNe=xNe.hasOwnProperty;o(wNe,"baseHas");Hte=wNe});function TNe(t,e){return t!=null&&NT(t,e,Hte)}var Bt,qte=N(()=>{"use strict";Wte();EL();o(TNe,"has");Bt=TNe});function ENe(t){return typeof t=="string"||!Pt(t)&&ri(t)&&da(t)==kNe}var kNe,yi,VT=N(()=>{"use strict";ku();Un();No();kNe="[object String]";o(ENe,"isString");yi=ENe});function SNe(t,e){return Ns(e,function(r){return t[r]})}var Yte,Xte=N(()=>{"use strict";Bd();o(SNe,"baseValues");Yte=SNe});function CNe(t){return t==null?[]:Yte(t,zr(t))}var br,OL=N(()=>{"use strict";Xte();xc();o(CNe,"values");br=CNe});function _Ne(t,e,r,n){t=ci(t)?t:br(t),r=r&&!n?vc(r):0;var i=t.length;return r<0&&(r=ANe(i+r,0)),yi(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&wm(t,e,r)>-1}var ANe,qn,jte=N(()=>{"use strict";iT();Mo();VT();bm();OL();ANe=Math.max;o(_Ne,"includes");qn=_Ne});function LNe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:vc(r);return i<0&&(i=DNe(n+i,0)),wm(t,e,i)}var DNe,UT,Kte=N(()=>{"use strict";iT();bm();DNe=Math.max;o(LNe,"indexOf");UT=LNe});function ONe(t){if(t==null)return!0;if(ci(t)&&(Pt(t)||typeof t=="string"||typeof t.splice=="function"||Sl(t)||Oh(t)||El(t)))return!t.length;var e=io(t);if(e==RNe||e==NNe)return!t.size;if(uc(t))return!Tm(t).length;for(var r in t)if(INe.call(t,r))return!1;return!0}var RNe,NNe,MNe,INe,ur,HT=N(()=>{"use strict";sT();$d();J0();Un();Mo();tm();Z0();r2();RNe="[object Map]",NNe="[object Set]",MNe=Object.prototype,INe=MNe.hasOwnProperty;o(ONe,"isEmpty");ur=ONe});function BNe(t){return ri(t)&&da(t)==PNe}var PNe,Qte,Zte=N(()=>{"use strict";ku();No();PNe="[object RegExp]";o(BNe,"baseIsRegExp");Qte=BNe});var Jte,FNe,zo,ere=N(()=>{"use strict";Zte();_d();t2();Jte=Oo&&Oo.isRegExp,FNe=Jte?Io(Jte):Qte,zo=FNe});function $Ne(t){return t===void 0}var pr,tre=N(()=>{"use strict";o($Ne,"isUndefined");pr=$Ne});function zNe(t,e){return t<e}var WT,PL=N(()=>{"use strict";o(zNe,"baseLt");WT=zNe});function GNe(t,e){var r={};return e=pn(e,3),Nm(t,function(n,i,a){cc(r,i,e(n,i,a))}),r}var zd,rre=N(()=>{"use strict";Y0();OT();rs();o(GNe,"mapValues");zd=GNe});function VNe(t,e,r){for(var n=-1,i=t.length;++n<i;){var a=t[n],s=e(a);if(s!=null&&(l===void 0?s===s&&!no(s):r(s,l)))var l=s,u=a}return u}var Om,qT=N(()=>{"use strict";Pd();o(VNe,"baseExtremum");Om=VNe});function UNe(t){return t&&t.length?Om(t,ta,Vte):void 0}var Is,nre=N(()=>{"use strict";qT();Ute();Cu();o(UNe,"max");Is=UNe});function HNe(t){return t&&t.length?Om(t,ta,WT):void 0}var Dl,BL=N(()=>{"use strict";qT();PL();Cu();o(HNe,"min");Dl=HNe});function WNe(t,e){return t&&t.length?Om(t,pn(e,2),WT):void 0}var Gd,ire=N(()=>{"use strict";qT();rs();PL();o(WNe,"minBy");Gd=WNe});function YNe(t){if(typeof t!="function")throw new TypeError(qNe);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var qNe,are,sre=N(()=>{"use strict";qNe="Expected a function";o(YNe,"negate");are=YNe});function XNe(t,e,r,n){if(!bn(t))return t;e=Yh(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i<a;){var u=bc(e[i]),h=r;if(u==="__proto__"||u==="constructor"||u==="prototype")return t;if(i!=s){var f=l[u];h=n?n(f,u,l):void 0,h===void 0&&(h=bn(f)?f:Ph(e[i+1])?[]:{})}hc(l,u,h),l=l[u]}return t}var ore,lre=N(()=>{"use strict";rm();E2();i2();Js();Em();o(XNe,"baseSet");ore=XNe});function jNe(t,e,r){for(var n=-1,i=e.length,a={};++n<i;){var s=e[n],l=Xh(t,s);r(l,s)&&ore(a,Yh(s,t),l)}return a}var YT,FL=N(()=>{"use strict";S2();lre();E2();o(jNe,"basePickBy");YT=jNe});function KNe(t,e){if(t==null)return{};var r=Ns(yT(t),function(n){return[n]});return e=pn(e),YT(t,r,function(n,i){return e(n,i[0])})}var Os,cre=N(()=>{"use strict";Bd();rs();FL();dL();o(KNe,"pickBy");Os=KNe});function QNe(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var ure,hre=N(()=>{"use strict";o(QNe,"baseSortBy");ure=QNe});function ZNe(t,e){if(t!==e){var r=t!==void 0,n=t===null,i=t===t,a=no(t),s=e!==void 0,l=e===null,u=e===e,h=no(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||n&&s&&u||!r&&u||!i)return 1;if(!n&&!a&&!h&&t<e||h&&r&&i&&!n&&!a||l&&r&&i||!s&&i||!u)return-1}return 0}var fre,dre=N(()=>{"use strict";Pd();o(ZNe,"compareAscending");fre=ZNe});function JNe(t,e,r){for(var n=-1,i=t.criteria,a=e.criteria,s=i.length,l=r.length;++n<s;){var u=fre(i[n],a[n]);if(u){if(n>=l)return u;var h=r[n];return u*(h=="desc"?-1:1)}}return t.index-e.index}var pre,mre=N(()=>{"use strict";dre();o(JNe,"compareMultiple");pre=JNe});function eMe(t,e,r){e.length?e=Ns(e,function(a){return Pt(a)?function(s){return Xh(s,a.length===1?a[0]:a)}:a}):e=[ta];var n=-1;e=Ns(e,Io(pn));var i=GT(t,function(a,s,l){var u=Ns(e,function(h){return h(a)});return{criteria:u,index:++n,value:a}});return ure(i,function(a,s){return pre(a,s,r)})}var gre,yre=N(()=>{"use strict";Bd();S2();rs();LL();hre();_d();mre();Cu();Un();o(eMe,"baseOrderBy");gre=eMe});var tMe,vre,xre=N(()=>{"use strict";CL();tMe=IT("length"),vre=tMe});function dMe(t){for(var e=bre.lastIndex=0;bre.test(t);)++e;return e}var wre,rMe,nMe,iMe,aMe,sMe,oMe,$L,zL,lMe,Tre,kre,Ere,cMe,Sre,Cre,uMe,hMe,fMe,bre,Are,_re=N(()=>{"use strict";wre="\\ud800-\\udfff",rMe="\\u0300-\\u036f",nMe="\\ufe20-\\ufe2f",iMe="\\u20d0-\\u20ff",aMe=rMe+nMe+iMe,sMe="\\ufe0e\\ufe0f",oMe="["+wre+"]",$L="["+aMe+"]",zL="\\ud83c[\\udffb-\\udfff]",lMe="(?:"+$L+"|"+zL+")",Tre="[^"+wre+"]",kre="(?:\\ud83c[\\udde6-\\uddff]){2}",Ere="[\\ud800-\\udbff][\\udc00-\\udfff]",cMe="\\u200d",Sre=lMe+"?",Cre="["+sMe+"]?",uMe="(?:"+cMe+"(?:"+[Tre,kre,Ere].join("|")+")"+Cre+Sre+")*",hMe=Cre+Sre+uMe,fMe="(?:"+[Tre+$L+"?",$L,kre,Ere,oMe].join("|")+")",bre=RegExp(zL+"(?="+zL+")|"+fMe+hMe,"g");o(dMe,"unicodeSize");Are=dMe});function pMe(t){return $J(t)?Are(t):vre(t)}var Dre,Lre=N(()=>{"use strict";xre();zJ();_re();o(pMe,"stringSize");Dre=pMe});function mMe(t,e){return YT(t,e,function(r,n){return MT(t,n)})}var Rre,Nre=N(()=>{"use strict";FL();SL();o(mMe,"basePick");Rre=mMe});var gMe,Vd,Mre=N(()=>{"use strict";Nre();FJ();gMe=BJ(function(t,e){return t==null?{}:Rre(t,e)}),Vd=gMe});function xMe(t,e,r,n){for(var i=-1,a=vMe(yMe((e-t)/(r||1)),0),s=Array(a);a--;)s[n?a:++i]=t,t+=r;return s}var yMe,vMe,Ire,Ore=N(()=>{"use strict";yMe=Math.ceil,vMe=Math.max;o(xMe,"baseRange");Ire=xMe});function bMe(t){return function(e,r,n){return n&&typeof n!="number"&&eo(e,r,n)&&(r=n=void 0),e=xm(e),r===void 0?(r=e,e=0):r=xm(r),n=n===void 0?e<r?1:-1:xm(n),Ire(e,r,n,t)}}var Pre,Bre=N(()=>{"use strict";Ore();Ld();rL();o(bMe,"createRange");Pre=bMe});var wMe,Go,Fre=N(()=>{"use strict";Bre();wMe=Pre(),Go=wMe});function TMe(t,e,r,n,i){return i(t,function(a,s,l){r=n?(n=!1,a):e(r,a,s,l)}),r}var $re,zre=N(()=>{"use strict";o(TMe,"baseReduce");$re=TMe});function kMe(t,e,r){var n=Pt(t)?GJ:$re,i=arguments.length<3;return n(t,pn(e,4),r,i,Ms)}var Xr,GL=N(()=>{"use strict";VJ();Kh();rs();zre();Un();o(kMe,"reduce");Xr=kMe});function EMe(t,e){var r=Pt(t)?Am:zT;return r(t,are(pn(e,3)))}var Jh,Gre=N(()=>{"use strict";fT();_L();rs();Un();sre();o(EMe,"reject");Jh=EMe});function AMe(t){if(t==null)return 0;if(ci(t))return yi(t)?Dre(t):t.length;var e=io(t);return e==SMe||e==CMe?t.size:Tm(t).length}var SMe,CMe,VL,Vre=N(()=>{"use strict";sT();$d();Mo();VT();Lre();SMe="[object Map]",CMe="[object Set]";o(AMe,"size");VL=AMe});function _Me(t,e){var r;return Ms(t,function(n,i,a){return r=e(n,i,a),!r}),!!r}var Ure,Hre=N(()=>{"use strict";Kh();o(_Me,"baseSome");Ure=_Me});function DMe(t,e,r){var n=Pt(t)?ET:Ure;return r&&eo(t,e,r)&&(e=void 0),n(t,pn(e,3))}var A2,Wre=N(()=>{"use strict";vL();rs();Hre();Un();Ld();o(DMe,"some");A2=DMe});var LMe,kc,qre=N(()=>{"use strict";Cm();yre();nm();Ld();LMe=fc(function(t,e){if(t==null)return[];var r=e.length;return r>1&&eo(t,e[0],e[1])?e=[]:r>2&&eo(e[0],e[1],e[2])&&(e=[e[0]]),gre(t,wc(e,1),[])}),kc=LMe});var RMe,NMe,Yre,Xre=N(()=>{"use strict";pL();nL();AT();RMe=1/0,NMe=jh&&1/Rm(new jh([,-0]))[1]==RMe?function(t){return new jh(t)}:ni,Yre=NMe});function IMe(t,e,r){var n=-1,i=aT,a=t.length,s=!0,l=[],u=l;if(r)s=!1,i=BT;else if(a>=MMe){var h=e?null:Yre(t);if(h)return Rm(h);s=!1,i=Lm,u=new Dm}else u=e?[]:l;e:for(;++n<a;){var f=t[n],d=e?e(f):f;if(f=r||f!==0?f:0,s&&d===d){for(var p=u.length;p--;)if(u[p]===d)continue e;e&&u.push(d),l.push(f)}else i(u,d,r)||(u!==l&&u.push(d),l.push(f))}return l}var MMe,Pm,XT=N(()=>{"use strict";kT();sL();AL();ST();Xre();AT();MMe=200;o(IMe,"baseUniq");Pm=IMe});var OMe,UL,jre=N(()=>{"use strict";Cm();nm();XT();ow();OMe=fc(function(t){return Pm(wc(t,1,Ad,!0))}),UL=OMe});function PMe(t){return t&&t.length?Pm(t):[]}var Bm,Kre=N(()=>{"use strict";XT();o(PMe,"uniq");Bm=PMe});function BMe(t,e){return t&&t.length?Pm(t,pn(e,2)):[]}var Qre,Zre=N(()=>{"use strict";rs();XT();o(BMe,"uniqBy");Qre=BMe});function $Me(t){var e=++FMe;return lT(t)+e}var FMe,Ud,Jre=N(()=>{"use strict";oL();FMe=0;o($Me,"uniqueId");Ud=$Me});function zMe(t,e,r){for(var n=-1,i=t.length,a=e.length,s={};++n<i;){var l=n<a?e[n]:void 0;r(s,t[n],l)}return s}var ene,tne=N(()=>{"use strict";o(zMe,"baseZipObject");ene=zMe});function GMe(t,e){return ene(t||[],e||[],hc)}var jT,rne=N(()=>{"use strict";rm();tne();o(GMe,"zipObject");jT=GMe});var qt=N(()=>{"use strict";CJ();gL();Lee();Ree();$9();xte();Tte();Ete();Ste();Cte();Rte();DL();Pte();Fte();RL();uT();$T();$te();zte();Gte();qte();Cu();jte();Kte();Un();HT();Yv();Js();ere();VT();tre();xc();kte();Im();rre();nre();V9();BL();ire();nL();yte();Mre();cre();Fre();GL();Gre();Vre();Wre();qre();jre();Kre();Jre();OL();rne();});function ine(t,e){t[e]?t[e]++:t[e]=1}function ane(t,e){--t[e]||delete t[e]}function _2(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+nne+a+nne+(pr(n)?VMe:n)}function UMe(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var l={v:i,w:a};return n&&(l.name=n),l}function HL(t,e){return _2(t,e.v,e.w,e.name)}var VMe,Hd,nne,sn,KT=N(()=>{"use strict";qt();VMe="\0",Hd="\0",nne="",sn=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=As(void 0),this._defaultEdgeLabelFn=As(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[Hd]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return Si(e)||(e=As(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return zr(this._nodes)}sources(){var e=this;return Yr(this.nodes(),function(r){return ur(e._in[r])})}sinks(){var e=this;return Yr(this.nodes(),function(r){return ur(e._out[r])})}setNodes(e,r){var n=arguments,i=this;return Ae(e,function(a){n.length>1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=Hd,this._children[e]={},this._children[Hd][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(n=>this.removeEdge(this._edgeObjs[n]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Ae(this.children(e),n=>{this.setParent(n)}),delete this._children[e]),Ae(zr(this._in[e]),r),delete this._in[e],delete this._preds[e],Ae(zr(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(pr(r))r=Hd;else{r+="";for(var n=r;!pr(n);n=this.parent(n))if(n===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==Hd)return r}}children(e){if(pr(e)&&(e=Hd),this._isCompound){var r=this._children[e];if(r)return zr(r)}else{if(e===Hd)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return zr(r)}successors(e){var r=this._sucs[e];if(r)return zr(r)}neighbors(e){var r=this.predecessors(e);if(r)return UL(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;Ae(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Ae(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,n.edge(s))});var i={};function a(s){var l=n.parent(s);return l===void 0||r.hasNode(l)?(i[s]=l,l):l in i?i[l]:a(l)}return o(a,"findParent"),this._isCompound&&Ae(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return Si(e)||(e=As(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return br(this._edgeObjs)}setPath(e,r){var n=this,i=arguments;return Xr(e,function(a,s){return i.length>1?n.setEdge(a,s,r):n.setEdge(a,s),s}),this}setEdge(){var e,r,n,i,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,n=s.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=s,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,pr(n)||(n=""+n);var l=_2(this._isDirected,e,r,n);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=i),this;if(!pr(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?i:this._defaultEdgeLabelFn(e,r,n);var u=UMe(this._isDirected,e,r,n);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,ine(this._preds[r],e),ine(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n);return this._edgeLabels[i]}hasEdge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],ane(this._preds[r],e),ane(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var n=this._in[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.v===r}):i}}outEdges(e,r){var n=this._out[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var n=this.inEdges(e,r);if(n)return n.concat(this.outEdges(e,r))}};sn.prototype._nodeCount=0;sn.prototype._edgeCount=0;o(ine,"incrementOrInitEntry");o(ane,"decrementOrRemoveEntry");o(_2,"edgeArgsToId");o(UMe,"edgeArgsToObj");o(HL,"edgeObjToId")});var Vo=N(()=>{"use strict";KT()});function sne(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function HMe(t,e){if(t!=="_next"&&t!=="_prev")return e}var ZT,one=N(()=>{"use strict";ZT=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return sne(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&sne(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,n=r._prev;n!==r;)e.push(JSON.stringify(n,HMe)),n=n._prev;return"["+e.join(", ")+"]"}};o(sne,"unlink");o(HMe,"filterOutLinks")});function lne(t,e){if(t.nodeCount()<=1)return[];var r=YMe(t,e||WMe),n=qMe(r.graph,r.buckets,r.zeroIdx);return qr(Je(n,function(i){return t.outEdges(i.v,i.w)}))}function qMe(t,e,r){for(var n=[],i=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)WL(t,e,r,s);for(;s=i.dequeue();)WL(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){n=n.concat(WL(t,e,r,s,!0));break}}}return n}function WL(t,e,r,n,i){var a=i?[]:void 0;return Ae(t.inEdges(n.v),function(s){var l=t.edge(s),u=t.node(s.v);i&&a.push({v:s.v,w:s.w}),u.out-=l,qL(e,r,u)}),Ae(t.outEdges(n.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,qL(e,r,h)}),t.removeNode(n.v),a}function YMe(t,e){var r=new sn,n=0,i=0;Ae(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Ae(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),i=Math.max(i,r.node(l.v).out+=h),n=Math.max(n,r.node(l.w).in+=h)});var a=Go(i+n+3).map(function(){return new ZT}),s=n+1;return Ae(r.nodes(),function(l){qL(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function qL(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var WMe,cne=N(()=>{"use strict";qt();Vo();one();WMe=As(1);o(lne,"greedyFAS");o(qMe,"doGreedyFAS");o(WL,"removeNode");o(YMe,"buildState");o(qL,"assignBucket")});function une(t){var e=t.graph().acyclicer==="greedy"?lne(t,r(t)):XMe(t);Ae(e,function(n){var i=t.edge(n);t.removeEdge(n),i.forwardName=n.name,i.reversed=!0,t.setEdge(n.w,n.v,i,Ud("rev"))});function r(n){return function(i){return n.edge(i).weight}}o(r,"weightFn")}function XMe(t){var e=[],r={},n={};function i(a){Object.prototype.hasOwnProperty.call(n,a)||(n[a]=!0,r[a]=!0,Ae(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):i(s.w)}),delete r[a])}return o(i,"dfs"),Ae(t.nodes(),i),e}function hne(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var n=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,n)}})}var YL=N(()=>{"use strict";qt();cne();o(une,"run");o(XMe,"dfsFAS");o(hne,"undo")});function Ec(t,e,r,n){var i;do i=Ud(n);while(t.hasNode(i));return r.dummy=e,t.setNode(i,r),i}function dne(t){var e=new sn().setGraph(t.graph());return Ae(t.nodes(),function(r){e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){var n=e.edge(r.v,r.w)||{weight:0,minlen:1},i=t.edge(r);e.setEdge(r.v,r.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e}function JT(t){var e=new sn({multigraph:t.isMultigraph()}).setGraph(t.graph());return Ae(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function XL(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=l*i/a,h=l):(i<0&&(s=-s),u=s,h=s*a/i),{x:r+u,y:n+h}}function ef(t){var e=Je(Go(KL(t)+1),function(){return[]});return Ae(t.nodes(),function(r){var n=t.node(r),i=n.rank;pr(i)||(e[i][n.order]=r)}),e}function pne(t){var e=Dl(Je(t.nodes(),function(r){return t.node(r).rank}));Ae(t.nodes(),function(r){var n=t.node(r);Bt(n,"rank")&&(n.rank-=e)})}function mne(t){var e=Dl(Je(t.nodes(),function(a){return t.node(a).rank})),r=[];Ae(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var n=0,i=t.graph().nodeRankFactor;Ae(r,function(a,s){pr(a)&&s%i!==0?--n:n&&Ae(a,function(l){t.node(l).rank+=n})})}function jL(t,e,r,n){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=n),Ec(t,"border",i,e)}function KL(t){return Is(Je(t.nodes(),function(e){var r=t.node(e).rank;if(!pr(r))return r}))}function gne(t,e){var r={lhs:[],rhs:[]};return Ae(t,function(n){e(n)?r.lhs.push(n):r.rhs.push(n)}),r}function yne(t,e){var r=PT();try{return e()}finally{console.log(t+" time: "+(PT()-r)+"ms")}}function vne(t,e){return e()}var Sc=N(()=>{"use strict";qt();Vo();o(Ec,"addDummyNode");o(dne,"simplify");o(JT,"asNonCompoundGraph");o(XL,"intersectRect");o(ef,"buildLayerMatrix");o(pne,"normalizeRanks");o(mne,"removeEmptyRanks");o(jL,"addBorderNode");o(KL,"maxRank");o(gne,"partition");o(yne,"time");o(vne,"notime")});function bne(t){function e(r){var n=t.children(r),i=t.node(r);if(n.length&&Ae(n,e),Object.prototype.hasOwnProperty.call(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,s=i.maxRank+1;a<s;++a)xne(t,"borderLeft","_bl",r,i,a),xne(t,"borderRight","_br",r,i,a)}}o(e,"dfs"),Ae(t.children(),e)}function xne(t,e,r,n,i,a){var s={width:0,height:0,rank:a,borderType:e},l=i[e][a-1],u=Ec(t,"border",s,r);i[e][a]=u,t.setParent(u,n),l&&t.setEdge(l,u,{weight:1})}var wne=N(()=>{"use strict";qt();Sc();o(bne,"addBorderSegments");o(xne,"addBorderNode")});function kne(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&Sne(t)}function Ene(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&jMe(t),(e==="lr"||e==="rl")&&(KMe(t),Sne(t))}function Sne(t){Ae(t.nodes(),function(e){Tne(t.node(e))}),Ae(t.edges(),function(e){Tne(t.edge(e))})}function Tne(t){var e=t.width;t.width=t.height,t.height=e}function jMe(t){Ae(t.nodes(),function(e){QL(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,QL),Object.prototype.hasOwnProperty.call(r,"y")&&QL(r)})}function QL(t){t.y=-t.y}function KMe(t){Ae(t.nodes(),function(e){ZL(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,ZL),Object.prototype.hasOwnProperty.call(r,"x")&&ZL(r)})}function ZL(t){var e=t.x;t.x=t.y,t.y=e}var Cne=N(()=>{"use strict";qt();o(kne,"adjust");o(Ene,"undo");o(Sne,"swapWidthHeight");o(Tne,"swapWidthHeightOne");o(jMe,"reverseY");o(QL,"reverseYOne");o(KMe,"swapXY");o(ZL,"swapXYOne")});function Ane(t){t.graph().dummyChains=[],Ae(t.edges(),function(e){ZMe(t,e)})}function ZMe(t,e){var r=e.v,n=t.node(r).rank,i=e.w,a=t.node(i).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==n+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++n;n<a;++d,++n)l.points=[],h={width:0,height:0,edgeLabel:l,edgeObj:e,rank:n},f=Ec(t,"edge",h,"_d"),n===u&&(h.width=l.width,h.height=l.height,h.dummy="edge-label",h.labelpos=l.labelpos),t.setEdge(r,f,{weight:l.weight},s),d===0&&t.graph().dummyChains.push(f),r=f;t.setEdge(r,i,{weight:l.weight},s)}}function _ne(t){Ae(t.graph().dummyChains,function(e){var r=t.node(e),n=r.edgeLabel,i;for(t.setEdge(r.edgeObj,n);r.dummy;)i=t.successors(e)[0],t.removeNode(e),n.points.push({x:r.x,y:r.y}),r.dummy==="edge-label"&&(n.x=r.x,n.y=r.y,n.width=r.width,n.height=r.height),e=i,r=t.node(e)})}var JL=N(()=>{"use strict";qt();Sc();o(Ane,"run");o(ZMe,"normalizeEdge");o(_ne,"undo")});function D2(t){var e={};function r(n){var i=t.node(n);if(Object.prototype.hasOwnProperty.call(e,n))return i.rank;e[n]=!0;var a=Dl(Je(t.outEdges(n),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),i.rank=a}o(r,"dfs"),Ae(t.sources(),r)}function Wd(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var ek=N(()=>{"use strict";qt();o(D2,"longestPath");o(Wd,"slack")});function tk(t){var e=new sn({directed:!1}),r=t.nodes()[0],n=t.nodeCount();e.setNode(r,{});for(var i,a;JMe(e,t)<n;)i=eIe(e,t),a=e.hasNode(i.v)?Wd(t,i):-Wd(t,i),tIe(e,t,a);return e}function JMe(t,e){function r(n){Ae(e.nodeEdges(n),function(i){var a=i.v,s=n===a?i.w:a;!t.hasNode(s)&&!Wd(e,i)&&(t.setNode(s,{}),t.setEdge(n,s,{}),r(s))})}return o(r,"dfs"),Ae(t.nodes(),r),t.nodeCount()}function eIe(t,e){return Gd(e.edges(),function(r){if(t.hasNode(r.v)!==t.hasNode(r.w))return Wd(e,r)})}function tIe(t,e,r){Ae(t.nodes(),function(n){e.node(n).rank+=r})}var eR=N(()=>{"use strict";qt();Vo();ek();o(tk,"feasibleTree");o(JMe,"tightTree");o(eIe,"findMinSlackEdge");o(tIe,"shiftRanks")});var Lne=N(()=>{"use strict"});var tR=N(()=>{"use strict"});var cWt,rR=N(()=>{"use strict";qt();tR();cWt=As(1)});var Rne=N(()=>{"use strict";rR()});var nR=N(()=>{"use strict"});var Nne=N(()=>{"use strict";nR()});var bWt,Mne=N(()=>{"use strict";qt();bWt=As(1)});function iR(t){var e={},r={},n=[];function i(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new L2;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Ae(t.predecessors(a),i),delete r[a],n.push(a))}if(o(i,"visit"),Ae(t.sinks(),i),VL(e)!==t.nodeCount())throw new L2;return n}function L2(){}var aR=N(()=>{"use strict";qt();iR.CycleException=L2;o(iR,"topsort");o(L2,"CycleException");L2.prototype=new Error});var Ine=N(()=>{"use strict";aR()});function rk(t,e,r){Pt(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return Ae(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);One(t,s,r==="post",a,n,i)}),i}function One(t,e,r,n,i,a){Object.prototype.hasOwnProperty.call(n,e)||(n[e]=!0,r||a.push(e),Ae(i(e),function(s){One(t,s,r,n,i,a)}),r&&a.push(e))}var sR=N(()=>{"use strict";qt();o(rk,"dfs");o(One,"doDfs")});function oR(t,e){return rk(t,e,"post")}var Pne=N(()=>{"use strict";sR();o(oR,"postorder")});function lR(t,e){return rk(t,e,"pre")}var Bne=N(()=>{"use strict";sR();o(lR,"preorder")});var Fne=N(()=>{"use strict";tR();KT()});var $ne=N(()=>{"use strict";Lne();rR();Rne();Nne();Mne();Ine();Pne();Bne();Fne();nR();aR()});function rf(t){t=dne(t),D2(t);var e=tk(t);uR(e),cR(e,t);for(var r,n;r=Une(e);)n=Hne(e,t,r),Wne(e,t,r,n)}function cR(t,e){var r=oR(t,t.nodes());r=r.slice(0,r.length-1),Ae(r,function(n){sIe(t,e,n)})}function sIe(t,e,r){var n=t.node(r),i=n.parent;t.edge(r,i).cutvalue=Gne(t,e,r)}function Gne(t,e,r){var n=t.node(r),i=n.parent,a=!0,s=e.edge(r,i),l=0;return s||(a=!1,s=e.edge(i,r)),l=s.weight,Ae(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==i){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,lIe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function uR(t,e){arguments.length<2&&(e=t.nodes()[0]),Vne(t,{},1,e)}function Vne(t,e,r,n,i){var a=r,s=t.node(n);return e[n]=!0,Ae(t.neighbors(n),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=Vne(t,e,r,l,n))}),s.low=a,s.lim=r++,i?s.parent=i:delete s.parent,r}function Une(t){return ns(t.edges(),function(e){return t.edge(e).cutvalue<0})}function Hne(t,e,r){var n=r.v,i=r.w;e.hasEdge(n,i)||(n=r.w,i=r.v);var a=t.node(n),s=t.node(i),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=Yr(e.edges(),function(f){return u===zne(t,t.node(f.v),l)&&u!==zne(t,t.node(f.w),l)});return Gd(h,function(f){return Wd(e,f)})}function Wne(t,e,r,n){var i=r.v,a=r.w;t.removeEdge(i,a),t.setEdge(n.v,n.w,{}),uR(t),cR(t,e),oIe(t,e)}function oIe(t,e){var r=ns(t.nodes(),function(i){return!e.node(i).parent}),n=lR(t,r);n=n.slice(1),Ae(n,function(i){var a=t.node(i).parent,s=e.edge(i,a),l=!1;s||(s=e.edge(a,i),l=!0),e.node(i).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function lIe(t,e,r){return t.hasEdge(e,r)}function zne(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var qne=N(()=>{"use strict";qt();$ne();Sc();eR();ek();rf.initLowLimValues=uR;rf.initCutValues=cR;rf.calcCutValue=Gne;rf.leaveEdge=Une;rf.enterEdge=Hne;rf.exchangeEdges=Wne;o(rf,"networkSimplex");o(cR,"initCutValues");o(sIe,"assignCutValue");o(Gne,"calcCutValue");o(uR,"initLowLimValues");o(Vne,"dfsAssignLowLim");o(Une,"leaveEdge");o(Hne,"enterEdge");o(Wne,"exchangeEdges");o(oIe,"updateRanks");o(lIe,"isTreeEdge");o(zne,"isDescendant")});function hR(t){switch(t.graph().ranker){case"network-simplex":Yne(t);break;case"tight-tree":uIe(t);break;case"longest-path":cIe(t);break;default:Yne(t)}}function uIe(t){D2(t),tk(t)}function Yne(t){rf(t)}var cIe,fR=N(()=>{"use strict";eR();qne();ek();o(hR,"rank");cIe=D2;o(uIe,"tightTreeRanker");o(Yne,"networkSimplexRanker")});function Xne(t){var e=Ec(t,"root",{},"_root"),r=hIe(t),n=Is(br(r))-1,i=2*n+1;t.graph().nestingRoot=e,Ae(t.edges(),function(s){t.edge(s).minlen*=i});var a=fIe(t)+1;Ae(t.children(),function(s){jne(t,e,i,a,n,r,s)}),t.graph().nodeRankFactor=i}function jne(t,e,r,n,i,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=jL(t,"_bt"),h=jL(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Ae(l,function(d){jne(t,e,r,n,i,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?n:2*n,v=m!==g?1:i-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:i+a[s]})}function hIe(t){var e={};function r(n,i){var a=t.children(n);a&&a.length&&Ae(a,function(s){r(s,i+1)}),e[n]=i}return o(r,"dfs"),Ae(t.children(),function(n){r(n,1)}),e}function fIe(t){return Xr(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function Kne(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Ae(t.edges(),function(r){var n=t.edge(r);n.nestingEdge&&t.removeEdge(r)})}var Qne=N(()=>{"use strict";qt();Sc();o(Xne,"run");o(jne,"dfs");o(hIe,"treeDepths");o(fIe,"sumWeights");o(Kne,"cleanup")});function Zne(t,e,r){var n={},i;Ae(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=n[l],n[l]=s):(u=i,i=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var Jne=N(()=>{"use strict";qt();o(Zne,"addSubgraphConstraints")});function eie(t,e,r){var n=pIe(t),i=new sn({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(a){return t.node(a)});return Ae(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,l||n),Ae(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=i.edge(h,a),d=pr(f)?0:f.weight;i.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function pIe(t){for(var e;t.hasNode(e=Ud("_root")););return e}var tie=N(()=>{"use strict";qt();Vo();o(eie,"buildLayerGraph");o(pIe,"createRootNode")});function rie(t,e){for(var r=0,n=1;n<e.length;++n)r+=mIe(t,e[n-1],e[n]);return r}function mIe(t,e,r){for(var n=jT(r,Je(r,function(h,f){return f})),i=qr(Je(e,function(h){return kc(Je(t.outEdges(h),function(f){return{pos:n[f.w],weight:t.edge(f).weight}}),"pos")})),a=1;a<r.length;)a<<=1;var s=2*a-1;a-=1;var l=Je(new Array(s),function(){return 0}),u=0;return Ae(i.forEach(function(h){var f=h.pos+a;l[f]+=h.weight;for(var d=0;f>0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var nie=N(()=>{"use strict";qt();o(rie,"crossCount");o(mIe,"twoLayerCrossCount")});function iie(t){var e={},r=Yr(t.nodes(),function(l){return!t.children(l).length}),n=Is(Je(r,function(l){return t.node(l).rank})),i=Je(Go(n+1),function(){return[]});function a(l){if(!Bt(e,l)){e[l]=!0;var u=t.node(l);i[u.rank].push(l),Ae(t.successors(l),a)}}o(a,"dfs");var s=kc(r,function(l){return t.node(l).rank});return Ae(s,a),i}var aie=N(()=>{"use strict";qt();o(iie,"initOrder")});function sie(t,e){return Je(e,function(r){var n=t.inEdges(r);if(n.length){var i=Xr(n,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}var oie=N(()=>{"use strict";qt();o(sie,"barycenter")});function lie(t,e){var r={};Ae(t,function(i,a){var s=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};pr(i.barycenter)||(s.barycenter=i.barycenter,s.weight=i.weight)}),Ae(e.edges(),function(i){var a=r[i.v],s=r[i.w];!pr(a)&&!pr(s)&&(s.indegree++,a.out.push(r[i.w]))});var n=Yr(r,function(i){return!i.indegree});return gIe(n)}function gIe(t){var e=[];function r(a){return function(s){s.merged||(pr(s.barycenter)||pr(a.barycenter)||s.barycenter>=a.barycenter)&&yIe(a,s)}}o(r,"handleIn");function n(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(n,"handleOut");t.length;){var i=t.pop();e.push(i),Ae(i.in.reverse(),r(i)),Ae(i.out,n(i))}return Je(Yr(e,function(a){return!a.merged}),function(a){return Vd(a,["vs","i","barycenter","weight"])})}function yIe(t,e){var r=0,n=0;t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/n,t.weight=n,t.i=Math.min(e.i,t.i),e.merged=!0}var cie=N(()=>{"use strict";qt();o(lie,"resolveConflicts");o(gIe,"doResolveConflicts");o(yIe,"mergeEntries")});function hie(t,e){var r=gne(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=r.lhs,i=kc(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;n.sort(vIe(!!e)),u=uie(a,i,u),Ae(n,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=uie(a,i,u)});var h={vs:qr(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function uie(t,e,r){for(var n;e.length&&(n=ga(e)).i<=r;)e.pop(),t.push(n.vs),r++;return r}function vIe(t){return function(e,r){return e.barycenter<r.barycenter?-1:e.barycenter>r.barycenter?1:t?r.i-e.i:e.i-r.i}}var fie=N(()=>{"use strict";qt();Sc();o(hie,"sort");o(uie,"consumeUnsortable");o(vIe,"compareWithBias")});function dR(t,e,r,n){var i=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(i=Yr(i,function(g){return g!==s&&g!==l}));var h=sie(t,i);Ae(h,function(g){if(t.children(g.v).length){var y=dR(t,g.v,r,n);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&bIe(g,y)}});var f=lie(h,r);xIe(f,u);var d=hie(f,n);if(s&&(d.vs=qr([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function xIe(t,e){Ae(t,function(r){r.vs=qr(r.vs.map(function(n){return e[n]?e[n].vs:n}))})}function bIe(t,e){pr(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var die=N(()=>{"use strict";qt();oie();cie();fie();o(dR,"sortSubgraph");o(xIe,"expandSubgraphs");o(bIe,"mergeBarycenters")});function gie(t){var e=KL(t),r=pie(t,Go(1,e+1),"inEdges"),n=pie(t,Go(e-1,-1,-1),"outEdges"),i=iie(t);mie(t,i);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){wIe(l%2?r:n,l%4>=2),i=ef(t);var h=rie(t,i);h<a&&(u=0,s=yL(i),a=h)}mie(t,s)}function pie(t,e,r){return Je(e,function(n){return eie(t,n,r)})}function wIe(t,e){var r=new sn;Ae(t,function(n){var i=n.graph().root,a=dR(n,i,r,e);Ae(a.vs,function(s,l){n.node(s).order=l}),Zne(n,r,a.vs)})}function mie(t,e){Ae(e,function(r){Ae(r,function(n,i){t.node(n).order=i})})}var yie=N(()=>{"use strict";qt();Vo();Sc();Jne();tie();nie();aie();die();o(gie,"order");o(pie,"buildLayerGraphs");o(wIe,"sweepLayerGraphs");o(mie,"assignOrder")});function vie(t){var e=kIe(t);Ae(t.graph().dummyChains,function(r){for(var n=t.node(r),i=n.edgeObj,a=TIe(t,e,i.v,i.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==i.w;){if(n=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRank<n.rank;)u++;h===l&&(f=!1)}if(!f){for(;u<s.length-1&&t.node(h=s[u+1]).minRank<=n.rank;)u++;h=s[u]}t.setParent(r,h),r=t.successors(r)[0]}})}function TIe(t,e,r,n){var i=[],a=[],s=Math.min(e[r].low,e[n].low),l=Math.max(e[r].lim,e[n].lim),u,h;u=r;do u=t.parent(u),i.push(u);while(u&&(e[u].low>s||l>e[u].lim));for(h=u,u=n;(u=t.parent(u))!==h;)a.push(u);return{path:i.concat(a.reverse()),lca:h}}function kIe(t){var e={},r=0;function n(i){var a=r;Ae(t.children(i),n),e[i]={low:a,lim:r++}}return o(n,"dfs"),Ae(t.children(),n),e}var xie=N(()=>{"use strict";qt();o(vie,"parentDummyChains");o(TIe,"findPath");o(kIe,"postorder")});function EIe(t,e){var r={};function n(i,a){var s=0,l=0,u=i.length,h=ga(a);return Ae(a,function(f,d){var p=CIe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Ae(a.slice(l,d+1),function(g){Ae(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(x<s||m<x)&&!(v.dummy&&t.node(g).dummy)&&bie(r,y,g)})}),l=d+1,s=m)}),a}return o(n,"visitLayer"),Xr(e,n),r}function SIe(t,e){var r={};function n(a,s,l,u,h){var f;Ae(Go(s,l),function(d){f=a[d],t.node(f).dummy&&Ae(t.predecessors(f),function(p){var m=t.node(p);m.dummy&&(m.order<u||m.order>h)&&bie(r,p,f)})})}o(n,"scan");function i(a,s){var l=-1,u,h=0;return Ae(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,n(s,h,d,l,u),h=d,l=u)}n(s,h,s.length,u,a.length)}),s}return o(i,"visitLayer"),Xr(e,i),r}function CIe(t,e){if(t.node(e).dummy)return ns(t.predecessors(e),function(r){return t.node(r).dummy})}function bie(t,e,r){if(e>r){var n=e;e=r,r=n}var i=t[e];i||(t[e]=i={}),i[r]=!0}function AIe(t,e,r){if(e>r){var n=e;e=r,r=n}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function _Ie(t,e,r,n){var i={},a={},s={};return Ae(e,function(l){Ae(l,function(u,h){i[u]=u,a[u]=u,s[u]=h})}),Ae(e,function(l){var u=-1;Ae(l,function(h){var f=n(h);if(f.length){f=kc(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u<s[g]&&!AIe(r,h,g)&&(a[g]=h,a[h]=i[h]=i[g],u=s[g])}}})}),{root:i,align:a}}function DIe(t,e,r,n,i){var a={},s=LIe(t,e,r,i),l=i?"borderLeft":"borderRight";function u(d,p){for(var m=s.nodes(),g=m.pop(),y={};g;)y[g]?d(g):(y[g]=!0,m.push(g),m=m.concat(p(g))),g=m.pop()}o(u,"iterate");function h(d){a[d]=s.inEdges(d).reduce(function(p,m){return Math.max(p,a[m.v]+s.edge(m))},0)}o(h,"pass1");function f(d){var p=s.outEdges(d).reduce(function(g,y){return Math.min(g,a[y.w]-s.edge(y))},Number.POSITIVE_INFINITY),m=t.node(d);p!==Number.POSITIVE_INFINITY&&m.borderType!==l&&(a[d]=Math.max(a[d],p))}return o(f,"pass2"),u(h,s.predecessors.bind(s)),u(f,s.successors.bind(s)),Ae(n,function(d){a[d]=a[r[d]]}),a}function LIe(t,e,r,n){var i=new sn,a=t.graph(),s=IIe(a.nodesep,a.edgesep,n);return Ae(e,function(l){var u;Ae(l,function(h){var f=r[h];if(i.setNode(f),u){var d=r[u],p=i.edge(d,f);i.setEdge(d,f,Math.max(s(t,h,u),p||0))}u=h})}),i}function RIe(t,e){return Gd(br(e),function(r){var n=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;return NL(r,function(a,s){var l=OIe(t,s)/2;n=Math.max(a+l,n),i=Math.min(a-l,i)}),n-i})}function NIe(t,e){var r=br(e),n=Dl(r),i=Is(r);Ae(["u","d"],function(a){Ae(["l","r"],function(s){var l=a+s,u=t[l],h;if(u!==e){var f=br(u);h=s==="l"?n-Dl(f):i-Is(f),h&&(t[l]=zd(u,function(d){return d+h}))}})})}function MIe(t,e){return zd(t.ul,function(r,n){if(e)return t[e.toLowerCase()][n];var i=kc(Je(t,n));return(i[1]+i[2])/2})}function wie(t){var e=ef(t),r=Fh(EIe(t,e),SIe(t,e)),n={},i;Ae(["u","d"],function(s){i=s==="u"?e:br(e).reverse(),Ae(["l","r"],function(l){l==="r"&&(i=Je(i,function(d){return br(d).reverse()}));var u=(s==="u"?t.predecessors:t.successors).bind(t),h=_Ie(t,i,r,u),f=DIe(t,i,h.root,h.align,l==="r");l==="r"&&(f=zd(f,function(d){return-d})),n[s+l]=f})});var a=RIe(t,n);return NIe(n,a),MIe(n,t.graph().align)}function IIe(t,e,r){return function(n,i,a){var s=n.node(i),l=n.node(a),u=0,h;if(u+=s.width/2,Object.prototype.hasOwnProperty.call(s,"labelpos"))switch(s.labelpos.toLowerCase()){case"l":h=-s.width/2;break;case"r":h=s.width/2;break}if(h&&(u+=r?h:-h),h=0,u+=(s.dummy?e:t)/2,u+=(l.dummy?e:t)/2,u+=l.width/2,Object.prototype.hasOwnProperty.call(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":h=l.width/2;break;case"r":h=-l.width/2;break}return h&&(u+=r?h:-h),h=0,u}}function OIe(t,e){return t.node(e).width}var Tie=N(()=>{"use strict";qt();Vo();Sc();o(EIe,"findType1Conflicts");o(SIe,"findType2Conflicts");o(CIe,"findOtherInnerSegmentNode");o(bie,"addConflict");o(AIe,"hasConflict");o(_Ie,"verticalAlignment");o(DIe,"horizontalCompaction");o(LIe,"buildBlockGraph");o(RIe,"findSmallestWidthAlignment");o(NIe,"alignCoordinates");o(MIe,"balance");o(wie,"positionX");o(IIe,"sep");o(OIe,"width")});function kie(t){t=JT(t),PIe(t),ML(wie(t),function(e,r){t.node(r).x=e})}function PIe(t){var e=ef(t),r=t.graph().ranksep,n=0;Ae(e,function(i){var a=Is(Je(i,function(s){return t.node(s).height}));Ae(i,function(s){t.node(s).y=n+a/2}),n+=a+r})}var Eie=N(()=>{"use strict";qt();Sc();Tie();o(kie,"position");o(PIe,"positionY")});function R2(t,e){var r=e&&e.debugTiming?yne:vne;r("layout",()=>{var n=r(" buildLayoutGraph",()=>YIe(t));r(" runLayout",()=>BIe(n,r)),r(" updateInputGraph",()=>FIe(t,n))})}function BIe(t,e){e(" makeSpaceForEdgeLabels",()=>XIe(t)),e(" removeSelfEdges",()=>nOe(t)),e(" acyclic",()=>une(t)),e(" nestingGraph.run",()=>Xne(t)),e(" rank",()=>hR(JT(t))),e(" injectEdgeLabelProxies",()=>jIe(t)),e(" removeEmptyRanks",()=>mne(t)),e(" nestingGraph.cleanup",()=>Kne(t)),e(" normalizeRanks",()=>pne(t)),e(" assignRankMinMax",()=>KIe(t)),e(" removeEdgeLabelProxies",()=>QIe(t)),e(" normalize.run",()=>Ane(t)),e(" parentDummyChains",()=>vie(t)),e(" addBorderSegments",()=>bne(t)),e(" order",()=>gie(t)),e(" insertSelfEdges",()=>iOe(t)),e(" adjustCoordinateSystem",()=>kne(t)),e(" position",()=>kie(t)),e(" positionSelfEdges",()=>aOe(t)),e(" removeBorderNodes",()=>rOe(t)),e(" normalize.undo",()=>_ne(t)),e(" fixupEdgeLabelCoords",()=>eOe(t)),e(" undoCoordinateSystem",()=>Ene(t)),e(" translateGraph",()=>ZIe(t)),e(" assignNodeIntersects",()=>JIe(t)),e(" reversePoints",()=>tOe(t)),e(" acyclic.undo",()=>hne(t))}function FIe(t,e){Ae(t.nodes(),function(r){var n=t.node(r),i=e.node(r);n&&(n.x=i.x,n.y=i.y,e.children(r).length&&(n.width=i.width,n.height=i.height))}),Ae(t.edges(),function(r){var n=t.edge(r),i=e.edge(r);n.points=i.points,Object.prototype.hasOwnProperty.call(i,"x")&&(n.x=i.x,n.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function YIe(t){var e=new sn({multigraph:!0,compound:!0}),r=mR(t.graph());return e.setGraph(Fh({},zIe,pR(r,$Ie),Vd(r,GIe))),Ae(t.nodes(),function(n){var i=mR(t.node(n));e.setNode(n,Qh(pR(i,VIe),UIe)),e.setParent(n,t.parent(n))}),Ae(t.edges(),function(n){var i=mR(t.edge(n));e.setEdge(n,Fh({},WIe,pR(i,HIe),Vd(i,qIe)))}),e}function XIe(t){var e=t.graph();e.ranksep/=2,Ae(t.edges(),function(r){var n=t.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function jIe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var n=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-n.rank)/2+n.rank,e};Ec(t,"edge-proxy",a,"_ep")}})}function KIe(t){var e=0;Ae(t.nodes(),function(r){var n=t.node(r);n.borderTop&&(n.minRank=t.node(n.borderTop).rank,n.maxRank=t.node(n.borderBottom).rank,e=Is(e,n.maxRank))}),t.graph().maxRank=e}function QIe(t){Ae(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function ZIe(t){var e=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,i=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),n=Math.min(n,d-m/2),i=Math.max(i,d+m/2)}o(u,"getExtremes"),Ae(t.nodes(),function(h){u(t.node(h))}),Ae(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,n-=l,Ae(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=n}),Ae(t.edges(),function(h){var f=t.edge(h);Ae(f.points,function(d){d.x-=e,d.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),a.width=r-e+s,a.height=i-n+l}function JIe(t){Ae(t.edges(),function(e){var r=t.edge(e),n=t.node(e.v),i=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=i,s=n),r.points.unshift(XL(n,a)),r.points.push(XL(i,s))})}function eOe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function tOe(t){Ae(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function rOe(t){Ae(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),n=t.node(r.borderTop),i=t.node(r.borderBottom),a=t.node(ga(r.borderLeft)),s=t.node(ga(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(i.y-n.y),r.x=a.x+r.width/2,r.y=n.y+r.height/2}}),Ae(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function nOe(t){Ae(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function iOe(t){var e=ef(t);Ae(e,function(r){var n=0;Ae(r,function(i,a){var s=t.node(i);s.order=a+n,Ae(s.selfEdges,function(l){Ec(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function aOe(t){Ae(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var n=t.node(r.e.v),i=n.x+n.width/2,a=n.y,s=r.x-i,l=n.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:i+2*s/3,y:a-l},{x:i+5*s/6,y:a-l},{x:i+s,y:a},{x:i+5*s/6,y:a+l},{x:i+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function pR(t,e){return zd(Vd(t,e),Number)}function mR(t){var e={};return Ae(t,function(r,n){e[n.toLowerCase()]=r}),e}var $Ie,zIe,GIe,VIe,UIe,HIe,WIe,qIe,Sie=N(()=>{"use strict";qt();Vo();wne();Cne();YL();JL();fR();Qne();yie();xie();Eie();Sc();o(R2,"layout");o(BIe,"runLayout");o(FIe,"updateInputGraph");$Ie=["nodesep","edgesep","ranksep","marginx","marginy"],zIe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},GIe=["acyclicer","ranker","rankdir","align"],VIe=["width","height"],UIe={width:0,height:0},HIe=["minlen","weight","width","height","labeloffset"],WIe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},qIe=["labelpos"];o(YIe,"buildLayoutGraph");o(XIe,"makeSpaceForEdgeLabels");o(jIe,"injectEdgeLabelProxies");o(KIe,"assignRankMinMax");o(QIe,"removeEdgeLabelProxies");o(ZIe,"translateGraph");o(JIe,"assignNodeIntersects");o(eOe,"fixupEdgeLabelCoords");o(tOe,"reversePointsForReversedEdges");o(rOe,"removeBorderNodes");o(nOe,"removeSelfEdges");o(iOe,"insertSelfEdges");o(aOe,"positionSelfEdges");o(pR,"selectNumberAttrs");o(mR,"canonicalize")});var gR=N(()=>{"use strict";YL();Sie();JL();fR()});function Uo(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:sOe(t),edges:oOe(t)};return pr(t.graph())||(e.value=an(t.graph())),e}function sOe(t){return Je(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return pr(r)||(i.value=r),pr(n)||(i.parent=n),i})}function oOe(t){return Je(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return pr(e.name)||(n.name=e.name),pr(r)||(n.value=r),n})}var yR=N(()=>{"use strict";qt();KT();o(Uo,"write");o(sOe,"writeNodes");o(oOe,"writeEdges")});var wr,qd,_ie,Die,nk,lOe,Lie,Rie,cOe,Fm,Aie,Nie,Mie,Iie,Oie,Pie=N(()=>{"use strict";vt();Vo();yR();wr=new Map,qd=new Map,_ie=new Map,Die=o(()=>{qd.clear(),_ie.clear(),wr.clear()},"clear"),nk=o((t,e)=>{let r=qd.get(e)||[];return Y.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),lOe=o((t,e)=>{let r=qd.get(e)||[];return Y.info("Descendants of ",e," is ",r),Y.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||nk(t.v,e)||nk(t.w,e)||r.includes(t.w):(Y.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),Lie=o((t,e,r,n)=>{Y.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),Y.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)Lie(a,e,r,n);else{let s=e.node(a);Y.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(Y.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(Y.debug("Setting parent",a,t),r.setParent(a,t)):(Y.info("In copy ",t,"root",n,"data",e.node(t),n),Y.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);Y.debug("Copying Edges",l),l.forEach(u=>{Y.info("Edge",u);let h=e.edge(u.v,u.w,u.name);Y.info("Edge data",h,n);try{lOe(u,n)?(Y.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),Y.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):Y.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){Y.error(f)}})}Y.debug("Removing node",a),e.removeNode(a)})},"copy"),Rie=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)_ie.set(i,t),n=[...n,...Rie(i,e)];return n},"extractDescendants"),cOe=o((t,e,r)=>{let n=t.edges().filter(u=>u.v===e||u.w===e),i=t.edges().filter(u=>u.v===r||u.w===r),a=n.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=i.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Fm=o((t,e,r)=>{let n=e.children(t);if(Y.trace("Searching children of id ",t,n),n.length<1)return t;let i;for(let a of n){let s=Fm(a,e,r),l=cOe(e,r,s);if(s)if(l.length>0)i=s;else return s}return i},"findNonClusterChild"),Aie=o(t=>!wr.has(t)||!wr.get(t).externalConnections?t:wr.has(t)?wr.get(t).id:t,"getAnchorId"),Nie=o((t,e)=>{if(!t||e>10){Y.debug("Opting out, no graph ");return}else Y.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(Y.warn("Cluster identified",r," Replacement id in edges: ",Fm(r,t,r)),qd.set(r,Rie(r,t)),wr.set(r,{id:Fm(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(Y.debug("Cluster identified",r,qd),i.forEach(a=>{let s=nk(a.v,r),l=nk(a.w,r);s^l&&(Y.warn("Edge: ",a," leaves cluster ",r),Y.warn("Descendants of XXX ",r,": ",qd.get(r)),wr.get(r).externalConnections=!0)})):Y.debug("Not a cluster ",r,qd)});for(let r of wr.keys()){let n=wr.get(r).id,i=t.parent(n);i!==r&&wr.has(i)&&!wr.get(i).externalConnections&&(wr.get(r).id=i)}t.edges().forEach(function(r){let n=t.edge(r);Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(Y.warn("Fix XXX",wr,"ids:",r.v,r.w,"Translating: ",wr.get(r.v)," --- ",wr.get(r.w)),wr.get(r.v)||wr.get(r.w)){if(Y.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),i=Aie(r.v),a=Aie(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);wr.get(s).externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);wr.get(s).externalConnections=!0,n.toCluster=r.w}Y.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),Y.warn("Adjusted Graph",Uo(t)),Mie(t,0),Y.trace(wr)},"adjustClustersAndEdges"),Mie=o((t,e)=>{if(Y.warn("extractor - ",e,Uo(t),t.children("D")),e>10){Y.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){Y.debug("Done, no node has children",t.nodes());return}Y.debug("Nodes = ",r,e);for(let i of r)if(Y.debug("Extracting node",i,wr,wr.has(i)&&!wr.get(i).externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!wr.has(i))Y.debug("Not a cluster",i,e);else if(!wr.get(i).externalConnections&&t.children(i)&&t.children(i).length>0){Y.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";wr.get(i)?.clusterData?.dir&&(s=wr.get(i).clusterData.dir,Y.warn("Fixing dir",wr.get(i).clusterData.dir,s));let l=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Y.warn("Old graph before copy",Uo(t)),Lie(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:wr.get(i).clusterData,label:wr.get(i).label,graph:l}),Y.warn("New graph after copy node: (",i,")",Uo(l)),Y.debug("Old graph after copy",Uo(t))}else Y.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!wr.get(i).externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),Y.debug(wr);r=t.nodes(),Y.warn("New list of nodes",r);for(let i of r){let a=t.node(i);Y.warn(" Now next level",i,a),a?.clusterNode&&Mie(a.graph,e+1)}},"extractor"),Iie=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(n=>{let i=t.children(n),a=Iie(t,i);r=[...r,...a]}),r},"sorter"),Oie=o(t=>Iie(t,t.children()),"sortNodesByHierarchy")});var Fie={};hr(Fie,{render:()=>uOe});var Bie,uOe,$ie=N(()=>{"use strict";gR();yR();Vo();tL();Ft();Pie();eT();Hw();eL();vt();w2();zt();Bie=o(async(t,e,r,n,i,a)=>{Y.warn("Graph in recursive render:XAX",Uo(e),i);let s=e.graph().rankdir;Y.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?Y.info("Recursive render XXX",e.nodes()):Y.info("No nodes found for",e),e.edges().length>0&&Y.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));Y.trace(`Setting data for parent cluster XXX | |
| 477 | + Node.id = `,y,` | |
| 478 | + data=`,x.height,` | |
| 479 | +Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(Y.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(Y.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){Y.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let w=await Bie(d,v.graph,r,n,e.node(y),a),C=w.elem;je(v,C),v.diff=w.diff||0,Y.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),rJ(C,v)}else e.children(y).length>0?(Y.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),Y.trace(Fm(v.id,e)),wr.set(v.id,{id:Fm(v.id,e),node:v})):(Y.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await vm(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);Y.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),Y.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),Y.info("Fix",wr,"ids:",v.v,v.w,"Translating: ",wr.get(v.v),wr.get(v.w)),await jw(f,x)});await Promise.all(y)},"processEdges")(),Y.info("Graph before layout:",JSON.stringify(Uo(e))),Y.info("############################################# XXX"),Y.info("### Layout ### XXX"),Y.info("############################################# XXX"),R2(e),Y.info("Graph after layout:",JSON.stringify(Uo(e)));let m=0,{subGraphTitleTotalMargin:g}=Ru(a);return await Promise.all(Oie(e).map(async function(y){let v=e.node(y);if(Y.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,Y.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),wr.get(v.id).node=v,k2(v);else if(e.children(y).length>0){Y.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,w=b-x||0;Y.debug("OffsetY",w,"labelHeight",b,"halfPadding",x),await ym(u,v),wr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,Y.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),k2(v)}})),e.edges().forEach(function(y){let v=e.edge(y);Y.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(C=>C.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let w=Qw(h,v,wr,r,x,b,n);Kw(v,w)}),e.nodes().forEach(function(y){let v=e.node(y);Y.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),Y.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),uOe=o(async(t,e)=>{let r=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=e.select("g");Zw(n,t.markers,t.type,t.diagramId),nJ(),tJ(),jZ(),Die(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),Y.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeStart="none",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",p.arrowTypeStart="none",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyc<lic-special-2")}else r.setEdge(a.start,a.end,{...a},a.id)}),Y.warn("Graph at first:",JSON.stringify(Uo(r))),Nie(r),Y.warn("Graph after XAX:",JSON.stringify(Uo(r)));let i=me();await Bie(n,r,t.type,t.diagramId,void 0,i)},"render")});var N2,vR,hOe,Cc,nf,Yd=N(()=>{"use strict";aJ();vt();N2={},vR=o(t=>{for(let e of t)N2[e.name]=e},"registerLayoutLoaders"),hOe=o(()=>{vR([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>($ie(),Fie)),"loader")}])},"registerDefaultLayoutLoaders");hOe();Cc=o(async(t,e)=>{if(!(t.layoutAlgorithm in N2))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);let r=N2[t.layoutAlgorithm];return(await r.loader()).render(t,e,iJ,{algorithm:r.algorithm})},"render"),nf=o((t="",{fallback:e="dagre"}={})=>{if(t in N2)return t;if(e in N2)return Y.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var Ac,fOe,dOe,$m=N(()=>{"use strict";Ei();vt();Ac=o((t,e,r,n)=>{t.attr("class",r);let{width:i,height:a,x:s,y:l}=fOe(t,e);vn(t,a,i,n);let u=dOe(s,l,i,a,e);t.attr("viewBox",u),Y.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),fOe=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),dOe=o((t,e,r,n,i)=>`${t-i} ${e-i} ${r} ${n}`,"createViewBox")});var pOe,mOe,zie,Gie=N(()=>{"use strict";dr();zt();vt();gm();Yd();$m();ir();pOe=o(function(t,e){return e.db.getClasses()},"getClasses"),mOe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,flowchart:a,layout:s}=me(),l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?l.nodes()[0].contentDocument:document;Y.debug("Before getData: ");let h=n.db.getData();Y.debug("Data: ",h);let f=yc(e,i),d=n.db.getDirection();h.type=n.type,h.layoutAlgorithm=nf(s),h.layoutAlgorithm==="dagre"&&s==="elk"&&Y.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),h.direction=d,h.nodeSpacing=a?.nodeSpacing||50,h.rankSpacing=a?.rankSpacing||50,h.markers=["point","circle","cross"],h.diagramId=e,Y.debug("REF1:",h),await Cc(h,f);let p=h.config.flowchart?.diagramPadding??8;Gt.insertTitle(f,"flowchartTitleText",a?.titleTopMargin||0,n.db.getDiagramTitle()),Ac(f,p,"flowchart",a?.useMaxWidth||!1);for(let m of h.nodes){let g=Ge(`#${e} [id="${m.id}"]`);if(!g||!m.link)continue;let y=u.createElementNS("http://www.w3.org/2000/svg","a");y.setAttributeNS("http://www.w3.org/2000/svg","class",m.cssClasses),y.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?y.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):m.linkTarget&&y.setAttributeNS("http://www.w3.org/2000/svg","target",m.linkTarget);let v=g.insert(function(){return y},":first-child"),x=g.select(".label-container");x&&v.append(function(){return x.node()});let b=g.select(".label");b&&v.append(function(){return b.node()})}},"draw"),zie={getClasses:pOe,draw:mOe}});var xR,bR,Vie=N(()=>{"use strict";xR=function(){var t=o(function(Hr,et,mt,Kt){for(mt=mt||{},Kt=Hr.length;Kt--;mt[Hr[Kt]]=et);return mt},"o"),e=[1,4],r=[1,3],n=[1,5],i=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,49],y=[1,48],v=[1,29],x=[1,30],b=[1,31],w=[1,32],C=[1,33],T=[1,44],E=[1,46],A=[1,42],S=[1,47],_=[1,43],I=[1,50],D=[1,45],k=[1,51],L=[1,52],R=[1,34],O=[1,35],M=[1,36],B=[1,37],F=[1,57],P=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],z=[1,61],$=[1,60],H=[1,62],Q=[8,9,11,75,77,78],j=[1,78],ie=[1,91],ne=[1,96],le=[1,95],he=[1,92],K=[1,88],X=[1,94],te=[1,90],J=[1,97],se=[1,93],ue=[1,98],Z=[1,89],Se=[8,9,10,11,40,75,77,78],ce=[8,9,10,11,40,46,75,77,78],ae=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],Oe=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],ge=[44,60,89,102,105,106,109,111,114,115,116],ze=[1,121],He=[1,122],$e=[1,124],Re=[1,123],Ie=[44,60,62,74,89,102,105,106,109,111,114,115,116],be=[1,133],W=[1,147],de=[1,148],re=[1,149],oe=[1,150],V=[1,135],xe=[1,137],q=[1,141],pe=[1,142],ve=[1,143],Pe=[1,144],_e=[1,145],we=[1,146],Ve=[1,151],De=[1,152],qe=[1,131],at=[1,132],Rt=[1,139],st=[1,134],Ue=[1,138],ct=[1,136],We=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],ot=[1,154],Yt=[1,156],bt=[8,9,11],Mt=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],xt=[1,176],ut=[1,172],Et=[1,173],ft=[1,177],yt=[1,174],nt=[1,175],dn=[77,116,119],Tt=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],On=[10,106],tn=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],_r=[1,247],Dr=[1,245],Pn=[1,249],At=[1,243],Ce=[1,244],tt=[1,246],St=[1,248],mr=[1,250],rn=[1,268],gn=[8,9,11,106],Zr=[8,9,10,11,60,84,105,106,109,110,111,112],Ni={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(et,mt,Kt,lt,Cn,ye,Vf){var Te=ye.length-1;switch(Cn){case 2:this.$=[];break;case 3:(!Array.isArray(ye[Te])||ye[Te].length>0)&&ye[Te-1].push(ye[Te]),this.$=ye[Te-1];break;case 4:case 183:this.$=ye[Te];break;case 11:lt.setDirection("TB"),this.$="TB";break;case 12:lt.setDirection(ye[Te-1]),this.$=ye[Te-1];break;case 27:this.$=ye[Te-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=lt.addSubGraph(ye[Te-6],ye[Te-1],ye[Te-4]);break;case 34:this.$=lt.addSubGraph(ye[Te-3],ye[Te-1],ye[Te-3]);break;case 35:this.$=lt.addSubGraph(void 0,ye[Te-1],void 0);break;case 37:this.$=ye[Te].trim(),lt.setAccTitle(this.$);break;case 38:case 39:this.$=ye[Te].trim(),lt.setAccDescription(this.$);break;case 43:this.$=ye[Te-1]+ye[Te];break;case 44:this.$=ye[Te];break;case 45:lt.addVertex(ye[Te-1][ye[Te-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te]),lt.addLink(ye[Te-3].stmt,ye[Te-1],ye[Te-2]),this.$={stmt:ye[Te-1],nodes:ye[Te-1].concat(ye[Te-3].nodes)};break;case 46:lt.addLink(ye[Te-2].stmt,ye[Te],ye[Te-1]),this.$={stmt:ye[Te],nodes:ye[Te].concat(ye[Te-2].nodes)};break;case 47:lt.addLink(ye[Te-3].stmt,ye[Te-1],ye[Te-2]),this.$={stmt:ye[Te-1],nodes:ye[Te-1].concat(ye[Te-3].nodes)};break;case 48:this.$={stmt:ye[Te-1],nodes:ye[Te-1]};break;case 49:lt.addVertex(ye[Te-1][ye[Te-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te]),this.$={stmt:ye[Te-1],nodes:ye[Te-1],shapeData:ye[Te]};break;case 50:this.$={stmt:ye[Te],nodes:ye[Te]};break;case 51:this.$=[ye[Te]];break;case 52:lt.addVertex(ye[Te-5][ye[Te-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te-4]),this.$=ye[Te-5].concat(ye[Te]);break;case 53:this.$=ye[Te-4].concat(ye[Te]);break;case 54:this.$=ye[Te];break;case 55:this.$=ye[Te-2],lt.setClass(ye[Te-2],ye[Te]);break;case 56:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"square");break;case 57:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"doublecircle");break;case 58:this.$=ye[Te-5],lt.addVertex(ye[Te-5],ye[Te-2],"circle");break;case 59:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"ellipse");break;case 60:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"stadium");break;case 61:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"subroutine");break;case 62:this.$=ye[Te-7],lt.addVertex(ye[Te-7],ye[Te-1],"rect",void 0,void 0,void 0,Object.fromEntries([[ye[Te-5],ye[Te-3]]]));break;case 63:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"cylinder");break;case 64:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"round");break;case 65:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"diamond");break;case 66:this.$=ye[Te-5],lt.addVertex(ye[Te-5],ye[Te-2],"hexagon");break;case 67:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"odd");break;case 68:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"trapezoid");break;case 69:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"inv_trapezoid");break;case 70:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"lean_right");break;case 71:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"lean_left");break;case 72:this.$=ye[Te],lt.addVertex(ye[Te]);break;case 73:ye[Te-1].text=ye[Te],this.$=ye[Te-1];break;case 74:case 75:ye[Te-2].text=ye[Te-1],this.$=ye[Te-2];break;case 76:this.$=ye[Te];break;case 77:var wi=lt.destructLink(ye[Te],ye[Te-2]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,text:ye[Te-1]};break;case 78:var wi=lt.destructLink(ye[Te],ye[Te-2]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,text:ye[Te-1],id:ye[Te-3]};break;case 79:this.$={text:ye[Te],type:"text"};break;case 80:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 81:this.$={text:ye[Te],type:"string"};break;case 82:this.$={text:ye[Te],type:"markdown"};break;case 83:var wi=lt.destructLink(ye[Te]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length};break;case 84:var wi=lt.destructLink(ye[Te]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,id:ye[Te-1]};break;case 85:this.$=ye[Te-1];break;case 86:this.$={text:ye[Te],type:"text"};break;case 87:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 88:this.$={text:ye[Te],type:"string"};break;case 89:case 104:this.$={text:ye[Te],type:"markdown"};break;case 101:this.$={text:ye[Te],type:"text"};break;case 102:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 103:this.$={text:ye[Te],type:"text"};break;case 105:this.$=ye[Te-4],lt.addClass(ye[Te-2],ye[Te]);break;case 106:this.$=ye[Te-4],lt.setClass(ye[Te-2],ye[Te]);break;case 107:case 115:this.$=ye[Te-1],lt.setClickEvent(ye[Te-1],ye[Te]);break;case 108:case 116:this.$=ye[Te-3],lt.setClickEvent(ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-3],ye[Te]);break;case 109:this.$=ye[Te-2],lt.setClickEvent(ye[Te-2],ye[Te-1],ye[Te]);break;case 110:this.$=ye[Te-4],lt.setClickEvent(ye[Te-4],ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-4],ye[Te]);break;case 111:this.$=ye[Te-2],lt.setLink(ye[Te-2],ye[Te]);break;case 112:this.$=ye[Te-4],lt.setLink(ye[Te-4],ye[Te-2]),lt.setTooltip(ye[Te-4],ye[Te]);break;case 113:this.$=ye[Te-4],lt.setLink(ye[Te-4],ye[Te-2],ye[Te]);break;case 114:this.$=ye[Te-6],lt.setLink(ye[Te-6],ye[Te-4],ye[Te]),lt.setTooltip(ye[Te-6],ye[Te-2]);break;case 117:this.$=ye[Te-1],lt.setLink(ye[Te-1],ye[Te]);break;case 118:this.$=ye[Te-3],lt.setLink(ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-3],ye[Te]);break;case 119:this.$=ye[Te-3],lt.setLink(ye[Te-3],ye[Te-2],ye[Te]);break;case 120:this.$=ye[Te-5],lt.setLink(ye[Te-5],ye[Te-4],ye[Te]),lt.setTooltip(ye[Te-5],ye[Te-2]);break;case 121:this.$=ye[Te-4],lt.addVertex(ye[Te-2],void 0,void 0,ye[Te]);break;case 122:this.$=ye[Te-4],lt.updateLink([ye[Te-2]],ye[Te]);break;case 123:this.$=ye[Te-4],lt.updateLink(ye[Te-2],ye[Te]);break;case 124:this.$=ye[Te-8],lt.updateLinkInterpolate([ye[Te-6]],ye[Te-2]),lt.updateLink([ye[Te-6]],ye[Te]);break;case 125:this.$=ye[Te-8],lt.updateLinkInterpolate(ye[Te-6],ye[Te-2]),lt.updateLink(ye[Te-6],ye[Te]);break;case 126:this.$=ye[Te-6],lt.updateLinkInterpolate([ye[Te-4]],ye[Te]);break;case 127:this.$=ye[Te-6],lt.updateLinkInterpolate(ye[Te-4],ye[Te]);break;case 128:case 130:this.$=[ye[Te]];break;case 129:case 131:ye[Te-2].push(ye[Te]),this.$=ye[Te-2];break;case 133:this.$=ye[Te-1]+ye[Te];break;case 181:this.$=ye[Te];break;case 182:this.$=ye[Te-1]+""+ye[Te];break;case 184:this.$=ye[Te-1]+""+ye[Te];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:n},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:r,12:n},{4:8,9:e,10:r,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:F,15:53,18:56},t(P,[2,3]),t(P,[2,4]),t(P,[2,5]),t(P,[2,6]),t(P,[2,7]),t(P,[2,8]),{8:z,9:$,11:H,21:58,41:59,72:63,75:[1,64],77:[1,66],78:[1,65]},{8:z,9:$,11:H,21:67},{8:z,9:$,11:H,21:68},{8:z,9:$,11:H,21:69},{8:z,9:$,11:H,21:70},{8:z,9:$,11:H,21:71},{8:z,9:$,10:[1,72],11:H,21:73},t(P,[2,36]),{35:[1,74]},{37:[1,75]},t(P,[2,39]),t(Q,[2,50],{18:76,39:77,10:F,40:j}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{14:ie,44:ne,60:le,80:[1,86],89:he,95:[1,83],97:[1,84],101:85,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},t(P,[2,185]),t(P,[2,186]),t(P,[2,187]),t(P,[2,188]),t(Se,[2,51]),t(Se,[2,54],{46:[1,99]}),t(ce,[2,72],{113:112,29:[1,100],44:g,48:[1,101],50:[1,102],52:[1,103],54:[1,104],56:[1,105],58:[1,106],60:y,63:[1,107],65:[1,108],67:[1,109],68:[1,110],70:[1,111],89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),t(ae,[2,181]),t(ae,[2,142]),t(ae,[2,143]),t(ae,[2,144]),t(ae,[2,145]),t(ae,[2,146]),t(ae,[2,147]),t(ae,[2,148]),t(ae,[2,149]),t(ae,[2,150]),t(ae,[2,151]),t(ae,[2,152]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,113]},t(Oe,[2,26],{18:114,10:F}),t(P,[2,27]),{42:115,43:38,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(P,[2,40]),t(P,[2,41]),t(P,[2,42]),t(ge,[2,76],{73:116,62:[1,118],74:[1,117]}),{76:119,79:120,80:ze,81:He,116:$e,119:Re},{75:[1,125],77:[1,126]},t(Ie,[2,83]),t(P,[2,28]),t(P,[2,29]),t(P,[2,30]),t(P,[2,31]),t(P,[2,32]),{10:be,12:W,14:de,27:re,28:127,32:oe,44:V,60:xe,75:q,80:[1,129],81:[1,130],83:140,84:pe,85:ve,86:Pe,87:_e,88:we,89:Ve,90:De,91:128,105:qe,109:at,111:Rt,114:st,115:Ue,116:ct},t(We,a,{5:153}),t(P,[2,37]),t(P,[2,38]),t(Q,[2,48],{44:ot}),t(Q,[2,49],{18:155,10:F,40:Yt}),t(Se,[2,44]),{44:g,47:157,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{102:[1,158],103:159,105:[1,160]},{44:g,47:161,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{44:g,47:162,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,107],{10:[1,163],96:[1,164]}),{80:[1,165]},t(bt,[2,115],{120:167,10:[1,166],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,117],{10:[1,168]}),t(Mt,[2,183]),t(Mt,[2,170]),t(Mt,[2,171]),t(Mt,[2,172]),t(Mt,[2,173]),t(Mt,[2,174]),t(Mt,[2,175]),t(Mt,[2,176]),t(Mt,[2,177]),t(Mt,[2,178]),t(Mt,[2,179]),t(Mt,[2,180]),{44:g,47:169,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{30:170,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:178,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:180,50:[1,179],67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:181,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:182,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:183,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{109:[1,184]},{30:185,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:186,65:[1,187],67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:188,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:189,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:190,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(ae,[2,182]),t(i,[2,20]),t(Oe,[2,25]),t(Q,[2,46],{39:191,18:192,10:F,40:j}),t(ge,[2,73],{10:[1,193]}),{10:[1,194]},{30:195,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{77:[1,196],79:197,116:$e,119:Re},t(dn,[2,79]),t(dn,[2,81]),t(dn,[2,82]),t(dn,[2,168]),t(dn,[2,169]),{76:198,79:120,80:ze,81:He,116:$e,119:Re},t(Ie,[2,84]),{8:z,9:$,10:be,11:H,12:W,14:de,21:200,27:re,29:[1,199],32:oe,44:V,60:xe,75:q,83:140,84:pe,85:ve,86:Pe,87:_e,88:we,89:Ve,90:De,91:201,105:qe,109:at,111:Rt,114:st,115:Ue,116:ct},t(Tt,[2,101]),t(Tt,[2,103]),t(Tt,[2,104]),t(Tt,[2,157]),t(Tt,[2,158]),t(Tt,[2,159]),t(Tt,[2,160]),t(Tt,[2,161]),t(Tt,[2,162]),t(Tt,[2,163]),t(Tt,[2,164]),t(Tt,[2,165]),t(Tt,[2,166]),t(Tt,[2,167]),t(Tt,[2,90]),t(Tt,[2,91]),t(Tt,[2,92]),t(Tt,[2,93]),t(Tt,[2,94]),t(Tt,[2,95]),t(Tt,[2,96]),t(Tt,[2,97]),t(Tt,[2,98]),t(Tt,[2,99]),t(Tt,[2,100]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,202],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},{10:F,18:203},{44:[1,204]},t(Se,[2,43]),{10:[1,205],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{10:[1,206]},{10:[1,207],106:[1,208]},t(On,[2,128]),{10:[1,209],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{10:[1,210],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{80:[1,211]},t(bt,[2,109],{10:[1,212]}),t(bt,[2,111],{10:[1,213]}),{80:[1,214]},t(Mt,[2,184]),{80:[1,215],98:[1,216]},t(Se,[2,55],{113:112,44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),{31:[1,217],67:xt,82:218,116:ft,117:yt,118:nt},t(tn,[2,86]),t(tn,[2,88]),t(tn,[2,89]),t(tn,[2,153]),t(tn,[2,154]),t(tn,[2,155]),t(tn,[2,156]),{49:[1,219],67:xt,82:218,116:ft,117:yt,118:nt},{30:220,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{51:[1,221],67:xt,82:218,116:ft,117:yt,118:nt},{53:[1,222],67:xt,82:218,116:ft,117:yt,118:nt},{55:[1,223],67:xt,82:218,116:ft,117:yt,118:nt},{57:[1,224],67:xt,82:218,116:ft,117:yt,118:nt},{60:[1,225]},{64:[1,226],67:xt,82:218,116:ft,117:yt,118:nt},{66:[1,227],67:xt,82:218,116:ft,117:yt,118:nt},{30:228,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{31:[1,229],67:xt,82:218,116:ft,117:yt,118:nt},{67:xt,69:[1,230],71:[1,231],82:218,116:ft,117:yt,118:nt},{67:xt,69:[1,233],71:[1,232],82:218,116:ft,117:yt,118:nt},t(Q,[2,45],{18:155,10:F,40:Yt}),t(Q,[2,47],{44:ot}),t(ge,[2,75]),t(ge,[2,74]),{62:[1,234],67:xt,82:218,116:ft,117:yt,118:nt},t(ge,[2,77]),t(dn,[2,80]),{77:[1,235],79:197,116:$e,119:Re},{30:236,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(We,a,{5:237}),t(Tt,[2,102]),t(P,[2,35]),{43:238,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{10:F,18:239},{10:_r,60:Dr,84:Pn,92:240,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:251,104:[1,252],105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:253,104:[1,254],105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{105:[1,255]},{10:_r,60:Dr,84:Pn,92:256,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{44:g,47:257,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,108]),{80:[1,258]},{80:[1,259],98:[1,260]},t(bt,[2,116]),t(bt,[2,118],{10:[1,261]}),t(bt,[2,119]),t(ce,[2,56]),t(tn,[2,87]),t(ce,[2,57]),{51:[1,262],67:xt,82:218,116:ft,117:yt,118:nt},t(ce,[2,64]),t(ce,[2,59]),t(ce,[2,60]),t(ce,[2,61]),{109:[1,263]},t(ce,[2,63]),t(ce,[2,65]),{66:[1,264],67:xt,82:218,116:ft,117:yt,118:nt},t(ce,[2,67]),t(ce,[2,68]),t(ce,[2,70]),t(ce,[2,69]),t(ce,[2,71]),t([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),t(ge,[2,78]),{31:[1,265],67:xt,82:218,116:ft,117:yt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,266],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},t(Se,[2,53]),{43:267,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,121],{106:rn}),t(gn,[2,130],{108:269,10:_r,60:Dr,84:Pn,105:At,109:Ce,110:tt,111:St,112:mr}),t(Zr,[2,132]),t(Zr,[2,134]),t(Zr,[2,135]),t(Zr,[2,136]),t(Zr,[2,137]),t(Zr,[2,138]),t(Zr,[2,139]),t(Zr,[2,140]),t(Zr,[2,141]),t(bt,[2,122],{106:rn}),{10:[1,270]},t(bt,[2,123],{106:rn}),{10:[1,271]},t(On,[2,129]),t(bt,[2,105],{106:rn}),t(bt,[2,106],{113:112,44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),t(bt,[2,110]),t(bt,[2,112],{10:[1,272]}),t(bt,[2,113]),{98:[1,273]},{51:[1,274]},{62:[1,275]},{66:[1,276]},{8:z,9:$,11:H,21:277},t(P,[2,34]),t(Se,[2,52]),{10:_r,60:Dr,84:Pn,105:At,107:278,108:242,109:Ce,110:tt,111:St,112:mr},t(Zr,[2,133]),{14:ie,44:ne,60:le,89:he,101:279,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},{14:ie,44:ne,60:le,89:he,101:280,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},{98:[1,281]},t(bt,[2,120]),t(ce,[2,58]),{30:282,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(ce,[2,66]),t(We,a,{5:283}),t(gn,[2,131],{108:269,10:_r,60:Dr,84:Pn,105:At,109:Ce,110:tt,111:St,112:mr}),t(bt,[2,126],{120:167,10:[1,284],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,127],{120:167,10:[1,285],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,114]),{31:[1,286],67:xt,82:218,116:ft,117:yt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,287],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},{10:_r,60:Dr,84:Pn,92:288,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:289,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},t(ce,[2,62]),t(P,[2,33]),t(bt,[2,124],{106:rn}),t(bt,[2,125],{106:rn})],defaultActions:{},parseError:o(function(et,mt){if(mt.recoverable)this.trace(et);else{var Kt=new Error(et);throw Kt.hash=mt,Kt}},"parseError"),parse:o(function(et){var mt=this,Kt=[0],lt=[],Cn=[null],ye=[],Vf=this.table,Te="",wi=0,TF=0,kF=0,M2e=2,EF=1,I2e=ye.slice.call(arguments,1),Xi=Object.create(this.lexer),Uf={yy:{}};for(var xC in this.yy)Object.prototype.hasOwnProperty.call(this.yy,xC)&&(Uf.yy[xC]=this.yy[xC]);Xi.setInput(et,Uf.yy),Uf.yy.lexer=Xi,Uf.yy.parser=this,typeof Xi.yylloc>"u"&&(Xi.yylloc={});var bC=Xi.yylloc;ye.push(bC);var O2e=Xi.options&&Xi.options.ranges;typeof Uf.yy.parseError=="function"?this.parseError=Uf.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function wnt(Ws){Kt.length=Kt.length-2*Ws,Cn.length=Cn.length-Ws,ye.length=ye.length-Ws}o(wnt,"popStack");function P2e(){var Ws;return Ws=lt.pop()||Xi.lex()||EF,typeof Ws!="number"&&(Ws instanceof Array&&(lt=Ws,Ws=lt.pop()),Ws=mt.symbols_[Ws]||Ws),Ws}o(P2e,"lex");for(var Wa,wC,Hf,xo,Tnt,TC,Jp={},_4,Jc,SF,D4;;){if(Hf=Kt[Kt.length-1],this.defaultActions[Hf]?xo=this.defaultActions[Hf]:((Wa===null||typeof Wa>"u")&&(Wa=P2e()),xo=Vf[Hf]&&Vf[Hf][Wa]),typeof xo>"u"||!xo.length||!xo[0]){var kC="";D4=[];for(_4 in Vf[Hf])this.terminals_[_4]&&_4>M2e&&D4.push("'"+this.terminals_[_4]+"'");Xi.showPosition?kC="Parse error on line "+(wi+1)+`: | |
| 480 | +`+Xi.showPosition()+` | |
| 481 | +Expecting `+D4.join(", ")+", got '"+(this.terminals_[Wa]||Wa)+"'":kC="Parse error on line "+(wi+1)+": Unexpected "+(Wa==EF?"end of input":"'"+(this.terminals_[Wa]||Wa)+"'"),this.parseError(kC,{text:Xi.match,token:this.terminals_[Wa]||Wa,line:Xi.yylineno,loc:bC,expected:D4})}if(xo[0]instanceof Array&&xo.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Hf+", token: "+Wa);switch(xo[0]){case 1:Kt.push(Wa),Cn.push(Xi.yytext),ye.push(Xi.yylloc),Kt.push(xo[1]),Wa=null,wC?(Wa=wC,wC=null):(TF=Xi.yyleng,Te=Xi.yytext,wi=Xi.yylineno,bC=Xi.yylloc,kF>0&&kF--);break;case 2:if(Jc=this.productions_[xo[1]][1],Jp.$=Cn[Cn.length-Jc],Jp._$={first_line:ye[ye.length-(Jc||1)].first_line,last_line:ye[ye.length-1].last_line,first_column:ye[ye.length-(Jc||1)].first_column,last_column:ye[ye.length-1].last_column},O2e&&(Jp._$.range=[ye[ye.length-(Jc||1)].range[0],ye[ye.length-1].range[1]]),TC=this.performAction.apply(Jp,[Te,TF,wi,Uf.yy,xo[1],Cn,ye].concat(I2e)),typeof TC<"u")return TC;Jc&&(Kt=Kt.slice(0,-1*Jc*2),Cn=Cn.slice(0,-1*Jc),ye=ye.slice(0,-1*Jc)),Kt.push(this.productions_[xo[1]][0]),Cn.push(Jp.$),ye.push(Jp._$),SF=Vf[Kt[Kt.length-2]][Kt[Kt.length-1]],Kt.push(SF);break;case 3:return!0}}return!0},"parse")},Zn=function(){var Hr={EOF:1,parseError:o(function(mt,Kt){if(this.yy.parser)this.yy.parser.parseError(mt,Kt);else throw new Error(mt)},"parseError"),setInput:o(function(et,mt){return this.yy=mt||this.yy||{},this._input=et,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var et=this._input[0];this.yytext+=et,this.yyleng++,this.offset++,this.match+=et,this.matched+=et;var mt=et.match(/(?:\r\n?|\n).*/g);return mt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),et},"input"),unput:o(function(et){var mt=et.length,Kt=et.split(/(?:\r\n?|\n)/g);this._input=et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-mt),this.offset-=mt;var lt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Kt.length-1&&(this.yylineno-=Kt.length-1);var Cn=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Kt?(Kt.length===lt.length?this.yylloc.first_column:0)+lt[lt.length-Kt.length].length-Kt[0].length:this.yylloc.first_column-mt},this.options.ranges&&(this.yylloc.range=[Cn[0],Cn[0]+this.yyleng-mt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 482 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(et){this.unput(this.match.slice(et))},"less"),pastInput:o(function(){var et=this.matched.substr(0,this.matched.length-this.match.length);return(et.length>20?"...":"")+et.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var et=this.match;return et.length<20&&(et+=this._input.substr(0,20-et.length)),(et.substr(0,20)+(et.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var et=this.pastInput(),mt=new Array(et.length+1).join("-");return et+this.upcomingInput()+` | |
| 483 | +`+mt+"^"},"showPosition"),test_match:o(function(et,mt){var Kt,lt,Cn;if(this.options.backtrack_lexer&&(Cn={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Cn.yylloc.range=this.yylloc.range.slice(0))),lt=et[0].match(/(?:\r\n?|\n).*/g),lt&&(this.yylineno+=lt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lt?lt[lt.length-1].length-lt[lt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+et[0].length},this.yytext+=et[0],this.match+=et[0],this.matches=et,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(et[0].length),this.matched+=et[0],Kt=this.performAction.call(this,this.yy,this,mt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Kt)return Kt;if(this._backtrack){for(var ye in Cn)this[ye]=Cn[ye];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var et,mt,Kt,lt;this._more||(this.yytext="",this.match="");for(var Cn=this._currentRules(),ye=0;ye<Cn.length;ye++)if(Kt=this._input.match(this.rules[Cn[ye]]),Kt&&(!mt||Kt[0].length>mt[0].length)){if(mt=Kt,lt=ye,this.options.backtrack_lexer){if(et=this.test_match(Kt,Cn[ye]),et!==!1)return et;if(this._backtrack){mt=!1;continue}else return!1}else if(!this.options.flex)break}return mt?(et=this.test_match(mt,Cn[lt]),et!==!1?et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 484 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var mt=this.next();return mt||this.lex()},"lex"),begin:o(function(mt){this.conditionStack.push(mt)},"begin"),popState:o(function(){var mt=this.conditionStack.length-1;return mt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(mt){return mt=this.conditionStack.length-1-Math.abs(mt||0),mt>=0?this.conditionStack[mt]:"INITIAL"},"topState"),pushState:o(function(mt){this.begin(mt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(mt,Kt,lt,Cn){var ye=Cn;switch(lt){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),Kt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let Vf=/\n\s*/g;return Kt.yytext=Kt.yytext.replace(Vf,"<br/>"),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 17:this.popState();break;case 18:return 96;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 88;case 35:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 98;case 41:return 98;case 42:return 98;case 43:return 98;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 78;case 60:return 105;case 61:return 111;case 62:return 46;case 63:return 60;case 64:return 44;case 65:return 8;case 66:return 106;case 67:return 115;case 68:return this.popState(),77;break;case 69:return this.pushState("edgeText"),75;break;case 70:return 119;case 71:return this.popState(),77;break;case 72:return this.pushState("thickEdgeText"),75;break;case 73:return 119;case 74:return this.popState(),77;break;case 75:return this.pushState("dottedEdgeText"),75;break;case 76:return 119;case 77:return 77;case 78:return this.popState(),53;break;case 79:return"TEXT";case 80:return this.pushState("ellipseText"),52;break;case 81:return this.popState(),55;break;case 82:return this.pushState("text"),54;break;case 83:return this.popState(),57;break;case 84:return this.pushState("text"),56;break;case 85:return 58;case 86:return this.pushState("text"),67;break;case 87:return this.popState(),64;break;case 88:return this.pushState("text"),63;break;case 89:return this.popState(),49;break;case 90:return this.pushState("text"),48;break;case 91:return this.popState(),69;break;case 92:return this.popState(),71;break;case 93:return 117;case 94:return this.pushState("trapText"),68;break;case 95:return this.pushState("trapText"),70;break;case 96:return 118;case 97:return 67;case 98:return 90;case 99:return"SEP";case 100:return 89;case 101:return 115;case 102:return 111;case 103:return 44;case 104:return 109;case 105:return 114;case 106:return 116;case 107:return this.popState(),62;break;case 108:return this.pushState("text"),62;break;case 109:return this.popState(),51;break;case 110:return this.pushState("text"),50;break;case 111:return this.popState(),31;break;case 112:return this.pushState("text"),29;break;case 113:return this.popState(),66;break;case 114:return this.pushState("text"),65;break;case 115:return"TEXT";case 116:return"QUOTE";case 117:return 9;case 118:return 10;case 119:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeData:{rules:[8,11,12,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackargs:{rules:[17,18,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackname:{rules:[14,15,16,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},href:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},click:{rules:[21,24,33,34,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dottedEdgeText:{rules:[21,24,74,76,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},thickEdgeText:{rules:[21,24,71,73,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},edgeText:{rules:[21,24,68,70,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},trapText:{rules:[21,24,77,80,82,84,88,90,91,92,93,94,95,108,110,112,114],inclusive:!1},ellipseText:{rules:[21,24,77,78,79,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},text:{rules:[21,24,77,80,81,82,83,84,87,88,89,90,94,95,107,108,109,110,111,112,113,114,115],inclusive:!1},vertex:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr:{rules:[3,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_title:{rules:[1,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},md_string:{rules:[19,20,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},string:{rules:[21,22,23,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,74,75,77,80,82,84,85,86,88,90,94,95,96,97,98,99,100,101,102,103,104,105,106,108,110,112,114,116,117,118,119],inclusive:!0}}};return Hr}();Ni.lexer=Zn;function Sn(){this.yy={}}return o(Sn,"Parser"),Sn.prototype=Ni,Ni.Parser=Sn,new Sn}();xR.parser=xR;bR=xR});var Uie,Hie,Wie=N(()=>{"use strict";Vie();Uie=Object.assign({},bR);Uie.parse=t=>{let e=t.replace(/}\s*\n/g,`} | |
| 485 | +`);return bR.parse(e)};Hie=Uie});var gOe,yOe,qie,Yie=N(()=>{"use strict";Ys();gOe=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),yOe=o(t=>`.label { | |
| 486 | + font-family: ${t.fontFamily}; | |
| 487 | + color: ${t.nodeTextColor||t.textColor}; | |
| 488 | + } | |
| 489 | + .cluster-label text { | |
| 490 | + fill: ${t.titleColor}; | |
| 491 | + } | |
| 492 | + .cluster-label span { | |
| 493 | + color: ${t.titleColor}; | |
| 494 | + } | |
| 495 | + .cluster-label span p { | |
| 496 | + background-color: transparent; | |
| 497 | + } | |
| 498 | + | |
| 499 | + .label text,span { | |
| 500 | + fill: ${t.nodeTextColor||t.textColor}; | |
| 501 | + color: ${t.nodeTextColor||t.textColor}; | |
| 502 | + } | |
| 503 | + | |
| 504 | + .node rect, | |
| 505 | + .node circle, | |
| 506 | + .node ellipse, | |
| 507 | + .node polygon, | |
| 508 | + .node path { | |
| 509 | + fill: ${t.mainBkg}; | |
| 510 | + stroke: ${t.nodeBorder}; | |
| 511 | + stroke-width: 1px; | |
| 512 | + } | |
| 513 | + .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { | |
| 514 | + text-anchor: middle; | |
| 515 | + } | |
| 516 | + // .flowchart-label .text-outer-tspan { | |
| 517 | + // text-anchor: middle; | |
| 518 | + // } | |
| 519 | + // .flowchart-label .text-inner-tspan { | |
| 520 | + // text-anchor: start; | |
| 521 | + // } | |
| 522 | + | |
| 523 | + .node .katex path { | |
| 524 | + fill: #000; | |
| 525 | + stroke: #000; | |
| 526 | + stroke-width: 1px; | |
| 527 | + } | |
| 528 | + | |
| 529 | + .rough-node .label,.node .label, .image-shape .label, .icon-shape .label { | |
| 530 | + text-align: center; | |
| 531 | + } | |
| 532 | + .node.clickable { | |
| 533 | + cursor: pointer; | |
| 534 | + } | |
| 535 | + | |
| 536 | + | |
| 537 | + .root .anchor path { | |
| 538 | + fill: ${t.lineColor} !important; | |
| 539 | + stroke-width: 0; | |
| 540 | + stroke: ${t.lineColor}; | |
| 541 | + } | |
| 542 | + | |
| 543 | + .arrowheadPath { | |
| 544 | + fill: ${t.arrowheadColor}; | |
| 545 | + } | |
| 546 | + | |
| 547 | + .edgePath .path { | |
| 548 | + stroke: ${t.lineColor}; | |
| 549 | + stroke-width: 2.0px; | |
| 550 | + } | |
| 551 | + | |
| 552 | + .flowchart-link { | |
| 553 | + stroke: ${t.lineColor}; | |
| 554 | + fill: none; | |
| 555 | + } | |
| 556 | + | |
| 557 | + .edgeLabel { | |
| 558 | + background-color: ${t.edgeLabelBackground}; | |
| 559 | + p { | |
| 560 | + background-color: ${t.edgeLabelBackground}; | |
| 561 | + } | |
| 562 | + rect { | |
| 563 | + opacity: 0.5; | |
| 564 | + background-color: ${t.edgeLabelBackground}; | |
| 565 | + fill: ${t.edgeLabelBackground}; | |
| 566 | + } | |
| 567 | + text-align: center; | |
| 568 | + } | |
| 569 | + | |
| 570 | + /* For html labels only */ | |
| 571 | + .labelBkg { | |
| 572 | + background-color: ${gOe(t.edgeLabelBackground,.5)}; | |
| 573 | + // background-color: | |
| 574 | + } | |
| 575 | + | |
| 576 | + .cluster rect { | |
| 577 | + fill: ${t.clusterBkg}; | |
| 578 | + stroke: ${t.clusterBorder}; | |
| 579 | + stroke-width: 1px; | |
| 580 | + } | |
| 581 | + | |
| 582 | + .cluster text { | |
| 583 | + fill: ${t.titleColor}; | |
| 584 | + } | |
| 585 | + | |
| 586 | + .cluster span { | |
| 587 | + color: ${t.titleColor}; | |
| 588 | + } | |
| 589 | + /* .cluster div { | |
| 590 | + color: ${t.titleColor}; | |
| 591 | + } */ | |
| 592 | + | |
| 593 | + div.mermaidTooltip { | |
| 594 | + position: absolute; | |
| 595 | + text-align: center; | |
| 596 | + max-width: 200px; | |
| 597 | + padding: 2px; | |
| 598 | + font-family: ${t.fontFamily}; | |
| 599 | + font-size: 12px; | |
| 600 | + background: ${t.tertiaryColor}; | |
| 601 | + border: 1px solid ${t.border2}; | |
| 602 | + border-radius: 2px; | |
| 603 | + pointer-events: none; | |
| 604 | + z-index: 100; | |
| 605 | + } | |
| 606 | + | |
| 607 | + .flowchartTitleText { | |
| 608 | + text-anchor: middle; | |
| 609 | + font-size: 18px; | |
| 610 | + fill: ${t.textColor}; | |
| 611 | + } | |
| 612 | + | |
| 613 | + rect.text { | |
| 614 | + fill: none; | |
| 615 | + stroke-width: 0; | |
| 616 | + } | |
| 617 | + | |
| 618 | + .icon-shape, .image-shape { | |
| 619 | + background-color: ${t.edgeLabelBackground}; | |
| 620 | + p { | |
| 621 | + background-color: ${t.edgeLabelBackground}; | |
| 622 | + padding: 2px; | |
| 623 | + } | |
| 624 | + rect { | |
| 625 | + opacity: 0.5; | |
| 626 | + background-color: ${t.edgeLabelBackground}; | |
| 627 | + fill: ${t.edgeLabelBackground}; | |
| 628 | + } | |
| 629 | + text-align: center; | |
| 630 | + } | |
| 631 | +`,"getStyles"),qie=yOe});var ik={};hr(ik,{diagram:()=>vOe});var vOe,ak=N(()=>{"use strict";zt();qZ();Gie();Wie();Yie();vOe={parser:Hie,get db(){return new Uw},renderer:zie,styles:qie,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&Yy({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Yy({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}})},"init")}});var wR,Zie,Jie=N(()=>{"use strict";wR=function(){var t=o(function(J,se,ue,Z){for(ue=ue||{},Z=J.length;Z--;ue[J[Z]]=se);return ue},"o"),e=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,50],r=[1,10],n=[1,11],i=[1,12],a=[1,13],s=[1,20],l=[1,21],u=[1,22],h=[1,23],f=[1,24],d=[1,19],p=[1,25],m=[1,26],g=[1,18],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],C=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,50,63,64,65,66,67],T=[1,42],E=[1,43],A=[1,52],S=[40,50,68,69],_=[1,63],I=[1,61],D=[1,58],k=[1,62],L=[1,64],R=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,63,64,65,66,67],O=[63,64,65,66,67],M=[1,81],B=[1,80],F=[1,78],P=[1,79],z=[6,10,42,47],$=[6,10,13,41,42,47,48,49],H=[1,89],Q=[1,88],j=[1,87],ie=[19,56],ne=[1,98],le=[1,97],he=[19,56,58,60],K={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,attribute:51,attributeType:52,attributeName:53,attributeKeyTypeList:54,attributeComment:55,ATTRIBUTE_WORD:56,attributeKeyType:57,",":58,ATTRIBUTE_KEY:59,COMMENT:60,cardinality:61,relType:62,ZERO_OR_ONE:63,ZERO_OR_MORE:64,ONE_OR_MORE:65,ONLY_ONE:66,MD_PARENT:67,NON_IDENTIFYING:68,IDENTIFYING:69,WORD:70,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",56:"ATTRIBUTE_WORD",58:",",59:"ATTRIBUTE_KEY",60:"COMMENT",63:"ZERO_OR_ONE",64:"ZERO_OR_MORE",65:"ONE_OR_MORE",66:"ONLY_ONE",67:"MD_PARENT",68:"NON_IDENTIFYING",69:"IDENTIFYING",70:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[18,1],[18,2],[51,2],[51,3],[51,3],[51,4],[52,1],[53,1],[54,1],[54,3],[57,1],[55,1],[12,3],[61,1],[61,1],[61,1],[61,1],[61,1],[62,1],[62,1],[14,1],[14,1],[14,1]],performAction:o(function(se,ue,Z,Se,ce,ae,Oe){var ge=ae.length-1;switch(ce){case 1:break;case 2:this.$=[];break;case 3:ae[ge-1].push(ae[ge]),this.$=ae[ge-1];break;case 4:case 5:this.$=ae[ge];break;case 6:case 7:this.$=[];break;case 8:Se.addEntity(ae[ge-4]),Se.addEntity(ae[ge-2]),Se.addRelationship(ae[ge-4],ae[ge],ae[ge-2],ae[ge-3]);break;case 9:Se.addEntity(ae[ge-8]),Se.addEntity(ae[ge-4]),Se.addRelationship(ae[ge-8],ae[ge],ae[ge-4],ae[ge-5]),Se.setClass([ae[ge-8]],ae[ge-6]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 10:Se.addEntity(ae[ge-6]),Se.addEntity(ae[ge-2]),Se.addRelationship(ae[ge-6],ae[ge],ae[ge-2],ae[ge-3]),Se.setClass([ae[ge-6]],ae[ge-4]);break;case 11:Se.addEntity(ae[ge-6]),Se.addEntity(ae[ge-4]),Se.addRelationship(ae[ge-6],ae[ge],ae[ge-4],ae[ge-5]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 12:Se.addEntity(ae[ge-3]),Se.addAttributes(ae[ge-3],ae[ge-1]);break;case 13:Se.addEntity(ae[ge-5]),Se.addAttributes(ae[ge-5],ae[ge-1]),Se.setClass([ae[ge-5]],ae[ge-3]);break;case 14:Se.addEntity(ae[ge-2]);break;case 15:Se.addEntity(ae[ge-4]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 16:Se.addEntity(ae[ge]);break;case 17:Se.addEntity(ae[ge-2]),Se.setClass([ae[ge-2]],ae[ge]);break;case 18:Se.addEntity(ae[ge-6],ae[ge-4]),Se.addAttributes(ae[ge-6],ae[ge-1]);break;case 19:Se.addEntity(ae[ge-8],ae[ge-6]),Se.addAttributes(ae[ge-8],ae[ge-1]),Se.setClass([ae[ge-8]],ae[ge-3]);break;case 20:Se.addEntity(ae[ge-5],ae[ge-3]);break;case 21:Se.addEntity(ae[ge-7],ae[ge-5]),Se.setClass([ae[ge-7]],ae[ge-2]);break;case 22:Se.addEntity(ae[ge-3],ae[ge-1]);break;case 23:Se.addEntity(ae[ge-5],ae[ge-3]),Se.setClass([ae[ge-5]],ae[ge]);break;case 24:case 25:this.$=ae[ge].trim(),Se.setAccTitle(this.$);break;case 26:case 27:this.$=ae[ge].trim(),Se.setAccDescription(this.$);break;case 32:Se.setDirection("TB");break;case 33:Se.setDirection("BT");break;case 34:Se.setDirection("RL");break;case 35:Se.setDirection("LR");break;case 36:this.$=ae[ge-3],Se.addClass(ae[ge-2],ae[ge-1]);break;case 37:case 38:case 56:case 64:this.$=[ae[ge]];break;case 39:case 40:this.$=ae[ge-2].concat([ae[ge]]);break;case 41:this.$=ae[ge-2],Se.setClass(ae[ge-1],ae[ge]);break;case 42:this.$=ae[ge-3],Se.addCssStyles(ae[ge-2],ae[ge-1]);break;case 43:this.$=[ae[ge]];break;case 44:ae[ge-2].push(ae[ge]),this.$=ae[ge-2];break;case 46:this.$=ae[ge-1]+ae[ge];break;case 54:case 76:case 77:this.$=ae[ge].replace(/"/g,"");break;case 55:case 78:this.$=ae[ge];break;case 57:ae[ge].push(ae[ge-1]),this.$=ae[ge];break;case 58:this.$={type:ae[ge-1],name:ae[ge]};break;case 59:this.$={type:ae[ge-2],name:ae[ge-1],keys:ae[ge]};break;case 60:this.$={type:ae[ge-2],name:ae[ge-1],comment:ae[ge]};break;case 61:this.$={type:ae[ge-3],name:ae[ge-2],keys:ae[ge-1],comment:ae[ge]};break;case 62:case 63:case 66:this.$=ae[ge];break;case 65:ae[ge-2].push(ae[ge]),this.$=ae[ge-2];break;case 67:this.$=ae[ge].replace(/"/g,"");break;case 68:this.$={cardA:ae[ge],relType:ae[ge-1],cardB:ae[ge-2]};break;case 69:this.$=Se.Cardinality.ZERO_OR_ONE;break;case 70:this.$=Se.Cardinality.ZERO_OR_MORE;break;case 71:this.$=Se.Cardinality.ONE_OR_MORE;break;case 72:this.$=Se.Cardinality.ONLY_ONE;break;case 73:this.$=Se.Cardinality.MD_PARENT;break;case 74:this.$=Se.Identification.NON_IDENTIFYING;break;case 75:this.$=Se.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:27,11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,5]),t(e,[2,6]),t(e,[2,16],{12:28,61:32,15:[1,29],17:[1,30],20:[1,31],63:y,64:v,65:x,66:b,67:w}),{23:[1,38]},{25:[1,39]},{27:[1,40]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),t(e,[2,30]),t(e,[2,31]),t(C,[2,54]),t(C,[2,55]),t(e,[2,32]),t(e,[2,33]),t(e,[2,34]),t(e,[2,35]),{16:41,40:T,41:E},{16:44,40:T,41:E},{16:45,40:T,41:E},t(e,[2,4]),{11:46,40:d,50:g},{16:47,40:T,41:E},{18:48,19:[1,49],51:50,52:51,56:A},{11:53,40:d,50:g},{62:54,68:[1,55],69:[1,56]},t(S,[2,69]),t(S,[2,70]),t(S,[2,71]),t(S,[2,72]),t(S,[2,73]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),{13:_,38:57,41:I,42:D,45:59,46:60,48:k,49:L},t(R,[2,37]),t(R,[2,38]),{16:65,40:T,41:E,42:D},{13:_,38:66,41:I,42:D,45:59,46:60,48:k,49:L},{13:[1,67],15:[1,68]},t(e,[2,17],{61:32,12:69,17:[1,70],42:D,63:y,64:v,65:x,66:b,67:w}),{19:[1,71]},t(e,[2,14]),{18:72,19:[2,56],51:50,52:51,56:A},{53:73,56:[1,74]},{56:[2,62]},{21:[1,75]},{61:76,63:y,64:v,65:x,66:b,67:w},t(O,[2,74]),t(O,[2,75]),{6:M,10:B,39:77,42:F,47:P},{40:[1,82],41:[1,83]},t(z,[2,43],{46:84,13:_,41:I,48:k,49:L}),t($,[2,45]),t($,[2,50]),t($,[2,51]),t($,[2,52]),t($,[2,53]),t(e,[2,41],{42:D}),{6:M,10:B,39:85,42:F,47:P},{14:86,40:H,50:Q,70:j},{16:90,40:T,41:E},{11:91,40:d,50:g},{18:92,19:[1,93],51:50,52:51,56:A},t(e,[2,12]),{19:[2,57]},t(ie,[2,58],{54:94,55:95,57:96,59:ne,60:le}),t([19,56,59,60],[2,63]),t(e,[2,22],{15:[1,100],17:[1,99]}),t([40,50],[2,68]),t(e,[2,36]),{13:_,41:I,45:101,46:60,48:k,49:L},t(e,[2,47]),t(e,[2,48]),t(e,[2,49]),t(R,[2,39]),t(R,[2,40]),t($,[2,46]),t(e,[2,42]),t(e,[2,8]),t(e,[2,76]),t(e,[2,77]),t(e,[2,78]),{13:[1,102],42:D},{13:[1,104],15:[1,103]},{19:[1,105]},t(e,[2,15]),t(ie,[2,59],{55:106,58:[1,107],60:le}),t(ie,[2,60]),t(he,[2,64]),t(ie,[2,67]),t(he,[2,66]),{18:108,19:[1,109],51:50,52:51,56:A},{16:110,40:T,41:E},t(z,[2,44],{46:84,13:_,41:I,48:k,49:L}),{14:111,40:H,50:Q,70:j},{16:112,40:T,41:E},{14:113,40:H,50:Q,70:j},t(e,[2,13]),t(ie,[2,61]),{57:114,59:ne},{19:[1,115]},t(e,[2,20]),t(e,[2,23],{17:[1,116],42:D}),t(e,[2,11]),{13:[1,117],42:D},t(e,[2,10]),t(he,[2,65]),t(e,[2,18]),{18:118,19:[1,119],51:50,52:51,56:A},{14:120,40:H,50:Q,70:j},{19:[1,121]},t(e,[2,21]),t(e,[2,9]),t(e,[2,19])],defaultActions:{52:[2,62],72:[2,57]},parseError:o(function(se,ue){if(ue.recoverable)this.trace(se);else{var Z=new Error(se);throw Z.hash=ue,Z}},"parseError"),parse:o(function(se){var ue=this,Z=[0],Se=[],ce=[null],ae=[],Oe=this.table,ge="",ze=0,He=0,$e=0,Re=2,Ie=1,be=ae.slice.call(arguments,1),W=Object.create(this.lexer),de={yy:{}};for(var re in this.yy)Object.prototype.hasOwnProperty.call(this.yy,re)&&(de.yy[re]=this.yy[re]);W.setInput(se,de.yy),de.yy.lexer=W,de.yy.parser=this,typeof W.yylloc>"u"&&(W.yylloc={});var oe=W.yylloc;ae.push(oe);var V=W.options&&W.options.ranges;typeof de.yy.parseError=="function"?this.parseError=de.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xe(ct){Z.length=Z.length-2*ct,ce.length=ce.length-ct,ae.length=ae.length-ct}o(xe,"popStack");function q(){var ct;return ct=Se.pop()||W.lex()||Ie,typeof ct!="number"&&(ct instanceof Array&&(Se=ct,ct=Se.pop()),ct=ue.symbols_[ct]||ct),ct}o(q,"lex");for(var pe,ve,Pe,_e,we,Ve,De={},qe,at,Rt,st;;){if(Pe=Z[Z.length-1],this.defaultActions[Pe]?_e=this.defaultActions[Pe]:((pe===null||typeof pe>"u")&&(pe=q()),_e=Oe[Pe]&&Oe[Pe][pe]),typeof _e>"u"||!_e.length||!_e[0]){var Ue="";st=[];for(qe in Oe[Pe])this.terminals_[qe]&&qe>Re&&st.push("'"+this.terminals_[qe]+"'");W.showPosition?Ue="Parse error on line "+(ze+1)+`: | |
| 632 | +`+W.showPosition()+` | |
| 633 | +Expecting `+st.join(", ")+", got '"+(this.terminals_[pe]||pe)+"'":Ue="Parse error on line "+(ze+1)+": Unexpected "+(pe==Ie?"end of input":"'"+(this.terminals_[pe]||pe)+"'"),this.parseError(Ue,{text:W.match,token:this.terminals_[pe]||pe,line:W.yylineno,loc:oe,expected:st})}if(_e[0]instanceof Array&&_e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Pe+", token: "+pe);switch(_e[0]){case 1:Z.push(pe),ce.push(W.yytext),ae.push(W.yylloc),Z.push(_e[1]),pe=null,ve?(pe=ve,ve=null):(He=W.yyleng,ge=W.yytext,ze=W.yylineno,oe=W.yylloc,$e>0&&$e--);break;case 2:if(at=this.productions_[_e[1]][1],De.$=ce[ce.length-at],De._$={first_line:ae[ae.length-(at||1)].first_line,last_line:ae[ae.length-1].last_line,first_column:ae[ae.length-(at||1)].first_column,last_column:ae[ae.length-1].last_column},V&&(De._$.range=[ae[ae.length-(at||1)].range[0],ae[ae.length-1].range[1]]),Ve=this.performAction.apply(De,[ge,He,ze,de.yy,_e[1],ce,ae].concat(be)),typeof Ve<"u")return Ve;at&&(Z=Z.slice(0,-1*at*2),ce=ce.slice(0,-1*at),ae=ae.slice(0,-1*at)),Z.push(this.productions_[_e[1]][0]),ce.push(De.$),ae.push(De._$),Rt=Oe[Z[Z.length-2]][Z[Z.length-1]],Z.push(Rt);break;case 3:return!0}}return!0},"parse")},X=function(){var J={EOF:1,parseError:o(function(ue,Z){if(this.yy.parser)this.yy.parser.parseError(ue,Z);else throw new Error(ue)},"parseError"),setInput:o(function(se,ue){return this.yy=ue||this.yy||{},this._input=se,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var se=this._input[0];this.yytext+=se,this.yyleng++,this.offset++,this.match+=se,this.matched+=se;var ue=se.match(/(?:\r\n?|\n).*/g);return ue?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),se},"input"),unput:o(function(se){var ue=se.length,Z=se.split(/(?:\r\n?|\n)/g);this._input=se+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ue),this.offset-=ue;var Se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Z.length-1&&(this.yylineno-=Z.length-1);var ce=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Z?(Z.length===Se.length?this.yylloc.first_column:0)+Se[Se.length-Z.length].length-Z[0].length:this.yylloc.first_column-ue},this.options.ranges&&(this.yylloc.range=[ce[0],ce[0]+this.yyleng-ue]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 634 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(se){this.unput(this.match.slice(se))},"less"),pastInput:o(function(){var se=this.matched.substr(0,this.matched.length-this.match.length);return(se.length>20?"...":"")+se.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var se=this.match;return se.length<20&&(se+=this._input.substr(0,20-se.length)),(se.substr(0,20)+(se.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var se=this.pastInput(),ue=new Array(se.length+1).join("-");return se+this.upcomingInput()+` | |
| 635 | +`+ue+"^"},"showPosition"),test_match:o(function(se,ue){var Z,Se,ce;if(this.options.backtrack_lexer&&(ce={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ce.yylloc.range=this.yylloc.range.slice(0))),Se=se[0].match(/(?:\r\n?|\n).*/g),Se&&(this.yylineno+=Se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Se?Se[Se.length-1].length-Se[Se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+se[0].length},this.yytext+=se[0],this.match+=se[0],this.matches=se,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(se[0].length),this.matched+=se[0],Z=this.performAction.call(this,this.yy,this,ue,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Z)return Z;if(this._backtrack){for(var ae in ce)this[ae]=ce[ae];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var se,ue,Z,Se;this._more||(this.yytext="",this.match="");for(var ce=this._currentRules(),ae=0;ae<ce.length;ae++)if(Z=this._input.match(this.rules[ce[ae]]),Z&&(!ue||Z[0].length>ue[0].length)){if(ue=Z,Se=ae,this.options.backtrack_lexer){if(se=this.test_match(Z,ce[ae]),se!==!1)return se;if(this._backtrack){ue=!1;continue}else return!1}else if(!this.options.flex)break}return ue?(se=this.test_match(ue,ce[Se]),se!==!1?se:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 636 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var ue=this.next();return ue||this.lex()},"lex"),begin:o(function(ue){this.conditionStack.push(ue)},"begin"),popState:o(function(){var ue=this.conditionStack.length-1;return ue>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(ue){return ue=this.conditionStack.length-1-Math.abs(ue||0),ue>=0?this.conditionStack[ue]:"INITIAL"},"topState"),pushState:o(function(ue){this.begin(ue)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(ue,Z,Se,ce){var ae=ce;switch(Se){case 0:return this.begin("acc_title"),24;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),26;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 33;case 8:return 34;case 9:return 35;case 10:return 36;case 11:return 10;case 12:break;case 13:return 8;case 14:return 50;case 15:return 70;case 16:return 4;case 17:return this.begin("block"),17;break;case 18:return 49;case 19:return 49;case 20:return 42;case 21:return 15;case 22:return 13;case 23:break;case 24:return 59;case 25:return 56;case 26:return 56;case 27:return 60;case 28:break;case 29:return this.popState(),19;break;case 30:return Z.yytext[0];case 31:return 20;case 32:return 21;case 33:return this.begin("style"),44;break;case 34:return this.popState(),10;break;case 35:break;case 36:return 13;case 37:return 42;case 38:return 49;case 39:return this.begin("style"),37;break;case 40:return 43;case 41:return 63;case 42:return 65;case 43:return 65;case 44:return 65;case 45:return 63;case 46:return 63;case 47:return 64;case 48:return 64;case 49:return 64;case 50:return 64;case 51:return 64;case 52:return 65;case 53:return 64;case 54:return 65;case 55:return 66;case 56:return 66;case 57:return 66;case 58:return 66;case 59:return 63;case 60:return 64;case 61:return 65;case 62:return 67;case 63:return 68;case 64:return 69;case 65:return 69;case 66:return 68;case 67:return 68;case 68:return 68;case 69:return 41;case 70:return 47;case 71:return 40;case 72:return 48;case 73:return Z.yytext[0];case 74:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:#)/i,/^(?:#)/i,/^(?:,)/i,/^(?::::)/i,/^(?::)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:([^\s]*)[~].*[~]([^\s]*))/i,/^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\u00C0-\uFFFF\*]*))/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:style\b)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?::)/i,/^(?:,)/i,/^(?:#)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:;)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:[0-9])/i,/^(?:.)/i,/^(?:$)/i],conditions:{style:{rules:[34,35,36,37,38,69,70],inclusive:!1},acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[23,24,25,26,27,28,29,30],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,31,32,33,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,71,72,73,74],inclusive:!0}}};return J}();K.lexer=X;function te(){this.yy={}}return o(te,"Parser"),te.prototype=K,K.Parser=te,new te}();wR.parser=wR;Zie=wR});var sk,eae=N(()=>{"use strict";vt();zt();mi();ir();sk=class{constructor(){this.entities=new Map;this.relationships=[];this.classes=new Map;this.direction="TB";this.Cardinality={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"};this.Identification={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"};this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().er,"getConfig");this.clear(),this.addEntity=this.addEntity.bind(this),this.addAttributes=this.addAttributes.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setDirection=this.setDirection.bind(this),this.addCssStyles=this.addCssStyles.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"ErDB")}addEntity(e,r=""){return this.entities.has(e)?!this.entities.get(e)?.alias&&r&&(this.entities.get(e).alias=r,Y.info(`Add alias '${r}' to entity '${e}'`)):(this.entities.set(e,{id:`entity-${e}-${this.entities.size}`,label:e,attributes:[],alias:r,shape:"erBox",look:me().look??"default",cssClasses:"default",cssStyles:[]}),Y.info("Added new entity :",e)),this.entities.get(e)}getEntity(e){return this.entities.get(e)}getEntities(){return this.entities}getClasses(){return this.classes}addAttributes(e,r){let n=this.addEntity(e),i;for(i=r.length-1;i>=0;i--)r[i].keys||(r[i].keys=[]),r[i].comment||(r[i].comment=""),n.attributes.push(r[i]),Y.debug("Added attribute ",r[i].name)}addRelationship(e,r,n,i){let a=this.entities.get(e),s=this.entities.get(n);if(!a||!s)return;let l={entityA:a.id,roleA:r,entityB:s.id,relSpec:i};this.relationships.push(l),Y.debug("Added new relationship :",l)}getRelationships(){return this.relationships}getDirection(){return this.direction}setDirection(e){this.direction=e}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}addCssStyles(e,r){for(let n of e){let i=this.entities.get(n);if(!r||!i)return;for(let a of r)i.cssStyles.push(a)}}addClass(e,r){e.forEach(n=>{let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)})})}setClass(e,r){for(let n of e){let i=this.entities.get(n);if(i)for(let a of r)i.cssClasses+=" "+a}}clear(){this.entities=new Map,this.classes=new Map,this.relationships=[],Ar()}getData(){let e=[],r=[],n=me();for(let a of this.entities.keys()){let s=this.entities.get(a);s&&(s.cssCompiledStyles=this.getCompiledStyles(s.cssClasses.split(" ")),e.push(s))}let i=0;for(let a of this.relationships){let s={id:$h(a.entityA,a.entityB,{prefix:"id",counter:i++}),type:"normal",curve:"basis",start:a.entityA,end:a.entityB,label:a.roleA,labelpos:"c",thickness:"normal",classes:"relationshipLine",arrowTypeStart:a.relSpec.cardB.toLowerCase(),arrowTypeEnd:a.relSpec.cardA.toLowerCase(),pattern:a.relSpec.relType=="IDENTIFYING"?"solid":"dashed",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:"TB"}}}});var TR={};hr(TR,{draw:()=>SOe});var SOe,tae=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();dr();SOe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing er diagram (unified)",e);let{securityLevel:i,er:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.config.flowchart.nodeSpacing=a?.nodeSpacing||140,l.config.flowchart.rankSpacing=a?.rankSpacing||80,l.direction=n.db.getDirection(),l.markers=["only_one","zero_or_one","one_or_more","zero_or_more"],l.diagramId=e,await Cc(l,u),l.layoutAlgorithm==="elk"&&u.select(".edges").lower();let h=u.selectAll('[id*="-background"]');Array.from(h).length>0&&h.each(function(){let d=Ge(this),m=d.attr("id").replace("-background",""),g=u.select(`#${CSS.escape(m)}`);if(!g.empty()){let y=g.attr("transform");d.attr("transform",y)}});let f=8;Gt.insertTitle(u,"erDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,f,"erDiagram",a?.useMaxWidth??!0)},"draw")});var COe,AOe,rae,nae=N(()=>{"use strict";Ys();COe=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),AOe=o(t=>` | |
| 637 | + .entityBox { | |
| 638 | + fill: ${t.mainBkg}; | |
| 639 | + stroke: ${t.nodeBorder}; | |
| 640 | + } | |
| 641 | + | |
| 642 | + .relationshipLabelBox { | |
| 643 | + fill: ${t.tertiaryColor}; | |
| 644 | + opacity: 0.7; | |
| 645 | + background-color: ${t.tertiaryColor}; | |
| 646 | + rect { | |
| 647 | + opacity: 0.5; | |
| 648 | + } | |
| 649 | + } | |
| 650 | + | |
| 651 | + .labelBkg { | |
| 652 | + background-color: ${COe(t.tertiaryColor,.5)}; | |
| 653 | + } | |
| 654 | + | |
| 655 | + .edgeLabel .label { | |
| 656 | + fill: ${t.nodeBorder}; | |
| 657 | + font-size: 14px; | |
| 658 | + } | |
| 659 | + | |
| 660 | + .label { | |
| 661 | + font-family: ${t.fontFamily}; | |
| 662 | + color: ${t.nodeTextColor||t.textColor}; | |
| 663 | + } | |
| 664 | + | |
| 665 | + .edge-pattern-dashed { | |
| 666 | + stroke-dasharray: 8,8; | |
| 667 | + } | |
| 668 | + | |
| 669 | + .node rect, | |
| 670 | + .node circle, | |
| 671 | + .node ellipse, | |
| 672 | + .node polygon | |
| 673 | + { | |
| 674 | + fill: ${t.mainBkg}; | |
| 675 | + stroke: ${t.nodeBorder}; | |
| 676 | + stroke-width: 1px; | |
| 677 | + } | |
| 678 | + | |
| 679 | + .relationshipLine { | |
| 680 | + stroke: ${t.lineColor}; | |
| 681 | + stroke-width: 1; | |
| 682 | + fill: none; | |
| 683 | + } | |
| 684 | + | |
| 685 | + .marker { | |
| 686 | + fill: none !important; | |
| 687 | + stroke: ${t.lineColor} !important; | |
| 688 | + stroke-width: 1; | |
| 689 | + } | |
| 690 | +`,"getStyles"),rae=AOe});var iae={};hr(iae,{diagram:()=>_Oe});var _Oe,aae=N(()=>{"use strict";Jie();eae();tae();nae();_Oe={parser:Zie,get db(){return new sk},renderer:TR,styles:rae}});function ii(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function va(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"}function kR(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function jd(t){return typeof t=="object"&&t!==null&&ii(t.container)&&va(t.reference)&&typeof t.message=="string"}function Ll(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function af(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function M2(t){return Ll(t)&&typeof t.fullText=="string"}var Xd,Rl=N(()=>{"use strict";o(ii,"isAstNode");o(va,"isReference");o(kR,"isAstNodeDescription");o(jd,"isLinkingError");Xd=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,r){return ii(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let n=this.subtypes[e];n||(n=this.subtypes[e]={});let i=n[r];if(i!==void 0)return i;{let a=this.computeIsSubtype(e,r);return n[r]=a,a}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let n=this.getAllTypes(),i=[];for(let a of n)this.isSubtype(a,e)&&i.push(a);return this.allSubtypes[e]=i,i}}};o(Ll,"isCompositeCstNode");o(af,"isLeafCstNode");o(M2,"isRootCstNode")});function NOe(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function ok(t){return!!t&&typeof t[Symbol.iterator]=="function"}function en(...t){if(t.length===1){let e=t[0];if(e instanceof ao)return e;if(ok(e))return new ao(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new ao(()=>({index:0}),r=>r.index<e.length?{done:!1,value:e[r.index++]}:Ia)}return t.length>1?new ao(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex<e.array.length)return{done:!1,value:e.array[e.arrIndex++]};e.array=void 0,e.arrIndex=0}if(e.collIndex<t.length){let r=t[e.collIndex++];ok(r)?e.iterator=r[Symbol.iterator]():r&&typeof r.length=="number"&&(e.array=r)}}while(e.iterator||e.array||e.collIndex<t.length);return Ia}):I2}var ao,I2,Ia,_c,zm,Ps=N(()=>{"use strict";ao=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,n=e.next();for(;!n.done;)r++,n=e.next();return r}toArray(){let e=[],r=this.iterator(),n;do n=r.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,r){let n=this.map(i=>[e?e(i):i,r?r(i):i]);return new Map(n)}toString(){return this.join()}concat(e){return new t(()=>({first:this.startFn(),firstDone:!1,iterator:e[Symbol.iterator]()}),r=>{let n;if(!r.firstDone){do if(n=this.nextFn(r.first),!n.done)return n;while(!n.done);r.firstDone=!0}do if(n=r.iterator.next(),!n.done)return n;while(!n.done);return Ia})}join(e=","){let r=this.iterator(),n="",i,a=!1;do i=r.next(),i.done||(a&&(n+=e),n+=NOe(i.value)),a=!0;while(!i.done);return n}indexOf(e,r=0){let n=this.iterator(),i=0,a=n.next();for(;!a.done;){if(i>=r&&a.value===e)return i;a=n.next(),i++}return-1}every(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(!e(n.value))return!1;n=r.next()}return!0}some(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return!0;n=r.next()}return!1}forEach(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;)e(i.value,n),i=r.next(),n++}map(e){return new t(this.startFn,r=>{let{done:n,value:i}=this.nextFn(r);return n?Ia:{done:!1,value:e(i)}})}filter(e){return new t(this.startFn,r=>{let n;do if(n=this.nextFn(r),!n.done&&e(n.value))return n;while(!n.done);return Ia})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let n=this.iterator(),i=r,a=n.next();for(;!a.done;)i===void 0?i=a.value:i=e(i,a.value),a=n.next();return i}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,n){let i=e.next();if(i.done)return n;let a=this.recursiveReduce(e,r,n);return a===void 0?i.value:r(a,i.value)}find(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return n.value;n=r.next()}}findIndex(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;){if(e(i.value))return n;i=r.next(),n++}return-1}includes(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(n.value===e)return!0;n=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:n,value:i}=this.nextFn(r.this);if(!n){let a=e(i);if(ok(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return Ia})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),n=>{do{if(n.iterator){let s=n.iterator.next();if(s.done)n.iterator=void 0;else return s}let{done:i,value:a}=r.nextFn(n.this);if(!i)if(ok(a))n.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(n.iterator);return Ia})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let n=0;n<e;n++)if(this.nextFn(r).done)return r;return r},this.nextFn)}limit(e){return new t(()=>({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?Ia:this.nextFn(r.state)))}distinct(e){return new t(()=>({set:new Set,internalState:this.startFn()}),r=>{let n;do if(n=this.nextFn(r.internalState),!n.done){let i=e?e(n.value):n.value;if(!r.set.has(i))return r.set.add(i),n}while(!n.done);return Ia})}exclude(e,r){let n=new Set;for(let i of e){let a=r?r(i):i;n.add(a)}return this.filter(i=>{let a=r?r(i):i;return!n.has(a)})}};o(NOe,"toString");o(ok,"isIterable");I2=new ao(()=>{},()=>Ia),Ia=Object.freeze({done:!0,value:void 0});o(en,"stream");_c=class extends ao{static{o(this,"TreeStreamImpl")}constructor(e,r,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(r(s.value)[Symbol.iterator]()),s}return Ia})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function n(a){return a.reduce((s,l)=>Math.min(s,l))}o(n,"min"),t.min=n;function i(a){return a.reduce((s,l)=>Math.max(s,l))}o(i,"max"),t.max=i})(zm||(zm={}))});var ck={};hr(ck,{DefaultNameRegexp:()=>lk,RangeComparison:()=>Dc,compareRange:()=>cae,findCommentNode:()=>AR,findDeclarationNodeAtOffset:()=>IOe,findLeafNodeAtOffset:()=>_R,findLeafNodeBeforeOffset:()=>uae,flattenCst:()=>MOe,getInteriorNodes:()=>BOe,getNextNode:()=>OOe,getPreviousNode:()=>fae,getStartlineNode:()=>POe,inRange:()=>CR,isChildNode:()=>SR,isCommentNode:()=>ER,streamCst:()=>Kd,toDocumentSegment:()=>Qd,tokenToRange:()=>Gm});function Kd(t){return new _c(t,e=>Ll(e)?e.content:[],{includeRoot:!0})}function MOe(t){return Kd(t).filter(af)}function SR(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function Gm(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function Qd(t){if(!t)return;let{offset:e,end:r,range:n}=t;return{range:n,offset:e,end:r,length:r-e}}function cae(t,e){if(t.end.line<e.start.line||t.end.line===e.start.line&&t.end.character<=e.start.character)return Dc.Before;if(t.start.line>e.end.line||t.start.line===e.end.line&&t.start.character>=e.end.character)return Dc.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,n=t.end.line<e.end.line||t.end.line===e.end.line&&t.end.character<=e.end.character;return r&&n?Dc.Inside:r?Dc.OverlapBack:n?Dc.OverlapFront:Dc.Outside}function CR(t,e){return cae(t,e)>Dc.After}function IOe(t,e,r=lk){if(t){if(e>0){let n=e-t.offset,i=t.text.charAt(n);r.test(i)||e--}return _R(t,e)}}function AR(t,e){if(t){let r=fae(t,!0);if(r&&ER(r,e))return r;if(M2(t)){let n=t.content.findIndex(i=>!i.hidden);for(let i=n-1;i>=0;i--){let a=t.content[i];if(ER(a,e))return a}}}}function ER(t,e){return af(t)&&e.includes(t.tokenType.name)}function _R(t,e){if(af(t))return t;if(Ll(t)){let r=hae(t,e,!1);if(r)return _R(r,e)}}function uae(t,e){if(af(t))return t;if(Ll(t)){let r=hae(t,e,!0);if(r)return uae(r,e)}}function hae(t,e,r){let n=0,i=t.content.length-1,a;for(;n<=i;){let s=Math.floor((n+i)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,n=s+1):i=s-1}return a}function fae(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t);for(;n>0;){n--;let i=r.content[n];if(e||!i.hidden)return i}t=r}}function OOe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t),i=r.content.length-1;for(;n<i;){n++;let a=r.content[n];if(e||!a.hidden)return a}t=r}}function POe(t){if(t.range.start.character===0)return t;let e=t.range.start.line,r=t,n;for(;t.container;){let i=t.container,a=n??i.content.indexOf(t);if(a===0?(t=i,n=void 0):(n=a-1,t=i.content[n]),t.range.start.line!==e)break;r=t}return r}function BOe(t,e){let r=FOe(t,e);return r?r.parent.content.slice(r.a+1,r.b):[]}function FOe(t,e){let r=lae(t),n=lae(e),i;for(let a=0;a<r.length&&a<n.length;a++){let s=r[a],l=n[a];if(s.parent===l.parent)i={parent:s.parent,a:s.index,b:l.index};else break}return i}function lae(t){let e=[];for(;t.container;){let r=t.container,n=r.content.indexOf(t);e.push({parent:r,index:n}),t=r}return e.reverse()}var Dc,lk,Nl=N(()=>{"use strict";Rl();Ps();o(Kd,"streamCst");o(MOe,"flattenCst");o(SR,"isChildNode");o(Gm,"tokenToRange");o(Qd,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside",t[t.Outside=5]="Outside"})(Dc||(Dc={}));o(cae,"compareRange");o(CR,"inRange");lk=/^[\w\p{L}]$/u;o(IOe,"findDeclarationNodeAtOffset");o(AR,"findCommentNode");o(ER,"isCommentNode");o(_R,"findLeafNodeAtOffset");o(uae,"findLeafNodeBeforeOffset");o(hae,"binarySearch");o(fae,"getPreviousNode");o(OOe,"getNextNode");o(POe,"getStartlineNode");o(BOe,"getInteriorNodes");o(FOe,"getCommonParent");o(lae,"getParentChain")});function Lc(t){throw new Error("Error! The input value was not handled.")}var Zd,uk=N(()=>{"use strict";Zd=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(Lc,"assertUnreachable")});var U2={};hr(U2,{AbstractElement:()=>Hm,AbstractRule:()=>Vm,AbstractType:()=>Um,Action:()=>cg,Alternatives:()=>ug,ArrayLiteral:()=>Wm,ArrayType:()=>qm,Assignment:()=>hg,BooleanLiteral:()=>Ym,CharacterRange:()=>fg,Condition:()=>O2,Conjunction:()=>Xm,CrossReference:()=>dg,Disjunction:()=>jm,EndOfFile:()=>pg,Grammar:()=>Km,GrammarImport:()=>B2,Group:()=>mg,InferredType:()=>Qm,Interface:()=>Zm,Keyword:()=>gg,LangiumGrammarAstReflection:()=>Cg,LangiumGrammarTerminals:()=>$Oe,NamedArgument:()=>F2,NegatedToken:()=>yg,Negation:()=>Jm,NumberLiteral:()=>eg,Parameter:()=>tg,ParameterReference:()=>rg,ParserRule:()=>ng,ReferenceType:()=>ig,RegexToken:()=>vg,ReturnType:()=>$2,RuleCall:()=>xg,SimpleType:()=>ag,StringLiteral:()=>sg,TerminalAlternatives:()=>bg,TerminalGroup:()=>wg,TerminalRule:()=>Jd,TerminalRuleCall:()=>Tg,Type:()=>og,TypeAttribute:()=>z2,TypeDefinition:()=>hk,UnionType:()=>lg,UnorderedGroup:()=>kg,UntilToken:()=>Eg,ValueLiteral:()=>P2,Wildcard:()=>Sg,isAbstractElement:()=>G2,isAbstractRule:()=>zOe,isAbstractType:()=>GOe,isAction:()=>Mu,isAlternatives:()=>mk,isArrayLiteral:()=>qOe,isArrayType:()=>DR,isAssignment:()=>Ml,isBooleanLiteral:()=>LR,isCharacterRange:()=>FR,isCondition:()=>VOe,isConjunction:()=>RR,isCrossReference:()=>ep,isDisjunction:()=>NR,isEndOfFile:()=>$R,isFeatureName:()=>UOe,isGrammar:()=>YOe,isGrammarImport:()=>XOe,isGroup:()=>sf,isInferredType:()=>fk,isInterface:()=>dk,isKeyword:()=>Ho,isNamedArgument:()=>jOe,isNegatedToken:()=>zR,isNegation:()=>MR,isNumberLiteral:()=>KOe,isParameter:()=>QOe,isParameterReference:()=>IR,isParserRule:()=>Oa,isPrimitiveType:()=>dae,isReferenceType:()=>OR,isRegexToken:()=>GR,isReturnType:()=>PR,isRuleCall:()=>Il,isSimpleType:()=>pk,isStringLiteral:()=>ZOe,isTerminalAlternatives:()=>VR,isTerminalGroup:()=>UR,isTerminalRule:()=>so,isTerminalRuleCall:()=>gk,isType:()=>V2,isTypeAttribute:()=>JOe,isTypeDefinition:()=>HOe,isUnionType:()=>BR,isUnorderedGroup:()=>yk,isUntilToken:()=>HR,isValueLiteral:()=>WOe,isWildcard:()=>WR,reflection:()=>lr});function zOe(t){return lr.isInstance(t,Vm)}function GOe(t){return lr.isInstance(t,Um)}function VOe(t){return lr.isInstance(t,O2)}function UOe(t){return dae(t)||t==="current"||t==="entry"||t==="extends"||t==="false"||t==="fragment"||t==="grammar"||t==="hidden"||t==="import"||t==="interface"||t==="returns"||t==="terminal"||t==="true"||t==="type"||t==="infer"||t==="infers"||t==="with"||typeof t=="string"&&/\^?[_a-zA-Z][\w_]*/.test(t)}function dae(t){return t==="string"||t==="number"||t==="boolean"||t==="Date"||t==="bigint"}function HOe(t){return lr.isInstance(t,hk)}function WOe(t){return lr.isInstance(t,P2)}function G2(t){return lr.isInstance(t,Hm)}function qOe(t){return lr.isInstance(t,Wm)}function DR(t){return lr.isInstance(t,qm)}function LR(t){return lr.isInstance(t,Ym)}function RR(t){return lr.isInstance(t,Xm)}function NR(t){return lr.isInstance(t,jm)}function YOe(t){return lr.isInstance(t,Km)}function XOe(t){return lr.isInstance(t,B2)}function fk(t){return lr.isInstance(t,Qm)}function dk(t){return lr.isInstance(t,Zm)}function jOe(t){return lr.isInstance(t,F2)}function MR(t){return lr.isInstance(t,Jm)}function KOe(t){return lr.isInstance(t,eg)}function QOe(t){return lr.isInstance(t,tg)}function IR(t){return lr.isInstance(t,rg)}function Oa(t){return lr.isInstance(t,ng)}function OR(t){return lr.isInstance(t,ig)}function PR(t){return lr.isInstance(t,$2)}function pk(t){return lr.isInstance(t,ag)}function ZOe(t){return lr.isInstance(t,sg)}function so(t){return lr.isInstance(t,Jd)}function V2(t){return lr.isInstance(t,og)}function JOe(t){return lr.isInstance(t,z2)}function BR(t){return lr.isInstance(t,lg)}function Mu(t){return lr.isInstance(t,cg)}function mk(t){return lr.isInstance(t,ug)}function Ml(t){return lr.isInstance(t,hg)}function FR(t){return lr.isInstance(t,fg)}function ep(t){return lr.isInstance(t,dg)}function $R(t){return lr.isInstance(t,pg)}function sf(t){return lr.isInstance(t,mg)}function Ho(t){return lr.isInstance(t,gg)}function zR(t){return lr.isInstance(t,yg)}function GR(t){return lr.isInstance(t,vg)}function Il(t){return lr.isInstance(t,xg)}function VR(t){return lr.isInstance(t,bg)}function UR(t){return lr.isInstance(t,wg)}function gk(t){return lr.isInstance(t,Tg)}function yk(t){return lr.isInstance(t,kg)}function HR(t){return lr.isInstance(t,Eg)}function WR(t){return lr.isInstance(t,Sg)}var $Oe,Vm,Um,O2,hk,P2,Hm,Wm,qm,Ym,Xm,jm,Km,B2,Qm,Zm,F2,Jm,eg,tg,rg,ng,ig,$2,ag,sg,Jd,og,z2,lg,cg,ug,hg,fg,dg,pg,mg,gg,yg,vg,xg,bg,wg,Tg,kg,Eg,Sg,Cg,lr,Rc=N(()=>{"use strict";Rl();$Oe={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},Vm="AbstractRule";o(zOe,"isAbstractRule");Um="AbstractType";o(GOe,"isAbstractType");O2="Condition";o(VOe,"isCondition");o(UOe,"isFeatureName");o(dae,"isPrimitiveType");hk="TypeDefinition";o(HOe,"isTypeDefinition");P2="ValueLiteral";o(WOe,"isValueLiteral");Hm="AbstractElement";o(G2,"isAbstractElement");Wm="ArrayLiteral";o(qOe,"isArrayLiteral");qm="ArrayType";o(DR,"isArrayType");Ym="BooleanLiteral";o(LR,"isBooleanLiteral");Xm="Conjunction";o(RR,"isConjunction");jm="Disjunction";o(NR,"isDisjunction");Km="Grammar";o(YOe,"isGrammar");B2="GrammarImport";o(XOe,"isGrammarImport");Qm="InferredType";o(fk,"isInferredType");Zm="Interface";o(dk,"isInterface");F2="NamedArgument";o(jOe,"isNamedArgument");Jm="Negation";o(MR,"isNegation");eg="NumberLiteral";o(KOe,"isNumberLiteral");tg="Parameter";o(QOe,"isParameter");rg="ParameterReference";o(IR,"isParameterReference");ng="ParserRule";o(Oa,"isParserRule");ig="ReferenceType";o(OR,"isReferenceType");$2="ReturnType";o(PR,"isReturnType");ag="SimpleType";o(pk,"isSimpleType");sg="StringLiteral";o(ZOe,"isStringLiteral");Jd="TerminalRule";o(so,"isTerminalRule");og="Type";o(V2,"isType");z2="TypeAttribute";o(JOe,"isTypeAttribute");lg="UnionType";o(BR,"isUnionType");cg="Action";o(Mu,"isAction");ug="Alternatives";o(mk,"isAlternatives");hg="Assignment";o(Ml,"isAssignment");fg="CharacterRange";o(FR,"isCharacterRange");dg="CrossReference";o(ep,"isCrossReference");pg="EndOfFile";o($R,"isEndOfFile");mg="Group";o(sf,"isGroup");gg="Keyword";o(Ho,"isKeyword");yg="NegatedToken";o(zR,"isNegatedToken");vg="RegexToken";o(GR,"isRegexToken");xg="RuleCall";o(Il,"isRuleCall");bg="TerminalAlternatives";o(VR,"isTerminalAlternatives");wg="TerminalGroup";o(UR,"isTerminalGroup");Tg="TerminalRuleCall";o(gk,"isTerminalRuleCall");kg="UnorderedGroup";o(yk,"isUnorderedGroup");Eg="UntilToken";o(HR,"isUntilToken");Sg="Wildcard";o(WR,"isWildcard");Cg=class extends Xd{static{o(this,"LangiumGrammarAstReflection")}getAllTypes(){return[Hm,Vm,Um,cg,ug,Wm,qm,hg,Ym,fg,O2,Xm,dg,jm,pg,Km,B2,mg,Qm,Zm,gg,F2,yg,Jm,eg,tg,rg,ng,ig,vg,$2,xg,ag,sg,bg,wg,Jd,Tg,og,z2,hk,lg,kg,Eg,P2,Sg]}computeIsSubtype(e,r){switch(e){case cg:case ug:case hg:case fg:case dg:case pg:case mg:case gg:case yg:case vg:case xg:case bg:case wg:case Tg:case kg:case Eg:case Sg:return this.isSubtype(Hm,r);case Wm:case eg:case sg:return this.isSubtype(P2,r);case qm:case ig:case ag:case lg:return this.isSubtype(hk,r);case Ym:return this.isSubtype(O2,r)||this.isSubtype(P2,r);case Xm:case jm:case Jm:case rg:return this.isSubtype(O2,r);case Qm:case Zm:case og:return this.isSubtype(Um,r);case ng:return this.isSubtype(Vm,r)||this.isSubtype(Um,r);case Jd:return this.isSubtype(Vm,r);default:return!1}}getReferenceType(e){let r=`${e.container.$type}:${e.property}`;switch(r){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return Um;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return Vm;case"Grammar:usedGrammars":return Km;case"NamedArgument:parameter":case"ParameterReference:parameter":return tg;case"TerminalRuleCall:rule":return Jd;default:throw new Error(`${r} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case Hm:return{name:Hm,properties:[{name:"cardinality"},{name:"lookahead"}]};case Wm:return{name:Wm,properties:[{name:"elements",defaultValue:[]}]};case qm:return{name:qm,properties:[{name:"elementType"}]};case Ym:return{name:Ym,properties:[{name:"true",defaultValue:!1}]};case Xm:return{name:Xm,properties:[{name:"left"},{name:"right"}]};case jm:return{name:jm,properties:[{name:"left"},{name:"right"}]};case Km:return{name:Km,properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case B2:return{name:B2,properties:[{name:"path"}]};case Qm:return{name:Qm,properties:[{name:"name"}]};case Zm:return{name:Zm,properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case F2:return{name:F2,properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case Jm:return{name:Jm,properties:[{name:"value"}]};case eg:return{name:eg,properties:[{name:"value"}]};case tg:return{name:tg,properties:[{name:"name"}]};case rg:return{name:rg,properties:[{name:"parameter"}]};case ng:return{name:ng,properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case ig:return{name:ig,properties:[{name:"referenceType"}]};case $2:return{name:$2,properties:[{name:"name"}]};case ag:return{name:ag,properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case sg:return{name:sg,properties:[{name:"value"}]};case Jd:return{name:Jd,properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case og:return{name:og,properties:[{name:"name"},{name:"type"}]};case z2:return{name:z2,properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case lg:return{name:lg,properties:[{name:"types",defaultValue:[]}]};case cg:return{name:cg,properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case ug:return{name:ug,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case hg:return{name:hg,properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case fg:return{name:fg,properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case dg:return{name:dg,properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case pg:return{name:pg,properties:[{name:"cardinality"},{name:"lookahead"}]};case mg:return{name:mg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case gg:return{name:gg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case yg:return{name:yg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case vg:return{name:vg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case xg:return{name:xg,properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case bg:return{name:bg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case wg:return{name:wg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Tg:return{name:Tg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case kg:return{name:kg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Eg:return{name:Eg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case Sg:return{name:Sg,properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}},lr=new Cg});var xk={};hr(xk,{assignMandatoryProperties:()=>XR,copyAstNode:()=>YR,findLocalReferences:()=>tPe,findRootNode:()=>H2,getContainerOfType:()=>tp,getDocument:()=>Pa,hasContainerOfType:()=>ePe,linkContentToContainer:()=>vk,streamAllContents:()=>Nc,streamAst:()=>Wo,streamContents:()=>W2,streamReferences:()=>Ag});function vk(t){for(let[e,r]of Object.entries(t))e.startsWith("$")||(Array.isArray(r)?r.forEach((n,i)=>{ii(n)&&(n.$container=t,n.$containerProperty=e,n.$containerIndex=i)}):ii(r)&&(r.$container=t,r.$containerProperty=e))}function tp(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function ePe(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function Pa(t){let r=H2(t).$document;if(!r)throw new Error("AST node has no document.");return r}function H2(t){for(;t.$container;)t=t.$container;return t}function W2(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new ao(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),n=>{for(;n.keyIndex<n.keys.length;){let i=n.keys[n.keyIndex];if(!i.startsWith("$")){let a=t[i];if(ii(a)){if(n.keyIndex++,qR(a,r))return{done:!1,value:a}}else if(Array.isArray(a)){for(;n.arrayIndex<a.length;){let s=n.arrayIndex++,l=a[s];if(ii(l)&&qR(l,r))return{done:!1,value:l}}n.arrayIndex=0}}n.keyIndex++}return Ia})}function Nc(t,e){if(!t)throw new Error("Root node must be an AstNode.");return new _c(t,r=>W2(r,e))}function Wo(t,e){if(t){if(e?.range&&!qR(t,e.range))return new _c(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new _c(t,r=>W2(r,e),{includeRoot:!0})}function qR(t,e){var r;if(!e)return!0;let n=(r=t.$cstNode)===null||r===void 0?void 0:r.range;return n?CR(n,e):!1}function Ag(t){return new ao(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex<e.keys.length;){let r=e.keys[e.keyIndex];if(!r.startsWith("$")){let n=t[r];if(va(n))return e.keyIndex++,{done:!1,value:{reference:n,container:t,property:r}};if(Array.isArray(n)){for(;e.arrayIndex<n.length;){let i=e.arrayIndex++,a=n[i];if(va(a))return{done:!1,value:{reference:a,container:t,property:r,index:i}}}e.arrayIndex=0}}e.keyIndex++}return Ia})}function tPe(t,e=Pa(t).parseResult.value){let r=[];return Wo(e).forEach(n=>{Ag(n).forEach(i=>{i.reference.ref===t&&r.push(i.reference)})}),en(r)}function XR(t,e){let r=t.getTypeMetaData(e.$type),n=e;for(let i of r.properties)i.defaultValue!==void 0&&n[i.name]===void 0&&(n[i.name]=pae(i.defaultValue))}function pae(t){return Array.isArray(t)?[...t.map(pae)]:t}function YR(t,e){let r={$type:t.$type};for(let[n,i]of Object.entries(t))if(!n.startsWith("$"))if(ii(i))r[n]=YR(i,e);else if(va(i))r[n]=e(r,n,i.$refNode,i.$refText);else if(Array.isArray(i)){let a=[];for(let s of i)ii(s)?a.push(YR(s,e)):va(s)?a.push(e(r,n,s.$refNode,s.$refText)):a.push(s);r[n]=a}else r[n]=i;return vk(r),r}var is=N(()=>{"use strict";Rl();Ps();Nl();o(vk,"linkContentToContainer");o(tp,"getContainerOfType");o(ePe,"hasContainerOfType");o(Pa,"getDocument");o(H2,"findRootNode");o(W2,"streamContents");o(Nc,"streamAllContents");o(Wo,"streamAst");o(qR,"isAstNodeInRange");o(Ag,"streamReferences");o(tPe,"findLocalReferences");o(XR,"assignMandatoryProperties");o(pae,"copyDefaultValue");o(YR,"copyAstNode")});function ar(t){return t.charCodeAt(0)}function bk(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function _g(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function rp(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function q2(){throw Error("Internal Error - Should never get here!")}function jR(t){return t.type==="Character"}var KR=N(()=>{"use strict";o(ar,"cc");o(bk,"insertToSet");o(_g,"addFlag");o(rp,"ASSERT_EXISTS");o(q2,"ASSERT_NEVER_REACH_HERE");o(jR,"isCharacter")});var Y2,X2,QR,mae=N(()=>{"use strict";KR();Y2=[];for(let t=ar("0");t<=ar("9");t++)Y2.push(t);X2=[ar("_")].concat(Y2);for(let t=ar("a");t<=ar("z");t++)X2.push(t);for(let t=ar("A");t<=ar("Z");t++)X2.push(t);QR=[ar(" "),ar("\f"),ar(` | |
| 691 | +`),ar("\r"),ar(" "),ar("\v"),ar(" "),ar("\xA0"),ar("\u1680"),ar("\u2000"),ar("\u2001"),ar("\u2002"),ar("\u2003"),ar("\u2004"),ar("\u2005"),ar("\u2006"),ar("\u2007"),ar("\u2008"),ar("\u2009"),ar("\u200A"),ar("\u2028"),ar("\u2029"),ar("\u202F"),ar("\u205F"),ar("\u3000"),ar("\uFEFF")]});var rPe,wk,nPe,np,gae=N(()=>{"use strict";KR();mae();rPe=/[0-9a-fA-F]/,wk=/[0-9]/,nPe=/[1-9]/,np=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let n={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":_g(n,"global");break;case"i":_g(n,"ignoreCase");break;case"m":_g(n,"multiLine");break;case"u":_g(n,"unicode");break;case"y":_g(n,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:n,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break}rp(r);let n=this.disjunction();return this.consumeChar(")"),{type:r,value:n,loc:this.loc(e)}}return q2()}quantifier(e=!1){let r,n=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:i,atMost:i};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:i,atMost:a}):r={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;rp(r);break}if(!(e===!0&&r===void 0)&&rp(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(n),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),rp(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):q2()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[ar(` | |
| 692 | +`),ar("\r"),ar("\u2028"),ar("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=Y2;break;case"D":e=Y2,r=!0;break;case"s":e=QR;break;case"S":e=QR,r=!0;break;case"w":e=X2;break;case"W":e=X2,r=!0;break}return rp(e)?{type:"Set",value:e,complement:r}:q2()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=ar("\f");break;case"n":e=ar(` | |
| 693 | +`);break;case"r":e=ar("\r");break;case"t":e=ar(" ");break;case"v":e=ar("\v");break}return rp(e)?{type:"Character",value:e}:q2()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:ar("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:ar(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` | |
| 694 | +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:ar(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let n=this.classAtom(),i=n.type==="Character";if(jR(n)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(jR(a)){if(a.value<n.value)throw Error("Range out of order in character class");e.push({from:n.value,to:a.value})}else bk(n.value,e),e.push(ar("-")),bk(a.value,e)}else bk(n.value,e)}return this.consumeChar("]"),{type:"Set",complement:r,value:e}}classAtom(){switch(this.peekChar()){case"]":case` | |
| 695 | +`:case"\r":case"\u2028":case"\u2029":throw Error("TBD");case"\\":return this.classEscape();default:return this.classPatternCharacterAtom()}}classEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"b":return this.consumeChar("b"),{type:"Character",value:ar("\b")};case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}group(){let e=!0;switch(this.consumeChar("("),this.peekChar(0)){case"?":this.consumeChar("?"),this.consumeChar(":"),e=!1;break;default:this.groupIdx++;break}let r=this.disjunction();this.consumeChar(")");let n={type:"Group",capturing:e,value:r};return e&&(n.idx=this.groupIdx),n}positiveInteger(){let e=this.popChar();if(nPe.test(e)===!1)throw Error("Expecting a positive integer");for(;wk.test(this.peekChar(0));)e+=this.popChar();return parseInt(e,10)}integerIncludingZero(){let e=this.popChar();if(wk.test(e)===!1)throw Error("Expecting an integer");for(;wk.test(this.peekChar(0));)e+=this.popChar();return parseInt(e,10)}patternCharacter(){let e=this.popChar();switch(e){case` | |
| 696 | +`:case"\r":case"\u2028":case"\u2029":case"^":case"$":case"\\":case".":case"*":case"+":case"?":case"(":case")":case"[":case"|":throw Error("TBD");default:return{type:"Character",value:ar(e)}}}isRegExpFlag(){switch(this.peekChar(0)){case"g":case"i":case"m":case"u":case"y":return!0;default:return!1}}isRangeDash(){return this.peekChar()==="-"&&this.isClassAtom(1)}isDigit(){return wk.test(this.peekChar(0))}isClassAtom(e=0){switch(this.peekChar(e)){case"]":case` | |
| 697 | +`:case"\r":case"\u2028":case"\u2029":return!1;default:return!0}}isTerm(){return this.isAtom()||this.isAssertion()}isAtom(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case".":case"\\":case"[":case"(":return!0;default:return!1}}isAssertion(){switch(this.peekChar(0)){case"^":case"$":return!0;case"\\":switch(this.peekChar(1)){case"b":case"B":return!0;default:return!1}case"(":return this.peekChar(1)==="?"&&(this.peekChar(2)==="="||this.peekChar(2)==="!");default:return!1}}isQuantifier(){let e=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(e)}}isPatternCharacter(){switch(this.peekChar()){case"^":case"$":case"\\":case".":case"*":case"+":case"?":case"(":case")":case"[":case"|":case"/":case` | |
| 698 | +`:case"\r":case"\u2028":case"\u2029":return!1;default:return!0}}parseHexDigits(e){let r="";for(let i=0;i<e;i++){let a=this.popChar();if(rPe.test(a)===!1)throw Error("Expecting a HexDecimal digits");r+=a}return{type:"Character",value:parseInt(r,16)}}peekChar(e=0){return this.input[this.idx+e]}popChar(){let e=this.peekChar(0);return this.consumeChar(void 0),e}consumeChar(e){if(e!==void 0&&this.input[this.idx]!==e)throw Error("Expected: '"+e+"' but found: '"+this.input[this.idx]+"' at offset: "+this.idx);if(this.idx>=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var Mc,yae=N(()=>{"use strict";Mc=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let n=e[r];e.hasOwnProperty(r)&&(n.type!==void 0?this.visit(n):Array.isArray(n)&&n.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var j2=N(()=>{"use strict";gae();yae()});var Tk={};hr(Tk,{NEWLINE_REGEXP:()=>JR,escapeRegExp:()=>ap,getCaseInsensitivePattern:()=>tN,getTerminalParts:()=>iPe,isMultilineComment:()=>eN,isWhitespace:()=>Dg,partialMatches:()=>rN,partialRegExp:()=>bae,whitespaceCharacters:()=>xae});function iPe(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=vae.pattern(t),r=[];for(let n of e.value.value)ip.reset(t),ip.visit(n),r.push({start:ip.startRegexp,end:ip.endRegex});return r}catch{return[]}}function eN(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),ip.reset(t),ip.visit(vae.pattern(t)),ip.multiline}catch{return!1}}function Dg(t){let e=typeof t=="string"?new RegExp(t):t;return xae.some(r=>e.test(r))}function ap(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function tN(t){return Array.prototype.map.call(t,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:ap(e)).join("")}function rN(t,e){let r=bae(t),n=e.match(r);return!!n&&n[0].length>0}function bae(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,n=0;function i(){let a="",s;function l(h){a+=r.substr(n,h),n+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(n,h)+"|$)",n+=h}for(o(u,"appendOptional");n<r.length;)switch(r[n]){case"\\":switch(r[n+1]){case"c":u(3);break;case"x":u(4);break;case"u":e.unicode?r[n+2]==="{"?u(r.indexOf("}",n)-n+1):u(6):u(2);break;case"p":case"P":e.unicode?u(r.indexOf("}",n)-n+1):u(2);break;case"k":u(r.indexOf(">",n)-n+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=n,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=n,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[n+1]==="?")switch(r[n+2]){case":":a+="(?:",n+=3,a+=i()+"|$)";break;case"=":a+="(?=",n+=3,a+=i()+")";break;case"!":s=n,n+=3,i(),a+=r.substr(s,n-s);break;case"<":switch(r[n+3]){case"=":case"!":s=n,n+=4,i(),a+=r.substr(s,n-s);break;default:l(r.indexOf(">",n)-n+1),a+=i()+"|$)";break}break}else l(1),a+=i()+"|$)";break;case")":return++n,a;default:u(1);break}return a}return o(i,"process"),new RegExp(i(),t.flags)}var JR,vae,ZR,ip,xae,Lg=N(()=>{"use strict";j2();JR=/\r?\n/gm,vae=new np,ZR=class extends Mc{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===` | |
| 699 | +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let n=ap(r);this.endRegexpStack.push(n),this.isStarting&&(this.startRegexp+=n)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),n=new RegExp(r);this.multiline=!!` | |
| 700 | +`.match(n)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},ip=new ZR;o(iPe,"getTerminalParts");o(eN,"isMultilineComment");xae=`\f | |
| 701 | +\r \v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF`.split("");o(Dg,"isWhitespace");o(ap,"escapeRegExp");o(tN,"getCaseInsensitivePattern");o(rN,"partialMatches");o(bae,"partialRegExp")});var Ek={};hr(Ek,{findAssignment:()=>hN,findNameAssignment:()=>kk,findNodeForKeyword:()=>cN,findNodeForProperty:()=>Q2,findNodesForKeyword:()=>aPe,findNodesForKeywordInternal:()=>uN,findNodesForProperty:()=>oN,getActionAtElement:()=>Sae,getActionType:()=>Aae,getAllReachableRules:()=>K2,getCrossReferenceTerminal:()=>aN,getEntryRule:()=>wae,getExplicitRuleType:()=>Rg,getHiddenRules:()=>Tae,getRuleType:()=>fN,getRuleTypeName:()=>uPe,getTypeName:()=>J2,isArrayCardinality:()=>oPe,isArrayOperator:()=>lPe,isCommentTerminal:()=>sN,isDataType:()=>cPe,isDataTypeRule:()=>Z2,isOptionalCardinality:()=>sPe,terminalRegex:()=>Ng});function wae(t){return t.rules.find(e=>Oa(e)&&e.entry)}function Tae(t){return t.rules.filter(e=>so(e)&&e.hidden)}function K2(t,e){let r=new Set,n=wae(t);if(!n)return new Set(t.rules);let i=[n].concat(Tae(t));for(let s of i)kae(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||so(s)&&s.hidden)&&a.add(s);return a}function kae(t,e,r){e.add(t.name),Nc(t).forEach(n=>{if(Il(n)||r&&gk(n)){let i=n.rule.ref;i&&!e.has(i.name)&&kae(i,e,r)}})}function aN(t){if(t.terminal)return t.terminal;if(t.type.ref){let e=kk(t.type.ref);return e?.terminal}}function sN(t){return t.hidden&&!Dg(Ng(t))}function oN(t,e){return!t||!e?[]:lN(t,e,t.astNode,!0)}function Q2(t,e,r){if(!t||!e)return;let n=lN(t,e,t.astNode,!0);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function lN(t,e,r,n){if(!n){let i=tp(t.grammarSource,Ml);if(i&&i.feature===e)return[t]}return Ll(t)&&t.astNode===r?t.content.flatMap(i=>lN(i,e,r,!1)):[]}function aPe(t,e){return t?uN(t,e,t?.astNode):[]}function cN(t,e,r){if(!t)return;let n=uN(t,e,t?.astNode);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function uN(t,e,r){if(t.astNode!==r)return[];if(Ho(t.grammarSource)&&t.grammarSource.value===e)return[t];let n=Kd(t).iterator(),i,a=[];do if(i=n.next(),!i.done){let s=i.value;s.astNode===r?Ho(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):n.prune()}while(!i.done);return a}function hN(t){var e;let r=t.astNode;for(;r===((e=t.container)===null||e===void 0?void 0:e.astNode);){let n=tp(t.grammarSource,Ml);if(n)return n;t=t.container}}function kk(t){let e=t;return fk(e)&&(Mu(e.$container)?e=e.$container.$container:Oa(e.$container)?e=e.$container:Lc(e.$container)),Eae(t,e,new Map)}function Eae(t,e,r){var n;function i(a,s){let l;return tp(a,Ml)||(l=Eae(s,s,r)),r.set(t,l),l}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let a of Nc(e)){if(Ml(a)&&a.feature.toLowerCase()==="name")return r.set(t,a),a;if(Il(a)&&Oa(a.rule.ref))return i(a,a.rule.ref);if(pk(a)&&(!((n=a.typeRef)===null||n===void 0)&&n.ref))return i(a,a.typeRef.ref)}}function Sae(t){let e=t.$container;if(sf(e)){let r=e.elements,n=r.indexOf(t);for(let i=n-1;i>=0;i--){let a=r[i];if(Mu(a))return a;{let s=Nc(r[i]).find(Mu);if(s)return s}}}if(G2(e))return Sae(e)}function sPe(t,e){return t==="?"||t==="*"||sf(e)&&!!e.guardCondition}function oPe(t){return t==="*"||t==="+"}function lPe(t){return t==="+="}function Z2(t){return Cae(t,new Set)}function Cae(t,e){if(e.has(t))return!0;e.add(t);for(let r of Nc(t))if(Il(r)){if(!r.rule.ref||Oa(r.rule.ref)&&!Cae(r.rule.ref,e))return!1}else{if(Ml(r))return!1;if(Mu(r))return!1}return!!t.definition}function cPe(t){return iN(t.type,new Set)}function iN(t,e){if(e.has(t))return!0;if(e.add(t),DR(t))return!1;if(OR(t))return!1;if(BR(t))return t.types.every(r=>iN(r,e));if(pk(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return V2(r)?iN(r.type,e):!1}else return!1}else return!1}function Rg(t){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e){if(Oa(e))return e.name;if(dk(e)||V2(e))return e.name}}}function J2(t){var e;if(Oa(t))return Z2(t)?t.name:(e=Rg(t))!==null&&e!==void 0?e:t.name;if(dk(t)||V2(t)||PR(t))return t.name;if(Mu(t)){let r=Aae(t);if(r)return r}else if(fk(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function Aae(t){var e;if(t.inferredType)return t.inferredType.name;if(!((e=t.type)===null||e===void 0)&&e.ref)return J2(t.type.ref)}function uPe(t){var e,r,n;return so(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":Z2(t)?t.name:(n=Rg(t))!==null&&n!==void 0?n:t.name}function fN(t){var e,r,n;return so(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":(n=Rg(t))!==null&&n!==void 0?n:t.name}function Ng(t){let e={s:!1,i:!1,u:!1},r=Mg(t.definition,e),n=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(r,n)}function Mg(t,e){if(VR(t))return hPe(t);if(UR(t))return fPe(t);if(FR(t))return mPe(t);if(gk(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return Iu(Mg(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead})}else{if(zR(t))return pPe(t);if(HR(t))return dPe(t);if(GR(t)){let r=t.regex.lastIndexOf("/"),n=t.regex.substring(1,r),i=t.regex.substring(r+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),Iu(n,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}else{if(WR(t))return Iu(dN,{cardinality:t.cardinality,lookahead:t.lookahead});throw new Error(`Invalid terminal element: ${t?.$type}`)}}}function hPe(t){return Iu(t.elements.map(e=>Mg(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead})}function fPe(t){return Iu(t.elements.map(e=>Mg(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead})}function dPe(t){return Iu(`${dN}*?${Mg(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead})}function pPe(t){return Iu(`(?!${Mg(t.terminal)})${dN}*?`,{cardinality:t.cardinality,lookahead:t.lookahead})}function mPe(t){return t.right?Iu(`[${nN(t.left)}-${nN(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1}):Iu(nN(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}function nN(t){return ap(t.value)}function Iu(t,e){var r;return(e.wrap!==!1||e.lookahead)&&(t=`(${(r=e.lookahead)!==null&&r!==void 0?r:""}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var dN,Ol=N(()=>{"use strict";uk();Rc();Rl();is();Nl();Lg();o(wae,"getEntryRule");o(Tae,"getHiddenRules");o(K2,"getAllReachableRules");o(kae,"ruleDfs");o(aN,"getCrossReferenceTerminal");o(sN,"isCommentTerminal");o(oN,"findNodesForProperty");o(Q2,"findNodeForProperty");o(lN,"findNodesForPropertyInternal");o(aPe,"findNodesForKeyword");o(cN,"findNodeForKeyword");o(uN,"findNodesForKeywordInternal");o(hN,"findAssignment");o(kk,"findNameAssignment");o(Eae,"findNameAssignmentInternal");o(Sae,"getActionAtElement");o(sPe,"isOptionalCardinality");o(oPe,"isArrayCardinality");o(lPe,"isArrayOperator");o(Z2,"isDataTypeRule");o(Cae,"isDataTypeRuleInternal");o(cPe,"isDataType");o(iN,"isDataTypeInternal");o(Rg,"getExplicitRuleType");o(J2,"getTypeName");o(Aae,"getActionType");o(uPe,"getRuleTypeName");o(fN,"getRuleType");o(Ng,"terminalRegex");dN=/[\s\S]/.source;o(Mg,"abstractElementToRegex");o(hPe,"terminalAlternativesToRegex");o(fPe,"terminalGroupToRegex");o(dPe,"untilTokenToRegex");o(pPe,"negateTokenToRegex");o(mPe,"characterRangeToRegex");o(nN,"keywordToRegex");o(Iu,"withCardinality")});function pN(t){let e=[],r=t.Grammar;for(let n of r.rules)so(n)&&sN(n)&&eN(Ng(n))&&e.push(n.name);return{multilineCommentRules:e,nameRegexp:lk}}var mN=N(()=>{"use strict";Nl();Ol();Lg();Rc();o(pN,"createGrammarConfig")});var gN=N(()=>{"use strict"});function Ig(t){console&&console.error&&console.error(`Error: ${t}`)}function ex(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var _ae=N(()=>{"use strict";o(Ig,"PRINT_ERROR");o(ex,"PRINT_WARNING")});function tx(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var Dae=N(()=>{"use strict";o(tx,"timer")});function rx(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function n(){return typeof r.bar}return o(n,"fakeAccess"),n(),n(),t;(0,eval)(t)}var Lae=N(()=>{"use strict";o(rx,"toFastProperties")});var Og=N(()=>{"use strict";_ae();Dae();Lae()});function gPe(t){return yPe(t)?t.LABEL:t.name}function yPe(t){return yi(t.LABEL)&&t.LABEL!==""}function Sk(t){return Je(t,Pg)}function Pg(t){function e(r){return Je(r,Pg)}if(o(e,"convertDefinition"),t instanceof on){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return yi(t.label)&&(r.label=t.label),r}else{if(t instanceof Dn)return{type:"Alternative",definition:e(t.definition)};if(t instanceof ln)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof Ln)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof Rn)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:Pg(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof wn)return{type:"RepetitionWithSeparator",idx:t.idx,separator:Pg(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Or)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof Tn)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof kr){let r={type:"Terminal",name:t.terminalType.name,label:gPe(t.terminalType),idx:t.idx};yi(t.label)&&(r.terminalLabel=t.label);let n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=zo(n)?n.source:n),r}else{if(t instanceof as)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var oo,on,as,Dn,ln,Ln,Rn,Or,wn,Tn,kr,Ck=N(()=>{"use strict";qt();o(gPe,"tokenLabel");o(yPe,"hasTokenLabel");oo=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Ae(this.definition,r=>{r.accept(e)})}},on=class extends oo{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,ma(this,Os(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},as=class extends oo{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",ma(this,Os(e,r=>r!==void 0))}},Dn=class extends oo{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,ma(this,Os(e,r=>r!==void 0))}},ln=class extends oo{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Ln=class extends oo{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Rn=class extends oo{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Or=class extends oo{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},wn=class extends oo{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Tn=class extends oo{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,ma(this,Os(e,r=>r!==void 0))}},kr=class{static{o(this,"Terminal")}constructor(e){this.idx=1,ma(this,Os(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(Sk,"serializeGrammar");o(Pg,"serializeProduction")});var ss,Rae=N(()=>{"use strict";Ck();ss=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case on:return this.visitNonTerminal(r);case Dn:return this.visitAlternative(r);case ln:return this.visitOption(r);case Ln:return this.visitRepetitionMandatory(r);case Rn:return this.visitRepetitionMandatoryWithSeparator(r);case wn:return this.visitRepetitionWithSeparator(r);case Or:return this.visitRepetition(r);case Tn:return this.visitAlternation(r);case kr:return this.visitTerminal(r);case as:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function yN(t){return t instanceof Dn||t instanceof ln||t instanceof Or||t instanceof Ln||t instanceof Rn||t instanceof wn||t instanceof kr||t instanceof as}function sp(t,e=[]){return t instanceof ln||t instanceof Or||t instanceof wn?!0:t instanceof Tn?A2(t.definition,n=>sp(n,e)):t instanceof on&&qn(e,t)?!1:t instanceof oo?(t instanceof on&&e.push(t),Ma(t.definition,n=>sp(n,e))):!1}function vN(t){return t instanceof Tn}function Bs(t){if(t instanceof on)return"SUBRULE";if(t instanceof ln)return"OPTION";if(t instanceof Tn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Rn)return"AT_LEAST_ONE_SEP";if(t instanceof wn)return"MANY_SEP";if(t instanceof Or)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}var Nae=N(()=>{"use strict";qt();Ck();o(yN,"isSequenceProd");o(sp,"isOptionalProd");o(vN,"isBranchingProd");o(Bs,"getProductionDslName")});var os=N(()=>{"use strict";Ck();Rae();Nae()});function Mae(t,e,r){return[new ln({definition:[new kr({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var Ou,Ak=N(()=>{"use strict";qt();os();Ou=class{static{o(this,"RestWalker")}walk(e,r=[]){Ae(e.definition,(n,i)=>{let a=gi(e.definition,i+1);if(n instanceof on)this.walkProdRef(n,a,r);else if(n instanceof kr)this.walkTerminal(n,a,r);else if(n instanceof Dn)this.walkFlat(n,a,r);else if(n instanceof ln)this.walkOption(n,a,r);else if(n instanceof Ln)this.walkAtLeastOne(n,a,r);else if(n instanceof Rn)this.walkAtLeastOneSep(n,a,r);else if(n instanceof wn)this.walkManySep(n,a,r);else if(n instanceof Or)this.walkMany(n,a,r);else if(n instanceof Tn)this.walkOr(n,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,n){}walkProdRef(e,r,n){}walkFlat(e,r,n){let i=r.concat(n);this.walk(e,i)}walkOption(e,r,n){let i=r.concat(n);this.walk(e,i)}walkAtLeastOne(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkAtLeastOneSep(e,r,n){let i=Mae(e,r,n);this.walk(e,i)}walkMany(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkManySep(e,r,n){let i=Mae(e,r,n);this.walk(e,i)}walkOr(e,r,n){let i=r.concat(n);Ae(e.definition,a=>{let s=new Dn({definition:[a]});this.walk(s,i)})}};o(Mae,"restForRepetitionWithSeparator")});function op(t){if(t instanceof on)return op(t.referencedRule);if(t instanceof kr)return bPe(t);if(yN(t))return vPe(t);if(vN(t))return xPe(t);throw Error("non exhaustive match")}function vPe(t){let e=[],r=t.definition,n=0,i=r.length>n,a,s=!0;for(;i&&s;)a=r[n],s=sp(a),e=e.concat(op(a)),n=n+1,i=r.length>n;return Bm(e)}function xPe(t){let e=Je(t.definition,r=>op(r));return Bm(qr(e))}function bPe(t){return[t.terminalType]}var xN=N(()=>{"use strict";qt();os();o(op,"first");o(vPe,"firstForSequence");o(xPe,"firstForBranching");o(bPe,"firstForTerminal")});var _k,bN=N(()=>{"use strict";_k="_~IN~_"});function Iae(t){let e={};return Ae(t,r=>{let n=new wN(r).startWalking();ma(e,n)}),e}function wPe(t,e){return t.name+e+_k}var wN,Oae=N(()=>{"use strict";Ak();xN();qt();bN();os();wN=class extends Ou{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,n){}walkProdRef(e,r,n){let i=wPe(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(n),s=new Dn({definition:a}),l=op(s);this.follows[i]=l}};o(Iae,"computeAllProdsFollows");o(wPe,"buildBetweenProdsFollowPrefix")});function Bg(t){let e=t.toString();if(Dk.hasOwnProperty(e))return Dk[e];{let r=TPe.pattern(e);return Dk[e]=r,r}}function Pae(){Dk={}}var Dk,TPe,Lk=N(()=>{"use strict";j2();Dk={},TPe=new np;o(Bg,"getRegExpAst");o(Pae,"clearRegExpParserCache")});function $ae(t,e=!1){try{let r=Bg(t);return TN(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===Fae)e&&ex(`${nx} Unable to optimize: < ${t.toString()} > | |
| 702 | + Complement Sets cannot be automatically optimized. | |
| 703 | + This will disable the lexer's first char optimizations. | |
| 704 | + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let n="";e&&(n=` | |
| 705 | + This will disable the lexer's first char optimizations. | |
| 706 | + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),Ig(`${nx} | |
| 707 | + Failed parsing: < ${t.toString()} > | |
| 708 | + Using the @chevrotain/regexp-to-ast library | |
| 709 | + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+n)}}return[]}function TN(t,e,r){switch(t.type){case"Disjunction":for(let i=0;i<t.value.length;i++)TN(t.value[i],e,r);break;case"Alternative":let n=t.value;for(let i=0;i<n.length;i++){let a=n[i];switch(a.type){case"EndAnchor":case"GroupBackReference":case"Lookahead":case"NegativeLookahead":case"StartAnchor":case"WordBoundary":case"NonWordBoundary":continue}let s=a;switch(s.type){case"Character":Rk(s.value,e,r);break;case"Set":if(s.complement===!0)throw Error(Fae);Ae(s.value,u=>{if(typeof u=="number")Rk(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)Rk(f,e,r);else{for(let f=h.from;f<=h.to&&f<Fg;f++)Rk(f,e,r);if(h.to>=Fg){let f=h.from>=Fg?h.from:Fg,d=h.to,p=Ic(f),m=Ic(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":TN(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&kN(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return br(e)}function Rk(t,e,r){let n=Ic(t);e[n]=n,r===!0&&kPe(t,e)}function kPe(t,e){let r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){let i=Ic(n.charCodeAt(0));e[i]=i}else{let i=r.toLowerCase();if(i!==r){let a=Ic(i.charCodeAt(0));e[a]=a}}}function Bae(t,e){return ns(t.value,r=>{if(typeof r=="number")return qn(e,r);{let n=r;return ns(e,i=>n.from<=i&&i<=n.to)!==void 0}})}function kN(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Pt(t.value)?Ma(t.value,kN):kN(t.value):!1}function Nk(t,e){if(e instanceof RegExp){let r=Bg(e),n=new EN(t);return n.visit(r),n.found}else return ns(e,r=>qn(t,r.charCodeAt(0)))!==void 0}var Fae,nx,EN,zae=N(()=>{"use strict";j2();qt();Og();Lk();SN();Fae="Complement Sets are not supported for first char optimization",nx=`Unable to use "first char" lexer optimizations: | |
| 710 | +`;o($ae,"getOptimizedStartCodesIndices");o(TN,"firstCharOptimizedIndices");o(Rk,"addOptimizedIdxToResult");o(kPe,"handleIgnoreCase");o(Bae,"findCode");o(kN,"isWholeOptional");EN=class extends Mc{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){qn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?Bae(e,this.targetCharCodes)===void 0&&(this.found=!0):Bae(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(Nk,"canMatchCharCode")});function Uae(t,e){e=Qh(e,{useSticky:AN,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` | |
| 711 | +`],tracer:o((b,w)=>w(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{GPe()});let n;r("Reject Lexer.NA",()=>{n=Jh(t,b=>b[lp]===Xn.NA)});let i=!1,a;r("Transform Patterns",()=>{i=!1,a=Je(n,b=>{let w=b[lp];if(zo(w)){let C=w.source;return C.length===1&&C!=="^"&&C!=="$"&&C!=="."&&!w.ignoreCase?C:C.length===2&&C[0]==="\\"&&!qn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],C[1])?C[1]:e.useSticky?Vae(w):Gae(w)}else{if(Si(w))return i=!0,{exec:w};if(typeof w=="object")return i=!0,w;if(typeof w=="string"){if(w.length===1)return w;{let C=w.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),T=new RegExp(C);return e.useSticky?Vae(T):Gae(T)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=Je(n,b=>b.tokenTypeIdx),l=Je(n,b=>{let w=b.GROUP;if(w!==Xn.SKIPPED){if(yi(w))return w;if(pr(w))return!1;throw Error("non exhaustive match")}}),u=Je(n,b=>{let w=b.LONGER_ALT;if(w)return Pt(w)?Je(w,T=>UT(n,T)):[UT(n,w)]}),h=Je(n,b=>b.PUSH_MODE),f=Je(n,b=>Bt(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=Qae(e.lineTerminatorCharacters);d=Je(n,w=>!1),e.positionTracking!=="onlyOffset"&&(d=Je(n,w=>Bt(w,"LINE_BREAKS")?!!w.LINE_BREAKS:Kae(w,b)===!1&&Nk(b,w.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=Je(n,Xae),m=Je(a,$Pe),g=Xr(n,(b,w)=>{let C=w.GROUP;return yi(C)&&C!==Xn.SKIPPED&&(b[C]=[]),b},{}),y=Je(a,(b,w)=>({pattern:a[w],longerAlt:u[w],canLineTerminator:d[w],isCustom:p[w],short:m[w],group:l[w],push:h[w],pop:f[w],tokenTypeIdx:s[w],tokenType:n[w]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=Xr(n,(b,w,C)=>{if(typeof w.PATTERN=="string"){let T=w.PATTERN.charCodeAt(0),E=Ic(T);CN(b,E,y[C])}else if(Pt(w.START_CHARS_HINT)){let T;Ae(w.START_CHARS_HINT,E=>{let A=typeof E=="string"?E.charCodeAt(0):E,S=Ic(A);T!==S&&(T=S,CN(b,S,y[C]))})}else if(zo(w.PATTERN))if(w.PATTERN.unicode)v=!1,e.ensureOptimizations&&Ig(`${nx} Unable to analyze < ${w.PATTERN.toString()} > pattern. | |
| 712 | + The regexp unicode flag is not currently supported by the regexp-to-ast library. | |
| 713 | + This will disable the lexer's first char optimizations. | |
| 714 | + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let T=$ae(w.PATTERN,e.ensureOptimizations);ur(T)&&(v=!1),Ae(T,E=>{CN(b,E,y[C])})}else e.ensureOptimizations&&Ig(`${nx} TokenType: <${w.name}> is using a custom token pattern without providing <start_chars_hint> parameter. | |
| 715 | + This will disable the lexer's first char optimizations. | |
| 716 | + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:i,canBeOptimized:v}}function Hae(t,e){let r=[],n=SPe(t);r=r.concat(n.errors);let i=CPe(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat(EPe(a)),r=r.concat(IPe(a)),r=r.concat(OPe(a,e)),r=r.concat(PPe(a)),r}function EPe(t){let e=[],r=Yr(t,n=>zo(n[lp]));return e=e.concat(_Pe(r)),e=e.concat(RPe(r)),e=e.concat(NPe(r)),e=e.concat(MPe(r)),e=e.concat(DPe(r)),e}function SPe(t){let e=Yr(t,i=>!Bt(i,lp)),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:Yn.MISSING_PATTERN,tokenTypes:[i]})),n=Zh(t,e);return{errors:r,valid:n}}function CPe(t){let e=Yr(t,i=>{let a=i[lp];return!zo(a)&&!Si(a)&&!Bt(a,"exec")&&!yi(a)}),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:Yn.INVALID_PATTERN,tokenTypes:[i]})),n=Zh(t,e);return{errors:r,valid:n}}function _Pe(t){class e extends Mc{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Bg(a),l=new e;return l.visit(s),l.found}catch{return APe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error: | |
| 717 | + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$' | |
| 718 | + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Yn.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function DPe(t){let e=Yr(t,n=>n.PATTERN.test(""));return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' must not match an empty string",type:Yn.EMPTY_MATCH_PATTERN,tokenTypes:[n]}))}function RPe(t){class e extends Mc{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Bg(a),l=new e;return l.visit(s),l.found}catch{return LPe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error: | |
| 719 | + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^' | |
| 720 | + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Yn.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function NPe(t){let e=Yr(t,n=>{let i=n[lp];return i instanceof RegExp&&(i.multiline||i.global)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:Yn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}))}function MPe(t){let e=[],r=Je(t,a=>Xr(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!qn(e,l)&&l.PATTERN!==Xn.NA&&(e.push(l),s.push(l)),s),[]));r=Tc(r);let n=Yr(r,a=>a.length>1);return Je(n,a=>{let s=Je(a,u=>u.name);return{message:`The same RegExp pattern ->${ia(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:Yn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function IPe(t){let e=Yr(t,n=>{if(!Bt(n,"GROUP"))return!1;let i=n.GROUP;return i!==Xn.SKIPPED&&i!==Xn.NA&&!yi(i)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:Yn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}))}function OPe(t,e){let r=Yr(t,i=>i.PUSH_MODE!==void 0&&!qn(e,i.PUSH_MODE));return Je(r,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:Yn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function PPe(t){let e=[],r=Xr(t,(n,i,a)=>{let s=i.PATTERN;return s===Xn.NA||(yi(s)?n.push({str:s,idx:a,tokenType:i}):zo(s)&&FPe(s)&&n.push({str:s.source,idx:a,tokenType:i})),n},[]);return Ae(t,(n,i)=>{Ae(r,({str:a,idx:s,tokenType:l})=>{if(i<s&&BPe(a,n.PATTERN)){let u=`Token: ->${l.name}<- can never be matched. | |
| 721 | +Because it appears AFTER the Token Type ->${n.name}<-in the lexer's definition. | |
| 722 | +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:Yn.UNREACHABLE_PATTERN,tokenTypes:[n,l]})}})}),e}function BPe(t,e){if(zo(e)){let r=e.exec(t);return r!==null&&r.index===0}else{if(Si(e))return e(t,0,[],{});if(Bt(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function FPe(t){return ns([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function Gae(t){let e=t.ignoreCase?"i":"";return new RegExp(`^(?:${t.source})`,e)}function Vae(t){let e=t.ignoreCase?"iy":"y";return new RegExp(`${t.source}`,e)}function Wae(t,e,r){let n=[];return Bt(t,$g)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+$g+`> property in its definition | |
| 723 | +`,type:Yn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Bt(t,Mk)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+Mk+`> property in its definition | |
| 724 | +`,type:Yn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Bt(t,Mk)&&Bt(t,$g)&&!Bt(t.modes,t.defaultMode)&&n.push({message:`A MultiMode Lexer cannot be initialized with a ${$g}: <${t.defaultMode}>which does not exist | |
| 725 | +`,type:Yn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Bt(t,Mk)&&Ae(t.modes,(i,a)=>{Ae(i,(s,l)=>{if(pr(s))n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> | |
| 726 | +`,type:Yn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Bt(s,"LONGER_ALT")){let u=Pt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Ae(u,h=>{!pr(h)&&!qn(i,h)&&n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> | |
| 727 | +`,type:Yn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),n}function qae(t,e,r){let n=[],i=!1,a=Tc(qr(br(t.modes))),s=Jh(a,u=>u[lp]===Xn.NA),l=Qae(r);return e&&Ae(s,u=>{let h=Kae(u,l);if(h!==!1){let d={message:zPe(u,h),type:h.issue,tokenType:u};n.push(d)}else Bt(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(i=!0):Nk(l,u.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found. | |
| 728 | + This Lexer has been defined to track line and column information, | |
| 729 | + But none of the Token Types can be identified as matching a line terminator. | |
| 730 | + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS | |
| 731 | + for details.`,type:Yn.NO_LINE_BREAKS_FLAGS}),n}function Yae(t){let e={},r=zr(t);return Ae(r,n=>{let i=t[n];if(Pt(i))e[n]=[];else throw Error("non exhaustive match")}),e}function Xae(t){let e=t.PATTERN;if(zo(e))return!1;if(Si(e))return!0;if(Bt(e,"exec"))return!0;if(yi(e))return!1;throw Error("non exhaustive match")}function $Pe(t){return yi(t)&&t.length===1?t.charCodeAt(0):!1}function Kae(t,e){if(Bt(t,"LINE_BREAKS"))return!1;if(zo(t.PATTERN)){try{Nk(e,t.PATTERN)}catch(r){return{issue:Yn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(yi(t.PATTERN))return!1;if(Xae(t))return{issue:Yn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function zPe(t,e){if(e.issue===Yn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. | |
| 732 | + The problem is in the <${t.name}> Token Type | |
| 733 | + Root cause: ${e.errMsg}. | |
| 734 | + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===Yn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option. | |
| 735 | + The problem is in the <${t.name}> Token Type | |
| 736 | + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function Qae(t){return Je(t,r=>yi(r)?r.charCodeAt(0):r)}function CN(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Ic(t){return t<Fg?t:Ik[t]}function GPe(){if(ur(Ik)){Ik=new Array(65536);for(let t=0;t<65536;t++)Ik[t]=t>255?255+~~(t/255):t}}var lp,$g,Mk,AN,APe,LPe,jae,Fg,Ik,SN=N(()=>{"use strict";j2();ix();qt();Og();zae();Lk();lp="PATTERN",$g="defaultMode",Mk="modes",AN=typeof new RegExp("(?:)").sticky=="boolean";o(Uae,"analyzeTokenTypes");o(Hae,"validatePatterns");o(EPe,"validateRegExpPattern");o(SPe,"findMissingPatterns");o(CPe,"findInvalidPatterns");APe=/[^\\][$]/;o(_Pe,"findEndOfInputAnchor");o(DPe,"findEmptyMatchRegExps");LPe=/[^\\[][\^]|^\^/;o(RPe,"findStartOfInputAnchor");o(NPe,"findUnsupportedFlags");o(MPe,"findDuplicatePatterns");o(IPe,"findInvalidGroupType");o(OPe,"findModesThatDoNotExist");o(PPe,"findUnreachablePatterns");o(BPe,"testTokenType");o(FPe,"noMetaChar");o(Gae,"addStartOfInput");o(Vae,"addStickyFlag");o(Wae,"performRuntimeChecks");o(qae,"performWarningRuntimeChecks");o(Yae,"cloneEmptyGroups");o(Xae,"isCustomPattern");o($Pe,"isShortPattern");jae={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r<e;r++){let n=t.charCodeAt(r);if(n===10)return this.lastIndex=r+1,!0;if(n===13)return t.charCodeAt(r+1)===10?this.lastIndex=r+2:this.lastIndex=r+1,!0}return!1},"test"),lastIndex:0};o(Kae,"checkLineBreaksIssues");o(zPe,"buildLineBreakIssueMessage");o(Qae,"getCharCodes");o(CN,"addToMapOfArrays");Fg=256,Ik=[];o(Ic,"charCodeToOptimizedIndex");o(GPe,"initCharCodeToOptimizedIndexMap")});function Pu(t,e){let r=t.tokenTypeIdx;return r===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[r]===!0}function zg(t,e){return t.tokenTypeIdx===e.tokenTypeIdx}function Bu(t){let e=VPe(t);UPe(e),WPe(e),HPe(e),Ae(e,r=>{r.isParent=r.categoryMatches.length>0})}function VPe(t){let e=an(t),r=t,n=!0;for(;n;){r=Tc(qr(Je(r,a=>a.CATEGORIES)));let i=Zh(r,e);e=e.concat(i),ur(i)?n=!1:r=i}return e}function UPe(t){Ae(t,e=>{_N(e)||(ese[Zae]=e,e.tokenTypeIdx=Zae++),Jae(e)&&!Pt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Jae(e)||(e.CATEGORIES=[]),qPe(e)||(e.categoryMatches=[]),YPe(e)||(e.categoryMatchesMap={})})}function HPe(t){Ae(t,e=>{e.categoryMatches=[],Ae(e.categoryMatchesMap,(r,n)=>{e.categoryMatches.push(ese[n].tokenTypeIdx)})})}function WPe(t){Ae(t,e=>{tse([],e)})}function tse(t,e){Ae(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Ae(e.CATEGORIES,r=>{let n=t.concat(e);qn(n,r)||tse(n,r)})}function _N(t){return Bt(t,"tokenTypeIdx")}function Jae(t){return Bt(t,"CATEGORIES")}function qPe(t){return Bt(t,"categoryMatches")}function YPe(t){return Bt(t,"categoryMatchesMap")}function rse(t){return Bt(t,"tokenTypeIdx")}var Zae,ese,cp=N(()=>{"use strict";qt();o(Pu,"tokenStructuredMatcher");o(zg,"tokenStructuredMatcherNoCategories");Zae=1,ese={};o(Bu,"augmentTokenTypes");o(VPe,"expandCategories");o(UPe,"assignTokenDefaultProps");o(HPe,"assignCategoriesTokensProp");o(WPe,"assignCategoriesMapProp");o(tse,"singleAssignCategoriesToksMap");o(_N,"hasShortKeyProperty");o(Jae,"hasCategoriesProperty");o(qPe,"hasExtendingTokensTypesProperty");o(YPe,"hasExtendingTokensTypesMapProperty");o(rse,"isTokenType")});var Gg,DN=N(()=>{"use strict";Gg={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,n,i){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var Yn,ax,Xn,ix=N(()=>{"use strict";SN();qt();Og();cp();DN();Lk();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(Yn||(Yn={}));ax={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` | |
| 737 | +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:Gg,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(ax);Xn=class{static{o(this,"Lexer")}constructor(e,r=ax){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent<this.traceInitMaxIdent&&console.log(`${s}--> <${i}>`);let{time:l,value:u}=tx(a),h=l>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&h(`${s}<-- <${i}> time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. | |
| 738 | +a boolean 2nd argument is no longer supported`);this.config=ma({},ax,r);let n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===ax.lineTerminatorsPattern)this.config.lineTerminatorsPattern=jae;else if(this.config.lineTerminatorCharacters===ax.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config. | |
| 739 | + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Pt(e)?i={modes:{defaultMode:an(e)},defaultMode:$g}:(a=!1,i=an(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(Wae(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(qae(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},Ae(i.modes,(l,u)=>{i.modes[u]=Jh(l,h=>pr(h))});let s=zr(i.modes);if(Ae(i.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(Hae(l,s))}),ur(this.lexerDefinitionErrors)){Bu(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=Uae(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=ma({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=i.defaultMode,!ur(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=Je(this.lexerDefinitionErrors,h=>h.message).join(`----------------------- | |
| 740 | +`);throw new Error(`Errors detected in definition of Lexer: | |
| 741 | +`+u)}Ae(this.lexerDefinitionWarning,l=>{ex(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(AN?(this.chopInput=ta,this.match=this.matchWithTest):(this.updateLastIndex=ni,this.match=this.matchWithExec),a&&(this.handleModes=ni),this.trackStartLines===!1&&(this.computeNewColumn=ta),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=ni),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid <positionTracking> config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=Xr(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!ur(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized. | |
| 742 | + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. | |
| 743 | + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{Pae()}),this.TRACE_INIT("toFastProperties",()=>{rx(this)})})}tokenize(e,r=this.defaultMode){if(!ur(this.lexerDefinitionErrors)){let i=Je(this.lexerDefinitionErrors,a=>a.message).join(`----------------------- | |
| 744 | +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: | |
| 745 | +`+i)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let n,i,a,s,l,u,h,f,d,p,m,g,y,v,x,b,w=e,C=w.length,T=0,E=0,A=this.hasCustom?0:Math.floor(e.length/10),S=new Array(A),_=[],I=this.trackStartLines?1:void 0,D=this.trackStartLines?1:void 0,k=Yae(this.emptyGroups),L=this.trackStartLines,R=this.config.lineTerminatorsPattern,O=0,M=[],B=[],F=[],P=[];Object.freeze(P);let z;function $(){return M}o($,"getPossiblePatternsSlow");function H(le){let he=Ic(le),K=B[he];return K===void 0?P:K}o(H,"getPossiblePatternsOptimized");let Q=o(le=>{if(F.length===1&&le.tokenType.PUSH_MODE===void 0){let he=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(le);_.push({offset:le.startOffset,line:le.startLine,column:le.startColumn,length:le.image.length,message:he})}else{F.pop();let he=ga(F);M=this.patternIdxToConfig[he],B=this.charCodeToPatternIdxToConfig[he],O=M.length;let K=this.canModeBeOptimized[he]&&this.config.safeMode===!1;B&&K?z=H:z=$}},"pop_mode");function j(le){F.push(le),B=this.charCodeToPatternIdxToConfig[le],M=this.patternIdxToConfig[le],O=M.length,O=M.length;let he=this.canModeBeOptimized[le]&&this.config.safeMode===!1;B&&he?z=H:z=$}o(j,"push_mode"),j.call(this,r);let ie,ne=this.config.recoveryEnabled;for(;T<C;){u=null;let le=w.charCodeAt(T),he=z(le),K=he.length;for(n=0;n<K;n++){ie=he[n];let X=ie.pattern;h=null;let te=ie.short;if(te!==!1?le===te&&(u=X):ie.isCustom===!0?(b=X.exec(w,T,S,k),b!==null?(u=b[0],b.payload!==void 0&&(h=b.payload)):u=null):(this.updateLastIndex(X,T),u=this.match(X,e,T)),u!==null){if(l=ie.longerAlt,l!==void 0){let J=l.length;for(a=0;a<J;a++){let se=M[l[a]],ue=se.pattern;if(f=null,se.isCustom===!0?(b=ue.exec(w,T,S,k),b!==null?(s=b[0],b.payload!==void 0&&(f=b.payload)):s=null):(this.updateLastIndex(ue,T),s=this.match(ue,e,T)),s&&s.length>u.length){u=s,h=f,ie=se;break}}}break}}if(u!==null){if(d=u.length,p=ie.group,p!==void 0&&(m=ie.tokenTypeIdx,g=this.createTokenInstance(u,T,m,ie.tokenType,I,D,d),this.handlePayload(g,h),p===!1?E=this.addToken(S,E,g):k[p].push(g)),e=this.chopInput(e,d),T=T+d,D=this.computeNewColumn(D,d),L===!0&&ie.canLineTerminator===!0){let X=0,te,J;R.lastIndex=0;do te=R.test(u),te===!0&&(J=R.lastIndex-1,X++);while(te===!0);X!==0&&(I=I+X,D=d-J,this.updateTokenEndLineColumnLocation(g,p,J,X,I,D,d))}this.handleModes(ie,Q,j,g)}else{let X=T,te=I,J=D,se=ne===!1;for(;se===!1&&T<C;)for(e=this.chopInput(e,1),T++,i=0;i<O;i++){let ue=M[i],Z=ue.pattern,Se=ue.short;if(Se!==!1?w.charCodeAt(T)===Se&&(se=!0):ue.isCustom===!0?se=Z.exec(w,T,S,k)!==null:(this.updateLastIndex(Z,T),se=Z.exec(e)!==null),se===!0)break}if(y=T-X,D=this.computeNewColumn(D,y),x=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(w,X,y,te,J),_.push({offset:X,line:te,column:J,length:y,message:x}),ne===!1)break}}return this.hasCustom||(S.length=E),{tokens:S,groups:k,errors:_}}handleModes(e,r,n,i){if(e.pop===!0){let a=e.push;r(i),a!==void 0&&n.call(this,a)}else e.push!==void 0&&n.call(this,e.push)}chopInput(e,r){return e.substring(r)}updateLastIndex(e,r){e.lastIndex=r}updateTokenEndLineColumnLocation(e,r,n,i,a,s,l){let u,h;r!==void 0&&(u=n===l-1,h=u?-1:0,i===1&&u===!0||(e.endLine=a+h,e.endColumn=s-1+-h))}computeNewColumn(e,r){return e+r}createOffsetOnlyToken(e,r,n,i){return{image:e,startOffset:r,tokenTypeIdx:n,tokenType:i}}createStartOnlyToken(e,r,n,i,a,s){return{image:e,startOffset:r,startLine:a,startColumn:s,tokenTypeIdx:n,tokenType:i}}createFullToken(e,r,n,i,a,s,l){return{image:e,startOffset:r,endOffset:r+l-1,startLine:a,endLine:a,startColumn:s,endColumn:s+l-1,tokenTypeIdx:n,tokenType:i}}addTokenUsingPush(e,r,n){return e.push(n),r}addTokenUsingMemberAccess(e,r,n){return e[r]=n,r++,r}handlePayloadNoCustom(e,r){}handlePayloadWithCustom(e,r){r!==null&&(e.payload=r)}matchWithTest(e,r,n){return e.test(r)===!0?r.substring(n,e.lastIndex):null}matchWithExec(e,r){let n=e.exec(r);return n!==null?n[0]:null}};Xn.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.";Xn.NA=/NOT_APPLICABLE/});function Fu(t){return LN(t)?t.LABEL:t.name}function LN(t){return yi(t.LABEL)&&t.LABEL!==""}function of(t){return jPe(t)}function jPe(t){let e=t.pattern,r={};if(r.name=t.name,pr(e)||(r.PATTERN=e),Bt(t,XPe))throw`The parent property is no longer supported. | |
| 746 | +See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return Bt(t,nse)&&(r.CATEGORIES=t[nse]),Bu([r]),Bt(t,ise)&&(r.LABEL=t[ise]),Bt(t,ase)&&(r.GROUP=t[ase]),Bt(t,ose)&&(r.POP_MODE=t[ose]),Bt(t,sse)&&(r.PUSH_MODE=t[sse]),Bt(t,lse)&&(r.LONGER_ALT=t[lse]),Bt(t,cse)&&(r.LINE_BREAKS=t[cse]),Bt(t,use)&&(r.START_CHARS_HINT=t[use]),r}function $u(t,e,r,n,i,a,s,l){return{image:e,startOffset:r,endOffset:n,startLine:i,endLine:a,startColumn:s,endColumn:l,tokenTypeIdx:t.tokenTypeIdx,tokenType:t}}function sx(t,e){return Pu(t,e)}var XPe,nse,ise,ase,sse,ose,lse,cse,use,lo,up=N(()=>{"use strict";qt();ix();cp();o(Fu,"tokenLabel");o(LN,"hasTokenLabel");XPe="parent",nse="categories",ise="label",ase="group",sse="push_mode",ose="pop_mode",lse="longer_alt",cse="line_breaks",use="start_chars_hint";o(of,"createToken");o(jPe,"createTokenInternal");lo=of({name:"EOF",pattern:Xn.NA});Bu([lo]);o($u,"createTokenInstance");o(sx,"tokenMatcher")});var zu,hse,Pl,Vg=N(()=>{"use strict";up();qt();os();zu={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:n}){return`Expecting ${LN(t)?`--> ${Fu(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:n,ruleName:i}){let a="Expecting: ",l=` | |
| 747 | +but found: '`+ia(e).image+"'";if(n)return a+n+l;{let u=Xr(t,(p,m)=>p.concat(m),[]),h=Je(u,p=>`[${Je(p,m=>Fu(m)).join(", ")}]`),d=`one of these possible Token sequences: | |
| 748 | +${Je(h,(p,m)=>` ${m+1}. ${p}`).join(` | |
| 749 | +`)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:n}){let i="Expecting: ",s=` | |
| 750 | +but found: '`+ia(e).image+"'";if(r)return i+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences:: | |
| 751 | + <${Je(t,h=>`[${Je(h,f=>Fu(f)).join(",")}]`).join(" ,")}>`;return i+u+s}}};Object.freeze(zu);hse={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- | |
| 752 | +inside top level rule: ->`+t.name+"<-"}},Pl={buildDuplicateFoundError(t,e){function r(f){return f instanceof kr?f.terminalType.name:f instanceof on?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let n=t.name,i=ia(e),a=i.idx,s=Bs(i),l=r(i),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} | |
| 753 | + appears more than once (${e.length} times) in the top level rule: ->${n}<-. | |
| 754 | + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES | |
| 755 | + `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,` | |
| 756 | +`),h},buildNamespaceConflictError(t){return`Namespace conflict found in grammar. | |
| 757 | +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>. | |
| 758 | +To resolve this make sure each Terminal and Non-Terminal names are unique | |
| 759 | +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter | |
| 760 | +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix | |
| 761 | +in <OR${r}> inside <${t.topLevelRule.name}> Rule, | |
| 762 | +<${e}> may appears as a prefix path in all these alternatives. | |
| 763 | +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX | |
| 764 | +For Further details.`},buildAlternationAmbiguityError(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in <OR${r}> inside <${t.topLevelRule.name}> Rule, | |
| 765 | +<${e}> may appears as a prefix path in all these alternatives. | |
| 766 | +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES | |
| 767 | +For Further details.`,n},buildEmptyRepetitionError(t){let e=Bs(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens. | |
| 768 | +This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in <OR${t.alternation.idx}> inside <${t.topLevelRule.name}> Rule. | |
| 769 | +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives: | |
| 770 | +<OR${t.alternation.idx}> inside <${t.topLevelRule.name}> Rule. | |
| 771 | + has ${t.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(t){let e=t.topLevelRule.name,r=Je(t.leftRecursionPath,a=>a.name),n=`${e} --> ${r.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar. | |
| 772 | +rule: <${e}> can be invoked from itself (directly or indirectly) | |
| 773 | +without consuming any Tokens. The grammar path that causes this is: | |
| 774 | + ${n} | |
| 775 | + To fix this refactor your grammar to remove the left recursion. | |
| 776 | +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof as?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function fse(t,e){let r=new RN(t,e);return r.resolveRefs(),r.errors}var RN,dse=N(()=>{"use strict";Fs();qt();os();o(fse,"resolveGrammar");RN=class extends ss{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Ae(br(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:n,type:zi.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function Fk(t,e,r=[]){r=an(r);let n=[],i=0;function a(l){return l.concat(gi(t,i+1))}o(a,"remainingPathWith");function s(l){let u=Fk(a(l),e,r);return n.concat(u)}for(o(s,"getAlternativesForProd");r.length<e&&i<t.length;){let l=t[i];if(l instanceof Dn)return s(l.definition);if(l instanceof on)return s(l.definition);if(l instanceof ln)n=s(l.definition);else if(l instanceof Ln){let u=l.definition.concat([new Or({definition:l.definition})]);return s(u)}else if(l instanceof Rn){let u=[new Dn({definition:l.definition}),new Or({definition:[new kr({terminalType:l.separator})].concat(l.definition)})];return s(u)}else if(l instanceof wn){let u=l.definition.concat([new Or({definition:[new kr({terminalType:l.separator})].concat(l.definition)})]);n=s(u)}else if(l instanceof Or){let u=l.definition.concat([new Or({definition:l.definition})]);n=s(u)}else{if(l instanceof Tn)return Ae(l.definition,u=>{ur(u.definition)===!1&&(n=s(u.definition))}),n;if(l instanceof kr)r.push(l.terminalType);else throw Error("non exhaustive match")}i++}return n.push({partialPath:r,suffixDef:gi(t,i)}),n}function $k(t,e,r,n){let i="EXIT_NONE_TERMINAL",a=[i],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-n-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!ur(d);){let p=d.pop();if(p===s){l&&ga(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(ur(m))continue;let x=m[0];if(x===i){let b={idx:g,def:gi(m),ruleStack:Nu(y),occurrenceStack:Nu(v)};d.push(b)}else if(x instanceof kr)if(g<u-1){let b=g+1,w=e[b];if(r(w,x.terminalType)){let C={idx:b,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(C)}}else if(g===u-1)f.push({nextTokenType:x.terminalType,nextTokenOccurrence:x.idx,ruleStack:y,occurrenceStack:v}),l=!0;else throw Error("non exhaustive match");else if(x instanceof on){let b=an(y);b.push(x.nonTerminalName);let w=an(v);w.push(x.idx);let C={idx:g,def:x.definition.concat(a,gi(m)),ruleStack:b,occurrenceStack:w};d.push(C)}else if(x instanceof ln){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w={idx:g,def:x.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v};d.push(w)}else if(x instanceof Ln){let b=new Or({definition:x.definition,idx:x.idx}),w=x.definition.concat([b],gi(m)),C={idx:g,def:w,ruleStack:y,occurrenceStack:v};d.push(C)}else if(x instanceof Rn){let b=new kr({terminalType:x.separator}),w=new Or({definition:[b].concat(x.definition),idx:x.idx}),C=x.definition.concat([w],gi(m)),T={idx:g,def:C,ruleStack:y,occurrenceStack:v};d.push(T)}else if(x instanceof wn){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w=new kr({terminalType:x.separator}),C=new Or({definition:[w].concat(x.definition),idx:x.idx}),T=x.definition.concat([C],gi(m)),E={idx:g,def:T,ruleStack:y,occurrenceStack:v};d.push(E)}else if(x instanceof Or){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w=new Or({definition:x.definition,idx:x.idx}),C=x.definition.concat([w],gi(m)),T={idx:g,def:C,ruleStack:y,occurrenceStack:v};d.push(T)}else if(x instanceof Tn)for(let b=x.definition.length-1;b>=0;b--){let w=x.definition[b],C={idx:g,def:w.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v};d.push(C),d.push(s)}else if(x instanceof Dn)d.push({idx:g,def:x.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof as)d.push(KPe(x,g,y,v));else throw Error("non exhaustive match")}return f}function KPe(t,e,r,n){let i=an(r);i.push(t.name);let a=an(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}var NN,Ok,Ug,Pk,ox,Bk,lx,cx=N(()=>{"use strict";qt();xN();Ak();os();NN=class extends Ou{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=an(this.path.ruleStack).reverse(),this.occurrenceStack=an(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,n){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=r.concat(n);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){ur(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},Ok=class extends NN{static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,n){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=r.concat(n),a=new Dn({definition:i});this.possibleTokTypes=op(a),this.found=!0}}},Ug=class extends Ou{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},Pk=class extends Ug{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,r,n)}},ox=class extends Ug{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,r,n)}},Bk=class extends Ug{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,r,n)}},lx=class extends Ug{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,r,n)}};o(Fk,"possiblePathsFrom");o($k,"nextPossibleTokensAfter");o(KPe,"expandTopLevelRule")});function ux(t){if(t instanceof ln||t==="Option")return jn.OPTION;if(t instanceof Or||t==="Repetition")return jn.REPETITION;if(t instanceof Ln||t==="RepetitionMandatory")return jn.REPETITION_MANDATORY;if(t instanceof Rn||t==="RepetitionMandatoryWithSeparator")return jn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof wn||t==="RepetitionWithSeparator")return jn.REPETITION_WITH_SEPARATOR;if(t instanceof Tn||t==="Alternation")return jn.ALTERNATION;throw Error("non exhaustive match")}function Gk(t){let{occurrence:e,rule:r,prodType:n,maxLookahead:i}=t,a=ux(n);return a===jn.ALTERNATION?Hg(e,r,i):Wg(e,r,a,i)}function mse(t,e,r,n,i,a){let s=Hg(t,e,r),l=wse(s)?zg:Pu;return a(s,n,l,i)}function gse(t,e,r,n,i,a){let s=Wg(t,e,i,r),l=wse(s)?zg:Pu;return a(s[0],l,n)}function yse(t,e,r,n){let i=t.length,a=Ma(t,s=>Ma(s,l=>l.length===1));if(e)return function(s){let l=Je(s,u=>u.GATE);for(let u=0;u<i;u++){let h=t[u],f=h.length,d=l[u];if(!(d!==void 0&&d.call(this)===!1))e:for(let p=0;p<f;p++){let m=h[p],g=m.length;for(let y=0;y<g;y++){let v=this.LA(y+1);if(r(v,m[y])===!1)continue e}return u}}};if(a&&!n){let s=Je(t,u=>qr(u)),l=Xr(s,(u,h,f)=>(Ae(h,d=>{Bt(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Ae(d.categoryMatches,p=>{Bt(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;s<i;s++){let l=t[s],u=l.length;e:for(let h=0;h<u;h++){let f=l[h],d=f.length;for(let p=0;p<d;p++){let m=this.LA(p+1);if(r(m,f[p])===!1)continue e}return s}}}}function vse(t,e,r){let n=Ma(t,a=>a.length===1),i=t.length;if(n&&!r){let a=qr(t);if(a.length===1&&ur(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=Xr(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Ae(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;a<i;a++){let s=t[a],l=s.length;for(let u=0;u<l;u++){let h=this.LA(u+1);if(e(h,s[u])===!1)continue e}return!0}return!1}}function pse(t){let e=new Array(t);for(let r=0;r<t;r++)e[r]=[];return e}function MN(t){let e=[""];for(let r=0;r<t.length;r++){let n=t[r],i=[];for(let a=0;a<e.length;a++){let s=e[a];i.push(s+"_"+n.tokenTypeIdx);for(let l=0;l<n.categoryMatches.length;l++){let u="_"+n.categoryMatches[l];i.push(s+u)}}e=i}return e}function QPe(t,e,r){for(let n=0;n<t.length;n++){if(n===r)continue;let i=t[n];for(let a=0;a<e.length;a++){let s=e[a];if(i[s]===!0)return!1}}return!0}function xse(t,e){let r=Je(t,s=>Fk([s],1)),n=pse(r.length),i=Je(r,s=>{let l={};return Ae(s,u=>{let h=MN(u.partialPath);Ae(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=pse(l.length);for(let u=0;u<l.length;u++){let h=l[u];for(let f=0;f<h.length;f++){let d=h[f].partialPath,p=h[f].suffixDef,m=MN(d);if(QPe(i,m,u)||ur(p)||d.length===e){let y=n[u];if(Vk(y,d)===!1){y.push(d);for(let v=0;v<m.length;v++){let x=m[v];i[u][x]=!0}}}else{let y=Fk(p,s+1,d);a[u]=a[u].concat(y),Ae(y,v=>{let x=MN(v.partialPath);Ae(x,b=>{i[u][b]=!0})})}}}}return n}function Hg(t,e,r,n){let i=new zk(t,jn.ALTERNATION,n);return e.accept(i),xse(i.result,r)}function Wg(t,e,r,n){let i=new zk(t,r);e.accept(i);let a=i.result,l=new IN(e,t,r).startWalking(),u=new Dn({definition:a}),h=new Dn({definition:l});return xse([u,h],n)}function Vk(t,e){e:for(let r=0;r<t.length;r++){let n=t[r];if(n.length===e.length){for(let i=0;i<n.length;i++){let a=e[i],s=n[i];if((a===s||s.categoryMatchesMap[a.tokenTypeIdx]!==void 0)===!1)continue e}return!0}}return!1}function bse(t,e){return t.length<e.length&&Ma(t,(r,n)=>{let i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}function wse(t){return Ma(t,e=>Ma(e,r=>Ma(r,n=>ur(n.categoryMatches))))}var jn,IN,zk,qg=N(()=>{"use strict";qt();cx();Ak();cp();os();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(jn||(jn={}));o(ux,"getProdType");o(Gk,"getLookaheadPaths");o(mse,"buildLookaheadFuncForOr");o(gse,"buildLookaheadFuncForOptionalProd");o(yse,"buildAlternativesLookAheadFunc");o(vse,"buildSingleAlternativeLookaheadFunction");IN=class extends Ou{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,n){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=n}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,n,i){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=n.concat(i),!0):!1}walkOption(e,r,n){this.checkIsTarget(e,jn.OPTION,r,n)||super.walkOption(e,r,n)}walkAtLeastOne(e,r,n){this.checkIsTarget(e,jn.REPETITION_MANDATORY,r,n)||super.walkOption(e,r,n)}walkAtLeastOneSep(e,r,n){this.checkIsTarget(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}walkMany(e,r,n){this.checkIsTarget(e,jn.REPETITION,r,n)||super.walkOption(e,r,n)}walkManySep(e,r,n){this.checkIsTarget(e,jn.REPETITION_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}},zk=class extends ss{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,n){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=n,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,jn.OPTION)}visitRepetition(e){this.checkIsTarget(e,jn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,jn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,jn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,jn.ALTERNATION)}};o(pse,"initializeArrayOfArrays");o(MN,"pathToHashKeys");o(QPe,"isUniquePrefixHash");o(xse,"lookAheadSequenceFromAlternatives");o(Hg,"getLookaheadPathsForOr");o(Wg,"getLookaheadPathsForOptionalProd");o(Vk,"containsPath");o(bse,"isStrictPrefixOfPath");o(wse,"areTokenCategoriesNotUsed")});function Tse(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return Je(e,r=>Object.assign({type:zi.CUSTOM_LOOKAHEAD_VALIDATION},r))}function kse(t,e,r,n){let i=ya(t,u=>ZPe(u,r)),a=iBe(t,e,r),s=ya(t,u=>tBe(u,r)),l=ya(t,u=>eBe(u,t,n,r));return i.concat(a,s,l)}function ZPe(t,e){let r=new ON;t.accept(r);let n=r.allProductions,i=IL(n,JPe),a=Os(i,l=>l.length>1);return Je(br(a),l=>{let u=ia(l),h=e.buildDuplicateFoundError(t,l),f=Bs(u),d={message:h,type:zi.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=Ese(u);return p&&(d.parameter=p),d})}function JPe(t){return`${Bs(t)}_#_${t.idx}_#_${Ese(t)}`}function Ese(t){return t instanceof kr?t.terminalType.name:t instanceof on?t.nonTerminalName:""}function eBe(t,e,r,n){let i=[];if(Xr(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:s,type:zi.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}function Sse(t,e,r){let n=[],i;return qn(e,t)||(i=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,n.push({message:i,type:zi.INVALID_RULE_OVERRIDE,ruleName:t})),n}function BN(t,e,r,n=[]){let i=[],a=Uk(e.definition);if(ur(a))return[];{let s=t.name;qn(a,t)&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:zi.LEFT_RECURSION,ruleName:s});let u=Zh(a,n.concat([t])),h=ya(u,f=>{let d=an(n);return d.push(f),BN(t,f,r,d)});return i.concat(h)}}function Uk(t){let e=[];if(ur(t))return e;let r=ia(t);if(r instanceof on)e.push(r.referencedRule);else if(r instanceof Dn||r instanceof ln||r instanceof Ln||r instanceof Rn||r instanceof wn||r instanceof Or)e=e.concat(Uk(r.definition));else if(r instanceof Tn)e=qr(Je(r.definition,a=>Uk(a.definition)));else if(!(r instanceof kr))throw Error("non exhaustive match");let n=sp(r),i=t.length>1;if(n&&i){let a=gi(t);return e.concat(Uk(a))}else return e}function Cse(t,e){let r=new hx;t.accept(r);let n=r.alternations;return ya(n,a=>{let s=Nu(a.definition);return ya(s,(l,u)=>{let h=$k([l],[],Pu,1);return ur(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:zi.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function Ase(t,e,r){let n=new hx;t.accept(n);let i=n.alternations;return i=Jh(i,s=>s.ignoreAmbiguities===!0),ya(i,s=>{let l=s.idx,u=s.maxLookahead||e,h=Hg(l,t,u,s),f=rBe(h,s,t,r),d=nBe(h,s,t,r);return f.concat(d)})}function tBe(t,e){let r=new hx;t.accept(r);let n=r.alternations;return ya(n,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:zi.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function _se(t,e,r){let n=[];return Ae(t,i=>{let a=new PN;i.accept(a);let s=a.allProductions;Ae(s,l=>{let u=ux(l),h=l.maxLookahead||e,f=l.idx,p=Wg(f,i,u,h)[0];if(ur(qr(p))){let m=r.buildEmptyRepetitionError({topLevelRule:i,repetition:l});n.push({message:m,type:zi.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}function rBe(t,e,r,n){let i=[],a=Xr(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Ae(u,f=>{let d=[h];Ae(t,(p,m)=>{h!==m&&Vk(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!Vk(i,f)&&(i.push(f),l.push({alts:d,path:f}))}),l),[]);return Je(a,l=>{let u=Je(l.alts,f=>f+1);return{message:n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:zi.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function nBe(t,e,r,n){let i=Xr(t,(s,l,u)=>{let h=Je(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return Tc(ya(i,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=Yr(i,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx<u&&bse(p.path,h));return Je(f,p=>{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:n.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:zi.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function iBe(t,e,r){let n=[],i=Je(e,a=>a.name);return Ae(t,a=>{let s=a.name;if(qn(i,s)){let l=r.buildNamespaceConflictError(a);n.push({message:l,type:zi.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),n}var ON,hx,PN,fx=N(()=>{"use strict";qt();Fs();os();qg();cx();cp();o(Tse,"validateLookahead");o(kse,"validateGrammar");o(ZPe,"validateDuplicateProductions");o(JPe,"identifyProductionForDuplicates");o(Ese,"getExtraProductionArgument");ON=class extends ss{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(eBe,"validateRuleDoesNotAlreadyExist");o(Sse,"validateRuleIsOverridden");o(BN,"validateNoLeftRecursion");o(Uk,"getFirstNoneTerminal");hx=class extends ss{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(Cse,"validateEmptyOrAlternative");o(Ase,"validateAmbiguousAlternationAlternatives");PN=class extends ss{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(tBe,"validateTooManyAlts");o(_se,"validateSomeNonEmptyLookaheadPath");o(rBe,"checkAlternativesAmbiguities");o(nBe,"checkPrefixAlternativesAmbiguities");o(iBe,"checkTerminalAndNoneTerminalsNameSpace")});function Dse(t){let e=Qh(t,{errMsgProvider:hse}),r={};return Ae(t.rules,n=>{r[n.name]=n}),fse(r,e.errMsgProvider)}function Lse(t){return t=Qh(t,{errMsgProvider:Pl}),kse(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var Rse=N(()=>{"use strict";qt();dse();fx();Vg();o(Dse,"resolveGrammar");o(Lse,"validateGrammar")});function lf(t){return qn(Pse,t.name)}var Nse,Mse,Ise,Ose,Pse,Yg,hp,dx,px,mx,Xg=N(()=>{"use strict";qt();Nse="MismatchedTokenException",Mse="NoViableAltException",Ise="EarlyExitException",Ose="NotAllInputParsedException",Pse=[Nse,Mse,Ise,Ose];Object.freeze(Pse);o(lf,"isRecognitionException");Yg=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},hp=class extends Yg{static{o(this,"MismatchedTokenException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Nse}},dx=class extends Yg{static{o(this,"NoViableAltException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Mse}},px=class extends Yg{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=Ose}},mx=class extends Yg{static{o(this,"EarlyExitException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Ise}}});function aBe(t,e,r,n,i,a,s){let l=this.getKeyForAutomaticLookahead(n,i),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,i).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=lo,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var FN,zN,$N,Hk,GN=N(()=>{"use strict";up();qt();Xg();bN();Fs();FN={},zN="InRuleRecoveryException",$N=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=zN}},Hk=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Bt(e,"recoveryEnabled")?e.recoveryEnabled:ls.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=aBe)}getTokenToInsert(e){let r=$u(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,n,i){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new hp(m,h,this.LA(0));g.resyncedTokens=Nu(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,i)){d();return}else if(n.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,n){return!(n===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let n=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(n)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new $N("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||ur(r))return!1;let n=this.LA(1);return ns(r,a=>this.tokenMatcher(n,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return qn(n,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),n=2;for(;;){let i=ns(e,a=>sx(r,a));if(i!==void 0)return i;r=this.LA(n),n++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return FN;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return Je(e,(n,i)=>i===0?FN:{ruleName:this.shortRuleNameToFullName(n),idxInCallingRule:r[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=Je(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return qr(e)}getFollowSetFromFollowKey(e){if(e===FN)return[lo];let r=e.ruleName+e.idxInCallingRule+_k+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,lo)||r.push(e),r}reSyncTo(e){let r=[],n=this.LA(1);for(;this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return Nu(r)}attemptInRepetitionRecovery(e,r,n,i,a,s,l){}getCurrentGrammarPath(e,r){let n=this.getHumanReadableRuleStack(),i=an(this.RULE_OCCURRENCE_STACK);return{ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return Je(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(aBe,"attemptInRepetitionRecovery")});function Wk(t,e,r){return r|e|t}var qk=N(()=>{"use strict";o(Wk,"getKeyForAutomaticLookahead")});var Gu,VN=N(()=>{"use strict";qt();Vg();Fs();fx();qg();Gu=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:ls.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(ur(r)){let n=this.validateEmptyOrAlternatives(e.rules),i=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...n,...i,...a]}return r}validateNoLeftRecursion(e){return ya(e,r=>BN(r,r,Pl))}validateEmptyOrAlternatives(e){return ya(e,r=>Cse(r,Pl))}validateAmbiguousAlternationAlternatives(e,r){return ya(e,n=>Ase(n,r,Pl))}validateSomeNonEmptyLookaheadPath(e,r){return _se(e,r,Pl)}buildLookaheadForAlternation(e){return mse(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,yse)}buildLookaheadForOptional(e){return gse(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,ux(e.prodType),vse)}}});function sBe(t){Yk.reset(),t.accept(Yk);let e=Yk.dslMethods;return Yk.reset(),e}var Xk,UN,Yk,Bse=N(()=>{"use strict";qt();Fs();qk();os();VN();Xk=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Bt(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:ls.dynamicTokensEnabled,this.maxLookahead=Bt(e,"maxLookahead")?e.maxLookahead:ls.maxLookahead,this.lookaheadStrategy=Bt(e,"lookaheadStrategy")?e.lookaheadStrategy:new Gu({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Ae(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:n,repetition:i,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=sBe(r);Ae(n,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Bs(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=Wk(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Ae(i,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Bs(h))}),Ae(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Bs(h))}),Ae(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Bs(h))}),Ae(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Bs(h))}),Ae(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Bs(h))})})})}computeLookaheadFunc(e,r,n,i,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),u=Wk(this.fullRuleNameToShort[e.name],n,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let n=this.getLastExplicitRuleShortName();return Wk(n,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},UN=class extends ss{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},Yk=new UN;o(sBe,"collectMethods")});function qN(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset<e.endOffset&&(t.endOffset=e.endOffset)}function YN(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.startColumn=e.startColumn,t.startLine=e.startLine,t.endOffset=e.endOffset,t.endColumn=e.endColumn,t.endLine=e.endLine):t.endOffset<e.endOffset&&(t.endOffset=e.endOffset,t.endColumn=e.endColumn,t.endLine=e.endLine)}function Fse(t,e,r){t.children[r]===void 0?t.children[r]=[e]:t.children[r].push(e)}function $se(t,e,r){t.children[e]===void 0?t.children[e]=[r]:t.children[e].push(r)}var zse=N(()=>{"use strict";o(qN,"setNodeLocationOnlyOffset");o(YN,"setNodeLocationFull");o(Fse,"addTerminalToCst");o($se,"addNoneTerminalToCst")});function XN(t,e){Object.defineProperty(t,oBe,{enumerable:!1,configurable:!0,writable:!1,value:e})}var oBe,Gse=N(()=>{"use strict";oBe="name";o(XN,"defineNameProp")});function lBe(t,e){let r=zr(t),n=r.length;for(let i=0;i<n;i++){let a=r[i],s=t[a],l=s.length;for(let u=0;u<l;u++){let h=s[u];h.tokenTypeIdx===void 0&&this[h.name](h.children,e)}}}function Vse(t,e){let r=o(function(){},"derivedConstructor");XN(r,t+"BaseSemantics");let n={visit:o(function(i,a){if(Pt(i)&&(i=i[0]),!pr(i))return this[i.name](i.children,a)},"visit"),validateVisitor:o(function(){let i=cBe(this,e);if(!ur(i)){let a=Je(i,s=>s.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: | |
| 777 | + ${a.join(` | |
| 778 | + | |
| 779 | +`).replace(/\n/g,` | |
| 780 | + `)}`)}},"validateVisitor")};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}function Use(t,e,r){let n=o(function(){},"derivedConstructor");XN(n,t+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return Ae(e,a=>{i[a]=lBe}),n.prototype=i,n.prototype.constructor=n,n}function cBe(t,e){return uBe(t,e)}function uBe(t,e){let r=Yr(e,i=>Si(t[i])===!1),n=Je(r,i=>({msg:`Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,type:jN.MISSING_METHOD,methodName:i}));return Tc(n)}var jN,Hse=N(()=>{"use strict";qt();Gse();o(lBe,"defaultVisit");o(Vse,"createBaseSemanticVisitorConstructor");o(Use,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(jN||(jN={}));o(cBe,"validateVisitor");o(uBe,"validateMissingCstMethods")});var Zk,Wse=N(()=>{"use strict";zse();qt();Hse();Fs();Zk=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Bt(e,"nodeLocationTracking")?e.nodeLocationTracking:ls.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ni,this.cstFinallyStateUpdate=ni,this.cstPostTerminal=ni,this.cstPostNonTerminal=ni,this.cstPostRule=ni;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=YN,this.setNodeLocationFromNode=YN,this.cstPostRule=ni,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=qN,this.setNodeLocationFromNode=qN,this.cstPostRule=ni,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=ni,this.setInitialNodeLocation=ni;else throw Error(`Invalid <nodeLocationTracking> config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN}cstPostTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];Fse(n,r,e),this.setNodeLocationFromToken(n.location,r)}cstPostNonTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];$se(n,r,e),this.setNodeLocationFromNode(n.location,e.location)}getBaseCstVisitorConstructor(){if(pr(this.baseCstVisitorConstructor)){let e=Vse(this.className,zr(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(pr(this.baseCstVisitorWithDefaultsConstructor)){let e=Use(this.className,zr(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var Jk,qse=N(()=>{"use strict";Fs();Jk=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):jg}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?jg:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var eE,Yse=N(()=>{"use strict";qt();Xg();Fs();Vg();fx();os();eE=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,n){return this.consumeInternal(r,e,n)}subrule(e,r,n){return this.subruleInternal(r,e,n)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,n=Kg){if(qn(this.definedRulesNames,e)){let s={message:Pl.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:zi.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let i=this.defineRule(e,r,n);return this[e]=i,i}OVERRIDE_RULE(e,r,n=Kg){let i=Sse(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let a=this.defineRule(e,r,n);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(lf(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return Sk(br(this.gastProductionsCache))}}});var tE,Xse=N(()=>{"use strict";qt();qk();Xg();qg();cx();Fs();GN();up();cp();tE=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=zg,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Bt(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property. | |
| 781 | + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 | |
| 782 | + For Further details.`);if(Pt(e)){if(ur(e))throw Error(`A Token Vocabulary cannot be empty. | |
| 783 | + Note that the first argument for the parser constructor | |
| 784 | + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. | |
| 785 | + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 | |
| 786 | + For Further details.`)}if(Pt(e))this.tokensMap=Xr(e,(a,s)=>(a[s.name]=s,a),{});else if(Bt(e,"modes")&&Ma(qr(br(e.modes)),rse)){let a=qr(br(e.modes)),s=Bm(a);this.tokensMap=Xr(s,(l,u)=>(l[u.name]=u,l),{})}else if(bn(e))this.tokensMap=an(e);else throw new Error("<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=lo;let n=Bt(e,"modes")?qr(br(e.modes)):br(e),i=Ma(n,a=>ur(a.categoryMatches));this.tokenMatcher=i?zg:Pu,Bu(br(this.tokensMap))}defineRule(e,r,n){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' | |
| 787 | +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=Bt(n,"resyncEnabled")?n.resyncEnabled:Kg.resyncEnabled,a=Bt(n,"recoveryValueFunc")?n.recoveryValueFunc:Kg.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,n){let i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(lf(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return n(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(i)return this.moveToTerminatedState(),n(e);throw s}}else throw e}optionInternal(e,r){let n=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,n)}optionInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(i.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let n=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,n)}atLeastOneInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(i.call(this)===!0){let s=this.doSingleRepetition(a);for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,jn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],i,1024,e,Bk)}atLeastOneSepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,n)}atLeastOneSepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,lx],l,1536,e,lx)}else throw this.raiseEarlyExitException(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let n=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,n)}manyInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=i;i=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],i,768,e,Pk,s)}manySepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,n)}manySepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,ox],l,1280,e,ox)}}repetitionSepSecondInternal(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let n=this.getKeyForAutomaticLookahead(256,r),i=Pt(e)?e:e.DEF,s=this.getLaFuncFromCache(n).call(this,i);if(s!==void 0)return i[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new px(r,e))}}subruleInternal(e,r,n){let i;try{let a=n!==void 0?n.ARGS:void 0;return this.subruleIdx=r,i=e.apply(this,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(a){throw this.subruleInternalError(a,n,e.ruleName)}}subruleInternalError(e,r,n){throw lf(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e}consumeInternal(e,r,n){let i;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(a){i=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i}consumeInternalError(e,r,n){let i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new hp(i,r,a))}consumeInternalRecovery(e,r,n){if(this.recoveryEnabled&&n.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===zN?n:a}}else throw n}saveRecogState(){let e=this.errors,r=an(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),lo)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var rE,jse=N(()=>{"use strict";Xg();qt();qg();Fs();rE=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Bt(e,"errorMessageProvider")?e.errorMessageProvider:ls.errorMessageProvider}SAVE_ERROR(e){if(lf(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:an(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return an(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,n){let i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],l=Wg(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new mx(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=Hg(e,i,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new dx(u,this.LA(1),l))}}});var nE,Kse=N(()=>{"use strict";cx();qt();nE=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let n=this.gastProductionsCache[e];if(pr(n))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return $k([n],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=ia(e.ruleStack),i=this.getGAstProductions()[r];return new Ok(i,e).startWalking()}}});function yx(t,e,r,n=!1){aE(r);let i=ga(this.recordingProdStack),a=Si(e)?e:e.DEF,s=new t({definition:[],idx:r});return n&&(s.separator=e.SEP),Bt(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),this.recordingProdStack.pop(),sE}function dBe(t,e){aE(e);let r=ga(this.recordingProdStack),n=Pt(t)===!1,i=n===!1?t:t.DEF,a=new Tn({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});Bt(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=A2(i,l=>Si(l.GATE));return a.hasPredicates=s,r.definition.push(a),Ae(i,l=>{let u=new Dn({definition:[]});a.definition.push(u),Bt(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Bt(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),sE}function Jse(t){return t===0?"":`${t}`}function aE(t){if(t<0||t>Zse){let e=new Error(`Invalid DSL Method idx value: <${t}> | |
| 788 | + Idx value must be a none negative value smaller than ${Zse+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var sE,Qse,Zse,eoe,toe,fBe,iE,roe=N(()=>{"use strict";qt();os();ix();cp();up();Fs();qk();sE={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(sE);Qse=!0,Zse=Math.pow(2,8)-1,eoe=of({name:"RECORDING_PHASE_TOKEN",pattern:Xn.NA});Bu([eoe]);toe=$u(eoe,`This IToken indicates the Parser is in Recording Phase | |
| 789 | + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(toe);fBe={name:`This CSTNode indicates the Parser is in Recording Phase | |
| 790 | + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},iE=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(n,i){return this.consumeInternalRecord(n,e,i)},this[`SUBRULE${r}`]=function(n,i){return this.subruleInternalRecord(n,e,i)},this[`OPTION${r}`]=function(n){return this.optionInternalRecord(n,e)},this[`OR${r}`]=function(n){return this.orInternalRecord(n,e)},this[`MANY${r}`]=function(n){this.manyInternalRecord(e,n)},this[`MANY_SEP${r}`]=function(n){this.manySepFirstInternalRecord(e,n)},this[`AT_LEAST_ONE${r}`]=function(n){this.atLeastOneInternalRecord(e,n)},this[`AT_LEAST_ONE_SEP${r}`]=function(n){this.atLeastOneSepFirstInternalRecord(e,n)}}this.consume=function(e,r,n){return this.consumeInternalRecord(r,e,n)},this.subrule=function(e,r,n){return this.subruleInternalRecord(r,e,n)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let n=r>0?r:"";delete e[`CONSUME${n}`],delete e[`SUBRULE${n}`],delete e[`OPTION${n}`],delete e[`OR${n}`],delete e[`MANY${n}`],delete e[`MANY_SEP${n}`],delete e[`AT_LEAST_ONE${n}`],delete e[`AT_LEAST_ONE_SEP${n}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return jg}topLevelRuleRecord(e,r){try{let n=new as({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` | |
| 791 | + This error was thrown during the "grammar recording phase" For more info see: | |
| 792 | + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}}optionInternalRecord(e,r){return yx.call(this,ln,e,r)}atLeastOneInternalRecord(e,r){yx.call(this,Ln,r,e)}atLeastOneSepFirstInternalRecord(e,r){yx.call(this,Rn,r,e,Qse)}manyInternalRecord(e,r){yx.call(this,Or,r,e)}manySepFirstInternalRecord(e,r){yx.call(this,wn,r,e,Qse)}orInternalRecord(e,r){return dBe.call(this,e,r)}subruleInternalRecord(e,r,n){if(aE(r),!e||Bt(e,"ruleName")===!1){let l=new Error(`<SUBRULE${Jse(r)}> argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> | |
| 793 | + inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let i=ga(this.recordingProdStack),a=e.ruleName,s=new on({idx:r,nonTerminalName:a,label:n?.LABEL,referencedRule:void 0});return i.definition.push(s),this.outputCst?fBe:sE}consumeInternalRecord(e,r,n){if(aE(r),!_N(e)){let s=new Error(`<CONSUME${Jse(r)}> argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> | |
| 794 | + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=ga(this.recordingProdStack),a=new kr({idx:r,terminalType:e,label:n?.LABEL});return i.definition.push(a),toe}};o(yx,"recordProd");o(dBe,"recordOrProd");o(Jse,"getIdxSuffix");o(aE,"assertMethodIdxIsValid")});var oE,noe=N(()=>{"use strict";qt();Og();Fs();oE=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Bt(e,"traceInitPerf")){let r=e.traceInitPerf,n=typeof r=="number";this.traceInitMaxIdent=n?r:1/0,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=ls.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let n=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent<this.traceInitMaxIdent&&console.log(`${n}--> <${e}>`);let{time:i,value:a}=tx(r),s=i>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&s(`${n}<-- <${e}> time: ${i}ms`),this.traceInitIndent--,a}else return r()}}});function ioe(t,e){e.forEach(r=>{let n=r.prototype;Object.getOwnPropertyNames(n).forEach(i=>{if(i==="constructor")return;let a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]})})}var aoe=N(()=>{"use strict";o(ioe,"applyMixins")});function lE(t=void 0){return function(){return t}}var jg,ls,Kg,zi,vx,xx,Fs=N(()=>{"use strict";qt();Og();Oae();up();Vg();Rse();GN();Bse();Wse();qse();Yse();Xse();jse();Kse();roe();noe();aoe();fx();jg=$u(lo,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(jg);ls=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:zu,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),Kg=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(zi||(zi={}));o(lE,"EMPTY_ALT");vx=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{rx(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Ae(this.definedRulesNames,i=>{let s=this[i].originalGrammarAction,l;this.TRACE_INIT(`${i} Rule`,()=>{l=this.topLevelRuleRecord(i,s)}),this.gastProductionsCache[i]=l})}finally{this.disableRecording()}});let n=[];if(this.TRACE_INIT("Grammar Resolving",()=>{n=Dse({rules:br(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(n)}),this.TRACE_INIT("Grammar Validations",()=>{if(ur(n)&&this.skipValidations===!1){let i=Lse({rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),errMsgProvider:Pl,grammarName:r}),a=Tse({lookaheadStrategy:this.lookaheadStrategy,rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(i,a)}}),ur(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let i=Iae(br(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,a;(a=(i=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(i,{rules:br(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(br(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!ur(this.definitionErrors))throw e=Je(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected: | |
| 795 | + ${e.join(` | |
| 796 | +------------------------------- | |
| 797 | +`)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let n=this;if(n.initErrorHandler(r),n.initLexerAdapter(),n.initLooksAhead(r),n.initRecognizerEngine(e,r),n.initRecoverable(r),n.initTreeBuilder(r),n.initContentAssist(),n.initGastRecorder(r),n.initPerformanceTracer(r),Bt(r,"ignoredIssues"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated. | |
| 798 | + Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead. | |
| 799 | + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES | |
| 800 | + For further details.`);this.skipValidations=Bt(r,"skipValidations")?r.skipValidations:ls.skipValidations}};vx.DEFER_DEFINITION_ERRORS_HANDLING=!1;ioe(vx,[Hk,Xk,Zk,Jk,tE,eE,rE,nE,iE,oE]);xx=class extends vx{static{o(this,"EmbeddedActionsParser")}constructor(e,r=ls){let n=an(r);n.outputCst=!1,super(e,n)}}});var soe=N(()=>{"use strict";os()});var ooe=N(()=>{"use strict"});var loe=N(()=>{"use strict";soe();ooe()});var coe=N(()=>{"use strict";gN()});var cf=N(()=>{"use strict";gN();Fs();ix();up();qg();VN();Vg();Xg();DN();os();os();loe();coe()});function fp(t,e,r){return`${t.name}_${e}_${r}`}function doe(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};bBe(e,t);let r=t.length;for(let n=0;n<r;n++){let i=t[n],a=dp(e,i,i);a!==void 0&&RBe(e,i,a)}return e}function bBe(t,e){let r=e.length;for(let n=0;n<r;n++){let i=e[n],a=aa(t,i,void 0,{type:mBe}),s=aa(t,i,void 0,{type:Jg});a.stop=s,t.ruleToStartState.set(i,a),t.ruleToStopState.set(i,s)}}function poe(t,e,r){return r instanceof kr?QN(t,e,r.terminalType,r):r instanceof on?LBe(t,e,r):r instanceof Tn?SBe(t,e,r):r instanceof ln?CBe(t,e,r):r instanceof Or?wBe(t,e,r):r instanceof wn?TBe(t,e,r):r instanceof Ln?kBe(t,e,r):r instanceof Rn?EBe(t,e,r):dp(t,e,r)}function wBe(t,e,r){let n=aa(t,e,r,{type:hoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return goe(t,e,r,i)}function TBe(t,e,r){let n=aa(t,e,r,{type:hoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r)),a=QN(t,e,r.separator,r);return goe(t,e,r,i,a)}function kBe(t,e,r){let n=aa(t,e,r,{type:uoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return moe(t,e,r,i)}function EBe(t,e,r){let n=aa(t,e,r,{type:uoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r)),a=QN(t,e,r.separator,r);return moe(t,e,r,i,a)}function SBe(t,e,r){let n=aa(t,e,r,{type:uf});hf(t,n);let i=Je(r.definition,s=>poe(t,e,s));return e1(t,e,n,r,...i)}function CBe(t,e,r){let n=aa(t,e,r,{type:uf});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return ABe(t,e,r,i)}function dp(t,e,r){let n=Yr(Je(r.definition,i=>poe(t,e,i)),i=>i!==void 0);return n.length===1?n[0]:n.length===0?void 0:DBe(t,n)}function moe(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:xBe});hf(t,l);let u=aa(t,e,r,{type:foe});return a.loopback=l,u.loopback=l,t.decisionMap[fp(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,Ai(s,l),i===void 0?(Ai(l,a),Ai(l,u)):(Ai(l,u),Ai(l,i.left),Ai(i.right,a)),{left:a,right:u}}function goe(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:vBe});hf(t,l);let u=aa(t,e,r,{type:foe}),h=aa(t,e,r,{type:yBe});return l.loopback=h,u.loopback=h,Ai(l,a),Ai(l,u),Ai(s,h),i!==void 0?(Ai(h,u),Ai(h,i.left),Ai(i.right,a)):Ai(h,l),t.decisionMap[fp(e,i?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function ABe(t,e,r,n){let i=n.left,a=n.right;return Ai(i,a),t.decisionMap[fp(e,"Option",r.idx)]=i,n}function hf(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function e1(t,e,r,n,...i){let a=aa(t,e,n,{type:gBe,start:r});r.end=a;for(let l of i)l!==void 0?(Ai(r,l.left),Ai(l.right,a)):Ai(r,a);let s={left:r,right:a};return t.decisionMap[fp(e,_Be(n),n.idx)]=r,s}function _Be(t){if(t instanceof Tn)return"Alternation";if(t instanceof ln)return"Option";if(t instanceof Or)return"Repetition";if(t instanceof wn)return"RepetitionWithSeparator";if(t instanceof Ln)return"RepetitionMandatory";if(t instanceof Rn)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function DBe(t,e){let r=e.length;for(let a=0;a<r-1;a++){let s=e[a],l;s.left.transitions.length===1&&(l=s.left.transitions[0]);let u=l instanceof Zg,h=l,f=e[a+1].left;s.left.type===uf&&s.right.type===uf&&l!==void 0&&(u&&h.followState===s.right||l.target===s.right)?(u?h.followState=f:l.target=f,NBe(t,s.right)):Ai(s.right,f)}let n=e[0],i=e[r-1];return{left:n.left,right:i.right}}function QN(t,e,r,n){let i=aa(t,e,n,{type:uf}),a=aa(t,e,n,{type:uf});return ZN(i,new Qg(a,r)),{left:i,right:a}}function LBe(t,e,r){let n=r.referencedRule,i=t.ruleToStartState.get(n),a=aa(t,e,r,{type:uf}),s=aa(t,e,r,{type:uf}),l=new Zg(i,n,s);return ZN(a,l),{left:a,right:s}}function RBe(t,e,r){let n=t.ruleToStartState.get(e);Ai(n,r.left);let i=t.ruleToStopState.get(e);return Ai(r.right,i),{left:n,right:i}}function Ai(t,e){let r=new wx(e);ZN(t,r)}function aa(t,e,r,n){let i=Object.assign({atn:t,production:r,epsilonOnlyTransitions:!1,rule:e,transitions:[],nextTokenWithinRule:[],stateNumber:t.states.length},n);return t.states.push(i),i}function ZN(t,e){t.transitions.length===0&&(t.epsilonOnlyTransitions=e.isEpsilon()),t.transitions.push(e)}function NBe(t,e){t.states.splice(t.states.indexOf(e),1)}var uf,mBe,uoe,hoe,Jg,gBe,yBe,vBe,xBe,foe,bx,Qg,wx,Zg,yoe=N(()=>{"use strict";Im();DL();cf();o(fp,"buildATNKey");uf=1,mBe=2,uoe=4,hoe=5,Jg=7,gBe=8,yBe=9,vBe=10,xBe=11,foe=12,bx=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},Qg=class extends bx{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},wx=class extends bx{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},Zg=class extends bx{static{o(this,"RuleTransition")}constructor(e,r,n){super(e),this.rule=r,this.followState=n}isEpsilon(){return!0}};o(doe,"createATN");o(bBe,"createRuleStartAndStopATNStates");o(poe,"atom");o(wBe,"repetition");o(TBe,"repetitionSep");o(kBe,"repetitionMandatory");o(EBe,"repetitionMandatorySep");o(SBe,"alternation");o(CBe,"option");o(dp,"block");o(moe,"plus");o(goe,"star");o(ABe,"optional");o(hf,"defineDecisionState");o(e1,"makeAlts");o(_Be,"getProdType");o(DBe,"makeBlock");o(QN,"tokenRef");o(LBe,"ruleRef");o(RBe,"buildRuleHandle");o(Ai,"epsilon");o(aa,"newState");o(ZN,"addTransition");o(NBe,"removeState")});function JN(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var Tx,t1,voe=N(()=>{"use strict";Im();Tx={},t1=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=JN(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return Je(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(JN,"getATNConfigKey")});function MBe(t,e){let r={};return n=>{let i=n.toString(),a=r[i];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[i]=a),a}}function boe(t,e=!0){let r=new Set;for(let n of t){let i=new Set;for(let a of n){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!i.has(l))return!1}else r.add(l),i.add(l)}}return!0}function IBe(t){let e=t.decisionStates.length,r=Array(e);for(let n=0;n<e;n++)r[n]=MBe(t.decisionStates[n],n);return r}function eM(t,e,r,n){let i=t[e](r),a=i.start;if(a===void 0){let l=WBe(i.atnStartState);a=koe(i,Toe(l)),i.start=a}return OBe.apply(this,[i,a,r,n])}function OBe(t,e,r,n){let i=e,a=1,s=[],l=this.LA(a++);for(;;){let u=GBe(i,l);if(u===void 0&&(u=PBe.apply(this,[t,i,l,a,r,n])),u===Tx)return zBe(s,i,l);if(u.isAcceptState===!0)return u.prediction;i=u,s.push(l),l=this.LA(a++)}}function PBe(t,e,r,n,i,a){let s=VBe(e.configs,r,i);if(s.size===0)return woe(t,e,r,Tx),Tx;let l=Toe(s),u=HBe(s,i);if(u!==void 0)l.isAcceptState=!0,l.prediction=u,l.configs.uniqueAlt=u;else if(jBe(s)){let h=Dl(s.alts);l.isAcceptState=!0,l.prediction=h,l.configs.uniqueAlt=h,BBe.apply(this,[t,n,s.alts,a])}return l=woe(t,e,r,l),l}function BBe(t,e,r,n){let i=[];for(let h=1;h<=e;h++)i.push(this.LA(h).tokenType);let a=t.atnStartState,s=a.rule,l=a.production,u=FBe({topLevelRule:s,ambiguityIndices:r,production:l,prefixPath:i});n(u)}function FBe(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.production.idx===0?"":t.production.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${$Be(t.production)}${r}> inside <${t.topLevelRule.name}> Rule, | |
| 801 | +<${e}> may appears as a prefix path in all these alternatives. | |
| 802 | +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES | |
| 803 | +For Further details.`,n}function $Be(t){if(t instanceof on)return"SUBRULE";if(t instanceof ln)return"OPTION";if(t instanceof Tn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Rn)return"AT_LEAST_ONE_SEP";if(t instanceof wn)return"MANY_SEP";if(t instanceof Or)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}function zBe(t,e,r){let n=ya(e.configs.elements,a=>a.state.transitions),i=Qre(n.filter(a=>a instanceof Qg).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:i,tokenPath:t}}function GBe(t,e){return t.edges[e.tokenTypeIdx]}function VBe(t,e,r){let n=new t1,i=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===Jg){i.push(s);continue}let l=s.state.transitions.length;for(let u=0;u<l;u++){let h=s.state.transitions[u],f=UBe(h,e);f!==void 0&&n.add({state:f,alt:s.alt,stack:s.stack})}}let a;if(i.length===0&&n.size===1&&(a=n),a===void 0){a=new t1;for(let s of n.elements)uE(s,a)}if(i.length>0&&!YBe(a))for(let s of i)a.add(s);return a}function UBe(t,e){if(t instanceof Qg&&sx(e,t.tokenType))return t.target}function HBe(t,e){let r;for(let n of t.elements)if(e.is(n.alt)===!0){if(r===void 0)r=n.alt;else if(r!==n.alt)return}return r}function Toe(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function woe(t,e,r,n){return n=koe(t,n),e.edges[r.tokenTypeIdx]=n,n}function koe(t,e){if(e===Tx)return e;let r=e.configs.key,n=t.states[r];return n!==void 0?n:(e.configs.finalize(),t.states[r]=e,e)}function WBe(t){let e=new t1,r=t.transitions.length;for(let n=0;n<r;n++){let a={state:t.transitions[n].target,alt:n,stack:[]};uE(a,e)}return e}function uE(t,e){let r=t.state;if(r.type===Jg){if(t.stack.length>0){let i=[...t.stack],s={state:i.pop(),alt:t.alt,stack:i};uE(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let n=r.transitions.length;for(let i=0;i<n;i++){let a=r.transitions[i],s=qBe(t,a);s!==void 0&&uE(s,e)}}function qBe(t,e){if(e instanceof wx)return{state:e.target,alt:t.alt,stack:t.stack};if(e instanceof Zg){let r=[...t.stack,e.followState];return{state:e.target,alt:t.alt,stack:r}}}function YBe(t){for(let e of t.elements)if(e.state.type===Jg)return!0;return!1}function XBe(t){for(let e of t.elements)if(e.state.type!==Jg)return!1;return!0}function jBe(t){if(XBe(t))return!0;let e=KBe(t.elements);return QBe(e)&&!ZBe(e)}function KBe(t){let e=new Map;for(let r of t){let n=JN(r,!1),i=e.get(n);i===void 0&&(i={},e.set(n,i)),i[r.alt]=!0}return e}function QBe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length>1)return!0;return!1}function ZBe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var cE,xoe,kx,Eoe=N(()=>{"use strict";cf();yoe();voe();BL();RL();Zre();Im();uT();$T();HT();GL();o(MBe,"createDFACache");cE=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let n=0;n<r;n++)e+=this.predicates[n]===!0?"1":"0";return e}},xoe=new cE,kx=class extends Gu{static{o(this,"LLStarLookaheadStrategy")}constructor(e){var r;super(),this.logging=(r=e?.logging)!==null&&r!==void 0?r:n=>console.log(n)}initialize(e){this.atn=doe(e.rules),this.dfas=IBe(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:n,hasPredicates:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=fp(n,"Alternation",r),f=this.atn.decisionMap[u].decision,d=Je(Gk({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:n}),p=>Je(p,m=>m[0]));if(boe(d,!1)&&!a){let p=Xr(d,(m,g,y)=>(Ae(g,v=>{v&&(m[v.tokenTypeIdx]=y,Ae(v.categoryMatches,x=>{m[x]=y}))}),m),{});return i?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return i?function(p){let m=new cE,g=p===void 0?0:p.length;for(let v=0;v<g;v++){let x=p?.[v].GATE;m.set(v,x===void 0||x.call(this))}let y=eM.call(this,s,f,m,l);return typeof y=="number"?y:void 0}:function(){let p=eM.call(this,s,f,xoe,l);return typeof p=="number"?p:void 0}}buildLookaheadForOptional(e){let{prodOccurrence:r,rule:n,prodType:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=fp(n,i,r),f=this.atn.decisionMap[u].decision,d=Je(Gk({maxLookahead:1,occurrence:r,prodType:i,rule:n}),p=>Je(p,m=>m[0]));if(boe(d)&&d[0][0]&&!a){let p=d[0],m=qr(p);if(m.length===1&&ur(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=Xr(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Ae(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=eM.call(this,s,f,xoe,l);return typeof p=="object"?!1:p===0}}};o(boe,"isLL1Sequence");o(IBe,"initATNSimulator");o(eM,"adaptivePredict");o(OBe,"performLookahead");o(PBe,"computeLookaheadTarget");o(BBe,"reportLookaheadAmbiguity");o(FBe,"buildAmbiguityError");o($Be,"getProductionDslName");o(zBe,"buildAdaptivePredictError");o(GBe,"getExistingTargetState");o(VBe,"computeReachSet");o(UBe,"getReachableTarget");o(HBe,"getUniqueAlt");o(Toe,"newDFAState");o(woe,"addDFAEdge");o(koe,"addDFAState");o(WBe,"computeStartState");o(uE,"closure");o(qBe,"getEpsilonTarget");o(YBe,"hasConfigInRuleStopState");o(XBe,"allConfigsInRuleStopStates");o(jBe,"hasConflictTerminatingPrediction");o(KBe,"getConflictingAltSets");o(QBe,"hasConflictingAltSet");o(ZBe,"hasStateAssociatedWithOneAlt")});var Soe=N(()=>{"use strict";Eoe()});var Coe,tM,Aoe,hE,jr,Pr,fE,_oe,rM,Doe,Loe,Roe,Noe,nM,Moe,Ioe,Ooe,dE,r1,n1,iM,i1,Poe,aM,sM,oM,lM,cM,Boe,Foe,uM,$oe,hM,Ex,zoe,Goe,Voe,Uoe,Hoe,Woe,qoe,Yoe,pE,Xoe,joe,Koe,Qoe,Zoe,Joe,ele,tle,rle,nle,ile,mE,ale,sle,ole,lle,cle,ule,hle,fle,dle,ple,mle,gle,yle,fM,dM,vle,xle,ble,wle,Tle,kle,Ele,Sle,Cle,pM,Fe,mM=N(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(Coe||(Coe={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(tM||(tM={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(Aoe||(Aoe={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(hE||(hE={}));(function(t){function e(n,i){return n===Number.MAX_VALUE&&(n=hE.MAX_VALUE),i===Number.MAX_VALUE&&(i=hE.MAX_VALUE),{line:n,character:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.uinteger(i.line)&&Fe.uinteger(i.character)}o(r,"is"),t.is=r})(jr||(jr={}));(function(t){function e(n,i,a,s){if(Fe.uinteger(n)&&Fe.uinteger(i)&&Fe.uinteger(a)&&Fe.uinteger(s))return{start:jr.create(n,i),end:jr.create(a,s)};if(jr.is(n)&&jr.is(i))return{start:n,end:i};throw new Error(`Range#create called with invalid arguments[${n}, ${i}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&jr.is(i.start)&&jr.is(i.end)}o(r,"is"),t.is=r})(Pr||(Pr={}));(function(t){function e(n,i){return{uri:n,range:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&(Fe.string(i.uri)||Fe.undefined(i.uri))}o(r,"is"),t.is=r})(fE||(fE={}));(function(t){function e(n,i,a,s){return{targetUri:n,targetRange:i,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.targetRange)&&Fe.string(i.targetUri)&&Pr.is(i.targetSelectionRange)&&(Pr.is(i.originSelectionRange)||Fe.undefined(i.originSelectionRange))}o(r,"is"),t.is=r})(_oe||(_oe={}));(function(t){function e(n,i,a,s){return{red:n,green:i,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.numberRange(i.red,0,1)&&Fe.numberRange(i.green,0,1)&&Fe.numberRange(i.blue,0,1)&&Fe.numberRange(i.alpha,0,1)}o(r,"is"),t.is=r})(rM||(rM={}));(function(t){function e(n,i){return{range:n,color:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&rM.is(i.color)}o(r,"is"),t.is=r})(Doe||(Doe={}));(function(t){function e(n,i,a){return{label:n,textEdit:i,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.string(i.label)&&(Fe.undefined(i.textEdit)||n1.is(i))&&(Fe.undefined(i.additionalTextEdits)||Fe.typedArray(i.additionalTextEdits,n1.is))}o(r,"is"),t.is=r})(Loe||(Loe={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(Roe||(Roe={}));(function(t){function e(n,i,a,s,l,u){let h={startLine:n,endLine:i};return Fe.defined(a)&&(h.startCharacter=a),Fe.defined(s)&&(h.endCharacter=s),Fe.defined(l)&&(h.kind=l),Fe.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.uinteger(i.startLine)&&Fe.uinteger(i.startLine)&&(Fe.undefined(i.startCharacter)||Fe.uinteger(i.startCharacter))&&(Fe.undefined(i.endCharacter)||Fe.uinteger(i.endCharacter))&&(Fe.undefined(i.kind)||Fe.string(i.kind))}o(r,"is"),t.is=r})(Noe||(Noe={}));(function(t){function e(n,i){return{location:n,message:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&fE.is(i.location)&&Fe.string(i.message)}o(r,"is"),t.is=r})(nM||(nM={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(Moe||(Moe={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(Ioe||(Ioe={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&Fe.string(n.href)}o(e,"is"),t.is=e})(Ooe||(Ooe={}));(function(t){function e(n,i,a,s,l,u){let h={range:n,message:i};return Fe.defined(a)&&(h.severity=a),Fe.defined(s)&&(h.code=s),Fe.defined(l)&&(h.source=l),Fe.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(n){var i;let a=n;return Fe.defined(a)&&Pr.is(a.range)&&Fe.string(a.message)&&(Fe.number(a.severity)||Fe.undefined(a.severity))&&(Fe.integer(a.code)||Fe.string(a.code)||Fe.undefined(a.code))&&(Fe.undefined(a.codeDescription)||Fe.string((i=a.codeDescription)===null||i===void 0?void 0:i.href))&&(Fe.string(a.source)||Fe.undefined(a.source))&&(Fe.undefined(a.relatedInformation)||Fe.typedArray(a.relatedInformation,nM.is))}o(r,"is"),t.is=r})(dE||(dE={}));(function(t){function e(n,i,...a){let s={title:n,command:i};return Fe.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.title)&&Fe.string(i.command)}o(r,"is"),t.is=r})(r1||(r1={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function n(a){return{range:a,newText:""}}o(n,"del"),t.del=n;function i(a){let s=a;return Fe.objectLiteral(s)&&Fe.string(s.newText)&&Pr.is(s.range)}o(i,"is"),t.is=i})(n1||(n1={}));(function(t){function e(n,i,a){let s={label:n};return i!==void 0&&(s.needsConfirmation=i),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.string(i.label)&&(Fe.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(Fe.string(i.description)||i.description===void 0)}o(r,"is"),t.is=r})(iM||(iM={}));(function(t){function e(r){let n=r;return Fe.string(n)}o(e,"is"),t.is=e})(i1||(i1={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function n(a,s){return{range:a,newText:"",annotationId:s}}o(n,"del"),t.del=n;function i(a){let s=a;return n1.is(s)&&(iM.is(s.annotationId)||i1.is(s.annotationId))}o(i,"is"),t.is=i})(Poe||(Poe={}));(function(t){function e(n,i){return{textDocument:n,edits:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&uM.is(i.textDocument)&&Array.isArray(i.edits)}o(r,"is"),t.is=r})(aM||(aM={}));(function(t){function e(n,i,a){let s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="create"&&Fe.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||Fe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Fe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(sM||(sM={}));(function(t){function e(n,i,a,s){let l={kind:"rename",oldUri:n,newUri:i};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="rename"&&Fe.string(i.oldUri)&&Fe.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||Fe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Fe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(oM||(oM={}));(function(t){function e(n,i,a){let s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="delete"&&Fe.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||Fe.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||Fe.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(lM||(lM={}));(function(t){function e(r){let n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(i=>Fe.string(i.kind)?sM.is(i)||oM.is(i)||lM.is(i):aM.is(i)))}o(e,"is"),t.is=e})(cM||(cM={}));(function(t){function e(n){return{uri:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)}o(r,"is"),t.is=r})(Boe||(Boe={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&Fe.integer(i.version)}o(r,"is"),t.is=r})(Foe||(Foe={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&(i.version===null||Fe.integer(i.version))}o(r,"is"),t.is=r})(uM||(uM={}));(function(t){function e(n,i,a,s){return{uri:n,languageId:i,version:a,text:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&Fe.string(i.languageId)&&Fe.integer(i.version)&&Fe.string(i.text)}o(r,"is"),t.is=r})($oe||($oe={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let n=r;return n===t.PlainText||n===t.Markdown}o(e,"is"),t.is=e})(hM||(hM={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(r)&&hM.is(n.kind)&&Fe.string(n.value)}o(e,"is"),t.is=e})(Ex||(Ex={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(zoe||(zoe={}));(function(t){t.PlainText=1,t.Snippet=2})(Goe||(Goe={}));(function(t){t.Deprecated=1})(Voe||(Voe={}));(function(t){function e(n,i,a){return{newText:n,insert:i,replace:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.newText)&&Pr.is(i.insert)&&Pr.is(i.replace)}o(r,"is"),t.is=r})(Uoe||(Uoe={}));(function(t){t.asIs=1,t.adjustIndentation=2})(Hoe||(Hoe={}));(function(t){function e(r){let n=r;return n&&(Fe.string(n.detail)||n.detail===void 0)&&(Fe.string(n.description)||n.description===void 0)}o(e,"is"),t.is=e})(Woe||(Woe={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(qoe||(qoe={}));(function(t){function e(r,n){return{items:r||[],isIncomplete:!!n}}o(e,"create"),t.create=e})(Yoe||(Yoe={}));(function(t){function e(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(n){let i=n;return Fe.string(i)||Fe.objectLiteral(i)&&Fe.string(i.language)&&Fe.string(i.value)}o(r,"is"),t.is=r})(pE||(pE={}));(function(t){function e(r){let n=r;return!!n&&Fe.objectLiteral(n)&&(Ex.is(n.contents)||pE.is(n.contents)||Fe.typedArray(n.contents,pE.is))&&(r.range===void 0||Pr.is(r.range))}o(e,"is"),t.is=e})(Xoe||(Xoe={}));(function(t){function e(r,n){return n?{label:r,documentation:n}:{label:r}}o(e,"create"),t.create=e})(joe||(joe={}));(function(t){function e(r,n,...i){let a={label:r};return Fe.defined(n)&&(a.documentation=n),Fe.defined(i)?a.parameters=i:a.parameters=[],a}o(e,"create"),t.create=e})(Koe||(Koe={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(Qoe||(Qoe={}));(function(t){function e(r,n){let i={range:r};return Fe.number(n)&&(i.kind=n),i}o(e,"create"),t.create=e})(Zoe||(Zoe={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(Joe||(Joe={}));(function(t){t.Deprecated=1})(ele||(ele={}));(function(t){function e(r,n,i,a,s){let l={name:r,kind:n,location:{uri:a,range:i}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(tle||(tle={}));(function(t){function e(r,n,i,a){return a!==void 0?{name:r,kind:n,location:{uri:i,range:a}}:{name:r,kind:n,location:{uri:i}}}o(e,"create"),t.create=e})(rle||(rle={}));(function(t){function e(n,i,a,s,l,u){let h={name:n,detail:i,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.name)&&Fe.number(i.kind)&&Pr.is(i.range)&&Pr.is(i.selectionRange)&&(i.detail===void 0||Fe.string(i.detail))&&(i.deprecated===void 0||Fe.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}o(r,"is"),t.is=r})(nle||(nle={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(ile||(ile={}));(function(t){t.Invoked=1,t.Automatic=2})(mE||(mE={}));(function(t){function e(n,i,a){let s={diagnostics:n};return i!=null&&(s.only=i),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.typedArray(i.diagnostics,dE.is)&&(i.only===void 0||Fe.typedArray(i.only,Fe.string))&&(i.triggerKind===void 0||i.triggerKind===mE.Invoked||i.triggerKind===mE.Automatic)}o(r,"is"),t.is=r})(ale||(ale={}));(function(t){function e(n,i,a){let s={title:n},l=!0;return typeof i=="string"?(l=!1,s.kind=i):r1.is(i)?s.command=i:s.edit=i,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.title)&&(i.diagnostics===void 0||Fe.typedArray(i.diagnostics,dE.is))&&(i.kind===void 0||Fe.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||r1.is(i.command))&&(i.isPreferred===void 0||Fe.boolean(i.isPreferred))&&(i.edit===void 0||cM.is(i.edit))}o(r,"is"),t.is=r})(sle||(sle={}));(function(t){function e(n,i){let a={range:n};return Fe.defined(i)&&(a.data=i),a}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(i.range)&&(Fe.undefined(i.command)||r1.is(i.command))}o(r,"is"),t.is=r})(ole||(ole={}));(function(t){function e(n,i){return{tabSize:n,insertSpaces:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.uinteger(i.tabSize)&&Fe.boolean(i.insertSpaces)}o(r,"is"),t.is=r})(lle||(lle={}));(function(t){function e(n,i,a){return{range:n,target:i,data:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(i.range)&&(Fe.undefined(i.target)||Fe.string(i.target))}o(r,"is"),t.is=r})(cle||(cle={}));(function(t){function e(n,i){return{range:n,parent:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&(i.parent===void 0||t.is(i.parent))}o(r,"is"),t.is=r})(ule||(ule={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(hle||(hle={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(fle||(fle={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&(n.resultId===void 0||typeof n.resultId=="string")&&Array.isArray(n.data)&&(n.data.length===0||typeof n.data[0]=="number")}o(e,"is"),t.is=e})(dle||(dle={}));(function(t){function e(n,i){return{range:n,text:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&Fe.string(i.text)}o(r,"is"),t.is=r})(ple||(ple={}));(function(t){function e(n,i,a){return{range:n,variableName:i,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&Fe.boolean(i.caseSensitiveLookup)&&(Fe.string(i.variableName)||i.variableName===void 0)}o(r,"is"),t.is=r})(mle||(mle={}));(function(t){function e(n,i){return{range:n,expression:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&(Fe.string(i.expression)||i.expression===void 0)}o(r,"is"),t.is=r})(gle||(gle={}));(function(t){function e(n,i){return{frameId:n,stoppedLocation:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(n.stoppedLocation)}o(r,"is"),t.is=r})(yle||(yle={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(fM||(fM={}));(function(t){function e(n){return{value:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&(i.tooltip===void 0||Fe.string(i.tooltip)||Ex.is(i.tooltip))&&(i.location===void 0||fE.is(i.location))&&(i.command===void 0||r1.is(i.command))}o(r,"is"),t.is=r})(dM||(dM={}));(function(t){function e(n,i,a){let s={position:n,label:i};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&jr.is(i.position)&&(Fe.string(i.label)||Fe.typedArray(i.label,dM.is))&&(i.kind===void 0||fM.is(i.kind))&&i.textEdits===void 0||Fe.typedArray(i.textEdits,n1.is)&&(i.tooltip===void 0||Fe.string(i.tooltip)||Ex.is(i.tooltip))&&(i.paddingLeft===void 0||Fe.boolean(i.paddingLeft))&&(i.paddingRight===void 0||Fe.boolean(i.paddingRight))}o(r,"is"),t.is=r})(vle||(vle={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})(xle||(xle={}));(function(t){function e(r,n,i,a){return{insertText:r,filterText:n,range:i,command:a}}o(e,"create"),t.create=e})(ble||(ble={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(wle||(wle={}));(function(t){t.Invoked=0,t.Automatic=1})(Tle||(Tle={}));(function(t){function e(r,n){return{range:r,text:n}}o(e,"create"),t.create=e})(kle||(kle={}));(function(t){function e(r,n){return{triggerKind:r,selectedCompletionInfo:n}}o(e,"create"),t.create=e})(Ele||(Ele={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&tM.is(n.uri)&&Fe.string(n.name)}o(e,"is"),t.is=e})(Sle||(Sle={}));(function(t){function e(a,s,l,u){return new pM(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!(Fe.defined(s)&&Fe.string(s.uri)&&(Fe.undefined(s.languageId)||Fe.string(s.languageId))&&Fe.uinteger(s.lineCount)&&Fe.func(s.getText)&&Fe.func(s.positionAt)&&Fe.func(s.offsetAt))}o(r,"is"),t.is=r;function n(a,s){let l=a.getText(),u=i(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(n,"applyEdits"),t.applyEdits=n;function i(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);i(u,s),i(h,s);let f=0,d=0,p=0;for(;f<u.length&&d<h.length;)s(u[f],h[d])<=0?a[p++]=u[f++]:a[p++]=h[d++];for(;f<u.length;)a[p++]=u[f++];for(;d<h.length;)a[p++]=h[d++];return a}o(i,"mergeSort")})(Cle||(Cle={}));pM=class{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){this._content=e.text,this._version=r,this._lineOffsets=void 0}getLineOffsets(){if(this._lineOffsets===void 0){let e=[],r=this._content,n=!0;for(let i=0;i<r.length;i++){n&&(e.push(i),n=!1);let a=r.charAt(i);n=a==="\r"||a===` | |
| 804 | +`,a==="\r"&&i+1<r.length&&r.charAt(i+1)===` | |
| 805 | +`&&i++}n&&r.length>0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return jr.create(0,e);for(;n<i;){let s=Math.floor((n+i)/2);r[s]>e?i=s:n=s+1}let a=n-1;return jr.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line],i=e.line+1<r.length?r[e.line+1]:this._content.length;return Math.max(Math.min(n+e.character,i),n)}get lineCount(){return this.getLineOffsets().length}};(function(t){let e=Object.prototype.toString;function r(m){return typeof m<"u"}o(r,"defined"),t.defined=r;function n(m){return typeof m>"u"}o(n,"undefined"),t.undefined=n;function i(m){return m===!0||m===!1}o(i,"boolean"),t.boolean=i;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})(Fe||(Fe={}))});var Sx,Cx,pp,mp,gM,a1,gE=N(()=>{"use strict";mM();Nl();Sx=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){var e;return(e=this.nodeStack[this.nodeStack.length-1])!==null&&e!==void 0?e:this.rootNode}buildRootNode(e){return this.rootNode=new a1(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new mp;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let n=new pp(e.startOffset,e.image.length,Gm(e),e.tokenType,!r);return n.grammarSource=r,n.root=this.rootNode,this.current.content.push(n),n}removeNode(e){let r=e.container;if(r){let n=r.content.indexOf(e);n>=0&&r.content.splice(n,1)}}addHiddenNodes(e){let r=[];for(let a of e){let s=new pp(a.startOffset,a.image.length,Gm(a),a.tokenType,!0);s.root=this.rootNode,r.push(s)}let n=this.current,i=!1;if(n.content.length>0){n.content.push(...r);return}for(;n.container;){let a=n.container.content.indexOf(n);if(a>0){n.container.content.splice(a,0,...r),i=!0;break}n=n.container}i||this.rootNode.content.unshift(...r)}construct(e){let r=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=r;let n=this.nodeStack.pop();n?.content.length===0&&this.removeNode(n)}},Cx=class{static{o(this,"AbstractCstNode")}get parent(){return this.container}get feature(){return this.grammarSource}get hidden(){return!1}get astNode(){var e,r;let n=typeof((e=this._astNode)===null||e===void 0?void 0:e.$type)=="string"?this._astNode:(r=this.container)===null||r===void 0?void 0:r.astNode;if(!n)throw new Error("This node has no associated AST element");return n}set astNode(e){this._astNode=e}get element(){return this.astNode}get text(){return this.root.fullText.substring(this.offset,this.end)}},pp=class extends Cx{static{o(this,"LeafCstNodeImpl")}get offset(){return this._offset}get length(){return this._length}get end(){return this._offset+this._length}get hidden(){return this._hidden}get tokenType(){return this._tokenType}get range(){return this._range}constructor(e,r,n,i,a=!1){super(),this._hidden=a,this._offset=e,this._tokenType=i,this._length=r,this._range=n}},mp=class extends Cx{static{o(this,"CompositeCstNodeImpl")}constructor(){super(...arguments),this.content=new gM(this)}get children(){return this.content}get offset(){var e,r;return(r=(e=this.firstNonHiddenNode)===null||e===void 0?void 0:e.offset)!==null&&r!==void 0?r:0}get length(){return this.end-this.offset}get end(){var e,r;return(r=(e=this.lastNonHiddenNode)===null||e===void 0?void 0:e.end)!==null&&r!==void 0?r:0}get range(){let e=this.firstNonHiddenNode,r=this.lastNonHiddenNode;if(e&&r){if(this._rangeCache===void 0){let{range:n}=e,{range:i}=r;this._rangeCache={start:n.start,end:i.end.line<n.start.line?n.start:i.end}}return this._rangeCache}else return{start:jr.create(0,0),end:jr.create(0,0)}}get firstNonHiddenNode(){for(let e of this.content)if(!e.hidden)return e;return this.content[0]}get lastNonHiddenNode(){for(let e=this.content.length-1;e>=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},gM=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...n){return this.addParents(n),super.splice(e,r,...n)}addParents(e){for(let r of e)r.container=this.parent}},a1=class extends mp{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function yM(t){return t.$type===yE}var yE,Ale,_le,Ax,_x,vE,s1,Dx,JBe,vM,Lx=N(()=>{"use strict";cf();Soe();Rc();Ol();is();gE();yE=Symbol("Datatype");o(yM,"isDataTypeNode");Ale="\u200B",_le=o(t=>t.endsWith(Ale)?t:t+Ale,"withRuleSuffix"),Ax=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.allRules=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition,n=e.LanguageMetaData.mode==="production";this.wrapper=new vM(r,Object.assign(Object.assign({},e.parser.ParserConfig),{skipValidations:n,errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}getRule(e){return this.allRules.get(e)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},_x=class extends Ax{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new Sx,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let n=this.computeRuleType(e),i=this.wrapper.DEFINE_RULE(_le(e.name),this.startImplementation(n,r).bind(this));return this.allRules.set(e.name,i),e.entry&&(this.mainRule=i),i}computeRuleType(e){if(!e.fragment){if(Z2(e))return yE;{let r=Rg(e);return r??e.name}}}parse(e,r={}){this.nodeBuilder.buildRootNode(e);let n=this.lexerResult=this.lexer.tokenize(e);this.wrapper.input=n.tokens;let i=r.rule?this.allRules.get(r.rule):this.mainRule;if(!i)throw new Error(r.rule?`No rule found with name '${r.rule}'`:"No main rule available.");let a=i.call(this.wrapper,{});return this.nodeBuilder.addHiddenNodes(n.hidden),this.unorderedGroups.clear(),this.lexerResult=void 0,{value:a,lexerErrors:n.errors,lexerReport:n.report,parserErrors:this.wrapper.errors}}startImplementation(e,r){return n=>{let i=!this.isRecording()&&e!==void 0;if(i){let s={$type:e};this.stack.push(s),e===yE&&(s.value="")}let a;try{a=r(n)}catch{a=void 0}return a===void 0&&i&&(a=this.construct()),a}}extractHiddenTokens(e){let r=this.lexerResult.hidden;if(!r.length)return[];let n=e.startOffset;for(let i=0;i<r.length;i++)if(r[i].startOffset>n)return r.splice(0,i);return r.splice(0,r.length)}consume(e,r,n){let i=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(i)){let a=this.extractHiddenTokens(i);this.nodeBuilder.addHiddenNodes(a);let s=this.nodeBuilder.buildLeafNode(i,n),{assignment:l,isCrossRef:u}=this.getAssignment(n),h=this.current;if(l){let f=Ho(n)?i.image:this.converter.convert(i.image,s);this.assign(l.operator,l.feature,f,s,u)}else if(yM(h)){let f=i.image;Ho(n)||(f=this.converter.convert(f,s).toString()),h.value+=f}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,n,i,a){let s;!this.isRecording()&&!n&&(s=this.nodeBuilder.buildCompositeNode(i));let l=this.wrapper.wrapSubrule(e,r,a);!this.isRecording()&&s&&s.length>0&&this.performSubruleAssignment(l,i,s)}performSubruleAssignment(e,r,n){let{assignment:i,isCrossRef:a}=this.getAssignment(r);if(i)this.assign(i.operator,i.feature,e,n,a);else if(!i){let s=this.current;if(yM(s))s.value+=e.toString();else if(typeof e=="object"&&e){let u=this.assignWithoutOverride(e,s);this.stack.pop(),this.stack.push(u)}}}action(e,r){if(!this.isRecording()){let n=this.current;if(r.feature&&r.operator){n=this.construct(),this.nodeBuilder.removeNode(n.$cstNode),this.nodeBuilder.buildCompositeNode(r).content.push(n.$cstNode);let a={$type:e};this.stack.push(a),this.assign(r.operator,r.feature,n,n.$cstNode,!1)}else n.$type=e}}construct(){if(this.isRecording())return;let e=this.current;return vk(e),this.nodeBuilder.construct(e),this.stack.pop(),yM(e)?this.converter.convert(e.value,e.$cstNode):(XR(this.astReflection,e),e)}getAssignment(e){if(!this.assignmentMap.has(e)){let r=tp(e,Ml);this.assignmentMap.set(e,{assignment:r,isCrossRef:r?ep(r.terminal):!1})}return this.assignmentMap.get(e)}assign(e,r,n,i,a){let s=this.current,l;switch(a&&typeof n=="string"?l=this.linker.buildReference(s,r,i,n):l=n,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[i,a]of Object.entries(r)){let s=e[i];s===void 0?e[i]=a:Array.isArray(s)&&Array.isArray(a)&&(a.push(...s),e[i]=a)}let n=e.$cstNode;return n&&(n.astNode=void 0,e.$cstNode=void 0),e}get definitionErrors(){return this.wrapper.definitionErrors}},vE=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return zu.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return zu.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return zu.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return zu.buildEarlyExitMessage(e)}},s1=class extends vE{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},Dx=class extends Ax{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e,{mode:"partial"});return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let n=this.wrapper.DEFINE_RULE(_le(e.name),this.startImplementation(r).bind(this));return this.allRules.set(e.name,n),e.entry&&(this.mainRule=n),n}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let n=this.keepStackSize();try{e(r)}finally{this.resetStackSize(n)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,n){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,n],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,n,i,a){this.before(i),this.wrapper.wrapSubrule(e,r,a),this.after(i)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},JBe={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new s1},vM=class extends xx{static{o(this,"ChevrotainWrapper")}constructor(e,r){let n=r&&"maxLookahead"in r;super(e,Object.assign(Object.assign(Object.assign({},JBe),{lookaheadStrategy:n?new Gu({maxLookahead:r.maxLookahead}):new kx({logging:r.skipValidations?()=>{}:void 0})}),r))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r){return this.RULE(e,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r)}wrapSubrule(e,r,n){return this.subrule(e,r,{ARGS:[n]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}}});function Rx(t,e,r){return eFe({parser:e,tokens:r,ruleNames:new Map},t),e}function eFe(t,e){let r=K2(e,!1),n=en(e.rules).filter(Oa).filter(i=>r.has(i));for(let i of n){let a=Object.assign(Object.assign({},t),{consume:1,optional:1,subrule:1,many:1,or:1});t.parser.rule(i,gp(a,i.definition))}}function gp(t,e,r=!1){let n;if(Ho(e))n=oFe(t,e);else if(Mu(e))n=tFe(t,e);else if(Ml(e))n=gp(t,e.terminal);else if(ep(e))n=Dle(t,e);else if(Il(e))n=rFe(t,e);else if(mk(e))n=iFe(t,e);else if(yk(e))n=aFe(t,e);else if(sf(e))n=sFe(t,e);else if($R(e)){let i=t.consume++;n=o(()=>t.parser.consume(i,lo,e),"method")}else throw new Zd(e.$cstNode,`Unexpected element type: ${e.$type}`);return Lle(t,r?void 0:xE(e),n,e.cardinality)}function tFe(t,e){let r=J2(e);return()=>t.parser.action(r,e)}function rFe(t,e){let r=e.rule.ref;if(Oa(r)){let n=t.subrule++,i=r.fragment,a=e.arguments.length>0?nFe(r,e.arguments):()=>({});return s=>t.parser.subrule(n,Rle(t,r),i,e,a(s))}else if(so(r)){let n=t.consume++,i=xM(t,r.name);return()=>t.parser.consume(n,i,e)}else if(r)Lc(r);else throw new Zd(e.$cstNode,`Undefined rule: ${e.rule.$refText}`)}function nFe(t,e){let r=e.map(n=>Vu(n.value));return n=>{let i={};for(let a=0;a<r.length;a++){let s=t.parameters[a],l=r[a];i[s.name]=l(n)}return i}}function Vu(t){if(NR(t)){let e=Vu(t.left),r=Vu(t.right);return n=>e(n)||r(n)}else if(RR(t)){let e=Vu(t.left),r=Vu(t.right);return n=>e(n)&&r(n)}else if(MR(t)){let e=Vu(t.value);return r=>!e(r)}else if(IR(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(LR(t)){let e=!!t.true;return()=>e}Lc(t)}function iFe(t,e){if(e.elements.length===1)return gp(t,e.elements[0]);{let r=[];for(let i of e.elements){let a={ALT:gp(t,i,!0)},s=xE(i);s&&(a.GATE=Vu(s)),r.push(a)}let n=t.or++;return i=>t.parser.alternatives(n,r.map(a=>{let s={ALT:o(()=>a.ALT(i),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(i)),s}))}}function aFe(t,e){if(e.elements.length===1)return gp(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:gp(t,l,!0)},h=xE(l);h&&(u.GATE=Vu(h)),r.push(u)}let n=t.or++,i=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(n,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=i(n,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>{let m=d.unorderedGroups.get(i(n,d));return!m?.[h]},f})),"alternatives"),s=Lle(t,xE(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(i(n,t.parser))}}function sFe(t,e){let r=e.elements.map(n=>gp(t,n));return n=>r.forEach(i=>i(n))}function xE(t){if(sf(t))return t.guardCondition}function Dle(t,e,r=e.terminal){if(r)if(Il(r)&&Oa(r.rule.ref)){let n=r.rule.ref,i=t.subrule++;return a=>t.parser.subrule(i,Rle(t,n),!1,e,a)}else if(Il(r)&&so(r.rule.ref)){let n=t.consume++,i=xM(t,r.rule.ref.name);return()=>t.parser.consume(n,i,e)}else if(Ho(r)){let n=t.consume++,i=xM(t,r.value);return()=>t.parser.consume(n,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=kk(e.type.ref),i=n?.terminal;if(!i)throw new Error("Could not find name assignment for type: "+J2(e.type.ref));return Dle(t,e,i)}}function oFe(t,e){let r=t.consume++,n=t.tokens[e.value];if(!n)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,n,e)}function Lle(t,e,r,n){let i=e&&Vu(e);if(!n)if(i){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>i(s),"GATE")},{ALT:lE(),GATE:o(()=>!i(s),"GATE")}])}else return r;if(n==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else if(n==="+"){let a=t.many++;if(i){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>i(l),"GATE")},{ALT:lE(),GATE:o(()=>!i(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(n==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else Lc(n)}function Rle(t,e){let r=lFe(t,e),n=t.parser.getRule(r);if(!n)throw new Error(`Rule "${r}" not found."`);return n}function lFe(t,e){if(Oa(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,n=r.$container,i=e.$type;for(;!Oa(n);)(sf(n)||mk(n)||yk(n))&&(i=n.elements.indexOf(r).toString()+":"+i),r=n,n=n.$container;return i=n.name+":"+i,t.ruleNames.set(e,i),i}}function xM(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var bE=N(()=>{"use strict";cf();Rc();uk();Ps();Ol();o(Rx,"createParser");o(eFe,"buildRules");o(gp,"buildElement");o(tFe,"buildAction");o(rFe,"buildRuleCall");o(nFe,"buildRuleCallPredicate");o(Vu,"buildPredicate");o(iFe,"buildAlternatives");o(aFe,"buildUnorderedGroup");o(sFe,"buildGroup");o(xE,"getGuardCondition");o(Dle,"buildCrossReference");o(oFe,"buildKeyword");o(Lle,"wrap");o(Rle,"getRule");o(lFe,"getRuleName");o(xM,"getToken")});function bM(t){let e=t.Grammar,r=t.parser.Lexer,n=new Dx(t);return Rx(e,n,r.definition),n.finalize(),n}var wM=N(()=>{"use strict";Lx();bE();o(bM,"createCompletionParser")});function TM(t){let e=Nle(t);return e.finalize(),e}function Nle(t){let e=t.Grammar,r=t.parser.Lexer,n=new _x(t);return Rx(e,n,r.definition)}var kM=N(()=>{"use strict";Lx();bE();o(TM,"createLangiumParser");o(Nle,"prepareLangiumParser")});var Uu,wE=N(()=>{"use strict";cf();Rc();is();Ol();Lg();Ps();Uu=class{static{o(this,"DefaultTokenBuilder")}constructor(){this.diagnostics=[]}buildTokens(e,r){let n=en(K2(e,!1)),i=this.buildTerminalTokens(n),a=this.buildKeywordTokens(n,i,r);return i.forEach(s=>{let l=s.PATTERN;typeof l=="object"&&l&&"test"in l&&Dg(l)?a.unshift(s):a.push(s)}),a}flushLexingReport(e){return{diagnostics:this.popDiagnostics()}}popDiagnostics(){let e=[...this.diagnostics];return this.diagnostics=[],e}buildTerminalTokens(e){return e.filter(so).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=Ng(e),n=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,i={name:e.name,PATTERN:n};return typeof n=="function"&&(i.LINE_BREAKS=!0),e.hidden&&(i.GROUP=Dg(r)?Xn.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")||e.flags.includes("s")?!0:!!(e.source.includes("?<=")||e.source.includes("?<!"))}regexPatternFunction(e){let r=new RegExp(e,e.flags+"y");return(n,i)=>(r.lastIndex=i,r.exec(n))}buildKeywordTokens(e,r,n){return e.filter(Oa).flatMap(i=>Nc(i).filter(Ho)).distinct(i=>i.value).toArray().sort((i,a)=>a.value.length-i.value.length).map(i=>this.buildKeywordToken(i,r,!!n?.caseInsensitive))}buildKeywordToken(e,r,n){let i=this.buildKeywordPattern(e,n),a={name:e.value,PATTERN:i,LONGER_ALT:this.findLongerAlt(e,r)};return typeof i=="function"&&(a.LINE_BREAKS=!0),a}buildKeywordPattern(e,r){return r?new RegExp(tN(e.value)):e.value}findLongerAlt(e,r){return r.reduce((n,i)=>{let a=i?.PATTERN;return a?.source&&rN("^"+a.source+"$",e.value)&&n.push(i),n},[])}}});var yp,Oc,EM=N(()=>{"use strict";Rc();Ol();yp=class{static{o(this,"DefaultValueConverter")}convert(e,r){let n=r.grammarSource;if(ep(n)&&(n=aN(n)),Il(n)){let i=n.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,r)}return e}runConverter(e,r,n){var i;switch(e.name.toUpperCase()){case"INT":return Oc.convertInt(r);case"STRING":return Oc.convertString(r);case"ID":return Oc.convertID(r)}switch((i=fN(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return Oc.convertNumber(r);case"boolean":return Oc.convertBoolean(r);case"bigint":return Oc.convertBigint(r);case"date":return Oc.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d<h.length-1;d++){let p=h.charAt(d);if(p==="\\"){let m=h.charAt(++d);f+=r(m)}else f+=p}return f}o(e,"convertString"),t.convertString=e;function r(h){switch(h){case"b":return"\b";case"f":return"\f";case"n":return` | |
| 806 | +`;case"r":return"\r";case"t":return" ";case"v":return"\v";case"0":return"\0";default:return h}}o(r,"convertEscapeCharacter");function n(h){return h.charAt(0)==="^"?h.substring(1):h}o(n,"convertID"),t.convertID=n;function i(h){return parseInt(h)}o(i,"convertInt"),t.convertInt=i;function a(h){return BigInt(h)}o(a,"convertBigint"),t.convertBigint=a;function s(h){return new Date(h)}o(s,"convertDate"),t.convertDate=s;function l(h){return Number(h)}o(l,"convertNumber"),t.convertNumber=l;function u(h){return h.toLowerCase()==="true"}o(u,"convertBoolean"),t.convertBoolean=u})(Oc||(Oc={}))});var _M=Mi(AM=>{"use strict";Object.defineProperty(AM,"__esModule",{value:!0});var SM;function CM(){if(SM===void 0)throw new Error("No runtime abstraction layer installed");return SM}o(CM,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");SM=r}o(e,"install"),t.install=e})(CM||(CM={}));AM.default=CM});var Ole=Mi(Ba=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});Ba.stringArray=Ba.array=Ba.func=Ba.error=Ba.number=Ba.string=Ba.boolean=void 0;function cFe(t){return t===!0||t===!1}o(cFe,"boolean");Ba.boolean=cFe;function Mle(t){return typeof t=="string"||t instanceof String}o(Mle,"string");Ba.string=Mle;function uFe(t){return typeof t=="number"||t instanceof Number}o(uFe,"number");Ba.number=uFe;function hFe(t){return t instanceof Error}o(hFe,"error");Ba.error=hFe;function fFe(t){return typeof t=="function"}o(fFe,"func");Ba.func=fFe;function Ile(t){return Array.isArray(t)}o(Ile,"array");Ba.array=Ile;function dFe(t){return Ile(t)&&t.every(e=>Mle(e))}o(dFe,"stringArray");Ba.stringArray=dFe});var LM=Mi(o1=>{"use strict";Object.defineProperty(o1,"__esModule",{value:!0});o1.Emitter=o1.Event=void 0;var pFe=_M(),Ple;(function(t){let e={dispose(){}};t.None=function(){return e}})(Ple||(o1.Event=Ple={}));var DM=class{static{o(this,"CallbackList")}add(e,r=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(n)&&n.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let n=!1;for(let i=0,a=this._callbacks.length;i<a;i++)if(this._callbacks[i]===e)if(this._contexts[i]===r){this._callbacks.splice(i,1),this._contexts.splice(i,1);return}else n=!0;if(n)throw new Error("When adding a listener with a context, you should remove it with the same context")}invoke(...e){if(!this._callbacks)return[];let r=[],n=this._callbacks.slice(0),i=this._contexts.slice(0);for(let a=0,s=n.length;a<s;a++)try{r.push(n[a].apply(i[a],e))}catch(l){(0,pFe.default)().console.error(l)}return r}isEmpty(){return!this._callbacks||this._callbacks.length===0}dispose(){this._callbacks=void 0,this._contexts=void 0}},TE=class t{static{o(this,"Emitter")}constructor(e){this._options=e}get event(){return this._event||(this._event=(e,r,n)=>{this._callbacks||(this._callbacks=new DM),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let i={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),i.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(n)&&n.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};o1.Emitter=TE;TE._noop=function(){}});var Ble=Mi(l1=>{"use strict";Object.defineProperty(l1,"__esModule",{value:!0});l1.CancellationTokenSource=l1.CancellationToken=void 0;var mFe=_M(),gFe=Ole(),RM=LM(),kE;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:RM.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:RM.Event.None});function e(r){let n=r;return n&&(n===t.None||n===t.Cancelled||gFe.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}o(e,"is"),t.is=e})(kE||(l1.CancellationToken=kE={}));var yFe=Object.freeze(function(t,e){let r=(0,mFe.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),EE=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?yFe:(this._emitter||(this._emitter=new RM.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},NM=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new EE),this._token}cancel(){this._token?this._token.cancel():this._token=kE.Cancelled}dispose(){this._token?this._token instanceof EE&&this._token.dispose():this._token=kE.None}};l1.CancellationTokenSource=NM});var yr={};var qo=N(()=>{"use strict";Sr(yr,Sa(Ble(),1))});function MM(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function CE(){return SE=performance.now(),new yr.CancellationTokenSource}function $le(t){Fle=t}function Bc(t){return t===Pc}async function xi(t){if(t===yr.CancellationToken.None)return;let e=performance.now();if(e-SE>=Fle&&(SE=e,await MM(),SE=performance.now()),t.isCancellationRequested)throw Pc}var SE,Fle,Pc,cs,Yo=N(()=>{"use strict";qo();o(MM,"delayNextTick");SE=0,Fle=10;o(CE,"startCancelableOperation");o($le,"setInterruptionPeriod");Pc=Symbol("OperationCancelled");o(Bc,"isOperationCancelled");o(xi,"interruptAndCheck");cs=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=n=>(e(n),this),this.reject=n=>(r(n),this)})}}});function IM(t,e){if(t.length<=1)return t;let r=t.length/2|0,n=t.slice(0,r),i=t.slice(r);IM(n,e),IM(i,e);let a=0,s=0,l=0;for(;a<n.length&&s<i.length;)e(n[a],i[s])<=0?t[l++]=n[a++]:t[l++]=i[s++];for(;a<n.length;)t[l++]=n[a++];for(;s<i.length;)t[l++]=i[s++];return t}function zle(t,e,r=0){let n=e?[r]:[];for(let i=0;i<t.length;i++){let a=t.charCodeAt(i);Gle(a)&&(a===13&&i+1<t.length&&t.charCodeAt(i+1)===10&&i++,n.push(r+i+1))}return n}function Gle(t){return t===13||t===10}function Vle(t){let e=t.start,r=t.end;return e.line>r.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function vFe(t){let e=Vle(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var AE,c1,Ule=N(()=>{"use strict";AE=class t{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){for(let n of e)if(t.isIncremental(n)){let i=Vle(n.range),a=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(s,this._content.length);let l=Math.max(i.start.line,0),u=Math.max(i.end.line,0),h=this._lineOffsets,f=zle(n.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;p<m;p++)h[p+l+1]=f[p];else f.length<1e4?h.splice(l+1,u-l,...f):this._lineOffsets=h=h.slice(0,l+1).concat(f,h.slice(u+1));let d=n.text.length-(s-a);if(d!==0)for(let p=l+1+f.length,m=h.length;p<m;p++)h[p]=h[p]+d}else if(t.isFull(n))this._content=n.text,this._lineOffsets=void 0;else throw new Error("Unknown change event received");this._version=r}getLineOffsets(){return this._lineOffsets===void 0&&(this._lineOffsets=zle(this._content,!0)),this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return{line:0,character:e};for(;n<i;){let s=Math.floor((n+i)/2);r[s]>e?i=s:n=s+1}let a=n-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line];if(e.character<=0)return n;let i=e.line+1<r.length?r[e.line+1]:this._content.length,a=Math.min(n+e.character,i);return this.ensureBeforeEOL(a,n)}ensureBeforeEOL(e,r){for(;e>r&&Gle(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(i,a,s,l){return new AE(i,a,s,l)}o(e,"create"),t.create=e;function r(i,a,s){if(i instanceof AE)return i.update(a,s),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function n(i,a){let s=i.getText(),l=IM(a.map(vFe),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=i.offsetAt(f.range.start);if(d<u)throw new Error("Overlapping edit");d>u&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=i.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(n,"applyEdits"),t.applyEdits=n})(c1||(c1={}));o(IM,"mergeSort");o(zle,"computeLineOffsets");o(Gle,"isEOL");o(Vle,"getWellformedRange");o(vFe,"getWellformedEdit")});var Hle,us,u1,OM=N(()=>{"use strict";(()=>{"use strict";var t={470:i=>{function a(u){if(typeof u!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(u))}o(a,"e");function s(u,h){for(var f,d="",p=0,m=-1,g=0,y=0;y<=u.length;++y){if(y<u.length)f=u.charCodeAt(y);else{if(f===47)break;f=47}if(f===47){if(!(m===y-1||g===1))if(m!==y-1&&g===2){if(d.length<2||p!==2||d.charCodeAt(d.length-1)!==46||d.charCodeAt(d.length-2)!==46){if(d.length>2){var v=d.lastIndexOf("/");if(v!==d.length-1){v===-1?(d="",p=0):p=(d=d.slice(0,v)).length-1-d.lastIndexOf("/"),m=y,g=0;continue}}else if(d.length===2||d.length===1){d="",p=0,m=y,g=0;continue}}h&&(d.length>0?d+="/..":d="..",p=2)}else d.length>0?d+="/"+u.slice(m+1,y):d=u.slice(m+1,y),p=y-m-1;m=y,g=0}else f===46&&g!==-1?++g:g=-1}return d}o(s,"r");var l={resolve:o(function(){for(var u,h="",f=!1,d=arguments.length-1;d>=-1&&!f;d--){var p;d>=0?p=arguments[d]:(u===void 0&&(u=process.cwd()),p=u),a(p),p.length!==0&&(h=p+"/"+h,f=p.charCodeAt(0)===47)}return h=s(h,!f),f?h.length>0?"/"+h:"/":h.length>0?h:"."},"resolve"),normalize:o(function(u){if(a(u),u.length===0)return".";var h=u.charCodeAt(0)===47,f=u.charCodeAt(u.length-1)===47;return(u=s(u,!h)).length!==0||h||(u="."),u.length>0&&f&&(u+="/"),h?"/"+u:u},"normalize"),isAbsolute:o(function(u){return a(u),u.length>0&&u.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var u,h=0;h<arguments.length;++h){var f=arguments[h];a(f),f.length>0&&(u===void 0?u=f:u+="/"+f)}return u===void 0?".":l.normalize(u)},"join"),relative:o(function(u,h){if(a(u),a(h),u===h||(u=l.resolve(u))===(h=l.resolve(h)))return"";for(var f=1;f<u.length&&u.charCodeAt(f)===47;++f);for(var d=u.length,p=d-f,m=1;m<h.length&&h.charCodeAt(m)===47;++m);for(var g=h.length-m,y=p<g?p:g,v=-1,x=0;x<=y;++x){if(x===y){if(g>y){if(h.charCodeAt(m+x)===47)return h.slice(m+x+1);if(x===0)return h.slice(m+x)}else p>y&&(u.charCodeAt(f+x)===47?v=x:x===0&&(v=0));break}var b=u.charCodeAt(f+x);if(b!==h.charCodeAt(m+x))break;b===47&&(v=x)}var w="";for(x=f+v+1;x<=d;++x)x!==d&&u.charCodeAt(x)!==47||(w.length===0?w+="..":w+="/..");return w.length>0?w+h.slice(m+v):(m+=v,h.charCodeAt(m)===47&&++m,h.slice(m))},"relative"),_makeLong:o(function(u){return u},"_makeLong"),dirname:o(function(u){if(a(u),u.length===0)return".";for(var h=u.charCodeAt(0),f=h===47,d=-1,p=!0,m=u.length-1;m>=1;--m)if((h=u.charCodeAt(m))===47){if(!p){d=m;break}}else p=!1;return d===-1?f?"/":".":f&&d===1?"//":u.slice(0,d)},"dirname"),basename:o(function(u,h){if(h!==void 0&&typeof h!="string")throw new TypeError('"ext" argument must be a string');a(u);var f,d=0,p=-1,m=!0;if(h!==void 0&&h.length>0&&h.length<=u.length){if(h.length===u.length&&h===u)return"";var g=h.length-1,y=-1;for(f=u.length-1;f>=0;--f){var v=u.charCodeAt(f);if(v===47){if(!m){d=f+1;break}}else y===-1&&(m=!1,y=f+1),g>=0&&(v===h.charCodeAt(g)?--g==-1&&(p=f):(g=-1,p=y))}return d===p?p=y:p===-1&&(p=u.length),u.slice(d,p)}for(f=u.length-1;f>=0;--f)if(u.charCodeAt(f)===47){if(!m){d=f+1;break}}else p===-1&&(m=!1,p=f+1);return p===-1?"":u.slice(d,p)},"basename"),extname:o(function(u){a(u);for(var h=-1,f=0,d=-1,p=!0,m=0,g=u.length-1;g>=0;--g){var y=u.charCodeAt(g);if(y!==47)d===-1&&(p=!1,d=g+1),y===46?h===-1?h=g:m!==1&&(m=1):h!==-1&&(m=-1);else if(!p){f=g+1;break}}return h===-1||d===-1||m===0||m===1&&h===d-1&&h===f+1?"":u.slice(h,d)},"extname"),format:o(function(u){if(u===null||typeof u!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof u);return function(h,f){var d=f.dir||f.root,p=f.base||(f.name||"")+(f.ext||"");return d?d===f.root?d+p:d+"/"+p:p}(0,u)},"format"),parse:o(function(u){a(u);var h={root:"",dir:"",base:"",ext:"",name:""};if(u.length===0)return h;var f,d=u.charCodeAt(0),p=d===47;p?(h.root="/",f=1):f=0;for(var m=-1,g=0,y=-1,v=!0,x=u.length-1,b=0;x>=f;--x)if((d=u.charCodeAt(x))!==47)y===-1&&(v=!1,y=x+1),d===46?m===-1?m=x:b!==1&&(b=1):m!==-1&&(b=-1);else if(!v){g=x+1;break}return m===-1||y===-1||b===0||b===1&&m===y-1&&m===g+1?y!==-1&&(h.base=h.name=g===0&&p?u.slice(1,y):u.slice(g,y)):(g===0&&p?(h.name=u.slice(1,m),h.base=u.slice(1,y)):(h.name=u.slice(g,m),h.base=u.slice(g,y)),h.ext=u.slice(m,y)),g>0?h.dir=u.slice(0,g-1):p&&(h.dir="/"),h},"parse"),sep:"/",delimiter:":",win32:null,posix:null};l.posix=l,i.exports=l}},e={};function r(i){var a=e[i];if(a!==void 0)return a.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}o(r,"r"),r.d=(i,a)=>{for(var s in a)r.o(a,s)&&!r.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:a[s]})},r.o=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};(()=>{let i;r.r(n),r.d(n,{URI:o(()=>p,"URI"),Utils:o(()=>I,"Utils")}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(D,k){if(!D.scheme&&k)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${D.authority}", path: "${D.path}", query: "${D.query}", fragment: "${D.fragment}"}`);if(D.scheme&&!a.test(D.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(D.path){if(D.authority){if(!s.test(D.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(D.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"s");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"f")}static isUri(k){return k instanceof p||!!k&&typeof k.authority=="string"&&typeof k.fragment=="string"&&typeof k.path=="string"&&typeof k.query=="string"&&typeof k.scheme=="string"&&typeof k.fsPath=="string"&&typeof k.with=="function"&&typeof k.toString=="function"}scheme;authority;path;query;fragment;constructor(k,L,R,O,M,B=!1){typeof k=="object"?(this.scheme=k.scheme||h,this.authority=k.authority||h,this.path=k.path||h,this.query=k.query||h,this.fragment=k.fragment||h):(this.scheme=function(F,P){return F||P?F:"file"}(k,B),this.authority=L||h,this.path=function(F,P){switch(F){case"https":case"http":case"file":P?P[0]!==f&&(P=f+P):P=f}return P}(this.scheme,R||h),this.query=O||h,this.fragment=M||h,u(this,B))}get fsPath(){return b(this,!1)}with(k){if(!k)return this;let{scheme:L,authority:R,path:O,query:M,fragment:B}=k;return L===void 0?L=this.scheme:L===null&&(L=h),R===void 0?R=this.authority:R===null&&(R=h),O===void 0?O=this.path:O===null&&(O=h),M===void 0?M=this.query:M===null&&(M=h),B===void 0?B=this.fragment:B===null&&(B=h),L===this.scheme&&R===this.authority&&O===this.path&&M===this.query&&B===this.fragment?this:new g(L,R,O,M,B)}static parse(k,L=!1){let R=d.exec(k);return R?new g(R[2]||h,E(R[4]||h),E(R[5]||h),E(R[7]||h),E(R[9]||h),L):new g(h,h,h,h,h)}static file(k){let L=h;if(i&&(k=k.replace(/\\/g,f)),k[0]===f&&k[1]===f){let R=k.indexOf(f,2);R===-1?(L=k.substring(2),k=f):(L=k.substring(2,R),k=k.substring(R)||f)}return new g("file",L,k,h,h)}static from(k){let L=new g(k.scheme,k.authority,k.path,k.query,k.fragment);return u(L,!0),L}toString(k=!1){return w(this,k)}toJSON(){return this}static revive(k){if(k){if(k instanceof p)return k;{let L=new g(k);return L._formatted=k.external,L._fsPath=k._sep===m?k.fsPath:null,L}}return k}}let m=i?1:void 0;class g extends p{static{o(this,"l")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(k=!1){return k?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)}toJSON(){let k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=m),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(D,k,L){let R,O=-1;for(let M=0;M<D.length;M++){let B=D.charCodeAt(M);if(B>=97&&B<=122||B>=65&&B<=90||B>=48&&B<=57||B===45||B===46||B===95||B===126||k&&B===47||L&&B===91||L&&B===93||L&&B===58)O!==-1&&(R+=encodeURIComponent(D.substring(O,M)),O=-1),R!==void 0&&(R+=D.charAt(M));else{R===void 0&&(R=D.substr(0,M));let F=y[B];F!==void 0?(O!==-1&&(R+=encodeURIComponent(D.substring(O,M)),O=-1),R+=F):O===-1&&(O=M)}}return O!==-1&&(R+=encodeURIComponent(D.substring(O))),R!==void 0?R:D}o(v,"d");function x(D){let k;for(let L=0;L<D.length;L++){let R=D.charCodeAt(L);R===35||R===63?(k===void 0&&(k=D.substr(0,L)),k+=y[R]):k!==void 0&&(k+=D[L])}return k!==void 0?k:D}o(x,"p");function b(D,k){let L;return L=D.authority&&D.path.length>1&&D.scheme==="file"?`//${D.authority}${D.path}`:D.path.charCodeAt(0)===47&&(D.path.charCodeAt(1)>=65&&D.path.charCodeAt(1)<=90||D.path.charCodeAt(1)>=97&&D.path.charCodeAt(1)<=122)&&D.path.charCodeAt(2)===58?k?D.path.substr(1):D.path[1].toLowerCase()+D.path.substr(2):D.path,i&&(L=L.replace(/\//g,"\\")),L}o(b,"m");function w(D,k){let L=k?x:v,R="",{scheme:O,authority:M,path:B,query:F,fragment:P}=D;if(O&&(R+=O,R+=":"),(M||O==="file")&&(R+=f,R+=f),M){let z=M.indexOf("@");if(z!==-1){let $=M.substr(0,z);M=M.substr(z+1),z=$.lastIndexOf(":"),z===-1?R+=L($,!1,!1):(R+=L($.substr(0,z),!1,!1),R+=":",R+=L($.substr(z+1),!1,!0)),R+="@"}M=M.toLowerCase(),z=M.lastIndexOf(":"),z===-1?R+=L(M,!1,!0):(R+=L(M.substr(0,z),!1,!0),R+=M.substr(z))}if(B){if(B.length>=3&&B.charCodeAt(0)===47&&B.charCodeAt(2)===58){let z=B.charCodeAt(1);z>=65&&z<=90&&(B=`/${String.fromCharCode(z+32)}:${B.substr(3)}`)}else if(B.length>=2&&B.charCodeAt(1)===58){let z=B.charCodeAt(0);z>=65&&z<=90&&(B=`${String.fromCharCode(z+32)}:${B.substr(2)}`)}R+=L(B,!0,!1)}return F&&(R+="?",R+=L(F,!1,!1)),P&&(R+="#",R+=k?P:v(P,!1,!1)),R}o(w,"y");function C(D){try{return decodeURIComponent(D)}catch{return D.length>3?D.substr(0,3)+C(D.substr(3)):D}}o(C,"v");let T=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function E(D){return D.match(T)?D.replace(T,k=>C(k)):D}o(E,"C");var A=r(470);let S=A.posix||A,_="/";var I;(function(D){D.joinPath=function(k,...L){return k.with({path:S.join(k.path,...L)})},D.resolvePath=function(k,...L){let R=k.path,O=!1;R[0]!==_&&(R=_+R,O=!0);let M=S.resolve(R,...L);return O&&M[0]===_&&!k.authority&&(M=M.substring(1)),k.with({path:M})},D.dirname=function(k){if(k.path.length===0||k.path===_)return k;let L=S.dirname(k.path);return L.length===1&&L.charCodeAt(0)===46&&(L=""),k.with({path:L})},D.basename=function(k){return S.basename(k.path)},D.extname=function(k){return S.extname(k.path)}})(I||(I={}))})(),Hle=n})();({URI:us,Utils:u1}=Hle)});var hs,Fc=N(()=>{"use strict";OM();(function(t){t.basename=u1.basename,t.dirname=u1.dirname,t.extname=u1.extname,t.joinPath=u1.joinPath,t.resolvePath=u1.resolvePath;function e(i,a){return i?.toString()===a?.toString()}o(e,"equals"),t.equals=e;function r(i,a){let s=typeof i=="string"?i:i.path,l=typeof a=="string"?a:a.path,u=s.split("/").filter(m=>m.length>0),h=l.split("/").filter(m=>m.length>0),f=0;for(;f<u.length&&u[f]===h[f];f++);let d="../".repeat(u.length-f),p=h.slice(f).join("/");return d+p}o(r,"relative"),t.relative=r;function n(i){return us.parse(i.toString()).toString()}o(n,"normalize"),t.normalize=n})(hs||(hs={}))});var kn,Nx,Mx,h1=N(()=>{"use strict";Ule();h1();qo();Ps();Fc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(kn||(kn={}));Nx=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=yr.CancellationToken.None){let n=await this.fileSystemProvider.readFile(e);return this.createAsync(e,n,r)}fromTextDocument(e,r,n){return r=r??us.parse(e.uri),yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromString(e,r,n){return yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r,n){if(typeof r=="string"){let i=this.parse(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else if("$model"in r){let i={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(i,e)}else{let i=this.parse(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}async createAsync(e,r,n){if(typeof r=="string"){let i=await this.parseAsync(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else{let i=await this.parseAsync(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}createLangiumDocument(e,r,n,i){let a;if(n)a={parseResult:e,uri:r,state:kn.Parsed,references:[],textDocument:n};else{let s=this.createTextDocumentGetter(r,i);a={parseResult:e,uri:r,state:kn.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){var n,i;let a=(n=e.parseResult.value.$cstNode)===null||n===void 0?void 0:n.root.fullText,s=(i=this.textDocuments)===null||i===void 0?void 0:i.get(e.uri.toString()),l=s?s.getText():await this.fileSystemProvider.readFile(e.uri);if(s)Object.defineProperty(e,"textDocument",{value:s});else{let u=this.createTextDocumentGetter(e.uri,l);Object.defineProperty(e,"textDocument",{get:u})}return a!==l&&(e.parseResult=await this.parseAsync(e.uri,l,r),e.parseResult.value.$document=e),e.state=kn.Parsed,e}parse(e,r,n){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r,n)}parseAsync(e,r,n){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,n)}createTextDocumentGetter(e,r){let n=this.serviceRegistry,i;return()=>i??(i=c1.create(e.toString(),n.getServices(e).LanguageMetaData.languageId,0,r??""))}},Mx=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.serviceRegistry=e.ServiceRegistry}get all(){return en(this.documentMap.values())}addDocument(e){let r=e.uri.toString();if(this.documentMap.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentMap.set(r,e)}getDocument(e){let r=e.toString();return this.documentMap.get(r)}async getOrCreateDocument(e,r){let n=this.getDocument(e);return n||(n=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(n),n)}createDocument(e,r,n){if(n)return this.langiumDocumentFactory.fromString(r,e,n).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(this.serviceRegistry.getServices(e).references.Linker.unlink(n),n.state=kn.Changed,n.precomputedScopes=void 0,n.diagnostics=void 0),n}deleteDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=kn.Changed,this.documentMap.delete(r)),n}}});var PM,Ix,BM=N(()=>{"use strict";qo();Rl();is();Yo();h1();PM=Symbol("ref_resolving"),Ix=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,r=yr.CancellationToken.None){for(let n of Wo(e.parseResult.value))await xi(r),Ag(n).forEach(i=>this.doLink(i,e))}doLink(e,r){var n;let i=e.reference;if(i._ref===void 0){i._ref=PM;try{let a=this.getCandidate(e);if(jd(a))i._ref=a;else if(i._nodeDescription=a,this.langiumDocuments().hasDocument(a.documentUri)){let s=this.loadAstNode(a);i._ref=s??this.createLinkingError(e,a)}else i._ref=void 0}catch(a){console.error(`An error occurred while resolving reference to '${i.$refText}':`,a);let s=(n=a.message)!==null&&n!==void 0?n:String(a);i._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${i.$refText}': ${s}`})}r.references.push(i)}}unlink(e){for(let r of e.references)delete r._ref,delete r._nodeDescription;e.references=[]}getCandidate(e){let n=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return n??this.createLinkingError(e)}buildReference(e,r,n,i){let a=this,s={$refNode:n,$refText:i,get ref(){var l;if(ii(this._ref))return this._ref;if(kR(this._nodeDescription)){let u=a.loadAstNode(this._nodeDescription);this._ref=u??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){this._ref=PM;let u=H2(e).$document,h=a.getLinkedNode({reference:s,container:e,property:r});if(h.error&&u&&u.state<kn.ComputedScopes)return this._ref=void 0;this._ref=(l=h.node)!==null&&l!==void 0?l:h.error,this._nodeDescription=h.descr,u?.references.push(this)}else if(this._ref===PM)throw new Error(`Cyclic reference resolution detected: ${a.astNodeLocator.getAstNodePath(e)}/${r} (symbol '${i}')`);return ii(this._ref)?this._ref:void 0},get $nodeDescription(){return this._nodeDescription},get error(){return jd(this._ref)?this._ref:void 0}};return s}getLinkedNode(e){var r;try{let n=this.getCandidate(e);if(jd(n))return{error:n};let i=this.loadAstNode(n);return i?{node:i,descr:n}:{descr:n,error:this.createLinkingError(e,n)}}catch(n){console.error(`An error occurred while resolving reference to '${e.reference.$refText}':`,n);let i=(r=n.message)!==null&&r!==void 0?r:String(n);return{error:Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${e.reference.$refText}': ${i}`})}}}loadAstNode(e){if(e.node)return e.node;let r=this.langiumDocuments().getDocument(e.documentUri);if(r)return this.astNodeLocator.getAstNode(r.parseResult.value,e.path)}createLinkingError(e,r){let n=H2(e.container).$document;n&&n.state<kn.ComputedScopes&&console.warn(`Attempted reference resolution before document reached ComputedScopes state (${n.uri}).`);let i=this.reflection.getReferenceType(e);return Object.assign(Object.assign({},e),{message:`Could not resolve reference to ${i} named '${e.reference.$refText}'.`,targetDescription:r})}}});function Wle(t){return typeof t.name=="string"}var Ox,FM=N(()=>{"use strict";Ol();o(Wle,"isNamed");Ox=class{static{o(this,"DefaultNameProvider")}getName(e){if(Wle(e))return e.name}getNameNode(e){return Q2(e.$cstNode,"name")}}});var Px,$M=N(()=>{"use strict";Ol();Rl();is();Nl();Ps();Fc();Px=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator}findDeclaration(e){if(e){let r=hN(e),n=e.astNode;if(r&&n){let i=n[r.feature];if(va(i))return i.ref;if(Array.isArray(i)){for(let a of i)if(va(a)&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return a.ref}}if(n){let i=this.nameProvider.getNameNode(n);if(i&&(i===e||SR(e,i)))return n}}}findDeclarationNode(e){let r=this.findDeclaration(e);if(r?.$cstNode){let n=this.nameProvider.getNameNode(r);return n??r.$cstNode}}findReferences(e,r){let n=[];if(r.includeDeclaration){let a=this.getReferenceToSelf(e);a&&n.push(a)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(i=i.filter(a=>hs.equals(a.sourceUri,r.documentUri))),n.push(...i),en(n)}getReferenceToSelf(e){let r=this.nameProvider.getNameNode(e);if(r){let n=Pa(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:n.uri,sourcePath:i,targetUri:n.uri,targetPath:i,segment:Qd(r),local:!0}}}}});var Bl,vp,f1=N(()=>{"use strict";Ps();Bl=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,n]of e)this.add(r,n)}get size(){return zm.sum(en(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let n=this.map.get(e);if(n){let i=n.indexOf(r);if(i>=0)return n.length===1?this.map.delete(e):n.splice(i,1),!0}return!1}}get(e){var r;return(r=this.map.get(e))!==null&&r!==void 0?r:[]}has(e,r){if(r===void 0)return this.map.has(e);{let n=this.map.get(e);return n?n.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,n)=>r.forEach(i=>e(i,n,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return en(this.map.entries()).flatMap(([e,r])=>r.map(n=>[e,n]))}keys(){return en(this.map.keys())}values(){return en(this.map.values()).flat()}entriesGroupedByKey(){return en(this.map.entries())}},vp=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,n]of e)this.set(r,n)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var Bx,zM=N(()=>{"use strict";qo();is();f1();Yo();Bx=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,r=yr.CancellationToken.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,r)}async computeExportsForNode(e,r,n=W2,i=yr.CancellationToken.None){let a=[];this.exportNode(e,a,r);for(let s of n(e))await xi(i),this.exportNode(s,a,r);return a}exportNode(e,r,n){let i=this.nameProvider.getName(e);i&&r.push(this.descriptions.createDescription(e,i,n))}async computeLocalScopes(e,r=yr.CancellationToken.None){let n=e.parseResult.value,i=new Bl;for(let a of Nc(n))await xi(r),this.processNode(a,e,i);return i}processNode(e,r,n){let i=e.$container;if(i){let a=this.nameProvider.getName(e);a&&n.add(i,this.descriptions.createDescription(e,a,r))}}}});var d1,Fx,xFe,GM=N(()=>{"use strict";Ps();d1=class{static{o(this,"StreamScope")}constructor(e,r,n){var i;this.elements=e,this.outerScope=r,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===e.toLowerCase()):this.elements.find(n=>n.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}},Fx=class{static{o(this,"MapScope")}constructor(e,r,n){var i;this.elements=new Map,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1;for(let a of e){let s=this.caseInsensitive?a.name.toLowerCase():a.name;this.elements.set(s,a)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,n=this.elements.get(r);if(n)return n;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=en(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},xFe={getElement(){},getAllElements(){return I2}}});var p1,$x,xp,_E,m1,DE=N(()=>{"use strict";p1=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},$x=class extends p1{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let n=r();return this.cache.set(e,n),n}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},xp=class extends p1{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,n){this.throwIfDisposed(),this.cacheForContext(e).set(r,n)}get(e,r,n){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(r))return i.get(r);if(n){let a=n();return i.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),n=this.cache.get(r);return n||(n=new Map,this.cache.set(r,n)),n}},_E=class extends xp{static{o(this,"DocumentCache")}constructor(e,r){super(n=>n.toString()),r?(this.toDispose.push(e.workspace.DocumentBuilder.onDocumentPhase(r,n=>{this.clear(n.uri.toString())})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{for(let a of i)this.clear(a)}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{let a=n.concat(i);for(let s of a)this.clear(s)}))}},m1=class extends $x{static{o(this,"WorkspaceCache")}constructor(e,r){super(),r?(this.toDispose.push(e.workspace.DocumentBuilder.onBuildPhase(r,()=>{this.clear()})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{i.length>0&&this.clear()}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var zx,VM=N(()=>{"use strict";GM();is();Ps();DE();zx=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new m1(e.shared)}getScope(e){let r=[],n=this.reflection.getReferenceType(e),i=Pa(e.container).precomputedScopes;if(i){let s=e.container;do{let l=i.get(s);l.length>0&&r.push(en(l).filter(u=>this.reflection.isSubtype(u.type,n))),s=s.$container}while(s)}let a=this.getGlobalScope(n,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,n){return new d1(en(e),r,n)}createScopeForNodes(e,r,n){let i=en(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new d1(i,r,n)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new Fx(this.indexManager.allElements(e)))}}});function UM(t){return typeof t.$comment=="string"}function qle(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var Gx,LE=N(()=>{"use strict";OM();Rl();is();Ol();o(UM,"isAstNodeWithComment");o(qle,"isIntermediateReference");Gx=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r){let n=r??{},i=r?.replacer,a=o((l,u)=>this.replacer(l,u,n),"defaultReplacer"),s=i?(l,u)=>i(l,u,a):a;try{return this.currentDocument=Pa(e),JSON.stringify(e,s,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r){let n=r??{},i=JSON.parse(e);return this.linkNode(i,i,n),i}replacer(e,r,{refText:n,sourceText:i,textRegions:a,comments:s,uriConverter:l}){var u,h,f,d;if(!this.ignoreProperties.has(e))if(va(r)){let p=r.ref,m=n?r.$refText:void 0;if(p){let g=Pa(p),y="";this.currentDocument&&this.currentDocument!==g&&(l?y=l(g.uri,r):y=g.uri.toString());let v=this.astNodeLocator.getAstNodePath(p);return{$ref:`${y}#${v}`,$refText:m}}else return{$error:(h=(u=r.error)===null||u===void 0?void 0:u.message)!==null&&h!==void 0?h:"Could not resolve reference",$refText:m}}else if(ii(r)){let p;if(a&&(p=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},r)),(!e||r.$document)&&p?.$textRegion&&(p.$textRegion.documentURI=(f=this.currentDocument)===null||f===void 0?void 0:f.uri.toString())),i&&!e&&(p??(p=Object.assign({},r)),p.$sourceText=(d=r.$cstNode)===null||d===void 0?void 0:d.text),s){p??(p=Object.assign({},r));let m=this.commentProvider.getComment(r);m&&(p.$comment=m.replace(/\r/g,""))}return p??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(n=>({offset:n.offset,end:n.end,length:n.length,range:n.range}),"createDocumentSegment");if(e.$cstNode){let n=e.$textRegion=r(e.$cstNode),i=n.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=oN(e.$cstNode,a).map(r);s.length!==0&&(i[a]=s)}),e}}linkNode(e,r,n,i,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f<h.length;f++){let d=h[f];qle(d)?h[f]=this.reviveReference(e,u,r,d,n):ii(d)&&this.linkNode(d,r,n,e,u,f)}else qle(h)?e[u]=this.reviveReference(e,u,r,h,n):ii(h)&&this.linkNode(h,r,n,e,u);let l=e;l.$container=i,l.$containerProperty=a,l.$containerIndex=s}reviveReference(e,r,n,i,a){let s=i.$refText,l=i.$error;if(i.$ref){let u=this.getRefNode(n,i.$ref,a.uriConverter);if(ii(u))return s||(s=this.nameProvider.getName(u)),{$refText:s??"",ref:u};l=u}if(l){let u={$refText:s??""};return u.error={container:e,property:r,message:l,reference:u},u}else return}getRefNode(e,r,n){try{let i=r.indexOf("#");if(i===0){let u=this.astNodeLocator.getAstNode(e,r.substring(1));return u||"Could not resolve path: "+r}if(i<0){let u=n?n(r):us.parse(r),h=this.langiumDocuments.getDocument(u);return h?h.parseResult.value:"Could not find document for URI: "+r}let a=n?n(r.substring(0,i)):us.parse(r.substring(0,i)),s=this.langiumDocuments.getDocument(a);if(!s)return"Could not find document for URI: "+r;if(i===r.length-1)return s.parseResult.value;let l=this.astNodeLocator.getAstNode(s.parseResult.value,r.substring(i+1));return l||"Could not resolve URI: "+r}catch(i){return String(i)}}}});var Vx,HM=N(()=>{"use strict";Fc();Vx=class{static{o(this,"DefaultServiceRegistry")}get map(){return this.fileExtensionMap}constructor(e){this.languageIdMap=new Map,this.fileExtensionMap=new Map,this.textDocuments=e?.workspace.TextDocuments}register(e){let r=e.LanguageMetaData;for(let n of r.fileExtensions)this.fileExtensionMap.has(n)&&console.warn(`The file extension ${n} is used by multiple languages. It is now assigned to '${r.languageId}'.`),this.fileExtensionMap.set(n,e);this.languageIdMap.set(r.languageId,e),this.languageIdMap.size===1?this.singleton=e:this.singleton=void 0}getServices(e){var r,n;if(this.singleton!==void 0)return this.singleton;if(this.languageIdMap.size===0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let i=(n=(r=this.textDocuments)===null||r===void 0?void 0:r.get(e))===null||n===void 0?void 0:n.languageId;if(i!==void 0){let l=this.languageIdMap.get(i);if(l)return l}let a=hs.extname(e),s=this.fileExtensionMap.get(a);if(!s)throw i?new Error(`The service registry contains no services for the extension '${a}' for language '${i}'.`):new Error(`The service registry contains no services for the extension '${a}'.`);return s}hasServices(e){try{return this.getServices(e),!0}catch{return!1}}get all(){return Array.from(this.languageIdMap.values())}}});function bp(t){return{code:t}}var g1,Ux,Hx=N(()=>{"use strict";Xo();f1();Yo();Ps();o(bp,"diagnosticData");(function(t){t.all=["fast","slow","built-in"]})(g1||(g1={}));Ux=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new Bl,this.entriesBefore=[],this.entriesAfter=[],this.reflection=e.shared.AstReflection}register(e,r=this,n="fast"){if(n==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");for(let[i,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:n};this.addEntry(i,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:n};this.addEntry(i,l)}else Lc(s)}}wrapValidationException(e,r){return async(n,i,a)=>{await this.handleException(()=>e.call(r,n,i,a),"An error occurred during validation",i,n)}}async handleException(e,r,n,i){try{await e()}catch(a){if(Bc(a))throw a;console.error(`${r}:`,a),a instanceof Error&&a.stack&&console.error(a.stack);let s=a instanceof Error?a.message:String(a);n("error",`${r}: ${s}`,{node:i})}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let n of this.reflection.getAllSubTypes(e))this.entries.add(n,r)}getChecks(e,r){let n=en(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(n=n.filter(i=>r.includes(i.category))),n.map(i=>i.check)}registerBeforeDocument(e,r=this){this.entriesBefore.push(this.wrapPreparationException(e,"An error occurred during set-up of the validation",r))}registerAfterDocument(e,r=this){this.entriesAfter.push(this.wrapPreparationException(e,"An error occurred during tear-down of the validation",r))}wrapPreparationException(e,r,n){return async(i,a,s,l)=>{await this.handleException(()=>e.call(n,i,a,s,l),r,a,i)}}get checksBefore(){return this.entriesBefore}get checksAfter(){return this.entriesAfter}}});function Yle(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=Q2(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=cN(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function RE(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}function Xle(t){switch(t){case"error":return bp(jo.LexingError);case"warning":return bp(jo.LexingWarning);case"info":return bp(jo.LexingInfo);case"hint":return bp(jo.LexingHint);default:throw new Error("Invalid diagnostic severity: "+t)}}var Wx,jo,WM=N(()=>{"use strict";qo();Ol();is();Nl();Yo();Hx();Wx=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,r={},n=yr.CancellationToken.None){let i=e.parseResult,a=[];if(await xi(n),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(i,a,r),r.stopAfterLexingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.LexingError})||(this.processParsingErrors(i,a,r),r.stopAfterParsingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.ParsingError}))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.LinkingError}))))return a;try{a.push(...await this.validateAst(i.value,r,n))}catch(s){if(Bc(s))throw s;console.error("An error occurred during validation:",s)}return await xi(n),a}processLexingErrors(e,r,n){var i,a,s;let l=[...e.lexerErrors,...(a=(i=e.lexerReport)===null||i===void 0?void 0:i.diagnostics)!==null&&a!==void 0?a:[]];for(let u of l){let h=(s=u.severity)!==null&&s!==void 0?s:"error",f={severity:RE(h),range:{start:{line:u.line-1,character:u.column-1},end:{line:u.line-1,character:u.column+u.length-1}},message:u.message,data:Xle(h),source:this.getSource()};r.push(f)}}processParsingErrors(e,r,n){for(let i of e.parserErrors){let a;if(isNaN(i.token.startOffset)){if("previousToken"in i){let s=i.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=Gm(i.token);if(a){let s={severity:RE("error"),range:a,message:i.message,data:bp(jo.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,n){for(let i of e.references){let a=i.error;if(a){let s={node:a.container,property:a.property,index:a.index,data:{code:jo.LinkingError,containerType:a.container.$type,property:a.property,refText:a.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,n=yr.CancellationToken.None){let i=[],a=o((s,l,u)=>{i.push(this.toDiagnostic(s,l,u))},"acceptor");return await this.validateAstBefore(e,r,a,n),await this.validateAstNodes(e,r,a,n),await this.validateAstAfter(e,r,a,n),i}async validateAstBefore(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksBefore;for(let l of s)await xi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}async validateAstNodes(e,r,n,i=yr.CancellationToken.None){await Promise.all(Wo(e).map(async a=>{await xi(i);let s=this.validationRegistry.getChecks(a.$type,r.categories);for(let l of s)await l(a,n,i)}))}async validateAstAfter(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksAfter;for(let l of s)await xi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}toDiagnostic(e,r,n){return{message:r,range:Yle(n),severity:RE(e),code:n.code,codeDescription:n.codeDescription,tags:n.tags,relatedInformation:n.relatedInformation,data:n.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(Yle,"getDiagnosticRange");o(RE,"toDiagnosticSeverity");o(Xle,"toDiagnosticData");(function(t){t.LexingError="lexing-error",t.LexingWarning="lexing-warning",t.LexingInfo="lexing-info",t.LexingHint="lexing-hint",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(jo||(jo={}))});var qx,Yx,qM=N(()=>{"use strict";qo();Rl();is();Nl();Yo();Fc();qx=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,n){let i=n??Pa(e);r??(r=this.nameProvider.getName(e));let a=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${a} has no name.`);let s,l=o(()=>{var u;return s??(s=Qd((u=this.nameProvider.getNameNode(e))!==null&&u!==void 0?u:e.$cstNode))},"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return l()},selectionSegment:Qd(e.$cstNode),type:e.$type,documentUri:i.uri,path:a}}},Yx=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=yr.CancellationToken.None){let n=[],i=e.parseResult.value;for(let a of Wo(i))await xi(r),Ag(a).filter(s=>!jd(s)).forEach(s=>{let l=this.createDescription(s);l&&n.push(l)});return n}createDescription(e){let r=e.reference.$nodeDescription,n=e.reference.$refNode;if(!r||!n)return;let i=Pa(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:r.documentUri,targetPath:r.path,segment:Qd(n),local:hs.equals(r.documentUri,i)}}}});var Xx,YM=N(()=>{"use strict";Xx=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),n=this.getPathSegment(e);return r+this.segmentSeparator+n}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((i,a)=>{if(!i||a.length===0)return i;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1)),h=i[l];return h?.[u]}return i[a]},e)}}});var Kn={};var NE=N(()=>{"use strict";Sr(Kn,Sa(LM(),1))});var jx,XM=N(()=>{"use strict";NE();Yo();jx=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new cs,this.settings={},this.workspaceConfig=!1,this.onConfigurationSectionUpdateEmitter=new Kn.Emitter,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var r,n;this.workspaceConfig=(n=(r=e.capabilities.workspace)===null||r===void 0?void 0:r.configuration)!==null&&n!==void 0?n:!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(n=>this.toSectionName(n.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),n=await e.fetchConfiguration(r);r.forEach((i,a)=>{this.updateSectionConfiguration(i.section,n[a])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(r=>{let n=e.settings[r];this.updateSectionConfiguration(r,n),this.onConfigurationSectionUpdateEmitter.fire({section:r,configuration:n})})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let n=this.toSectionName(e);if(this.settings[n])return this.settings[n][r]}toSectionName(e){return`${e}`}get onConfigurationSectionUpdate(){return this.onConfigurationSectionUpdateEmitter.event}}});var ff,jM=N(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(ff||(ff={}))});var Kx,KM=N(()=>{"use strict";qo();jM();f1();Yo();Ps();Hx();h1();Kx=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new Bl,this.documentPhaseListeners=new Bl,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=kn.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.textDocuments=e.workspace.TextDocuments,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},n=yr.CancellationToken.None){var i,a;for(let s of e){let l=s.uri.toString();if(s.state===kn.Validated){if(typeof r.validation=="boolean"&&r.validation)s.state=kn.IndexedReferences,s.diagnostics=void 0,this.buildState.delete(l);else if(typeof r.validation=="object"){let u=this.buildState.get(l),h=(i=u?.result)===null||i===void 0?void 0:i.validationChecks;if(h){let d=((a=r.validation.categories)!==null&&a!==void 0?a:g1.all).filter(p=>!h.includes(p));d.length>0&&(this.buildState.set(l,{completed:!1,options:{validation:Object.assign(Object.assign({},r.validation),{categories:d})},result:u.result}),s.state=kn.IndexedReferences)}}}else this.buildState.delete(l)}this.currentState=kn.Changed,await this.emitUpdate(e.map(s=>s.uri),[]),await this.buildDocuments(e,r,n)}async update(e,r,n=yr.CancellationToken.None){this.currentState=kn.Changed;for(let s of r)this.langiumDocuments.deleteDocument(s),this.buildState.delete(s.toString()),this.indexManager.remove(s);for(let s of e){if(!this.langiumDocuments.invalidateDocument(s)){let u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},s);u.state=kn.Changed,this.langiumDocuments.addDocument(u)}this.buildState.delete(s.toString())}let i=en(e).concat(r).map(s=>s.toString()).toSet();this.langiumDocuments.all.filter(s=>!i.has(s.uri.toString())&&this.shouldRelink(s,i)).forEach(s=>{this.serviceRegistry.getServices(s.uri).references.Linker.unlink(s),s.state=Math.min(s.state,kn.ComputedScopes),s.diagnostics=void 0}),await this.emitUpdate(e,r),await xi(n);let a=this.sortDocuments(this.langiumDocuments.all.filter(s=>{var l;return s.state<kn.Linked||!(!((l=this.buildState.get(s.uri.toString()))===null||l===void 0)&&l.completed)}).toArray());await this.buildDocuments(a,this.updateBuildOptions,n)}async emitUpdate(e,r){await Promise.all(this.updateListeners.map(n=>n(e,r)))}sortDocuments(e){let r=0,n=e.length-1;for(;r<n;){for(;r<e.length&&this.hasTextDocument(e[r]);)r++;for(;n>=0&&!this.hasTextDocument(e[n]);)n--;r<n&&([e[r],e[n]]=[e[n],e[r]])}return e}hasTextDocument(e){var r;return!!(!((r=this.textDocuments)===null||r===void 0)&&r.get(e.uri))}shouldRelink(e,r){return e.references.some(n=>n.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),ff.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}async buildDocuments(e,r,n){this.prepareBuild(e,r),await this.runCancelable(e,kn.Parsed,n,a=>this.langiumDocumentFactory.update(a,n)),await this.runCancelable(e,kn.IndexedContent,n,a=>this.indexManager.updateContent(a,n)),await this.runCancelable(e,kn.ComputedScopes,n,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.precomputedScopes=await s.computeLocalScopes(a,n)}),await this.runCancelable(e,kn.Linked,n,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,n)),await this.runCancelable(e,kn.IndexedReferences,n,a=>this.indexManager.updateReferences(a,n));let i=e.filter(a=>this.shouldValidate(a));await this.runCancelable(i,kn.Validated,n,a=>this.validate(a,n));for(let a of e){let s=this.buildState.get(a.uri.toString());s&&(s.completed=!0)}}prepareBuild(e,r){for(let n of e){let i=n.uri.toString(),a=this.buildState.get(i);(!a||a.completed)&&this.buildState.set(i,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,n,i){let a=e.filter(l=>l.state<r);for(let l of a)await xi(n),await i(l),l.state=r,await this.notifyDocumentPhase(l,r,n);let s=e.filter(l=>l.state===r);await this.notifyBuildPhase(s,r,n),this.currentState=r}onBuildPhase(e,r){return this.buildPhaseListeners.add(e,r),ff.create(()=>{this.buildPhaseListeners.delete(e,r)})}onDocumentPhase(e,r){return this.documentPhaseListeners.add(e,r),ff.create(()=>{this.documentPhaseListeners.delete(e,r)})}waitUntil(e,r,n){let i;if(r&&"path"in r?i=r:n=r,n??(n=yr.CancellationToken.None),i){let a=this.langiumDocuments.getDocument(i);if(a&&a.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):n.isCancellationRequested?Promise.reject(Pc):new Promise((a,s)=>{let l=this.onBuildPhase(e,()=>{if(l.dispose(),u.dispose(),i){let h=this.langiumDocuments.getDocument(i);a(h?.uri)}else a(void 0)}),u=n.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(Pc)})})}async notifyDocumentPhase(e,r,n){let a=this.documentPhaseListeners.get(r).slice();for(let s of a)try{await s(e,n)}catch(l){if(!Bc(l))throw l}}async notifyBuildPhase(e,r,n){if(e.length===0)return;let a=this.buildPhaseListeners.get(r).slice();for(let s of a)await xi(n),await s(e,n)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){var n,i;let a=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,s=this.getBuildOptions(e).validation,l=typeof s=="object"?s:void 0,u=await a.validateDocument(e,l,r);e.diagnostics?e.diagnostics.push(...u):e.diagnostics=u;let h=this.buildState.get(e.uri.toString());if(h){(n=h.result)!==null&&n!==void 0||(h.result={});let f=(i=l?.categories)!==null&&i!==void 0?i:g1.all;h.result.validationChecks?h.result.validationChecks.push(...f):h.result.validationChecks=[...f]}}getBuildOptions(e){var r,n;return(n=(r=this.buildState.get(e.uri.toString()))===null||r===void 0?void 0:r.options)!==null&&n!==void 0?n:{}}}});var Qx,QM=N(()=>{"use strict";is();DE();qo();Ps();Fc();Qx=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new xp,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let n=Pa(e).uri,i=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{hs.equals(s.targetUri,n)&&s.targetPath===r&&i.push(s)})}),en(i)}allElements(e,r){let n=en(this.symbolIndex.keys());return r&&(n=n.filter(i=>!r||r.has(i))),n.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,r){var n;return r?this.symbolByTypeIndex.get(e,r,()=>{var a;return((a=this.symbolIndex.get(e))!==null&&a!==void 0?a:[]).filter(l=>this.astReflection.isSubtype(l.type,r))}):(n=this.symbolIndex.get(e))!==null&&n!==void 0?n:[]}remove(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r),this.referenceIndex.delete(r)}async updateContent(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,r),a=e.uri.toString();this.symbolIndex.set(a,i),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,r){let n=this.referenceIndex.get(e.uri.toString());return n?n.some(i=>!i.local&&r.has(i.targetUri.toString())):!1}}});var Zx,ZM=N(()=>{"use strict";qo();Yo();Fc();Zx=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new cs,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}get workspaceFolders(){return this.folders}initialize(e){var r;this.folders=(r=e.workspaceFolders)!==null&&r!==void 0?r:void 0}initialized(e){return this.mutex.write(r=>{var n;return this.initializeWorkspace((n=this.folders)!==null&&n!==void 0?n:[],r)})}async initializeWorkspace(e,r=yr.CancellationToken.None){let n=await this.performStartup(e);await xi(r),await this.documentBuilder.build(n,this.initialBuildOptions,r)}async performStartup(e){let r=this.serviceRegistry.all.flatMap(a=>a.LanguageMetaData.fileExtensions),n=[],i=o(a=>{n.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(a=>[a,this.getRootFolder(a)]).map(async a=>this.traverseFolder(...a,r,i))),this._ready.resolve(),n}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return us.parse(e.uri)}async traverseFolder(e,r,n,i){let a=await this.fileSystemProvider.readDirectory(r);await Promise.all(a.map(async s=>{if(this.includeEntry(e,s,n)){if(s.isDirectory)await this.traverseFolder(e,s.uri,n,i);else if(s.isFile){let l=await this.langiumDocuments.getOrCreateDocument(s.uri);i(l)}}}))}includeEntry(e,r,n){let i=hs.basename(r.uri);if(i.startsWith("."))return!1;if(r.isDirectory)return i!=="node_modules"&&i!=="out";if(r.isFile){let a=hs.extname(r.uri);return n.includes(a)}return!1}}});function IE(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function eI(t){return t&&"modes"in t&&"defaultMode"in t}function JM(t){return!IE(t)&&!eI(t)}var Jx,ME,wp,OE=N(()=>{"use strict";cf();Jx=class{static{o(this,"DefaultLexerErrorMessageProvider")}buildUnexpectedCharactersMessage(e,r,n,i,a){return Gg.buildUnexpectedCharactersMessage(e,r,n,i,a)}buildUnableToPopLexerModeMessage(e){return Gg.buildUnableToPopLexerModeMessage(e)}},ME={mode:"full"},wp=class{static{o(this,"DefaultLexer")}constructor(e){this.errorMessageProvider=e.parser.LexerErrorMessageProvider,this.tokenBuilder=e.parser.TokenBuilder;let r=this.tokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let n=JM(r)?Object.values(r):r,i=e.LanguageMetaData.mode==="production";this.chevrotainLexer=new Xn(n,{positionTracking:"full",skipValidations:i,errorMessageProvider:this.errorMessageProvider})}get definition(){return this.tokenTypes}tokenize(e,r=ME){var n,i,a;let s=this.chevrotainLexer.tokenize(e);return{tokens:s.tokens,errors:s.errors,hidden:(n=s.groups.hidden)!==null&&n!==void 0?n:[],report:(a=(i=this.tokenBuilder).flushLexingReport)===null||a===void 0?void 0:a.call(i,e)}}toTokenTypeDictionary(e){if(JM(e))return e;let r=eI(e)?Object.values(e.modes).flat():e,n={};return r.forEach(i=>n[i.name]=i),n}};o(IE,"isTokenTypeArray");o(eI,"isIMultiModeLexerDefinition");o(JM,"isTokenTypeDictionary")});function nI(t,e,r){let n,i;typeof t=="string"?(i=e,n=r):(i=t.range.start,n=e),i||(i=jr.create(0,0));let a=Qle(t),s=aI(n),l=wFe({lines:a,position:i,options:s});return CFe({index:0,tokens:l,position:i})}function iI(t,e){let r=aI(e),n=Qle(t);if(n.length===0)return!1;let i=n[0],a=n[n.length-1],s=r.start,l=r.end;return!!s?.exec(i)&&!!l?.exec(a)}function Qle(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(JR)}function wFe(t){var e,r,n;let i=[],a=t.position.line,s=t.position.character;for(let l=0;l<t.lines.length;l++){let u=l===0,h=l===t.lines.length-1,f=t.lines[l],d=0;if(u&&t.options.start){let m=(e=t.options.start)===null||e===void 0?void 0:e.exec(f);m&&(d=m.index+m[0].length)}else{let m=(r=t.options.line)===null||r===void 0?void 0:r.exec(f);m&&(d=m.index+m[0].length)}if(h){let m=(n=t.options.end)===null||n===void 0?void 0:n.exec(f);m&&(f=f.substring(0,m.index))}if(f=f.substring(0,SFe(f)),rI(f,d)>=f.length){if(i.length>0){let m=jr.create(a,s);i.push({type:"break",content:"",range:Pr.create(m,m)})}}else{jle.lastIndex=d;let m=jle.exec(f);if(m){let g=m[0],y=m[1],v=jr.create(a,s+d),x=jr.create(a,s+d+g.length);i.push({type:"tag",content:y,range:Pr.create(v,x)}),d+=g.length,d=rI(f,d)}if(d<f.length){let g=f.substring(d),y=Array.from(g.matchAll(bFe));i.push(...TFe(y,g,a,s+d))}}a++,s=0}return i.length>0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function TFe(t,e,r,n){let i=[];if(t.length===0){let a=jr.create(r,n),s=jr.create(r,n+e.length);i.push({type:"text",content:e,range:Pr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&i.push({type:"text",content:e.substring(a,u),range:Pr.create(jr.create(r,a+n),jr.create(r,u+n))});let f=h.length+1,d=l[1];if(i.push({type:"inline-tag",content:d,range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+d.length+n))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];i.push({type:"text",content:p,range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+p.length+n))})}else i.push({type:"text",content:"",range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+n))});a=u+l[0].length}let s=e.substring(a);s.length>0&&i.push({type:"text",content:s,range:Pr.create(jr.create(r,a+n),jr.create(r,a+n+s.length))})}return i}function rI(t,e){let r=t.substring(e).match(kFe);return r?e+r.index:t.length}function SFe(t){let e=t.match(EFe);if(e&&typeof e.index=="number")return e.index}function CFe(t){var e,r,n,i;let a=jr.create(t.position.line,t.position.character);if(t.tokens.length===0)return new PE([],Pr.create(a,a));let s=[];for(;t.index<t.tokens.length;){let h=AFe(t,s[s.length-1]);h&&s.push(h)}let l=(r=(e=s[0])===null||e===void 0?void 0:e.range.start)!==null&&r!==void 0?r:a,u=(i=(n=s[s.length-1])===null||n===void 0?void 0:n.range.end)!==null&&i!==void 0?i:a;return new PE(s,Pr.create(l,u))}function AFe(t,e){let r=t.tokens[t.index];if(r.type==="tag")return Jle(t,!1);if(r.type==="text"||r.type==="inline-tag")return Zle(t);_Fe(r,e),t.index++}function _Fe(t,e){if(e){let r=new BE("",t.range);"inlines"in e?e.inlines.push(r):e.content.inlines.push(r)}}function Zle(t){let e=t.tokens[t.index],r=e,n=e,i=[];for(;e&&e.type!=="break"&&e.type!=="tag";)i.push(DFe(t)),n=e,e=t.tokens[t.index];return new tb(i,Pr.create(r.range.start,n.range.end))}function DFe(t){return t.tokens[t.index].type==="inline-tag"?Jle(t,!0):ece(t)}function Jle(t,e){let r=t.tokens[t.index++],n=r.content.substring(1),i=t.tokens[t.index];if(i?.type==="text")if(e){let a=ece(t);return new eb(n,new tb([a],a.range),e,Pr.create(r.range.start,a.range.end))}else{let a=Zle(t);return new eb(n,a,e,Pr.create(r.range.start,a.range.end))}else{let a=r.range;return new eb(n,new tb([],a),e,a)}}function ece(t){let e=t.tokens[t.index++];return new BE(e.content,e.range)}function aI(t){if(!t)return aI({start:"/**",end:"*/",line:"*"});let{start:e,end:r,line:n}=t;return{start:tI(e,!0),end:tI(r,!1),line:tI(n,!0)}}function tI(t,e){if(typeof t=="string"||typeof t=="object"){let r=typeof t=="string"?ap(t):t.source;return e?new RegExp(`^\\s*${r}`):new RegExp(`\\s*${r}\\s*$`)}else return t}function LFe(t,e,r){var n,i;if(t==="linkplain"||t==="linkcode"||t==="link"){let a=e.indexOf(" "),s=e;if(a>0){let u=rI(e,a);s=e.substring(u),e=e.substring(0,a)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(s=`\`${s}\``),(i=(n=r.renderLink)===null||n===void 0?void 0:n.call(r,e,s))!==null&&i!==void 0?i:RFe(e,s)}}function RFe(t,e){try{return us.parse(t,!0),`[${e}](${t})`}catch{return t}}function Kle(t){return t.endsWith(` | |
| 807 | +`)?` | |
| 808 | +`:` | |
| 809 | + | |
| 810 | +`}var jle,bFe,kFe,EFe,PE,eb,tb,BE,sI=N(()=>{"use strict";mM();Lg();Fc();o(nI,"parseJSDoc");o(iI,"isJSDoc");o(Qle,"getLines");jle=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,bFe=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(wFe,"tokenize");o(TFe,"buildInlineTokens");kFe=/\S/,EFe=/\s*$/;o(rI,"skipWhitespace");o(SFe,"lastCharacter");o(CFe,"parseJSDocComment");o(AFe,"parseJSDocElement");o(_Fe,"appendEmptyLine");o(Zle,"parseJSDocText");o(DFe,"parseJSDocInline");o(Jle,"parseJSDocTag");o(ece,"parseJSDocLine");o(aI,"normalizeOptions");o(tI,"normalizeOption");PE=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let n=r.toString();e+=Kle(e)+n}return e.trim()}toMarkdown(e){let r="";for(let n of this.elements)if(r.length===0)r=n.toMarkdown(e);else{let i=n.toMarkdown(e);r+=Kle(r)+i}return r.trim()}},eb=class{static{o(this,"JSDocTagImpl")}constructor(e,r,n,i){this.name=e,this.content=r,this.inline=n,this.range=i}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e} | |
| 811 | +${r}`),this.inline?`{${e}}`:e}toMarkdown(e){var r,n;return(n=(r=e?.renderTag)===null||r===void 0?void 0:r.call(e,this))!==null&&n!==void 0?n:this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=LFe(this.name,r,e??{});if(typeof a=="string")return a}let n="";e?.tag==="italic"||e?.tag===void 0?n="*":e?.tag==="bold"?n="**":e?.tag==="bold-italic"&&(n="***");let i=`${n}@${this.name}${n}`;return this.content.inlines.length===1?i=`${i} \u2014 ${r}`:this.content.inlines.length>1&&(i=`${i} | |
| 812 | +${r}`),this.inline?`{${i}}`:i}};o(LFe,"renderInlineTag");o(RFe,"renderLinkDefault");tb=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;r<this.inlines.length;r++){let n=this.inlines[r],i=this.inlines[r+1];e+=n.toString(),i&&i.range.start.line>n.range.start.line&&(e+=` | |
| 813 | +`)}return e}toMarkdown(e){let r="";for(let n=0;n<this.inlines.length;n++){let i=this.inlines[n],a=this.inlines[n+1];r+=i.toMarkdown(e),a&&a.range.start.line>i.range.start.line&&(r+=` | |
| 814 | +`)}return r}},BE=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(Kle,"fillNewlines")});var rb,oI=N(()=>{"use strict";is();sI();rb=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&iI(r))return nI(r).toMarkdown({renderLink:o((i,a)=>this.documentationLinkRenderer(e,i,a),"renderLink"),renderTag:o(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,r,n){var i;let a=(i=this.findNameInPrecomputedScopes(e,r))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,r);if(a&&a.nameSegment){let s=a.nameSegment.range.start.line+1,l=a.nameSegment.range.start.character+1,u=a.documentUri.with({fragment:`L${s},${l}`});return`[${n}](${u.toString()})`}else return}documentationTagRenderer(e,r){}findNameInPrecomputedScopes(e,r){let i=Pa(e).precomputedScopes;if(!i)return;let a=e;do{let l=i.get(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(i=>i.name===r)}}});var nb,lI=N(()=>{"use strict";LE();Nl();nb=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var r;return UM(e)?e.$comment:(r=AR(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||r===void 0?void 0:r.text}}});var ib,cI,uI,hI=N(()=>{"use strict";Yo();NE();ib=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e,r){return Promise.resolve(this.syncParser.parse(e))}},cI=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length<this.threadCount;){let e=this.createWorker();e.onReady(()=>{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let n=await this.acquireParserWorker(r),i=new cs,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(n)},this.terminationDelay)});return n.parse(e).then(l=>{let u=this.hydrator.hydrate(l);i.resolve(u)}).catch(l=>{i.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),i.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let n of this.workerPool)if(n.ready)return n.lock(),n;let r=new cs;return e.onCancellationRequested(()=>{let n=this.queue.indexOf(r);n>=0&&this.queue.splice(n,1),r.reject(Pc)}),this.queue.push(r),r.promise}},uI=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,n,i){this.onReadyEmitter=new Kn.Emitter,this.deferred=new cs,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),n(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(Pc),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new cs,this.sendMessage(e),this.deferred.promise}}});var ab,fI=N(()=>{"use strict";qo();Yo();ab=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new yr.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=CE();return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,n=yr.CancellationToken.None){let i=new cs,a={action:r,deferred:i,cancellationToken:n};return e.push(a),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:n,cancellationToken:i})=>{try{let a=await Promise.resolve().then(()=>r(i));n.resolve(a)}catch(a){Bc(a)?n.resolve(void 0):n.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var sb,dI=N(()=>{"use strict";gE();Rc();Rl();is();f1();Nl();sb=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new vp,this.tokenTypeIdMap=new vp,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport?this.dehydrateLexerReport(e.lexerReport):void 0,parserErrors:e.parserErrors.map(r=>Object.assign(Object.assign({},r),{message:r.message})),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}dehydrateLexerReport(e){return e}createDehyrationContext(e){let r=new Map,n=new Map;for(let i of Wo(e))r.set(i,{});if(e.$cstNode)for(let i of Kd(e.$cstNode))n.set(i,{});return{astNodes:r,cstNodes:n}}dehydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(n.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ii(l)?s.push(this.dehydrateAstNode(l,r)):va(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else ii(a)?n[i]=this.dehydrateAstNode(a,r):va(a)?n[i]=this.dehydrateReference(a,r):a!==void 0&&(n[i]=a);return n}dehydrateReference(e,r){let n={};return n.$refText=e.$refText,e.$refNode&&(n.$refNode=r.cstNodes.get(e.$refNode)),n}dehydrateCstNode(e,r){let n=r.cstNodes.get(e);return M2(e)?n.fullText=e.fullText:n.grammarSource=this.getGrammarElementId(e.grammarSource),n.hidden=e.hidden,n.astNode=r.astNodes.get(e.astNode),Ll(e)?n.content=e.content.map(i=>this.dehydrateCstNode(i,r)):af(e)&&(n.tokenType=e.tokenType.name,n.offset=e.offset,n.length=e.length,n.startLine=e.range.start.line,n.startColumn=e.range.start.character,n.endLine=e.range.end.line,n.endColumn=e.range.end.character),n}hydrate(e){let r=e.value,n=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,n),{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,n)}}createHydrationContext(e){let r=new Map,n=new Map;for(let a of Wo(e))r.set(a,{});let i;if(e.$cstNode)for(let a of Kd(e.$cstNode)){let s;"fullText"in a?(s=new a1(a.fullText),i=s):"content"in a?s=new mp:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(n.set(a,s),s.root=i)}return{astNodes:r,cstNodes:n}}hydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode&&(n.$cstNode=r.cstNodes.get(e.$cstNode));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ii(l)?s.push(this.setParent(this.hydrateAstNode(l,r),n)):va(l)?s.push(this.hydrateReference(l,n,i,r)):s.push(l)}else ii(a)?n[i]=this.setParent(this.hydrateAstNode(a,r),n):va(a)?n[i]=this.hydrateReference(a,n,i,r):a!==void 0&&(n[i]=a);return n}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,n,i){return this.linker.buildReference(r,n,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,n=0){let i=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=r.astNodes.get(e.astNode),Ll(i))for(let a of e.content){let s=this.hydrateCstNode(a,r,n++);i.content.push(s)}return i}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),n=e.offset,i=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new pp(n,i,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){if(e)return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.getKey(e)}createGrammarElementIdMap(){let e=0;for(let r of Wo(this.grammar))G2(r)&&this.grammarElementIdMap.set(r,e++)}}});function fs(t){return{documentation:{CommentProvider:o(e=>new nb(e),"CommentProvider"),DocumentationProvider:o(e=>new rb(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new ib(e),"AsyncParser"),GrammarConfig:o(e=>pN(e),"GrammarConfig"),LangiumParser:o(e=>TM(e),"LangiumParser"),CompletionParser:o(e=>bM(e),"CompletionParser"),ValueConverter:o(()=>new yp,"ValueConverter"),TokenBuilder:o(()=>new Uu,"TokenBuilder"),Lexer:o(e=>new wp(e),"Lexer"),ParserErrorMessageProvider:o(()=>new s1,"ParserErrorMessageProvider"),LexerErrorMessageProvider:o(()=>new Jx,"LexerErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new Xx,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new qx(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new Yx(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new Ix(e),"Linker"),NameProvider:o(()=>new Ox,"NameProvider"),ScopeProvider:o(e=>new zx(e),"ScopeProvider"),ScopeComputation:o(e=>new Bx(e),"ScopeComputation"),References:o(e=>new Px(e),"References")},serializer:{Hydrator:o(e=>new sb(e),"Hydrator"),JsonSerializer:o(e=>new Gx(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new Wx(e),"DocumentValidator"),ValidationRegistry:o(e=>new Ux(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function ds(t){return{ServiceRegistry:o(e=>new Vx(e),"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new Mx(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new Nx(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new Kx(e),"DocumentBuilder"),IndexManager:o(e=>new Qx(e),"IndexManager"),WorkspaceManager:o(e=>new Zx(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new ab,"WorkspaceLock"),ConfigurationProvider:o(e=>new jx(e),"ConfigurationProvider")}}}var pI=N(()=>{"use strict";mN();wM();kM();wE();EM();BM();FM();$M();zM();VM();LE();HM();WM();Hx();qM();YM();XM();KM();h1();QM();ZM();OE();oI();lI();Lx();hI();fI();dI();o(fs,"createDefaultCoreModule");o(ds,"createDefaultSharedCoreModule")});function ui(t,e,r,n,i,a,s,l,u){let h=[t,e,r,n,i,a,s,l,u].reduce(FE,{});return ace(h)}function ice(t){if(t&&t[nce])for(let e of Object.values(t))ice(e);return t}function ace(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),set:o(()=>{throw new Error("Cannot set property on injected service container")},"set"),get:o((n,i)=>i===nce?!0:rce(n,i,t,e||r),"get"),getOwnPropertyDescriptor:o((n,i)=>(rce(n,i,t,e||r),Object.getOwnPropertyDescriptor(n,i)),"getOwnPropertyDescriptor"),has:o((n,i)=>i in t,"has"),ownKeys:o(()=>[...Object.getOwnPropertyNames(t)],"ownKeys")});return r}function rce(t,e,r,n){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:t[e]});if(t[e]===tce)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let i=r[e];t[e]=tce;try{t[e]=typeof i=="function"?i(n):ace(i,n)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function FE(t,e){if(e){for(let[r,n]of Object.entries(e))if(n!==void 0){let i=t[r];i!==null&&n!==null&&typeof i=="object"&&typeof n=="object"?t[r]=FE(i,n):t[r]=n}}return t}var mI,nce,tce,gI=N(()=>{"use strict";(function(t){t.merge=(e,r)=>FE(FE({},e),r)})(mI||(mI={}));o(ui,"inject");nce=Symbol("isProxy");o(ice,"eagerLoad");o(ace,"_inject");tce=Symbol();o(rce,"_resolve");o(FE,"_merge")});var sce=N(()=>{"use strict"});var oce=N(()=>{"use strict";lI();oI();sI()});var lce=N(()=>{"use strict"});var cce=N(()=>{"use strict";mN();lce()});var yI,Tp,$E,vI,uce=N(()=>{"use strict";cf();wE();OE();yI={indentTokenName:"INDENT",dedentTokenName:"DEDENT",whitespaceTokenName:"WS",ignoreIndentationDelimiters:[]};(function(t){t.REGULAR="indentation-sensitive",t.IGNORE_INDENTATION="ignore-indentation"})(Tp||(Tp={}));$E=class extends Uu{static{o(this,"IndentationAwareTokenBuilder")}constructor(e=yI){super(),this.indentationStack=[0],this.whitespaceRegExp=/[ \t]+/y,this.options=Object.assign(Object.assign({},yI),e),this.indentTokenType=of({name:this.options.indentTokenName,pattern:this.indentMatcher.bind(this),line_breaks:!1}),this.dedentTokenType=of({name:this.options.dedentTokenName,pattern:this.dedentMatcher.bind(this),line_breaks:!1})}buildTokens(e,r){let n=super.buildTokens(e,r);if(!IE(n))throw new Error("Invalid tokens built by default builder");let{indentTokenName:i,dedentTokenName:a,whitespaceTokenName:s,ignoreIndentationDelimiters:l}=this.options,u,h,f,d=[];for(let p of n){for(let[m,g]of l)p.name===m?p.PUSH_MODE=Tp.IGNORE_INDENTATION:p.name===g&&(p.POP_MODE=!0);p.name===a?u=p:p.name===i?h=p:p.name===s?f=p:d.push(p)}if(!u||!h||!f)throw new Error("Some indentation/whitespace tokens not found!");return l.length>0?{modes:{[Tp.REGULAR]:[u,h,...d,f],[Tp.IGNORE_INDENTATION]:[...d,f]},defaultMode:Tp.REGULAR}:[u,h,f,...d]}flushLexingReport(e){let r=super.flushLexingReport(e);return Object.assign(Object.assign({},r),{remainingDedents:this.flushRemainingDedents(e)})}isStartOfLine(e,r){return r===0||`\r | |
| 815 | +`.includes(e[r-1])}matchWhitespace(e,r,n,i){var a;this.whitespaceRegExp.lastIndex=r;let s=this.whitespaceRegExp.exec(e);return{currIndentLevel:(a=s?.[0].length)!==null&&a!==void 0?a:0,prevIndentLevel:this.indentationStack.at(-1),match:s}}createIndentationTokenInstance(e,r,n,i){let a=this.getLineNumber(r,i);return $u(e,n,i,i+n.length,a,a,1,n.length)}getLineNumber(e,r){return e.substring(0,r).split(/\r\n|\r|\n/).length}indentMatcher(e,r,n,i){if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:a,prevIndentLevel:s,match:l}=this.matchWhitespace(e,r,n,i);return a<=s?null:(this.indentationStack.push(a),l)}dedentMatcher(e,r,n,i){var a,s,l,u;if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:h,prevIndentLevel:f,match:d}=this.matchWhitespace(e,r,n,i);if(h>=f)return null;let p=this.indentationStack.lastIndexOf(h);if(p===-1)return this.diagnostics.push({severity:"error",message:`Invalid dedent level ${h} at offset: ${r}. Current indentation stack: ${this.indentationStack}`,offset:r,length:(s=(a=d?.[0])===null||a===void 0?void 0:a.length)!==null&&s!==void 0?s:0,line:this.getLineNumber(e,r),column:1}),null;let m=this.indentationStack.length-p-1,g=(u=(l=e.substring(0,r).match(/[\r\n]+$/))===null||l===void 0?void 0:l[0].length)!==null&&u!==void 0?u:1;for(let y=0;y<m;y++){let v=this.createIndentationTokenInstance(this.dedentTokenType,e,"",r-(g-1));n.push(v),this.indentationStack.pop()}return null}buildTerminalToken(e){let r=super.buildTerminalToken(e),{indentTokenName:n,dedentTokenName:i,whitespaceTokenName:a}=this.options;return r.name===n?this.indentTokenType:r.name===i?this.dedentTokenType:r.name===a?of({name:a,pattern:this.whitespaceRegExp,group:Xn.SKIPPED}):r}flushRemainingDedents(e){let r=[];for(;this.indentationStack.length>1;)r.push(this.createIndentationTokenInstance(this.dedentTokenType,e,"",e.length)),this.indentationStack.pop();return this.indentationStack=[0],r}},vI=class extends wp{static{o(this,"IndentationAwareLexer")}constructor(e){if(super(e),e.parser.TokenBuilder instanceof $E)this.indentationTokenBuilder=e.parser.TokenBuilder;else throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder")}tokenize(e,r=ME){let n=super.tokenize(e),i=n.report;r?.mode==="full"&&n.tokens.push(...i.remainingDedents),i.remainingDedents=[];let{indentTokenType:a,dedentTokenType:s}=this.indentationTokenBuilder,l=a.tokenTypeIdx,u=s.tokenTypeIdx,h=[],f=n.tokens.length-1;for(let d=0;d<f;d++){let p=n.tokens[d],m=n.tokens[d+1];if(p.tokenTypeIdx===l&&m.tokenTypeIdx===u){d++;continue}h.push(p)}return f>=0&&h.push(n.tokens[f]),n.tokens=h,n}}});var hce=N(()=>{"use strict"});var fce=N(()=>{"use strict";hI();wM();gE();uce();kM();Lx();OE();bE();hce();wE();EM()});var dce=N(()=>{"use strict";BM();FM();$M();GM();zM();VM()});var pce=N(()=>{"use strict";dI();LE()});var zE,ps,xI=N(()=>{"use strict";zE=class{static{o(this,"EmptyFileSystemProvider")}readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}},ps={fileSystemProvider:o(()=>new zE,"fileSystemProvider")}});function IFe(){let t=ui(ds(ps),MFe),e=ui(fs({shared:t}),NFe);return t.ServiceRegistry.register(e),e}function Hu(t){var e;let r=IFe(),n=r.serializer.JsonSerializer.deserialize(t);return r.shared.workspace.LangiumDocumentFactory.fromModel(n,us.parse(`memory://${(e=n.name)!==null&&e!==void 0?e:"grammar"}.langium`)),n}var NFe,MFe,mce=N(()=>{"use strict";pI();gI();Rc();xI();Fc();NFe={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},MFe={AstReflection:o(()=>new Cg,"AstReflection")};o(IFe,"createMinimalGrammarServices");o(Hu,"loadGrammarFromJson")});var Gr={};hr(Gr,{AstUtils:()=>xk,BiMap:()=>vp,Cancellation:()=>yr,ContextCache:()=>xp,CstUtils:()=>ck,DONE_RESULT:()=>Ia,Deferred:()=>cs,Disposable:()=>ff,DisposableCache:()=>p1,DocumentCache:()=>_E,EMPTY_STREAM:()=>I2,ErrorWithLocation:()=>Zd,GrammarUtils:()=>Ek,MultiMap:()=>Bl,OperationCancelled:()=>Pc,Reduction:()=>zm,RegExpUtils:()=>Tk,SimpleCache:()=>$x,StreamImpl:()=>ao,TreeStreamImpl:()=>_c,URI:()=>us,UriUtils:()=>hs,WorkspaceCache:()=>m1,assertUnreachable:()=>Lc,delayNextTick:()=>MM,interruptAndCheck:()=>xi,isOperationCancelled:()=>Bc,loadGrammarFromJson:()=>Hu,setInterruptionPeriod:()=>$le,startCancelableOperation:()=>CE,stream:()=>en});var gce=N(()=>{"use strict";DE();NE();Sr(Gr,Kn);f1();jM();uk();mce();Yo();Ps();Fc();is();qo();Nl();Ol();Lg()});var yce=N(()=>{"use strict";WM();Hx()});var vce=N(()=>{"use strict";qM();YM();XM();KM();h1();xI();QM();fI();ZM()});var xa={};hr(xa,{AbstractAstReflection:()=>Xd,AbstractCstNode:()=>Cx,AbstractLangiumParser:()=>Ax,AbstractParserErrorMessageProvider:()=>vE,AbstractThreadedAsyncParser:()=>cI,AstUtils:()=>xk,BiMap:()=>vp,Cancellation:()=>yr,CompositeCstNodeImpl:()=>mp,ContextCache:()=>xp,CstNodeBuilder:()=>Sx,CstUtils:()=>ck,DEFAULT_TOKENIZE_OPTIONS:()=>ME,DONE_RESULT:()=>Ia,DatatypeSymbol:()=>yE,DefaultAstNodeDescriptionProvider:()=>qx,DefaultAstNodeLocator:()=>Xx,DefaultAsyncParser:()=>ib,DefaultCommentProvider:()=>nb,DefaultConfigurationProvider:()=>jx,DefaultDocumentBuilder:()=>Kx,DefaultDocumentValidator:()=>Wx,DefaultHydrator:()=>sb,DefaultIndexManager:()=>Qx,DefaultJsonSerializer:()=>Gx,DefaultLangiumDocumentFactory:()=>Nx,DefaultLangiumDocuments:()=>Mx,DefaultLexer:()=>wp,DefaultLexerErrorMessageProvider:()=>Jx,DefaultLinker:()=>Ix,DefaultNameProvider:()=>Ox,DefaultReferenceDescriptionProvider:()=>Yx,DefaultReferences:()=>Px,DefaultScopeComputation:()=>Bx,DefaultScopeProvider:()=>zx,DefaultServiceRegistry:()=>Vx,DefaultTokenBuilder:()=>Uu,DefaultValueConverter:()=>yp,DefaultWorkspaceLock:()=>ab,DefaultWorkspaceManager:()=>Zx,Deferred:()=>cs,Disposable:()=>ff,DisposableCache:()=>p1,DocumentCache:()=>_E,DocumentState:()=>kn,DocumentValidator:()=>jo,EMPTY_SCOPE:()=>xFe,EMPTY_STREAM:()=>I2,EmptyFileSystem:()=>ps,EmptyFileSystemProvider:()=>zE,ErrorWithLocation:()=>Zd,GrammarAST:()=>U2,GrammarUtils:()=>Ek,IndentationAwareLexer:()=>vI,IndentationAwareTokenBuilder:()=>$E,JSDocDocumentationProvider:()=>rb,LangiumCompletionParser:()=>Dx,LangiumParser:()=>_x,LangiumParserErrorMessageProvider:()=>s1,LeafCstNodeImpl:()=>pp,LexingMode:()=>Tp,MapScope:()=>Fx,Module:()=>mI,MultiMap:()=>Bl,OperationCancelled:()=>Pc,ParserWorker:()=>uI,Reduction:()=>zm,RegExpUtils:()=>Tk,RootCstNodeImpl:()=>a1,SimpleCache:()=>$x,StreamImpl:()=>ao,StreamScope:()=>d1,TextDocument:()=>c1,TreeStreamImpl:()=>_c,URI:()=>us,UriUtils:()=>hs,ValidationCategory:()=>g1,ValidationRegistry:()=>Ux,ValueConverter:()=>Oc,WorkspaceCache:()=>m1,assertUnreachable:()=>Lc,createCompletionParser:()=>bM,createDefaultCoreModule:()=>fs,createDefaultSharedCoreModule:()=>ds,createGrammarConfig:()=>pN,createLangiumParser:()=>TM,createParser:()=>Rx,delayNextTick:()=>MM,diagnosticData:()=>bp,eagerLoad:()=>ice,getDiagnosticRange:()=>Yle,indentationBuilderDefaultOptions:()=>yI,inject:()=>ui,interruptAndCheck:()=>xi,isAstNode:()=>ii,isAstNodeDescription:()=>kR,isAstNodeWithComment:()=>UM,isCompositeCstNode:()=>Ll,isIMultiModeLexerDefinition:()=>eI,isJSDoc:()=>iI,isLeafCstNode:()=>af,isLinkingError:()=>jd,isNamed:()=>Wle,isOperationCancelled:()=>Bc,isReference:()=>va,isRootCstNode:()=>M2,isTokenTypeArray:()=>IE,isTokenTypeDictionary:()=>JM,loadGrammarFromJson:()=>Hu,parseJSDoc:()=>nI,prepareLangiumParser:()=>Nle,setInterruptionPeriod:()=>$le,startCancelableOperation:()=>CE,stream:()=>en,toDiagnosticData:()=>Xle,toDiagnosticSeverity:()=>RE});var Xo=N(()=>{"use strict";pI();gI();HM();sce();Rl();oce();cce();fce();dce();pce();gce();Sr(xa,Gr);yce();vce();Rc()});function Sce(t){return Fl.isInstance(t,ob)}function Cce(t){return Fl.isInstance(t,y1)}function Ace(t){return Fl.isInstance(t,v1)}function _ce(t){return Fl.isInstance(t,WE)}function Dce(t){return Fl.isInstance(t,x1)}function Lce(t){return Fl.isInstance(t,lb)}function Rce(t){return Fl.isInstance(t,b1)}function Nce(t){return Fl.isInstance(t,cb)}function Mce(t){return Fl.isInstance(t,ub)}function Ice(t){return Fl.isInstance(t,hb)}function Oce(t){return Fl.isInstance(t,fb)}var OFe,Lt,AI,ob,GE,y1,VE,UE,v1,WE,bI,wI,TI,x1,kI,lb,EI,b1,SI,cb,ub,hb,fb,qE,CI,HE,Pce,Fl,xce,PFe,bce,BFe,wce,FFe,Tce,$Fe,kce,zFe,Ece,GFe,VFe,UFe,HFe,WFe,qFe,YFe,co,_I,DI,LI,RI,NI,MI,XFe,jFe,KFe,QFe,w1,Wu,$s,ZFe,zs=N(()=>{"use strict";Xo();Xo();Xo();Xo();OFe=Object.defineProperty,Lt=o((t,e)=>OFe(t,"name",{value:e,configurable:!0}),"__name"),AI="Statement",ob="Architecture";o(Sce,"isArchitecture");Lt(Sce,"isArchitecture");GE="Axis",y1="Branch";o(Cce,"isBranch");Lt(Cce,"isBranch");VE="Checkout",UE="CherryPicking",v1="Commit";o(Ace,"isCommit");Lt(Ace,"isCommit");WE="Common";o(_ce,"isCommon");Lt(_ce,"isCommon");bI="Curve",wI="Edge",TI="Entry",x1="GitGraph";o(Dce,"isGitGraph");Lt(Dce,"isGitGraph");kI="Group",lb="Info";o(Lce,"isInfo");Lt(Lce,"isInfo");EI="Junction",b1="Merge";o(Rce,"isMerge");Lt(Rce,"isMerge");SI="Option",cb="Packet";o(Nce,"isPacket");Lt(Nce,"isPacket");ub="PacketBlock";o(Mce,"isPacketBlock");Lt(Mce,"isPacketBlock");hb="Pie";o(Ice,"isPie");Lt(Ice,"isPie");fb="PieSection";o(Oce,"isPieSection");Lt(Oce,"isPieSection");qE="Radar",CI="Service",HE="Direction",Pce=class extends Xd{static{o(this,"MermaidAstReflection")}static{Lt(this,"MermaidAstReflection")}getAllTypes(){return[ob,GE,y1,VE,UE,v1,WE,bI,HE,wI,TI,x1,kI,lb,EI,b1,SI,cb,ub,hb,fb,qE,CI,AI]}computeIsSubtype(t,e){switch(t){case y1:case VE:case UE:case v1:case b1:return this.isSubtype(AI,e);case HE:return this.isSubtype(x1,e);default:return!1}}getReferenceType(t){let e=`${t.container.$type}:${t.property}`;switch(e){case"Entry:axis":return GE;default:throw new Error(`${e} is not a valid reference id.`)}}getTypeMetaData(t){switch(t){case ob:return{name:ob,properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case GE:return{name:GE,properties:[{name:"label"},{name:"name"}]};case y1:return{name:y1,properties:[{name:"name"},{name:"order"}]};case VE:return{name:VE,properties:[{name:"branch"}]};case UE:return{name:UE,properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case v1:return{name:v1,properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case WE:return{name:WE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case bI:return{name:bI,properties:[{name:"entries",defaultValue:[]},{name:"label"},{name:"name"}]};case wI:return{name:wI,properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case TI:return{name:TI,properties:[{name:"axis"},{name:"value"}]};case x1:return{name:x1,properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case kI:return{name:kI,properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case lb:return{name:lb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case EI:return{name:EI,properties:[{name:"id"},{name:"in"}]};case b1:return{name:b1,properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case SI:return{name:SI,properties:[{name:"name"},{name:"value",defaultValue:!1}]};case cb:return{name:cb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case ub:return{name:ub,properties:[{name:"end"},{name:"label"},{name:"start"}]};case hb:return{name:hb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case fb:return{name:fb,properties:[{name:"label"},{name:"value"}]};case qE:return{name:qE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"axes",defaultValue:[]},{name:"curves",defaultValue:[]},{name:"options",defaultValue:[]},{name:"title"}]};case CI:return{name:CI,properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case HE:return{name:HE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};default:return{name:t,properties:[]}}}},Fl=new Pce,PFe=Lt(()=>xce??(xce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"InfoGrammar"),BFe=Lt(()=>bce??(bce=Hu(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"packet-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),FFe=Lt(()=>wce??(wce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"PIE_SECTION_LABEL","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]+\\"/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PIE_SECTION_VALUE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"PieGrammar"),$Fe=Lt(()=>Tce??(Tce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ID","definition":{"$type":"RegexToken","regex":"/[\\\\w]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TEXT_ICON","definition":{"$type":"RegexToken","regex":"/\\\\(\\"[^\\"]+\\"\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"ArchitectureGrammar"),zFe=Lt(()=>kce??(kce=Hu(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+(?=\\\\s)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),GFe=Lt(()=>Ece??(Ece=Hu(`{"$type":"Grammar","isDeclared":true,"name":"Radar","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@12"}}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@12"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9\\\\-_]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"RadarGrammar"),VFe={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},UFe={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},HFe={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},WFe={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},qFe={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},YFe={languageId:"radar",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},co={AstReflection:Lt(()=>new Pce,"AstReflection")},_I={Grammar:Lt(()=>PFe(),"Grammar"),LanguageMetaData:Lt(()=>VFe,"LanguageMetaData"),parser:{}},DI={Grammar:Lt(()=>BFe(),"Grammar"),LanguageMetaData:Lt(()=>UFe,"LanguageMetaData"),parser:{}},LI={Grammar:Lt(()=>FFe(),"Grammar"),LanguageMetaData:Lt(()=>HFe,"LanguageMetaData"),parser:{}},RI={Grammar:Lt(()=>$Fe(),"Grammar"),LanguageMetaData:Lt(()=>WFe,"LanguageMetaData"),parser:{}},NI={Grammar:Lt(()=>zFe(),"Grammar"),LanguageMetaData:Lt(()=>qFe,"LanguageMetaData"),parser:{}},MI={Grammar:Lt(()=>GFe(),"Grammar"),LanguageMetaData:Lt(()=>YFe,"LanguageMetaData"),parser:{}},XFe=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,jFe=/accTitle[\t ]*:([^\n\r]*)/,KFe=/title([\t ][^\n\r]*|)/,QFe={ACC_DESCR:XFe,ACC_TITLE:jFe,TITLE:KFe},w1=class extends yp{static{o(this,"AbstractMermaidValueConverter")}static{Lt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let n=this.runCommonConverter(t,e,r);return n===void 0&&(n=this.runCustomConverter(t,e,r)),n===void 0?super.runConverter(t,e,r):n}runCommonConverter(t,e,r){let n=QFe[t.name];if(n===void 0)return;let i=n.exec(e);if(i!==null){if(i[1]!==void 0)return i[1].trim().replace(/[\t ]{2,}/gm," ");if(i[2]!==void 0)return i[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` | |
| 816 | +`)}}},Wu=class extends w1{static{o(this,"CommonValueConverter")}static{Lt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},$s=class extends Uu{static{o(this,"AbstractMermaidTokenBuilder")}static{Lt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let n=super.buildKeywordTokens(t,e,r);return n.forEach(i=>{this.keywords.has(i.name)&&i.PATTERN!==void 0&&(i.PATTERN=new RegExp(i.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),n}},ZFe=class extends $s{static{o(this,"CommonTokenBuilder")}static{Lt(this,"CommonTokenBuilder")}}});function XE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),NI,YE);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var JFe,YE,II=N(()=>{"use strict";zs();Xo();JFe=class extends $s{static{o(this,"GitGraphTokenBuilder")}static{Lt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},YE={parser:{TokenBuilder:Lt(()=>new JFe,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(XE,"createGitGraphServices");Lt(XE,"createGitGraphServices")});function KE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),_I,jE);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var e$e,jE,OI=N(()=>{"use strict";zs();Xo();e$e=class extends $s{static{o(this,"InfoTokenBuilder")}static{Lt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},jE={parser:{TokenBuilder:Lt(()=>new e$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(KE,"createInfoServices");Lt(KE,"createInfoServices")});function ZE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),DI,QE);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var t$e,QE,PI=N(()=>{"use strict";zs();Xo();t$e=class extends $s{static{o(this,"PacketTokenBuilder")}static{Lt(this,"PacketTokenBuilder")}constructor(){super(["packet-beta"])}},QE={parser:{TokenBuilder:Lt(()=>new t$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(ZE,"createPacketServices");Lt(ZE,"createPacketServices")});function e6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),LI,JE);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var r$e,n$e,JE,BI=N(()=>{"use strict";zs();Xo();r$e=class extends $s{static{o(this,"PieTokenBuilder")}static{Lt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},n$e=class extends w1{static{o(this,"PieValueConverter")}static{Lt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},JE={parser:{TokenBuilder:Lt(()=>new r$e,"TokenBuilder"),ValueConverter:Lt(()=>new n$e,"ValueConverter")}};o(e6,"createPieServices");Lt(e6,"createPieServices")});function r6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),RI,t6);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var i$e,a$e,t6,FI=N(()=>{"use strict";zs();Xo();i$e=class extends $s{static{o(this,"ArchitectureTokenBuilder")}static{Lt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},a$e=class extends w1{static{o(this,"ArchitectureValueConverter")}static{Lt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE")return e.replace(/[[\]]/g,"").trim()}},t6={parser:{TokenBuilder:Lt(()=>new i$e,"TokenBuilder"),ValueConverter:Lt(()=>new a$e,"ValueConverter")}};o(r6,"createArchitectureServices");Lt(r6,"createArchitectureServices")});function i6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),MI,n6);return e.ServiceRegistry.register(r),{shared:e,Radar:r}}var s$e,n6,$I=N(()=>{"use strict";zs();Xo();s$e=class extends $s{static{o(this,"RadarTokenBuilder")}static{Lt(this,"RadarTokenBuilder")}constructor(){super(["radar-beta"])}},n6={parser:{TokenBuilder:Lt(()=>new s$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(i6,"createRadarServices");Lt(i6,"createRadarServices")});var Bce={};hr(Bce,{InfoModule:()=>jE,createInfoServices:()=>KE});var Fce=N(()=>{"use strict";OI();zs()});var $ce={};hr($ce,{PacketModule:()=>QE,createPacketServices:()=>ZE});var zce=N(()=>{"use strict";PI();zs()});var Gce={};hr(Gce,{PieModule:()=>JE,createPieServices:()=>e6});var Vce=N(()=>{"use strict";BI();zs()});var Uce={};hr(Uce,{ArchitectureModule:()=>t6,createArchitectureServices:()=>r6});var Hce=N(()=>{"use strict";FI();zs()});var Wce={};hr(Wce,{GitGraphModule:()=>YE,createGitGraphServices:()=>XE});var qce=N(()=>{"use strict";II();zs()});var Yce={};hr(Yce,{RadarModule:()=>n6,createRadarServices:()=>i6});var Xce=N(()=>{"use strict";$I();zs()});async function uo(t,e){let r=o$e[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);df[t]||await r();let i=df[t].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new l$e(i);return i.value}var df,o$e,l$e,kp=N(()=>{"use strict";II();OI();PI();BI();FI();$I();zs();df={},o$e={info:Lt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(Fce(),Bce)),e=t().Info.parser.LangiumParser;df.info=e},"info"),packet:Lt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(zce(),$ce)),e=t().Packet.parser.LangiumParser;df.packet=e},"packet"),pie:Lt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(Vce(),Gce)),e=t().Pie.parser.LangiumParser;df.pie=e},"pie"),architecture:Lt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(Hce(),Uce)),e=t().Architecture.parser.LangiumParser;df.architecture=e},"architecture"),gitGraph:Lt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(qce(),Wce)),e=t().GitGraph.parser.LangiumParser;df.gitGraph=e},"gitGraph"),radar:Lt(async()=>{let{createRadarServices:t}=await Promise.resolve().then(()=>(Xce(),Yce)),e=t().Radar.parser.LangiumParser;df.radar=e},"radar")};o(uo,"parse");Lt(uo,"parse");l$e=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(n=>n.message).join(` | |
| 817 | +`),r=t.parserErrors.map(n=>n.message).join(` | |
| 818 | +`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{Lt(this,"MermaidParseError")}}});function $c(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var T1=N(()=>{"use strict";o($c,"populateCommonDb")});var Kr,a6=N(()=>{"use strict";Kr={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var pf,s6=N(()=>{"use strict";pf=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function zI(){return j9({length:7})}function u$e(t,e){let r=Object.create(null);return t.reduce((n,i)=>{let a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}function jce(t,e,r){let n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function Qce(t){let e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]),r="";t.forEach(function(i){i===e?r+=" *":r+=" |"});let n=[r,e.id,e.seq];for(let i in _t.records.branches)_t.records.branches.get(i)===e.id&&n.push(i);if(Y.debug(n.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let i=_t.records.commits.get(e.parents[0]);jce(t,e,i),e.parents[1]&&t.push(_t.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let i=_t.records.commits.get(e.parents[0]);jce(t,e,i)}}t=u$e(t,i=>i.id),Qce(t)}var c$e,Ep,_t,h$e,f$e,d$e,p$e,m$e,g$e,y$e,Kce,v$e,x$e,b$e,w$e,T$e,Zce,k$e,E$e,S$e,o6,GI=N(()=>{"use strict";vt();ir();ji();gr();mi();a6();s6();Ya();c$e=or.gitGraph,Ep=o(()=>Fi({...c$e,...cr().gitGraph}),"getConfig"),_t=new pf(()=>{let t=Ep(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(zI,"getID");o(u$e,"uniqBy");h$e=o(function(t){_t.records.direction=t},"setDirection"),f$e=o(function(t){Y.debug("options str",t),t=t?.trim(),t=t||"{}";try{_t.records.options=JSON.parse(t)}catch(e){Y.error("error while parsing gitGraph options",e.message)}},"setOptions"),d$e=o(function(){return _t.records.options},"getOptions"),p$e=o(function(t){let e=t.msg,r=t.id,n=t.type,i=t.tags;Y.info("commit",e,r,n,i),Y.debug("Entering commit:",e,r,n,i);let a=Ep();r=Ze.sanitizeText(r,a),e=Ze.sanitizeText(e,a),i=i?.map(l=>Ze.sanitizeText(l,a));let s={id:r||_t.records.seq+"-"+zI(),message:e,seq:_t.records.seq++,type:n??Kr.NORMAL,tags:i??[],parents:_t.records.head==null?[]:[_t.records.head.id],branch:_t.records.currBranch};_t.records.head=s,Y.info("main branch",a.mainBranchName),_t.records.commits.set(s.id,s),_t.records.branches.set(_t.records.currBranch,s.id),Y.debug("in pushCommit "+s.id)},"commit"),m$e=o(function(t){let e=t.name,r=t.order;if(e=Ze.sanitizeText(e,Ep()),_t.records.branches.has(e))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);_t.records.branches.set(e,_t.records.head!=null?_t.records.head.id:null),_t.records.branchConfig.set(e,{name:e,order:r}),Kce(e),Y.debug("in createBranch")},"branch"),g$e=o(t=>{let e=t.branch,r=t.id,n=t.type,i=t.tags,a=Ep();e=Ze.sanitizeText(e,a),r&&(r=Ze.sanitizeText(r,a));let s=_t.records.branches.get(_t.records.currBranch),l=_t.records.branches.get(e),u=s?_t.records.commits.get(s):void 0,h=l?_t.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(_t.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${_t.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!_t.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&_t.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom Id");throw p.hash={text:`merge ${e} ${r} ${n} ${i?.join(" ")}`,token:`merge ${e} ${r} ${n} ${i?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${n} ${i?.join(" ")}`]},p}let f=l||"",d={id:r||`${_t.records.seq}-${zI()}`,message:`merged branch ${e} into ${_t.records.currBranch}`,seq:_t.records.seq++,parents:_t.records.head==null?[]:[_t.records.head.id,f],branch:_t.records.currBranch,type:Kr.MERGE,customType:n,customId:!!r,tags:i??[]};_t.records.head=d,_t.records.commits.set(d.id,d),_t.records.branches.set(_t.records.currBranch,d.id),Y.debug(_t.records.branches),Y.debug("in mergeBranch")},"merge"),y$e=o(function(t){let e=t.id,r=t.targetId,n=t.tags,i=t.parent;Y.debug("Entering cherryPick:",e,r,n);let a=Ep();if(e=Ze.sanitizeText(e,a),r=Ze.sanitizeText(r,a),n=n?.map(u=>Ze.sanitizeText(u,a)),i=Ze.sanitizeText(i,a),!e||!_t.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=_t.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(i&&!(Array.isArray(s.parents)&&s.parents.includes(i)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===Kr.MERGE&&!i)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!_t.records.commits.has(r)){if(l===_t.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=_t.records.branches.get(_t.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${_t.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=_t.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${_t.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:_t.records.seq+"-"+zI(),message:`cherry-picked ${s?.message} into ${_t.records.currBranch}`,seq:_t.records.seq++,parents:_t.records.head==null?[]:[_t.records.head.id,s.id],branch:_t.records.currBranch,type:Kr.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${s.id}${s.type===Kr.MERGE?`|parent:${i}`:""}`]};_t.records.head=f,_t.records.commits.set(f.id,f),_t.records.branches.set(_t.records.currBranch,f.id),Y.debug(_t.records.branches),Y.debug("in cherryPick")}},"cherryPick"),Kce=o(function(t){if(t=Ze.sanitizeText(t,Ep()),_t.records.branches.has(t)){_t.records.currBranch=t;let e=_t.records.branches.get(_t.records.currBranch);e===void 0||!e?_t.records.head=null:_t.records.head=_t.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(jce,"upsert");o(Qce,"prettyPrintCommitHistory");v$e=o(function(){Y.debug(_t.records.commits);let t=Zce()[0];Qce([t])},"prettyPrint"),x$e=o(function(){_t.reset(),Ar()},"clear"),b$e=o(function(){return[..._t.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),w$e=o(function(){return _t.records.branches},"getBranches"),T$e=o(function(){return _t.records.commits},"getCommits"),Zce=o(function(){let t=[..._t.records.commits.values()];return t.forEach(function(e){Y.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),k$e=o(function(){return _t.records.currBranch},"getCurrentBranch"),E$e=o(function(){return _t.records.direction},"getDirection"),S$e=o(function(){return _t.records.head},"getHead"),o6={commitType:Kr,getConfig:Ep,setDirection:h$e,setOptions:f$e,getOptions:d$e,commit:p$e,branch:m$e,merge:g$e,cherryPick:y$e,checkout:Kce,prettyPrint:v$e,clear:x$e,getBranchesAsObjArray:b$e,getBranches:w$e,getCommits:T$e,getCommitsArray:Zce,getCurrentBranch:k$e,getDirection:E$e,getHead:S$e,setAccTitle:Lr,getAccTitle:Rr,getAccDescription:Mr,setAccDescription:Nr,setDiagramTitle:$r,getDiagramTitle:Ir}});var C$e,A$e,_$e,D$e,L$e,R$e,N$e,Jce,eue=N(()=>{"use strict";kp();vt();T1();GI();a6();C$e=o((t,e)=>{$c(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)A$e(r,e)},"populate"),A$e=o((t,e)=>{let n={Commit:o(i=>e.commit(_$e(i)),"Commit"),Branch:o(i=>e.branch(D$e(i)),"Branch"),Merge:o(i=>e.merge(L$e(i)),"Merge"),Checkout:o(i=>e.checkout(R$e(i)),"Checkout"),CherryPicking:o(i=>e.cherryPick(N$e(i)),"CherryPicking")}[t.$type];n?n(t):Y.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),_$e=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?Kr[t.type]:Kr.NORMAL,tags:t.tags??void 0}),"parseCommit"),D$e=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),L$e=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?Kr[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),R$e=o(t=>t.branch,"parseCheckout"),N$e=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),Jce={parse:o(async t=>{let e=await uo("gitGraph",t);Y.debug(e),C$e(e,o6)},"parse")}});var M$e,Ko,gf,yf,zc,qu,Sp,Gs,Vs,l6,db,c6,mf,Br,I$e,rue,nue,O$e,P$e,B$e,F$e,$$e,z$e,G$e,V$e,U$e,H$e,W$e,q$e,tue,Y$e,pb,X$e,j$e,K$e,Q$e,Z$e,iue,aue=N(()=>{"use strict";dr();zt();vt();ir();a6();M$e=me(),Ko=M$e?.gitGraph,gf=10,yf=40,zc=4,qu=2,Sp=8,Gs=new Map,Vs=new Map,l6=30,db=new Map,c6=[],mf=0,Br="LR",I$e=o(()=>{Gs.clear(),Vs.clear(),db.clear(),mf=0,c6=[],Br="LR"},"clear"),rue=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|<br\s*\/?>/gi):t).forEach(n=>{let i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n.trim(),e.appendChild(i)}),e},"drawText"),nue=o(t=>{let e,r,n;return Br==="BT"?(r=o((i,a)=>i<=a,"comparisonFunc"),n=1/0):(r=o((i,a)=>i>=a,"comparisonFunc"),n=0),t.forEach(i=>{let a=Br==="TB"||Br=="BT"?Vs.get(i)?.y:Vs.get(i)?.x;a!==void 0&&r(a,n)&&(e=i,n=a)}),e},"findClosestParent"),O$e=o(t=>{let e="",r=1/0;return t.forEach(n=>{let i=Vs.get(n).y;i<=r&&(e=n,r=i)}),e||void 0},"findClosestParentBT"),P$e=o((t,e,r)=>{let n=r,i=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(n=F$e(l),i=Math.max(n,i)):a.push(l),$$e(l,n)}),n=i,a.forEach(s=>{z$e(s,n,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=O$e(l.parents);n=Vs.get(u).y-yf,n<=i&&(i=n);let h=Gs.get(l.branch).pos,f=n-gf;Vs.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),B$e=o(t=>{let e=nue(t.parents.filter(n=>n!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Vs.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),F$e=o(t=>B$e(t)+yf,"calculateCommitPosition"),$$e=o((t,e)=>{let r=Gs.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let n=r.pos,i=e+gf;return Vs.set(t.id,{x:n,y:i}),{x:n,y:i}},"setCommitPosition"),z$e=o((t,e,r)=>{let n=Gs.get(t.branch);if(!n)throw new Error(`Branch not found for commit ${t.id}`);let i=e+r,a=n.pos;Vs.set(t.id,{x:a,y:i})},"setRootPosition"),G$e=o((t,e,r,n,i,a)=>{if(a===Kr.HIGHLIGHT)t.append("rect").attr("x",r.x-10).attr("y",r.y-10).attr("width",20).attr("height",20).attr("class",`commit ${e.id} commit-highlight${i%Sp} ${n}-outer`),t.append("rect").attr("x",r.x-6).attr("y",r.y-6).attr("width",12).attr("height",12).attr("class",`commit ${e.id} commit${i%Sp} ${n}-inner`);else if(a===Kr.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",10).attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`);else{let s=t.append("circle");if(s.attr("cx",r.x),s.attr("cy",r.y),s.attr("r",e.type===Kr.MERGE?9:10),s.attr("class",`commit ${e.id} commit${i%Sp}`),a===Kr.MERGE){let l=t.append("circle");l.attr("cx",r.x),l.attr("cy",r.y),l.attr("r",6),l.attr("class",`commit ${n} ${e.id} commit${i%Sp}`)}a===Kr.REVERSE&&t.append("path").attr("d",`M ${r.x-5},${r.y-5}L${r.x+5},${r.y+5}M${r.x-5},${r.y+5}L${r.x+5},${r.y-5}`).attr("class",`commit ${n} ${e.id} commit${i%Sp}`)}},"drawCommitBullet"),V$e=o((t,e,r,n)=>{if(e.type!==Kr.CHERRY_PICK&&(e.customId&&e.type===Kr.MERGE||e.type!==Kr.MERGE)&&Ko?.showCommitLabel){let i=t.append("g"),a=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",n).attr("y",r.y+25).attr("class","commit-label").text(e.id),l=s.node()?.getBBox();if(l&&(a.attr("x",r.posWithOffset-l.width/2-qu).attr("y",r.y+13.5).attr("width",l.width+2*qu).attr("height",l.height+2*qu),Br==="TB"||Br==="BT"?(a.attr("x",r.x-(l.width+4*zc+5)).attr("y",r.y-12),s.attr("x",r.x-(l.width+4*zc)).attr("y",r.y+l.height-12)):s.attr("x",r.posWithOffset-l.width/2),Ko.rotateCommitLabel))if(Br==="TB"||Br==="BT")s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),a.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let u=-7.5-(l.width+10)/25*9.5,h=10+l.width/25*8.5;i.attr("transform","translate("+u+", "+h+") rotate(-45, "+n+", "+r.y+")")}}},"drawCommitLabel"),U$e=o((t,e,r,n)=>{if(e.tags.length>0){let i=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-i).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:i}),i+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",` | |
| 819 | + ${n-a/2-zc/2},${m+qu} | |
| 820 | + ${n-a/2-zc/2},${m-qu} | |
| 821 | + ${r.posWithOffset-a/2-zc},${m-p-qu} | |
| 822 | + ${r.posWithOffset+a/2+zc},${m-p-qu} | |
| 823 | + ${r.posWithOffset+a/2+zc},${m+p+qu} | |
| 824 | + ${r.posWithOffset-a/2-zc},${m+p+qu}`),h.attr("cy",m).attr("cx",n-a/2+zc/2).attr("r",1.5).attr("class","tag-hole"),Br==="TB"||Br==="BT"){let g=n+d;f.attr("class","tag-label-bkg").attr("points",` | |
| 825 | + ${r.x},${g+2} | |
| 826 | + ${r.x},${g-2} | |
| 827 | + ${r.x+gf},${g-p-2} | |
| 828 | + ${r.x+gf+a+4},${g-p-2} | |
| 829 | + ${r.x+gf+a+4},${g+p+2} | |
| 830 | + ${r.x+gf},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),h.attr("cx",r.x+zc/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+n+")")}}}},"drawCommitTags"),H$e=o(t=>{switch(t.customType??t.type){case Kr.NORMAL:return"commit-normal";case Kr.REVERSE:return"commit-reverse";case Kr.HIGHLIGHT:return"commit-highlight";case Kr.MERGE:return"commit-merge";case Kr.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),W$e=o((t,e,r,n)=>{let i={x:0,y:0};if(t.parents.length>0){let a=nue(t.parents);if(a){let s=n.get(a)??i;return e==="TB"?s.y+yf:e==="BT"?(n.get(t.id)??i).y-yf:s.x+yf}}else return e==="TB"?l6:e==="BT"?(n.get(t.id)??i).y-yf:0;return 0},"calculatePosition"),q$e=o((t,e,r)=>{let n=Br==="BT"&&r?e:e+gf,i=Br==="TB"||Br==="BT"?n:Gs.get(t.branch)?.pos,a=Br==="TB"||Br==="BT"?Gs.get(t.branch)?.pos:n;if(a===void 0||i===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:a,y:i,posWithOffset:n}},"getCommitPosition"),tue=o((t,e,r)=>{if(!Ko)throw new Error("GitGraph config not found");let n=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),a=Br==="TB"||Br==="BT"?l6:0,s=[...e.keys()],l=Ko?.parallelCommits??!1,u=o((f,d)=>{let p=e.get(f)?.seq,m=e.get(d)?.seq;return p!==void 0&&m!==void 0?p-m:0},"sortKeys"),h=s.sort(u);Br==="BT"&&(l&&P$e(h,e,a),h=h.reverse()),h.forEach(f=>{let d=e.get(f);if(!d)throw new Error(`Commit not found for key ${f}`);l&&(a=W$e(d,Br,a,Vs));let p=q$e(d,a,l);if(r){let m=H$e(d),g=d.customType??d.type,y=Gs.get(d.branch)?.index??0;G$e(n,d,p,m,y,g),V$e(i,d,p,a),U$e(i,d,p,a)}Br==="TB"||Br==="BT"?Vs.set(d.id,{x:p.x,y:p.posWithOffset}):Vs.set(d.id,{x:p.posWithOffset,y:p.y}),a=Br==="BT"&&l?a+yf:a+yf+gf,a>mf&&(mf=a)})},"drawCommits"),Y$e=o((t,e,r,n,i)=>{let s=(Br==="TB"||Br==="BT"?r.x<n.x:r.y<n.y)?e.branch:t.branch,l=o(h=>h.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.seq<e.seq,"isBetweenCommits");return[...i.values()].some(h=>u(h)&&l(h))},"shouldRerouteArrow"),pb=o((t,e,r=0)=>{let n=t+Math.abs(t-e)/2;if(r>5)return n;if(c6.every(s=>Math.abs(s-n)>=10))return c6.push(n),n;let a=Math.abs(t-e);return pb(t,e-a/5,r+1)},"findLane"),X$e=o((t,e,r,n)=>{let i=Vs.get(e.id),a=Vs.get(r.id);if(i===void 0||a===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let s=Y$e(e,r,i,a,n),l="",u="",h=0,f=0,d=Gs.get(r.branch)?.index;r.type===Kr.MERGE&&e.id!==r.parents[0]&&(d=Gs.get(e.branch)?.index);let p;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,f=10;let m=i.y<a.y?pb(i.y,a.y):pb(a.y,i.y),g=i.x<a.x?pb(i.x,a.x):pb(a.x,i.x);Br==="TB"?i.x<a.x?p=`M ${i.x} ${i.y} L ${g-h} ${i.y} ${u} ${g} ${i.y+f} L ${g} ${a.y-h} ${l} ${g+f} ${a.y} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${g+h} ${i.y} ${l} ${g} ${i.y+f} L ${g} ${a.y-h} ${u} ${g-f} ${a.y} L ${a.x} ${a.y}`):Br==="BT"?i.x<a.x?p=`M ${i.x} ${i.y} L ${g-h} ${i.y} ${l} ${g} ${i.y-f} L ${g} ${a.y+h} ${u} ${g+f} ${a.y} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${g+h} ${i.y} ${u} ${g} ${i.y-f} L ${g} ${a.y+h} ${l} ${g-f} ${a.y} L ${a.x} ${a.y}`):i.y<a.y?p=`M ${i.x} ${i.y} L ${i.x} ${m-h} ${l} ${i.x+f} ${m} L ${a.x-h} ${m} ${u} ${a.x} ${m+f} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${i.x} ${m+h} ${u} ${i.x+f} ${m} L ${a.x-h} ${m} ${l} ${a.x} ${m-f} L ${a.x} ${a.y}`)}else l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,Br==="TB"?(i.x<a.x&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${l} ${i.x+f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${u} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x>a.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${u} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x+h} ${i.y} ${l} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):Br==="BT"?(i.x<a.x&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x>a.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${l} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):(i.y<a.y&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${u} ${a.x} ${i.y+f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${l} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y>a.y&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y===a.y&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`));if(p===void 0)throw new Error("Line definition not found");t.append("path").attr("d",p).attr("class","arrow arrow"+d%Sp)},"drawArrow"),j$e=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(n=>{let i=e.get(n);i.parents&&i.parents.length>0&&i.parents.forEach(a=>{X$e(r,e.get(a),i,e)})})},"drawArrows"),K$e=o((t,e)=>{let r=t.append("g");e.forEach((n,i)=>{let a=i%Sp,s=Gs.get(n.name)?.pos;if(s===void 0)throw new Error(`Position not found for branch ${n.name}`);let l=r.append("line");l.attr("x1",0),l.attr("y1",s),l.attr("x2",mf),l.attr("y2",s),l.attr("class","branch branch"+a),Br==="TB"?(l.attr("y1",l6),l.attr("x1",s),l.attr("y2",mf),l.attr("x2",s)):Br==="BT"&&(l.attr("y1",mf),l.attr("x1",s),l.attr("y2",l6),l.attr("x2",s)),c6.push(s);let u=n.name,h=rue(u),f=r.insert("rect"),p=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+a);p.node().appendChild(h);let m=h.getBBox();f.attr("class","branchLabelBkg label"+a).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(Ko?.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(Ko?.rotateCommitLabel===!0?30:0))+", "+(s-m.height/2-1)+")"),Br==="TB"?(f.attr("x",s-m.width/2-10).attr("y",0),p.attr("transform","translate("+(s-m.width/2-5)+", 0)")):Br==="BT"?(f.attr("x",s-m.width/2-10).attr("y",mf),p.attr("transform","translate("+(s-m.width/2-5)+", "+mf+")")):f.attr("transform","translate(-19, "+(s-m.height/2)+")")})},"drawBranches"),Q$e=o(function(t,e,r,n,i){return Gs.set(t,{pos:e,index:r}),e+=50+(i?40:0)+(Br==="TB"||Br==="BT"?n.width/2:0),e},"setBranchPosition"),Z$e=o(function(t,e,r,n){if(I$e(),Y.debug("in gitgraph renderer",t+` | |
| 831 | +`,"id:",e,r),!Ko)throw new Error("GitGraph config not found");let i=Ko.rotateCommitLabel??!1,a=n.db;db=a.getCommits();let s=a.getBranchesAsObjArray();Br=a.getDirection();let l=Ge(`[id="${e}"]`),u=0;s.forEach((h,f)=>{let d=rue(h.name),p=l.append("g"),m=p.insert("g").attr("class","branchLabel"),g=m.insert("g").attr("class","label branch-label");g.node()?.appendChild(d);let y=d.getBBox();u=Q$e(h.name,u,f,y,i),g.remove(),m.remove(),p.remove()}),tue(l,db,!1),Ko.showBranches&&K$e(l,s),j$e(l,db),tue(l,db,!0),Gt.insertTitle(l,"gitTitleText",Ko.titleTopMargin??0,a.getDiagramTitle()),oA(void 0,l,Ko.diagramPadding,Ko.useMaxWidth)},"draw"),iue={draw:Z$e}});var J$e,sue,oue=N(()=>{"use strict";J$e=o(t=>` | |
| 832 | + .commit-id, | |
| 833 | + .commit-msg, | |
| 834 | + .branch-label { | |
| 835 | + fill: lightgrey; | |
| 836 | + color: lightgrey; | |
| 837 | + font-family: 'trebuchet ms', verdana, arial, sans-serif; | |
| 838 | + font-family: var(--mermaid-font-family); | |
| 839 | + } | |
| 840 | + ${[0,1,2,3,4,5,6,7].map(e=>` | |
| 841 | + .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; } | |
| 842 | + .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; } | |
| 843 | + .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; } | |
| 844 | + .label${e} { fill: ${t["git"+e]}; } | |
| 845 | + .arrow${e} { stroke: ${t["git"+e]}; } | |
| 846 | + `).join(` | |
| 847 | +`)} | |
| 848 | + | |
| 849 | + .branch { | |
| 850 | + stroke-width: 1; | |
| 851 | + stroke: ${t.lineColor}; | |
| 852 | + stroke-dasharray: 2; | |
| 853 | + } | |
| 854 | + .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};} | |
| 855 | + .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; } | |
| 856 | + .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};} | |
| 857 | + .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; } | |
| 858 | + .tag-hole { fill: ${t.textColor}; } | |
| 859 | + | |
| 860 | + .commit-merge { | |
| 861 | + stroke: ${t.primaryColor}; | |
| 862 | + fill: ${t.primaryColor}; | |
| 863 | + } | |
| 864 | + .commit-reverse { | |
| 865 | + stroke: ${t.primaryColor}; | |
| 866 | + fill: ${t.primaryColor}; | |
| 867 | + stroke-width: 3; | |
| 868 | + } | |
| 869 | + .commit-highlight-outer { | |
| 870 | + } | |
| 871 | + .commit-highlight-inner { | |
| 872 | + stroke: ${t.primaryColor}; | |
| 873 | + fill: ${t.primaryColor}; | |
| 874 | + } | |
| 875 | + | |
| 876 | + .arrow { stroke-width: 8; stroke-linecap: round; fill: none} | |
| 877 | + .gitTitleText { | |
| 878 | + text-anchor: middle; | |
| 879 | + font-size: 18px; | |
| 880 | + fill: ${t.textColor}; | |
| 881 | + } | |
| 882 | +`,"getStyles"),sue=J$e});var lue={};hr(lue,{diagram:()=>eze});var eze,cue=N(()=>{"use strict";eue();GI();aue();oue();eze={parser:Jce,db:o6,renderer:iue,styles:sue}});var VI,fue,due=N(()=>{"use strict";VI=function(){var t=o(function(L,R,O,M){for(O=O||{},M=L.length;M--;O[L[M]]=R);return O},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],i=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],w=[1,19],C=[1,20],T=[1,21],E=[1,22],A=[1,23],S=[1,25],_=[1,35],I={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(R,O,M,B,F,P,z){var $=P.length-1;switch(F){case 1:return P[$-1];case 2:this.$=[];break;case 3:P[$-1].push(P[$]),this.$=P[$-1];break;case 4:case 5:this.$=P[$];break;case 6:case 7:this.$=[];break;case 8:B.setWeekday("monday");break;case 9:B.setWeekday("tuesday");break;case 10:B.setWeekday("wednesday");break;case 11:B.setWeekday("thursday");break;case 12:B.setWeekday("friday");break;case 13:B.setWeekday("saturday");break;case 14:B.setWeekday("sunday");break;case 15:B.setWeekend("friday");break;case 16:B.setWeekend("saturday");break;case 17:B.setDateFormat(P[$].substr(11)),this.$=P[$].substr(11);break;case 18:B.enableInclusiveEndDates(),this.$=P[$].substr(18);break;case 19:B.TopAxis(),this.$=P[$].substr(8);break;case 20:B.setAxisFormat(P[$].substr(11)),this.$=P[$].substr(11);break;case 21:B.setTickInterval(P[$].substr(13)),this.$=P[$].substr(13);break;case 22:B.setExcludes(P[$].substr(9)),this.$=P[$].substr(9);break;case 23:B.setIncludes(P[$].substr(9)),this.$=P[$].substr(9);break;case 24:B.setTodayMarker(P[$].substr(12)),this.$=P[$].substr(12);break;case 27:B.setDiagramTitle(P[$].substr(6)),this.$=P[$].substr(6);break;case 28:this.$=P[$].trim(),B.setAccTitle(this.$);break;case 29:case 30:this.$=P[$].trim(),B.setAccDescription(this.$);break;case 31:B.addSection(P[$].substr(8)),this.$=P[$].substr(8);break;case 33:B.addTask(P[$-1],P[$]),this.$="task";break;case 34:this.$=P[$-1],B.setClickEvent(P[$-1],P[$],null);break;case 35:this.$=P[$-2],B.setClickEvent(P[$-2],P[$-1],P[$]);break;case 36:this.$=P[$-2],B.setClickEvent(P[$-2],P[$-1],null),B.setLink(P[$-2],P[$]);break;case 37:this.$=P[$-3],B.setClickEvent(P[$-3],P[$-2],P[$-1]),B.setLink(P[$-3],P[$]);break;case 38:this.$=P[$-2],B.setClickEvent(P[$-2],P[$],null),B.setLink(P[$-2],P[$-1]);break;case 39:this.$=P[$-3],B.setClickEvent(P[$-3],P[$-1],P[$]),B.setLink(P[$-3],P[$-2]);break;case 40:this.$=P[$-1],B.setLink(P[$-1],P[$]);break;case 41:case 47:this.$=P[$-1]+" "+P[$];break;case 42:case 43:case 45:this.$=P[$-2]+" "+P[$-1]+" "+P[$];break;case 44:case 46:this.$=P[$-3]+" "+P[$-2]+" "+P[$-1]+" "+P[$];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:C,33:T,35:E,36:A,37:24,38:S,40:_},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:C,33:T,35:E,36:A,37:24,38:S,40:_},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(R,O){if(O.recoverable)this.trace(R);else{var M=new Error(R);throw M.hash=O,M}},"parseError"),parse:o(function(R){var O=this,M=[0],B=[],F=[null],P=[],z=this.table,$="",H=0,Q=0,j=0,ie=2,ne=1,le=P.slice.call(arguments,1),he=Object.create(this.lexer),K={yy:{}};for(var X in this.yy)Object.prototype.hasOwnProperty.call(this.yy,X)&&(K.yy[X]=this.yy[X]);he.setInput(R,K.yy),K.yy.lexer=he,K.yy.parser=this,typeof he.yylloc>"u"&&(he.yylloc={});var te=he.yylloc;P.push(te);var J=he.options&&he.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function se(W){M.length=M.length-2*W,F.length=F.length-W,P.length=P.length-W}o(se,"popStack");function ue(){var W;return W=B.pop()||he.lex()||ne,typeof W!="number"&&(W instanceof Array&&(B=W,W=B.pop()),W=O.symbols_[W]||W),W}o(ue,"lex");for(var Z,Se,ce,ae,Oe,ge,ze={},He,$e,Re,Ie;;){if(ce=M[M.length-1],this.defaultActions[ce]?ae=this.defaultActions[ce]:((Z===null||typeof Z>"u")&&(Z=ue()),ae=z[ce]&&z[ce][Z]),typeof ae>"u"||!ae.length||!ae[0]){var be="";Ie=[];for(He in z[ce])this.terminals_[He]&&He>ie&&Ie.push("'"+this.terminals_[He]+"'");he.showPosition?be="Parse error on line "+(H+1)+`: | |
| 883 | +`+he.showPosition()+` | |
| 884 | +Expecting `+Ie.join(", ")+", got '"+(this.terminals_[Z]||Z)+"'":be="Parse error on line "+(H+1)+": Unexpected "+(Z==ne?"end of input":"'"+(this.terminals_[Z]||Z)+"'"),this.parseError(be,{text:he.match,token:this.terminals_[Z]||Z,line:he.yylineno,loc:te,expected:Ie})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ce+", token: "+Z);switch(ae[0]){case 1:M.push(Z),F.push(he.yytext),P.push(he.yylloc),M.push(ae[1]),Z=null,Se?(Z=Se,Se=null):(Q=he.yyleng,$=he.yytext,H=he.yylineno,te=he.yylloc,j>0&&j--);break;case 2:if($e=this.productions_[ae[1]][1],ze.$=F[F.length-$e],ze._$={first_line:P[P.length-($e||1)].first_line,last_line:P[P.length-1].last_line,first_column:P[P.length-($e||1)].first_column,last_column:P[P.length-1].last_column},J&&(ze._$.range=[P[P.length-($e||1)].range[0],P[P.length-1].range[1]]),ge=this.performAction.apply(ze,[$,Q,H,K.yy,ae[1],F,P].concat(le)),typeof ge<"u")return ge;$e&&(M=M.slice(0,-1*$e*2),F=F.slice(0,-1*$e),P=P.slice(0,-1*$e)),M.push(this.productions_[ae[1]][0]),F.push(ze.$),P.push(ze._$),Re=z[M[M.length-2]][M[M.length-1]],M.push(Re);break;case 3:return!0}}return!0},"parse")},D=function(){var L={EOF:1,parseError:o(function(O,M){if(this.yy.parser)this.yy.parser.parseError(O,M);else throw new Error(O)},"parseError"),setInput:o(function(R,O){return this.yy=O||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var O=R.match(/(?:\r\n?|\n).*/g);return O?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},"input"),unput:o(function(R){var O=R.length,M=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-O),this.offset-=O;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),M.length-1&&(this.yylineno-=M.length-1);var F=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:M?(M.length===B.length?this.yylloc.first_column:0)+B[B.length-M.length].length-M[0].length:this.yylloc.first_column-O},this.options.ranges&&(this.yylloc.range=[F[0],F[0]+this.yyleng-O]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 885 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(R){this.unput(this.match.slice(R))},"less"),pastInput:o(function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var R=this.pastInput(),O=new Array(R.length+1).join("-");return R+this.upcomingInput()+` | |
| 886 | +`+O+"^"},"showPosition"),test_match:o(function(R,O){var M,B,F;if(this.options.backtrack_lexer&&(F={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(F.yylloc.range=this.yylloc.range.slice(0))),B=R[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],M=this.performAction.call(this,this.yy,this,O,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),M)return M;if(this._backtrack){for(var P in F)this[P]=F[P];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,O,M,B;this._more||(this.yytext="",this.match="");for(var F=this._currentRules(),P=0;P<F.length;P++)if(M=this._input.match(this.rules[F[P]]),M&&(!O||M[0].length>O[0].length)){if(O=M,B=P,this.options.backtrack_lexer){if(R=this.test_match(M,F[P]),R!==!1)return R;if(this._backtrack){O=!1;continue}else return!1}else if(!this.options.flex)break}return O?(R=this.test_match(O,F[B]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 887 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var O=this.next();return O||this.lex()},"lex"),begin:o(function(O){this.conditionStack.push(O)},"begin"),popState:o(function(){var O=this.conditionStack.length-1;return O>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(O){return O=this.conditionStack.length-1-Math.abs(O||0),O>=0?this.conditionStack[O]:"INITIAL"},"topState"),pushState:o(function(O){this.begin(O)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(O,M,B,F){var P=F;switch(B){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return L}();I.lexer=D;function k(){this.yy={}}return o(k,"Parser"),k.prototype=I,I.Parser=k,new k}();VI.parser=VI;fue=VI});var pue=Mi((UI,HI)=>{"use strict";(function(t,e){typeof UI=="object"&&typeof HI<"u"?HI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(UI,function(){"use strict";var t="day";return function(e,r,n){var i=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=i(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?n.utc:n)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}})});var mue=Mi((WI,qI)=>{"use strict";(function(t,e){typeof WI=="object"&&typeof qI<"u"?qI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(WI,function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,n=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x}(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[n,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[i,u("seconds")],ss:[i,u("seconds")],m:[i,u("minutes")],mm:[i,u("minutes")],H:[i,u("hours")],h:[i,u("hours")],HH:[i,u("hours")],hh:[i,u("hours")],D:[i,u("day")],DD:[n,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[i,u("week")],ww:[n,u("week")],M:[i,u("month")],MM:[n,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map(function(x){return x.slice(0,3)})).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[n,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(S,_,I){var D=I&&I.toUpperCase();return _||v[I]||t[I]||v[D].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(k,L,R){return L||R.slice(1)})})).match(e),b=x.length,w=0;w<b;w+=1){var C=x[w],T=p[C],E=T&&T[0],A=T&&T[1];x[w]=A?{regex:E,parser:A}:C.replace(/^\[|\]$/g,"")}return function(S){for(var _={},I=0,D=0;I<b;I+=1){var k=x[I];if(typeof k=="string")D+=k.length;else{var L=k.regex,R=k.parser,O=S.slice(D),M=L.exec(O)[0];R.call(_,M),S=S.replace(M,"")}}return function(B){var F=B.afternoon;if(F!==void 0){var P=B.hours;F?P<12&&(B.hours+=12):P===12&&(B.hours=0),delete B.afternoon}}(_),_}}return o(m,"l"),function(g,y,v){v.p.customParseFormat=!0,g&&g.parseTwoDigitYear&&(l=g.parseTwoDigitYear);var x=y.prototype,b=x.parse;x.parse=function(w){var C=w.date,T=w.utc,E=w.args;this.$u=T;var A=E[1];if(typeof A=="string"){var S=E[2]===!0,_=E[3]===!0,I=S||_,D=E[2];_&&(D=E[2]),s=this.$locale(),!S&&D&&(s=v.Ls[D]),this.$d=function(O,M,B,F){try{if(["x","X"].indexOf(M)>-1)return new Date((M==="X"?1e3:1)*O);var P=m(M)(O),z=P.year,$=P.month,H=P.day,Q=P.hours,j=P.minutes,ie=P.seconds,ne=P.milliseconds,le=P.zone,he=P.week,K=new Date,X=H||(z||$?1:K.getDate()),te=z||K.getFullYear(),J=0;z&&!$||(J=$>0?$-1:K.getMonth());var se,ue=Q||0,Z=j||0,Se=ie||0,ce=ne||0;return le?new Date(Date.UTC(te,J,X,ue,Z,Se,ce+60*le.offset*1e3)):B?new Date(Date.UTC(te,J,X,ue,Z,Se,ce)):(se=new Date(te,J,X,ue,Z,Se,ce),he&&(se=F(se).week(he).toDate()),se)}catch{return new Date("")}}(C,A,T,v),this.init(),D&&D!==!0&&(this.$L=this.locale(D).$L),I&&C!=this.format(A)&&(this.$d=new Date("")),s={}}else if(A instanceof Array)for(var k=A.length,L=1;L<=k;L+=1){E[1]=A[L-1];var R=v.apply(this,E);if(R.isValid()){this.$d=R.$d,this.$L=R.$L,this.init();break}L===k&&(this.$d=new Date(""))}else b.call(this,w)}}})});var gue=Mi((YI,XI)=>{"use strict";(function(t,e){typeof YI=="object"&&typeof XI<"u"?XI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})(YI,function(){"use strict";return function(t,e){var r=e.prototype,n=r.format;r.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var l=this.$utils(),u=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}});return n.bind(this)(u)}}})});function Nue(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){let a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}var xue,ho,bue,wue,Tue,yue,Gc,ZI,JI,eO,mb,gb,tO,rO,f6,E1,nO,kue,iO,yb,aO,sO,d6,jI,ize,aze,sze,oze,lze,cze,uze,hze,fze,dze,pze,mze,gze,yze,vze,xze,bze,wze,Tze,kze,Eze,Sze,Cze,Eue,Aze,_ze,Dze,Sue,Lze,KI,Cue,Aue,u6,k1,Rze,Nze,QI,h6,Gi,_ue,Mze,Cp,Ize,vue,Oze,Due,Pze,Lue,Bze,Fze,Rue,Mue=N(()=>{"use strict";xue=Sa(z0(),1),ho=Sa(R4(),1),bue=Sa(pue(),1),wue=Sa(mue(),1),Tue=Sa(gue(),1);vt();zt();ir();mi();ho.default.extend(bue.default);ho.default.extend(wue.default);ho.default.extend(Tue.default);yue={friday:5,saturday:6},Gc="",ZI="",eO="",mb=[],gb=[],tO=new Map,rO=[],f6=[],E1="",nO="",kue=["active","done","crit","milestone"],iO=[],yb=!1,aO=!1,sO="sunday",d6="saturday",jI=0,ize=o(function(){rO=[],f6=[],E1="",iO=[],u6=0,QI=void 0,h6=void 0,Gi=[],Gc="",ZI="",nO="",JI=void 0,eO="",mb=[],gb=[],yb=!1,aO=!1,jI=0,tO=new Map,Ar(),sO="sunday",d6="saturday"},"clear"),aze=o(function(t){ZI=t},"setAxisFormat"),sze=o(function(){return ZI},"getAxisFormat"),oze=o(function(t){JI=t},"setTickInterval"),lze=o(function(){return JI},"getTickInterval"),cze=o(function(t){eO=t},"setTodayMarker"),uze=o(function(){return eO},"getTodayMarker"),hze=o(function(t){Gc=t},"setDateFormat"),fze=o(function(){yb=!0},"enableInclusiveEndDates"),dze=o(function(){return yb},"endDatesAreInclusive"),pze=o(function(){aO=!0},"enableTopAxis"),mze=o(function(){return aO},"topAxisEnabled"),gze=o(function(t){nO=t},"setDisplayMode"),yze=o(function(){return nO},"getDisplayMode"),vze=o(function(){return Gc},"getDateFormat"),xze=o(function(t){mb=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),bze=o(function(){return mb},"getIncludes"),wze=o(function(t){gb=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),Tze=o(function(){return gb},"getExcludes"),kze=o(function(){return tO},"getLinks"),Eze=o(function(t){E1=t,rO.push(t)},"addSection"),Sze=o(function(){return rO},"getSections"),Cze=o(function(){let t=vue(),e=10,r=0;for(;!t&&r<e;)t=vue(),r++;return f6=Gi,f6},"getTasks"),Eue=o(function(t,e,r,n){return n.includes(t.format(e.trim()))?!1:r.includes("weekends")&&(t.isoWeekday()===yue[d6]||t.isoWeekday()===yue[d6]+1)||r.includes(t.format("dddd").toLowerCase())?!0:r.includes(t.format(e.trim()))},"isInvalidDate"),Aze=o(function(t){sO=t},"setWeekday"),_ze=o(function(){return sO},"getWeekday"),Dze=o(function(t){d6=t},"setWeekend"),Sue=o(function(t,e,r,n){if(!r.length||t.manualEndTime)return;let i;t.startTime instanceof Date?i=(0,ho.default)(t.startTime):i=(0,ho.default)(t.startTime,e,!0),i=i.add(1,"d");let a;t.endTime instanceof Date?a=(0,ho.default)(t.endTime):a=(0,ho.default)(t.endTime,e,!0);let[s,l]=Lze(i,a,e,r,n);t.endTime=s.toDate(),t.renderEndTime=l},"checkTaskDates"),Lze=o(function(t,e,r,n,i){let a=!1,s=null;for(;t<=e;)a||(s=e.toDate()),a=Eue(t,r,n,i),a&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,s]},"fixTaskDates"),KI=o(function(t,e,r){r=r.trim();let i=/^after\s+(?<ids>[\d\w- ]+)/.exec(r);if(i!==null){let s=null;for(let u of i.groups.ids.split(" ")){let h=Cp(u);h!==void 0&&(!s||h.endTime>s.endTime)&&(s=h)}if(s)return s.endTime;let l=new Date;return l.setHours(0,0,0,0),l}let a=(0,ho.default)(r,e.trim(),!0);if(a.isValid())return a.toDate();{Y.debug("Invalid date:"+r),Y.debug("With date format:"+e.trim());let s=new Date(r);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+r);return s}},"getStartDate"),Cue=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),Aue=o(function(t,e,r,n=!1){r=r.trim();let a=/^until\s+(?<ids>[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=Cp(p);m!==void 0&&(!f||m.startTime<f.startTime)&&(f=m)}if(f)return f.startTime;let d=new Date;return d.setHours(0,0,0,0),d}let s=(0,ho.default)(r,e.trim(),!0);if(s.isValid())return n&&(s=s.add(1,"d")),s.toDate();let l=(0,ho.default)(t),[u,h]=Cue(r);if(!Number.isNaN(u)){let f=l.add(u,h);f.isValid()&&(l=f)}return l.toDate()},"getEndDate"),u6=0,k1=o(function(t){return t===void 0?(u6=u6+1,"task"+u6):t},"parseId"),Rze=o(function(t,e){let r;e.substr(0,1)===":"?r=e.substr(1,e.length):r=e;let n=r.split(","),i={};Nue(n,i,kue);for(let s=0;s<n.length;s++)n[s]=n[s].trim();let a="";switch(n.length){case 1:i.id=k1(),i.startTime=t.endTime,a=n[0];break;case 2:i.id=k1(),i.startTime=KI(void 0,Gc,n[0]),a=n[1];break;case 3:i.id=k1(n[0]),i.startTime=KI(void 0,Gc,n[1]),a=n[2];break;default:}return a&&(i.endTime=Aue(i.startTime,Gc,a,yb),i.manualEndTime=(0,ho.default)(a,"YYYY-MM-DD",!0).isValid(),Sue(i,Gc,gb,mb)),i},"compileData"),Nze=o(function(t,e){let r;e.substr(0,1)===":"?r=e.substr(1,e.length):r=e;let n=r.split(","),i={};Nue(n,i,kue);for(let a=0;a<n.length;a++)n[a]=n[a].trim();switch(n.length){case 1:i.id=k1(),i.startTime={type:"prevTaskEnd",id:t},i.endTime={data:n[0]};break;case 2:i.id=k1(),i.startTime={type:"getStartDate",startData:n[0]},i.endTime={data:n[1]};break;case 3:i.id=k1(n[0]),i.startTime={type:"getStartDate",startData:n[1]},i.endTime={data:n[2]};break;default:}return i},"parseData"),Gi=[],_ue={},Mze=o(function(t,e){let r={section:E1,type:E1,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},n=Nze(h6,e);r.raw.startTime=n.startTime,r.raw.endTime=n.endTime,r.id=n.id,r.prevTaskId=h6,r.active=n.active,r.done=n.done,r.crit=n.crit,r.milestone=n.milestone,r.order=jI,jI++;let i=Gi.push(r);h6=r.id,_ue[r.id]=i-1},"addTask"),Cp=o(function(t){let e=_ue[t];return Gi[e]},"findTaskById"),Ize=o(function(t,e){let r={section:E1,type:E1,description:t,task:t,classes:[]},n=Rze(QI,e);r.startTime=n.startTime,r.endTime=n.endTime,r.id=n.id,r.active=n.active,r.done=n.done,r.crit=n.crit,r.milestone=n.milestone,QI=r,f6.push(r)},"addTaskOrg"),vue=o(function(){let t=o(function(r){let n=Gi[r],i="";switch(Gi[r].raw.startTime.type){case"prevTaskEnd":{let a=Cp(n.prevTaskId);n.startTime=a.endTime;break}case"getStartDate":i=KI(void 0,Gc,Gi[r].raw.startTime.startData),i&&(Gi[r].startTime=i);break}return Gi[r].startTime&&(Gi[r].endTime=Aue(Gi[r].startTime,Gc,Gi[r].raw.endTime.data,yb),Gi[r].endTime&&(Gi[r].processed=!0,Gi[r].manualEndTime=(0,ho.default)(Gi[r].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),Sue(Gi[r],Gc,gb,mb))),Gi[r].processed},"compileTask"),e=!0;for(let[r,n]of Gi.entries())t(r),e=e&&n.processed;return e},"compileTasks"),Oze=o(function(t,e){let r=e;me().securityLevel!=="loose"&&(r=(0,xue.sanitizeUrl)(e)),t.split(",").forEach(function(n){Cp(n)!==void 0&&(Lue(n,()=>{window.open(r,"_self")}),tO.set(n,r))}),Due(t,"clickable")},"setLink"),Due=o(function(t,e){t.split(",").forEach(function(r){let n=Cp(r);n!==void 0&&n.classes.push(e)})},"setClass"),Pze=o(function(t,e,r){if(me().securityLevel!=="loose"||e===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a<n.length;a++){let s=n[a].trim();s.startsWith('"')&&s.endsWith('"')&&(s=s.substr(1,s.length-2)),n[a]=s}}n.length===0&&n.push(t),Cp(t)!==void 0&&Lue(t,()=>{Gt.runFunc(e,...n)})},"setClickFun"),Lue=o(function(t,e){iO.push(function(){let r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})},function(){let r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},"pushFun"),Bze=o(function(t,e,r){t.split(",").forEach(function(n){Pze(n,e,r)}),Due(t,"clickable")},"setClickEvent"),Fze=o(function(t){iO.forEach(function(e){e(t)})},"bindFunctions"),Rue={getConfig:o(()=>me().gantt,"getConfig"),clear:ize,setDateFormat:hze,getDateFormat:vze,enableInclusiveEndDates:fze,endDatesAreInclusive:dze,enableTopAxis:pze,topAxisEnabled:mze,setAxisFormat:aze,getAxisFormat:sze,setTickInterval:oze,getTickInterval:lze,setTodayMarker:cze,getTodayMarker:uze,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,setDisplayMode:gze,getDisplayMode:yze,setAccDescription:Nr,getAccDescription:Mr,addSection:Eze,getSections:Sze,getTasks:Cze,addTask:Mze,findTaskById:Cp,addTaskOrg:Ize,setIncludes:xze,getIncludes:bze,setExcludes:wze,getExcludes:Tze,setClickEvent:Bze,setLink:Oze,getLinks:kze,bindFunctions:Fze,parseDuration:Cue,isInvalidDate:Eue,setWeekday:Aze,getWeekday:_ze,setWeekend:Dze};o(Nue,"getTaskTags")});var p6,$ze,Iue,zze,Yu,Gze,Oue,Pue=N(()=>{"use strict";p6=Sa(R4(),1);vt();dr();gr();zt();Ei();$ze=o(function(){Y.debug("Something is calling, setConf, remove the call")},"setConf"),Iue={monday:Ch,tuesday:T5,wednesday:k5,thursday:oc,friday:E5,saturday:S5,sunday:yl},zze=o((t,e)=>{let r=[...t].map(()=>-1/0),n=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(let a of n)for(let s=0;s<r.length;s++)if(a.startTime>=r[s]){r[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i},"getMaxIntersections"),Gze=o(function(t,e,r,n){let i=me().gantt,a=me().securityLevel,s;a==="sandbox"&&(s=Ge("#i"+e));let l=a==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Yu=h.parentElement.offsetWidth,Yu===void 0&&(Yu=1200),i.useWidth!==void 0&&(Yu=i.useWidth);let f=n.db.getTasks(),d=[];for(let S of f)d.push(S.type);d=A(d);let p={},m=2*i.topPadding;if(n.db.getDisplayMode()==="compact"||i.displayMode==="compact"){let S={};for(let I of f)S[I.section]===void 0?S[I.section]=[I]:S[I.section].push(I);let _=0;for(let I of Object.keys(S)){let D=zze(S[I],_)+1;_+=D,m+=D*(i.barHeight+i.barGap),p[I]=D}}else{m+=f.length*(i.barHeight+i.barGap);for(let S of d)p[S]=f.filter(_=>_.type===S).length}h.setAttribute("viewBox","0 0 "+Yu+" "+m);let g=l.select(`[id="${e}"]`),y=_5().domain([M3(f,function(S){return S.startTime}),N3(f,function(S){return S.endTime})]).rangeRound([0,Yu-i.leftPadding-i.rightPadding]);function v(S,_){let I=S.startTime,D=_.startTime,k=0;return I>D?k=1:I<D&&(k=-1),k}o(v,"taskCompare"),f.sort(v),x(f,Yu,m),vn(g,m,Yu,i.useMaxWidth),g.append("text").text(n.db.getDiagramTitle()).attr("x",Yu/2).attr("y",i.titleTopMargin).attr("class","titleText");function x(S,_,I){let D=i.barHeight,k=D+i.barGap,L=i.topPadding,R=i.leftPadding,O=gl().domain([0,d.length]).range(["#00B9FA","#F95002"]).interpolate($8);w(k,L,R,_,I,S,n.db.getExcludes(),n.db.getIncludes()),C(R,L,_,I),b(S,k,L,R,D,O,_,I),T(k,L,R,D,O),E(R,L,_,I)}o(x,"makeGantt");function b(S,_,I,D,k,L,R){let M=[...new Set(S.map(z=>z.order))].map(z=>S.find($=>$.order===z));g.append("g").selectAll("rect").data(M).enter().append("rect").attr("x",0).attr("y",function(z,$){return $=z.order,$*_+I-2}).attr("width",function(){return R-i.rightPadding/2}).attr("height",_).attr("class",function(z){for(let[$,H]of d.entries())if(z.type===H)return"section section"+$%i.numberSectionStyles;return"section section0"});let B=g.append("g").selectAll("rect").data(S).enter(),F=n.db.getLinks();if(B.append("rect").attr("id",function(z){return z.id}).attr("rx",3).attr("ry",3).attr("x",function(z){return z.milestone?y(z.startTime)+D+.5*(y(z.endTime)-y(z.startTime))-.5*k:y(z.startTime)+D}).attr("y",function(z,$){return $=z.order,$*_+I}).attr("width",function(z){return z.milestone?k:y(z.renderEndTime||z.endTime)-y(z.startTime)}).attr("height",k).attr("transform-origin",function(z,$){return $=z.order,(y(z.startTime)+D+.5*(y(z.endTime)-y(z.startTime))).toString()+"px "+($*_+I+.5*k).toString()+"px"}).attr("class",function(z){let $="task",H="";z.classes.length>0&&(H=z.classes.join(" "));let Q=0;for(let[ie,ne]of d.entries())z.type===ne&&(Q=ie%i.numberSectionStyles);let j="";return z.active?z.crit?j+=" activeCrit":j=" active":z.done?z.crit?j=" doneCrit":j=" done":z.crit&&(j+=" crit"),j.length===0&&(j=" task"),z.milestone&&(j=" milestone "+j),j+=Q,j+=" "+H,$+j}),B.append("text").attr("id",function(z){return z.id+"-text"}).text(function(z){return z.task}).attr("font-size",i.fontSize).attr("x",function(z){let $=y(z.startTime),H=y(z.renderEndTime||z.endTime);z.milestone&&($+=.5*(y(z.endTime)-y(z.startTime))-.5*k),z.milestone&&(H=$+k);let Q=this.getBBox().width;return Q>H-$?H+Q+1.5*i.leftPadding>R?$+D-5:H+D+5:(H-$)/2+$+D}).attr("y",function(z,$){return $=z.order,$*_+i.barHeight/2+(i.fontSize/2-2)+I}).attr("text-height",k).attr("class",function(z){let $=y(z.startTime),H=y(z.endTime);z.milestone&&(H=$+k);let Q=this.getBBox().width,j="";z.classes.length>0&&(j=z.classes.join(" "));let ie=0;for(let[le,he]of d.entries())z.type===he&&(ie=le%i.numberSectionStyles);let ne="";return z.active&&(z.crit?ne="activeCritText"+ie:ne="activeText"+ie),z.done?z.crit?ne=ne+" doneCritText"+ie:ne=ne+" doneText"+ie:z.crit&&(ne=ne+" critText"+ie),z.milestone&&(ne+=" milestoneText"),Q>H-$?H+Q+1.5*i.leftPadding>R?j+" taskTextOutsideLeft taskTextOutside"+ie+" "+ne:j+" taskTextOutsideRight taskTextOutside"+ie+" "+ne+" width-"+Q:j+" taskText taskText"+ie+" "+ne+" width-"+Q}),me().securityLevel==="sandbox"){let z;z=Ge("#i"+e);let $=z.nodes()[0].contentDocument;B.filter(function(H){return F.has(H.id)}).each(function(H){var Q=$.querySelector("#"+H.id),j=$.querySelector("#"+H.id+"-text");let ie=Q.parentNode;var ne=$.createElement("a");ne.setAttribute("xlink:href",F.get(H.id)),ne.setAttribute("target","_top"),ie.appendChild(ne),ne.appendChild(Q),ne.appendChild(j)})}}o(b,"drawRects");function w(S,_,I,D,k,L,R,O){if(R.length===0&&O.length===0)return;let M,B;for(let{startTime:Q,endTime:j}of L)(M===void 0||Q<M)&&(M=Q),(B===void 0||j>B)&&(B=j);if(!M||!B)return;if((0,p6.default)(B).diff((0,p6.default)(M),"year")>5){Y.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let F=n.db.getDateFormat(),P=[],z=null,$=(0,p6.default)(M);for(;$.valueOf()<=B;)n.db.isInvalidDate($,F,R,O)?z?z.end=$:z={start:$,end:$}:z&&(P.push(z),z=null),$=$.add(1,"d");g.append("g").selectAll("rect").data(P).enter().append("rect").attr("id",function(Q){return"exclude-"+Q.start.format("YYYY-MM-DD")}).attr("x",function(Q){return y(Q.start)+I}).attr("y",i.gridLineStartPadding).attr("width",function(Q){let j=Q.end.add(1,"day");return y(j)-y(Q.start)}).attr("height",k-_-i.gridLineStartPadding).attr("transform-origin",function(Q,j){return(y(Q.start)+I+.5*(y(Q.end)-y(Q.start))).toString()+"px "+(j*S+.5*k).toString()+"px"}).attr("class","exclude-range")}o(w,"drawExcludeDays");function C(S,_,I,D){let k=bA(y).tickSize(-D+_+i.gridLineStartPadding).tickFormat(wd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d")),R=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||i.tickInterval);if(R!==null){let O=R[1],M=R[2],B=n.db.getWeekday()||i.weekday;switch(M){case"millisecond":k.ticks(ac.every(O));break;case"second":k.ticks(Ks.every(O));break;case"minute":k.ticks(vu.every(O));break;case"hour":k.ticks(xu.every(O));break;case"day":k.ticks(_o.every(O));break;case"week":k.ticks(Iue[B].every(O));break;case"month":k.ticks(bu.every(O));break}}if(g.append("g").attr("class","grid").attr("transform","translate("+S+", "+(D-50)+")").call(k).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let O=xA(y).tickSize(-D+_+i.gridLineStartPadding).tickFormat(wd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(R!==null){let M=R[1],B=R[2],F=n.db.getWeekday()||i.weekday;switch(B){case"millisecond":O.ticks(ac.every(M));break;case"second":O.ticks(Ks.every(M));break;case"minute":O.ticks(vu.every(M));break;case"hour":O.ticks(xu.every(M));break;case"day":O.ticks(_o.every(M));break;case"week":O.ticks(Iue[F].every(M));break;case"month":O.ticks(bu.every(M));break}}g.append("g").attr("class","grid").attr("transform","translate("+S+", "+_+")").call(O).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(C,"makeGrid");function T(S,_){let I=0,D=Object.keys(p).map(k=>[k,p[k]]);g.append("g").selectAll("text").data(D).enter().append(function(k){let L=k[0].split(Ze.lineBreakRegex),R=-(L.length-1)/2,O=u.createElementNS("http://www.w3.org/2000/svg","text");O.setAttribute("dy",R+"em");for(let[M,B]of L.entries()){let F=u.createElementNS("http://www.w3.org/2000/svg","tspan");F.setAttribute("alignment-baseline","central"),F.setAttribute("x","10"),M>0&&F.setAttribute("dy","1em"),F.textContent=B,O.appendChild(F)}return O}).attr("x",10).attr("y",function(k,L){if(L>0)for(let R=0;R<L;R++)return I+=D[L-1][1],k[1]*S/2+I*S+_;else return k[1]*S/2+_}).attr("font-size",i.sectionFontSize).attr("class",function(k){for(let[L,R]of d.entries())if(k[0]===R)return"sectionTitle sectionTitle"+L%i.numberSectionStyles;return"sectionTitle"})}o(T,"vertLabels");function E(S,_,I,D){let k=n.db.getTodayMarker();if(k==="off")return;let L=g.append("g").attr("class","today"),R=new Date,O=L.append("line");O.attr("x1",y(R)+S).attr("x2",y(R)+S).attr("y1",i.titleTopMargin).attr("y2",D-i.titleTopMargin).attr("class","today"),k!==""&&O.attr("style",k.replace(/,/g,";"))}o(E,"drawToday");function A(S){let _={},I=[];for(let D=0,k=S.length;D<k;++D)Object.prototype.hasOwnProperty.call(_,S[D])||(_[S[D]]=!0,I.push(S[D]));return I}o(A,"checkUnique")},"draw"),Oue={setConf:$ze,draw:Gze}});var Vze,Bue,Fue=N(()=>{"use strict";Vze=o(t=>` | |
| 888 | + .mermaid-main-font { | |
| 889 | + font-family: ${t.fontFamily}; | |
| 890 | + } | |
| 891 | + | |
| 892 | + .exclude-range { | |
| 893 | + fill: ${t.excludeBkgColor}; | |
| 894 | + } | |
| 895 | + | |
| 896 | + .section { | |
| 897 | + stroke: none; | |
| 898 | + opacity: 0.2; | |
| 899 | + } | |
| 900 | + | |
| 901 | + .section0 { | |
| 902 | + fill: ${t.sectionBkgColor}; | |
| 903 | + } | |
| 904 | + | |
| 905 | + .section2 { | |
| 906 | + fill: ${t.sectionBkgColor2}; | |
| 907 | + } | |
| 908 | + | |
| 909 | + .section1, | |
| 910 | + .section3 { | |
| 911 | + fill: ${t.altSectionBkgColor}; | |
| 912 | + opacity: 0.2; | |
| 913 | + } | |
| 914 | + | |
| 915 | + .sectionTitle0 { | |
| 916 | + fill: ${t.titleColor}; | |
| 917 | + } | |
| 918 | + | |
| 919 | + .sectionTitle1 { | |
| 920 | + fill: ${t.titleColor}; | |
| 921 | + } | |
| 922 | + | |
| 923 | + .sectionTitle2 { | |
| 924 | + fill: ${t.titleColor}; | |
| 925 | + } | |
| 926 | + | |
| 927 | + .sectionTitle3 { | |
| 928 | + fill: ${t.titleColor}; | |
| 929 | + } | |
| 930 | + | |
| 931 | + .sectionTitle { | |
| 932 | + text-anchor: start; | |
| 933 | + font-family: ${t.fontFamily}; | |
| 934 | + } | |
| 935 | + | |
| 936 | + | |
| 937 | + /* Grid and axis */ | |
| 938 | + | |
| 939 | + .grid .tick { | |
| 940 | + stroke: ${t.gridColor}; | |
| 941 | + opacity: 0.8; | |
| 942 | + shape-rendering: crispEdges; | |
| 943 | + } | |
| 944 | + | |
| 945 | + .grid .tick text { | |
| 946 | + font-family: ${t.fontFamily}; | |
| 947 | + fill: ${t.textColor}; | |
| 948 | + } | |
| 949 | + | |
| 950 | + .grid path { | |
| 951 | + stroke-width: 0; | |
| 952 | + } | |
| 953 | + | |
| 954 | + | |
| 955 | + /* Today line */ | |
| 956 | + | |
| 957 | + .today { | |
| 958 | + fill: none; | |
| 959 | + stroke: ${t.todayLineColor}; | |
| 960 | + stroke-width: 2px; | |
| 961 | + } | |
| 962 | + | |
| 963 | + | |
| 964 | + /* Task styling */ | |
| 965 | + | |
| 966 | + /* Default task */ | |
| 967 | + | |
| 968 | + .task { | |
| 969 | + stroke-width: 2; | |
| 970 | + } | |
| 971 | + | |
| 972 | + .taskText { | |
| 973 | + text-anchor: middle; | |
| 974 | + font-family: ${t.fontFamily}; | |
| 975 | + } | |
| 976 | + | |
| 977 | + .taskTextOutsideRight { | |
| 978 | + fill: ${t.taskTextDarkColor}; | |
| 979 | + text-anchor: start; | |
| 980 | + font-family: ${t.fontFamily}; | |
| 981 | + } | |
| 982 | + | |
| 983 | + .taskTextOutsideLeft { | |
| 984 | + fill: ${t.taskTextDarkColor}; | |
| 985 | + text-anchor: end; | |
| 986 | + } | |
| 987 | + | |
| 988 | + | |
| 989 | + /* Special case clickable */ | |
| 990 | + | |
| 991 | + .task.clickable { | |
| 992 | + cursor: pointer; | |
| 993 | + } | |
| 994 | + | |
| 995 | + .taskText.clickable { | |
| 996 | + cursor: pointer; | |
| 997 | + fill: ${t.taskTextClickableColor} !important; | |
| 998 | + font-weight: bold; | |
| 999 | + } | |
| 1000 | + | |
| 1001 | + .taskTextOutsideLeft.clickable { | |
| 1002 | + cursor: pointer; | |
| 1003 | + fill: ${t.taskTextClickableColor} !important; | |
| 1004 | + font-weight: bold; | |
| 1005 | + } | |
| 1006 | + | |
| 1007 | + .taskTextOutsideRight.clickable { | |
| 1008 | + cursor: pointer; | |
| 1009 | + fill: ${t.taskTextClickableColor} !important; | |
| 1010 | + font-weight: bold; | |
| 1011 | + } | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + /* Specific task settings for the sections*/ | |
| 1015 | + | |
| 1016 | + .taskText0, | |
| 1017 | + .taskText1, | |
| 1018 | + .taskText2, | |
| 1019 | + .taskText3 { | |
| 1020 | + fill: ${t.taskTextColor}; | |
| 1021 | + } | |
| 1022 | + | |
| 1023 | + .task0, | |
| 1024 | + .task1, | |
| 1025 | + .task2, | |
| 1026 | + .task3 { | |
| 1027 | + fill: ${t.taskBkgColor}; | |
| 1028 | + stroke: ${t.taskBorderColor}; | |
| 1029 | + } | |
| 1030 | + | |
| 1031 | + .taskTextOutside0, | |
| 1032 | + .taskTextOutside2 | |
| 1033 | + { | |
| 1034 | + fill: ${t.taskTextOutsideColor}; | |
| 1035 | + } | |
| 1036 | + | |
| 1037 | + .taskTextOutside1, | |
| 1038 | + .taskTextOutside3 { | |
| 1039 | + fill: ${t.taskTextOutsideColor}; | |
| 1040 | + } | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + /* Active task */ | |
| 1044 | + | |
| 1045 | + .active0, | |
| 1046 | + .active1, | |
| 1047 | + .active2, | |
| 1048 | + .active3 { | |
| 1049 | + fill: ${t.activeTaskBkgColor}; | |
| 1050 | + stroke: ${t.activeTaskBorderColor}; | |
| 1051 | + } | |
| 1052 | + | |
| 1053 | + .activeText0, | |
| 1054 | + .activeText1, | |
| 1055 | + .activeText2, | |
| 1056 | + .activeText3 { | |
| 1057 | + fill: ${t.taskTextDarkColor} !important; | |
| 1058 | + } | |
| 1059 | + | |
| 1060 | + | |
| 1061 | + /* Completed task */ | |
| 1062 | + | |
| 1063 | + .done0, | |
| 1064 | + .done1, | |
| 1065 | + .done2, | |
| 1066 | + .done3 { | |
| 1067 | + stroke: ${t.doneTaskBorderColor}; | |
| 1068 | + fill: ${t.doneTaskBkgColor}; | |
| 1069 | + stroke-width: 2; | |
| 1070 | + } | |
| 1071 | + | |
| 1072 | + .doneText0, | |
| 1073 | + .doneText1, | |
| 1074 | + .doneText2, | |
| 1075 | + .doneText3 { | |
| 1076 | + fill: ${t.taskTextDarkColor} !important; | |
| 1077 | + } | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + /* Tasks on the critical line */ | |
| 1081 | + | |
| 1082 | + .crit0, | |
| 1083 | + .crit1, | |
| 1084 | + .crit2, | |
| 1085 | + .crit3 { | |
| 1086 | + stroke: ${t.critBorderColor}; | |
| 1087 | + fill: ${t.critBkgColor}; | |
| 1088 | + stroke-width: 2; | |
| 1089 | + } | |
| 1090 | + | |
| 1091 | + .activeCrit0, | |
| 1092 | + .activeCrit1, | |
| 1093 | + .activeCrit2, | |
| 1094 | + .activeCrit3 { | |
| 1095 | + stroke: ${t.critBorderColor}; | |
| 1096 | + fill: ${t.activeTaskBkgColor}; | |
| 1097 | + stroke-width: 2; | |
| 1098 | + } | |
| 1099 | + | |
| 1100 | + .doneCrit0, | |
| 1101 | + .doneCrit1, | |
| 1102 | + .doneCrit2, | |
| 1103 | + .doneCrit3 { | |
| 1104 | + stroke: ${t.critBorderColor}; | |
| 1105 | + fill: ${t.doneTaskBkgColor}; | |
| 1106 | + stroke-width: 2; | |
| 1107 | + cursor: pointer; | |
| 1108 | + shape-rendering: crispEdges; | |
| 1109 | + } | |
| 1110 | + | |
| 1111 | + .milestone { | |
| 1112 | + transform: rotate(45deg) scale(0.8,0.8); | |
| 1113 | + } | |
| 1114 | + | |
| 1115 | + .milestoneText { | |
| 1116 | + font-style: italic; | |
| 1117 | + } | |
| 1118 | + .doneCritText0, | |
| 1119 | + .doneCritText1, | |
| 1120 | + .doneCritText2, | |
| 1121 | + .doneCritText3 { | |
| 1122 | + fill: ${t.taskTextDarkColor} !important; | |
| 1123 | + } | |
| 1124 | + | |
| 1125 | + .activeCritText0, | |
| 1126 | + .activeCritText1, | |
| 1127 | + .activeCritText2, | |
| 1128 | + .activeCritText3 { | |
| 1129 | + fill: ${t.taskTextDarkColor} !important; | |
| 1130 | + } | |
| 1131 | + | |
| 1132 | + .titleText { | |
| 1133 | + text-anchor: middle; | |
| 1134 | + font-size: 18px; | |
| 1135 | + fill: ${t.titleColor||t.textColor}; | |
| 1136 | + font-family: ${t.fontFamily}; | |
| 1137 | + } | |
| 1138 | +`,"getStyles"),Bue=Vze});var $ue={};hr($ue,{diagram:()=>Uze});var Uze,zue=N(()=>{"use strict";due();Mue();Pue();Fue();Uze={parser:fue,db:Rue,renderer:Oue,styles:Bue}});var Uue,Hue=N(()=>{"use strict";kp();vt();Uue={parse:o(async t=>{let e=await uo("info",t);Y.debug(e)},"parse")}});var vb,oO=N(()=>{vb={name:"mermaid",version:"11.6.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",type:"module",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",exports:{".":{types:"./dist/mermaid.d.ts",import:"./dist/mermaid.core.mjs",default:"./dist/mermaid.core.mjs"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph","mindmap","packet diagram","c4 diagram","er diagram","pie chart","pie diagram","quadrant chart","requirement diagram","graph"],scripts:{clean:"rimraf dist",dev:"pnpm -w dev","docs:code":"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup","docs:build":"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts","docs:verify":"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify","docs:pre:vitepress":"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts","docs:build:vitepress":"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing","docs:dev":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:dev:docker":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:serve":"pnpm docs:build:vitepress && vitepress serve src/vitepress","docs:spellcheck":'cspell "src/docs/**/*.md"',"docs:release-version":"tsx scripts/update-release-version.mts","docs:verify-version":"tsx scripts/update-release-version.mts --verify","types:build-config":"tsx scripts/create-types-from-json-schema.mts","types:verify-config":"tsx scripts/create-types-from-json-schema.mts --verify",checkCircle:"npx madge --circular ./src",prepublishOnly:"pnpm docs:verify-version"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^7.0.4","@iconify/utils":"^2.1.33","@mermaid-js/parser":"workspace:^","@types/d3":"^7.4.3",cytoscape:"^3.29.3","cytoscape-cose-bilkent":"^4.1.0","cytoscape-fcose":"^2.2.0",d3:"^7.9.0","d3-sankey":"^0.12.3","dagre-d3-es":"7.0.11",dayjs:"^1.11.13",dompurify:"^3.2.4",katex:"^0.16.9",khroma:"^2.1.0","lodash-es":"^4.17.21",marked:"^15.0.7",roughjs:"^4.6.6",stylis:"^4.3.6","ts-dedent":"^2.2.0",uuid:"^11.1.0"},devDependencies:{"@adobe/jsonschema2md":"^8.0.2","@iconify/types":"^2.0.0","@types/cytoscape":"^3.21.9","@types/cytoscape-fcose":"^2.2.4","@types/d3-sankey":"^0.12.4","@types/d3-scale":"^4.0.9","@types/d3-scale-chromatic":"^3.1.0","@types/d3-selection":"^3.0.11","@types/d3-shape":"^3.1.7","@types/jsdom":"^21.1.7","@types/katex":"^0.16.7","@types/lodash-es":"^4.17.12","@types/micromatch":"^4.0.9","@types/stylis":"^4.2.7","@types/uuid":"^10.0.0",ajv:"^8.17.1",chokidar:"^4.0.3",concurrently:"^9.1.2","csstree-validator":"^4.0.1",globby:"^14.0.2",jison:"^0.4.18","js-base64":"^3.7.7",jsdom:"^26.0.0","json-schema-to-typescript":"^15.0.4",micromatch:"^4.0.8","path-browserify":"^1.0.1",prettier:"^3.5.2",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1",rimraf:"^6.0.1","start-server-and-test":"^2.0.10","type-fest":"^4.35.0",typedoc:"^0.27.8","typedoc-plugin-markdown":"^4.4.2",typescript:"~5.7.3","unist-util-flatmap":"^1.0.0","unist-util-visit":"^5.0.0",vitepress:"^1.0.2","vitepress-plugin-search":"1.0.4-alpha.22"},files:["dist/","README.md"],publishConfig:{access:"public"}}});var Xze,jze,Wue,que=N(()=>{"use strict";oO();Xze={version:vb.version},jze=o(()=>Xze.version,"getVersion"),Wue={getVersion:jze}});var sa,Vc=N(()=>{"use strict";dr();zt();sa=o(t=>{let{securityLevel:e}=me(),r=Ge("body");if(e==="sandbox"){let a=Ge(`#i${t}`).node()?.contentDocument??document;r=Ge(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var Kze,Yue,Xue=N(()=>{"use strict";vt();Vc();Ei();Kze=o((t,e,r)=>{Y.debug(`rendering info diagram | |
| 1139 | +`+t);let n=sa(e);vn(n,100,400,!0),n.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),Yue={draw:Kze}});var jue={};hr(jue,{diagram:()=>Qze});var Qze,Kue=N(()=>{"use strict";Hue();que();Xue();Qze={parser:Uue,db:Wue,renderer:Yue}});var Jue,lO,m6,cO,eGe,tGe,rGe,nGe,iGe,aGe,sGe,g6,uO=N(()=>{"use strict";vt();mi();Ya();Jue=or.pie,lO={sections:new Map,showData:!1,config:Jue},m6=lO.sections,cO=lO.showData,eGe=structuredClone(Jue),tGe=o(()=>structuredClone(eGe),"getConfig"),rGe=o(()=>{m6=new Map,cO=lO.showData,Ar()},"clear"),nGe=o(({label:t,value:e})=>{m6.has(t)||(m6.set(t,e),Y.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),iGe=o(()=>m6,"getSections"),aGe=o(t=>{cO=t},"setShowData"),sGe=o(()=>cO,"getShowData"),g6={getConfig:tGe,clear:rGe,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addSection:nGe,getSections:iGe,setShowData:aGe,getShowData:sGe}});var oGe,ehe,the=N(()=>{"use strict";kp();vt();T1();uO();oGe=o((t,e)=>{$c(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),ehe={parse:o(async t=>{let e=await uo("pie",t);Y.debug(e),oGe(e,g6)},"parse")}});var lGe,rhe,nhe=N(()=>{"use strict";lGe=o(t=>` | |
| 1140 | + .pieCircle{ | |
| 1141 | + stroke: ${t.pieStrokeColor}; | |
| 1142 | + stroke-width : ${t.pieStrokeWidth}; | |
| 1143 | + opacity : ${t.pieOpacity}; | |
| 1144 | + } | |
| 1145 | + .pieOuterCircle{ | |
| 1146 | + stroke: ${t.pieOuterStrokeColor}; | |
| 1147 | + stroke-width: ${t.pieOuterStrokeWidth}; | |
| 1148 | + fill: none; | |
| 1149 | + } | |
| 1150 | + .pieTitleText { | |
| 1151 | + text-anchor: middle; | |
| 1152 | + font-size: ${t.pieTitleTextSize}; | |
| 1153 | + fill: ${t.pieTitleTextColor}; | |
| 1154 | + font-family: ${t.fontFamily}; | |
| 1155 | + } | |
| 1156 | + .slice { | |
| 1157 | + font-family: ${t.fontFamily}; | |
| 1158 | + fill: ${t.pieSectionTextColor}; | |
| 1159 | + font-size:${t.pieSectionTextSize}; | |
| 1160 | + // fill: white; | |
| 1161 | + } | |
| 1162 | + .legend text { | |
| 1163 | + fill: ${t.pieLegendTextColor}; | |
| 1164 | + font-family: ${t.fontFamily}; | |
| 1165 | + font-size: ${t.pieLegendTextSize}; | |
| 1166 | + } | |
| 1167 | +`,"getStyles"),rhe=lGe});var cGe,uGe,ihe,ahe=N(()=>{"use strict";dr();zt();vt();Vc();Ei();ir();cGe=o(t=>{let e=[...t.entries()].map(n=>({label:n[0],value:n[1]})).sort((n,i)=>i.value-n.value);return I5().value(n=>n.value)(e)},"createPieArcs"),uGe=o((t,e,r,n)=>{Y.debug(`rendering pie chart | |
| 1168 | +`+t);let i=n.db,a=me(),s=Fi(i.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=sa(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=Bo(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=bl().innerRadius(0).outerRadius(x),w=bl().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let C=i.getSections(),T=cGe(C),E=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],A=gu(E);m.selectAll("mySlices").data(T).enter().append("path").attr("d",b).attr("fill",k=>A(k.data.label)).attr("class","pieCircle");let S=0;C.forEach(k=>{S+=k}),m.selectAll("mySlices").data(T).enter().append("text").text(k=>(k.data.value/S*100).toFixed(0)+"%").attr("transform",k=>"translate("+w.centroid(k)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(i.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText");let _=m.selectAll(".legend").data(A.domain()).enter().append("g").attr("class","legend").attr("transform",(k,L)=>{let R=u+h,O=R*A.domain().length/2,M=12*u,B=L*R-O;return"translate("+M+","+B+")"});_.append("rect").attr("width",u).attr("height",u).style("fill",A).style("stroke",A),_.data(T).append("text").attr("x",u+h).attr("y",u-h).text(k=>{let{label:L,value:R}=k.data;return i.getShowData()?`${L} [${R}]`:L});let I=Math.max(..._.selectAll("text").nodes().map(k=>k?.getBoundingClientRect().width??0)),D=d+l+u+h+I;p.attr("viewBox",`0 0 ${D} ${f}`),vn(p,f,D,s.useMaxWidth)},"draw"),ihe={draw:uGe}});var she={};hr(she,{diagram:()=>hGe});var hGe,ohe=N(()=>{"use strict";the();uO();nhe();ahe();hGe={parser:ehe,db:g6,renderer:ihe,styles:rhe}});var hO,uhe,hhe=N(()=>{"use strict";hO=function(){var t=o(function(xe,q,pe,ve){for(pe=pe||{},ve=xe.length;ve--;pe[xe[ve]]=q);return pe},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],w=[1,19],C=[1,20],T=[1,21],E=[1,22],A=[1,24],S=[1,25],_=[1,26],I=[1,27],D=[1,28],k=[1,29],L=[1,32],R=[1,33],O=[1,34],M=[1,39],B=[1,40],F=[1,42],P=[1,44],z=[1,62],$=[1,61],H=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],Q=[1,65],j=[1,66],ie=[1,67],ne=[1,68],le=[1,69],he=[1,70],K=[1,71],X=[1,72],te=[1,73],J=[1,74],se=[1,75],ue=[1,76],Z=[4,5,6,7,8,9,10,11,12,13,14,15,18],Se=[1,90],ce=[1,91],ae=[1,92],Oe=[1,99],ge=[1,93],ze=[1,96],He=[1,94],$e=[1,95],Re=[1,97],Ie=[1,98],be=[1,102],W=[10,55,56,57],de=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],re={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(q,pe,ve,Pe,_e,we,Ve){var De=we.length-1;switch(_e){case 23:this.$=we[De];break;case 24:this.$=we[De-1]+""+we[De];break;case 26:this.$=we[De-1]+we[De];break;case 27:this.$=[we[De].trim()];break;case 28:we[De-2].push(we[De].trim()),this.$=we[De-2];break;case 29:this.$=we[De-4],Pe.addClass(we[De-2],we[De]);break;case 37:this.$=[];break;case 42:this.$=we[De].trim(),Pe.setDiagramTitle(this.$);break;case 43:this.$=we[De].trim(),Pe.setAccTitle(this.$);break;case 44:case 45:this.$=we[De].trim(),Pe.setAccDescription(this.$);break;case 46:Pe.addSection(we[De].substr(8)),this.$=we[De].substr(8);break;case 47:Pe.addPoint(we[De-3],"",we[De-1],we[De],[]);break;case 48:Pe.addPoint(we[De-4],we[De-3],we[De-1],we[De],[]);break;case 49:Pe.addPoint(we[De-4],"",we[De-2],we[De-1],we[De]);break;case 50:Pe.addPoint(we[De-5],we[De-4],we[De-2],we[De-1],we[De]);break;case 51:Pe.setXAxisLeftText(we[De-2]),Pe.setXAxisRightText(we[De]);break;case 52:we[De-1].text+=" \u27F6 ",Pe.setXAxisLeftText(we[De-1]);break;case 53:Pe.setXAxisLeftText(we[De]);break;case 54:Pe.setYAxisBottomText(we[De-2]),Pe.setYAxisTopText(we[De]);break;case 55:we[De-1].text+=" \u27F6 ",Pe.setYAxisBottomText(we[De-1]);break;case 56:Pe.setYAxisBottomText(we[De]);break;case 57:Pe.setQuadrant1Text(we[De]);break;case 58:Pe.setQuadrant2Text(we[De]);break;case 59:Pe.setQuadrant3Text(we[De]);break;case 60:Pe.setQuadrant4Text(we[De]);break;case 64:this.$={text:we[De],type:"text"};break;case 65:this.$={text:we[De-1].text+""+we[De],type:we[De-1].type};break;case 66:this.$={text:we[De],type:"text"};break;case 67:this.$={text:we[De],type:"markdown"};break;case 68:this.$=we[De];break;case 69:this.$=we[De-1]+""+we[De];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:n,56:i,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:n,56:i,57:a},{18:e,26:9,27:2,28:r,55:n,56:i,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:C,41:T,42:E,48:A,50:S,51:_,52:I,53:D,54:k,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(s,[2,34]),{27:45,55:n,56:i,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:C,41:T,42:E,48:A,50:S,51:_,52:I,53:D,54:k,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,44:[1,57],47:[1,58],58:60,59:59,63:O,64:M,65:B,66:F,67:P},t(H,[2,64]),t(H,[2,66]),t(H,[2,67]),t(H,[2,70]),t(H,[2,71]),t(H,[2,72]),t(H,[2,73]),t(H,[2,74]),t(H,[2,75]),t(H,[2,76]),t(H,[2,77]),t(H,[2,78]),t(H,[2,79]),t(H,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:Q,5:j,6:ie,7:ne,8:le,9:he,10:K,11:X,12:te,13:J,14:se,15:ue,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,77],63:O,64:M,65:B,66:F,67:P}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,78],63:O,64:M,65:B,66:F,67:P}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),{45:[1,79]},{44:[1,80]},t(H,[2,65]),t(H,[2,81]),t(H,[2,82]),t(H,[2,83]),{3:82,4:Q,5:j,6:ie,7:ne,8:le,9:he,10:K,11:X,12:te,13:J,14:se,15:ue,18:[1,81]},t(Z,[2,23]),t(Z,[2,1]),t(Z,[2,2]),t(Z,[2,3]),t(Z,[2,4]),t(Z,[2,5]),t(Z,[2,6]),t(Z,[2,7]),t(Z,[2,8]),t(Z,[2,9]),t(Z,[2,10]),t(Z,[2,11]),t(Z,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),{46:[1,85]},{45:[1,86]},{4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,16:89,17:He,18:$e,19:Re,20:Ie,22:88,23:87},t(Z,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,47],{22:88,16:89,23:100,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),{46:[1,101]},t(u,[2,29],{10:be}),t(W,[2,27],{16:103,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),t(de,[2,25]),t(de,[2,13]),t(de,[2,14]),t(de,[2,15]),t(de,[2,16]),t(de,[2,17]),t(de,[2,18]),t(de,[2,19]),t(de,[2,20]),t(de,[2,21]),t(de,[2,22]),t(u,[2,49],{10:be}),t(u,[2,48],{22:88,16:89,23:104,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),{4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,16:89,17:He,18:$e,19:Re,20:Ie,22:105},t(de,[2,26]),t(u,[2,50],{10:be}),t(W,[2,28],{16:103,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(q,pe){if(pe.recoverable)this.trace(q);else{var ve=new Error(q);throw ve.hash=pe,ve}},"parseError"),parse:o(function(q){var pe=this,ve=[0],Pe=[],_e=[null],we=[],Ve=this.table,De="",qe=0,at=0,Rt=0,st=2,Ue=1,ct=we.slice.call(arguments,1),We=Object.create(this.lexer),ot={yy:{}};for(var Yt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Yt)&&(ot.yy[Yt]=this.yy[Yt]);We.setInput(q,ot.yy),ot.yy.lexer=We,ot.yy.parser=this,typeof We.yylloc>"u"&&(We.yylloc={});var bt=We.yylloc;we.push(bt);var Mt=We.options&&We.options.ranges;typeof ot.yy.parseError=="function"?this.parseError=ot.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xt(Ce){ve.length=ve.length-2*Ce,_e.length=_e.length-Ce,we.length=we.length-Ce}o(xt,"popStack");function ut(){var Ce;return Ce=Pe.pop()||We.lex()||Ue,typeof Ce!="number"&&(Ce instanceof Array&&(Pe=Ce,Ce=Pe.pop()),Ce=pe.symbols_[Ce]||Ce),Ce}o(ut,"lex");for(var Et,ft,yt,nt,dn,Tt,On={},tn,_r,Dr,Pn;;){if(yt=ve[ve.length-1],this.defaultActions[yt]?nt=this.defaultActions[yt]:((Et===null||typeof Et>"u")&&(Et=ut()),nt=Ve[yt]&&Ve[yt][Et]),typeof nt>"u"||!nt.length||!nt[0]){var At="";Pn=[];for(tn in Ve[yt])this.terminals_[tn]&&tn>st&&Pn.push("'"+this.terminals_[tn]+"'");We.showPosition?At="Parse error on line "+(qe+1)+`: | |
| 1169 | +`+We.showPosition()+` | |
| 1170 | +Expecting `+Pn.join(", ")+", got '"+(this.terminals_[Et]||Et)+"'":At="Parse error on line "+(qe+1)+": Unexpected "+(Et==Ue?"end of input":"'"+(this.terminals_[Et]||Et)+"'"),this.parseError(At,{text:We.match,token:this.terminals_[Et]||Et,line:We.yylineno,loc:bt,expected:Pn})}if(nt[0]instanceof Array&&nt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+yt+", token: "+Et);switch(nt[0]){case 1:ve.push(Et),_e.push(We.yytext),we.push(We.yylloc),ve.push(nt[1]),Et=null,ft?(Et=ft,ft=null):(at=We.yyleng,De=We.yytext,qe=We.yylineno,bt=We.yylloc,Rt>0&&Rt--);break;case 2:if(_r=this.productions_[nt[1]][1],On.$=_e[_e.length-_r],On._$={first_line:we[we.length-(_r||1)].first_line,last_line:we[we.length-1].last_line,first_column:we[we.length-(_r||1)].first_column,last_column:we[we.length-1].last_column},Mt&&(On._$.range=[we[we.length-(_r||1)].range[0],we[we.length-1].range[1]]),Tt=this.performAction.apply(On,[De,at,qe,ot.yy,nt[1],_e,we].concat(ct)),typeof Tt<"u")return Tt;_r&&(ve=ve.slice(0,-1*_r*2),_e=_e.slice(0,-1*_r),we=we.slice(0,-1*_r)),ve.push(this.productions_[nt[1]][0]),_e.push(On.$),we.push(On._$),Dr=Ve[ve[ve.length-2]][ve[ve.length-1]],ve.push(Dr);break;case 3:return!0}}return!0},"parse")},oe=function(){var xe={EOF:1,parseError:o(function(pe,ve){if(this.yy.parser)this.yy.parser.parseError(pe,ve);else throw new Error(pe)},"parseError"),setInput:o(function(q,pe){return this.yy=pe||this.yy||{},this._input=q,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var q=this._input[0];this.yytext+=q,this.yyleng++,this.offset++,this.match+=q,this.matched+=q;var pe=q.match(/(?:\r\n?|\n).*/g);return pe?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),q},"input"),unput:o(function(q){var pe=q.length,ve=q.split(/(?:\r\n?|\n)/g);this._input=q+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-pe),this.offset-=pe;var Pe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ve.length-1&&(this.yylineno-=ve.length-1);var _e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ve?(ve.length===Pe.length?this.yylloc.first_column:0)+Pe[Pe.length-ve.length].length-ve[0].length:this.yylloc.first_column-pe},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-pe]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1171 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(q){this.unput(this.match.slice(q))},"less"),pastInput:o(function(){var q=this.matched.substr(0,this.matched.length-this.match.length);return(q.length>20?"...":"")+q.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var q=this.match;return q.length<20&&(q+=this._input.substr(0,20-q.length)),(q.substr(0,20)+(q.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var q=this.pastInput(),pe=new Array(q.length+1).join("-");return q+this.upcomingInput()+` | |
| 1172 | +`+pe+"^"},"showPosition"),test_match:o(function(q,pe){var ve,Pe,_e;if(this.options.backtrack_lexer&&(_e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_e.yylloc.range=this.yylloc.range.slice(0))),Pe=q[0].match(/(?:\r\n?|\n).*/g),Pe&&(this.yylineno+=Pe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Pe?Pe[Pe.length-1].length-Pe[Pe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+q[0].length},this.yytext+=q[0],this.match+=q[0],this.matches=q,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(q[0].length),this.matched+=q[0],ve=this.performAction.call(this,this.yy,this,pe,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ve)return ve;if(this._backtrack){for(var we in _e)this[we]=_e[we];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var q,pe,ve,Pe;this._more||(this.yytext="",this.match="");for(var _e=this._currentRules(),we=0;we<_e.length;we++)if(ve=this._input.match(this.rules[_e[we]]),ve&&(!pe||ve[0].length>pe[0].length)){if(pe=ve,Pe=we,this.options.backtrack_lexer){if(q=this.test_match(ve,_e[we]),q!==!1)return q;if(this._backtrack){pe=!1;continue}else return!1}else if(!this.options.flex)break}return pe?(q=this.test_match(pe,_e[Pe]),q!==!1?q:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1173 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var pe=this.next();return pe||this.lex()},"lex"),begin:o(function(pe){this.conditionStack.push(pe)},"begin"),popState:o(function(){var pe=this.conditionStack.length-1;return pe>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(pe){return pe=this.conditionStack.length-1-Math.abs(pe||0),pe>=0?this.conditionStack[pe]:"INITIAL"},"topState"),pushState:o(function(pe){this.begin(pe)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(pe,ve,Pe,_e){var we=_e;switch(Pe){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return xe}();re.lexer=oe;function V(){this.yy={}}return o(V,"Parser"),V.prototype=re,re.Parser=V,new V}();hO.parser=hO;uhe=hO});var ms,y6,fhe=N(()=>{"use strict";dr();Ya();vt();_y();ms=oh(),y6=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:or.quadrantChart?.chartWidth||500,chartWidth:or.quadrantChart?.chartHeight||500,titlePadding:or.quadrantChart?.titlePadding||10,titleFontSize:or.quadrantChart?.titleFontSize||20,quadrantPadding:or.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:or.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:or.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:or.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:or.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:or.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:or.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:or.quadrantChart?.pointTextPadding||5,pointLabelFontSize:or.quadrantChart?.pointLabelFontSize||12,pointRadius:or.quadrantChart?.pointRadius||5,xAxisPosition:or.quadrantChart?.xAxisPosition||"top",yAxisPosition:or.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:or.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:or.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:ms.quadrant1Fill,quadrant2Fill:ms.quadrant2Fill,quadrant3Fill:ms.quadrant3Fill,quadrant4Fill:ms.quadrant4Fill,quadrant1TextFill:ms.quadrant1TextFill,quadrant2TextFill:ms.quadrant2TextFill,quadrant3TextFill:ms.quadrant3TextFill,quadrant4TextFill:ms.quadrant4TextFill,quadrantPointFill:ms.quadrantPointFill,quadrantPointTextFill:ms.quadrantPointTextFill,quadrantXAxisTextFill:ms.quadrantXAxisTextFill,quadrantYAxisTextFill:ms.quadrantYAxisTextFill,quadrantTitleFill:ms.quadrantTitleFill,quadrantInternalBorderStrokeFill:ms.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:ms.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,Y.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){Y.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){Y.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,n,i){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&n?l:0,right:this.config.yAxisPosition==="right"&&n?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:i?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,n,i){let{quadrantSpace:a,titleSpace:s}=i,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&n&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&n&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:n,quadrantLeft:i,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s,width:a,height:n,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s,width:a,height:n,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:n,quadrantLeft:i,quadrantTop:a,quadrantWidth:s}=r,l=gl().domain([0,1]).range([i,s+i]),u=gl().domain([0,1]).range([n+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:n}=e,{quadrantHalfHeight:i,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=n;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+i,x2:s+h-r,y2:u+i}]}getTitle(e){if(e)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),n=this.config.showTitle&&!!this.data.titleText,i=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(i,e,r,n);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(i,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(n)}}}});function fO(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function dhe(t){return!/^\d+$/.test(t)}function phe(t){return!/^\d+px$/.test(t)}var Ap,mhe=N(()=>{"use strict";Ap=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,n){super(`value for ${e} ${r} is invalid, please use a valid ${n}`),this.name="InvalidStyleError"}};o(fO,"validateHexCode");o(dhe,"validateNumber");o(phe,"validateSizeInPixels")});function Xu(t){return Tr(t.trim(),pGe)}function mGe(t){ba.setData({quadrant1Text:Xu(t.text)})}function gGe(t){ba.setData({quadrant2Text:Xu(t.text)})}function yGe(t){ba.setData({quadrant3Text:Xu(t.text)})}function vGe(t){ba.setData({quadrant4Text:Xu(t.text)})}function xGe(t){ba.setData({xAxisLeftText:Xu(t.text)})}function bGe(t){ba.setData({xAxisRightText:Xu(t.text)})}function wGe(t){ba.setData({yAxisTopText:Xu(t.text)})}function TGe(t){ba.setData({yAxisBottomText:Xu(t.text)})}function dO(t){let e={};for(let r of t){let[n,i]=r.trim().split(/\s*:\s*/);if(n==="radius"){if(dhe(i))throw new Ap(n,i,"number");e.radius=parseInt(i)}else if(n==="color"){if(fO(i))throw new Ap(n,i,"hex code");e.color=i}else if(n==="stroke-color"){if(fO(i))throw new Ap(n,i,"hex code");e.strokeColor=i}else if(n==="stroke-width"){if(phe(i))throw new Ap(n,i,"number of pixels (eg. 10px)");e.strokeWidth=i}else throw new Error(`style named ${n} is not supported.`)}return e}function kGe(t,e,r,n,i){let a=dO(i);ba.addPoints([{x:r,y:n,text:Xu(t.text),className:e,...a}])}function EGe(t,e){ba.addClass(t,dO(e))}function SGe(t){ba.setConfig({chartWidth:t})}function CGe(t){ba.setConfig({chartHeight:t})}function AGe(){let t=me(),{themeVariables:e,quadrantChart:r}=t;return r&&ba.setConfig(r),ba.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),ba.setData({titleText:Ir()}),ba.build()}var pGe,ba,_Ge,ghe,yhe=N(()=>{"use strict";zt();gr();mi();fhe();mhe();pGe=me();o(Xu,"textSanitizer");ba=new y6;o(mGe,"setQuadrant1Text");o(gGe,"setQuadrant2Text");o(yGe,"setQuadrant3Text");o(vGe,"setQuadrant4Text");o(xGe,"setXAxisLeftText");o(bGe,"setXAxisRightText");o(wGe,"setYAxisTopText");o(TGe,"setYAxisBottomText");o(dO,"parseStyles");o(kGe,"addPoint");o(EGe,"addClass");o(SGe,"setWidth");o(CGe,"setHeight");o(AGe,"getQuadrantData");_Ge=o(function(){ba.clear(),Ar()},"clear"),ghe={setWidth:SGe,setHeight:CGe,setQuadrant1Text:mGe,setQuadrant2Text:gGe,setQuadrant3Text:yGe,setQuadrant4Text:vGe,setXAxisLeftText:xGe,setXAxisRightText:bGe,setYAxisTopText:wGe,setYAxisBottomText:TGe,parseStyles:dO,addPoint:kGe,addClass:EGe,getQuadrantData:AGe,clear:_Ge,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var DGe,vhe,xhe=N(()=>{"use strict";dr();zt();vt();Ei();DGe=o((t,e,r,n)=>{function i(S){return S==="top"?"hanging":"middle"}o(i,"getDominantBaseLine");function a(S){return S==="left"?"start":"middle"}o(a,"getTextAnchor");function s(S){return`translate(${S.x}, ${S.y}) rotate(${S.rotation||0})`}o(s,"getTransformation");let l=me();Y.debug(`Rendering quadrant chart | |
| 1174 | +`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=Ge("#i"+e));let d=(u==="sandbox"?Ge(h.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;vn(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),n.db.setHeight(g),n.db.setWidth(m);let y=n.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),w=p.append("g").attr("class","labels"),C=p.append("g").attr("class","title");y.title&&C.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",i(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",S=>S.x1).attr("y1",S=>S.y1).attr("x2",S=>S.x2).attr("y2",S=>S.y2).style("stroke",S=>S.strokeFill).style("stroke-width",S=>S.strokeWidth);let T=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");T.append("rect").attr("x",S=>S.x).attr("y",S=>S.y).attr("width",S=>S.width).attr("height",S=>S.height).attr("fill",S=>S.fill),T.append("text").attr("x",0).attr("y",0).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text)).text(S=>S.text.text),w.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(S=>S.text).attr("fill",S=>S.fill).attr("font-size",S=>S.fontSize).attr("dominant-baseline",S=>i(S.horizontalPos)).attr("text-anchor",S=>a(S.verticalPos)).attr("transform",S=>s(S));let A=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");A.append("circle").attr("cx",S=>S.x).attr("cy",S=>S.y).attr("r",S=>S.radius).attr("fill",S=>S.fill).attr("stroke",S=>S.strokeColor).attr("stroke-width",S=>S.strokeWidth),A.append("text").attr("x",0).attr("y",0).text(S=>S.text.text).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text))},"draw"),vhe={draw:DGe}});var bhe={};hr(bhe,{diagram:()=>LGe});var LGe,whe=N(()=>{"use strict";hhe();yhe();xhe();LGe={parser:uhe,db:ghe,renderer:vhe,styles:o(()=>"","styles")}});var pO,Ehe,She=N(()=>{"use strict";pO=function(){var t=o(function(O,M,B,F){for(B=B||{},F=O.length;F--;B[O[F]]=M);return B},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],n=[1,3],i=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],C=[1,43],T=[1,42],E=[1,47],A=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],_=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],I=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],D=[1,64],k={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(M,B,F,P,z,$,H){var Q=$.length-1;switch(z){case 5:P.setOrientation($[Q]);break;case 9:P.setDiagramTitle($[Q].text.trim());break;case 12:P.setLineData({text:"",type:"text"},$[Q]);break;case 13:P.setLineData($[Q-1],$[Q]);break;case 14:P.setBarData({text:"",type:"text"},$[Q]);break;case 15:P.setBarData($[Q-1],$[Q]);break;case 16:this.$=$[Q].trim(),P.setAccTitle(this.$);break;case 17:case 18:this.$=$[Q].trim(),P.setAccDescription(this.$);break;case 19:this.$=$[Q-1];break;case 20:this.$=[Number($[Q-2]),...$[Q]];break;case 21:this.$=[Number($[Q])];break;case 22:P.setXAxisTitle($[Q]);break;case 23:P.setXAxisTitle($[Q-1]);break;case 24:P.setXAxisTitle({type:"text",text:""});break;case 25:P.setXAxisBand($[Q]);break;case 26:P.setXAxisRangeData(Number($[Q-2]),Number($[Q]));break;case 27:this.$=$[Q-1];break;case 28:this.$=[$[Q-2],...$[Q]];break;case 29:this.$=[$[Q]];break;case 30:P.setYAxisTitle($[Q]);break;case 31:P.setYAxisTitle($[Q-1]);break;case 32:P.setYAxisTitle({type:"text",text:""});break;case 33:P.setYAxisRangeData(Number($[Q-2]),Number($[Q]));break;case 37:this.$={text:$[Q],type:"text"};break;case 38:this.$={text:$[Q],type:"text"};break;case 39:this.$={text:$[Q],type:"markdown"};break;case 40:this.$=$[Q];break;case 41:this.$=$[Q-1]+""+$[Q];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:n,34:i,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:n,34:i,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:n,8:[1,11],34:i,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:n,34:i,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:i,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:39,13:38,24:C,27:T,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:45,15:44,27:E,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:49,17:48,24:A,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:52,17:51,24:A,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{20:[1,53]},{22:[1,54]},t(S,[2,18]),{1:[2,2]},t(S,[2,8]),t(S,[2,9]),t(_,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w}),t(_,[2,38]),t(_,[2,39]),t(I,[2,40]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),t(I,[2,47]),t(I,[2,48]),t(I,[2,49]),t(I,[2,50]),t(I,[2,51]),t(S,[2,10]),t(S,[2,22],{30:41,29:56,24:C,27:T}),t(S,[2,24]),t(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,11]),t(S,[2,30],{33:60,27:E}),t(S,[2,32]),{31:[1,61]},t(S,[2,12]),{17:62,24:A},{25:63,27:D},t(S,[2,14]),{17:65,24:A},t(S,[2,16]),t(S,[2,17]),t(I,[2,41]),t(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(S,[2,31]),{27:[1,69]},t(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(S,[2,15]),t(S,[2,26]),t(S,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,33]),t(S,[2,19]),{25:73,27:D},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(M,B){if(B.recoverable)this.trace(M);else{var F=new Error(M);throw F.hash=B,F}},"parseError"),parse:o(function(M){var B=this,F=[0],P=[],z=[null],$=[],H=this.table,Q="",j=0,ie=0,ne=0,le=2,he=1,K=$.slice.call(arguments,1),X=Object.create(this.lexer),te={yy:{}};for(var J in this.yy)Object.prototype.hasOwnProperty.call(this.yy,J)&&(te.yy[J]=this.yy[J]);X.setInput(M,te.yy),te.yy.lexer=X,te.yy.parser=this,typeof X.yylloc>"u"&&(X.yylloc={});var se=X.yylloc;$.push(se);var ue=X.options&&X.options.ranges;typeof te.yy.parseError=="function"?this.parseError=te.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(re){F.length=F.length-2*re,z.length=z.length-re,$.length=$.length-re}o(Z,"popStack");function Se(){var re;return re=P.pop()||X.lex()||he,typeof re!="number"&&(re instanceof Array&&(P=re,re=P.pop()),re=B.symbols_[re]||re),re}o(Se,"lex");for(var ce,ae,Oe,ge,ze,He,$e={},Re,Ie,be,W;;){if(Oe=F[F.length-1],this.defaultActions[Oe]?ge=this.defaultActions[Oe]:((ce===null||typeof ce>"u")&&(ce=Se()),ge=H[Oe]&&H[Oe][ce]),typeof ge>"u"||!ge.length||!ge[0]){var de="";W=[];for(Re in H[Oe])this.terminals_[Re]&&Re>le&&W.push("'"+this.terminals_[Re]+"'");X.showPosition?de="Parse error on line "+(j+1)+`: | |
| 1175 | +`+X.showPosition()+` | |
| 1176 | +Expecting `+W.join(", ")+", got '"+(this.terminals_[ce]||ce)+"'":de="Parse error on line "+(j+1)+": Unexpected "+(ce==he?"end of input":"'"+(this.terminals_[ce]||ce)+"'"),this.parseError(de,{text:X.match,token:this.terminals_[ce]||ce,line:X.yylineno,loc:se,expected:W})}if(ge[0]instanceof Array&&ge.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Oe+", token: "+ce);switch(ge[0]){case 1:F.push(ce),z.push(X.yytext),$.push(X.yylloc),F.push(ge[1]),ce=null,ae?(ce=ae,ae=null):(ie=X.yyleng,Q=X.yytext,j=X.yylineno,se=X.yylloc,ne>0&&ne--);break;case 2:if(Ie=this.productions_[ge[1]][1],$e.$=z[z.length-Ie],$e._$={first_line:$[$.length-(Ie||1)].first_line,last_line:$[$.length-1].last_line,first_column:$[$.length-(Ie||1)].first_column,last_column:$[$.length-1].last_column},ue&&($e._$.range=[$[$.length-(Ie||1)].range[0],$[$.length-1].range[1]]),He=this.performAction.apply($e,[Q,ie,j,te.yy,ge[1],z,$].concat(K)),typeof He<"u")return He;Ie&&(F=F.slice(0,-1*Ie*2),z=z.slice(0,-1*Ie),$=$.slice(0,-1*Ie)),F.push(this.productions_[ge[1]][0]),z.push($e.$),$.push($e._$),be=H[F[F.length-2]][F[F.length-1]],F.push(be);break;case 3:return!0}}return!0},"parse")},L=function(){var O={EOF:1,parseError:o(function(B,F){if(this.yy.parser)this.yy.parser.parseError(B,F);else throw new Error(B)},"parseError"),setInput:o(function(M,B){return this.yy=B||this.yy||{},this._input=M,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var M=this._input[0];this.yytext+=M,this.yyleng++,this.offset++,this.match+=M,this.matched+=M;var B=M.match(/(?:\r\n?|\n).*/g);return B?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),M},"input"),unput:o(function(M){var B=M.length,F=M.split(/(?:\r\n?|\n)/g);this._input=M+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-B),this.offset-=B;var P=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),F.length-1&&(this.yylineno-=F.length-1);var z=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:F?(F.length===P.length?this.yylloc.first_column:0)+P[P.length-F.length].length-F[0].length:this.yylloc.first_column-B},this.options.ranges&&(this.yylloc.range=[z[0],z[0]+this.yyleng-B]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1177 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(M){this.unput(this.match.slice(M))},"less"),pastInput:o(function(){var M=this.matched.substr(0,this.matched.length-this.match.length);return(M.length>20?"...":"")+M.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var M=this.match;return M.length<20&&(M+=this._input.substr(0,20-M.length)),(M.substr(0,20)+(M.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var M=this.pastInput(),B=new Array(M.length+1).join("-");return M+this.upcomingInput()+` | |
| 1178 | +`+B+"^"},"showPosition"),test_match:o(function(M,B){var F,P,z;if(this.options.backtrack_lexer&&(z={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(z.yylloc.range=this.yylloc.range.slice(0))),P=M[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+M[0].length},this.yytext+=M[0],this.match+=M[0],this.matches=M,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(M[0].length),this.matched+=M[0],F=this.performAction.call(this,this.yy,this,B,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),F)return F;if(this._backtrack){for(var $ in z)this[$]=z[$];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var M,B,F,P;this._more||(this.yytext="",this.match="");for(var z=this._currentRules(),$=0;$<z.length;$++)if(F=this._input.match(this.rules[z[$]]),F&&(!B||F[0].length>B[0].length)){if(B=F,P=$,this.options.backtrack_lexer){if(M=this.test_match(F,z[$]),M!==!1)return M;if(this._backtrack){B=!1;continue}else return!1}else if(!this.options.flex)break}return B?(M=this.test_match(B,z[P]),M!==!1?M:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1179 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var B=this.next();return B||this.lex()},"lex"),begin:o(function(B){this.conditionStack.push(B)},"begin"),popState:o(function(){var B=this.conditionStack.length-1;return B>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(B){return B=this.conditionStack.length-1-Math.abs(B||0),B>=0?this.conditionStack[B]:"INITIAL"},"topState"),pushState:o(function(B){this.begin(B)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(B,F,P,z){var $=z;switch(P){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";break;case 17:return this.pushState("axis_data"),"Y_AXIS";break;case 18:return this.pushState("axis_band_data"),24;break;case 19:return 31;case 20:return this.pushState("data"),16;break;case 21:return this.pushState("data"),18;break;case 22:return this.pushState("data_inner"),24;break;case 23:return 27;case 24:return this.popState(),26;break;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n<md_string>\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n<md_string>\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return O}();k.lexer=L;function R(){this.yy={}}return o(R,"Parser"),R.prototype=k,k.Parser=R,new R}();pO.parser=pO;Ehe=pO});function mO(t){return t.type==="bar"}function v6(t){return t.type==="band"}function S1(t){return t.type==="linear"}var x6=N(()=>{"use strict";o(mO,"isBarPlot");o(v6,"isBandAxisData");o(S1,"isLinearAxisData")});var C1,gO=N(()=>{"use strict";to();C1=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let n={width:0,height:0},i=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=sK(i,1,a),l=s?s.width:a.length*r,u=s?s.height:r;n.width=Math.max(n.width,l),n.height=Math.max(n.height,u)}return i.remove(),n}}});var A1,yO=N(()=>{"use strict";A1=class{constructor(e,r,n,i){this.axisConfig=e;this.title=r;this.textDimensionCalculator=n;this.axisThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.width;this.outerPadding=Math.min(n.width/2,i);let a=n.height+this.axisConfig.labelPadding*2;this.labelTextHeight=n.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.height;this.outerPadding=Math.min(n.height/2,i);let a=n.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${r},${this.getScaleValue(n)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(n)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r} L ${this.getScaleValue(n)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(n)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var b6,Che=N(()=>{"use strict";dr();vt();yO();b6=class extends A1{static{o(this,"BandAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.categories=n,this.scale=L0().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=L0().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Y.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var w6,Ahe=N(()=>{"use strict";dr();yO();w6=class extends A1{static{o(this,"LinearAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.domain=n,this.scale=gl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=gl().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function vO(t,e,r,n){let i=new C1(n);return v6(t)?new b6(e,r,t.categories,t.title,i):new w6(e,r,[t.min,t.max],t.title,i)}var _he=N(()=>{"use strict";x6();gO();Che();Ahe();o(vO,"getAxis")});function Dhe(t,e,r,n){let i=new C1(n);return new xO(i,t,e,r)}var xO,Lhe=N(()=>{"use strict";gO();xO=class{constructor(e,r,n,i){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=n;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),n=Math.max(r.width,e.width),i=r.height+2*this.chartConfig.titlePadding;return r.width<=n&&r.height<=i&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=n,this.boundingRect.height=i,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(Dhe,"getChartTitleComponent")});var T6,Rhe=N(()=>{"use strict";dr();T6=class{constructor(e,r,n,i,a){this.plotData=e;this.xAxis=r;this.yAxis=n;this.orientation=i;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(n=>[this.xAxis.getScaleValue(n[0]),this.yAxis.getScaleValue(n[1])]),r;return this.orientation==="horizontal"?r=wl().y(n=>n[0]).x(n=>n[1])(e):r=wl().x(n=>n[0]).y(n=>n[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var k6,Nhe=N(()=>{"use strict";k6=class{constructor(e,r,n,i,a,s){this.barData=e;this.boundingRect=r;this.xAxis=n;this.yAxis=i;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),n=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),i=n/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-i,height:n,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-i,y:a[1],width:n,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function Mhe(t,e,r){return new bO(t,e,r)}var bO,Ihe=N(()=>{"use strict";Rhe();Nhe();bO=class{constructor(e,r,n){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,n]of this.chartData.plots.entries())switch(n.type){case"line":{let i=new T6(n,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break;case"bar":{let i=new k6(n,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break}return e}};o(Mhe,"getPlotComponent")});var E6,Ohe=N(()=>{"use strict";_he();Lhe();Ihe();x6();E6=class{constructor(e,r,n,i){this.chartConfig=e;this.chartData=r;this.componentStore={title:Dhe(e,r,n,i),plot:Mhe(e,r,n),xAxis:vO(r.xAxis,e.xAxis,{titleColor:n.xAxisTitleColor,labelColor:n.xAxisLabelColor,tickColor:n.xAxisTickColor,axisLineColor:n.xAxisLineColor},i),yAxis:vO(r.yAxis,e.yAxis,{titleColor:n.yAxisTitleColor,labelColor:n.yAxisLabelColor,tickColor:n.yAxisTickColor,axisLineColor:n.yAxisLineColor},i)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),n=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([n,n+a]),this.componentStore.xAxis.setBoundingBoxXY({x:n,y:i+s}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:i}),this.chartData.plots.some(u=>mO(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,i=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=n+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:i,y:a}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>mO(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var S6,Phe=N(()=>{"use strict";Ohe();S6=class{static{o(this,"XYChartBuilder")}static build(e,r,n,i){return new E6(e,r,n,i).getDrawableElement()}}});function Fhe(){let t=oh(),e=cr();return Fi(t.xyChart,e.themeVariables.xyChart)}function $he(){let t=cr();return Fi(or.xyChart,t.xyChart)}function zhe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function kO(t){let e=cr();return Tr(t.trim(),e)}function IGe(t){Bhe=t}function OGe(t){t==="horizontal"?bb.chartOrientation="horizontal":bb.chartOrientation="vertical"}function PGe(t){fn.xAxis.title=kO(t.text)}function Ghe(t,e){fn.xAxis={type:"linear",title:fn.xAxis.title,min:t,max:e},C6=!0}function BGe(t){fn.xAxis={type:"band",title:fn.xAxis.title,categories:t.map(e=>kO(e.text))},C6=!0}function FGe(t){fn.yAxis.title=kO(t.text)}function $Ge(t,e){fn.yAxis={type:"linear",title:fn.yAxis.title,min:t,max:e},TO=!0}function zGe(t){let e=Math.min(...t),r=Math.max(...t),n=S1(fn.yAxis)?fn.yAxis.min:1/0,i=S1(fn.yAxis)?fn.yAxis.max:-1/0;fn.yAxis={type:"linear",title:fn.yAxis.title,min:Math.min(n,e),max:Math.max(i,r)}}function Vhe(t){let e=[];if(t.length===0)return e;if(!C6){let r=S1(fn.xAxis)?fn.xAxis.min:1/0,n=S1(fn.xAxis)?fn.xAxis.max:-1/0;Ghe(Math.min(r,1),Math.max(n,t.length))}if(TO||zGe(t),v6(fn.xAxis)&&(e=fn.xAxis.categories.map((r,n)=>[r,t[n]])),S1(fn.xAxis)){let r=fn.xAxis.min,n=fn.xAxis.max,i=(n-r)/(t.length-1),a=[];for(let s=r;s<=n;s+=i)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function Uhe(t){return wO[t===0?0:t%wO.length]}function GGe(t,e){let r=Vhe(e);fn.plots.push({type:"line",strokeFill:Uhe(xb),strokeWidth:2,data:r}),xb++}function VGe(t,e){let r=Vhe(e);fn.plots.push({type:"bar",fill:Uhe(xb),data:r}),xb++}function UGe(){if(fn.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return fn.title=Ir(),S6.build(bb,fn,wb,Bhe)}function HGe(){return wb}function WGe(){return bb}var xb,Bhe,bb,wb,fn,wO,C6,TO,qGe,Hhe,Whe=N(()=>{"use strict";ji();Ya();_y();ir();gr();mi();Phe();x6();xb=0,bb=$he(),wb=Fhe(),fn=zhe(),wO=wb.plotColorPalette.split(",").map(t=>t.trim()),C6=!1,TO=!1;o(Fhe,"getChartDefaultThemeConfig");o($he,"getChartDefaultConfig");o(zhe,"getChartDefaultData");o(kO,"textSanitizer");o(IGe,"setTmpSVGG");o(OGe,"setOrientation");o(PGe,"setXAxisTitle");o(Ghe,"setXAxisRangeData");o(BGe,"setXAxisBand");o(FGe,"setYAxisTitle");o($Ge,"setYAxisRangeData");o(zGe,"setYAxisRangeFromPlotData");o(Vhe,"transformDataWithoutCategory");o(Uhe,"getPlotColorFromPalette");o(GGe,"setLineData");o(VGe,"setBarData");o(UGe,"getDrawableElem");o(HGe,"getChartThemeConfig");o(WGe,"getChartConfig");qGe=o(function(){Ar(),xb=0,bb=$he(),fn=zhe(),wb=Fhe(),wO=wb.plotColorPalette.split(",").map(t=>t.trim()),C6=!1,TO=!1},"clear"),Hhe={getDrawableElem:UGe,clear:qGe,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr,setOrientation:OGe,setXAxisTitle:PGe,setXAxisRangeData:Ghe,setXAxisBand:BGe,setYAxisTitle:FGe,setYAxisRangeData:$Ge,setLineData:GGe,setBarData:VGe,setTmpSVGG:IGe,getChartThemeConfig:HGe,getChartConfig:WGe}});var YGe,qhe,Yhe=N(()=>{"use strict";vt();Vc();Ei();YGe=o((t,e,r,n)=>{let i=n.db,a=i.getChartThemeConfig(),s=i.getChartConfig();function l(v){return v==="top"?"text-before-edge":"middle"}o(l,"getDominantBaseLine");function u(v){return v==="left"?"start":v==="right"?"end":"middle"}o(u,"getTextAnchor");function h(v){return`translate(${v.x}, ${v.y}) rotate(${v.rotation||0})`}o(h,"getTextTransformation"),Y.debug(`Rendering xychart chart | |
| 1180 | +`+t);let f=sa(e),d=f.append("g").attr("class","main"),p=d.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");vn(f,s.height,s.width,!0),f.attr("viewBox",`0 0 ${s.width} ${s.height}`),p.attr("fill",a.backgroundColor),i.setTmpSVGG(f.append("g").attr("class","mermaid-tmp-group"));let m=i.getDrawableElem(),g={};function y(v){let x=d,b="";for(let[w]of v.entries()){let C=d;w>0&&g[b]&&(C=g[b]),b+=v[w],x=g[b],x||(x=g[b]=C.append("g").attr("class",v[w]))}return x}o(y,"getGroup");for(let v of m){if(v.data.length===0)continue;let x=y(v.groupTexts);switch(v.type){case"rect":x.selectAll("rect").data(v.data).enter().append("rect").attr("x",b=>b.x).attr("y",b=>b.y).attr("width",b=>b.width).attr("height",b=>b.height).attr("fill",b=>b.fill).attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break;case"text":x.selectAll("text").data(v.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",b=>b.fill).attr("font-size",b=>b.fontSize).attr("dominant-baseline",b=>l(b.verticalPos)).attr("text-anchor",b=>u(b.horizontalPos)).attr("transform",b=>h(b)).text(b=>b.text);break;case"path":x.selectAll("path").data(v.data).enter().append("path").attr("d",b=>b.path).attr("fill",b=>b.fill?b.fill:"none").attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break}}},"draw"),qhe={draw:YGe}});var Xhe={};hr(Xhe,{diagram:()=>XGe});var XGe,jhe=N(()=>{"use strict";She();Whe();Yhe();XGe={parser:Ehe,db:Hhe,renderer:qhe}});var EO,Zhe,Jhe=N(()=>{"use strict";EO=function(){var t=o(function(re,oe,V,xe){for(V=V||{},xe=re.length;xe--;V[re[xe]]=oe);return V},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],s=[1,22],l=[2,7],u=[1,26],h=[1,27],f=[1,28],d=[1,29],p=[1,33],m=[1,34],g=[1,35],y=[1,36],v=[1,37],x=[1,38],b=[1,24],w=[1,31],C=[1,32],T=[1,30],E=[1,39],A=[1,40],S=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],_=[1,61],I=[89,90],D=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],k=[27,29],L=[1,70],R=[1,71],O=[1,72],M=[1,73],B=[1,74],F=[1,75],P=[1,76],z=[1,83],$=[1,80],H=[1,84],Q=[1,85],j=[1,86],ie=[1,87],ne=[1,88],le=[1,89],he=[1,90],K=[1,91],X=[1,92],te=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],J=[63,64],se=[1,101],ue=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],Z=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],Se=[1,110],ce=[1,106],ae=[1,107],Oe=[1,108],ge=[1,109],ze=[1,111],He=[1,116],$e=[1,117],Re=[1,114],Ie=[1,115],be={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType:39,STRUCT_STOP:40,REQUIREMENT:41,FUNCTIONAL_REQUIREMENT:42,INTERFACE_REQUIREMENT:43,PERFORMANCE_REQUIREMENT:44,PHYSICAL_REQUIREMENT:45,DESIGN_CONSTRAINT:46,LOW_RISK:47,MED_RISK:48,HIGH_RISK:49,VERIFY_ANALYSIS:50,VERIFY_DEMONSTRATION:51,VERIFY_INSPECTION:52,VERIFY_TEST:53,ELEMENT:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:o(function(oe,V,xe,q,pe,ve,Pe){var _e=ve.length-1;switch(pe){case 4:this.$=ve[_e].trim(),q.setAccTitle(this.$);break;case 5:case 6:this.$=ve[_e].trim(),q.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:q.setDirection("TB");break;case 18:q.setDirection("BT");break;case 19:q.setDirection("RL");break;case 20:q.setDirection("LR");break;case 21:q.addRequirement(ve[_e-3],ve[_e-4]);break;case 22:q.addRequirement(ve[_e-5],ve[_e-6]),q.setClass([ve[_e-5]],ve[_e-3]);break;case 23:q.setNewReqId(ve[_e-2]);break;case 24:q.setNewReqText(ve[_e-2]);break;case 25:q.setNewReqRisk(ve[_e-2]);break;case 26:q.setNewReqVerifyMethod(ve[_e-2]);break;case 29:this.$=q.RequirementType.REQUIREMENT;break;case 30:this.$=q.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=q.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=q.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=q.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=q.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=q.RiskLevel.LOW_RISK;break;case 36:this.$=q.RiskLevel.MED_RISK;break;case 37:this.$=q.RiskLevel.HIGH_RISK;break;case 38:this.$=q.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=q.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=q.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=q.VerifyType.VERIFY_TEST;break;case 42:q.addElement(ve[_e-3]);break;case 43:q.addElement(ve[_e-5]),q.setClass([ve[_e-5]],ve[_e-3]);break;case 44:q.setNewElementType(ve[_e-2]);break;case 45:q.setNewElementDocRef(ve[_e-2]);break;case 48:q.addRelationship(ve[_e-2],ve[_e],ve[_e-4]);break;case 49:q.addRelationship(ve[_e-2],ve[_e-4],ve[_e]);break;case 50:this.$=q.Relationships.CONTAINS;break;case 51:this.$=q.Relationships.COPIES;break;case 52:this.$=q.Relationships.DERIVES;break;case 53:this.$=q.Relationships.SATISFIES;break;case 54:this.$=q.Relationships.VERIFIES;break;case 55:this.$=q.Relationships.REFINES;break;case 56:this.$=q.Relationships.TRACES;break;case 57:this.$=ve[_e-2],q.defineClass(ve[_e-1],ve[_e]);break;case 58:q.setClass(ve[_e-1],ve[_e]);break;case 59:q.setClass([ve[_e-2]],ve[_e]);break;case 60:case 62:this.$=[ve[_e]];break;case 61:case 63:this.$=ve[_e-2].concat([ve[_e]]);break;case 64:this.$=ve[_e-2],q.setCssStyle(ve[_e-1],ve[_e]);break;case 65:this.$=[ve[_e]];break;case 66:ve[_e-2].push(ve[_e]),this.$=ve[_e-2];break;case 68:this.$=ve[_e-1]+ve[_e];break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:n,13:i},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:n,13:i},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:n,13:i},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:s,7:42,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:43,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:44,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:45,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:46,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:47,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:48,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:49,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:50,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},t(S,[2,17]),t(S,[2,18]),t(S,[2,19]),t(S,[2,20]),{30:60,33:62,75:_,89:E,90:A},{30:63,33:62,75:_,89:E,90:A},{30:64,33:62,75:_,89:E,90:A},t(I,[2,29]),t(I,[2,30]),t(I,[2,31]),t(I,[2,32]),t(I,[2,33]),t(I,[2,34]),t(D,[2,81]),t(D,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},t(k,[2,79]),t(k,[2,80]),{27:[1,67],29:[1,68]},t(k,[2,85]),t(k,[2,86]),{62:69,65:L,66:R,67:O,68:M,69:B,70:F,71:P},{62:77,65:L,66:R,67:O,68:M,69:B,70:F,71:P},{30:78,33:62,75:_,89:E,90:A},{73:79,75:z,76:$,78:81,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},t(te,[2,60]),t(te,[2,62]),{73:93,75:z,76:$,78:81,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},{30:94,33:62,75:_,76:$,89:E,90:A},{5:[1,95]},{30:96,33:62,75:_,89:E,90:A},{5:[1,97]},{30:98,33:62,75:_,89:E,90:A},{63:[1,99]},t(J,[2,50]),t(J,[2,51]),t(J,[2,52]),t(J,[2,53]),t(J,[2,54]),t(J,[2,55]),t(J,[2,56]),{64:[1,100]},t(S,[2,59],{76:$}),t(S,[2,64],{76:se}),{33:103,75:[1,102],89:E,90:A},t(ue,[2,65],{79:104,75:z,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X}),t(Z,[2,67]),t(Z,[2,69]),t(Z,[2,70]),t(Z,[2,71]),t(Z,[2,72]),t(Z,[2,73]),t(Z,[2,74]),t(Z,[2,75]),t(Z,[2,76]),t(Z,[2,77]),t(Z,[2,78]),t(S,[2,57],{76:se}),t(S,[2,58],{76:$}),{5:Se,28:105,31:ce,34:ae,36:Oe,38:ge,40:ze},{27:[1,112],76:$},{5:He,40:$e,56:113,57:Re,59:Ie},{27:[1,118],76:$},{33:119,89:E,90:A},{33:120,89:E,90:A},{75:z,78:121,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},t(te,[2,61]),t(te,[2,63]),t(Z,[2,68]),t(S,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:Se,28:126,31:ce,34:ae,36:Oe,38:ge,40:ze},t(S,[2,28]),{5:[1,127]},t(S,[2,42]),{32:[1,128]},{32:[1,129]},{5:He,40:$e,56:130,57:Re,59:Ie},t(S,[2,47]),{5:[1,131]},t(S,[2,48]),t(S,[2,49]),t(ue,[2,66],{79:104,75:z,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X}),{33:132,89:E,90:A},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},t(S,[2,27]),{5:Se,28:145,31:ce,34:ae,36:Oe,38:ge,40:ze},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},t(S,[2,46]),{5:He,40:$e,56:152,57:Re,59:Ie},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},t(S,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},t(S,[2,43]),{5:Se,28:159,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:160,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:161,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:162,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:He,40:$e,56:163,57:Re,59:Ie},{5:He,40:$e,56:164,57:Re,59:Ie},t(S,[2,23]),t(S,[2,24]),t(S,[2,25]),t(S,[2,26]),t(S,[2,44]),t(S,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:o(function(oe,V){if(V.recoverable)this.trace(oe);else{var xe=new Error(oe);throw xe.hash=V,xe}},"parseError"),parse:o(function(oe){var V=this,xe=[0],q=[],pe=[null],ve=[],Pe=this.table,_e="",we=0,Ve=0,De=0,qe=2,at=1,Rt=ve.slice.call(arguments,1),st=Object.create(this.lexer),Ue={yy:{}};for(var ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ct)&&(Ue.yy[ct]=this.yy[ct]);st.setInput(oe,Ue.yy),Ue.yy.lexer=st,Ue.yy.parser=this,typeof st.yylloc>"u"&&(st.yylloc={});var We=st.yylloc;ve.push(We);var ot=st.options&&st.options.ranges;typeof Ue.yy.parseError=="function"?this.parseError=Ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Yt(Dr){xe.length=xe.length-2*Dr,pe.length=pe.length-Dr,ve.length=ve.length-Dr}o(Yt,"popStack");function bt(){var Dr;return Dr=q.pop()||st.lex()||at,typeof Dr!="number"&&(Dr instanceof Array&&(q=Dr,Dr=q.pop()),Dr=V.symbols_[Dr]||Dr),Dr}o(bt,"lex");for(var Mt,xt,ut,Et,ft,yt,nt={},dn,Tt,On,tn;;){if(ut=xe[xe.length-1],this.defaultActions[ut]?Et=this.defaultActions[ut]:((Mt===null||typeof Mt>"u")&&(Mt=bt()),Et=Pe[ut]&&Pe[ut][Mt]),typeof Et>"u"||!Et.length||!Et[0]){var _r="";tn=[];for(dn in Pe[ut])this.terminals_[dn]&&dn>qe&&tn.push("'"+this.terminals_[dn]+"'");st.showPosition?_r="Parse error on line "+(we+1)+`: | |
| 1181 | +`+st.showPosition()+` | |
| 1182 | +Expecting `+tn.join(", ")+", got '"+(this.terminals_[Mt]||Mt)+"'":_r="Parse error on line "+(we+1)+": Unexpected "+(Mt==at?"end of input":"'"+(this.terminals_[Mt]||Mt)+"'"),this.parseError(_r,{text:st.match,token:this.terminals_[Mt]||Mt,line:st.yylineno,loc:We,expected:tn})}if(Et[0]instanceof Array&&Et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ut+", token: "+Mt);switch(Et[0]){case 1:xe.push(Mt),pe.push(st.yytext),ve.push(st.yylloc),xe.push(Et[1]),Mt=null,xt?(Mt=xt,xt=null):(Ve=st.yyleng,_e=st.yytext,we=st.yylineno,We=st.yylloc,De>0&&De--);break;case 2:if(Tt=this.productions_[Et[1]][1],nt.$=pe[pe.length-Tt],nt._$={first_line:ve[ve.length-(Tt||1)].first_line,last_line:ve[ve.length-1].last_line,first_column:ve[ve.length-(Tt||1)].first_column,last_column:ve[ve.length-1].last_column},ot&&(nt._$.range=[ve[ve.length-(Tt||1)].range[0],ve[ve.length-1].range[1]]),yt=this.performAction.apply(nt,[_e,Ve,we,Ue.yy,Et[1],pe,ve].concat(Rt)),typeof yt<"u")return yt;Tt&&(xe=xe.slice(0,-1*Tt*2),pe=pe.slice(0,-1*Tt),ve=ve.slice(0,-1*Tt)),xe.push(this.productions_[Et[1]][0]),pe.push(nt.$),ve.push(nt._$),On=Pe[xe[xe.length-2]][xe[xe.length-1]],xe.push(On);break;case 3:return!0}}return!0},"parse")},W=function(){var re={EOF:1,parseError:o(function(V,xe){if(this.yy.parser)this.yy.parser.parseError(V,xe);else throw new Error(V)},"parseError"),setInput:o(function(oe,V){return this.yy=V||this.yy||{},this._input=oe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var oe=this._input[0];this.yytext+=oe,this.yyleng++,this.offset++,this.match+=oe,this.matched+=oe;var V=oe.match(/(?:\r\n?|\n).*/g);return V?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),oe},"input"),unput:o(function(oe){var V=oe.length,xe=oe.split(/(?:\r\n?|\n)/g);this._input=oe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-V),this.offset-=V;var q=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),xe.length-1&&(this.yylineno-=xe.length-1);var pe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:xe?(xe.length===q.length?this.yylloc.first_column:0)+q[q.length-xe.length].length-xe[0].length:this.yylloc.first_column-V},this.options.ranges&&(this.yylloc.range=[pe[0],pe[0]+this.yyleng-V]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1183 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(oe){this.unput(this.match.slice(oe))},"less"),pastInput:o(function(){var oe=this.matched.substr(0,this.matched.length-this.match.length);return(oe.length>20?"...":"")+oe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var oe=this.match;return oe.length<20&&(oe+=this._input.substr(0,20-oe.length)),(oe.substr(0,20)+(oe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var oe=this.pastInput(),V=new Array(oe.length+1).join("-");return oe+this.upcomingInput()+` | |
| 1184 | +`+V+"^"},"showPosition"),test_match:o(function(oe,V){var xe,q,pe;if(this.options.backtrack_lexer&&(pe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(pe.yylloc.range=this.yylloc.range.slice(0))),q=oe[0].match(/(?:\r\n?|\n).*/g),q&&(this.yylineno+=q.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:q?q[q.length-1].length-q[q.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+oe[0].length},this.yytext+=oe[0],this.match+=oe[0],this.matches=oe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(oe[0].length),this.matched+=oe[0],xe=this.performAction.call(this,this.yy,this,V,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),xe)return xe;if(this._backtrack){for(var ve in pe)this[ve]=pe[ve];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var oe,V,xe,q;this._more||(this.yytext="",this.match="");for(var pe=this._currentRules(),ve=0;ve<pe.length;ve++)if(xe=this._input.match(this.rules[pe[ve]]),xe&&(!V||xe[0].length>V[0].length)){if(V=xe,q=ve,this.options.backtrack_lexer){if(oe=this.test_match(xe,pe[ve]),oe!==!1)return oe;if(this._backtrack){V=!1;continue}else return!1}else if(!this.options.flex)break}return V?(oe=this.test_match(V,pe[q]),oe!==!1?oe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1185 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var V=this.next();return V||this.lex()},"lex"),begin:o(function(V){this.conditionStack.push(V)},"begin"),popState:o(function(){var V=this.conditionStack.length-1;return V>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(V){return V=this.conditionStack.length-1-Math.abs(V||0),V>=0?this.conditionStack[V]:"INITIAL"},"topState"),pushState:o(function(V){this.begin(V)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(V,xe,q,pe){var ve=pe;switch(q){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 21;case 9:return 22;case 10:return 23;case 11:return 24;case 12:return 5;case 13:break;case 14:break;case 15:break;case 16:return 8;case 17:return 6;case 18:return 27;case 19:return 40;case 20:return 29;case 21:return 32;case 22:return 31;case 23:return 34;case 24:return 36;case 25:return 38;case 26:return 41;case 27:return 42;case 28:return 43;case 29:return 44;case 30:return 45;case 31:return 46;case 32:return 47;case 33:return 48;case 34:return 49;case 35:return 50;case 36:return 51;case 37:return 52;case 38:return 53;case 39:return 54;case 40:return 65;case 41:return 66;case 42:return 67;case 43:return 68;case 44:return 69;case 45:return 70;case 46:return 71;case 47:return 57;case 48:return 59;case 49:return this.begin("style"),77;break;case 50:return 75;case 51:return 81;case 52:return 88;case 53:return"PERCENT";case 54:return 86;case 55:return 84;case 56:break;case 57:this.begin("string");break;case 58:this.popState();break;case 59:return this.begin("style"),72;break;case 60:return this.begin("style"),74;break;case 61:return 61;case 62:return 64;case 63:return 63;case 64:this.begin("string");break;case 65:this.popState();break;case 66:return"qString";case 67:return xe.yytext=xe.yytext.trim(),89;break;case 68:return 75;case 69:return 80;case 70:return 76}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::{3})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:style\b)/i,/^(?:\w+)/i,/^(?::)/i,/^(?:;)/i,/^(?:%)/i,/^(?:-)/i,/^(?:#)/i,/^(?: )/i,/^(?:["])/i,/^(?:\n)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i,/^(?:\w+)/i,/^(?:[0-9]+)/i,/^(?:,)/i],conditions:{acc_descr_multiline:{rules:[6,7,68,69,70],inclusive:!1},acc_descr:{rules:[4,68,69,70],inclusive:!1},acc_title:{rules:[2,68,69,70],inclusive:!1},style:{rules:[50,51,52,53,54,55,56,57,58,68,69,70],inclusive:!1},unqString:{rules:[68,69,70],inclusive:!1},token:{rules:[68,69,70],inclusive:!1},string:{rules:[65,66,68,69,70],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,59,60,61,62,63,64,67,68,69,70],inclusive:!0}}};return re}();be.lexer=W;function de(){this.yy={}}return o(de,"Parser"),de.prototype=be,be.Parser=de,new de}();EO.parser=EO;Zhe=EO});var A6,efe=N(()=>{"use strict";zt();vt();mi();A6=class{constructor(){this.relations=[];this.latestRequirement=this.getInitialRequirement();this.requirements=new Map;this.latestElement=this.getInitialElement();this.elements=new Map;this.classes=new Map;this.direction="TB";this.RequirementType={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"};this.RiskLevel={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"};this.VerifyType={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"};this.Relationships={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"};this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().requirement,"getConfig");this.clear(),this.setDirection=this.setDirection.bind(this),this.addRequirement=this.addRequirement.bind(this),this.setNewReqId=this.setNewReqId.bind(this),this.setNewReqRisk=this.setNewReqRisk.bind(this),this.setNewReqText=this.setNewReqText.bind(this),this.setNewReqVerifyMethod=this.setNewReqVerifyMethod.bind(this),this.addElement=this.addElement.bind(this),this.setNewElementType=this.setNewElementType.bind(this),this.setNewElementDocRef=this.setNewElementDocRef.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setCssStyle=this.setCssStyle.bind(this),this.setClass=this.setClass.bind(this),this.defineClass=this.defineClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"RequirementDB")}getDirection(){return this.direction}setDirection(e){this.direction=e}resetLatestRequirement(){this.latestRequirement=this.getInitialRequirement()}resetLatestElement(){this.latestElement=this.getInitialElement()}getInitialRequirement(){return{requirementId:"",text:"",risk:"",verifyMethod:"",name:"",type:"",cssStyles:[],classes:["default"]}}getInitialElement(){return{name:"",type:"",docRef:"",cssStyles:[],classes:["default"]}}addRequirement(e,r){return this.requirements.has(e)||this.requirements.set(e,{name:e,type:r,requirementId:this.latestRequirement.requirementId,text:this.latestRequirement.text,risk:this.latestRequirement.risk,verifyMethod:this.latestRequirement.verifyMethod,cssStyles:[],classes:["default"]}),this.resetLatestRequirement(),this.requirements.get(e)}getRequirements(){return this.requirements}setNewReqId(e){this.latestRequirement!==void 0&&(this.latestRequirement.requirementId=e)}setNewReqText(e){this.latestRequirement!==void 0&&(this.latestRequirement.text=e)}setNewReqRisk(e){this.latestRequirement!==void 0&&(this.latestRequirement.risk=e)}setNewReqVerifyMethod(e){this.latestRequirement!==void 0&&(this.latestRequirement.verifyMethod=e)}addElement(e){return this.elements.has(e)||(this.elements.set(e,{name:e,type:this.latestElement.type,docRef:this.latestElement.docRef,cssStyles:[],classes:["default"]}),Y.info("Added new element: ",e)),this.resetLatestElement(),this.elements.get(e)}getElements(){return this.elements}setNewElementType(e){this.latestElement!==void 0&&(this.latestElement.type=e)}setNewElementDocRef(e){this.latestElement!==void 0&&(this.latestElement.docRef=e)}addRelationship(e,r,n){this.relations.push({type:e,src:r,dst:n})}getRelationships(){return this.relations}clear(){this.relations=[],this.resetLatestRequirement(),this.requirements=new Map,this.resetLatestElement(),this.elements=new Map,this.classes=new Map,Ar()}setCssStyle(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(!r||!i)return;for(let a of r)a.includes(",")?i.cssStyles.push(...a.split(",")):i.cssStyles.push(a)}}setClass(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(i)for(let a of r){i.classes.push(a);let s=this.classes.get(a)?.styles;s&&i.cssStyles.push(...s)}}}defineClass(e,r){for(let n of e){let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.requirements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))}),this.elements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))})}}getClasses(){return this.classes}getData(){let e=me(),r=[],n=[];for(let i of this.requirements.values()){let a=i;a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),a.shape="requirementBox",a.look=e.look,r.push(a)}for(let i of this.elements.values()){let a=i;a.shape="requirementBox",a.look=e.look,a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),r.push(a)}for(let i of this.relations){let a=0,s=i.type===this.Relationships.CONTAINS,l={id:`${i.src}-${i.dst}-${a}`,start:this.requirements.get(i.src)?.name??this.elements.get(i.src)?.name,end:this.requirements.get(i.dst)?.name??this.elements.get(i.dst)?.name,label:`<<${i.type}>>`,classes:"relationshipLine",style:["fill:none",s?"":"stroke-dasharray: 10,7"],labelpos:"c",thickness:"normal",type:"normal",pattern:s?"normal":"dashed",arrowTypeStart:s?"requirement_contains":"",arrowTypeEnd:s?"":"requirement_arrow",look:e.look};n.push(l),a++}return{nodes:r,edges:n,other:{},config:e,direction:this.getDirection()}}}});var ZGe,tfe,rfe=N(()=>{"use strict";ZGe=o(t=>` | |
| 1186 | + | |
| 1187 | + marker { | |
| 1188 | + fill: ${t.relationColor}; | |
| 1189 | + stroke: ${t.relationColor}; | |
| 1190 | + } | |
| 1191 | + | |
| 1192 | + marker.cross { | |
| 1193 | + stroke: ${t.lineColor}; | |
| 1194 | + } | |
| 1195 | + | |
| 1196 | + svg { | |
| 1197 | + font-family: ${t.fontFamily}; | |
| 1198 | + font-size: ${t.fontSize}; | |
| 1199 | + } | |
| 1200 | + | |
| 1201 | + .reqBox { | |
| 1202 | + fill: ${t.requirementBackground}; | |
| 1203 | + fill-opacity: 1.0; | |
| 1204 | + stroke: ${t.requirementBorderColor}; | |
| 1205 | + stroke-width: ${t.requirementBorderSize}; | |
| 1206 | + } | |
| 1207 | + | |
| 1208 | + .reqTitle, .reqLabel{ | |
| 1209 | + fill: ${t.requirementTextColor}; | |
| 1210 | + } | |
| 1211 | + .reqLabelBox { | |
| 1212 | + fill: ${t.relationLabelBackground}; | |
| 1213 | + fill-opacity: 1.0; | |
| 1214 | + } | |
| 1215 | + | |
| 1216 | + .req-title-line { | |
| 1217 | + stroke: ${t.requirementBorderColor}; | |
| 1218 | + stroke-width: ${t.requirementBorderSize}; | |
| 1219 | + } | |
| 1220 | + .relationshipLine { | |
| 1221 | + stroke: ${t.relationColor}; | |
| 1222 | + stroke-width: 1; | |
| 1223 | + } | |
| 1224 | + .relationshipLabel { | |
| 1225 | + fill: ${t.relationLabelColor}; | |
| 1226 | + } | |
| 1227 | + .divider { | |
| 1228 | + stroke: ${t.nodeBorder}; | |
| 1229 | + stroke-width: 1; | |
| 1230 | + } | |
| 1231 | + .label { | |
| 1232 | + font-family: ${t.fontFamily}; | |
| 1233 | + color: ${t.nodeTextColor||t.textColor}; | |
| 1234 | + } | |
| 1235 | + .label text,span { | |
| 1236 | + fill: ${t.nodeTextColor||t.textColor}; | |
| 1237 | + color: ${t.nodeTextColor||t.textColor}; | |
| 1238 | + } | |
| 1239 | + .labelBkg { | |
| 1240 | + background-color: ${t.edgeLabelBackground}; | |
| 1241 | + } | |
| 1242 | + | |
| 1243 | +`,"getStyles"),tfe=ZGe});var SO={};hr(SO,{draw:()=>JGe});var JGe,nfe=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();JGe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing requirement diagram (unified)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.nodeSpacing=a?.nodeSpacing??50,l.rankSpacing=a?.rankSpacing??50,l.markers=["requirement_contains","requirement_arrow"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"requirementDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,"requirementDiagram",a?.useMaxWidth??!0)},"draw")});var ife={};hr(ife,{diagram:()=>eVe});var eVe,afe=N(()=>{"use strict";Jhe();efe();rfe();nfe();eVe={parser:Zhe,get db(){return new A6},renderer:SO,styles:tfe}});var CO,lfe,cfe=N(()=>{"use strict";CO=function(){var t=o(function(K,X,te,J){for(te=te||{},J=K.length;J--;te[K[J]]=X);return te},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,13],u=[1,14],h=[1,16],f=[1,17],d=[1,18],p=[1,24],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],w=[1,31],C=[1,32],T=[1,33],E=[1,34],A=[1,35],S=[1,36],_=[1,37],I=[1,38],D=[1,39],k=[1,41],L=[1,42],R=[1,43],O=[1,44],M=[1,45],B=[1,46],F=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],P=[4,5,16,50,52,53],z=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],H=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Q=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],j=[68,69,70],ie=[1,122],ne={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:o(function(X,te,J,se,ue,Z,Se){var ce=Z.length-1;switch(ue){case 3:return se.apply(Z[ce]),Z[ce];break;case 4:case 9:this.$=[];break;case 5:case 10:Z[ce-1].push(Z[ce]),this.$=Z[ce-1];break;case 6:case 7:case 11:case 12:this.$=Z[ce];break;case 8:case 13:this.$=[];break;case 15:Z[ce].type="createParticipant",this.$=Z[ce];break;case 16:Z[ce-1].unshift({type:"boxStart",boxData:se.parseBoxData(Z[ce-2])}),Z[ce-1].push({type:"boxEnd",boxText:Z[ce-2]}),this.$=Z[ce-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(Z[ce-2]),sequenceIndexStep:Number(Z[ce-1]),sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(Z[ce-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:se.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:se.LINETYPE.ACTIVE_START,actor:Z[ce-1].actor};break;case 23:this.$={type:"activeEnd",signalType:se.LINETYPE.ACTIVE_END,actor:Z[ce-1].actor};break;case 29:se.setDiagramTitle(Z[ce].substring(6)),this.$=Z[ce].substring(6);break;case 30:se.setDiagramTitle(Z[ce].substring(7)),this.$=Z[ce].substring(7);break;case 31:this.$=Z[ce].trim(),se.setAccTitle(this.$);break;case 32:case 33:this.$=Z[ce].trim(),se.setAccDescription(this.$);break;case 34:Z[ce-1].unshift({type:"loopStart",loopText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.LOOP_START}),Z[ce-1].push({type:"loopEnd",loopText:Z[ce-2],signalType:se.LINETYPE.LOOP_END}),this.$=Z[ce-1];break;case 35:Z[ce-1].unshift({type:"rectStart",color:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.RECT_START}),Z[ce-1].push({type:"rectEnd",color:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.RECT_END}),this.$=Z[ce-1];break;case 36:Z[ce-1].unshift({type:"optStart",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.OPT_START}),Z[ce-1].push({type:"optEnd",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.OPT_END}),this.$=Z[ce-1];break;case 37:Z[ce-1].unshift({type:"altStart",altText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.ALT_START}),Z[ce-1].push({type:"altEnd",signalType:se.LINETYPE.ALT_END}),this.$=Z[ce-1];break;case 38:Z[ce-1].unshift({type:"parStart",parText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.PAR_START}),Z[ce-1].push({type:"parEnd",signalType:se.LINETYPE.PAR_END}),this.$=Z[ce-1];break;case 39:Z[ce-1].unshift({type:"parStart",parText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.PAR_OVER_START}),Z[ce-1].push({type:"parEnd",signalType:se.LINETYPE.PAR_END}),this.$=Z[ce-1];break;case 40:Z[ce-1].unshift({type:"criticalStart",criticalText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.CRITICAL_START}),Z[ce-1].push({type:"criticalEnd",signalType:se.LINETYPE.CRITICAL_END}),this.$=Z[ce-1];break;case 41:Z[ce-1].unshift({type:"breakStart",breakText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.BREAK_START}),Z[ce-1].push({type:"breakEnd",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.BREAK_END}),this.$=Z[ce-1];break;case 43:this.$=Z[ce-3].concat([{type:"option",optionText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.CRITICAL_OPTION},Z[ce]]);break;case 45:this.$=Z[ce-3].concat([{type:"and",parText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.PAR_AND},Z[ce]]);break;case 47:this.$=Z[ce-3].concat([{type:"else",altText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.ALT_ELSE},Z[ce]]);break;case 48:Z[ce-3].draw="participant",Z[ce-3].type="addParticipant",Z[ce-3].description=se.parseMessage(Z[ce-1]),this.$=Z[ce-3];break;case 49:Z[ce-1].draw="participant",Z[ce-1].type="addParticipant",this.$=Z[ce-1];break;case 50:Z[ce-3].draw="actor",Z[ce-3].type="addParticipant",Z[ce-3].description=se.parseMessage(Z[ce-1]),this.$=Z[ce-3];break;case 51:Z[ce-1].draw="actor",Z[ce-1].type="addParticipant",this.$=Z[ce-1];break;case 52:Z[ce-1].type="destroyParticipant",this.$=Z[ce-1];break;case 53:this.$=[Z[ce-1],{type:"addNote",placement:Z[ce-2],actor:Z[ce-1].actor,text:Z[ce]}];break;case 54:Z[ce-2]=[].concat(Z[ce-1],Z[ce-1]).slice(0,2),Z[ce-2][0]=Z[ce-2][0].actor,Z[ce-2][1]=Z[ce-2][1].actor,this.$=[Z[ce-1],{type:"addNote",placement:se.PLACEMENT.OVER,actor:Z[ce-2].slice(0,2),text:Z[ce]}];break;case 55:this.$=[Z[ce-1],{type:"addLinks",actor:Z[ce-1].actor,text:Z[ce]}];break;case 56:this.$=[Z[ce-1],{type:"addALink",actor:Z[ce-1].actor,text:Z[ce]}];break;case 57:this.$=[Z[ce-1],{type:"addProperties",actor:Z[ce-1].actor,text:Z[ce]}];break;case 58:this.$=[Z[ce-1],{type:"addDetails",actor:Z[ce-1].actor,text:Z[ce]}];break;case 61:this.$=[Z[ce-2],Z[ce]];break;case 62:this.$=Z[ce];break;case 63:this.$=se.PLACEMENT.LEFTOF;break;case 64:this.$=se.PLACEMENT.RIGHTOF;break;case 65:this.$=[Z[ce-4],Z[ce-1],{type:"addMessage",from:Z[ce-4].actor,to:Z[ce-1].actor,signalType:Z[ce-3],msg:Z[ce],activate:!0},{type:"activeStart",signalType:se.LINETYPE.ACTIVE_START,actor:Z[ce-1].actor}];break;case 66:this.$=[Z[ce-4],Z[ce-1],{type:"addMessage",from:Z[ce-4].actor,to:Z[ce-1].actor,signalType:Z[ce-3],msg:Z[ce]},{type:"activeEnd",signalType:se.LINETYPE.ACTIVE_END,actor:Z[ce-4].actor}];break;case 67:this.$=[Z[ce-3],Z[ce-1],{type:"addMessage",from:Z[ce-3].actor,to:Z[ce-1].actor,signalType:Z[ce-2],msg:Z[ce]}];break;case 68:this.$={type:"addParticipant",actor:Z[ce]};break;case 69:this.$=se.LINETYPE.SOLID_OPEN;break;case 70:this.$=se.LINETYPE.DOTTED_OPEN;break;case 71:this.$=se.LINETYPE.SOLID;break;case 72:this.$=se.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=se.LINETYPE.DOTTED;break;case 74:this.$=se.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=se.LINETYPE.SOLID_CROSS;break;case 76:this.$=se.LINETYPE.DOTTED_CROSS;break;case 77:this.$=se.LINETYPE.SOLID_POINT;break;case 78:this.$=se.LINETYPE.DOTTED_POINT;break;case 79:this.$=se.parseMessage(Z[ce].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},t(F,[2,5]),{9:47,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},t(F,[2,7]),t(F,[2,8]),t(F,[2,14]),{12:48,50:_,52:I,53:D},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:B},{22:55,70:B},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(F,[2,29]),t(F,[2,30]),{32:[1,61]},{34:[1,62]},t(F,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:B},{22:72,70:B},{22:73,70:B},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:B},{22:90,70:B},{22:91,70:B},{22:92,70:B},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(F,[2,6]),t(F,[2,15]),t(P,[2,9],{10:93}),t(F,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(F,[2,21]),{5:[1,97]},{5:[1,98]},t(F,[2,24]),t(F,[2,25]),t(F,[2,26]),t(F,[2,27]),t(F,[2,28]),t(F,[2,31]),t(F,[2,32]),t(z,i,{7:99}),t(z,i,{7:100}),t(z,i,{7:101}),t($,i,{40:102,7:103}),t(H,i,{42:104,7:105}),t(H,i,{7:105,42:106}),t(Q,i,{45:107,7:108}),t(z,i,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:B},t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(j,[2,74]),t(j,[2,75]),t(j,[2,76]),t(j,[2,77]),t(j,[2,78]),{22:118,70:B},{22:120,58:119,70:B},{70:[2,63]},{70:[2,64]},{56:121,81:ie},{56:123,81:ie},{56:124,81:ie},{56:125,81:ie},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:_,52:I,53:D},{5:[1,131]},t(F,[2,19]),t(F,[2,20]),t(F,[2,22]),t(F,[2,23]),{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,132],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,133],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,134],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,135]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,46],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,49:[1,136],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,137]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,44],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,48:[1,138],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,139]},{16:[1,140]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,42],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,47:[1,141],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,142],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{15:[1,143]},t(F,[2,49]),{15:[1,144]},t(F,[2,51]),t(F,[2,52]),{22:145,70:B},{22:146,70:B},{56:147,81:ie},{56:148,81:ie},{56:149,81:ie},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(F,[2,16]),t(P,[2,10]),{12:151,50:_,52:I,53:D},t(P,[2,12]),t(P,[2,13]),t(F,[2,18]),t(F,[2,34]),t(F,[2,35]),t(F,[2,36]),t(F,[2,37]),{15:[1,152]},t(F,[2,38]),{15:[1,153]},t(F,[2,39]),t(F,[2,40]),{15:[1,154]},t(F,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:ie},{56:158,81:ie},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:B},t(P,[2,11]),t($,i,{7:103,40:160}),t(H,i,{7:105,42:161}),t(Q,i,{7:108,45:162}),t(F,[2,48]),t(F,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:o(function(X,te){if(te.recoverable)this.trace(X);else{var J=new Error(X);throw J.hash=te,J}},"parseError"),parse:o(function(X){var te=this,J=[0],se=[],ue=[null],Z=[],Se=this.table,ce="",ae=0,Oe=0,ge=0,ze=2,He=1,$e=Z.slice.call(arguments,1),Re=Object.create(this.lexer),Ie={yy:{}};for(var be in this.yy)Object.prototype.hasOwnProperty.call(this.yy,be)&&(Ie.yy[be]=this.yy[be]);Re.setInput(X,Ie.yy),Ie.yy.lexer=Re,Ie.yy.parser=this,typeof Re.yylloc>"u"&&(Re.yylloc={});var W=Re.yylloc;Z.push(W);var de=Re.options&&Re.options.ranges;typeof Ie.yy.parseError=="function"?this.parseError=Ie.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function re(Rt){J.length=J.length-2*Rt,ue.length=ue.length-Rt,Z.length=Z.length-Rt}o(re,"popStack");function oe(){var Rt;return Rt=se.pop()||Re.lex()||He,typeof Rt!="number"&&(Rt instanceof Array&&(se=Rt,Rt=se.pop()),Rt=te.symbols_[Rt]||Rt),Rt}o(oe,"lex");for(var V,xe,q,pe,ve,Pe,_e={},we,Ve,De,qe;;){if(q=J[J.length-1],this.defaultActions[q]?pe=this.defaultActions[q]:((V===null||typeof V>"u")&&(V=oe()),pe=Se[q]&&Se[q][V]),typeof pe>"u"||!pe.length||!pe[0]){var at="";qe=[];for(we in Se[q])this.terminals_[we]&&we>ze&&qe.push("'"+this.terminals_[we]+"'");Re.showPosition?at="Parse error on line "+(ae+1)+`: | |
| 1244 | +`+Re.showPosition()+` | |
| 1245 | +Expecting `+qe.join(", ")+", got '"+(this.terminals_[V]||V)+"'":at="Parse error on line "+(ae+1)+": Unexpected "+(V==He?"end of input":"'"+(this.terminals_[V]||V)+"'"),this.parseError(at,{text:Re.match,token:this.terminals_[V]||V,line:Re.yylineno,loc:W,expected:qe})}if(pe[0]instanceof Array&&pe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+q+", token: "+V);switch(pe[0]){case 1:J.push(V),ue.push(Re.yytext),Z.push(Re.yylloc),J.push(pe[1]),V=null,xe?(V=xe,xe=null):(Oe=Re.yyleng,ce=Re.yytext,ae=Re.yylineno,W=Re.yylloc,ge>0&&ge--);break;case 2:if(Ve=this.productions_[pe[1]][1],_e.$=ue[ue.length-Ve],_e._$={first_line:Z[Z.length-(Ve||1)].first_line,last_line:Z[Z.length-1].last_line,first_column:Z[Z.length-(Ve||1)].first_column,last_column:Z[Z.length-1].last_column},de&&(_e._$.range=[Z[Z.length-(Ve||1)].range[0],Z[Z.length-1].range[1]]),Pe=this.performAction.apply(_e,[ce,Oe,ae,Ie.yy,pe[1],ue,Z].concat($e)),typeof Pe<"u")return Pe;Ve&&(J=J.slice(0,-1*Ve*2),ue=ue.slice(0,-1*Ve),Z=Z.slice(0,-1*Ve)),J.push(this.productions_[pe[1]][0]),ue.push(_e.$),Z.push(_e._$),De=Se[J[J.length-2]][J[J.length-1]],J.push(De);break;case 3:return!0}}return!0},"parse")},le=function(){var K={EOF:1,parseError:o(function(te,J){if(this.yy.parser)this.yy.parser.parseError(te,J);else throw new Error(te)},"parseError"),setInput:o(function(X,te){return this.yy=te||this.yy||{},this._input=X,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var X=this._input[0];this.yytext+=X,this.yyleng++,this.offset++,this.match+=X,this.matched+=X;var te=X.match(/(?:\r\n?|\n).*/g);return te?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),X},"input"),unput:o(function(X){var te=X.length,J=X.split(/(?:\r\n?|\n)/g);this._input=X+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-te),this.offset-=te;var se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),J.length-1&&(this.yylineno-=J.length-1);var ue=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:J?(J.length===se.length?this.yylloc.first_column:0)+se[se.length-J.length].length-J[0].length:this.yylloc.first_column-te},this.options.ranges&&(this.yylloc.range=[ue[0],ue[0]+this.yyleng-te]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1246 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(X){this.unput(this.match.slice(X))},"less"),pastInput:o(function(){var X=this.matched.substr(0,this.matched.length-this.match.length);return(X.length>20?"...":"")+X.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var X=this.match;return X.length<20&&(X+=this._input.substr(0,20-X.length)),(X.substr(0,20)+(X.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var X=this.pastInput(),te=new Array(X.length+1).join("-");return X+this.upcomingInput()+` | |
| 1247 | +`+te+"^"},"showPosition"),test_match:o(function(X,te){var J,se,ue;if(this.options.backtrack_lexer&&(ue={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ue.yylloc.range=this.yylloc.range.slice(0))),se=X[0].match(/(?:\r\n?|\n).*/g),se&&(this.yylineno+=se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:se?se[se.length-1].length-se[se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+X[0].length},this.yytext+=X[0],this.match+=X[0],this.matches=X,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(X[0].length),this.matched+=X[0],J=this.performAction.call(this,this.yy,this,te,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),J)return J;if(this._backtrack){for(var Z in ue)this[Z]=ue[Z];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var X,te,J,se;this._more||(this.yytext="",this.match="");for(var ue=this._currentRules(),Z=0;Z<ue.length;Z++)if(J=this._input.match(this.rules[ue[Z]]),J&&(!te||J[0].length>te[0].length)){if(te=J,se=Z,this.options.backtrack_lexer){if(X=this.test_match(J,ue[Z]),X!==!1)return X;if(this._backtrack){te=!1;continue}else return!1}else if(!this.options.flex)break}return te?(X=this.test_match(te,ue[se]),X!==!1?X:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1248 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var te=this.next();return te||this.lex()},"lex"),begin:o(function(te){this.conditionStack.push(te)},"begin"),popState:o(function(){var te=this.conditionStack.length-1;return te>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(te){return te=this.conditionStack.length-1-Math.abs(te||0),te>=0?this.conditionStack[te]:"INITIAL"},"topState"),pushState:o(function(te){this.begin(te)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(te,J,se,ue){var Z=ue;switch(se){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;break;case 8:return this.begin("ID"),50;break;case 9:return this.begin("ID"),52;break;case 10:return 13;case 11:return this.begin("ID"),53;break;case 12:return J.yytext=J.yytext.trim(),this.begin("ALIAS"),70;break;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;break;case 14:return this.popState(),this.popState(),5;break;case 15:return this.begin("LINE"),36;break;case 16:return this.begin("LINE"),37;break;case 17:return this.begin("LINE"),38;break;case 18:return this.begin("LINE"),39;break;case 19:return this.begin("LINE"),49;break;case 20:return this.begin("LINE"),41;break;case 21:return this.begin("LINE"),43;break;case 22:return this.begin("LINE"),48;break;case 23:return this.begin("LINE"),44;break;case 24:return this.begin("LINE"),47;break;case 25:return this.begin("LINE"),46;break;case 26:return this.popState(),15;break;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;break;case 37:return this.begin("ID"),23;break;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;break;case 41:return this.popState(),"acc_title_value";break;case 42:return this.begin("acc_descr"),33;break;case 43:return this.popState(),"acc_descr_value";break;case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return J.yytext=J.yytext.trim(),70;break;case 53:return 73;case 54:return 74;case 55:return 75;case 56:return 76;case 57:return 71;case 58:return 72;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 80;case 63:return 81;case 64:return 68;case 65:return 69;case 66:return 5;case 67:return"INVALID"}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\<->\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\<->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};return K}();ne.lexer=le;function he(){this.yy={}}return o(he,"Parser"),he.prototype=ne,ne.Parser=he,new he}();CO.parser=CO;lfe=CO});var iVe,aVe,sVe,_6,ufe=N(()=>{"use strict";zt();vt();s6();gr();mi();iVe={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},aVe={FILLED:0,OPEN:1},sVe={LEFTOF:0,RIGHTOF:1,OVER:2},_6=class{constructor(){this.state=new pf(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}));this.setAccTitle=Lr;this.setAccDescription=Nr;this.setDiagramTitle=$r;this.getAccTitle=Rr;this.getAccDescription=Mr;this.getDiagramTitle=Ir;this.apply=this.apply.bind(this),this.parseBoxData=this.parseBoxData.bind(this),this.parseMessage=this.parseMessage.bind(this),this.clear(),this.setWrap(me().wrap),this.LINETYPE=iVe,this.ARROWTYPE=aVe,this.PLACEMENT=sVe}static{o(this,"SequenceDB")}addBox(e){this.state.records.boxes.push({name:e.text,wrap:e.wrap??this.autoWrap(),fill:e.color,actorKeys:[]}),this.state.records.currentBox=this.state.records.boxes.slice(-1)[0]}addActor(e,r,n,i){let a=this.state.records.currentBox,s=this.state.records.actors.get(e);if(s){if(this.state.records.currentBox&&s.box&&this.state.records.currentBox!==s.box)throw new Error(`A same participant should only be defined in one Box: ${s.name} can't be in '${s.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`);if(a=s.box?s.box:this.state.records.currentBox,s.box=a,s&&r===s.name&&n==null)return}if(n?.text==null&&(n={text:r,type:i}),(i==null||n.text==null)&&(n={text:r,type:i}),this.state.records.actors.set(e,{box:a,name:r,description:n.text,wrap:n.wrap??this.autoWrap(),prevActor:this.state.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:i??"participant"}),this.state.records.prevActor){let l=this.state.records.actors.get(this.state.records.prevActor);l&&(l.nextActor=e)}this.state.records.currentBox&&this.state.records.currentBox.actorKeys.push(e),this.state.records.prevActor=e}activationCount(e){let r,n=0;if(!e)return 0;for(r=0;r<this.state.records.messages.length;r++)this.state.records.messages[r].type===this.LINETYPE.ACTIVE_START&&this.state.records.messages[r].from===e&&n++,this.state.records.messages[r].type===this.LINETYPE.ACTIVE_END&&this.state.records.messages[r].from===e&&n--;return n}addMessage(e,r,n,i){this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:n.text,wrap:n.wrap??this.autoWrap(),answer:i})}addSignal(e,r,n,i,a=!1){if(i===this.LINETYPE.ACTIVE_END&&this.activationCount(e??"")<1){let l=new Error("Trying to inactivate an inactive participant ("+e+")");throw l.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},l}return this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:n?.text??"",wrap:n?.wrap??this.autoWrap(),type:i,activate:a}),!0}hasAtLeastOneBox(){return this.state.records.boxes.length>0}hasAtLeastOneBoxWithTitle(){return this.state.records.boxes.some(e=>e.name)}getMessages(){return this.state.records.messages}getBoxes(){return this.state.records.boxes}getActors(){return this.state.records.actors}getCreatedActors(){return this.state.records.createdActors}getDestroyedActors(){return this.state.records.destroyedActors}getActor(e){return this.state.records.actors.get(e)}getActorKeys(){return[...this.state.records.actors.keys()]}enableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!0}disableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!1}showSequenceNumbers(){return this.state.records.sequenceNumbersEnabled}setWrap(e){this.state.records.wrapEnabled=e}extractWrap(e){if(e===void 0)return{};e=e.trim();let r=/^:?wrap:/.exec(e)!==null?!0:/^:?nowrap:/.exec(e)!==null?!1:void 0;return{cleanedText:(r===void 0?e:e.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:r}}autoWrap(){return this.state.records.wrapEnabled!==void 0?this.state.records.wrapEnabled:me().sequence?.wrap??!1}clear(){this.state.reset(),Ar()}parseMessage(e){let r=e.trim(),{wrap:n,cleanedText:i}=this.extractWrap(r),a={text:i,wrap:n};return Y.debug(`parseMessage: ${JSON.stringify(a)}`),a}parseBoxData(e){let r=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(e),n=r?.[1]?r[1].trim():"transparent",i=r?.[2]?r[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",n)||(n="transparent",i=e.trim());else{let l=new Option().style;l.color=n,l.color!==n&&(n="transparent",i=e.trim())}let{wrap:a,cleanedText:s}=this.extractWrap(i);return{text:s?Tr(s,me()):void 0,color:n,wrap:a}}addNote(e,r,n){let i={actor:e,placement:r,message:n.text,wrap:n.wrap??this.autoWrap()},a=[].concat(e,e);this.state.records.notes.push(i),this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:a[0],to:a[1],message:n.text,wrap:n.wrap??this.autoWrap(),type:this.LINETYPE.NOTE,placement:r})}addLinks(e,r){let n=this.getActor(e);try{let i=Tr(r.text,me());i=i.replace(/=/g,"="),i=i.replace(/&/g,"&");let a=JSON.parse(i);this.insertLinks(n,a)}catch(i){Y.error("error while parsing actor link text",i)}}addALink(e,r){let n=this.getActor(e);try{let i={},a=Tr(r.text,me()),s=a.indexOf("@");a=a.replace(/=/g,"="),a=a.replace(/&/g,"&");let l=a.slice(0,s-1).trim(),u=a.slice(s+1).trim();i[l]=u,this.insertLinks(n,i)}catch(i){Y.error("error while parsing actor link text",i)}}insertLinks(e,r){if(e.links==null)e.links=r;else for(let n in r)e.links[n]=r[n]}addProperties(e,r){let n=this.getActor(e);try{let i=Tr(r.text,me()),a=JSON.parse(i);this.insertProperties(n,a)}catch(i){Y.error("error while parsing actor properties text",i)}}insertProperties(e,r){if(e.properties==null)e.properties=r;else for(let n in r)e.properties[n]=r[n]}boxEnd(){this.state.records.currentBox=void 0}addDetails(e,r){let n=this.getActor(e),i=document.getElementById(r.text);try{let a=i.innerHTML,s=JSON.parse(a);s.properties&&this.insertProperties(n,s.properties),s.links&&this.insertLinks(n,s.links)}catch(a){Y.error("error while parsing actor details text",a)}}getActorProperty(e,r){if(e?.properties!==void 0)return e.properties[r]}apply(e){if(Array.isArray(e))e.forEach(r=>{this.apply(r)});else switch(e.type){case"sequenceIndex":this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:void 0,to:void 0,message:{start:e.sequenceIndex,step:e.sequenceIndexStep,visible:e.sequenceVisible},wrap:!1,type:e.signalType});break;case"addParticipant":this.addActor(e.actor,e.actor,e.description,e.draw);break;case"createParticipant":if(this.state.records.actors.has(e.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");this.state.records.lastCreated=e.actor,this.addActor(e.actor,e.actor,e.description,e.draw),this.state.records.createdActors.set(e.actor,this.state.records.messages.length);break;case"destroyParticipant":this.state.records.lastDestroyed=e.actor,this.state.records.destroyedActors.set(e.actor,this.state.records.messages.length);break;case"activeStart":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"activeEnd":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"addNote":this.addNote(e.actor,e.placement,e.text);break;case"addLinks":this.addLinks(e.actor,e.text);break;case"addALink":this.addALink(e.actor,e.text);break;case"addProperties":this.addProperties(e.actor,e.text);break;case"addDetails":this.addDetails(e.actor,e.text);break;case"addMessage":if(this.state.records.lastCreated){if(e.to!==this.state.records.lastCreated)throw new Error("The created participant "+this.state.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");this.state.records.lastCreated=void 0}else if(this.state.records.lastDestroyed){if(e.to!==this.state.records.lastDestroyed&&e.from!==this.state.records.lastDestroyed)throw new Error("The destroyed participant "+this.state.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");this.state.records.lastDestroyed=void 0}this.addSignal(e.from,e.to,e.msg,e.signalType,e.activate);break;case"boxStart":this.addBox(e.boxData);break;case"boxEnd":this.boxEnd();break;case"loopStart":this.addSignal(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"rectStart":this.addSignal(void 0,void 0,e.color,e.signalType);break;case"rectEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"optStart":this.addSignal(void 0,void 0,e.optText,e.signalType);break;case"optEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"altStart":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"else":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"altEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"setAccTitle":Lr(e.text);break;case"parStart":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"and":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"parEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"criticalStart":this.addSignal(void 0,void 0,e.criticalText,e.signalType);break;case"option":this.addSignal(void 0,void 0,e.optionText,e.signalType);break;case"criticalEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"breakStart":this.addSignal(void 0,void 0,e.breakText,e.signalType);break;case"breakEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break}}getConfig(){return me().sequence}}});var oVe,hfe,ffe=N(()=>{"use strict";oVe=o(t=>`.actor { | |
| 1249 | + stroke: ${t.actorBorder}; | |
| 1250 | + fill: ${t.actorBkg}; | |
| 1251 | + } | |
| 1252 | + | |
| 1253 | + text.actor > tspan { | |
| 1254 | + fill: ${t.actorTextColor}; | |
| 1255 | + stroke: none; | |
| 1256 | + } | |
| 1257 | + | |
| 1258 | + .actor-line { | |
| 1259 | + stroke: ${t.actorLineColor}; | |
| 1260 | + } | |
| 1261 | + | |
| 1262 | + .messageLine0 { | |
| 1263 | + stroke-width: 1.5; | |
| 1264 | + stroke-dasharray: none; | |
| 1265 | + stroke: ${t.signalColor}; | |
| 1266 | + } | |
| 1267 | + | |
| 1268 | + .messageLine1 { | |
| 1269 | + stroke-width: 1.5; | |
| 1270 | + stroke-dasharray: 2, 2; | |
| 1271 | + stroke: ${t.signalColor}; | |
| 1272 | + } | |
| 1273 | + | |
| 1274 | + #arrowhead path { | |
| 1275 | + fill: ${t.signalColor}; | |
| 1276 | + stroke: ${t.signalColor}; | |
| 1277 | + } | |
| 1278 | + | |
| 1279 | + .sequenceNumber { | |
| 1280 | + fill: ${t.sequenceNumberColor}; | |
| 1281 | + } | |
| 1282 | + | |
| 1283 | + #sequencenumber { | |
| 1284 | + fill: ${t.signalColor}; | |
| 1285 | + } | |
| 1286 | + | |
| 1287 | + #crosshead path { | |
| 1288 | + fill: ${t.signalColor}; | |
| 1289 | + stroke: ${t.signalColor}; | |
| 1290 | + } | |
| 1291 | + | |
| 1292 | + .messageText { | |
| 1293 | + fill: ${t.signalTextColor}; | |
| 1294 | + stroke: none; | |
| 1295 | + } | |
| 1296 | + | |
| 1297 | + .labelBox { | |
| 1298 | + stroke: ${t.labelBoxBorderColor}; | |
| 1299 | + fill: ${t.labelBoxBkgColor}; | |
| 1300 | + } | |
| 1301 | + | |
| 1302 | + .labelText, .labelText > tspan { | |
| 1303 | + fill: ${t.labelTextColor}; | |
| 1304 | + stroke: none; | |
| 1305 | + } | |
| 1306 | + | |
| 1307 | + .loopText, .loopText > tspan { | |
| 1308 | + fill: ${t.loopTextColor}; | |
| 1309 | + stroke: none; | |
| 1310 | + } | |
| 1311 | + | |
| 1312 | + .loopLine { | |
| 1313 | + stroke-width: 2px; | |
| 1314 | + stroke-dasharray: 2, 2; | |
| 1315 | + stroke: ${t.labelBoxBorderColor}; | |
| 1316 | + fill: ${t.labelBoxBorderColor}; | |
| 1317 | + } | |
| 1318 | + | |
| 1319 | + .note { | |
| 1320 | + //stroke: #decc93; | |
| 1321 | + stroke: ${t.noteBorderColor}; | |
| 1322 | + fill: ${t.noteBkgColor}; | |
| 1323 | + } | |
| 1324 | + | |
| 1325 | + .noteText, .noteText > tspan { | |
| 1326 | + fill: ${t.noteTextColor}; | |
| 1327 | + stroke: none; | |
| 1328 | + } | |
| 1329 | + | |
| 1330 | + .activation0 { | |
| 1331 | + fill: ${t.activationBkgColor}; | |
| 1332 | + stroke: ${t.activationBorderColor}; | |
| 1333 | + } | |
| 1334 | + | |
| 1335 | + .activation1 { | |
| 1336 | + fill: ${t.activationBkgColor}; | |
| 1337 | + stroke: ${t.activationBorderColor}; | |
| 1338 | + } | |
| 1339 | + | |
| 1340 | + .activation2 { | |
| 1341 | + fill: ${t.activationBkgColor}; | |
| 1342 | + stroke: ${t.activationBorderColor}; | |
| 1343 | + } | |
| 1344 | + | |
| 1345 | + .actorPopupMenu { | |
| 1346 | + position: absolute; | |
| 1347 | + } | |
| 1348 | + | |
| 1349 | + .actorPopupMenuPanel { | |
| 1350 | + position: absolute; | |
| 1351 | + fill: ${t.actorBkg}; | |
| 1352 | + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); | |
| 1353 | + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); | |
| 1354 | +} | |
| 1355 | + .actor-man line { | |
| 1356 | + stroke: ${t.actorBorder}; | |
| 1357 | + fill: ${t.actorBkg}; | |
| 1358 | + } | |
| 1359 | + .actor-man circle, line { | |
| 1360 | + stroke: ${t.actorBorder}; | |
| 1361 | + fill: ${t.actorBkg}; | |
| 1362 | + stroke-width: 2px; | |
| 1363 | + } | |
| 1364 | +`,"getStyles"),hfe=oVe});var AO,vf,pfe,mfe,lVe,dfe,_O,cVe,uVe,Tb,_p,gfe,Uc,DO,hVe,fVe,dVe,pVe,mVe,gVe,yVe,yfe,vVe,xVe,bVe,wVe,TVe,kVe,EVe,vfe,SVe,LO,CVe,hi,xfe=N(()=>{"use strict";gr();Wv();ir();AO=Sa(z0(),1);ji();vf=18*2,pfe="actor-top",mfe="actor-bottom",lVe="actor-box",dfe="actor-man",_O=o(function(t,e){return kd(t,e)},"drawRect"),cVe=o(function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";i&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,AO.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),CVe(n)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},n),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),uVe=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),Tb=o(async function(t,e,r=null){let n=t.append("foreignObject"),i=await mh(e.text,cr()),s=n.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(n.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();n.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}n.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?n.attr("y",Math.round(h)):n.attr("y",Math.round(h-s.height))}return[n]},"drawKatex"),_p=o(function(t,e){let r=0,n=0,i=e.text.split(Ze.lineBreakRegex),[a,s]=Bo(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+n+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of i.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||H9;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(n+=(p._groups||p)[0][0].getBBox().height,r=n),l.push(p)}return l},"drawText"),gfe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,_p(t,e),n},"drawLabel"),Uc=-1,DO=o((t,e,r,n)=>{t.select&&r.forEach(i=>{let a=e.get(i),s=t.select("#actor"+a.actorCnt);!n.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):n.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),hVe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower();var u=l;n||(Uc++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",uVe(`actor${Uc}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Uc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Uc,e.links!=null&&u.attr("id","root-"+Uc));let h=Tl();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${mfe}`:f+=` ${pfe}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.rx=3,h.ry=3,h.name=e.name;let d=_O(u,h);if(e.rectData=h,e.properties?.icon){let m=e.properties.icon.trim();m.charAt(0)==="@"?Iq(u,h.x+h.width-20,h.y+10,m.substr(1)):Mq(u,h.x+h.width-20,h.y+10,m)}LO(r,pi(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${lVe}`},r);let p=e.height;if(d.node){let m=d.node().getBBox();e.height=m.height,p=m.height}return p},"drawActorTypeParticipant"),fVe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=t.append("g").lower();n||(Uc++,l.append("line").attr("id","actor"+Uc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Uc);let u=t.append("g"),h=dfe;n?h+=` ${mfe}`:h+=` ${pfe}`,u.attr("class",h),u.attr("name",e.name);let f=Tl();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,u.append("line").attr("id","actor-man-torso"+Uc).attr("x1",a).attr("y1",i+25).attr("x2",a).attr("y2",i+45),u.append("line").attr("id","actor-man-arms"+Uc).attr("x1",a-vf/2).attr("y1",i+33).attr("x2",a+vf/2).attr("y2",i+33),u.append("line").attr("x1",a-vf/2).attr("y1",i+60).attr("x2",a).attr("y2",i+45),u.append("line").attr("x1",a).attr("y1",i+45).attr("x2",a+vf/2-2).attr("y2",i+60);let d=u.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",i+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);let p=u.node().getBBox();return e.height=p.height,LO(r,pi(e.description))(e.description,u,f.x,f.y+35,f.width,f.height,{class:`actor ${dfe}`},r),e.height},"drawActorTypeActor"),dVe=o(async function(t,e,r,n){switch(e.type){case"actor":return await fVe(t,e,r,n);case"participant":return await hVe(t,e,r,n)}},"drawActor"),pVe=o(function(t,e,r){let i=t.append("g");yfe(i,e),e.name&&LO(r)(e.name,i,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),i.lower()},"drawBox"),mVe=o(function(t){return t.append("g")},"anchorElement"),gVe=o(function(t,e,r,n,i){let a=Tl(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,_O(s,a)},"drawActivation"),yVe=o(async function(t,e,r,n){let{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:l,messageFontFamily:u,messageFontSize:h,messageFontWeight:f}=n,d=t.append("g"),p=o(function(y,v,x,b){return d.append("line").attr("x1",y).attr("y1",v).attr("x2",x).attr("y2",b).attr("class","loopLine")},"drawLoopLine");p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(y){p(e.startx,y.y,e.stopx,y.y).style("stroke-dasharray","3, 3")});let m=Hv();m.text=r,m.x=e.startx,m.y=e.starty,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=l||50,m.height=s||20,m.textMargin=a,m.class="labelText",gfe(d,m),m=vfe(),m.text=e.title,m.x=e.startx+l/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=!0;let g=pi(m.text)?await Tb(d,m,e):_p(d,m);if(e.sectionTitles!==void 0){for(let[y,v]of Object.entries(e.sectionTitles))if(v.message){m.text=v.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[y].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=e.wrap,pi(m.text)?(e.starty=e.sections[y].y,await Tb(d,m,e)):_p(d,m);let x=Math.round(g.map(b=>(b._groups||b)[0][0].getBBox().height).reduce((b,w)=>b+w));e.sections[y].height+=x-(i+a)}}return e.height=Math.round(e.stopy-e.starty),d},"drawLoop"),yfe=o(function(t,e){q5(t,e)},"drawBackgroundRect"),vVe=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),xVe=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),bVe=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),wVe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),TVe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),kVe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),EVe=o(function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),vfe=o(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),SVe=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),LO=function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);i(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=Bo(m),b=a.split(Ze.lineBreakRegex);for(let w=0;w<b.length;w++){let C=w*v-v*(b.length-1)/2,T=s.append("text").attr("x",l+h/2).attr("y",u).style("text-anchor","middle").style("font-size",x).style("font-weight",y).style("font-family",g);T.append("tspan").attr("x",l+h/2).attr("dy",C).text(b[w]),T.attr("y",u+f/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(T,d)}}o(e,"byTspan");function r(a,s,l,u,h,f,d,p){let m=s.append("switch"),y=m.append("foreignObject").attr("x",l).attr("y",u).attr("width",h).attr("height",f).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");y.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(a),e(a,m,l,u,h,f,d,p),i(y,d)}o(r,"byFo");async function n(a,s,l,u,h,f,d,p){let m=await id(a,cr()),g=s.append("switch"),v=g.append("foreignObject").attr("x",l+h/2-m.width/2).attr("y",u+f/2-m.height/2).attr("width",m.width).attr("height",m.height).append("xhtml:div").style("height","100%").style("width","100%");v.append("div").style("text-align","center").style("vertical-align","middle").html(await mh(a,cr())),e(a,g,l,u,h,f,d,p),i(v,d)}o(n,"byKatex");function i(a,s){for(let l in s)s.hasOwnProperty(l)&&a.attr(l,s[l])}return o(i,"_setTextAttrs"),function(a,s=!1){return s?n:a.textPlacement==="fo"?r:a.textPlacement==="old"?t:e}}(),CVe=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s).attr("y",l).style("text-anchor","start").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{actorFontSize:p,actorFontFamily:m,actorFontWeight:g}=d,y=i.split(Ze.lineBreakRegex);for(let v=0;v<y.length;v++){let x=v*p-p*(y.length-1)/2,b=a.append("text").attr("x",s).attr("y",l).style("text-anchor","start").style("font-size",p).style("font-weight",g).style("font-family",m);b.append("tspan").attr("x",s).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)a.hasOwnProperty(s)&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),hi={drawRect:_O,drawText:_p,drawLabel:gfe,drawActor:dVe,drawBox:pVe,drawPopup:cVe,anchorElement:mVe,drawActivation:gVe,drawLoop:yVe,drawBackgroundRect:yfe,insertArrowHead:wVe,insertArrowFilledHead:TVe,insertSequenceNumber:kVe,insertArrowCrossHead:EVe,insertDatabaseIcon:vVe,insertComputerIcon:xVe,insertClockIcon:bVe,getTextObj:vfe,getNoteRect:SVe,fixLifeLineHeights:DO,sanitizeUrl:AO.sanitizeUrl}});async function _Ve(t,e){rt.bumpVerticalPos(10);let{startx:r,stopx:n,message:i}=e,a=Ze.splitBreaks(i).length,s=pi(i),l=s?await id(i,me()):Gt.calculateTextDimensions(i,Dp(Ne));if(!s){let d=l.height/a;e.height+=d,rt.bumpVerticalPos(d)}let u,h=l.height-10,f=l.width;if(r===n){u=rt.getVerticalPos()+h,Ne.rightAngles||(h+=Ne.boxMargin,u=rt.getVerticalPos()+h),h+=30;let d=Ze.getMax(f/2,Ne.width/2);rt.insert(r-d,rt.getVerticalPos()-10+h,n+d,rt.getVerticalPos()+30+h)}else h+=Ne.boxMargin,u=rt.getVerticalPos()+h,rt.insert(r,u-10,n,u);return rt.bumpVerticalPos(h),e.height+=h,e.stopy=e.starty+e.height,rt.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),u}function Hc(t,e,r,n,i){rt.bumpVerticalPos(r);let a=n;if(e.id&&e.message&&t[e.id]){let s=t[e.id].width,l=Dp(Ne);e.message=Gt.wrapLabel(`[${e.message}]`,s-2*Ne.wrapPadding,l),e.width=s,e.wrap=!0;let u=Gt.calculateTextDimensions(e.message,l),h=Ze.getMax(u.height,Ne.labelBoxHeight);a=n+h,Y.debug(`${h} - ${e.message}`)}i(e),rt.bumpVerticalPos(a)}function RVe(t,e,r,n,i,a,s){function l(h,f){h.x<i.get(t.from).x?(rt.insert(e.stopx-f,e.starty,e.startx,e.stopy+h.height/2+Ne.noteMargin),e.stopx=e.stopx+f):(rt.insert(e.startx,e.starty,e.stopx+f,e.stopy+h.height/2+Ne.noteMargin),e.stopx=e.stopx-f)}o(l,"receiverAdjustment");function u(h,f){h.x<i.get(t.to).x?(rt.insert(e.startx-f,e.starty,e.stopx,e.stopy+h.height/2+Ne.noteMargin),e.startx=e.startx+f):(rt.insert(e.stopx,e.starty,e.startx+f,e.stopy+h.height/2+Ne.noteMargin),e.startx=e.startx-f)}if(o(u,"senderAdjustment"),a.get(t.to)==n){let h=i.get(t.to),f=h.type=="actor"?vf/2+3:h.width/2+3;l(h,f),h.starty=r-h.height/2,rt.bumpVerticalPos(h.height/2)}else if(s.get(t.from)==n){let h=i.get(t.from);if(Ne.mirrorActors){let f=h.type=="actor"?vf/2:h.width/2;u(h,f)}h.stopy=r-h.height/2,rt.bumpVerticalPos(h.height/2)}else if(s.get(t.to)==n){let h=i.get(t.to);if(Ne.mirrorActors){let f=h.type=="actor"?vf/2+3:h.width/2+3;l(h,f)}h.stopy=r-h.height/2,rt.bumpVerticalPos(h.height/2)}}async function MVe(t,e,r){let n={};for(let i of e)if(t.get(i.to)&&t.get(i.from)){let a=t.get(i.to);if(i.placement===r.db.PLACEMENT.LEFTOF&&!a.prevActor||i.placement===r.db.PLACEMENT.RIGHTOF&&!a.nextActor)continue;let s=i.placement!==void 0,l=!s,u=s?_1(Ne):Dp(Ne),h=i.wrap?Gt.wrapLabel(i.message,Ne.width-2*Ne.wrapPadding,u):i.message,d=(pi(h)?await id(i.message,me()):Gt.calculateTextDimensions(h,u)).width+2*Ne.wrapPadding;l&&i.from===a.nextActor?n[i.to]=Ze.getMax(n[i.to]||0,d):l&&i.from===a.prevActor?n[i.from]=Ze.getMax(n[i.from]||0,d):l&&i.from===i.to?(n[i.from]=Ze.getMax(n[i.from]||0,d/2),n[i.to]=Ze.getMax(n[i.to]||0,d/2)):i.placement===r.db.PLACEMENT.RIGHTOF?n[i.from]=Ze.getMax(n[i.from]||0,d):i.placement===r.db.PLACEMENT.LEFTOF?n[a.prevActor]=Ze.getMax(n[a.prevActor]||0,d):i.placement===r.db.PLACEMENT.OVER&&(a.prevActor&&(n[a.prevActor]=Ze.getMax(n[a.prevActor]||0,d/2)),a.nextActor&&(n[i.from]=Ze.getMax(n[i.from]||0,d/2)))}return Y.debug("maxMessageWidthPerActor:",n),n}async function OVe(t,e,r){let n=0;for(let a of t.keys()){let s=t.get(a);s.wrap&&(s.description=Gt.wrapLabel(s.description,Ne.width-2*Ne.wrapPadding,RO(Ne)));let l=pi(s.description)?await id(s.description,me()):Gt.calculateTextDimensions(s.description,RO(Ne));s.width=s.wrap?Ne.width:Ze.getMax(Ne.width,l.width+2*Ne.wrapPadding),s.height=s.wrap?Ze.getMax(l.height,Ne.height):Ne.height,n=Ze.getMax(n,s.height)}for(let a in e){let s=t.get(a);if(!s)continue;let l=t.get(s.nextActor);if(!l){let d=e[a]+Ne.actorMargin-s.width/2;s.margin=Ze.getMax(d,Ne.actorMargin);continue}let h=e[a]+Ne.actorMargin-s.width/2-l.width/2;s.margin=Ze.getMax(h,Ne.actorMargin)}let i=0;return r.forEach(a=>{let s=Dp(Ne),l=a.actorKeys.reduce((f,d)=>f+=t.get(d).width+(t.get(d).margin||0),0);l-=2*Ne.boxTextMargin,a.wrap&&(a.name=Gt.wrapLabel(a.name,l-2*Ne.wrapPadding,s));let u=Gt.calculateTextDimensions(a.name,s);i=Ze.getMax(u.height,i);let h=Ze.getMax(l,u.width+2*Ne.wrapPadding);if(a.margin=Ne.boxTextMargin,l<h){let f=(h-l)/2;a.margin+=f}}),r.forEach(a=>a.textMaxHeight=i),Ze.getMax(n,Ne.height)}var Ne,rt,AVe,Dp,_1,RO,DVe,LVe,NO,wfe,Tfe,D6,bfe,NVe,IVe,PVe,BVe,FVe,kfe,Efe=N(()=>{"use strict";dr();xfe();vt();gr();Wv();zt();s0();ir();Ei();Ne={},rt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,Tfe(me())},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=this,a=0;function s(l){return o(function(h){a++;let f=i.sequenceItems.length-a+1;i.updateVal(h,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopy",n+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopx",r+f*Ne.boxMargin,Math.max),l!=="activation"&&(i.updateVal(h,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopx",r+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopy",n+f*Ne.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,n){let i=Ze.getMin(t,r),a=Ze.getMax(t,r),s=Ze.getMin(e,n),l=Ze.getMax(e,n);this.updateVal(rt.data,"startx",i,Math.min),this.updateVal(rt.data,"starty",s,Math.min),this.updateVal(rt.data,"stopx",a,Math.max),this.updateVal(rt.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),newActivation:o(function(t,e,r){let n=r.get(t.from),i=D6(t.from).length||0,a=n.x+n.width/2+(i-1)*Ne.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Ne.activationWidth,stopy:void 0,actor:t.from,anchored:hi.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:rt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=Ze.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},AVe=o(async function(t,e){rt.bumpVerticalPos(Ne.boxMargin),e.height=Ne.boxMargin,e.starty=rt.getVerticalPos();let r=Tl();r.x=e.startx,r.y=e.starty,r.width=e.width||Ne.width,r.class="note";let n=t.append("g"),i=hi.drawRect(n,r),a=Hv();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Ne.noteFontFamily,a.fontSize=Ne.noteFontSize,a.fontWeight=Ne.noteFontWeight,a.anchor=Ne.noteAlign,a.textMargin=Ne.noteMargin,a.valign="center";let s=pi(a.text)?await Tb(n,a):_p(n,a),l=Math.round(s.map(u=>(u._groups||u)[0][0].getBBox().height).reduce((u,h)=>u+h));i.attr("height",l+2*Ne.noteMargin),e.height+=l+2*Ne.noteMargin,rt.bumpVerticalPos(l+2*Ne.noteMargin),e.stopy=e.starty+l+2*Ne.noteMargin,e.stopx=e.startx+r.width,rt.insert(e.startx,e.starty,e.stopx,e.stopy),rt.models.addNote(e)},"drawNote"),Dp=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),_1=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),RO=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(_Ve,"boundMessage");DVe=o(async function(t,e,r,n){let{startx:i,stopx:a,starty:s,message:l,type:u,sequenceIndex:h,sequenceVisible:f}=e,d=Gt.calculateTextDimensions(l,Dp(Ne)),p=Hv();p.x=i,p.y=s+10,p.width=a-i,p.class="messageText",p.dy="1em",p.text=l,p.fontFamily=Ne.messageFontFamily,p.fontSize=Ne.messageFontSize,p.fontWeight=Ne.messageFontWeight,p.anchor=Ne.messageAlign,p.valign="center",p.textMargin=Ne.wrapPadding,p.tspan=!1,pi(p.text)?await Tb(t,p,{startx:i,stopx:a,starty:r}):_p(t,p);let m=d.width,g;i===a?Ne.rightAngles?g=t.append("path").attr("d",`M ${i},${r} H ${i+Ze.getMax(Ne.width/2,m/2)} V ${r+25} H ${i}`):g=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(g=t.append("line"),g.attr("x1",i),g.attr("y1",r),g.attr("x2",a),g.attr("y2",r)),u===n.db.LINETYPE.DOTTED||u===n.db.LINETYPE.DOTTED_CROSS||u===n.db.LINETYPE.DOTTED_POINT||u===n.db.LINETYPE.DOTTED_OPEN||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED?(g.style("stroke-dasharray","3, 3"),g.attr("class","messageLine1")):g.attr("class","messageLine0");let y="";Ne.arrowMarkerAbsolute&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),g.attr("stroke-width",2),g.attr("stroke","none"),g.style("fill","none"),(u===n.db.LINETYPE.SOLID||u===n.db.LINETYPE.DOTTED)&&g.attr("marker-end","url("+y+"#arrowhead)"),(u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(g.attr("marker-start","url("+y+"#arrowhead)"),g.attr("marker-end","url("+y+"#arrowhead)")),(u===n.db.LINETYPE.SOLID_POINT||u===n.db.LINETYPE.DOTTED_POINT)&&g.attr("marker-end","url("+y+"#filled-head)"),(u===n.db.LINETYPE.SOLID_CROSS||u===n.db.LINETYPE.DOTTED_CROSS)&&g.attr("marker-end","url("+y+"#crosshead)"),(f||Ne.showSequenceNumbers)&&(g.attr("marker-start","url("+y+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},"drawMessage"),LVe=o(function(t,e,r,n,i,a,s){let l=0,u=0,h,f=0;for(let d of n){let p=e.get(d),m=p.box;h&&h!=m&&(s||rt.models.addBox(h),u+=Ne.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=i),u+=m.margin),p.width=p.width||Ne.width,p.height=Ze.getMax(p.height||Ne.height,Ne.height),p.margin=p.margin||Ne.actorMargin,f=Ze.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=rt.getVerticalPos(),rt.insert(p.x,i,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,rt.models.addActor(p)}h&&!s&&rt.models.addBox(h),rt.bumpVerticalPos(f)},"addActorRenderingData"),NO=o(async function(t,e,r,n){if(n){let i=0;rt.bumpVerticalPos(Ne.boxMargin*2);for(let a of r){let s=e.get(a);s.stopy||(s.stopy=rt.getVerticalPos());let l=await hi.drawActor(t,s,Ne,!0);i=Ze.getMax(i,l)}rt.bumpVerticalPos(i+Ne.boxMargin)}else for(let i of r){let a=e.get(i);await hi.drawActor(t,a,Ne,!1)}},"drawActors"),wfe=o(function(t,e,r,n){let i=0,a=0;for(let s of r){let l=e.get(s),u=IVe(l),h=hi.drawPopup(t,l,u,Ne,Ne.forceMenus,n);h.height>i&&(i=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:i,maxWidth:a}},"drawActorsPopup"),Tfe=o(function(t){Gn(Ne,t),t.fontFamily&&(Ne.actorFontFamily=Ne.noteFontFamily=Ne.messageFontFamily=t.fontFamily),t.fontSize&&(Ne.actorFontSize=Ne.noteFontSize=Ne.messageFontSize=t.fontSize),t.fontWeight&&(Ne.actorFontWeight=Ne.noteFontWeight=Ne.messageFontWeight=t.fontWeight)},"setConf"),D6=o(function(t){return rt.activations.filter(function(e){return e.actor===t})},"actorActivations"),bfe=o(function(t,e){let r=e.get(t),n=D6(t),i=n.reduce(function(s,l){return Ze.getMin(s,l.startx)},r.x+r.width/2-1),a=n.reduce(function(s,l){return Ze.getMax(s,l.stopx)},r.x+r.width/2+1);return[i,a]},"activationBounds");o(Hc,"adjustLoopHeightForWrap");o(RVe,"adjustCreatedDestroyedData");NVe=o(async function(t,e,r,n){let{securityLevel:i,sequence:a}=me();Ne=a;let s;i==="sandbox"&&(s=Ge("#i"+e));let l=i==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=i==="sandbox"?s.nodes()[0].contentDocument:document;rt.init(),Y.debug(n.db);let h=i==="sandbox"?l.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=n.db.getActors(),d=n.db.getCreatedActors(),p=n.db.getDestroyedActors(),m=n.db.getBoxes(),g=n.db.getActorKeys(),y=n.db.getMessages(),v=n.db.getDiagramTitle(),x=n.db.hasAtLeastOneBox(),b=n.db.hasAtLeastOneBoxWithTitle(),w=await MVe(f,y,n);if(Ne.height=await OVe(f,w,m),hi.insertComputerIcon(h),hi.insertDatabaseIcon(h),hi.insertClockIcon(h),x&&(rt.bumpVerticalPos(Ne.boxMargin),b&&rt.bumpVerticalPos(m[0].textMaxHeight)),Ne.hideUnusedParticipants===!0){let F=new Set;y.forEach(P=>{F.add(P.from),F.add(P.to)}),g=g.filter(P=>F.has(P))}LVe(h,f,d,g,0,y,!1);let C=await FVe(y,f,w,n);hi.insertArrowHead(h),hi.insertArrowCrossHead(h),hi.insertArrowFilledHead(h),hi.insertSequenceNumber(h);function T(F,P){let z=rt.endActivation(F);z.starty+18>P&&(z.starty=P-6,P+=12),hi.drawActivation(h,z,P,Ne,D6(F.from).length),rt.insert(z.startx,P-10,z.stopx,P)}o(T,"activeEnd");let E=1,A=1,S=[],_=[],I=0;for(let F of y){let P,z,$;switch(F.type){case n.db.LINETYPE.NOTE:rt.resetVerticalPos(),z=F.noteModel,await AVe(h,z);break;case n.db.LINETYPE.ACTIVE_START:rt.newActivation(F,h,f);break;case n.db.LINETYPE.ACTIVE_END:T(F,rt.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.LOOP_END:P=rt.endLoop(),await hi.drawLoop(h,P,"loop",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.RECT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin,H=>rt.newLoop(void 0,H.message));break;case n.db.LINETYPE.RECT_END:P=rt.endLoop(),_.push(P),rt.models.addLoop(P),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos());break;case n.db.LINETYPE.OPT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.OPT_END:P=rt.endLoop(),await hi.drawLoop(h,P,"opt",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.ALT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.ALT_ELSE:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.ALT_END:P=rt.endLoop(),await hi.drawLoop(h,P,"alt",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H)),rt.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.PAR_END:P=rt.endLoop(),await hi.drawLoop(h,P,"par",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.AUTONUMBER:E=F.message.start||E,A=F.message.step||A,F.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.CRITICAL_OPTION:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.CRITICAL_END:P=rt.endLoop(),await hi.drawLoop(h,P,"critical",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.BREAK_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.BREAK_END:P=rt.endLoop(),await hi.drawLoop(h,P,"break",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;default:try{$=F.msgModel,$.starty=rt.getVerticalPos(),$.sequenceIndex=E,$.sequenceVisible=n.db.showSequenceNumbers();let H=await _Ve(h,$);RVe(F,$,H,I,f,d,p),S.push({messageModel:$,lineStartY:H}),rt.models.addMessage($)}catch(H){Y.error("error while drawing message",H)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT,n.db.LINETYPE.BIDIRECTIONAL_SOLID,n.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(F.type)&&(E=E+A),I++}Y.debug("createdActors",d),Y.debug("destroyedActors",p),await NO(h,f,g,!1);for(let F of S)await DVe(h,F.messageModel,F.lineStartY,n);Ne.mirrorActors&&await NO(h,f,g,!0),_.forEach(F=>hi.drawBackgroundRect(h,F)),DO(h,f,g,Ne);for(let F of rt.models.boxes)F.height=rt.getVerticalPos()-F.y,rt.insert(F.x,F.y,F.x+F.width,F.height),F.startx=F.x,F.starty=F.y,F.stopx=F.startx+F.width,F.stopy=F.starty+F.height,F.stroke="rgb(0,0,0, 0.5)",hi.drawBox(h,F,Ne);x&&rt.bumpVerticalPos(Ne.boxMargin);let D=wfe(h,f,g,u),{bounds:k}=rt.getBounds();k.startx===void 0&&(k.startx=0),k.starty===void 0&&(k.starty=0),k.stopx===void 0&&(k.stopx=0),k.stopy===void 0&&(k.stopy=0);let L=k.stopy-k.starty;L<D.maxHeight&&(L=D.maxHeight);let R=L+2*Ne.diagramMarginY;Ne.mirrorActors&&(R=R-Ne.boxMargin+Ne.bottomMarginAdj);let O=k.stopx-k.startx;O<D.maxWidth&&(O=D.maxWidth);let M=O+2*Ne.diagramMarginX;v&&h.append("text").text(v).attr("x",(k.stopx-k.startx)/2-2*Ne.diagramMarginX).attr("y",-25),vn(h,R,M,Ne.useMaxWidth);let B=v?40:0;h.attr("viewBox",k.startx-Ne.diagramMarginX+" -"+(Ne.diagramMarginY+B)+" "+M+" "+(R+B)),Y.debug("models:",rt.models)},"draw");o(MVe,"getMaxMessageWidthPerActor");IVe=o(function(t){let e=0,r=RO(Ne);for(let n in t.links){let a=Gt.calculateTextDimensions(n,r).width+2*Ne.wrapPadding+2*Ne.boxMargin;e<a&&(e=a)}return e},"getRequiredPopupWidth");o(OVe,"calculateActorMargins");PVe=o(async function(t,e,r){let n=e.get(t.from),i=e.get(t.to),a=n.x,s=i.x,l=t.wrap&&t.message,u=pi(t.message)?await id(t.message,me()):Gt.calculateTextDimensions(l?Gt.wrapLabel(t.message,Ne.width,_1(Ne)):t.message,_1(Ne)),h={width:l?Ne.width:Ze.getMax(Ne.width,u.width+2*Ne.noteMargin),height:0,startx:n.x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===r.db.PLACEMENT.RIGHTOF?(h.width=l?Ze.getMax(Ne.width,u.width):Ze.getMax(n.width/2+i.width/2,u.width+2*Ne.noteMargin),h.startx=a+(n.width+Ne.actorMargin)/2):t.placement===r.db.PLACEMENT.LEFTOF?(h.width=l?Ze.getMax(Ne.width,u.width+2*Ne.noteMargin):Ze.getMax(n.width/2+i.width/2,u.width+2*Ne.noteMargin),h.startx=a-h.width+(n.width-Ne.actorMargin)/2):t.to===t.from?(u=Gt.calculateTextDimensions(l?Gt.wrapLabel(t.message,Ze.getMax(Ne.width,n.width),_1(Ne)):t.message,_1(Ne)),h.width=l?Ze.getMax(Ne.width,n.width):Ze.getMax(n.width,Ne.width,u.width+2*Ne.noteMargin),h.startx=a+(n.width-h.width)/2):(h.width=Math.abs(a+n.width/2-(s+i.width/2))+Ne.actorMargin,h.startx=a<s?a+n.width/2-Ne.actorMargin/2:s+i.width/2-Ne.actorMargin/2),l&&(h.message=Gt.wrapLabel(t.message,h.width-2*Ne.wrapPadding,_1(Ne))),Y.debug(`NM:[${h.startx},${h.stopx},${h.starty},${h.stopy}:${h.width},${h.height}=${t.message}]`),h},"buildNoteModel"),BVe=o(function(t,e,r){if(![r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.SOLID,r.db.LINETYPE.DOTTED,r.db.LINETYPE.SOLID_CROSS,r.db.LINETYPE.DOTTED_CROSS,r.db.LINETYPE.SOLID_POINT,r.db.LINETYPE.DOTTED_POINT,r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type))return{};let[n,i]=bfe(t.from,e),[a,s]=bfe(t.to,e),l=n<=a,u=l?i:n,h=l?a:s,f=Math.abs(a-s)>2,d=o(y=>l?-y:y,"adjustValue");t.from===t.to?h=u:(t.activate&&!f&&(h+=d(Ne.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(h+=d(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(u-=d(3)));let p=[n,i,a,s],m=Math.abs(u-h);t.wrap&&t.message&&(t.message=Gt.wrapLabel(t.message,Ze.getMax(m+2*Ne.wrapPadding,Ne.width),Dp(Ne)));let g=Gt.calculateTextDimensions(t.message,Dp(Ne));return{width:Ze.getMax(t.wrap?0:g.width+2*Ne.wrapPadding,m+2*Ne.wrapPadding,Ne.width),height:0,startx:u,stopx:h,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,p),toBounds:Math.max.apply(null,p)}},"buildMessageModel"),FVe=o(async function(t,e,r,n){let i={},a=[],s,l,u;for(let h of t){switch(h.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),i[s.id]=s,i[h.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=D6(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*Ne.activationWidth/2,g={startx:m,stopx:m+Ne.activationWidth,actor:h.from,enabled:!0};rt.activations.push(g)}break;case n.db.LINETYPE.ACTIVE_END:{let d=rt.activations.map(p=>p.actor).lastIndexOf(h.from);rt.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await PVe(h,e,n),h.noteModel=l,a.forEach(d=>{s=d,s.from=Ze.getMin(s.from,l.startx),s.to=Ze.getMax(s.to,l.startx+l.width),s.width=Ze.getMax(s.width,Math.abs(s.from-s.to))-Ne.labelBoxWidth})):(u=BVe(h,e,n),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=Ze.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=Ze.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=Ze.getMax(s.width,Math.abs(s.to-s.from))-Ne.labelBoxWidth}else s.from=Ze.getMin(u.startx,s.from),s.to=Ze.getMax(u.stopx,s.to),s.width=Ze.getMax(s.width,u.width)-Ne.labelBoxWidth}))}return rt.activations=[],Y.debug("Loop type widths:",i),i},"calculateLoopBounds"),kfe={bounds:rt,drawActors:NO,drawActorsPopup:wfe,setConf:Tfe,draw:NVe}});var Sfe={};hr(Sfe,{diagram:()=>$Ve});var $Ve,Cfe=N(()=>{"use strict";cfe();ufe();ffe();zt();Efe();$Ve={parser:lfe,get db(){return new _6},renderer:kfe,styles:hfe,init:o(t=>{t.sequence||(t.sequence={}),t.wrap&&(t.sequence.wrap=t.wrap,Yy({sequence:{wrap:t.wrap}}))},"init")}});var MO,L6,IO=N(()=>{"use strict";MO=function(){var t=o(function(Ie,be,W,de){for(W=W||{},de=Ie.length;de--;W[Ie[de]]=be);return W},"o"),e=[1,18],r=[1,19],n=[1,20],i=[1,41],a=[1,42],s=[1,26],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],w=[1,29],C=[1,30],T=[1,31],E=[1,44],A=[1,46],S=[1,43],_=[1,47],I=[1,9],D=[1,8,9],k=[1,58],L=[1,59],R=[1,60],O=[1,61],M=[1,62],B=[1,63],F=[1,64],P=[1,8,9,41],z=[1,76],$=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],H=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],Q=[13,58,84,99,101,102],j=[13,58,71,72,84,99,101,102],ie=[13,58,66,67,68,69,70,84,99,101,102],ne=[1,98],le=[1,115],he=[1,107],K=[1,113],X=[1,108],te=[1,109],J=[1,110],se=[1,111],ue=[1,112],Z=[1,114],Se=[22,58,59,80,84,85,86,87,88,89],ce=[1,8,9,39,41,44],ae=[1,8,9,22],Oe=[1,143],ge=[1,8,9,59],ze=[1,8,9,22,58,59,80,84,85,86,87,88,89],He={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:o(function(be,W,de,re,oe,V,xe){var q=V.length-1;switch(oe){case 8:this.$=V[q-1];break;case 9:case 12:case 14:this.$=V[q];break;case 10:case 13:this.$=V[q-2]+"."+V[q];break;case 11:case 15:this.$=V[q-1]+V[q];break;case 16:case 17:this.$=V[q-1]+"~"+V[q]+"~";break;case 18:re.addRelation(V[q]);break;case 19:V[q-1].title=re.cleanupLabel(V[q]),re.addRelation(V[q-1]);break;case 30:this.$=V[q].trim(),re.setAccTitle(this.$);break;case 31:case 32:this.$=V[q].trim(),re.setAccDescription(this.$);break;case 33:re.addClassesToNamespace(V[q-3],V[q-1]);break;case 34:re.addClassesToNamespace(V[q-4],V[q-1]);break;case 35:this.$=V[q],re.addNamespace(V[q]);break;case 36:this.$=[V[q]];break;case 37:this.$=[V[q-1]];break;case 38:V[q].unshift(V[q-2]),this.$=V[q];break;case 40:re.setCssClass(V[q-2],V[q]);break;case 41:re.addMembers(V[q-3],V[q-1]);break;case 42:re.setCssClass(V[q-5],V[q-3]),re.addMembers(V[q-5],V[q-1]);break;case 43:this.$=V[q],re.addClass(V[q]);break;case 44:this.$=V[q-1],re.addClass(V[q-1]),re.setClassLabel(V[q-1],V[q]);break;case 45:re.addAnnotation(V[q],V[q-2]);break;case 46:case 59:this.$=[V[q]];break;case 47:V[q].push(V[q-1]),this.$=V[q];break;case 48:break;case 49:re.addMember(V[q-1],re.cleanupLabel(V[q]));break;case 50:break;case 51:break;case 52:this.$={id1:V[q-2],id2:V[q],relation:V[q-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:V[q-3],id2:V[q],relation:V[q-1],relationTitle1:V[q-2],relationTitle2:"none"};break;case 54:this.$={id1:V[q-3],id2:V[q],relation:V[q-2],relationTitle1:"none",relationTitle2:V[q-1]};break;case 55:this.$={id1:V[q-4],id2:V[q],relation:V[q-2],relationTitle1:V[q-3],relationTitle2:V[q-1]};break;case 56:re.addNote(V[q],V[q-1]);break;case 57:re.addNote(V[q]);break;case 58:this.$=V[q-2],re.defineClass(V[q-1],V[q]);break;case 60:this.$=V[q-2].concat([V[q]]);break;case 61:re.setDirection("TB");break;case 62:re.setDirection("BT");break;case 63:re.setDirection("RL");break;case 64:re.setDirection("LR");break;case 65:this.$={type1:V[q-2],type2:V[q],lineType:V[q-1]};break;case 66:this.$={type1:"none",type2:V[q],lineType:V[q-1]};break;case 67:this.$={type1:V[q-1],type2:"none",lineType:V[q]};break;case 68:this.$={type1:"none",type2:"none",lineType:V[q]};break;case 69:this.$=re.relationType.AGGREGATION;break;case 70:this.$=re.relationType.EXTENSION;break;case 71:this.$=re.relationType.COMPOSITION;break;case 72:this.$=re.relationType.DEPENDENCY;break;case 73:this.$=re.relationType.LOLLIPOP;break;case 74:this.$=re.lineType.LINE;break;case 75:this.$=re.lineType.DOTTED_LINE;break;case 76:case 82:this.$=V[q-2],re.setClickEvent(V[q-1],V[q]);break;case 77:case 83:this.$=V[q-3],re.setClickEvent(V[q-2],V[q-1]),re.setTooltip(V[q-2],V[q]);break;case 78:this.$=V[q-2],re.setLink(V[q-1],V[q]);break;case 79:this.$=V[q-3],re.setLink(V[q-2],V[q-1],V[q]);break;case 80:this.$=V[q-3],re.setLink(V[q-2],V[q-1]),re.setTooltip(V[q-2],V[q]);break;case 81:this.$=V[q-4],re.setLink(V[q-3],V[q-2],V[q]),re.setTooltip(V[q-3],V[q-1]);break;case 84:this.$=V[q-3],re.setClickEvent(V[q-2],V[q-1],V[q]);break;case 85:this.$=V[q-4],re.setClickEvent(V[q-3],V[q-2],V[q-1]),re.setTooltip(V[q-3],V[q]);break;case 86:this.$=V[q-3],re.setLink(V[q-2],V[q]);break;case 87:this.$=V[q-4],re.setLink(V[q-3],V[q-1],V[q]);break;case 88:this.$=V[q-4],re.setLink(V[q-3],V[q-1]),re.setTooltip(V[q-3],V[q]);break;case 89:this.$=V[q-5],re.setLink(V[q-4],V[q-2],V[q]),re.setTooltip(V[q-4],V[q-1]);break;case 90:this.$=V[q-2],re.setCssStyle(V[q-1],V[q]);break;case 91:re.setCssClass(V[q-1],V[q]);break;case 92:this.$=[V[q]];break;case 93:V[q-2].push(V[q]),this.$=V[q-2];break;case 95:this.$=V[q-1]+V[q];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(I,[2,5],{8:[1,48]}),{8:[1,49]},t(D,[2,18],{22:[1,50]}),t(D,[2,20]),t(D,[2,21]),t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,28]),t(D,[2,29]),{34:[1,51]},{36:[1,52]},t(D,[2,32]),t(D,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:k,67:L,68:R,69:O,70:M,71:B,72:F}),{39:[1,65]},t(P,[2,39],{39:[1,67],44:[1,66]}),t(D,[2,50]),t(D,[2,51]),{16:68,58:p,84:E,99:A,101:S},{16:39,18:69,19:40,58:p,84:E,99:A,101:S,102:_},{16:39,18:70,19:40,58:p,84:E,99:A,101:S,102:_},{16:39,18:71,19:40,58:p,84:E,99:A,101:S,102:_},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:p,84:E,99:A,101:S,102:_},{13:z,53:75},{56:77,58:[1,78]},t(D,[2,61]),t(D,[2,62]),t(D,[2,63]),t(D,[2,64]),t($,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:p,84:E,99:A,101:S,102:_}),t($,[2,14],{20:[1,82]}),{15:83,16:84,58:p,84:E,99:A,101:S},{16:39,18:85,19:40,58:p,84:E,99:A,101:S,102:_},t(H,[2,118]),t(H,[2,119]),t(H,[2,120]),t(H,[2,121]),t([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),t(I,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:e,35:r,37:n,42:i,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_},t(D,[2,19]),t(D,[2,30]),t(D,[2,31]),{13:[1,89],16:39,18:88,19:40,58:p,84:E,99:A,101:S,102:_},{51:90,64:56,65:57,66:k,67:L,68:R,69:O,70:M,71:B,72:F},t(D,[2,49]),{65:91,71:B,72:F},t(Q,[2,68],{64:92,66:k,67:L,68:R,69:O,70:M}),t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(ie,[2,74]),t(ie,[2,75]),{8:[1,94],24:95,40:93,43:23,46:a},{16:96,58:p,84:E,99:A,101:S},{45:97,49:ne},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:le,57:104,58:he,80:K,82:105,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},{58:[1,116]},{13:z,53:117},t(D,[2,57]),t(D,[2,123]),{22:le,57:118,58:he,59:[1,119],80:K,82:105,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},t(Se,[2,59]),{16:39,18:120,19:40,58:p,84:E,99:A,101:S,102:_},t($,[2,15]),t($,[2,16]),t($,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:p,84:E,99:A,101:S},t(ce,[2,43],{11:123,12:[1,124]}),t(I,[2,7]),{9:[1,125]},t(ae,[2,52]),{16:39,18:126,19:40,58:p,84:E,99:A,101:S,102:_},{13:[1,128],16:39,18:127,19:40,58:p,84:E,99:A,101:S,102:_},t(Q,[2,67],{64:129,66:k,67:L,68:R,69:O,70:M}),t(Q,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:a},{8:[1,132],41:[2,36]},t(P,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:ne},{16:39,18:136,19:40,58:p,84:E,99:A,101:S,102:_},t(D,[2,76],{13:[1,137]}),t(D,[2,78],{13:[1,139],75:[1,138]}),t(D,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},t(D,[2,90],{59:Oe}),t(ge,[2,92],{83:144,22:le,58:he,80:K,84:X,85:te,86:J,87:se,88:ue,89:Z}),t(ze,[2,94]),t(ze,[2,96]),t(ze,[2,97]),t(ze,[2,98]),t(ze,[2,99]),t(ze,[2,100]),t(ze,[2,101]),t(ze,[2,102]),t(ze,[2,103]),t(ze,[2,104]),t(D,[2,91]),t(D,[2,56]),t(D,[2,58],{59:Oe}),{58:[1,145]},t($,[2,13]),{15:146,16:84,58:p,84:E,99:A,101:S},{39:[2,11]},t(ce,[2,44]),{13:[1,147]},{1:[2,4]},t(ae,[2,54]),t(ae,[2,53]),{16:39,18:148,19:40,58:p,84:E,99:A,101:S,102:_},t(Q,[2,65]),t(D,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:a},{45:151,49:ne},t(P,[2,41]),{41:[2,47]},t(D,[2,45]),t(D,[2,77]),t(D,[2,79]),t(D,[2,80],{75:[1,152]}),t(D,[2,83]),t(D,[2,84],{13:[1,153]}),t(D,[2,86],{13:[1,155],75:[1,154]}),{22:le,58:he,80:K,82:156,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},t(ze,[2,95]),t(Se,[2,60]),{39:[2,10]},{14:[1,157]},t(ae,[2,55]),t(D,[2,34]),{41:[2,38]},{41:[1,158]},t(D,[2,81]),t(D,[2,85]),t(D,[2,87]),t(D,[2,88],{75:[1,159]}),t(ge,[2,93],{83:144,22:le,58:he,80:K,84:X,85:te,86:J,87:se,88:ue,89:Z}),t(ce,[2,8]),t(P,[2,42]),t(D,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:o(function(be,W){if(W.recoverable)this.trace(be);else{var de=new Error(be);throw de.hash=W,de}},"parseError"),parse:o(function(be){var W=this,de=[0],re=[],oe=[null],V=[],xe=this.table,q="",pe=0,ve=0,Pe=0,_e=2,we=1,Ve=V.slice.call(arguments,1),De=Object.create(this.lexer),qe={yy:{}};for(var at in this.yy)Object.prototype.hasOwnProperty.call(this.yy,at)&&(qe.yy[at]=this.yy[at]);De.setInput(be,qe.yy),qe.yy.lexer=De,qe.yy.parser=this,typeof De.yylloc>"u"&&(De.yylloc={});var Rt=De.yylloc;V.push(Rt);var st=De.options&&De.options.ranges;typeof qe.yy.parseError=="function"?this.parseError=qe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ue(Tt){de.length=de.length-2*Tt,oe.length=oe.length-Tt,V.length=V.length-Tt}o(Ue,"popStack");function ct(){var Tt;return Tt=re.pop()||De.lex()||we,typeof Tt!="number"&&(Tt instanceof Array&&(re=Tt,Tt=re.pop()),Tt=W.symbols_[Tt]||Tt),Tt}o(ct,"lex");for(var We,ot,Yt,bt,Mt,xt,ut={},Et,ft,yt,nt;;){if(Yt=de[de.length-1],this.defaultActions[Yt]?bt=this.defaultActions[Yt]:((We===null||typeof We>"u")&&(We=ct()),bt=xe[Yt]&&xe[Yt][We]),typeof bt>"u"||!bt.length||!bt[0]){var dn="";nt=[];for(Et in xe[Yt])this.terminals_[Et]&&Et>_e&&nt.push("'"+this.terminals_[Et]+"'");De.showPosition?dn="Parse error on line "+(pe+1)+`: | |
| 1365 | +`+De.showPosition()+` | |
| 1366 | +Expecting `+nt.join(", ")+", got '"+(this.terminals_[We]||We)+"'":dn="Parse error on line "+(pe+1)+": Unexpected "+(We==we?"end of input":"'"+(this.terminals_[We]||We)+"'"),this.parseError(dn,{text:De.match,token:this.terminals_[We]||We,line:De.yylineno,loc:Rt,expected:nt})}if(bt[0]instanceof Array&&bt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Yt+", token: "+We);switch(bt[0]){case 1:de.push(We),oe.push(De.yytext),V.push(De.yylloc),de.push(bt[1]),We=null,ot?(We=ot,ot=null):(ve=De.yyleng,q=De.yytext,pe=De.yylineno,Rt=De.yylloc,Pe>0&&Pe--);break;case 2:if(ft=this.productions_[bt[1]][1],ut.$=oe[oe.length-ft],ut._$={first_line:V[V.length-(ft||1)].first_line,last_line:V[V.length-1].last_line,first_column:V[V.length-(ft||1)].first_column,last_column:V[V.length-1].last_column},st&&(ut._$.range=[V[V.length-(ft||1)].range[0],V[V.length-1].range[1]]),xt=this.performAction.apply(ut,[q,ve,pe,qe.yy,bt[1],oe,V].concat(Ve)),typeof xt<"u")return xt;ft&&(de=de.slice(0,-1*ft*2),oe=oe.slice(0,-1*ft),V=V.slice(0,-1*ft)),de.push(this.productions_[bt[1]][0]),oe.push(ut.$),V.push(ut._$),yt=xe[de[de.length-2]][de[de.length-1]],de.push(yt);break;case 3:return!0}}return!0},"parse")},$e=function(){var Ie={EOF:1,parseError:o(function(W,de){if(this.yy.parser)this.yy.parser.parseError(W,de);else throw new Error(W)},"parseError"),setInput:o(function(be,W){return this.yy=W||this.yy||{},this._input=be,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var be=this._input[0];this.yytext+=be,this.yyleng++,this.offset++,this.match+=be,this.matched+=be;var W=be.match(/(?:\r\n?|\n).*/g);return W?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),be},"input"),unput:o(function(be){var W=be.length,de=be.split(/(?:\r\n?|\n)/g);this._input=be+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-W),this.offset-=W;var re=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),de.length-1&&(this.yylineno-=de.length-1);var oe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:de?(de.length===re.length?this.yylloc.first_column:0)+re[re.length-de.length].length-de[0].length:this.yylloc.first_column-W},this.options.ranges&&(this.yylloc.range=[oe[0],oe[0]+this.yyleng-W]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1367 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(be){this.unput(this.match.slice(be))},"less"),pastInput:o(function(){var be=this.matched.substr(0,this.matched.length-this.match.length);return(be.length>20?"...":"")+be.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var be=this.match;return be.length<20&&(be+=this._input.substr(0,20-be.length)),(be.substr(0,20)+(be.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var be=this.pastInput(),W=new Array(be.length+1).join("-");return be+this.upcomingInput()+` | |
| 1368 | +`+W+"^"},"showPosition"),test_match:o(function(be,W){var de,re,oe;if(this.options.backtrack_lexer&&(oe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(oe.yylloc.range=this.yylloc.range.slice(0))),re=be[0].match(/(?:\r\n?|\n).*/g),re&&(this.yylineno+=re.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:re?re[re.length-1].length-re[re.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+be[0].length},this.yytext+=be[0],this.match+=be[0],this.matches=be,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(be[0].length),this.matched+=be[0],de=this.performAction.call(this,this.yy,this,W,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),de)return de;if(this._backtrack){for(var V in oe)this[V]=oe[V];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var be,W,de,re;this._more||(this.yytext="",this.match="");for(var oe=this._currentRules(),V=0;V<oe.length;V++)if(de=this._input.match(this.rules[oe[V]]),de&&(!W||de[0].length>W[0].length)){if(W=de,re=V,this.options.backtrack_lexer){if(be=this.test_match(de,oe[V]),be!==!1)return be;if(this._backtrack){W=!1;continue}else return!1}else if(!this.options.flex)break}return W?(be=this.test_match(W,oe[re]),be!==!1?be:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1369 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var W=this.next();return W||this.lex()},"lex"),begin:o(function(W){this.conditionStack.push(W)},"begin"),popState:o(function(){var W=this.conditionStack.length-1;return W>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(W){return W=this.conditionStack.length-1-Math.abs(W||0),W>=0?this.conditionStack[W]:"INITIAL"},"topState"),pushState:o(function(W){this.begin(W)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(W,de,re,oe){var V=oe;switch(re){case 0:return 60;case 1:return 61;case 2:return 62;case 3:return 63;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 77;case 22:this.popState();break;case 23:return 78;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 80;case 28:return 55;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),46;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 81;case 50:return 73;case 51:return 74;case 52:return 76;case 53:return 52;case 54:return 54;case 55:return 47;case 56:return 48;case 57:return 79;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 75;case 65:return 75;case 66:return 75;case 67:return 75;case 68:return 67;case 69:return 67;case 70:return 69;case 71:return 69;case 72:return 68;case 73:return 66;case 74:return 70;case 75:return 71;case 76:return 72;case 77:return 22;case 78:return 44;case 79:return 99;case 80:return 17;case 81:return"PLUS";case 82:return 85;case 83:return 59;case 84:return 88;case 85:return 88;case 86:return 89;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 58;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 84;case 94:return 101;case 95:return 87;case 96:return 87;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}};return Ie}();He.lexer=$e;function Re(){this.yy={}}return o(Re,"Parser"),Re.prototype=He,He.Parser=Re,new Re}();MO.parser=MO;L6=MO});var Dfe,kb,Lfe=N(()=>{"use strict";zt();gr();Dfe=["#","+","~","-",""],kb=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let n=Tr(e,me());this.parseMember(n)}getDisplayDetails(){let e=this.visibility+ec(this.id);this.memberType==="method"&&(e+=`(${ec(this.parameters.trim())})`,this.returnType&&(e+=" : "+ec(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(Dfe.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let i=e.length,a=e.substring(0,1),s=e.substring(i-1);Dfe.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?i:i-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let n=`${this.visibility?"\\"+this.visibility:""}${ec(this.id)}${this.memberType==="method"?`(${ec(this.parameters)})${this.returnType?" : "+ec(this.returnType):""}`:""}`;this.text=n.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});var R6,Rfe,Lp,D1,OO=N(()=>{"use strict";dr();vt();zt();gr();ir();mi();Lfe();R6="classId-",Rfe=0,Lp=o(t=>Ze.sanitizeText(t,me()),"sanitizeText"),D1=class{constructor(){this.relations=[];this.classes=new Map;this.styleClasses=new Map;this.notes=[];this.interfaces=[];this.namespaces=new Map;this.namespaceCounter=0;this.functions=[];this.lineType={LINE:0,DOTTED_LINE:1};this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4};this.setupToolTips=o(e=>{let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=this.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.top-14+document.body.scrollTop+"px"),r.html(r.html().replace(/<br\/>/g,"<br/>")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})},"setupToolTips");this.direction="TB";this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().class,"getConfig");this.functions.push(this.setupToolTips.bind(this)),this.clear(),this.addRelation=this.addRelation.bind(this),this.addClassesToNamespace=this.addClassesToNamespace.bind(this),this.addNamespace=this.addNamespace.bind(this),this.setCssClass=this.setCssClass.bind(this),this.addMembers=this.addMembers.bind(this),this.addClass=this.addClass.bind(this),this.setClassLabel=this.setClassLabel.bind(this),this.addAnnotation=this.addAnnotation.bind(this),this.addMember=this.addMember.bind(this),this.cleanupLabel=this.cleanupLabel.bind(this),this.addNote=this.addNote.bind(this),this.defineClass=this.defineClass.bind(this),this.setDirection=this.setDirection.bind(this),this.setLink=this.setLink.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.clear=this.clear.bind(this),this.setTooltip=this.setTooltip.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setCssStyle=this.setCssStyle.bind(this)}static{o(this,"ClassDB")}splitClassNameAndType(e){let r=Ze.sanitizeText(e,me()),n="",i=r;if(r.indexOf("~")>0){let a=r.split("~");i=Lp(a[0]),n=Lp(a[1])}return{className:i,type:n}}setClassLabel(e,r){let n=Ze.sanitizeText(e,me());r&&(r=Lp(r));let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).label=r,this.classes.get(i).text=`${r}${this.classes.get(i).type?`<${this.classes.get(i).type}>`:""}`}addClass(e){let r=Ze.sanitizeText(e,me()),{className:n,type:i}=this.splitClassNameAndType(r);if(this.classes.has(n))return;let a=Ze.sanitizeText(n,me());this.classes.set(a,{id:a,type:i,label:a,text:`${a}${i?`<${i}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:R6+a+"-"+Rfe}),Rfe++}addInterface(e,r){let n={id:`interface${this.interfaces.length}`,label:e,classId:r};this.interfaces.push(n)}lookUpDomId(e){let r=Ze.sanitizeText(e,me());if(this.classes.has(r))return this.classes.get(r).domId;throw new Error("Class not found: "+r)}clear(){this.relations=[],this.classes=new Map,this.notes=[],this.interfaces=[],this.functions=[],this.functions.push(this.setupToolTips.bind(this)),this.namespaces=new Map,this.namespaceCounter=0,this.direction="TB",Ar()}getClass(e){return this.classes.get(e)}getClasses(){return this.classes}getRelations(){return this.relations}getNotes(){return this.notes}addRelation(e){Y.debug("Adding relation: "+JSON.stringify(e));let r=[this.relationType.LOLLIPOP,this.relationType.AGGREGATION,this.relationType.COMPOSITION,this.relationType.DEPENDENCY,this.relationType.EXTENSION];e.relation.type1===this.relationType.LOLLIPOP&&!r.includes(e.relation.type2)?(this.addClass(e.id2),this.addInterface(e.id1,e.id2),e.id1=`interface${this.interfaces.length-1}`):e.relation.type2===this.relationType.LOLLIPOP&&!r.includes(e.relation.type1)?(this.addClass(e.id1),this.addInterface(e.id2,e.id1),e.id2=`interface${this.interfaces.length-1}`):(this.addClass(e.id1),this.addClass(e.id2)),e.id1=this.splitClassNameAndType(e.id1).className,e.id2=this.splitClassNameAndType(e.id2).className,e.relationTitle1=Ze.sanitizeText(e.relationTitle1.trim(),me()),e.relationTitle2=Ze.sanitizeText(e.relationTitle2.trim(),me()),this.relations.push(e)}addAnnotation(e,r){let n=this.splitClassNameAndType(e).className;this.classes.get(n).annotations.push(r)}addMember(e,r){this.addClass(e);let n=this.splitClassNameAndType(e).className,i=this.classes.get(n);if(typeof r=="string"){let a=r.trim();a.startsWith("<<")&&a.endsWith(">>")?i.annotations.push(Lp(a.substring(2,a.length-2))):a.indexOf(")")>0?i.methods.push(new kb(a,"method")):a&&i.members.push(new kb(a,"attribute"))}}addMembers(e,r){Array.isArray(r)&&(r.reverse(),r.forEach(n=>this.addMember(e,n)))}addNote(e,r){let n={id:`note${this.notes.length}`,class:r,text:e};this.notes.push(n)}cleanupLabel(e){return e.startsWith(":")&&(e=e.substring(1)),Lp(e.trim())}setCssClass(e,r){e.split(",").forEach(n=>{let i=n;/\d/.exec(n[0])&&(i=R6+i);let a=this.classes.get(i);a&&(a.cssClasses+=" "+r)})}defineClass(e,r){for(let n of e){let i=this.styleClasses.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.styleClasses.set(n,i)),r&&r.forEach(a=>{if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.classes.forEach(a=>{a.cssClasses.includes(n)&&a.styles.push(...r.flatMap(s=>s.split(",")))})}}setTooltip(e,r){e.split(",").forEach(n=>{r!==void 0&&(this.classes.get(n).tooltip=Lp(r))})}getTooltip(e,r){return r&&this.namespaces.has(r)?this.namespaces.get(r).classes.get(e).tooltip:this.classes.get(e).tooltip}setLink(e,r,n){let i=me();e.split(",").forEach(a=>{let s=a;/\d/.exec(a[0])&&(s=R6+s);let l=this.classes.get(s);l&&(l.link=Gt.formatUrl(r,i),i.securityLevel==="sandbox"?l.linkTarget="_top":typeof n=="string"?l.linkTarget=Lp(n):l.linkTarget="_blank")}),this.setCssClass(e,"clickable")}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFunc(i,r,n),this.classes.get(i).haveCallback=!0}),this.setCssClass(e,"clickable")}setClickFunc(e,r,n){let i=Ze.sanitizeText(e,me());if(me().securityLevel!=="loose"||r===void 0)return;let s=i;if(this.classes.has(s)){let l=this.lookUpDomId(s),u=[];if(typeof n=="string"){u=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let h=0;h<u.length;h++){let f=u[h].trim();f.startsWith('"')&&f.endsWith('"')&&(f=f.substr(1,f.length-2)),u[h]=f}}u.length===0&&u.push(l),this.functions.push(()=>{let h=document.querySelector(`[id="${l}"]`);h!==null&&h.addEventListener("click",()=>{Gt.runFunc(r,...u)},!1)})}}bindFunctions(e){this.functions.forEach(r=>{r(e)})}getDirection(){return this.direction}setDirection(e){this.direction=e}addNamespace(e){this.namespaces.has(e)||(this.namespaces.set(e,{id:e,classes:new Map,children:{},domId:R6+e+"-"+this.namespaceCounter}),this.namespaceCounter++)}getNamespace(e){return this.namespaces.get(e)}getNamespaces(){return this.namespaces}addClassesToNamespace(e,r){if(this.namespaces.has(e))for(let n of r){let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).parent=e,this.namespaces.get(e).classes.set(i,this.classes.get(i))}}setCssStyle(e,r){let n=this.classes.get(e);if(!(!r||!n))for(let i of r)i.includes(",")?n.styles.push(...i.split(",")):n.styles.push(i)}getArrowMarker(e){let r;switch(e){case 0:r="aggregation";break;case 1:r="extension";break;case 2:r="composition";break;case 3:r="dependency";break;case 4:r="lollipop";break;default:r="none"}return r}getData(){let e=[],r=[],n=me();for(let a of this.namespaces.keys()){let s=this.namespaces.get(a);if(s){let l={id:s.id,label:s.id,isGroup:!0,padding:n.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:n.look};e.push(l)}}for(let a of this.classes.keys()){let s=this.classes.get(a);if(s){let l=s;l.parentId=s.parent,l.look=n.look,e.push(l)}}let i=0;for(let a of this.notes){i++;let s={id:a.id,label:a.text,isGroup:!1,shape:"note",padding:n.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${n.themeVariables.noteBkgColor}`,`stroke: ${n.themeVariables.noteBorderColor}`],look:n.look};e.push(s);let l=this.classes.get(a.class)?.id??"";if(l){let u={id:`edgeNote${i}`,start:a.id,end:l,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:n.look};r.push(u)}}for(let a of this.interfaces){let s={id:a.id,label:a.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:n.look};e.push(s)}i=0;for(let a of this.relations){i++;let s={id:$h(a.id1,a.id2,{prefix:"id",counter:i}),start:a.id1,end:a.id2,type:"normal",label:a.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:this.getArrowMarker(a.relation.type1),arrowTypeEnd:this.getArrowMarker(a.relation.type2),startLabelRight:a.relationTitle1==="none"?"":a.relationTitle1,endLabelLeft:a.relationTitle2==="none"?"":a.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:a.style||"",pattern:a.relation.lineType==1?"dashed":"solid",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:this.getDirection()}}}});var UVe,N6,PO=N(()=>{"use strict";UVe=o(t=>`g.classGroup text { | |
| 1370 | + fill: ${t.nodeBorder||t.classText}; | |
| 1371 | + stroke: none; | |
| 1372 | + font-family: ${t.fontFamily}; | |
| 1373 | + font-size: 10px; | |
| 1374 | + | |
| 1375 | + .title { | |
| 1376 | + font-weight: bolder; | |
| 1377 | + } | |
| 1378 | + | |
| 1379 | +} | |
| 1380 | + | |
| 1381 | +.nodeLabel, .edgeLabel { | |
| 1382 | + color: ${t.classText}; | |
| 1383 | +} | |
| 1384 | +.edgeLabel .label rect { | |
| 1385 | + fill: ${t.mainBkg}; | |
| 1386 | +} | |
| 1387 | +.label text { | |
| 1388 | + fill: ${t.classText}; | |
| 1389 | +} | |
| 1390 | + | |
| 1391 | +.labelBkg { | |
| 1392 | + background: ${t.mainBkg}; | |
| 1393 | +} | |
| 1394 | +.edgeLabel .label span { | |
| 1395 | + background: ${t.mainBkg}; | |
| 1396 | +} | |
| 1397 | + | |
| 1398 | +.classTitle { | |
| 1399 | + font-weight: bolder; | |
| 1400 | +} | |
| 1401 | +.node rect, | |
| 1402 | + .node circle, | |
| 1403 | + .node ellipse, | |
| 1404 | + .node polygon, | |
| 1405 | + .node path { | |
| 1406 | + fill: ${t.mainBkg}; | |
| 1407 | + stroke: ${t.nodeBorder}; | |
| 1408 | + stroke-width: 1px; | |
| 1409 | + } | |
| 1410 | + | |
| 1411 | + | |
| 1412 | +.divider { | |
| 1413 | + stroke: ${t.nodeBorder}; | |
| 1414 | + stroke-width: 1; | |
| 1415 | +} | |
| 1416 | + | |
| 1417 | +g.clickable { | |
| 1418 | + cursor: pointer; | |
| 1419 | +} | |
| 1420 | + | |
| 1421 | +g.classGroup rect { | |
| 1422 | + fill: ${t.mainBkg}; | |
| 1423 | + stroke: ${t.nodeBorder}; | |
| 1424 | +} | |
| 1425 | + | |
| 1426 | +g.classGroup line { | |
| 1427 | + stroke: ${t.nodeBorder}; | |
| 1428 | + stroke-width: 1; | |
| 1429 | +} | |
| 1430 | + | |
| 1431 | +.classLabel .box { | |
| 1432 | + stroke: none; | |
| 1433 | + stroke-width: 0; | |
| 1434 | + fill: ${t.mainBkg}; | |
| 1435 | + opacity: 0.5; | |
| 1436 | +} | |
| 1437 | + | |
| 1438 | +.classLabel .label { | |
| 1439 | + fill: ${t.nodeBorder}; | |
| 1440 | + font-size: 10px; | |
| 1441 | +} | |
| 1442 | + | |
| 1443 | +.relation { | |
| 1444 | + stroke: ${t.lineColor}; | |
| 1445 | + stroke-width: 1; | |
| 1446 | + fill: none; | |
| 1447 | +} | |
| 1448 | + | |
| 1449 | +.dashed-line{ | |
| 1450 | + stroke-dasharray: 3; | |
| 1451 | +} | |
| 1452 | + | |
| 1453 | +.dotted-line{ | |
| 1454 | + stroke-dasharray: 1 2; | |
| 1455 | +} | |
| 1456 | + | |
| 1457 | +#compositionStart, .composition { | |
| 1458 | + fill: ${t.lineColor} !important; | |
| 1459 | + stroke: ${t.lineColor} !important; | |
| 1460 | + stroke-width: 1; | |
| 1461 | +} | |
| 1462 | + | |
| 1463 | +#compositionEnd, .composition { | |
| 1464 | + fill: ${t.lineColor} !important; | |
| 1465 | + stroke: ${t.lineColor} !important; | |
| 1466 | + stroke-width: 1; | |
| 1467 | +} | |
| 1468 | + | |
| 1469 | +#dependencyStart, .dependency { | |
| 1470 | + fill: ${t.lineColor} !important; | |
| 1471 | + stroke: ${t.lineColor} !important; | |
| 1472 | + stroke-width: 1; | |
| 1473 | +} | |
| 1474 | + | |
| 1475 | +#dependencyStart, .dependency { | |
| 1476 | + fill: ${t.lineColor} !important; | |
| 1477 | + stroke: ${t.lineColor} !important; | |
| 1478 | + stroke-width: 1; | |
| 1479 | +} | |
| 1480 | + | |
| 1481 | +#extensionStart, .extension { | |
| 1482 | + fill: transparent !important; | |
| 1483 | + stroke: ${t.lineColor} !important; | |
| 1484 | + stroke-width: 1; | |
| 1485 | +} | |
| 1486 | + | |
| 1487 | +#extensionEnd, .extension { | |
| 1488 | + fill: transparent !important; | |
| 1489 | + stroke: ${t.lineColor} !important; | |
| 1490 | + stroke-width: 1; | |
| 1491 | +} | |
| 1492 | + | |
| 1493 | +#aggregationStart, .aggregation { | |
| 1494 | + fill: transparent !important; | |
| 1495 | + stroke: ${t.lineColor} !important; | |
| 1496 | + stroke-width: 1; | |
| 1497 | +} | |
| 1498 | + | |
| 1499 | +#aggregationEnd, .aggregation { | |
| 1500 | + fill: transparent !important; | |
| 1501 | + stroke: ${t.lineColor} !important; | |
| 1502 | + stroke-width: 1; | |
| 1503 | +} | |
| 1504 | + | |
| 1505 | +#lollipopStart, .lollipop { | |
| 1506 | + fill: ${t.mainBkg} !important; | |
| 1507 | + stroke: ${t.lineColor} !important; | |
| 1508 | + stroke-width: 1; | |
| 1509 | +} | |
| 1510 | + | |
| 1511 | +#lollipopEnd, .lollipop { | |
| 1512 | + fill: ${t.mainBkg} !important; | |
| 1513 | + stroke: ${t.lineColor} !important; | |
| 1514 | + stroke-width: 1; | |
| 1515 | +} | |
| 1516 | + | |
| 1517 | +.edgeTerminals { | |
| 1518 | + font-size: 11px; | |
| 1519 | + line-height: initial; | |
| 1520 | +} | |
| 1521 | + | |
| 1522 | +.classTitleText { | |
| 1523 | + text-anchor: middle; | |
| 1524 | + font-size: 18px; | |
| 1525 | + fill: ${t.textColor}; | |
| 1526 | +} | |
| 1527 | +`,"getStyles"),N6=UVe});var HVe,WVe,qVe,M6,BO=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();HVe=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),WVe=o(function(t,e){return e.db.getClasses()},"getClasses"),qVe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing class diagram (v3)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),M6={getClasses:WVe,draw:qVe,getDir:HVe}});var Nfe={};hr(Nfe,{diagram:()=>YVe});var YVe,Mfe=N(()=>{"use strict";IO();OO();PO();BO();YVe={parser:L6,get db(){return new D1},renderer:M6,styles:N6,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Pfe={};hr(Pfe,{diagram:()=>QVe});var QVe,Bfe=N(()=>{"use strict";IO();OO();PO();BO();QVe={parser:L6,get db(){return new D1},renderer:M6,styles:N6,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var FO,I6,$O=N(()=>{"use strict";FO=function(){var t=o(function(F,P,z,$){for(z=z||{},$=F.length;$--;z[F[$]]=P);return z},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,32],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],w=[1,28],C=[1,29],T=[1,30],E=[1,31],A=[1,34],S=[1,35],_=[1,36],I=[1,37],D=[1,33],k=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],L=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],R=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],O={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,style:42,STYLE_IDS:43,STYLEDEF_STYLEOPTS:44,class:45,CLASSENTITY_IDS:46,STYLECLASS:47,direction_tb:48,direction_bt:49,direction_rl:50,direction_lr:51,eol:52,";":53,EDGE_STATE:54,STYLE_SEPARATOR:55,left_of:56,right_of:57,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"style",43:"STYLE_IDS",44:"STYLEDEF_STYLEOPTS",45:"class",46:"CLASSENTITY_IDS",47:"STYLECLASS",48:"direction_tb",49:"direction_bt",50:"direction_rl",51:"direction_lr",53:";",54:"EDGE_STATE",55:"STYLE_SEPARATOR",56:"left_of",57:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[52,1],[52,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(P,z,$,H,Q,j,ie){var ne=j.length-1;switch(Q){case 3:return H.setRootDoc(j[ne]),j[ne];break;case 4:this.$=[];break;case 5:j[ne]!="nl"&&(j[ne-1].push(j[ne]),this.$=j[ne-1]);break;case 6:case 7:this.$=j[ne];break;case 8:this.$="nl";break;case 12:this.$=j[ne];break;case 13:let X=j[ne-1];X.description=H.trimColon(j[ne]),this.$=X;break;case 14:this.$={stmt:"relation",state1:j[ne-2],state2:j[ne]};break;case 15:let te=H.trimColon(j[ne]);this.$={stmt:"relation",state1:j[ne-3],state2:j[ne-1],description:te};break;case 19:this.$={stmt:"state",id:j[ne-3],type:"default",description:"",doc:j[ne-1]};break;case 20:var le=j[ne],he=j[ne-2].trim();if(j[ne].match(":")){var K=j[ne].split(":");le=K[0],he=[he,K[1]]}this.$={stmt:"state",id:le,type:"default",description:he};break;case 21:this.$={stmt:"state",id:j[ne-3],type:"default",description:j[ne-5],doc:j[ne-1]};break;case 22:this.$={stmt:"state",id:j[ne],type:"fork"};break;case 23:this.$={stmt:"state",id:j[ne],type:"join"};break;case 24:this.$={stmt:"state",id:j[ne],type:"choice"};break;case 25:this.$={stmt:"state",id:H.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:j[ne-1].trim(),note:{position:j[ne-2].trim(),text:j[ne].trim()}};break;case 29:this.$=j[ne].trim(),H.setAccTitle(this.$);break;case 30:case 31:this.$=j[ne].trim(),H.setAccDescription(this.$);break;case 32:case 33:this.$={stmt:"classDef",id:j[ne-1].trim(),classes:j[ne].trim()};break;case 34:this.$={stmt:"style",id:j[ne-1].trim(),styleClass:j[ne].trim()};break;case 35:this.$={stmt:"applyClass",id:j[ne-1].trim(),styleClass:j[ne].trim()};break;case 36:H.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 37:H.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 38:H.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 39:H.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 42:case 43:this.$={stmt:"state",id:j[ne].trim(),type:"default",description:""};break;case 44:this.$={stmt:"state",id:j[ne-2].trim(),classes:[j[ne].trim()],type:"default",description:""};break;case 45:this.$={stmt:"state",id:j[ne-2].trim(),classes:[j[ne].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,5]),{9:38,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,7]),t(k,[2,8]),t(k,[2,9]),t(k,[2,10]),t(k,[2,11]),t(k,[2,12],{14:[1,39],15:[1,40]}),t(k,[2,16]),{18:[1,41]},t(k,[2,18],{20:[1,42]}),{23:[1,43]},t(k,[2,22]),t(k,[2,23]),t(k,[2,24]),t(k,[2,25]),{30:44,31:[1,45],56:[1,46],57:[1,47]},t(k,[2,28]),{34:[1,48]},{36:[1,49]},t(k,[2,31]),{39:[1,50],41:[1,51]},{43:[1,52]},{46:[1,53]},t(L,[2,42],{55:[1,54]}),t(L,[2,43],{55:[1,55]}),t(k,[2,36]),t(k,[2,37]),t(k,[2,38]),t(k,[2,39]),t(k,[2,6]),t(k,[2,13]),{13:56,24:d,54:D},t(k,[2,17]),t(R,i,{7:57}),{24:[1,58]},{24:[1,59]},{23:[1,60]},{24:[2,46]},{24:[2,47]},t(k,[2,29]),t(k,[2,30]),{40:[1,61]},{40:[1,62]},{44:[1,63]},{47:[1,64]},{24:[1,65]},{24:[1,66]},t(k,[2,14],{14:[1,67]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,68],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,20],{20:[1,69]}),{31:[1,70]},{24:[1,71]},t(k,[2,32]),t(k,[2,33]),t(k,[2,34]),t(k,[2,35]),t(L,[2,44]),t(L,[2,45]),t(k,[2,15]),t(k,[2,19]),t(R,i,{7:72}),t(k,[2,26]),t(k,[2,27]),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,73],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,21])],defaultActions:{5:[2,1],6:[2,2],46:[2,46],47:[2,47]},parseError:o(function(P,z){if(z.recoverable)this.trace(P);else{var $=new Error(P);throw $.hash=z,$}},"parseError"),parse:o(function(P){var z=this,$=[0],H=[],Q=[null],j=[],ie=this.table,ne="",le=0,he=0,K=0,X=2,te=1,J=j.slice.call(arguments,1),se=Object.create(this.lexer),ue={yy:{}};for(var Z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Z)&&(ue.yy[Z]=this.yy[Z]);se.setInput(P,ue.yy),ue.yy.lexer=se,ue.yy.parser=this,typeof se.yylloc>"u"&&(se.yylloc={});var Se=se.yylloc;j.push(Se);var ce=se.options&&se.options.ranges;typeof ue.yy.parseError=="function"?this.parseError=ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ae(xe){$.length=$.length-2*xe,Q.length=Q.length-xe,j.length=j.length-xe}o(ae,"popStack");function Oe(){var xe;return xe=H.pop()||se.lex()||te,typeof xe!="number"&&(xe instanceof Array&&(H=xe,xe=H.pop()),xe=z.symbols_[xe]||xe),xe}o(Oe,"lex");for(var ge,ze,He,$e,Re,Ie,be={},W,de,re,oe;;){if(He=$[$.length-1],this.defaultActions[He]?$e=this.defaultActions[He]:((ge===null||typeof ge>"u")&&(ge=Oe()),$e=ie[He]&&ie[He][ge]),typeof $e>"u"||!$e.length||!$e[0]){var V="";oe=[];for(W in ie[He])this.terminals_[W]&&W>X&&oe.push("'"+this.terminals_[W]+"'");se.showPosition?V="Parse error on line "+(le+1)+`: | |
| 1528 | +`+se.showPosition()+` | |
| 1529 | +Expecting `+oe.join(", ")+", got '"+(this.terminals_[ge]||ge)+"'":V="Parse error on line "+(le+1)+": Unexpected "+(ge==te?"end of input":"'"+(this.terminals_[ge]||ge)+"'"),this.parseError(V,{text:se.match,token:this.terminals_[ge]||ge,line:se.yylineno,loc:Se,expected:oe})}if($e[0]instanceof Array&&$e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+He+", token: "+ge);switch($e[0]){case 1:$.push(ge),Q.push(se.yytext),j.push(se.yylloc),$.push($e[1]),ge=null,ze?(ge=ze,ze=null):(he=se.yyleng,ne=se.yytext,le=se.yylineno,Se=se.yylloc,K>0&&K--);break;case 2:if(de=this.productions_[$e[1]][1],be.$=Q[Q.length-de],be._$={first_line:j[j.length-(de||1)].first_line,last_line:j[j.length-1].last_line,first_column:j[j.length-(de||1)].first_column,last_column:j[j.length-1].last_column},ce&&(be._$.range=[j[j.length-(de||1)].range[0],j[j.length-1].range[1]]),Ie=this.performAction.apply(be,[ne,he,le,ue.yy,$e[1],Q,j].concat(J)),typeof Ie<"u")return Ie;de&&($=$.slice(0,-1*de*2),Q=Q.slice(0,-1*de),j=j.slice(0,-1*de)),$.push(this.productions_[$e[1]][0]),Q.push(be.$),j.push(be._$),re=ie[$[$.length-2]][$[$.length-1]],$.push(re);break;case 3:return!0}}return!0},"parse")},M=function(){var F={EOF:1,parseError:o(function(z,$){if(this.yy.parser)this.yy.parser.parseError(z,$);else throw new Error(z)},"parseError"),setInput:o(function(P,z){return this.yy=z||this.yy||{},this._input=P,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var P=this._input[0];this.yytext+=P,this.yyleng++,this.offset++,this.match+=P,this.matched+=P;var z=P.match(/(?:\r\n?|\n).*/g);return z?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),P},"input"),unput:o(function(P){var z=P.length,$=P.split(/(?:\r\n?|\n)/g);this._input=P+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-z),this.offset-=z;var H=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),$.length-1&&(this.yylineno-=$.length-1);var Q=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:$?($.length===H.length?this.yylloc.first_column:0)+H[H.length-$.length].length-$[0].length:this.yylloc.first_column-z},this.options.ranges&&(this.yylloc.range=[Q[0],Q[0]+this.yyleng-z]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1530 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(P){this.unput(this.match.slice(P))},"less"),pastInput:o(function(){var P=this.matched.substr(0,this.matched.length-this.match.length);return(P.length>20?"...":"")+P.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var P=this.match;return P.length<20&&(P+=this._input.substr(0,20-P.length)),(P.substr(0,20)+(P.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var P=this.pastInput(),z=new Array(P.length+1).join("-");return P+this.upcomingInput()+` | |
| 1531 | +`+z+"^"},"showPosition"),test_match:o(function(P,z){var $,H,Q;if(this.options.backtrack_lexer&&(Q={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Q.yylloc.range=this.yylloc.range.slice(0))),H=P[0].match(/(?:\r\n?|\n).*/g),H&&(this.yylineno+=H.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:H?H[H.length-1].length-H[H.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+P[0].length},this.yytext+=P[0],this.match+=P[0],this.matches=P,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(P[0].length),this.matched+=P[0],$=this.performAction.call(this,this.yy,this,z,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),$)return $;if(this._backtrack){for(var j in Q)this[j]=Q[j];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var P,z,$,H;this._more||(this.yytext="",this.match="");for(var Q=this._currentRules(),j=0;j<Q.length;j++)if($=this._input.match(this.rules[Q[j]]),$&&(!z||$[0].length>z[0].length)){if(z=$,H=j,this.options.backtrack_lexer){if(P=this.test_match($,Q[j]),P!==!1)return P;if(this._backtrack){z=!1;continue}else return!1}else if(!this.options.flex)break}return z?(P=this.test_match(z,Q[H]),P!==!1?P:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1532 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var z=this.next();return z||this.lex()},"lex"),begin:o(function(z){this.conditionStack.push(z)},"begin"),popState:o(function(){var z=this.conditionStack.length-1;return z>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(z){return z=this.conditionStack.length-1-Math.abs(z||0),z>=0?this.conditionStack[z]:"INITIAL"},"topState"),pushState:o(function(z){this.begin(z)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(z,$,H,Q){var j=Q;switch(H){case 0:return 41;case 1:return 48;case 2:return 49;case 3:return 50;case 4:return 51;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),17;break;case 13:return 18;case 14:this.popState();break;case 15:return this.begin("acc_title"),33;break;case 16:return this.popState(),"acc_title_value";break;case 17:return this.begin("acc_descr"),35;break;case 18:return this.popState(),"acc_descr_value";break;case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),38;break;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 24:return this.popState(),this.pushState("CLASSDEFID"),39;break;case 25:return this.popState(),40;break;case 26:return this.pushState("CLASS"),45;break;case 27:return this.popState(),this.pushState("CLASS_STYLE"),46;break;case 28:return this.popState(),47;break;case 29:return this.pushState("STYLE"),42;break;case 30:return this.popState(),this.pushState("STYLEDEF_STYLES"),43;break;case 31:return this.popState(),44;break;case 32:return this.pushState("SCALE"),17;break;case 33:return 18;case 34:this.popState();break;case 35:this.pushState("STATE");break;case 36:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),25;break;case 37:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),26;break;case 38:return this.popState(),$.yytext=$.yytext.slice(0,-10).trim(),27;break;case 39:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),$.yytext=$.yytext.slice(0,-10).trim(),27;break;case 42:return 48;case 43:return 49;case 44:return 50;case 45:return 51;case 46:this.pushState("STATE_STRING");break;case 47:return this.pushState("STATE_ID"),"AS";break;case 48:return this.popState(),"ID";break;case 49:this.popState();break;case 50:return"STATE_DESCR";case 51:return 19;case 52:this.popState();break;case 53:return this.popState(),this.pushState("struct"),20;break;case 54:break;case 55:return this.popState(),21;break;case 56:break;case 57:return this.begin("NOTE"),29;break;case 58:return this.popState(),this.pushState("NOTE_ID"),56;break;case 59:return this.popState(),this.pushState("NOTE_ID"),57;break;case 60:this.popState(),this.pushState("FLOATING_NOTE");break;case 61:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 62:break;case 63:return"NOTE_TEXT";case 64:return this.popState(),"ID";break;case 65:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 66:return this.popState(),$.yytext=$.yytext.substr(2).trim(),31;break;case 67:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),31;break;case 68:return 6;case 69:return 6;case 70:return 16;case 71:return 54;case 72:return 24;case 73:return $.yytext=$.yytext.trim(),14;break;case 74:return 15;case 75:return 28;case 76:return 55;case 77:return 5;case 78:return"INVALID"}},"anonymous"),rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,29,35,42,43,44,45,54,55,56,57,71,72,73,74,75],inclusive:!1},FLOATING_NOTE_ID:{rules:[64],inclusive:!1},FLOATING_NOTE:{rules:[61,62,63],inclusive:!1},NOTE_TEXT:{rules:[66,67],inclusive:!1},NOTE_ID:{rules:[65],inclusive:!1},NOTE:{rules:[58,59,60],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[31],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[30],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,33,34],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[48],inclusive:!1},STATE_STRING:{rules:[49,50],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,36,37,38,39,40,41,46,47,51,52,53],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,35,53,57,68,69,70,71,72,73,74,76,77,78],inclusive:!0}}};return F}();O.lexer=M;function B(){this.yy={}}return o(B,"Parser"),B.prototype=O,O.Parser=B,new B}();FO.parser=FO;I6=FO});var zfe,O6,zO,L1,Eb,Gfe,Vfe,Ufe,Rp,P6,GO,VO,UO,HO,WO,B6,F6,Hfe,Wfe,qO,YO,qfe,Yfe,R1,tUe,Xfe,XO,rUe,nUe,jfe,Kfe,iUe,Qfe,aUe,Zfe,jO,KO,Jfe,$6,ede,QO,z6=N(()=>{"use strict";zfe="TB",O6="TB",zO="dir",L1="state",Eb="relation",Gfe="classDef",Vfe="style",Ufe="applyClass",Rp="default",P6="divider",GO="fill:none",VO="fill: #333",UO="c",HO="text",WO="normal",B6="rect",F6="rectWithTitle",Hfe="stateStart",Wfe="stateEnd",qO="divider",YO="roundedWithTitle",qfe="note",Yfe="noteGroup",R1="statediagram",tUe="state",Xfe=`${R1}-${tUe}`,XO="transition",rUe="note",nUe="note-edge",jfe=`${XO} ${nUe}`,Kfe=`${R1}-${rUe}`,iUe="cluster",Qfe=`${R1}-${iUe}`,aUe="cluster-alt",Zfe=`${R1}-${aUe}`,jO="parent",KO="note",Jfe="state",$6="----",ede=`${$6}${KO}`,QO=`${$6}${jO}`});function ZO(t="",e=0,r="",n=$6){let i=r!==null&&r.length>0?`${n}${r}`:"";return`${Jfe}-${t}${i}-${e}`}function G6(t,e,r){if(!e.id||e.id==="</join></fork>"||e.id==="</choice>")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(i=>{if(r.get(i)){let a=r.get(i);e.cssCompiledStyles=[...e.cssCompiledStyles,...a.styles]}}));let n=t.find(i=>i.id===e.id);n?Object.assign(n,e):t.push(e)}function oUe(t){return t?.classes?.join(" ")??""}function lUe(t){return t?.styles??[]}var V6,xf,sUe,tde,N1,rde,nde=N(()=>{"use strict";zt();vt();gr();z6();V6=new Map,xf=0;o(ZO,"stateDomId");sUe=o((t,e,r,n,i,a,s,l)=>{Y.trace("items",e),e.forEach(u=>{switch(u.stmt){case L1:N1(t,u,r,n,i,a,s,l);break;case Rp:N1(t,u,r,n,i,a,s,l);break;case Eb:{N1(t,u.state1,r,n,i,a,s,l),N1(t,u.state2,r,n,i,a,s,l);let h={id:"edge"+xf,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:GO,labelStyle:"",label:Ze.sanitizeText(u.description,me()),arrowheadStyle:VO,labelpos:UO,labelType:HO,thickness:WO,classes:XO,look:s};i.push(h),xf++}break}})},"setupDoc"),tde=o((t,e=O6)=>{let r=e;if(t.doc)for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir");o(G6,"insertOrUpdateNode");o(oUe,"getClassesFromDbInfo");o(lUe,"getStylesFromDbInfo");N1=o((t,e,r,n,i,a,s,l)=>{let u=e.id,h=r.get(u),f=oUe(h),d=lUe(h);if(Y.info("dataFetcher parsedItem",e,h,d),u!=="root"){let p=B6;e.start===!0?p=Hfe:e.start===!1&&(p=Wfe),e.type!==Rp&&(p=e.type),V6.get(u)||V6.set(u,{id:u,shape:p,description:Ze.sanitizeText(u,me()),cssClasses:`${f} ${Xfe}`,cssStyles:d});let m=V6.get(u);e.description&&(Array.isArray(m.description)?(m.shape=F6,m.description.push(e.description)):m.description?.length>0?(m.shape=F6,m.description===u?m.description=[e.description]:m.description=[m.description,e.description]):(m.shape=B6,m.description=e.description),m.description=Ze.sanitizeTextOrArray(m.description,me())),m.description?.length===1&&m.shape===F6&&(m.type==="group"?m.shape=YO:m.shape=B6),!m.type&&e.doc&&(Y.info("Setting cluster for XCX",u,tde(e)),m.type="group",m.isGroup=!0,m.dir=tde(e),m.shape=e.type===P6?qO:YO,m.cssClasses=`${m.cssClasses} ${Qfe} ${a?Zfe:""}`);let g={labelStyle:"",shape:m.shape,label:m.description,cssClasses:m.cssClasses,cssCompiledStyles:[],cssStyles:m.cssStyles,id:u,dir:m.dir,domId:ZO(u,xf),type:m.type,isGroup:m.type==="group",padding:8,rx:10,ry:10,look:s};if(g.shape===qO&&(g.label=""),t&&t.id!=="root"&&(Y.trace("Setting node ",u," to be child of its parent ",t.id),g.parentId=t.id),g.centerLabel=!0,e.note){let y={labelStyle:"",shape:qfe,label:e.note.text,cssClasses:Kfe,cssStyles:[],cssCompilesStyles:[],id:u+ede+"-"+xf,domId:ZO(u,xf,KO),type:m.type,isGroup:m.type==="group",padding:me().flowchart.padding,look:s,position:e.note.position},v=u+QO,x={labelStyle:"",shape:Yfe,label:e.note.text,cssClasses:m.cssClasses,cssStyles:[],id:u+QO,domId:ZO(u,xf,jO),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};xf++,x.id=v,y.parentId=v,G6(n,x,l),G6(n,y,l),G6(n,g,l);let b=u,w=y.id;e.note.position==="left of"&&(b=y.id,w=u),i.push({id:b+"-"+w,start:b,end:w,arrowhead:"none",arrowTypeEnd:"",style:GO,labelStyle:"",classes:jfe,arrowheadStyle:VO,labelpos:UO,labelType:HO,thickness:WO,look:s})}else G6(n,g,l)}e.doc&&(Y.trace("Adding nodes children "),sUe(e,e.doc,r,n,i,!a,s,l))},"dataFetcher"),rde=o(()=>{V6.clear(),xf=0},"reset")});var JO,cUe,uUe,ide,eP=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();z6();JO=o((t,e=O6)=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),cUe=o(function(t,e){return e.db.getClasses()},"getClasses"),uUe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,state:a,layout:s}=me();n.db.extract(n.db.getRootDocV2());let l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["barb"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,R1,a?.useMaxWidth??!0)},"draw"),ide={getClasses:cUe,draw:uUe,getDir:JO}});function ude(){return new Map}var tP,ade,sde,ode,lde,cde,hUe,fUe,hde,U6,Qo,H6=N(()=>{"use strict";zt();vt();ir();gr();mi();nde();eP();z6();tP="[*]",ade="start",sde=tP,ode="end",lde="color",cde="fill",hUe="bgFill",fUe=",";o(ude,"newClassesList");hde=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),U6=o(t=>JSON.parse(JSON.stringify(t)),"clone"),Qo=class{static{o(this,"StateDB")}constructor(e){this.clear(),this.version=e,this.setRootDoc=this.setRootDoc.bind(this),this.getDividerId=this.getDividerId.bind(this),this.setDirection=this.setDirection.bind(this),this.trimColon=this.trimColon.bind(this)}version;nodes=[];edges=[];rootDoc=[];classes=ude();documents={root:hde()};currentDocument=this.documents.root;startEndCount=0;dividerCnt=0;static relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3};setRootDoc(e){Y.info("Setting root doc",e),this.rootDoc=e,this.version===1?this.extract(e):this.extract(this.getRootDocV2())}getRootDoc(){return this.rootDoc}docTranslator(e,r,n){if(r.stmt===Eb)this.docTranslator(e,r.state1,!0),this.docTranslator(e,r.state2,!1);else if(r.stmt===L1&&(r.id==="[*]"?(r.id=n?e.id+"_start":e.id+"_end",r.start=n):r.id=r.id.trim()),r.doc){let i=[],a=[],s;for(s=0;s<r.doc.length;s++)if(r.doc[s].type===P6){let l=U6(r.doc[s]);l.doc=U6(a),i.push(l),a=[]}else a.push(r.doc[s]);if(i.length>0&&a.length>0){let l={stmt:L1,id:X9(),type:"divider",doc:U6(a)};i.push(U6(l)),r.doc=i}r.doc.forEach(l=>this.docTranslator(r,l,!0))}}getRootDocV2(){return this.docTranslator({id:"root"},{id:"root",doc:this.rootDoc},!0),{id:"root",doc:this.rootDoc}}extract(e){let r;e.doc?r=e.doc:r=e,Y.info(r),this.clear(!0),Y.info("Extract initial document:",r),r.forEach(s=>{switch(Y.warn("Statement",s.stmt),s.stmt){case L1:this.addState(s.id.trim(),s.type,s.doc,s.description,s.note,s.classes,s.styles,s.textStyles);break;case Eb:this.addRelation(s.state1,s.state2,s.description);break;case Gfe:this.addStyleClass(s.id.trim(),s.classes);break;case Vfe:{let l=s.id.trim().split(","),u=s.styleClass.split(",");l.forEach(h=>{let f=this.getState(h);if(f===void 0){let d=h.trim();this.addState(d),f=this.getState(d)}f.styles=u.map(d=>d.replace(/;/g,"")?.trim())})}break;case Ufe:this.setCssClass(s.id.trim(),s.styleClass);break}});let n=this.getStates(),a=me().look;rde(),N1(void 0,this.getRootDocV2(),n,this.nodes,this.edges,!0,a,this.classes),this.nodes.forEach(s=>{if(Array.isArray(s.label)){if(s.description=s.label.slice(1),s.isGroup&&s.description.length>0)throw new Error("Group nodes can only have label. Remove the additional description for node ["+s.id+"]");s.label=s.label[0]}})}addState(e,r=Rp,n=null,i=null,a=null,s=null,l=null,u=null){let h=e?.trim();if(this.currentDocument.states.has(h)?(this.currentDocument.states.get(h).doc||(this.currentDocument.states.get(h).doc=n),this.currentDocument.states.get(h).type||(this.currentDocument.states.get(h).type=r)):(Y.info("Adding state ",h,i),this.currentDocument.states.set(h,{id:h,descriptions:[],type:r,doc:n,note:a,classes:[],styles:[],textStyles:[]})),i&&(Y.info("Setting state description",h,i),typeof i=="string"&&this.addDescription(h,i.trim()),typeof i=="object"&&i.forEach(f=>this.addDescription(h,f.trim()))),a){let f=this.currentDocument.states.get(h);f.note=a,f.note.text=Ze.sanitizeText(f.note.text,me())}s&&(Y.info("Setting state classes",h,s),(typeof s=="string"?[s]:s).forEach(d=>this.setCssClass(h,d.trim()))),l&&(Y.info("Setting state styles",h,l),(typeof l=="string"?[l]:l).forEach(d=>this.setStyle(h,d.trim()))),u&&(Y.info("Setting state styles",h,l),(typeof u=="string"?[u]:u).forEach(d=>this.setTextStyle(h,d.trim())))}clear(e){this.nodes=[],this.edges=[],this.documents={root:hde()},this.currentDocument=this.documents.root,this.startEndCount=0,this.classes=ude(),e||Ar()}getState(e){return this.currentDocument.states.get(e)}getStates(){return this.currentDocument.states}logDocuments(){Y.info("Documents = ",this.documents)}getRelations(){return this.currentDocument.relations}startIdIfNeeded(e=""){let r=e;return e===tP&&(this.startEndCount++,r=`${ade}${this.startEndCount}`),r}startTypeIfNeeded(e="",r=Rp){return e===tP?ade:r}endIdIfNeeded(e=""){let r=e;return e===sde&&(this.startEndCount++,r=`${ode}${this.startEndCount}`),r}endTypeIfNeeded(e="",r=Rp){return e===sde?ode:r}addRelationObjs(e,r,n){let i=this.startIdIfNeeded(e.id.trim()),a=this.startTypeIfNeeded(e.id.trim(),e.type),s=this.startIdIfNeeded(r.id.trim()),l=this.startTypeIfNeeded(r.id.trim(),r.type);this.addState(i,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),this.addState(s,l,r.doc,r.description,r.note,r.classes,r.styles,r.textStyles),this.currentDocument.relations.push({id1:i,id2:s,relationTitle:Ze.sanitizeText(n,me())})}addRelation(e,r,n){if(typeof e=="object")this.addRelationObjs(e,r,n);else{let i=this.startIdIfNeeded(e.trim()),a=this.startTypeIfNeeded(e),s=this.endIdIfNeeded(r.trim()),l=this.endTypeIfNeeded(r);this.addState(i,a),this.addState(s,l),this.currentDocument.relations.push({id1:i,id2:s,title:Ze.sanitizeText(n,me())})}}addDescription(e,r){let n=this.currentDocument.states.get(e),i=r.startsWith(":")?r.replace(":","").trim():r;n.descriptions.push(Ze.sanitizeText(i,me()))}cleanupLabel(e){return e.substring(0,1)===":"?e.substr(2).trim():e.trim()}getDividerId(){return this.dividerCnt++,"divider-id-"+this.dividerCnt}addStyleClass(e,r=""){this.classes.has(e)||this.classes.set(e,{id:e,styles:[],textStyles:[]});let n=this.classes.get(e);r?.split(fUe).forEach(i=>{let a=i.replace(/([^;]*);/,"$1").trim();if(RegExp(lde).exec(i)){let l=a.replace(cde,hUe).replace(lde,cde);n.textStyles.push(l)}n.styles.push(a)})}getClasses(){return this.classes}setCssClass(e,r){e.split(",").forEach(n=>{let i=this.getState(n);if(i===void 0){let a=n.trim();this.addState(a),i=this.getState(a)}i.classes.push(r)})}setStyle(e,r){let n=this.getState(e);n!==void 0&&n.styles.push(r)}setTextStyle(e,r){let n=this.getState(e);n!==void 0&&n.textStyles.push(r)}getDirectionStatement(){return this.rootDoc.find(e=>e.stmt===zO)}getDirection(){return this.getDirectionStatement()?.value??zfe}setDirection(e){let r=this.getDirectionStatement();r?r.value=e:this.rootDoc.unshift({stmt:zO,value:e})}trimColon(e){return e&&e[0]===":"?e.substr(1).trim():e.trim()}getData(){let e=me();return{nodes:this.nodes,edges:this.edges,other:{},config:e,direction:JO(this.getRootDocV2())}}getConfig(){return me().state}getAccTitle=Rr;setAccTitle=Lr;getAccDescription=Mr;setAccDescription=Nr;setDiagramTitle=$r;getDiagramTitle=Ir}});var dUe,W6,rP=N(()=>{"use strict";dUe=o(t=>` | |
| 1533 | +defs #statediagram-barbEnd { | |
| 1534 | + fill: ${t.transitionColor}; | |
| 1535 | + stroke: ${t.transitionColor}; | |
| 1536 | + } | |
| 1537 | +g.stateGroup text { | |
| 1538 | + fill: ${t.nodeBorder}; | |
| 1539 | + stroke: none; | |
| 1540 | + font-size: 10px; | |
| 1541 | +} | |
| 1542 | +g.stateGroup text { | |
| 1543 | + fill: ${t.textColor}; | |
| 1544 | + stroke: none; | |
| 1545 | + font-size: 10px; | |
| 1546 | + | |
| 1547 | +} | |
| 1548 | +g.stateGroup .state-title { | |
| 1549 | + font-weight: bolder; | |
| 1550 | + fill: ${t.stateLabelColor}; | |
| 1551 | +} | |
| 1552 | + | |
| 1553 | +g.stateGroup rect { | |
| 1554 | + fill: ${t.mainBkg}; | |
| 1555 | + stroke: ${t.nodeBorder}; | |
| 1556 | +} | |
| 1557 | + | |
| 1558 | +g.stateGroup line { | |
| 1559 | + stroke: ${t.lineColor}; | |
| 1560 | + stroke-width: 1; | |
| 1561 | +} | |
| 1562 | + | |
| 1563 | +.transition { | |
| 1564 | + stroke: ${t.transitionColor}; | |
| 1565 | + stroke-width: 1; | |
| 1566 | + fill: none; | |
| 1567 | +} | |
| 1568 | + | |
| 1569 | +.stateGroup .composit { | |
| 1570 | + fill: ${t.background}; | |
| 1571 | + border-bottom: 1px | |
| 1572 | +} | |
| 1573 | + | |
| 1574 | +.stateGroup .alt-composit { | |
| 1575 | + fill: #e0e0e0; | |
| 1576 | + border-bottom: 1px | |
| 1577 | +} | |
| 1578 | + | |
| 1579 | +.state-note { | |
| 1580 | + stroke: ${t.noteBorderColor}; | |
| 1581 | + fill: ${t.noteBkgColor}; | |
| 1582 | + | |
| 1583 | + text { | |
| 1584 | + fill: ${t.noteTextColor}; | |
| 1585 | + stroke: none; | |
| 1586 | + font-size: 10px; | |
| 1587 | + } | |
| 1588 | +} | |
| 1589 | + | |
| 1590 | +.stateLabel .box { | |
| 1591 | + stroke: none; | |
| 1592 | + stroke-width: 0; | |
| 1593 | + fill: ${t.mainBkg}; | |
| 1594 | + opacity: 0.5; | |
| 1595 | +} | |
| 1596 | + | |
| 1597 | +.edgeLabel .label rect { | |
| 1598 | + fill: ${t.labelBackgroundColor}; | |
| 1599 | + opacity: 0.5; | |
| 1600 | +} | |
| 1601 | +.edgeLabel { | |
| 1602 | + background-color: ${t.edgeLabelBackground}; | |
| 1603 | + p { | |
| 1604 | + background-color: ${t.edgeLabelBackground}; | |
| 1605 | + } | |
| 1606 | + rect { | |
| 1607 | + opacity: 0.5; | |
| 1608 | + background-color: ${t.edgeLabelBackground}; | |
| 1609 | + fill: ${t.edgeLabelBackground}; | |
| 1610 | + } | |
| 1611 | + text-align: center; | |
| 1612 | +} | |
| 1613 | +.edgeLabel .label text { | |
| 1614 | + fill: ${t.transitionLabelColor||t.tertiaryTextColor}; | |
| 1615 | +} | |
| 1616 | +.label div .edgeLabel { | |
| 1617 | + color: ${t.transitionLabelColor||t.tertiaryTextColor}; | |
| 1618 | +} | |
| 1619 | + | |
| 1620 | +.stateLabel text { | |
| 1621 | + fill: ${t.stateLabelColor}; | |
| 1622 | + font-size: 10px; | |
| 1623 | + font-weight: bold; | |
| 1624 | +} | |
| 1625 | + | |
| 1626 | +.node circle.state-start { | |
| 1627 | + fill: ${t.specialStateColor}; | |
| 1628 | + stroke: ${t.specialStateColor}; | |
| 1629 | +} | |
| 1630 | + | |
| 1631 | +.node .fork-join { | |
| 1632 | + fill: ${t.specialStateColor}; | |
| 1633 | + stroke: ${t.specialStateColor}; | |
| 1634 | +} | |
| 1635 | + | |
| 1636 | +.node circle.state-end { | |
| 1637 | + fill: ${t.innerEndBackground}; | |
| 1638 | + stroke: ${t.background}; | |
| 1639 | + stroke-width: 1.5 | |
| 1640 | +} | |
| 1641 | +.end-state-inner { | |
| 1642 | + fill: ${t.compositeBackground||t.background}; | |
| 1643 | + // stroke: ${t.background}; | |
| 1644 | + stroke-width: 1.5 | |
| 1645 | +} | |
| 1646 | + | |
| 1647 | +.node rect { | |
| 1648 | + fill: ${t.stateBkg||t.mainBkg}; | |
| 1649 | + stroke: ${t.stateBorder||t.nodeBorder}; | |
| 1650 | + stroke-width: 1px; | |
| 1651 | +} | |
| 1652 | +.node polygon { | |
| 1653 | + fill: ${t.mainBkg}; | |
| 1654 | + stroke: ${t.stateBorder||t.nodeBorder};; | |
| 1655 | + stroke-width: 1px; | |
| 1656 | +} | |
| 1657 | +#statediagram-barbEnd { | |
| 1658 | + fill: ${t.lineColor}; | |
| 1659 | +} | |
| 1660 | + | |
| 1661 | +.statediagram-cluster rect { | |
| 1662 | + fill: ${t.compositeTitleBackground}; | |
| 1663 | + stroke: ${t.stateBorder||t.nodeBorder}; | |
| 1664 | + stroke-width: 1px; | |
| 1665 | +} | |
| 1666 | + | |
| 1667 | +.cluster-label, .nodeLabel { | |
| 1668 | + color: ${t.stateLabelColor}; | |
| 1669 | + // line-height: 1; | |
| 1670 | +} | |
| 1671 | + | |
| 1672 | +.statediagram-cluster rect.outer { | |
| 1673 | + rx: 5px; | |
| 1674 | + ry: 5px; | |
| 1675 | +} | |
| 1676 | +.statediagram-state .divider { | |
| 1677 | + stroke: ${t.stateBorder||t.nodeBorder}; | |
| 1678 | +} | |
| 1679 | + | |
| 1680 | +.statediagram-state .title-state { | |
| 1681 | + rx: 5px; | |
| 1682 | + ry: 5px; | |
| 1683 | +} | |
| 1684 | +.statediagram-cluster.statediagram-cluster .inner { | |
| 1685 | + fill: ${t.compositeBackground||t.background}; | |
| 1686 | +} | |
| 1687 | +.statediagram-cluster.statediagram-cluster-alt .inner { | |
| 1688 | + fill: ${t.altBackground?t.altBackground:"#efefef"}; | |
| 1689 | +} | |
| 1690 | + | |
| 1691 | +.statediagram-cluster .inner { | |
| 1692 | + rx:0; | |
| 1693 | + ry:0; | |
| 1694 | +} | |
| 1695 | + | |
| 1696 | +.statediagram-state rect.basic { | |
| 1697 | + rx: 5px; | |
| 1698 | + ry: 5px; | |
| 1699 | +} | |
| 1700 | +.statediagram-state rect.divider { | |
| 1701 | + stroke-dasharray: 10,10; | |
| 1702 | + fill: ${t.altBackground?t.altBackground:"#efefef"}; | |
| 1703 | +} | |
| 1704 | + | |
| 1705 | +.note-edge { | |
| 1706 | + stroke-dasharray: 5; | |
| 1707 | +} | |
| 1708 | + | |
| 1709 | +.statediagram-note rect { | |
| 1710 | + fill: ${t.noteBkgColor}; | |
| 1711 | + stroke: ${t.noteBorderColor}; | |
| 1712 | + stroke-width: 1px; | |
| 1713 | + rx: 0; | |
| 1714 | + ry: 0; | |
| 1715 | +} | |
| 1716 | +.statediagram-note rect { | |
| 1717 | + fill: ${t.noteBkgColor}; | |
| 1718 | + stroke: ${t.noteBorderColor}; | |
| 1719 | + stroke-width: 1px; | |
| 1720 | + rx: 0; | |
| 1721 | + ry: 0; | |
| 1722 | +} | |
| 1723 | + | |
| 1724 | +.statediagram-note text { | |
| 1725 | + fill: ${t.noteTextColor}; | |
| 1726 | +} | |
| 1727 | + | |
| 1728 | +.statediagram-note .nodeLabel { | |
| 1729 | + color: ${t.noteTextColor}; | |
| 1730 | +} | |
| 1731 | +.statediagram .edgeLabel { | |
| 1732 | + color: red; // ${t.noteTextColor}; | |
| 1733 | +} | |
| 1734 | + | |
| 1735 | +#dependencyStart, #dependencyEnd { | |
| 1736 | + fill: ${t.lineColor}; | |
| 1737 | + stroke: ${t.lineColor}; | |
| 1738 | + stroke-width: 1; | |
| 1739 | +} | |
| 1740 | + | |
| 1741 | +.statediagramTitleText { | |
| 1742 | + text-anchor: middle; | |
| 1743 | + font-size: 18px; | |
| 1744 | + fill: ${t.textColor}; | |
| 1745 | +} | |
| 1746 | +`,"getStyles"),W6=dUe});var nP,pUe,mUe,fde,gUe,dde,pde=N(()=>{"use strict";nP={},pUe=o((t,e)=>{nP[t]=e},"set"),mUe=o(t=>nP[t],"get"),fde=o(()=>Object.keys(nP),"keys"),gUe=o(()=>fde().length,"size"),dde={get:mUe,set:pUe,keys:fde,size:gUe}});var yUe,vUe,xUe,bUe,gde,wUe,TUe,kUe,EUe,iP,mde,yde,vde=N(()=>{"use strict";dr();pde();H6();ir();gr();zt();vt();yUe=o(t=>t.append("circle").attr("class","start-state").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit).attr("cy",me().state.padding+me().state.sizeUnit),"drawStartState"),vUe=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",me().state.textHeight).attr("class","divider").attr("x2",me().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),xUe=o((t,e)=>{let r=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+2*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",n.width+2*me().state.padding).attr("height",n.height+2*me().state.padding).attr("rx",me().state.radius),r},"drawSimpleState"),bUe=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*me().state.padding).text(m);g||y.attr("dy",me().state.textHeight)},"addTspan"),i=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+1.3*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",me().state.padding).attr("y",a+me().state.padding*.4+me().state.dividerMargin+me().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",me().state.padding).attr("y1",me().state.padding+a+me().state.dividerMargin/2).attr("y2",me().state.padding+a+me().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,i.width);return h.attr("x2",d+3*me().state.padding),t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",d+2*me().state.padding).attr("height",f.height+a+2*me().state.padding).attr("rx",me().state.radius),t},"drawDescrState"),gde=o((t,e,r)=>{let n=me().state.padding,i=2*me().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",me().state.titleShift).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+i,d=Math.max(f,s);d===s&&(d=d+i);let p,m=t.node().getBBox();e.doc,p=l-n,f>s&&(p=(s-d)/2+n),Math.abs(l-m.x)<n&&f>s&&(p=l-(f-s)/2);let g=1-me().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+me().state.textHeight+me().state.titleShift+1).attr("rx","0"),u.attr("x",p+n),f<=s&&u.attr("x",l+(d-i)/2-f/2+n),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",me().state.textHeight*3).attr("rx",me().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",m.height+3+2*me().state.textHeight).attr("rx",me().state.radius),t},"addTitleAndBox"),wUe=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",me().state.sizeUnit+me().state.miniPadding).attr("cx",me().state.padding+me().state.sizeUnit+me().state.miniPadding).attr("cy",me().state.padding+me().state.sizeUnit+me().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit+2).attr("cy",me().state.padding+me().state.sizeUnit+2)),"drawEndState"),TUe=o((t,e)=>{let r=me().state.forkWidth,n=me().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",me().state.padding).attr("y",me().state.padding)},"drawForkJoinState"),kUe=o((t,e,r,n)=>{let i=0,a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"<br/>");s=s.replace(/\n/g,"<br/>");let l=s.split(Ze.lineBreakRegex),u=1.25*me().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}i+=u,d.attr("x",e+me().state.noteMargin),d.attr("y",r+i+1.25*me().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},"_drawLongText"),EUe=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",me().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=kUe(t,0,0,n);return r.attr("height",a+2*me().state.noteMargin),r.attr("width",i+me().state.noteMargin*2),r},"drawNote"),iP=o(function(t,e){let r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&yUe(i),e.type==="end"&&wUe(i),(e.type==="fork"||e.type==="join")&&TUe(i,e),e.type==="note"&&EUe(e.note.text,i),e.type==="divider"&&vUe(i),e.type==="default"&&e.descriptions.length===0&&xUe(i,e),e.type==="default"&&e.descriptions.length>0&&bUe(i,e);let a=i.node().getBBox();return n.width=a.width+2*me().state.padding,n.height=a.height+2*me().state.padding,dde.set(r,n),n},"drawState"),mde=0,yde=o(function(t,e,r){let n=o(function(u){switch(u){case Qo.relationType.AGGREGATION:return"aggregation";case Qo.relationType.EXTENSION:return"extension";case Qo.relationType.COMPOSITION:return"composition";case Qo.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let i=e.points,a=wl().x(function(u){return u.x}).y(function(u){return u.y}).curve(Do),s=t.append("path").attr("d",a(i)).attr("id","edge"+mde).attr("class","transition"),l="";if(me().state.arrowMarkerAbsolute&&(l=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,l=l.replace(/\(/g,"\\("),l=l.replace(/\)/g,"\\)")),s.attr("marker-end","url("+l+"#"+n(Qo.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Gt.calcLabelPosition(e.points),d=Ze.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let w=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),C=w.node().getBBox();g=Math.max(g,C.width),y=Math.min(y,C.x),Y.info(C.x,h,f+p),p===0&&(p=w.node().getBBox().height,Y.info("Title height",p,f)),m.push(w)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((w,C)=>w.attr("y",f+C*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-me().state.padding/2).attr("y",f-v/2-me().state.padding/2-3.5).attr("width",g+me().state.padding).attr("height",v+me().state.padding),Y.info(x)}mde++},"drawEdge")});var fo,aP,SUe,CUe,AUe,_Ue,xde,bde,wde=N(()=>{"use strict";dr();gR();Vo();vt();gr();vde();zt();Ei();aP={},SUe=o(function(){},"setConf"),CUe=o(function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),AUe=o(function(t,e,r,n){fo=me().state;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=i==="sandbox"?a.nodes()[0].contentDocument:document;Y.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);CUe(u);let h=n.db.getRootDoc();xde(h,u,void 0,!1,s,l,n);let f=fo.padding,d=u.node().getBBox(),p=d.width+f*2,m=d.height+f*2,g=p*1.75;vn(u,m,g,fo.useMaxWidth),u.attr("viewBox",`${d.x-fo.padding} ${d.y-fo.padding} `+p+" "+m)},"draw"),_Ue=o(t=>t?t.length*fo.fontSizeFactor:1,"getLabelWidth"),xde=o((t,e,r,n,i,a,s)=>{let l=new sn({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u<t.length;u++)if(t[u].stmt==="relation"){h=!1;break}r?l.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:h?1:fo.edgeLengthFactor,nodeSep:h?1:50,isMultiGraph:!0}):l.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:h?1:fo.edgeLengthFactor,nodeSep:h?1:50,ranker:"tight-tree",isMultiGraph:!0}),l.setDefaultEdgeLabel(function(){return{}});let f=s.db.getStates(),d=s.db.getRelations(),p=Object.keys(f),m=!0;for(let b of p){let w=f[b];r&&(w.parentId=r);let C;if(w.doc){let T=e.append("g").attr("id",w.id).attr("class","stateGroup");if(C=xde(w.doc,T,w.id,!n,i,a,s),m){T=gde(T,w,n);let E=T.node().getBBox();C.width=E.width,C.height=E.height+fo.padding/2,aP[w.id]={y:fo.compositTitleSize}}else{let E=T.node().getBBox();C.width=E.width,C.height=E.height}}else C=iP(e,w,l);if(w.note){let T={descriptions:[],id:w.id+"-note",note:w.note,type:"note"},E=iP(e,T,l);w.note.position==="left of"?(l.setNode(C.id+"-note",E),l.setNode(C.id,C)):(l.setNode(C.id,C),l.setNode(C.id+"-note",E)),l.setParent(C.id,C.id+"-group"),l.setParent(C.id+"-note",C.id+"-group")}else l.setNode(C.id,C)}Y.debug("Count=",l.nodeCount(),l);let g=0;d.forEach(function(b){g++,Y.debug("Setting edge",b),l.setEdge(b.id1,b.id2,{relation:b,width:_Ue(b.title),height:fo.labelHeight*Ze.getRows(b.title).length,labelpos:"c"},"id"+g)}),R2(l),Y.debug("Graph after layout",l.nodes());let y=e.node();l.nodes().forEach(function(b){b!==void 0&&l.node(b)!==void 0?(Y.warn("Node "+b+": "+JSON.stringify(l.node(b))),i.select("#"+y.id+" #"+b).attr("transform","translate("+(l.node(b).x-l.node(b).width/2)+","+(l.node(b).y+(aP[b]?aP[b].y:0)-l.node(b).height/2)+" )"),i.select("#"+y.id+" #"+b).attr("data-x-shift",l.node(b).x-l.node(b).width/2),a.querySelectorAll("#"+y.id+" #"+b+" .divider").forEach(C=>{let T=C.parentElement,E=0,A=0;T&&(T.parentElement&&(E=T.parentElement.getBBox().width),A=parseInt(T.getAttribute("data-x-shift"),10),Number.isNaN(A)&&(A=0)),C.setAttribute("x1",0-A+8),C.setAttribute("x2",E-A-8)})):Y.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(Y.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),yde(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*fo.padding,x.height=v.height+2*fo.padding,Y.debug("Doc rendered",x,l),x},"renderDoc"),bde={setConf:SUe,draw:AUe}});var Tde={};hr(Tde,{diagram:()=>DUe});var DUe,kde=N(()=>{"use strict";$O();H6();rP();wde();DUe={parser:I6,get db(){return new Qo(1)},renderer:bde,styles:W6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Cde={};hr(Cde,{diagram:()=>MUe});var MUe,Ade=N(()=>{"use strict";$O();H6();rP();eP();MUe={parser:I6,get db(){return new Qo(2)},renderer:ide,styles:W6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var sP,Lde,Rde=N(()=>{"use strict";sP=function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var w=x.length-1;switch(v){case 1:return x[w-1];case 2:this.$=[];break;case 3:x[w-1].push(x[w]),this.$=x[w-1];break;case 4:case 5:this.$=x[w];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[w].substr(6)),this.$=x[w].substr(6);break;case 9:this.$=x[w].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[w].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[w].substr(8)),this.$=x[w].substr(8);break;case 13:y.addTask(x[w-1],x[w]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,w="",C=0,T=0,E=0,A=2,S=1,_=x.slice.call(arguments,1),I=Object.create(this.lexer),D={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(D.yy[k]=this.yy[k]);I.setInput(p,D.yy),D.yy.lexer=I,D.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var L=I.yylloc;x.push(L);var R=I.options&&I.options.ranges;typeof D.yy.parseError=="function"?this.parseError=D.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function O(K){g.length=g.length-2*K,v.length=v.length-K,x.length=x.length-K}o(O,"popStack");function M(){var K;return K=y.pop()||I.lex()||S,typeof K!="number"&&(K instanceof Array&&(y=K,K=y.pop()),K=m.symbols_[K]||K),K}o(M,"lex");for(var B,F,P,z,$,H,Q={},j,ie,ne,le;;){if(P=g[g.length-1],this.defaultActions[P]?z=this.defaultActions[P]:((B===null||typeof B>"u")&&(B=M()),z=b[P]&&b[P][B]),typeof z>"u"||!z.length||!z[0]){var he="";le=[];for(j in b[P])this.terminals_[j]&&j>A&&le.push("'"+this.terminals_[j]+"'");I.showPosition?he="Parse error on line "+(C+1)+`: | |
| 1747 | +`+I.showPosition()+` | |
| 1748 | +Expecting `+le.join(", ")+", got '"+(this.terminals_[B]||B)+"'":he="Parse error on line "+(C+1)+": Unexpected "+(B==S?"end of input":"'"+(this.terminals_[B]||B)+"'"),this.parseError(he,{text:I.match,token:this.terminals_[B]||B,line:I.yylineno,loc:L,expected:le})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+P+", token: "+B);switch(z[0]){case 1:g.push(B),v.push(I.yytext),x.push(I.yylloc),g.push(z[1]),B=null,F?(B=F,F=null):(T=I.yyleng,w=I.yytext,C=I.yylineno,L=I.yylloc,E>0&&E--);break;case 2:if(ie=this.productions_[z[1]][1],Q.$=v[v.length-ie],Q._$={first_line:x[x.length-(ie||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(ie||1)].first_column,last_column:x[x.length-1].last_column},R&&(Q._$.range=[x[x.length-(ie||1)].range[0],x[x.length-1].range[1]]),H=this.performAction.apply(Q,[w,T,C,D.yy,z[1],v,x].concat(_)),typeof H<"u")return H;ie&&(g=g.slice(0,-1*ie*2),v=v.slice(0,-1*ie),x=x.slice(0,-1*ie)),g.push(this.productions_[z[1]][0]),v.push(Q.$),x.push(Q._$),ne=b[g[g.length-2]][g[g.length-1]],g.push(ne);break;case 3:return!0}}return!0},"parse")},h=function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1749 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+` | |
| 1750 | +`+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;x<v.length;x++)if(g=this._input.match(this.rules[v[x]]),g&&(!m||g[0].length>m[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1751 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return d}();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f}();sP.parser=sP;Lde=sP});var M1,oP,Sb,Cb,BUe,FUe,$Ue,zUe,GUe,VUe,UUe,Nde,HUe,lP,Mde=N(()=>{"use strict";zt();mi();M1="",oP=[],Sb=[],Cb=[],BUe=o(function(){oP.length=0,Sb.length=0,M1="",Cb.length=0,Ar()},"clear"),FUe=o(function(t){M1=t,oP.push(t)},"addSection"),$Ue=o(function(){return oP},"getSections"),zUe=o(function(){let t=Nde(),e=100,r=0;for(;!t&&r<e;)t=Nde(),r++;return Sb.push(...Cb),Sb},"getTasks"),GUe=o(function(){let t=[];return Sb.forEach(r=>{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),VUe=o(function(t,e){let r=e.substr(1).split(":"),n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));let a=i.map(l=>l.trim()),s={section:M1,type:M1,people:a,task:t,score:n};Cb.push(s)},"addTask"),UUe=o(function(t){let e={section:M1,type:M1,description:t,task:t,classes:[]};Sb.push(e)},"addTaskOrg"),Nde=o(function(){let t=o(function(r){return Cb[r].processed},"compileTask"),e=!0;for(let[r,n]of Cb.entries())t(r),e=e&&n.processed;return e},"compileTasks"),HUe=o(function(){return GUe()},"getActors"),lP={getConfig:o(()=>me().journey,"getConfig"),clear:BUe,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addSection:FUe,getSections:$Ue,getTasks:zUe,addTask:VUe,addTaskOrg:UUe,getActors:HUe}});var WUe,Ide,Ode=N(()=>{"use strict";WUe=o(t=>`.label { | |
| 1752 | + font-family: ${t.fontFamily}; | |
| 1753 | + color: ${t.textColor}; | |
| 1754 | + } | |
| 1755 | + .mouth { | |
| 1756 | + stroke: #666; | |
| 1757 | + } | |
| 1758 | + | |
| 1759 | + line { | |
| 1760 | + stroke: ${t.textColor} | |
| 1761 | + } | |
| 1762 | + | |
| 1763 | + .legend { | |
| 1764 | + fill: ${t.textColor}; | |
| 1765 | + font-family: ${t.fontFamily}; | |
| 1766 | + } | |
| 1767 | + | |
| 1768 | + .label text { | |
| 1769 | + fill: #333; | |
| 1770 | + } | |
| 1771 | + .label { | |
| 1772 | + color: ${t.textColor} | |
| 1773 | + } | |
| 1774 | + | |
| 1775 | + .face { | |
| 1776 | + ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"}; | |
| 1777 | + stroke: #999; | |
| 1778 | + } | |
| 1779 | + | |
| 1780 | + .node rect, | |
| 1781 | + .node circle, | |
| 1782 | + .node ellipse, | |
| 1783 | + .node polygon, | |
| 1784 | + .node path { | |
| 1785 | + fill: ${t.mainBkg}; | |
| 1786 | + stroke: ${t.nodeBorder}; | |
| 1787 | + stroke-width: 1px; | |
| 1788 | + } | |
| 1789 | + | |
| 1790 | + .node .label { | |
| 1791 | + text-align: center; | |
| 1792 | + } | |
| 1793 | + .node.clickable { | |
| 1794 | + cursor: pointer; | |
| 1795 | + } | |
| 1796 | + | |
| 1797 | + .arrowheadPath { | |
| 1798 | + fill: ${t.arrowheadColor}; | |
| 1799 | + } | |
| 1800 | + | |
| 1801 | + .edgePath .path { | |
| 1802 | + stroke: ${t.lineColor}; | |
| 1803 | + stroke-width: 1.5px; | |
| 1804 | + } | |
| 1805 | + | |
| 1806 | + .flowchart-link { | |
| 1807 | + stroke: ${t.lineColor}; | |
| 1808 | + fill: none; | |
| 1809 | + } | |
| 1810 | + | |
| 1811 | + .edgeLabel { | |
| 1812 | + background-color: ${t.edgeLabelBackground}; | |
| 1813 | + rect { | |
| 1814 | + opacity: 0.5; | |
| 1815 | + } | |
| 1816 | + text-align: center; | |
| 1817 | + } | |
| 1818 | + | |
| 1819 | + .cluster rect { | |
| 1820 | + } | |
| 1821 | + | |
| 1822 | + .cluster text { | |
| 1823 | + fill: ${t.titleColor}; | |
| 1824 | + } | |
| 1825 | + | |
| 1826 | + div.mermaidTooltip { | |
| 1827 | + position: absolute; | |
| 1828 | + text-align: center; | |
| 1829 | + max-width: 200px; | |
| 1830 | + padding: 2px; | |
| 1831 | + font-family: ${t.fontFamily}; | |
| 1832 | + font-size: 12px; | |
| 1833 | + background: ${t.tertiaryColor}; | |
| 1834 | + border: 1px solid ${t.border2}; | |
| 1835 | + border-radius: 2px; | |
| 1836 | + pointer-events: none; | |
| 1837 | + z-index: 100; | |
| 1838 | + } | |
| 1839 | + | |
| 1840 | + .task-type-0, .section-type-0 { | |
| 1841 | + ${t.fillType0?`fill: ${t.fillType0}`:""}; | |
| 1842 | + } | |
| 1843 | + .task-type-1, .section-type-1 { | |
| 1844 | + ${t.fillType0?`fill: ${t.fillType1}`:""}; | |
| 1845 | + } | |
| 1846 | + .task-type-2, .section-type-2 { | |
| 1847 | + ${t.fillType0?`fill: ${t.fillType2}`:""}; | |
| 1848 | + } | |
| 1849 | + .task-type-3, .section-type-3 { | |
| 1850 | + ${t.fillType0?`fill: ${t.fillType3}`:""}; | |
| 1851 | + } | |
| 1852 | + .task-type-4, .section-type-4 { | |
| 1853 | + ${t.fillType0?`fill: ${t.fillType4}`:""}; | |
| 1854 | + } | |
| 1855 | + .task-type-5, .section-type-5 { | |
| 1856 | + ${t.fillType0?`fill: ${t.fillType5}`:""}; | |
| 1857 | + } | |
| 1858 | + .task-type-6, .section-type-6 { | |
| 1859 | + ${t.fillType0?`fill: ${t.fillType6}`:""}; | |
| 1860 | + } | |
| 1861 | + .task-type-7, .section-type-7 { | |
| 1862 | + ${t.fillType0?`fill: ${t.fillType7}`:""}; | |
| 1863 | + } | |
| 1864 | + | |
| 1865 | + .actor-0 { | |
| 1866 | + ${t.actor0?`fill: ${t.actor0}`:""}; | |
| 1867 | + } | |
| 1868 | + .actor-1 { | |
| 1869 | + ${t.actor1?`fill: ${t.actor1}`:""}; | |
| 1870 | + } | |
| 1871 | + .actor-2 { | |
| 1872 | + ${t.actor2?`fill: ${t.actor2}`:""}; | |
| 1873 | + } | |
| 1874 | + .actor-3 { | |
| 1875 | + ${t.actor3?`fill: ${t.actor3}`:""}; | |
| 1876 | + } | |
| 1877 | + .actor-4 { | |
| 1878 | + ${t.actor4?`fill: ${t.actor4}`:""}; | |
| 1879 | + } | |
| 1880 | + .actor-5 { | |
| 1881 | + ${t.actor5?`fill: ${t.actor5}`:""}; | |
| 1882 | + } | |
| 1883 | +`,"getStyles"),Ide=WUe});var cP,qUe,Bde,Fde,YUe,XUe,Pde,jUe,KUe,$de,QUe,I1,zde=N(()=>{"use strict";dr();Wv();cP=o(function(t,e){return kd(t,e)},"drawRect"),qUe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=bl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=bl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),Bde=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),Fde=o(function(t,e){return Nq(t,e)},"drawText"),YUe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,Fde(t,e)},"drawLabel"),XUe=o(function(t,e,r){let n=t.append("g"),i=Tl();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,cP(n,i),$de(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),Pde=-1,jUe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");Pde++;let a=300+5*30;i.append("line").attr("id","task"+Pde).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),qUe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=Tl();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,cP(i,s);let l=e.x+14;e.people.forEach(u=>{let h=e.actors[u].color,f={cx:l,cy:e.y,r:7,fill:h,stroke:"#000",title:u,pos:e.actors[u].position};Bde(i,f),l+=10}),$de(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),KUe=o(function(t,e){q5(t,e)},"drawBackgroundRect"),$de=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(/<br\s*\/?>/gi);for(let v=0;v<y.length;v++){let x=v*m-m*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).attr("fill",p).style("text-anchor","middle").style("font-size",m).style("font-family",g);b.append("tspan").attr("x",s+u/2).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)s in a&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),QUe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},"initGraphics"),I1={drawRect:cP,drawCircle:Bde,drawSection:XUe,drawText:Fde,drawLabel:YUe,drawTask:jUe,drawBackgroundRect:KUe,initGraphics:QUe}});function JUe(t){let e=me().journey,r=60;Object.keys(ju).forEach(n=>{let i=ju[n].color,a={cx:20,cy:r,r:7,fill:i,stroke:"#000",pos:ju[n].position};I1.drawCircle(t,a);let s={x:40,y:r+7,fill:"#666",text:n,textMargin:e.boxTextMargin|5};I1.drawText(t,s),r+=20})}var ZUe,ju,q6,Np,eHe,Zo,uP,Gde,tHe,hP,Vde=N(()=>{"use strict";dr();zde();zt();Ei();ZUe=o(function(t){Object.keys(t).forEach(function(r){q6[r]=t[r]})},"setConf"),ju={};o(JUe,"drawActorLegend");q6=me().journey,Np=q6.leftMargin,eHe=o(function(t,e,r,n){let i=me().journey,a=me().securityLevel,s;a==="sandbox"&&(s=Ge("#i"+e));let l=a==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body");Zo.init();let u=l.select("#"+e);I1.initGraphics(u);let h=n.db.getTasks(),f=n.db.getDiagramTitle(),d=n.db.getActors();for(let x in ju)delete ju[x];let p=0;d.forEach(x=>{ju[x]={color:i.actorColours[p%i.actorColours.length],position:p},p++}),JUe(u),Zo.insert(0,0,Np,Object.keys(ju).length*50),tHe(u,h,0);let m=Zo.getBounds();f&&u.append("text").text(f).attr("x",Np).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);let g=m.stopy-m.starty+2*i.diagramMarginY,y=Np+m.stopx+2*i.diagramMarginX;vn(u,g,y,i.useMaxWidth),u.append("line").attr("x1",Np).attr("y1",i.height*4).attr("x2",y-Np-4).attr("y2",i.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");let v=f?70:0;u.attr("viewBox",`${m.startx} -25 ${y} ${g+v}`),u.attr("preserveAspectRatio","xMinYMin meet"),u.attr("height",g+v+25)},"draw"),Zo={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=me().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*i.boxMargin,Math.min),a.updateVal(f,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(Zo.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(Zo.data,"stopx",r+d*i.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*i.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(Zo.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(Zo.data,"stopy",n+d*i.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,n){let i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),l=Math.max(e,n);this.updateVal(Zo.data,"startx",i,Math.min),this.updateVal(Zo.data,"starty",s,Math.min),this.updateVal(Zo.data,"stopx",a,Math.max),this.updateVal(Zo.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},uP=q6.sectionFills,Gde=q6.sectionColours,tHe=o(function(t,e,r){let n=me().journey,i="",a=n.height*2+n.diagramMarginY,s=r+a,l=0,u="#CCC",h="black",f=0;for(let[d,p]of e.entries()){if(i!==p.section){u=uP[l%uP.length],f=l%uP.length,h=Gde[l%Gde.length];let g=0,y=p.section;for(let x=d;x<e.length&&e[x].section==y;x++)g=g+1;let v={x:d*n.taskMargin+d*n.width+Np,y:50,text:p.section,fill:u,num:f,colour:h,taskCount:g};I1.drawSection(t,v,n),i=p.section,l++}let m=p.people.reduce((g,y)=>(ju[y]&&(g[y]=ju[y]),g),{});p.x=d*n.taskMargin+d*n.width+Np,p.y=s,p.width=n.diagramMarginX,p.height=n.diagramMarginY,p.colour=h,p.fill=u,p.num=f,p.actors=m,I1.drawTask(t,p,n),Zo.insert(p.x,p.y,p.x+p.width+n.taskMargin,300+5*30)}},"drawTasks"),hP={setConf:ZUe,draw:eHe}});var Ude={};hr(Ude,{diagram:()=>rHe});var rHe,Hde=N(()=>{"use strict";Rde();Mde();Ode();Vde();rHe={parser:Lde,db:lP,renderer:hP,styles:Ide,init:o(t=>{hP.setConf(t.journey),lP.clear()},"init")}});var dP,Qde,Zde=N(()=>{"use strict";dP=function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,8,10,11,12,14,16,17,20,21],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,16],u=[1,17],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:o(function(m,g,y,v,x,b,w){var C=b.length-1;switch(x){case 1:return b[C-1];case 2:this.$=[];break;case 3:b[C-1].push(b[C]),this.$=b[C-1];break;case 4:case 5:this.$=b[C];break;case 6:case 7:this.$=[];break;case 8:v.getCommonDb().setDiagramTitle(b[C].substr(6)),this.$=b[C].substr(6);break;case 9:this.$=b[C].trim(),v.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=b[C].trim(),v.getCommonDb().setAccDescription(this.$);break;case 12:v.addSection(b[C].substr(8)),this.$=b[C].substr(8);break;case 15:v.addTask(b[C],0,""),this.$=b[C];break;case 16:v.addEvent(b[C].substr(2)),this.$=b[C];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],w=this.table,C="",T=0,E=0,A=0,S=2,_=1,I=b.slice.call(arguments,1),D=Object.create(this.lexer),k={yy:{}};for(var L in this.yy)Object.prototype.hasOwnProperty.call(this.yy,L)&&(k.yy[L]=this.yy[L]);D.setInput(m,k.yy),k.yy.lexer=D,k.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var R=D.yylloc;b.push(R);var O=D.options&&D.options.ranges;typeof k.yy.parseError=="function"?this.parseError=k.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function M(X){y.length=y.length-2*X,x.length=x.length-X,b.length=b.length-X}o(M,"popStack");function B(){var X;return X=v.pop()||D.lex()||_,typeof X!="number"&&(X instanceof Array&&(v=X,X=v.pop()),X=g.symbols_[X]||X),X}o(B,"lex");for(var F,P,z,$,H,Q,j={},ie,ne,le,he;;){if(z=y[y.length-1],this.defaultActions[z]?$=this.defaultActions[z]:((F===null||typeof F>"u")&&(F=B()),$=w[z]&&w[z][F]),typeof $>"u"||!$.length||!$[0]){var K="";he=[];for(ie in w[z])this.terminals_[ie]&&ie>S&&he.push("'"+this.terminals_[ie]+"'");D.showPosition?K="Parse error on line "+(T+1)+`: | |
| 1884 | +`+D.showPosition()+` | |
| 1885 | +Expecting `+he.join(", ")+", got '"+(this.terminals_[F]||F)+"'":K="Parse error on line "+(T+1)+": Unexpected "+(F==_?"end of input":"'"+(this.terminals_[F]||F)+"'"),this.parseError(K,{text:D.match,token:this.terminals_[F]||F,line:D.yylineno,loc:R,expected:he})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+z+", token: "+F);switch($[0]){case 1:y.push(F),x.push(D.yytext),b.push(D.yylloc),y.push($[1]),F=null,P?(F=P,P=null):(E=D.yyleng,C=D.yytext,T=D.yylineno,R=D.yylloc,A>0&&A--);break;case 2:if(ne=this.productions_[$[1]][1],j.$=x[x.length-ne],j._$={first_line:b[b.length-(ne||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(ne||1)].first_column,last_column:b[b.length-1].last_column},O&&(j._$.range=[b[b.length-(ne||1)].range[0],b[b.length-1].range[1]]),Q=this.performAction.apply(j,[C,E,T,k.yy,$[1],x,b].concat(I)),typeof Q<"u")return Q;ne&&(y=y.slice(0,-1*ne*2),x=x.slice(0,-1*ne),b=b.slice(0,-1*ne)),y.push(this.productions_[$[1]][0]),x.push(j.$),b.push(j._$),le=w[y[y.length-2]][y[y.length-1]],y.push(le);break;case 3:return!0}}return!0},"parse")},f=function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1886 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+` | |
| 1887 | +`+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,x;if(this.options.backtrack_lexer&&(x={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(x.yylloc.range=this.yylloc.range.slice(0))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;b<x.length;b++)if(y=this._input.match(this.rules[x[b]]),y&&(!g||y[0].length>g[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1888 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s[^:\n]+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return p}();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d}();dP.parser=dP;Qde=dP});var mP={};hr(mP,{addEvent:()=>ope,addSection:()=>npe,addTask:()=>spe,addTaskOrg:()=>lpe,clear:()=>rpe,default:()=>hHe,getCommonDb:()=>tpe,getSections:()=>ipe,getTasks:()=>ape});var O1,epe,pP,Y6,P1,tpe,rpe,npe,ipe,ape,spe,ope,lpe,Jde,hHe,cpe=N(()=>{"use strict";mi();O1="",epe=0,pP=[],Y6=[],P1=[],tpe=o(()=>qy,"getCommonDb"),rpe=o(function(){pP.length=0,Y6.length=0,O1="",P1.length=0,Ar()},"clear"),npe=o(function(t){O1=t,pP.push(t)},"addSection"),ipe=o(function(){return pP},"getSections"),ape=o(function(){let t=Jde(),e=100,r=0;for(;!t&&r<e;)t=Jde(),r++;return Y6.push(...P1),Y6},"getTasks"),spe=o(function(t,e,r){let n={id:epe++,section:O1,type:O1,task:t,score:e||0,events:r?[r]:[]};P1.push(n)},"addTask"),ope=o(function(t){P1.find(r=>r.id===epe-1).events.push(t)},"addEvent"),lpe=o(function(t){let e={section:O1,type:O1,description:t,task:t,classes:[]};Y6.push(e)},"addTaskOrg"),Jde=o(function(){let t=o(function(r){return P1[r].processed},"compileTask"),e=!0;for(let[r,n]of P1.entries())t(r),e=e&&n.processed;return e},"compileTasks"),hHe={clear:rpe,getCommonDb:tpe,addSection:npe,getSections:ipe,getTasks:ape,addTask:spe,addTaskOrg:lpe,addEvent:ope}});function dpe(t,e){t.each(function(){var r=Ge(this),n=r.text().split(/(\s+|<br>)/).reverse(),i,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;f<n.length;f++)i=n[n.length-1-f],a.push(i),h.text(a.join(" ").trim()),(h.node().getComputedTextLength()>e||i==="<br>")&&(a.pop(),h.text(a.join(" ").trim()),i==="<br>"?a=[""]:a=[i],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(i))})}var fHe,X6,dHe,pHe,hpe,mHe,gHe,upe,yHe,vHe,xHe,gP,fpe,bHe,wHe,THe,kHe,bf,ppe=N(()=>{"use strict";dr();fHe=12,X6=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),dHe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=bl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=bl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),pHe=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),hpe=o(function(t,e){let r=e.text.replace(/<br\s*\/?>/gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class!==void 0&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),mHe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,hpe(t,e)},"drawLabel"),gHe=o(function(t,e,r){let n=t.append("g"),i=gP();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,X6(n,i),fpe(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),upe=-1,yHe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");upe++;let a=300+5*30;i.append("line").attr("id","task"+upe).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),dHe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=gP();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,X6(i,s),fpe(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),vHe=o(function(t,e){X6(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),xHe=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),gP=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),fpe=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(/<br\s*\/?>/gi);for(let v=0;v<y.length;v++){let x=v*m-m*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).attr("fill",p).style("text-anchor","middle").style("font-size",m).style("font-family",g);b.append("tspan").attr("x",s+u/2).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)s in a&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),bHe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},"initGraphics");o(dpe,"wrap");wHe=o(function(t,e,r,n){let i=r%fHe-1,a=t.append("g");e.section=i,a.attr("class",(e.class?e.class+" ":"")+"timeline-node "+("section-"+i));let s=a.append("g"),l=a.append("g"),h=l.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(dpe,e.width).node().getBBox(),f=n.fontSize?.replace?n.fontSize.replace("px",""):n.fontSize;return e.height=h.height+f*1.1*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,l.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),kHe(s,e,i,n),e},"drawNode"),THe=o(function(t,e,r){let n=t.append("g"),a=n.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(dpe,e.width).node().getBBox(),s=r.fontSize?.replace?r.fontSize.replace("px",""):r.fontSize;return n.remove(),a.height+s*1.1*.5+e.padding},"getVirtualNodeHeight"),kHe=o(function(t,e,r){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${-e.height+2*5} q0,-5 5,-5 h${e.width-2*5} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+r).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},"defaultBkg"),bf={drawRect:X6,drawCircle:pHe,drawSection:gHe,drawText:hpe,drawLabel:mHe,drawTask:yHe,drawBackgroundRect:vHe,getTextObj:xHe,getNoteRect:gP,initGraphics:bHe,drawNode:wHe,getVirtualNodeHeight:THe}});var EHe,mpe,SHe,gpe,ype=N(()=>{"use strict";dr();ppe();vt();zt();Ei();EHe=o(function(t,e,r,n){let i=me(),a=i.leftMargin??50;Y.debug("timeline",n.db);let s=i.securityLevel,l;s==="sandbox"&&(l=Ge("#i"+e));let h=(s==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body")).select("#"+e);h.append("g");let f=n.db.getTasks(),d=n.db.getCommonDb().getDiagramTitle();Y.debug("task",f),bf.initGraphics(h);let p=n.db.getSections();Y.debug("sections",p);let m=0,g=0,y=0,v=0,x=50+a,b=50;v=50;let w=0,C=!0;p.forEach(function(_){let I={number:w,descr:_,section:w,width:150,padding:20,maxHeight:m},D=bf.getVirtualNodeHeight(h,I,i);Y.debug("sectionHeight before draw",D),m=Math.max(m,D+20)});let T=0,E=0;Y.debug("tasks.length",f.length);for(let[_,I]of f.entries()){let D={number:_,descr:I,section:I.section,width:150,padding:20,maxHeight:g},k=bf.getVirtualNodeHeight(h,D,i);Y.debug("taskHeight before draw",k),g=Math.max(g,k+20),T=Math.max(T,I.events.length);let L=0;for(let R of I.events){let O={descr:R,section:I.section,number:I.section,width:150,padding:20,maxHeight:50};L+=bf.getVirtualNodeHeight(h,O,i)}E=Math.max(E,L)}Y.debug("maxSectionHeight before draw",m),Y.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(_=>{let I=f.filter(R=>R.section===_),D={number:w,descr:_,section:w,width:200*Math.max(I.length,1)-50,padding:20,maxHeight:m};Y.debug("sectionNode",D);let k=h.append("g"),L=bf.drawNode(k,D,w,i);Y.debug("sectionNode output",L),k.attr("transform",`translate(${x}, ${v})`),b+=m+50,I.length>0&&mpe(h,I,w,x,b,g,i,T,E,m,!1),x+=200*Math.max(I.length,1),b=v,w++}):(C=!1,mpe(h,f,w,x,b,g,i,T,E,m,!0));let A=h.node().getBBox();Y.debug("bounds",A),d&&h.append("text").text(d).attr("x",A.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),y=C?m+g+150:g+100,h.append("g").attr("class","lineWrapper").append("line").attr("x1",a).attr("y1",y).attr("x2",A.width+3*a).attr("y2",y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),Ao(void 0,h,i.timeline?.padding??50,i.timeline?.useMaxWidth??!1)},"draw"),mpe=o(function(t,e,r,n,i,a,s,l,u,h,f){for(let d of e){let p={descr:d.task,section:r,number:r,width:150,padding:20,maxHeight:a};Y.debug("taskNode",p);let m=t.append("g").attr("class","taskWrapper"),y=bf.drawNode(m,p,r,s).height;if(Y.debug("taskHeight after draw",y),m.attr("transform",`translate(${n}, ${i})`),a=Math.max(a,y),d.events){let v=t.append("g").attr("class","lineWrapper"),x=a;i+=100,x=x+SHe(t,d.events,r,n,i,s),i-=100,v.append("line").attr("x1",n+190/2).attr("y1",i+a).attr("x2",n+190/2).attr("y2",i+a+(f?a:h)+u+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}n=n+200,f&&!s.timeline?.disableMulticolor&&r++}i=i-10},"drawTasks"),SHe=o(function(t,e,r,n,i,a){let s=0,l=i;i=i+100;for(let u of e){let h={descr:u,section:r,number:r,width:150,padding:20,maxHeight:50};Y.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=bf.drawNode(f,h,r,a).height;s=s+p,f.attr("transform",`translate(${n}, ${i})`),i=i+10+p}return i=l,s},"drawEvents"),gpe={setConf:o(()=>{},"setConf"),draw:EHe}});var CHe,AHe,vpe,xpe=N(()=>{"use strict";Ys();CHe=o(t=>{let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)t["lineColor"+r]=t["lineColor"+r]||t["cScaleInv"+r],ca(t["lineColor"+r])?t["lineColor"+r]=Dt(t["lineColor"+r],20):t["lineColor"+r]=Ot(t["lineColor"+r],20);for(let r=0;r<t.THEME_COLOR_LIMIT;r++){let n=""+(17-3*r);e+=` | |
| 1889 | + .section-${r-1} rect, .section-${r-1} path, .section-${r-1} circle, .section-${r-1} path { | |
| 1890 | + fill: ${t["cScale"+r]}; | |
| 1891 | + } | |
| 1892 | + .section-${r-1} text { | |
| 1893 | + fill: ${t["cScaleLabel"+r]}; | |
| 1894 | + } | |
| 1895 | + .node-icon-${r-1} { | |
| 1896 | + font-size: 40px; | |
| 1897 | + color: ${t["cScaleLabel"+r]}; | |
| 1898 | + } | |
| 1899 | + .section-edge-${r-1}{ | |
| 1900 | + stroke: ${t["cScale"+r]}; | |
| 1901 | + } | |
| 1902 | + .edge-depth-${r-1}{ | |
| 1903 | + stroke-width: ${n}; | |
| 1904 | + } | |
| 1905 | + .section-${r-1} line { | |
| 1906 | + stroke: ${t["cScaleInv"+r]} ; | |
| 1907 | + stroke-width: 3; | |
| 1908 | + } | |
| 1909 | + | |
| 1910 | + .lineWrapper line{ | |
| 1911 | + stroke: ${t["cScaleLabel"+r]} ; | |
| 1912 | + } | |
| 1913 | + | |
| 1914 | + .disabled, .disabled circle, .disabled text { | |
| 1915 | + fill: lightgray; | |
| 1916 | + } | |
| 1917 | + .disabled text { | |
| 1918 | + fill: #efefef; | |
| 1919 | + } | |
| 1920 | + `}return e},"genSections"),AHe=o(t=>` | |
| 1921 | + .edge { | |
| 1922 | + stroke-width: 3; | |
| 1923 | + } | |
| 1924 | + ${CHe(t)} | |
| 1925 | + .section-root rect, .section-root path, .section-root circle { | |
| 1926 | + fill: ${t.git0}; | |
| 1927 | + } | |
| 1928 | + .section-root text { | |
| 1929 | + fill: ${t.gitBranchLabel0}; | |
| 1930 | + } | |
| 1931 | + .icon-container { | |
| 1932 | + height:100%; | |
| 1933 | + display: flex; | |
| 1934 | + justify-content: center; | |
| 1935 | + align-items: center; | |
| 1936 | + } | |
| 1937 | + .edge { | |
| 1938 | + fill: none; | |
| 1939 | + } | |
| 1940 | + .eventWrapper { | |
| 1941 | + filter: brightness(120%); | |
| 1942 | + } | |
| 1943 | +`,"getStyles"),vpe=AHe});var bpe={};hr(bpe,{diagram:()=>_He});var _He,wpe=N(()=>{"use strict";Zde();cpe();ype();xpe();_He={db:mP,renderer:gpe,parser:Qde,styles:vpe}});var yP,Epe,Spe=N(()=>{"use strict";yP=function(){var t=o(function(C,T,E,A){for(E=E||{},A=C.length;A--;E[C[A]]=T);return E},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(T,E,A,S,_,I,D){var k=I.length-1;switch(_){case 6:case 7:return S;case 8:S.getLogger().trace("Stop NL ");break;case 9:S.getLogger().trace("Stop EOF ");break;case 11:S.getLogger().trace("Stop NL2 ");break;case 12:S.getLogger().trace("Stop EOF2 ");break;case 15:S.getLogger().info("Node: ",I[k].id),S.addNode(I[k-1].length,I[k].id,I[k].descr,I[k].type);break;case 16:S.getLogger().trace("Icon: ",I[k]),S.decorateNode({icon:I[k]});break;case 17:case 21:S.decorateNode({class:I[k]});break;case 18:S.getLogger().trace("SPACELIST");break;case 19:S.getLogger().trace("Node: ",I[k].id),S.addNode(0,I[k].id,I[k].descr,I[k].type);break;case 20:S.decorateNode({icon:I[k]});break;case 25:S.getLogger().trace("node found ..",I[k-2]),this.$={id:I[k-1],descr:I[k-1],type:S.getType(I[k-2],I[k])};break;case 26:this.$={id:I[k],descr:I[k],type:S.nodeType.DEFAULT};break;case 27:S.getLogger().trace("node found ..",I[k-3]),this.$={id:I[k-3],descr:I[k-1],type:S.getType(I[k-2],I[k])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(T,E){if(E.recoverable)this.trace(T);else{var A=new Error(T);throw A.hash=E,A}},"parseError"),parse:o(function(T){var E=this,A=[0],S=[],_=[null],I=[],D=this.table,k="",L=0,R=0,O=0,M=2,B=1,F=I.slice.call(arguments,1),P=Object.create(this.lexer),z={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(z.yy[$]=this.yy[$]);P.setInput(T,z.yy),z.yy.lexer=P,z.yy.parser=this,typeof P.yylloc>"u"&&(P.yylloc={});var H=P.yylloc;I.push(H);var Q=P.options&&P.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function j(ae){A.length=A.length-2*ae,_.length=_.length-ae,I.length=I.length-ae}o(j,"popStack");function ie(){var ae;return ae=S.pop()||P.lex()||B,typeof ae!="number"&&(ae instanceof Array&&(S=ae,ae=S.pop()),ae=E.symbols_[ae]||ae),ae}o(ie,"lex");for(var ne,le,he,K,X,te,J={},se,ue,Z,Se;;){if(he=A[A.length-1],this.defaultActions[he]?K=this.defaultActions[he]:((ne===null||typeof ne>"u")&&(ne=ie()),K=D[he]&&D[he][ne]),typeof K>"u"||!K.length||!K[0]){var ce="";Se=[];for(se in D[he])this.terminals_[se]&&se>M&&Se.push("'"+this.terminals_[se]+"'");P.showPosition?ce="Parse error on line "+(L+1)+`: | |
| 1944 | +`+P.showPosition()+` | |
| 1945 | +Expecting `+Se.join(", ")+", got '"+(this.terminals_[ne]||ne)+"'":ce="Parse error on line "+(L+1)+": Unexpected "+(ne==B?"end of input":"'"+(this.terminals_[ne]||ne)+"'"),this.parseError(ce,{text:P.match,token:this.terminals_[ne]||ne,line:P.yylineno,loc:H,expected:Se})}if(K[0]instanceof Array&&K.length>1)throw new Error("Parse Error: multiple actions possible at state: "+he+", token: "+ne);switch(K[0]){case 1:A.push(ne),_.push(P.yytext),I.push(P.yylloc),A.push(K[1]),ne=null,le?(ne=le,le=null):(R=P.yyleng,k=P.yytext,L=P.yylineno,H=P.yylloc,O>0&&O--);break;case 2:if(ue=this.productions_[K[1]][1],J.$=_[_.length-ue],J._$={first_line:I[I.length-(ue||1)].first_line,last_line:I[I.length-1].last_line,first_column:I[I.length-(ue||1)].first_column,last_column:I[I.length-1].last_column},Q&&(J._$.range=[I[I.length-(ue||1)].range[0],I[I.length-1].range[1]]),te=this.performAction.apply(J,[k,R,L,z.yy,K[1],_,I].concat(F)),typeof te<"u")return te;ue&&(A=A.slice(0,-1*ue*2),_=_.slice(0,-1*ue),I=I.slice(0,-1*ue)),A.push(this.productions_[K[1]][0]),_.push(J.$),I.push(J._$),Z=D[A[A.length-2]][A[A.length-1]],A.push(Z);break;case 3:return!0}}return!0},"parse")},b=function(){var C={EOF:1,parseError:o(function(E,A){if(this.yy.parser)this.yy.parser.parseError(E,A);else throw new Error(E)},"parseError"),setInput:o(function(T,E){return this.yy=E||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var E=T.match(/(?:\r\n?|\n).*/g);return E?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},"input"),unput:o(function(T){var E=T.length,A=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var S=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),A.length-1&&(this.yylineno-=A.length-1);var _=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:A?(A.length===S.length?this.yylloc.first_column:0)+S[S.length-A.length].length-A[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[_[0],_[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1946 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(T){this.unput(this.match.slice(T))},"less"),pastInput:o(function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var T=this.pastInput(),E=new Array(T.length+1).join("-");return T+this.upcomingInput()+` | |
| 1947 | +`+E+"^"},"showPosition"),test_match:o(function(T,E){var A,S,_;if(this.options.backtrack_lexer&&(_={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_.yylloc.range=this.yylloc.range.slice(0))),S=T[0].match(/(?:\r\n?|\n).*/g),S&&(this.yylineno+=S.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:S?S[S.length-1].length-S[S.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],A=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),A)return A;if(this._backtrack){for(var I in _)this[I]=_[I];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,E,A,S;this._more||(this.yytext="",this.match="");for(var _=this._currentRules(),I=0;I<_.length;I++)if(A=this._input.match(this.rules[_[I]]),A&&(!E||A[0].length>E[0].length)){if(E=A,S=I,this.options.backtrack_lexer){if(T=this.test_match(A,_[I]),T!==!1)return T;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(T=this.test_match(E,_[S]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1948 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var E=this.next();return E||this.lex()},"lex"),begin:o(function(E){this.conditionStack.push(E)},"begin"),popState:o(function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},"topState"),pushState:o(function(E){this.begin(E)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(E,A,S,_){var I=_;switch(S){case 0:return E.getLogger().trace("Found comment",A.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:E.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return E.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:E.getLogger().trace("end icon"),this.popState();break;case 10:return E.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return E.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return E.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return E.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:E.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return E.getLogger().trace("description:",A.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),E.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),E.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),E.getLogger().trace("node end ...",A.yytext),"NODE_DEND";break;case 30:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return E.getLogger().trace("Long description:",A.yytext),20;break;case 36:return E.getLogger().trace("Long description:",A.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return C}();x.lexer=b;function w(){this.yy={}}return o(w,"Parser"),w.prototype=x,x.Parser=w,new w}();yP.parser=yP;Epe=yP});var $l,Cpe,vP,NHe,MHe,IHe,OHe,Vi,PHe,BHe,FHe,$He,zHe,GHe,VHe,Ape,_pe=N(()=>{"use strict";zt();gr();vt();Ya();$l=[],Cpe=0,vP={},NHe=o(()=>{$l=[],Cpe=0,vP={}},"clear"),MHe=o(function(t){for(let e=$l.length-1;e>=0;e--)if($l[e].level<t)return $l[e];return null},"getParent"),IHe=o(()=>$l.length>0?$l[0]:null,"getMindmap"),OHe=o((t,e,r,n)=>{Y.info("addNode",t,e,r,n);let i=me(),a=i.mindmap?.padding??or.mindmap.padding;switch(n){case Vi.ROUNDED_RECT:case Vi.RECT:case Vi.HEXAGON:a*=2}let s={id:Cpe++,nodeId:Tr(e,i),level:t,descr:Tr(r,i),type:n,children:[],width:i.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:a},l=MHe(t);if(l)l.children.push(s),$l.push(s);else if($l.length===0)$l.push(s);else throw new Error('There can be only one root. No parent could be found for ("'+s.descr+'")')},"addNode"),Vi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},PHe=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Vi.RECT;case"(":return e===")"?Vi.ROUNDED_RECT:Vi.CLOUD;case"((":return Vi.CIRCLE;case")":return Vi.CLOUD;case"))":return Vi.BANG;case"{{":return Vi.HEXAGON;default:return Vi.DEFAULT}},"getType"),BHe=o((t,e)=>{vP[t]=e},"setElementForId"),FHe=o(t=>{if(!t)return;let e=me(),r=$l[$l.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.class=Tr(t.class,e))},"decorateNode"),$He=o(t=>{switch(t){case Vi.DEFAULT:return"no-border";case Vi.RECT:return"rect";case Vi.ROUNDED_RECT:return"rounded-rect";case Vi.CIRCLE:return"circle";case Vi.CLOUD:return"cloud";case Vi.BANG:return"bang";case Vi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),zHe=o(()=>Y,"getLogger"),GHe=o(t=>vP[t],"getElementById"),VHe={clear:NHe,addNode:OHe,getMindmap:IHe,nodeType:Vi,getType:PHe,setElementForId:BHe,decorateNode:FHe,type2Str:$He,getLogger:zHe,getElementById:GHe},Ape=VHe});function Wi(t){"@babel/helpers - typeof";return Wi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wi(t)}function Mf(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Dpe(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function If(t,e,r){return e&&Dpe(t.prototype,e),r&&Dpe(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function X0e(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function _i(t,e){return HHe(t)||qHe(t,e)||ZP(t,e)||XHe()}function j0e(t){return UHe(t)||WHe(t)||ZP(t)||YHe()}function UHe(t){if(Array.isArray(t))return OP(t)}function HHe(t){if(Array.isArray(t))return t}function WHe(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function qHe(t,e){var r=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(r!=null){var n=[],i=!0,a=!1,s,l;try{for(r=r.call(t);!(i=(s=r.next()).done)&&(n.push(s.value),!(e&&n.length===e));i=!0);}catch(u){a=!0,l=u}finally{try{!i&&r.return!=null&&r.return()}finally{if(a)throw l}}return n}}function ZP(t,e){if(t){if(typeof t=="string")return OP(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return OP(t,e)}}function OP(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function YHe(){throw new TypeError(`Invalid attempt to spread non-iterable instance. | |
| 1949 | +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function XHe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. | |
| 1950 | +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function mo(t,e){var r=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=ZP(t))||e&&t&&typeof t.length=="number"){r&&(t=r);var n=0,i=o(function(){},"F");return{s:i,n:o(function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},"n"),e:o(function(u){throw u},"e"),f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. | |
| 1951 | +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,s=!1,l;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return a=u.done,u},"n"),e:o(function(u){s=!0,l=u},"e"),f:o(function(){try{!a&&r.return!=null&&r.return()}finally{if(s)throw l}},"f")}}function yWe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function vWe(t,e){return e={exports:{}},t(e,e.exports),e.exports}function SWe(t){for(var e=t.length;e--&&EWe.test(t.charAt(e)););return e}function _We(t){return t&&t.slice(0,CWe(t)+1).replace(AWe,"")}function MWe(t){var e=RWe.call(t,Ab),r=t[Ab];try{t[Ab]=void 0;var n=!0}catch{}var i=NWe.call(t);return n&&(e?t[Ab]=r:delete t[Ab]),i}function BWe(t){return PWe.call(t)}function GWe(t){return t==null?t===void 0?zWe:$We:Npe&&Npe in Object(t)?IWe(t):FWe(t)}function VWe(t){return t!=null&&typeof t=="object"}function WWe(t){return typeof t=="symbol"||UWe(t)&&ame(t)==HWe}function KWe(t){if(typeof t=="number")return t;if(r4(t))return Mpe;if(zp(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=zp(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=DWe(t);var r=YWe.test(t);return r||XWe.test(t)?jWe(t.slice(2),r?2:8):qWe.test(t)?Mpe:+t}function eqe(t,e,r){var n,i,a,s,l,u,h=0,f=!1,d=!1,p=!0;if(typeof t!="function")throw new TypeError(QWe);e=Ipe(e)||0,zp(r)&&(f=!!r.leading,d="maxWait"in r,a=d?ZWe(Ipe(r.maxWait)||0,e):a,p="trailing"in r?!!r.trailing:p);function m(E){var A=n,S=i;return n=i=void 0,h=E,s=t.apply(S,A),s}o(m,"invokeFunc");function g(E){return h=E,l=setTimeout(x,e),f?m(E):s}o(g,"leadingEdge");function y(E){var A=E-u,S=E-h,_=e-A;return d?JWe(_,a-S):_}o(y,"remainingWait");function v(E){var A=E-u,S=E-h;return u===void 0||A>=e||A<0||d&&S>=a}o(v,"shouldInvoke");function x(){var E=xP();if(v(E))return b(E);l=setTimeout(x,y(E))}o(x,"timerExpired");function b(E){return l=void 0,p&&n?m(E):(n=i=void 0,s)}o(b,"trailingEdge");function w(){l!==void 0&&clearTimeout(l),h=0,n=u=i=l=void 0}o(w,"cancel");function C(){return l===void 0?s:b(xP())}o(C,"flush");function T(){var E=xP(),A=v(E);if(n=arguments,i=this,u=E,A){if(l===void 0)return g(u);if(d)return clearTimeout(l),l=setTimeout(x,e),m(u)}return l===void 0&&(l=setTimeout(x,e)),s}return o(T,"debounced"),T.cancel=w,T.flush=C,T}function IS(t,e,r,n,i,a){var s;return si(t)?s=t:s=Q1[t]||Q1.euclidean,e===0&&si(t)?s(i,a):s(e,r,n,i,a)}function qYe(t,e){if(OS(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||r4(t)?!0:WYe.test(t)||!HYe.test(t)||e!=null&&t in Object(e)}function ZYe(t){if(!zp(t))return!1;var e=ame(t);return e==jYe||e==KYe||e==XYe||e==QYe}function tXe(t){return!!e0e&&e0e in t}function aXe(t){if(t!=null){try{return iXe.call(t)}catch{}try{return t+""}catch{}}return""}function pXe(t){if(!zp(t)||rXe(t))return!1;var e=JYe(t)?dXe:lXe;return e.test(sXe(t))}function gXe(t,e){return t?.[e]}function vXe(t,e){var r=yXe(t,e);return mXe(r)?r:void 0}function bXe(){this.__data__=jb?jb(null):{},this.size=0}function TXe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function AXe(t){var e=this.__data__;if(jb){var r=e[t];return r===EXe?void 0:r}return CXe.call(e,t)?e[t]:void 0}function RXe(t){var e=this.__data__;return jb?e[t]!==void 0:LXe.call(e,t)}function IXe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=jb&&e===void 0?MXe:e,this}function ty(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function PXe(){this.__data__=[],this.size=0}function FXe(t,e){return t===e||t!==t&&e!==e}function $Xe(t,e){for(var r=t.length;r--;)if(Lme(t[r][0],e))return r;return-1}function VXe(t){var e=this.__data__,r=PS(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():GXe.call(e,r,1),--this.size,!0}function HXe(t){var e=this.__data__,r=PS(e,t);return r<0?void 0:e[r][1]}function qXe(t){return PS(this.__data__,t)>-1}function XXe(t,e){var r=this.__data__,n=PS(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function ry(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function JXe(){this.size=0,this.__data__={hash:new t0e,map:new(ZXe||KXe),string:new t0e}}function tje(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}function nje(t,e){var r=t.__data__;return rje(e)?r[typeof e=="string"?"string":"hash"]:r.map}function ije(t){var e=BS(this,t).delete(t);return this.size-=e?1:0,e}function sje(t){return BS(this,t).get(t)}function lje(t){return BS(this,t).has(t)}function uje(t,e){var r=BS(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}function ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function cB(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(fje);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(cB.Cache||Rme),r}function mje(t){var e=dje(t,function(n){return r.size===pje&&r.clear(),n}),r=e.cache;return e}function bje(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}function Ime(t){if(typeof t=="string")return t;if(OS(t))return Mme(t,Ime)+"";if(r4(t))return n0e?n0e.call(t):"";var e=t+"";return e=="0"&&1/t==-wje?"-0":e}function kje(t){return t==null?"":Tje(t)}function Eje(t,e){return OS(t)?t:YYe(t,e)?[t]:Nme(Ome(t))}function Cje(t){if(typeof t=="string"||r4(t))return t;var e=t+"";return e=="0"&&1/t==-Sje?"-0":e}function Aje(t,e){e=Pme(e,t);for(var r=0,n=e.length;t!=null&&r<n;)t=t[uB(e[r++])];return r&&r==n?t:void 0}function Dje(t,e,r){var n=t==null?void 0:_je(t,e);return n===void 0?r:n}function Nje(t,e,r){e=="__proto__"&&i0e?i0e(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}function Pje(t,e,r){var n=t[e];(!(Oje.call(t,e)&&Lme(n,r))||r===void 0&&!(e in t))&&Mje(t,e,r)}function zje(t,e){var r=typeof t;return e=e??Fje,!!e&&(r=="number"||r!="symbol"&&$je.test(t))&&t>-1&&t%1==0&&t<e}function Vje(t,e,r,n){if(!zp(t))return t;e=Pme(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i<a;){var u=uB(e[i]),h=r;if(u==="__proto__"||u==="constructor"||u==="prototype")return t;if(i!=s){var f=l[u];h=n?n(f,u,l):void 0,h===void 0&&(h=zp(f)?f:Gje(e[i+1])?[]:{})}Bje(l,u,h),l=l[u]}return t}function Hje(t,e,r){return t==null?t:Uje(t,e,r)}function qje(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}function Xje(t){return OS(t)?Mme(t,uB):r4(t)?[t]:Yje(Nme(Ome(t)))}function fB(t,e,r,n){for(var i=[],a=new J1,s=t.cy(),l=s.hasCompoundNodes(),u=0;u<t.length;u++){var h=t[u];r?i.push(h):l&&n(i,a,h)}for(;i.length>0;){var f=i.shift();e(f),a.add(f.id()),l&&n(i,a,f)}return t}function Fme(t,e,r){if(r.isParent())for(var n=r._private.children,i=0;i<n.length;i++){var a=n[i];e.has(a.id())||t.push(a)}}function $me(t,e,r){if(r.isChild()){var n=r._private.parent;e.has(n.id())||t.push(n)}}function dKe(t,e,r){$me(t,e,r),Fme(t,e,r)}function SP(t){return function(e){var r=this;if(e===void 0&&(e=!0),r.length!==0)if(r.isNode()&&!r.removed()){for(var n=0,i=r[0],a=i._private.edges,s=0;s<a.length;s++){var l=a[s];!e&&l.isLoop()||(n+=t(i,l))}return n}else return}}function F1(t,e){return function(r){for(var n,i=this.nodes(),a=0;a<i.length;a++){var s=i[a],l=s[t](r);l!==void 0&&(n===void 0||e(l,n))&&(n=l)}return n}}function Lb(){return!1}function rS(){return!0}function $S(){for(var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:NKe,e=arguments.length>1?arguments[1]:void 0,r=0;r<u0e.length;r++){var n=u0e[r];this[n]=t[n]||Xme[n]}this.context=e||this.context,this.listeners=[],this.emitting=0}function Jme(t,e,r){var n=r._private,i=n.styleCache=n.styleCache||[],a;return(a=i[t])!=null||(a=i[t]=e(r)),a}function zS(t,e){return t=_f(t),o(function(n){return Jme(t,e,n)},"cachedStyleFunction")}function GS(t,e){t=_f(t);var r=o(function(i){return e.call(i)},"selfFn");return o(function(){var i=this[0];if(i)return Jme(t,r,i)},"cachedPrototypeStyleFunction")}function AP(t,e){var r=t._private,n=r.data.parent?t.parents():null;if(n)for(var i=0;i<n.length;i++){var a=n[i];if(!e(a))return!1}return!0}function dB(t){var e=t.ok,r=t.edgeOkViaNode||t.ok,n=t.parentOk||t.ok;return function(){var i=this.cy();if(!i.styleEnabled())return!0;var a=this[0],s=i.hasCompoundNodes();if(a){var l=a._private;if(!e(a))return!1;if(a.isNode())return!s||AP(a,n);var u=l.source,h=l.target;return r(u)&&(!s||AP(u,r))&&(u===h||r(h)&&(!s||AP(h,r)))}}}function f0e(t){return function(){var e=arguments,r=[];if(e.length===2){var n=e[0],i=e[1];this.on(t.event,n,i)}else if(e.length===1&&si(e[0])){var a=e[0];this.on(t.event,a)}else if(e.length===0||e.length===1&&En(e[0])){for(var s=e.length===1?e[0]:null,l=0;l<this.length;l++){var u=this[l],h=!t.ableField||u._private[t.ableField],f=u._private[t.field]!=t.value;if(t.overrideAble){var d=t.overrideAble(u);if(d!==void 0&&(h=d,!d))return this}h&&(u._private[t.field]=t.value,f&&r.push(u))}var p=this.spawn(r);p.updateStyle(),p.emit(t.event),s&&p.emit(s)}return this}}function ay(t){Cf[t.field]=function(){var e=this[0];if(e){if(t.overrideField){var r=t.overrideField(e);if(r!==void 0)return r}return e._private[t.field]}},Cf[t.on]=f0e({event:t.on,field:t.field,ableField:t.ableField,overrideAble:t.overrideAble,value:!0}),Cf[t.off]=f0e({event:t.off,field:t.field,ableField:t.ableField,overrideAble:t.overrideAble,value:!1})}function g0e(t){return o(function(r){for(var n=[],i=0;i<this.length;i++){var a=this[i],s=a._private[t.attr];s&&n.push(s)}return this.spawn(n,!0).filter(r)},"sourceImpl")}function y0e(t){return o(function(r){var n=[],i=this._private.cy,a=t||{};Zt(r)&&(r=i.$(r));for(var s=0;s<r.length;s++)for(var l=r[s]._private.edges,u=0;u<l.length;u++){var h=l[u],f=h._private.data,d=this.hasElementWithId(f.source)&&r.hasElementWithId(f.target),p=r.hasElementWithId(f.source)&&this.hasElementWithId(f.target),m=d||p;m&&((a.thisIsSrc||a.thisIsTgt)&&(a.thisIsSrc&&!d||a.thisIsTgt&&!p)||n.push(h))}return this.spawn(n,!0)},"edgesWithImpl")}function v0e(t){var e={codirected:!1};return t=rr({},e,t),o(function(n){for(var i=[],a=this.edges(),s=t,l=0;l<a.length;l++)for(var u=a[l],h=u._private,f=h.source,d=f._private.data.id,p=h.data.target,m=f._private.edges,g=0;g<m.length;g++){var y=m[g],v=y._private.data,x=v.target,b=v.source,w=x===p&&b===d,C=d===x&&p===b;(s.codirected&&w||!s.codirected&&(w||C))&&i.push(y)}return this.spawn(i,!0).filter(n)},"parallelEdgesImpl")}function UKe(t,e,r,n){var i=4,a=.001,s=1e-7,l=10,u=11,h=1/(u-1),f=typeof Float32Array<"u";if(arguments.length!==4)return!1;for(var d=0;d<4;++d)if(typeof arguments[d]!="number"||isNaN(arguments[d])||!isFinite(arguments[d]))return!1;t=Math.min(t,1),r=Math.min(r,1),t=Math.max(t,0),r=Math.max(r,0);var p=f?new Float32Array(u):new Array(u);function m(I,D){return 1-3*D+3*I}o(m,"A");function g(I,D){return 3*D-6*I}o(g,"B");function y(I){return 3*I}o(y,"C");function v(I,D,k){return((m(D,k)*I+g(D,k))*I+y(D))*I}o(v,"calcBezier");function x(I,D,k){return 3*m(D,k)*I*I+2*g(D,k)*I+y(D)}o(x,"getSlope");function b(I,D){for(var k=0;k<i;++k){var L=x(D,t,r);if(L===0)return D;var R=v(D,t,r)-I;D-=R/L}return D}o(b,"newtonRaphsonIterate");function w(){for(var I=0;I<u;++I)p[I]=v(I*h,t,r)}o(w,"calcSampleValues");function C(I,D,k){var L,R,O=0;do R=D+(k-D)/2,L=v(R,t,r)-I,L>0?k=R:D=R;while(Math.abs(L)>s&&++O<l);return R}o(C,"binarySubdivide");function T(I){for(var D=0,k=1,L=u-1;k!==L&&p[k]<=I;++k)D+=h;--k;var R=(I-p[k])/(p[k+1]-p[k]),O=D+R*h,M=x(O,t,r);return M>=a?b(I,O):M===0?O:C(I,D,D+h)}o(T,"getTForX");var E=!1;function A(){E=!0,(t!==e||r!==n)&&w()}o(A,"precompute");var S=o(function(D){return E||A(),t===e&&r===n?D:D===0?0:D===1?1:v(T(D),e,n)},"f");S.getControlPoints=function(){return[{x:t,y:e},{x:r,y:n}]};var _="generateBezier("+[t,e,r,n]+")";return S.toString=function(){return _},S}function x0e(t,e,r,n,i){if(n===1||e===r)return r;var a=i(e,r,n);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function b0e(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function $1(t,e,r,n,i){var a=i!=null?i.type:null;r<0?r=0:r>1&&(r=1);var s=b0e(t,i),l=b0e(e,i);if(Ct(s)&&Ct(l))return x0e(a,s,l,r,n);if(En(s)&&En(l)){for(var u=[],h=0;h<l.length;h++){var f=s[h],d=l[h];if(f!=null&&d!=null){var p=x0e(a,f,d,r,n);u.push(p)}else u.push(d)}return u}}function WKe(t,e,r,n){var i=!n,a=t._private,s=e._private,l=s.easing,u=s.startTime,h=n?t:t.cy(),f=h.style();if(!s.easingImpl)if(l==null)s.easingImpl=dS.linear;else{var d;if(Zt(l)){var p=f.parse("transition-timing-function",l);d=p.value}else d=l;var m,g;Zt(d)?(m=d,g=[]):(m=d[1],g=d.slice(2).map(function(P){return+P})),g.length>0?(m==="spring"&&g.push(s.duration),s.easingImpl=dS[m].apply(null,g)):s.easingImpl=dS[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&i&&!t.locked()){var w={};Rb(x.x,b.x)&&(w.x=$1(x.x,b.x,v,y)),Rb(x.y,b.y)&&(w.y=$1(x.y,b.y,v,y)),t.position(w)}var C=s.startPan,T=s.pan,E=a.pan,A=T!=null&&n;A&&(Rb(C.x,T.x)&&(E.x=$1(C.x,T.x,v,y)),Rb(C.y,T.y)&&(E.y=$1(C.y,T.y,v,y)),t.emit("pan"));var S=s.startZoom,_=s.zoom,I=_!=null&&n;I&&(Rb(S,_)&&(a.zoom=Yb(a.minZoom,$1(S,_,v,y),a.maxZoom)),t.emit("zoom")),(A||I)&&t.emit("viewport");var D=s.style;if(D&&D.length>0&&i){for(var k=0;k<D.length;k++){var L=D[k],R=L.name,O=L,M=s.startStyle[R],B=f.properties[M.name],F=$1(M,O,v,y,B);f.overrideBypass(t,R,F)}t.emit("style")}}return s.progress=v,v}function Rb(t,e){return t==null||e==null?!1:Ct(t)&&Ct(e)?!0:!!(t&&e)}function qKe(t,e,r,n){var i=e._private;i.started=!0,i.startTime=r-i.progress*i.duration}function w0e(t,e){var r=e._private.aniEles,n=[];function i(f,d){var p=f._private,m=p.animation.current,g=p.animation.queue,y=!1;if(m.length===0){var v=g.shift();v&&m.push(v)}for(var x=o(function(E){for(var A=E.length-1;A>=0;A--){var S=E[A];S()}E.splice(0,E.length)},"callbacks"),b=m.length-1;b>=0;b--){var w=m[b],C=w._private;if(C.stopped){m.splice(b,1),C.hooked=!1,C.playing=!1,C.started=!1,x(C.frames);continue}!C.playing&&!C.applying||(C.playing&&C.applying&&(C.applying=!1),C.started||qKe(f,w,t),WKe(f,w,t,d),C.applying&&(C.applying=!1),x(C.frames),C.step!=null&&C.step(t),w.completed()&&(m.splice(b,1),C.hooked=!1,C.playing=!1,C.started=!1,x(C.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&n.push(f),y}o(i,"stepOne");for(var a=!1,s=0;s<r.length;s++){var l=r[s],u=i(l);a=a||u}var h=i(e,!0);(a||h)&&(r.length>0?e.notify("draw",r):e.notify("draw")),r.unmerge(n),e.emit("step")}function tge(t){this.options=rr({},eQe,tQe,t)}function rge(t){this.options=rr({},rQe,t)}function nge(t){this.options=rr({},nQe,t)}function HS(t){this.options=rr({},iQe,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),n=r.filter(function(i){var a=i.source().data("id"),s=i.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(n)}function age(t){this.options=rr({},wQe,t)}function gB(t){this.options=rr({},TQe,t)}function sge(t){this.options=rr({},kQe,t)}function oge(t){this.options=rr({},EQe,t)}function lge(t){this.options=t,this.notifications=0}function hge(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function vB(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return n===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(AQe(t,e,r,n,i),{cx:HP,cy:WP,radius:Bp,startX:cge,startY:uge,stopX:qP,stopY:YP,startAngle:qc.ang+Math.PI/2*Fp,endAngle:Jo.ang-Math.PI/2*Fp,counterClockwise:gS})}function fge(t){var e=[];if(t!=null){for(var r=0;r<t.length;r+=2){var n=t[r],i=t[r+1];e.push({x:n,y:i})}return e}}function _Qe(t,e,r){for(var n=o(function(h,f,d,p){return oa(h,f,d,p)},"qbezierAt$1"),i=e._private,a=i.rstyle.bezierPts,s=0;s<t.bezierProjPcts.length;s++){var l=t.bezierProjPcts[s];a.push({x:n(r[0],r[2],r[4],l),y:n(r[1],r[3],r[5],l)})}}function iZe(t,e){for(var r=0;r<e.length;r++){var n=e[r];t.lineTo(n.x,n.y)}}function aZe(t,e,r){for(var n,i=0;i<e.length;i++){var a=e[i];i===0&&(n=a),t.lineTo(a.x,a.y)}t.quadraticCurveTo(r.x,r.y,n.x,n.y)}function $0e(t,e,r){t.beginPath&&t.beginPath();for(var n=e,i=0;i<n.length;i++){var a=n[i];t.lineTo(a.x,a.y)}var s=r,l=r[0];t.moveTo(l.x,l.y);for(var i=1;i<s.length;i++){var a=s[i];t.lineTo(a.x,a.y)}t.closePath&&t.closePath()}function sZe(t,e,r,n,i){t.beginPath&&t.beginPath(),t.arc(r,n,i,0,Math.PI*2,!1);var a=e,s=a[0];t.moveTo(s.x,s.y);for(var l=0;l<a.length;l++){var u=a[l];t.lineTo(u.x,u.y)}t.closePath&&t.closePath()}function oZe(t,e,r,n){t.arc(e,r,n,0,Math.PI*2,!1)}function RP(t,e,r,n,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5,s=arguments.length>6?arguments[6]:void 0;t.beginPath(),t.moveTo(e+a,r),t.lineTo(e+n-a,r),t.quadraticCurveTo(e+n,r,e+n,r+a),t.lineTo(e+n,r+i-a),t.quadraticCurveTo(e+n,r+i,e+n-a,r+i),t.lineTo(e+a,r+i),t.quadraticCurveTo(e,r+i,e,r+i-a),t.lineTo(e,r+a),t.quadraticCurveTo(e,r,e+a,r),t.closePath(),s?t.stroke():t.fill()}function z0e(t,e,r){var n=t.createShader(e);if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error(t.getShaderInfoLog(n));return n}function pZe(t,e,r){var n=z0e(t,t.VERTEX_SHADER,e),i=z0e(t,t.FRAGMENT_SHADER,r),a=t.createProgram();if(t.attachShader(a,n),t.attachShader(a,i),t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS))throw new Error("Could not initialize shaders");return a}function mZe(t,e,r){r===void 0&&(r=e);var n=t.makeOffscreenCanvas(e,r),i=n.context=n.getContext("2d");return n.clear=function(){return i.clearRect(0,0,n.width,n.height)},n.clear(),n}function wB(t){var e=t.pixelRatio,r=t.cy.zoom(),n=t.cy.pan();return{zoom:r*e,pan:{x:n.x*e,y:n.y*e}}}function NP(t,e,r,n,i){var a=n*r+e.x,s=i*r+e.y;return s=Math.round(t.canvasHeight-s),[a,s]}function oS(t,e,r){var n=t[0]/255,i=t[1]/255,a=t[2]/255,s=e,l=r||new Array(4);return l[0]=n*s,l[1]=i*s,l[2]=a*s,l[3]=s,l}function lS(t,e){var r=e||new Array(4);return r[0]=(t>>0&255)/255,r[1]=(t>>8&255)/255,r[2]=(t>>16&255)/255,r[3]=(t>>24&255)/255,r}function gZe(t){return t[0]+(t[1]<<8)+(t[2]<<16)+(t[3]<<24)}function yZe(t,e){var r=t.createTexture();return r.buffer=function(n){t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_NEAREST),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n),t.generateMipmap(t.TEXTURE_2D),t.bindTexture(t.TEXTURE_2D,null)},r.deleteTexture=function(){t.deleteTexture(r)},r}function Sge(t,e){switch(e){case"float":return[1,t.FLOAT,4];case"vec2":return[2,t.FLOAT,4];case"vec3":return[3,t.FLOAT,4];case"vec4":return[4,t.FLOAT,4];case"int":return[1,t.INT,4];case"ivec2":return[2,t.INT,4]}}function Cge(t,e,r){switch(e){case t.FLOAT:return new Float32Array(r);case t.INT:return new Int32Array(r)}}function vZe(t,e,r,n,i,a){switch(e){case t.FLOAT:return new Float32Array(r.buffer,a*n,i);case t.INT:return new Int32Array(r.buffer,a*n,i)}}function xZe(t,e,r,n){var i=Sge(t,e),a=_i(i,2),s=a[0],l=a[1],u=Cge(t,l,n),h=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,u,t.STATIC_DRAW),l===t.FLOAT?t.vertexAttribPointer(r,s,l,!1,0,0):l===t.INT&&t.vertexAttribIPointer(r,s,l,0,0),t.enableVertexAttribArray(r),t.bindBuffer(t.ARRAY_BUFFER,null),h}function po(t,e,r,n){var i=Sge(t,r),a=_i(i,3),s=a[0],l=a[1],u=a[2],h=Cge(t,l,e*s),f=s*u,d=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,d),t.bufferData(t.ARRAY_BUFFER,e*f,t.DYNAMIC_DRAW),t.enableVertexAttribArray(n),l===t.FLOAT?t.vertexAttribPointer(n,s,l,!1,f,0):l===t.INT&&t.vertexAttribIPointer(n,s,l,f,0),t.vertexAttribDivisor(n,1),t.bindBuffer(t.ARRAY_BUFFER,null);for(var p=new Array(e),m=0;m<e;m++)p[m]=vZe(t,l,h,f,s,m);return d.dataArray=h,d.stride=f,d.size=s,d.getView=function(g){return p[g]},d.setPoint=function(g,y,v){var x=p[g];x[0]=y,x[1]=v},d.bufferSubData=function(g){t.bindBuffer(t.ARRAY_BUFFER,d),g?t.bufferSubData(t.ARRAY_BUFFER,0,h,0,g*s):t.bufferSubData(t.ARRAY_BUFFER,0,h)},d}function bZe(t){var e=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,e);var r=t.createTexture();return t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0),t.bindFramebuffer(t.FRAMEBUFFER,null),e.setFramebufferAttachmentSizes=function(n,i){t.bindTexture(t.TEXTURE_2D,r),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,n,i,0,t.RGBA,t.UNSIGNED_BYTE,null)},e}function Gb(){var t=new G0e(9);return G0e!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}function Age(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t}function wZe(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=r[0],m=r[1],g=r[2],y=r[3],v=r[4],x=r[5],b=r[6],w=r[7],C=r[8];return t[0]=p*n+m*s+g*h,t[1]=p*i+m*l+g*f,t[2]=p*a+m*u+g*d,t[3]=y*n+v*s+x*h,t[4]=y*i+v*l+x*f,t[5]=y*a+v*u+x*d,t[6]=b*n+w*s+C*h,t[7]=b*i+w*l+C*f,t[8]=b*a+w*u+C*d,t}function DS(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=r[0],m=r[1];return t[0]=n,t[1]=i,t[2]=a,t[3]=s,t[4]=l,t[5]=u,t[6]=p*n+m*s+h,t[7]=p*i+m*l+f,t[8]=p*a+m*u+d,t}function _ge(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=Math.sin(r),m=Math.cos(r);return t[0]=m*n+p*s,t[1]=m*i+p*l,t[2]=m*a+p*u,t[3]=m*s-p*n,t[4]=m*l-p*i,t[5]=m*u-p*a,t[6]=h,t[7]=f,t[8]=d,t}function TB(t,e,r){var n=r[0],i=r[1];return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=i*e[3],t[4]=i*e[4],t[5]=i*e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function TZe(t,e,r){return t[0]=2/e,t[1]=0,t[2]=0,t[3]=0,t[4]=-2/r,t[5]=0,t[6]=-1,t[7]=1,t[8]=1,t}function SZe(t,e){return t.intersection?t.intersection(e):new Set(j0e(t).filter(function(r){return e.has(r)}))}function H0e(t,e){return"rgba(".concat(t[0],", ").concat(t[1],", ").concat(t[2],", ").concat(e,")")}function DZe(t){var e=t&&t.style&&t.style.backgroundColor||"white";return tme(e)}function LZe(t){{var e=t.render;t.render=function(a){a=a||{};var s=t.cy;t.webgl&&(s.zoom()>bge?(RZe(t),e.call(t,a)):(NZe(t),Rge(t,a,Vb.SCREEN)))}}{var r=t.matchCanvasSize;t.matchCanvasSize=function(a){r.call(t,a),t.pickingFrameBuffer.setFramebufferAttachmentSizes(t.canvasWidth,t.canvasHeight),t.pickingFrameBuffer.needsDraw=!0}}t.findNearestElements=function(a,s,l,u){return FZe(t,a,s)};{var n=t.invalidateCachedZSortedEles;t.invalidateCachedZSortedEles=function(){n.call(t),t.pickingFrameBuffer.needsDraw=!0}}{var i=t.notify;t.notify=function(a,s){i.call(t,a,s),a==="viewport"||a==="bounds"?t.pickingFrameBuffer.needsDraw=!0:a==="background"&&t.eleDrawing.invalidate(s,{type:"node-body"})}}}function RZe(t){var e=t.data.contexts[t.WEBGL];e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function NZe(t){var e=o(function(n){n.save(),n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,t.canvasWidth,t.canvasHeight),n.restore()},"clear");e(t.data.contexts[t.NODE]),e(t.data.contexts[t.DRAG])}function MZe(t){var e=t.canvasWidth,r=t.canvasHeight,n=wB(t),i=n.pan,a=n.zoom,s=Gb();DS(s,s,[i.x,i.y]),TB(s,s,[a,a]);var l=Gb();TZe(l,e,r);var u=Gb();return wZe(u,l,s),u}function Lge(t,e){var r=t.canvasWidth,n=t.canvasHeight,i=wB(t),a=i.pan,s=i.zoom;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,r,n),e.translate(a.x,a.y),e.scale(s,s)}function IZe(t,e){t.drawSelectionRectangle(e,function(r){return Lge(t,r)})}function OZe(t){var e=t.data.contexts[t.NODE];e.save(),Lge(t,e),e.strokeStyle="rgba(0, 0, 0, 0.3)",e.beginPath(),e.moveTo(-1e3,0),e.lineTo(1e3,0),e.stroke(),e.beginPath(),e.moveTo(0,-1e3),e.lineTo(0,1e3),e.stroke(),e.restore()}function PZe(t){var e=o(function(i,a,s){for(var l=i.atlasManager.getRenderTypeOpts(a),u=t.data.contexts[t.NODE],h=.125,f=l.atlasCollection.atlases,d=0;d<f.length;d++){var p=f[d],m=p.canvas,g=m.width,y=m.height,v=g*d,x=m.height*s;u.save(),u.scale(h,h),u.drawImage(m,v,x),u.strokeStyle="black",u.rect(v,x,g,y),u.stroke(),u.restore()}},"draw"),r=0;e(t.eleDrawing,"node-body",r++),e(t.eleDrawing,"node-label",r++)}function BZe(t,e,r,n,i){var a,s,l,u,h=wB(t),f=h.pan,d=h.zoom;if(n===void 0||i===void 0){var p=NP(t,f,d,e,r),m=_i(p,2),g=m[0],y=m[1],v=6;a=g-v/2,s=y-v/2,l=v,u=v}else{var x=NP(t,f,d,e,r),b=_i(x,2),w=b[0],C=b[1],T=NP(t,f,d,n,i),E=_i(T,2),A=E[0],S=E[1];a=w,s=S,l=Math.abs(A-w),u=Math.abs(S-C)}if(l===0||u===0)return[];var _=t.data.contexts[t.WEBGL];_.bindFramebuffer(_.FRAMEBUFFER,t.pickingFrameBuffer),t.pickingFrameBuffer.needsDraw&&(_.viewport(0,0,_.canvas.width,_.canvas.height),Rge(t,null,Vb.PICKING),t.pickingFrameBuffer.needsDraw=!1);var I=l*u,D=new Uint8Array(I*4);_.readPixels(a,s,l,u,_.RGBA,_.UNSIGNED_BYTE,D),_.bindFramebuffer(_.FRAMEBUFFER,null);for(var k=new Set,L=0;L<I;L++){var R=D.slice(L*4,L*4+4),O=gZe(R)-1;O>=0&&k.add(O)}return k}function FZe(t,e,r){var n=BZe(t,e,r),i=t.getCachedZSortedEles(),a,s,l=mo(n),u;try{for(l.s();!(u=l.n()).done;){var h=u.value,f=i[h];if(!a&&f.isNode()&&(a=f),!s&&f.isEdge()&&(s=f),a&&s)break}}catch(d){l.e(d)}finally{l.f()}return[a,s].filter(Boolean)}function Rge(t,e,r){var n,i;t.webglDebug&&(i=[],n=performance.now());var a=t.eleDrawing,s=0;if(r.screen&&t.data.canvasNeedsRedraw[t.SELECT_BOX]&&IZe(t,e),t.data.canvasNeedsRedraw[t.NODE]||r.picking){var l=o(function(k,L){L+=1,k.isNode()?(a.drawTexture(k,L,"node-underlay"),a.drawTexture(k,L,"node-body"),a.drawTexture(k,L,"node-label"),a.drawTexture(k,L,"node-overlay")):(a.drawEdgeLine(k,L),a.drawEdgeArrow(k,L,"source"),a.drawEdgeArrow(k,L,"target"),a.drawTexture(k,L,"edge-label"))},"draw"),u=t.data.contexts[t.WEBGL];r.screen?(u.clearColor(0,0,0,0),u.enable(u.BLEND),u.blendFunc(u.ONE,u.ONE_MINUS_SRC_ALPHA)):u.disable(u.BLEND),u.clear(u.COLOR_BUFFER_BIT|u.DEPTH_BUFFER_BIT),u.viewport(0,0,u.canvas.width,u.canvas.height);var h=MZe(t),f=t.getCachedZSortedEles();if(s=f.length,a.startFrame(h,i,r),r.screen){for(var d=0;d<f.nondrag.length;d++)l(f.nondrag[d],d);for(var p=0;p<f.drag.length;p++)l(f.drag[p],-1)}else if(r.picking)for(var m=0;m<f.length;m++)l(f[m],m);a.endFrame(),t.data.gc&&(console.log("Garbage Collect!"),t.data.gc=!1,a.gc()),r.screen&&t.webglDebugShowAtlases&&(OZe(t),PZe(t)),t.data.canvasNeedsRedraw[t.NODE]=!1,t.data.canvasNeedsRedraw[t.DRAG]=!1}if(t.webglDebug){var g=performance.now(),y=!0,v=0,x=0,b=mo(i),w;try{for(b.s();!(w=b.n()).done;){var C=w.value;v++,x+=C.count}}catch(D){b.e(D)}finally{b.f()}var T=Math.ceil(g-n),E="".concat(s," elements, ").concat(x," rectangles, ").concat(v," batches");if(y)console.log("WebGL (".concat(r.name,") - ").concat(E));else{console.log("WebGL render (".concat(r.name,") - frame time ").concat(T,"ms")),console.log(" ".concat(E)),console.log("Texture Atlases Used:");var A=a.getAtlasDebugInfo(),S=mo(A),_;try{for(S.s();!(_=S.n()).done;){var I=_.value;console.log(" ".concat(I.type,": ").concat(I.keyCount," keys, ").concat(I.atlasCount," atlases"))}}catch(D){S.e(D)}finally{S.f()}console.log("")}}}function $Ze(t,e){for(var r=atob(t),n=new ArrayBuffer(r.length),i=new Uint8Array(n),a=0;a<r.length;a++)i[a]=r.charCodeAt(a);return new Blob([n],{type:e})}function Y0e(t){var e=t.indexOf(",");return t.substr(e+1)}function Mge(t,e,r){var n=o(function(){return e.toDataURL(r,t.quality)},"getB64Uri");switch(t.output){case"blob-promise":return new ey(function(i,a){try{e.toBlob(function(s){s!=null?i(s):a(new Error("`canvas.toBlob()` sent a null value in its callback"))},r,t.quality)}catch(s){a(s)}});case"blob":return $Ze(Y0e(n()),r);case"base64":return Y0e(n());case"base64uri":default:return n()}}function Oge(t){var e=this,r=e.cy.window(),n=r.document;t.webgl&&(Er.CANVAS_LAYERS=e.CANVAS_LAYERS=4,console.log("webgl rendering enabled")),e.data={canvases:new Array(Er.CANVAS_LAYERS),contexts:new Array(Er.CANVAS_LAYERS),canvasNeedsRedraw:new Array(Er.CANVAS_LAYERS),bufferCanvases:new Array(Er.BUFFER_COUNT),bufferContexts:new Array(Er.CANVAS_LAYERS)};var i="-webkit-tap-highlight-color",a="rgba(0,0,0,0)";e.data.canvasContainer=n.createElement("div");var s=e.data.canvasContainer.style;e.data.canvasContainer.style[i]=a,s.position="relative",s.zIndex="0",s.overflow="hidden";var l=t.cy.container();l.appendChild(e.data.canvasContainer),l.style[i]=a;var u={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};iWe()&&(u["-ms-touch-action"]="none",u["touch-action"]="none");for(var h=0;h<Er.CANVAS_LAYERS;h++){var f=e.data.canvases[h]=n.createElement("canvas"),d=Er.CANVAS_TYPES[h];e.data.contexts[h]=f.getContext(d),e.data.contexts[h]||ai("Could not create canvas of type "+d),Object.keys(u).forEach(function(K){f.style[K]=u[K]}),f.style.position="absolute",f.setAttribute("data-id","layer"+h),f.style.zIndex=String(Er.CANVAS_LAYERS-h),e.data.canvasContainer.appendChild(f),e.data.canvasNeedsRedraw[h]=!1}e.data.topCanvas=e.data.canvases[0],e.data.canvases[Er.NODE].setAttribute("data-id","layer"+Er.NODE+"-node"),e.data.canvases[Er.SELECT_BOX].setAttribute("data-id","layer"+Er.SELECT_BOX+"-selectbox"),e.data.canvases[Er.DRAG].setAttribute("data-id","layer"+Er.DRAG+"-drag"),e.data.canvases[Er.WEBGL]&&e.data.canvases[Er.WEBGL].setAttribute("data-id","layer"+Er.WEBGL+"-webgl");for(var h=0;h<Er.BUFFER_COUNT;h++)e.data.bufferCanvases[h]=n.createElement("canvas"),e.data.bufferContexts[h]=e.data.bufferCanvases[h].getContext("2d"),e.data.bufferCanvases[h].style.position="absolute",e.data.bufferCanvases[h].setAttribute("data-id","buffer"+h),e.data.bufferCanvases[h].style.zIndex=String(-h-1),e.data.bufferCanvases[h].style.visibility="hidden";e.pathsEnabled=!0;var p=Hs(),m=o(function(X){return{x:(X.x1+X.x2)/2,y:(X.y1+X.y2)/2}},"getBoxCenter"),g=o(function(X){return{x:-X.w/2,y:-X.h/2}},"getCenterOffset"),y=o(function(X){var te=X[0]._private,J=te.oldBackgroundTimestamp===te.backgroundTimestamp;return!J},"backgroundTimestampHasChanged"),v=o(function(X){return X[0]._private.nodeKey},"getStyleKey"),x=o(function(X){return X[0]._private.labelStyleKey},"getLabelKey"),b=o(function(X){return X[0]._private.sourceLabelStyleKey},"getSourceLabelKey"),w=o(function(X){return X[0]._private.targetLabelStyleKey},"getTargetLabelKey"),C=o(function(X,te,J,se,ue){return e.drawElement(X,te,J,!1,!1,ue)},"drawElement"),T=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"main",ue)},"drawLabel"),E=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"source",ue)},"drawSourceLabel"),A=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"target",ue)},"drawTargetLabel"),S=o(function(X){return X.boundingBox(),X[0]._private.bodyBounds},"getElementBox"),_=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.main||p},"getLabelBox"),I=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.source||p},"getSourceLabelBox"),D=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.target||p},"getTargetLabelBox"),k=o(function(X,te){return te},"isLabelVisibleAtScale"),L=o(function(X){return m(S(X))},"getElementRotationPoint"),R=o(function(X,te,J){var se=X?X+"-":"";return{x:te.x+J.pstyle(se+"text-margin-x").pfValue,y:te.y+J.pstyle(se+"text-margin-y").pfValue}},"addTextMargin"),O=o(function(X,te,J){var se=X[0]._private.rscratch;return{x:se[te],y:se[J]}},"getRsPt"),M=o(function(X){return R("",O(X,"labelX","labelY"),X)},"getLabelRotationPoint"),B=o(function(X){return R("source",O(X,"sourceLabelX","sourceLabelY"),X)},"getSourceLabelRotationPoint"),F=o(function(X){return R("target",O(X,"targetLabelX","targetLabelY"),X)},"getTargetLabelRotationPoint"),P=o(function(X){return g(S(X))},"getElementRotationOffset"),z=o(function(X){return g(I(X))},"getSourceLabelRotationOffset"),$=o(function(X){return g(D(X))},"getTargetLabelRotationOffset"),H=o(function(X){var te=_(X),J=g(_(X));if(X.isNode()){switch(X.pstyle("text-halign").value){case"left":J.x=-te.w-(te.leftPad||0);break;case"right":J.x=-(te.rightPad||0);break}switch(X.pstyle("text-valign").value){case"top":J.y=-te.h-(te.topPad||0);break;case"bottom":J.y=-(te.botPad||0);break}}return J},"getLabelRotationOffset"),Q=e.data.eleTxrCache=new Fb(e,{getKey:v,doesEleInvalidateKey:y,drawElement:C,getBoundingBox:S,getRotationPoint:L,getRotationOffset:P,allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),j=e.data.lblTxrCache=new Fb(e,{getKey:x,drawElement:T,getBoundingBox:_,getRotationPoint:M,getRotationOffset:H,isVisible:k}),ie=e.data.slbTxrCache=new Fb(e,{getKey:b,drawElement:E,getBoundingBox:I,getRotationPoint:B,getRotationOffset:z,isVisible:k}),ne=e.data.tlbTxrCache=new Fb(e,{getKey:w,drawElement:A,getBoundingBox:D,getRotationPoint:F,getRotationOffset:$,isVisible:k}),le=e.data.lyrTxrCache=new wge(e);e.onUpdateEleCalcs(o(function(X,te){Q.invalidateElements(te),j.invalidateElements(te),ie.invalidateElements(te),ne.invalidateElements(te),le.invalidateElements(te);for(var J=0;J<te.length;J++){var se=te[J]._private;se.oldBackgroundTimestamp=se.backgroundTimestamp}},"invalidateTextureCaches"));var he=o(function(X){for(var te=0;te<X.length;te++)le.enqueueElementRefinement(X[te].ele)},"refineInLayers");Q.onDequeue(he),j.onDequeue(he),ie.onDequeue(he),ne.onDequeue(he),t.webgl&&e.initWebgl(t,{getStyleKey:v,getLabelKey:x,drawElement:C,drawLabel:T,getElementBox:S,getLabelBox:_,getElementRotationPoint:L,getElementRotationOffset:P,getLabelRotationPoint:M,getLabelRotationOffset:H})}function Fge(t,e,r){var n=r,i=o(function(S){un("Can not register `"+e+"` for `"+t+"` since `"+S+"` already exists in the prototype and can not be overridden")},"overrideErr");if(t==="core"){if(Jb.prototype[e])return i(e);Jb.prototype[e]=r}else if(t==="collection"){if(ka.prototype[e])return i(e);ka.prototype[e]=r}else if(t==="layout"){for(var a=o(function(S){this.options=S,r.call(this,S),Ur(this._private)||(this._private={}),this._private.cy=S.cy,this._private.listeners=[],this.createEmitter()},"Layout"),s=a.prototype=Object.create(r.prototype),l=[],u=0;u<l.length;u++){var h=l[u];s[h]=s[h]||function(){return this}}s.start&&!s.run?s.run=function(){return this.start(),this}:!s.start&&s.run&&(s.start=function(){return this.run(),this});var f=r.prototype.stop;s.stop=function(){var A=this.options;if(A&&A.animate){var S=this.animations;if(S)for(var _=0;_<S.length;_++)S[_].stop()}return f?f.call(this):this.emit("layoutstop"),this},s.destroy||(s.destroy=function(){return this}),s.cy=function(){return this._private.cy};var d=o(function(S){return S._private.cy},"getCy"),p={addEventFields:o(function(S,_){_.layout=S,_.cy=d(S),_.target=S},"addEventFields"),bubble:o(function(){return!0},"bubble"),parent:o(function(S){return d(S)},"parent")};rr(s,{createEmitter:o(function(){return this._private.emitter=new $S(p,this),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(S,_){return this.emitter().on(S,_),this},"on"),one:o(function(S,_){return this.emitter().one(S,_),this},"one"),once:o(function(S,_){return this.emitter().one(S,_),this},"once"),removeListener:o(function(S,_){return this.emitter().removeListener(S,_),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),emit:o(function(S,_){return this.emitter().emit(S,_),this},"emit")}),cn.eventAliasesOn(s),n=a}else if(t==="renderer"&&e!=="null"&&e!=="base"){var m=$ge("renderer","base"),g=m.prototype,y=r,v=r.prototype,x=o(function(){m.apply(this,arguments),y.apply(this,arguments)},"Renderer"),b=x.prototype;for(var w in g){var C=g[w],T=v[w]!=null;if(T)return i(w);b[w]=C}for(var E in v)b[E]=v[E];g.clientFunctions.forEach(function(A){b[A]=b[A]||function(){ai("Renderer does not implement `renderer."+A+"()` on its prototype")}}),n=x}else if(t==="__proto__"||t==="constructor"||t==="prototype")return ai(t+" is an illegal type to be registered, possibly lead to prototype pollutions");return rme({map:Pge,keys:[t,e],value:n})}function $ge(t,e){return nme({map:Pge,keys:[t,e]})}function HZe(t,e,r,n,i){return rme({map:Bge,keys:[t,e,r,n],value:i})}function WZe(t,e,r,n){return nme({map:Bge,keys:[t,e,r,n]})}var Ui,Lpe,jHe,K0e,KHe,QHe,e4,Zt,si,En,Ur,ZHe,Ct,JHe,vS,go,t4,Q0e,JP,Z0e,eWe,Af,tWe,rWe,nWe,iWe,Ub,eB,LS,J0e,Rpe,Hi,aWe,sWe,oWe,lWe,cWe,uWe,eme,hWe,rr,fWe,dWe,pWe,mWe,tme,gWe,rme,nme,zp,Ib,xWe,bWe,wWe,TWe,RS,kWe,xP,EWe,CWe,AWe,DWe,LWe,j1,ime,RWe,NWe,Ab,IWe,OWe,PWe,FWe,$We,zWe,Npe,ame,UWe,HWe,r4,Mpe,qWe,YWe,XWe,jWe,Ipe,QWe,ZWe,JWe,n4,bP,sme,tqe,xS,Qu,V1,ome,Ob,lme,Hb,Wb,rqe,wf,j6,nqe,_f,cme,iqe,Ope,aqe,sqe,tB,ume,bS,Ppe,rB,ai,hme,un,oqe,Yc,lqe,fme,cqe,dme,la,Df,nB,uqe,Gl,kf,hqe,Xc,fqe,dqe,J1,NS,Bpe,qb,pqe,i4,mqe,gqe,yqe,vqe,xqe,bqe,wqe,Tqe,kqe,Eqe,Sqe,wP,Cqe,Aqe,MS,pme,U1,_qe,Dqe,Lqe,Rqe,Nqe,K6,iB,mme,Gp,Op,Mqe,oa,W1,Iqe,Yb,Hs,Oqe,Pqe,Bqe,gme,Fqe,cS,uS,Fpe,aB,K1,$qe,yme,vme,zqe,Gqe,Vqe,Uqe,Hqe,Wqe,Us,Zu,qqe,wS,TS,Yqe,$p,Pb,TP,Ef,Xb,Xqe,Q6,gs,xme,PP,Vp,bme,sB,jqe,BP,Kqe,Qqe,$pe,q1,zpe,Y1,Zqe,FP,Jqe,eYe,tYe,rYe,wme,nYe,iYe,aYe,sYe,oYe,lYe,cYe,Gpe,uYe,hYe,Tme,Vpe,Upe,fYe,dYe,_b,Q1,pYe,oB,kS,kP,kme,Eme,mYe,gYe,yYe,Hpe,Wpe,vYe,xYe,bYe,wYe,TYe,qpe,kYe,EYe,SYe,CYe,Ype,Z6,AYe,_Ye,Xpe,DYe,LYe,RYe,NYe,MYe,IYe,jpe,OYe,Kpe,PYe,BYe,FYe,J6,$Ye,eS,zYe,Sme,Cme,Ame,_me,Ju,Qpe,Dme,Zpe,Jpe,GYe,ey,$P,Up,VYe,UYe,OS,HYe,WYe,YYe,XYe,jYe,KYe,QYe,JYe,eXe,EP,e0e,rXe,nXe,iXe,sXe,oXe,lXe,cXe,uXe,hXe,fXe,dXe,mXe,yXe,lB,xXe,jb,wXe,kXe,EXe,SXe,CXe,_Xe,DXe,LXe,NXe,MXe,OXe,t0e,BXe,Lme,PS,zXe,GXe,UXe,WXe,YXe,jXe,KXe,QXe,ZXe,eje,rje,BS,aje,oje,cje,hje,Rme,fje,dje,pje,gje,yje,vje,xje,Nme,Mme,wje,r0e,n0e,Tje,Ome,Pme,Sje,uB,_je,Lje,Rje,i0e,Mje,Ije,Oje,Bje,Fje,$je,Gje,Uje,Wje,Yje,jje,Kje,Qje,cn,Zje,hS,Vr,mn,$t,zP,Jje,eKe,tKe,B1,Tf,GP,rKe,nKe,iKe,aKe,sKe,Bme,oKe,lKe,hB,cKe,fi,zn,uKe,hKe,fKe,Lf,Rf,Sf,tl,Z1,Kb,zme,pKe,FS,Vl,Gme,Vme,a0e,mKe,X1,Of,el,zl,Pp,Db,tS,CP,gKe,yKe,Ume,Hme,s0e,Qb,o0e,l0e,vKe,Bb,a4,Wme,xKe,bKe,wKe,TKe,kKe,EKe,SKe,CKe,AKe,c0e,_Ke,DKe,LKe,qme,Yme,RKe,Xme,u0e,NKe,Nf,jme,h0e,MKe,IKe,nS,Kme,Qme,Qr,OKe,Zme,ES,PKe,BKe,fS,Ta,iy,FKe,$Ke,zKe,GKe,Cf,$a,d0e,p0e,m0e,ka,Mn,VKe,HKe,Nn,dS,YKe,XKe,iS,ege,VP,pS,jKe,KKe,UP,mS,Ga,$b,QKe,s4,pB,jc,VS,mB,wa,US,Fa,za,ZKe,JKe,Hp,Zb,Jb,SS,eQe,tQe,z1,T0e,rQe,nQe,_P,iQe,aQe,sQe,oQe,lQe,cQe,ige,uQe,hQe,fQe,k0e,dQe,pQe,CS,mQe,gQe,yQe,vQe,xQe,bQe,E0e,wQe,TQe,kQe,EQe,SQe,S0e,C0e,yB,qp,AS,HP,WP,qc,Jo,A0e,_0e,Fp,gS,Ku,Mp,Bp,Wc,G1,aS,cge,uge,qP,YP,D0e,L0e,CQe,AQe,Va,o4,xB,Kc,dge,pge,DQe,mge,R0e,N0e,WS,qS,gge,yge,sy,eh,l4,M0e,LQe,vge,oy,DP,xge,RQe,I0e,sS,yS,XP,bge,NQe,MQe,IQe,OQe,PQe,BQe,FQe,$Qe,zQe,GQe,VQe,UQe,HQe,H1,WQe,Fb,qi,qQe,zb,_S,YQe,XQe,jQe,KQe,QQe,ZQe,JQe,eZe,O0e,tZe,P0e,rZe,wge,Ea,B0e,nZe,Tge,F0e,Qc,lZe,cZe,uZe,hZe,fZe,LP,th,kge,bB,Yp,ly,Ege,ys,dZe,Nb,G0e,Vb,Mb,kZe,EZe,CZe,MP,V0e,U0e,IP,AZe,_Ze,Dge,Pf,W0e,q0e,jP,KP,Nge,Ip,c4,Ige,zZe,Er,GZe,VZe,UZe,Pge,Bge,QP,zge,Wp,qZe,rl,kB=N(()=>{"use strict";o(Wi,"_typeof");o(Mf,"_classCallCheck");o(Dpe,"_defineProperties");o(If,"_createClass");o(X0e,"_defineProperty$1");o(_i,"_slicedToArray");o(j0e,"_toConsumableArray");o(UHe,"_arrayWithoutHoles");o(HHe,"_arrayWithHoles");o(WHe,"_iterableToArray");o(qHe,"_iterableToArrayLimit");o(ZP,"_unsupportedIterableToArray");o(OP,"_arrayLikeToArray");o(YHe,"_nonIterableSpread");o(XHe,"_nonIterableRest");o(mo,"_createForOfIteratorHelper");Ui=typeof window>"u"?null:window,Lpe=Ui?Ui.navigator:null;Ui&&Ui.document;jHe=Wi(""),K0e=Wi({}),KHe=Wi(function(){}),QHe=typeof HTMLElement>"u"?"undefined":Wi(HTMLElement),e4=o(function(e){return e&&e.instanceString&&si(e.instanceString)?e.instanceString():null},"instanceStr"),Zt=o(function(e){return e!=null&&Wi(e)==jHe},"string"),si=o(function(e){return e!=null&&Wi(e)===KHe},"fn"),En=o(function(e){return!go(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),Ur=o(function(e){return e!=null&&Wi(e)===K0e&&!En(e)&&e.constructor===Object},"plainObject"),ZHe=o(function(e){return e!=null&&Wi(e)===K0e},"object"),Ct=o(function(e){return e!=null&&Wi(e)===Wi(1)&&!isNaN(e)},"number"),JHe=o(function(e){return Ct(e)&&Math.floor(e)===e},"integer"),vS=o(function(e){if(QHe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),go=o(function(e){return t4(e)||Q0e(e)},"elementOrCollection"),t4=o(function(e){return e4(e)==="collection"&&e._private.single},"element"),Q0e=o(function(e){return e4(e)==="collection"&&!e._private.single},"collection"),JP=o(function(e){return e4(e)==="core"},"core"),Z0e=o(function(e){return e4(e)==="stylesheet"},"stylesheet"),eWe=o(function(e){return e4(e)==="event"},"event"),Af=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),tWe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),rWe=o(function(e){return Ur(e)&&Ct(e.x1)&&Ct(e.x2)&&Ct(e.y1)&&Ct(e.y2)},"boundingBox"),nWe=o(function(e){return ZHe(e)&&si(e.then)},"promise"),iWe=o(function(){return Lpe&&Lpe.userAgent.match(/msie|trident|edge/i)},"ms"),Ub=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;s<arguments.length;s++)a.push(arguments[s]);return a.join("$")},"keyFn"));var n=o(function i(){var a=this,s=arguments,l,u=r.apply(a,s),h=i.cache;return(l=h[u])||(l=h[u]=e.apply(a,s)),l},"memoizedFn");return n.cache={},n},"memoize"),eB=Ub(function(t){return t.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})}),LS=Ub(function(t){return t.replace(/(-\w)/g,function(e){return e[1].toUpperCase()})}),J0e=Ub(function(t,e){return t+e[0].toUpperCase()+e.substring(1)},function(t,e){return t+"$"+e}),Rpe=o(function(e){return Af(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},"capitalize"),Hi="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",aWe="rgb[a]?\\(("+Hi+"[%]?)\\s*,\\s*("+Hi+"[%]?)\\s*,\\s*("+Hi+"[%]?)(?:\\s*,\\s*("+Hi+"))?\\)",sWe="rgb[a]?\\((?:"+Hi+"[%]?)\\s*,\\s*(?:"+Hi+"[%]?)\\s*,\\s*(?:"+Hi+"[%]?)(?:\\s*,\\s*(?:"+Hi+"))?\\)",oWe="hsl[a]?\\(("+Hi+")\\s*,\\s*("+Hi+"[%])\\s*,\\s*("+Hi+"[%])(?:\\s*,\\s*("+Hi+"))?\\)",lWe="hsl[a]?\\((?:"+Hi+")\\s*,\\s*(?:"+Hi+"[%])\\s*,\\s*(?:"+Hi+"[%])(?:\\s*,\\s*(?:"+Hi+"))?\\)",cWe="\\#[0-9a-fA-F]{3}",uWe="\\#[0-9a-fA-F]{6}",eme=o(function(e,r){return e<r?-1:e>r?1:0},"ascending"),hWe=o(function(e,r){return-1*eme(e,r)},"descending"),rr=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r<e.length;r++){var n=e[r];if(n!=null)for(var i=Object.keys(n),a=0;a<i.length;a++){var s=i[a];t[s]=n[s]}}return t},fWe=o(function(e){if(!(!(e.length===4||e.length===7)||e[0]!=="#")){var r=e.length===4,n,i,a,s=16;return r?(n=parseInt(e[1]+e[1],s),i=parseInt(e[2]+e[2],s),a=parseInt(e[3]+e[3],s)):(n=parseInt(e[1]+e[2],s),i=parseInt(e[3]+e[4],s),a=parseInt(e[5]+e[6],s)),[n,i,a]}},"hex2tuple"),dWe=o(function(e){var r,n,i,a,s,l,u,h;function f(g,y,v){return v<0&&(v+=1),v>1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+oWe+"$").exec(e);if(d){if(n=parseInt(d[1]),n<0?n=(360- -1*n%360)%360:n>360&&(n=n%360),n/=360,i=parseFloat(d[2]),i<0||i>100||(i=i/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(i===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+i):a+i-a*i,m=2*a-p;l=Math.round(255*f(m,p,n+1/3)),u=Math.round(255*f(m,p,n)),h=Math.round(255*f(m,p,n-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),pWe=o(function(e){var r,n=new RegExp("^"+aWe+"$").exec(e);if(n){r=[];for(var i=[],a=1;a<=3;a++){var s=n[a];if(s[s.length-1]==="%"&&(i[a]=!0),s=parseFloat(s),i[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=i[1]||i[2]||i[3],u=i[1]&&i[2]&&i[3];if(l&&!u)return;var h=n[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),mWe=o(function(e){return gWe[e.toLowerCase()]},"colorname2tuple"),tme=o(function(e){return(En(e)?e:null)||mWe(e)||fWe(e)||pWe(e)||dWe(e)},"color2tuple"),gWe={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},rme=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a<i;a++){var s=n[a];if(Ur(s))throw Error("Tried to set map with object key");a<n.length-1?(r[s]==null&&(r[s]={}),r=r[s]):r[s]=e.value}},"setMap"),nme=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a<i;a++){var s=n[a];if(Ur(s))throw Error("Tried to get map with object key");if(r=r[s],r==null)return r}return r},"getMap");o(yWe,"isObject");zp=yWe,Ib=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};o(vWe,"createCommonjsModule");xWe=typeof Ib=="object"&&Ib&&Ib.Object===Object&&Ib,bWe=xWe,wWe=typeof self=="object"&&self&&self.Object===Object&&self,TWe=bWe||wWe||Function("return this")(),RS=TWe,kWe=o(function(){return RS.Date.now()},"now"),xP=kWe,EWe=/\s/;o(SWe,"trimmedEndIndex");CWe=SWe,AWe=/^\s+/;o(_We,"baseTrim");DWe=_We,LWe=RS.Symbol,j1=LWe,ime=Object.prototype,RWe=ime.hasOwnProperty,NWe=ime.toString,Ab=j1?j1.toStringTag:void 0;o(MWe,"getRawTag");IWe=MWe,OWe=Object.prototype,PWe=OWe.toString;o(BWe,"objectToString");FWe=BWe,$We="[object Null]",zWe="[object Undefined]",Npe=j1?j1.toStringTag:void 0;o(GWe,"baseGetTag");ame=GWe;o(VWe,"isObjectLike");UWe=VWe,HWe="[object Symbol]";o(WWe,"isSymbol");r4=WWe,Mpe=NaN,qWe=/^[-+]0x[0-9a-f]+$/i,YWe=/^0b[01]+$/i,XWe=/^0o[0-7]+$/i,jWe=parseInt;o(KWe,"toNumber");Ipe=KWe,QWe="Expected a function",ZWe=Math.max,JWe=Math.min;o(eqe,"debounce");n4=eqe,bP=Ui?Ui.performance:null,sme=bP&&bP.now?function(){return bP.now()}:function(){return Date.now()},tqe=function(){if(Ui){if(Ui.requestAnimationFrame)return function(t){Ui.requestAnimationFrame(t)};if(Ui.mozRequestAnimationFrame)return function(t){Ui.mozRequestAnimationFrame(t)};if(Ui.webkitRequestAnimationFrame)return function(t){Ui.webkitRequestAnimationFrame(t)};if(Ui.msRequestAnimationFrame)return function(t){Ui.msRequestAnimationFrame(t)}}return function(t){t&&setTimeout(function(){t(sme())},1e3/60)}}(),xS=o(function(e){return tqe(e)},"requestAnimationFrame"),Qu=sme,V1=9261,ome=65599,Ob=5381,lme=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:V1,n=r,i;i=e.next(),!i.done;)n=n*ome+i.value|0;return n},"hashIterableInts"),Hb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:V1;return r*ome+e|0},"hashInt"),Wb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ob;return(r<<5)+r+e|0},"hashIntAlt"),rqe=o(function(e,r){return e*2097152+r},"combineHashes"),wf=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),j6=o(function(e,r){return[Hb(e[0],r[0]),Wb(e[1],r[1])]},"hashArrays"),nqe=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i<a?n.value=e[i++]:n.done=!0,n},"next")};return lme(s,r)},"hashIntsArray"),_f=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i<a?n.value=e.charCodeAt(i++):n.done=!0,n},"next")};return lme(s,r)},"hashString"),cme=o(function(){return iqe(arguments)},"hashStrings"),iqe=o(function(e){for(var r,n=0;n<e.length;n++){var i=e[n];n===0?r=_f(i):r=_f(i,r)}return r},"hashStringsArray"),Ope=!0,aqe=console.warn!=null,sqe=console.trace!=null,tB=Number.MAX_SAFE_INTEGER||9007199254740991,ume=o(function(){return!0},"trueify"),bS=o(function(){return!1},"falsify"),Ppe=o(function(){return 0},"zeroify"),rB=o(function(){},"noop"),ai=o(function(e){throw new Error(e)},"error"),hme=o(function(e){if(e!==void 0)Ope=!!e;else return Ope},"warnings"),un=o(function(e){hme()&&(aqe?console.warn(e):(console.log(e),sqe&&console.trace()))},"warn"),oqe=o(function(e){return rr({},e)},"clone"),Yc=o(function(e){return e==null?e:En(e)?e.slice():Ur(e)?oqe(e):e},"copy"),lqe=o(function(e){return e.slice()},"copyArray"),fme=o(function(e,r){for(r=e="";e++<36;r+=e*51&52?(e^15?8^Math.random()*(e^20?16:4):4).toString(16):"-");return r},"uuid"),cqe={},dme=o(function(){return cqe},"staticEmptyObject"),la=o(function(e){var r=Object.keys(e);return function(n){for(var i={},a=0;a<r.length;a++){var s=r[a],l=n?.[s];i[s]=l===void 0?e[s]:l}return i}},"defaults"),Df=o(function(e,r,n){for(var i=e.length-1;i>=0&&!(e[i]===r&&(e.splice(i,1),n));i--);},"removeFromArray"),nB=o(function(e){e.splice(0,e.length)},"clearArray"),uqe=o(function(e,r){for(var n=0;n<r.length;n++){var i=r[n];e.push(i)}},"push"),Gl=o(function(e,r,n){return n&&(r=J0e(n,r)),e[r]},"getPrefixedProperty"),kf=o(function(e,r,n,i){n&&(r=J0e(n,r)),e[r]=i},"setPrefixedProperty"),hqe=function(){function t(){Mf(this,t),this._obj={}}return o(t,"ObjectMap"),If(t,[{key:"set",value:o(function(r,n){return this._obj[r]=n,this},"set")},{key:"delete",value:o(function(r){return this._obj[r]=void 0,this},"_delete")},{key:"clear",value:o(function(){this._obj={}},"clear")},{key:"has",value:o(function(r){return this._obj[r]!==void 0},"has")},{key:"get",value:o(function(r){return this._obj[r]},"get")}]),t}(),Xc=typeof Map<"u"?Map:hqe,fqe="undefined",dqe=function(){function t(e){if(Mf(this,t),this._obj=Object.create(null),this.size=0,e!=null){var r;e.instanceString!=null&&e.instanceString()===this.instanceString()?r=e.toArray():r=e;for(var n=0;n<r.length;n++)this.add(r[n])}}return o(t,"ObjectSet"),If(t,[{key:"instanceString",value:o(function(){return"set"},"instanceString")},{key:"add",value:o(function(r){var n=this._obj;n[r]!==1&&(n[r]=1,this.size++)},"add")},{key:"delete",value:o(function(r){var n=this._obj;n[r]===1&&(n[r]=0,this.size--)},"_delete")},{key:"clear",value:o(function(){this._obj=Object.create(null)},"clear")},{key:"has",value:o(function(r){return this._obj[r]===1},"has")},{key:"toArray",value:o(function(){var r=this;return Object.keys(this._obj).filter(function(n){return r.has(n)})},"toArray")},{key:"forEach",value:o(function(r,n){return this.toArray().forEach(r,n)},"forEach")}]),t}(),J1=(typeof Set>"u"?"undefined":Wi(Set))!==fqe?Set:dqe,NS=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!JP(e)){ai("An element must have a core reference and parameters set");return}var i=r.group;if(i==null&&(r.data&&r.data.source!=null&&r.data.target!=null?i="edges":i="nodes"),i!=="nodes"&&i!=="edges"){ai("An element must be of type `nodes` or `edges`; you specified `"+i+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:i,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?i==="edges":!!r.pannable,active:!1,classes:new J1,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];En(r.classes)?h=r.classes:Zt(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;f<d;f++){var p=h[f];!p||p===""||a.classes.add(p)}this.createEmitter();var m=r.style||r.css;m&&(un("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(m)),(n===void 0||n)&&this.restore()},"Element"),Bpe=o(function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},o(function(n,i,a){var s;Ur(n)&&!go(n)&&(s=n,n=s.roots||s.root,i=s.visit,a=s.directed),a=arguments.length===2&&!si(i)?i:a,i=si(i)?i:function(){};for(var l=this._private.cy,u=n=Zt(n)?this.filter(n):n,h=[],f=[],d={},p={},m={},g=0,y,v=this.byGroup(),x=v.nodes,b=v.edges,w=0;w<u.length;w++){var C=u[w],T=C.id();C.isNode()&&(h.unshift(C),e.bfs&&(m[T]=!0,f.push(C)),p[T]=0)}for(var E=o(function(){var L=e.bfs?h.shift():h.pop(),R=L.id();if(e.dfs){if(m[R])return"continue";m[R]=!0,f.push(L)}var O=p[R],M=d[R],B=M!=null?M.source():null,F=M!=null?M.target():null,P=M==null?void 0:L.same(B)?F[0]:B[0],z=void 0;if(z=i(L,M,P,g++,O),z===!0)return y=L,"break";if(z===!1)return"break";for(var $=L.connectedEdges().filter(function(ne){return(!a||ne.source().same(L))&&b.has(ne)}),H=0;H<$.length;H++){var Q=$[H],j=Q.connectedNodes().filter(function(ne){return!ne.same(L)&&x.has(ne)}),ie=j.id();j.length!==0&&!m[ie]&&(j=j[0],h.push(j),e.bfs&&(m[ie]=!0,f.push(j)),d[ie]=Q,p[ie]=p[R]+1)}},"_loop");h.length!==0;){var A=E();if(A!=="continue"&&A==="break")break}for(var S=l.collection(),_=0;_<f.length;_++){var I=f[_],D=d[I.id()];D!=null&&S.push(D),S.push(I)}return{path:l.collection(S),found:l.collection(y)}},"searchFn")},"defineSearch"),qb={breadthFirstSearch:Bpe({bfs:!0}),depthFirstSearch:Bpe({dfs:!0})};qb.bfs=qb.breadthFirstSearch;qb.dfs=qb.depthFirstSearch;pqe=vWe(function(t,e){(function(){var r,n,i,a,s,l,u,h,f,d,p,m,g,y,v;i=Math.floor,d=Math.min,n=o(function(x,b){return x<b?-1:x>b?1:0},"defaultCmp"),f=o(function(x,b,w,C,T){var E;if(w==null&&(w=0),T==null&&(T=n),w<0)throw new Error("lo must be non-negative");for(C==null&&(C=x.length);w<C;)E=i((w+C)/2),T(b,x[E])<0?C=E:w=E+1;return[].splice.apply(x,[w,w-w].concat(b)),b},"insort"),l=o(function(x,b,w){return w==null&&(w=n),x.push(b),y(x,0,x.length-1,w)},"heappush"),s=o(function(x,b){var w,C;return b==null&&(b=n),w=x.pop(),x.length?(C=x[0],x[0]=w,v(x,0,b)):C=w,C},"heappop"),h=o(function(x,b,w){var C;return w==null&&(w=n),C=x[0],x[0]=b,v(x,0,w),C},"heapreplace"),u=o(function(x,b,w){var C;return w==null&&(w=n),x.length&&w(x[0],b)<0&&(C=[x[0],b],b=C[0],x[0]=C[1],v(x,0,w)),b},"heappushpop"),a=o(function(x,b){var w,C,T,E,A,S;for(b==null&&(b=n),E=function(){S=[];for(var _=0,I=i(x.length/2);0<=I?_<I:_>I;0<=I?_++:_--)S.push(_);return S}.apply(this).reverse(),A=[],C=0,T=E.length;C<T;C++)w=E[C],A.push(v(x,w,b));return A},"heapify"),g=o(function(x,b,w){var C;if(w==null&&(w=n),C=x.indexOf(b),C!==-1)return y(x,0,C,w),v(x,C,w)},"updateItem"),p=o(function(x,b,w){var C,T,E,A,S;if(w==null&&(w=n),T=x.slice(0,b),!T.length)return T;for(a(T,w),S=x.slice(b),E=0,A=S.length;E<A;E++)C=S[E],u(T,C,w);return T.sort(w).reverse()},"nlargest"),m=o(function(x,b,w){var C,T,E,A,S,_,I,D,k;if(w==null&&(w=n),b*10<=x.length){if(E=x.slice(0,b).sort(w),!E.length)return E;for(T=E[E.length-1],I=x.slice(b),A=0,_=I.length;A<_;A++)C=I[A],w(C,T)<0&&(f(E,C,0,null,w),E.pop(),T=E[E.length-1]);return E}for(a(x,w),k=[],S=0,D=d(b,x.length);0<=D?S<D:S>D;0<=D?++S:--S)k.push(s(x,w));return k},"nsmallest"),y=o(function(x,b,w,C){var T,E,A;for(C==null&&(C=n),T=x[w];w>b;){if(A=w-1>>1,E=x[A],C(T,E)<0){x[w]=E,w=A;continue}break}return x[w]=T},"_siftdown"),v=o(function(x,b,w){var C,T,E,A,S;for(w==null&&(w=n),T=x.length,S=b,E=x[b],C=2*b+1;C<T;)A=C+1,A<T&&!(w(x[C],x[A])<0)&&(C=A),x[b]=x[C],b=C,C=2*b+1;return x[b]=E,y(x,S,b,w)},"_siftup"),r=function(){x.push=l,x.pop=s,x.replace=h,x.pushpop=u,x.heapify=a,x.updateItem=g,x.nlargest=p,x.nsmallest=m;function x(b){this.cmp=b??n,this.nodes=[]}return o(x,"Heap"),x.prototype.push=function(b){return l(this.nodes,b,this.cmp)},x.prototype.pop=function(){return s(this.nodes,this.cmp)},x.prototype.peek=function(){return this.nodes[0]},x.prototype.contains=function(b){return this.nodes.indexOf(b)!==-1},x.prototype.replace=function(b){return h(this.nodes,b,this.cmp)},x.prototype.pushpop=function(b){return u(this.nodes,b,this.cmp)},x.prototype.heapify=function(){return a(this.nodes,this.cmp)},x.prototype.updateItem=function(b){return g(this.nodes,b,this.cmp)},x.prototype.clear=function(){return this.nodes=[]},x.prototype.empty=function(){return this.nodes.length===0},x.prototype.size=function(){return this.nodes.length},x.prototype.clone=function(){var b;return b=new x,b.nodes=this.nodes.slice(0),b},x.prototype.toArray=function(){return this.nodes.slice(0)},x.prototype.insert=x.prototype.push,x.prototype.top=x.prototype.peek,x.prototype.front=x.prototype.peek,x.prototype.has=x.prototype.contains,x.prototype.copy=x.prototype.clone,x}(),function(x,b){return t.exports=b()}(this,function(){return r})}).call(Ib)}),i4=pqe,mqe=la({root:null,weight:o(function(e){return 1},"weight"),directed:!1}),gqe={dijkstra:o(function(e){if(!Ur(e)){var r=arguments;e={root:r[0],weight:r[1],directed:r[2]}}var n=mqe(e),i=n.root,a=n.weight,s=n.directed,l=this,u=a,h=Zt(i)?this.filter(i)[0]:i[0],f={},d={},p={},m=this.byGroup(),g=m.nodes,y=m.edges;y.unmergeBy(function(O){return O.isLoop()});for(var v=o(function(M){return f[M.id()]},"getDist"),x=o(function(M,B){f[M.id()]=B,b.updateItem(M)},"setDist"),b=new i4(function(O,M){return v(O)-v(M)}),w=0;w<g.length;w++){var C=g[w];f[C.id()]=C.same(h)?0:1/0,b.push(C)}for(var T=o(function(M,B){for(var F=(s?M.edgesTo(B):M.edgesWith(B)).intersect(y),P=1/0,z,$=0;$<F.length;$++){var H=F[$],Q=u(H);(Q<P||!z)&&(P=Q,z=H)}return{edge:z,dist:P}},"distBetween");b.size()>0;){var E=b.pop(),A=v(E),S=E.id();if(p[S]=A,A!==1/0)for(var _=E.neighborhood().intersect(g),I=0;I<_.length;I++){var D=_[I],k=D.id(),L=T(E,D),R=A+L.dist;R<v(D)&&(x(D,R),d[k]={node:E,edge:L.edge})}}return{distanceTo:o(function(M){var B=Zt(M)?g.filter(M)[0]:M[0];return p[B.id()]},"distanceTo"),pathTo:o(function(M){var B=Zt(M)?g.filter(M)[0]:M[0],F=[],P=B,z=P.id();if(B.length>0)for(F.unshift(B);d[z];){var $=d[z];F.unshift($.edge),F.unshift($.node),P=$.node,z=P.id()}return l.spawn(F)},"pathTo")}},"dijkstra")},yqe={kruskal:o(function(e){e=e||function(w){return 1};for(var r=this.byGroup(),n=r.nodes,i=r.edges,a=n.length,s=new Array(a),l=n,u=o(function(C){for(var T=0;T<s.length;T++){var E=s[T];if(E.has(C))return T}},"findSetIndex"),h=0;h<a;h++)s[h]=this.spawn(n[h]);for(var f=i.sort(function(w,C){return e(w)-e(C)}),d=0;d<f.length;d++){var p=f[d],m=p.source()[0],g=p.target()[0],y=u(m),v=u(g),x=s[y],b=s[v];y!==v&&(l.merge(p),x.merge(b),s.splice(v,1))}return l},"kruskal")},vqe=la({root:null,goal:null,weight:o(function(e){return 1},"weight"),heuristic:o(function(e){return 0},"heuristic"),directed:!1}),xqe={aStar:o(function(e){var r=this.cy(),n=vqe(e),i=n.root,a=n.goal,s=n.heuristic,l=n.directed,u=n.weight;i=r.collection(i)[0],a=r.collection(a)[0];var h=i.id(),f=a.id(),d={},p={},m={},g=new i4(function(z,$){return p[z.id()]-p[$.id()]}),y=new J1,v={},x={},b=o(function($,H){g.push($),y.add(H)},"addToOpenSet"),w,C,T=o(function(){w=g.pop(),C=w.id(),y.delete(C)},"popFromOpenSet"),E=o(function($){return y.has($)},"isInOpenSet");b(i,h),d[h]=0,p[h]=s(i);for(var A=0;g.size()>0;){if(T(),A++,C===f){for(var S=[],_=a,I=f,D=x[I];S.unshift(_),D!=null&&S.unshift(D),_=v[I],_!=null;)I=_.id(),D=x[I];return{found:!0,distance:d[C],path:this.spawn(S),steps:A}}m[C]=!0;for(var k=w._private.edges,L=0;L<k.length;L++){var R=k[L];if(this.hasElementWithId(R.id())&&!(l&&R.data("source")!==C)){var O=R.source(),M=R.target(),B=O.id()!==C?O:M,F=B.id();if(this.hasElementWithId(F)&&!m[F]){var P=d[C]+u(R);if(!E(F)){d[F]=P,p[F]=P+s(B),b(B,F),v[F]=w,x[F]=R;continue}P<d[F]&&(d[F]=P,p[F]=P+s(B),v[F]=w,x[F]=R)}}}}return{found:!1,distance:void 0,path:void 0,steps:A}},"aStar")},bqe=la({weight:o(function(e){return 1},"weight"),directed:!1}),wqe={floydWarshall:o(function(e){for(var r=this.cy(),n=bqe(e),i=n.weight,a=n.directed,s=i,l=this.byGroup(),u=l.nodes,h=l.edges,f=u.length,d=f*f,p=o(function(Q){return u.indexOf(Q)},"indexOf"),m=o(function(Q){return u[Q]},"atIndex"),g=new Array(d),y=0;y<d;y++){var v=y%f,x=(y-v)/f;x===v?g[y]=0:g[y]=1/0}for(var b=new Array(d),w=new Array(d),C=0;C<h.length;C++){var T=h[C],E=T.source()[0],A=T.target()[0];if(E!==A){var S=p(E),_=p(A),I=S*f+_,D=s(T);if(g[I]>D&&(g[I]=D,b[I]=_,w[I]=T),!a){var k=_*f+S;!a&&g[k]>D&&(g[k]=D,b[k]=S,w[k]=T)}}}for(var L=0;L<f;L++)for(var R=0;R<f;R++)for(var O=R*f+L,M=0;M<f;M++){var B=R*f+M,F=L*f+M;g[O]+g[F]<g[B]&&(g[B]=g[O]+g[F],b[B]=b[O])}var P=o(function(Q){return(Zt(Q)?r.filter(Q):Q)[0]},"getArgEle"),z=o(function(Q){return p(P(Q))},"indexOfArgEle"),$={distance:o(function(Q,j){var ie=z(Q),ne=z(j);return g[ie*f+ne]},"distance"),path:o(function(Q,j){var ie=z(Q),ne=z(j),le=m(ie);if(ie===ne)return le.collection();if(b[ie*f+ne]==null)return r.collection();var he=r.collection(),K=ie,X;for(he.merge(le);ie!==ne;)K=ie,ie=b[ie*f+ne],X=w[K*f+ie],he.merge(X),he.merge(m(ie));return he},"path")};return $},"floydWarshall")},Tqe=la({weight:o(function(e){return 1},"weight"),directed:!1,root:null}),kqe={bellmanFord:o(function(e){var r=this,n=Tqe(e),i=n.weight,a=n.directed,s=n.root,l=i,u=this,h=this.cy(),f=this.byGroup(),d=f.edges,p=f.nodes,m=p.length,g=new Xc,y=!1,v=[];s=h.collection(s)[0],d.unmergeBy(function(ce){return ce.isLoop()});for(var x=d.length,b=o(function(ae){var Oe=g.get(ae.id());return Oe||(Oe={},g.set(ae.id(),Oe)),Oe},"getInfo"),w=o(function(ae){return(Zt(ae)?h.$(ae):ae)[0]},"getNodeFromTo"),C=o(function(ae){return b(w(ae)).dist},"distanceTo"),T=o(function(ae){for(var Oe=arguments.length>1&&arguments[1]!==void 0?arguments[1]:s,ge=w(ae),ze=[],He=ge;;){if(He==null)return r.spawn();var $e=b(He),Re=$e.edge,Ie=$e.pred;if(ze.unshift(He[0]),He.same(Oe)&&ze.length>0)break;Re!=null&&ze.unshift(Re),He=Ie}return u.spawn(ze)},"pathTo"),E=0;E<m;E++){var A=p[E],S=b(A);A.same(s)?S.dist=0:S.dist=1/0,S.pred=null,S.edge=null}for(var _=!1,I=o(function(ae,Oe,ge,ze,He,$e){var Re=ze.dist+$e;Re<He.dist&&!ge.same(ze.edge)&&(He.dist=Re,He.pred=ae,He.edge=ge,_=!0)},"checkForEdgeReplacement"),D=1;D<m;D++){_=!1;for(var k=0;k<x;k++){var L=d[k],R=L.source(),O=L.target(),M=l(L),B=b(R),F=b(O);I(R,O,L,B,F,M),a||I(O,R,L,F,B,M)}if(!_)break}if(_)for(var P=[],z=0;z<x;z++){var $=d[z],H=$.source(),Q=$.target(),j=l($),ie=b(H).dist,ne=b(Q).dist;if(ie+j<ne||!a&&ne+j<ie)if(y||(un("Graph contains a negative weight cycle for Bellman-Ford"),y=!0),e.findNegativeWeightCycles!==!1){var le=[];ie+j<ne&&le.push(H),!a&&ne+j<ie&&le.push(Q);for(var he=le.length,K=0;K<he;K++){var X=le[K],te=[X];te.push(b(X).edge);for(var J=b(X).pred;te.indexOf(J)===-1;)te.push(J),te.push(b(J).edge),J=b(J).pred;te=te.slice(te.indexOf(J));for(var se=te[0].id(),ue=0,Z=2;Z<te.length;Z+=2)te[Z].id()<se&&(se=te[Z].id(),ue=Z);te=te.slice(ue).concat(te.slice(0,ue)),te.push(te[0]);var Se=te.map(function(ce){return ce.id()}).join(",");P.indexOf(Se)===-1&&(v.push(u.spawn(te)),P.push(Se))}}else break}return{distanceTo:C,pathTo:T,hasNegativeWeightCycle:y,negativeWeightCycles:v}},"bellmanFord")},Eqe=Math.sqrt(2),Sqe=o(function(e,r,n){n.length===0&&ai("Karger-Stein must be run on a connected (sub)graph");for(var i=n[e],a=i[1],s=i[2],l=r[a],u=r[s],h=n,f=h.length-1;f>=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;g<h.length;g++){var y=h[g];y[1]===u?(h[g]=y.slice(),h[g][1]=l):y[2]===u&&(h[g]=y.slice(),h[g][2]=l)}for(var v=0;v<r.length;v++)r[v]===u&&(r[v]=l);return h},"collapse"),wP=o(function(e,r,n,i){for(;n>i;){var a=Math.floor(Math.random()*r.length);r=Sqe(a,e,r),n--}return r},"contractUntil"),Cqe={kargerStein:o(function(){var e=this,r=this.byGroup(),n=r.nodes,i=r.edges;i.unmergeBy(function(F){return F.isLoop()});var a=n.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/Eqe);if(a<2){ai("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f<s;f++){var d=i[f];h.push([f,n.indexOf(d.source()),n.indexOf(d.target())])}for(var p=1/0,m=[],g=new Array(a),y=new Array(a),v=new Array(a),x=o(function(P,z){for(var $=0;$<a;$++)z[$]=P[$]},"copyNodesMap"),b=0;b<=l;b++){for(var w=0;w<a;w++)y[w]=w;var C=wP(y,h.slice(),a,u),T=C.slice();x(y,v);var E=wP(y,C,u,2),A=wP(v,T,u,2);E.length<=A.length&&E.length<p?(p=E.length,m=E,x(y,g)):A.length<=E.length&&A.length<p&&(p=A.length,m=A,x(v,g))}for(var S=this.spawn(m.map(function(F){return i[F[0]]})),_=this.spawn(),I=this.spawn(),D=g[0],k=0;k<g.length;k++){var L=g[k],R=n[k];L===D?_.merge(R):I.merge(R)}var O=o(function(P){var z=e.spawn();return P.forEach(function($){z.merge($),$.connectedEdges().forEach(function(H){e.contains(H)&&!S.contains(H)&&z.merge(H)})}),z},"constructComponent"),M=[O(_),O(I)],B={cut:S,components:M,partition1:_,partition2:I};return B},"kargerStein")},Aqe=o(function(e){return{x:e.x,y:e.y}},"copyPosition"),MS=o(function(e,r,n){return{x:e.x*r+n.x,y:e.y*r+n.y}},"modelToRenderedPosition"),pme=o(function(e,r,n){return{x:(e.x-n.x)/r,y:(e.y-n.y)/r}},"renderedToModelPosition"),U1=o(function(e){return{x:e[0],y:e[1]}},"array2point"),_qe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=1/0,a=r;a<n;a++){var s=e[a];isFinite(s)&&(i=Math.min(s,i))}return i},"min"),Dqe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=-1/0,a=r;a<n;a++){var s=e[a];isFinite(s)&&(i=Math.max(s,i))}return i},"max"),Lqe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=0,a=0,s=r;s<n;s++){var l=e[s];isFinite(l)&&(i+=l,a++)}return i/a},"mean"),Rqe=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;i?e=e.slice(r,n):(n<e.length&&e.splice(n,e.length-n),r>0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),Nqe=o(function(e){return Math.PI*e/180},"deg2rad"),K6=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),iB=Math.log2||function(t){return Math.log(t)/Math.log(2)},mme=o(function(e){return e>0?1:e<0?-1:0},"signum"),Gp=o(function(e,r){return Math.sqrt(Op(e,r))},"dist"),Op=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return n*n+i*i},"sqdist"),Mqe=o(function(e){for(var r=e.length,n=0,i=0;i<r;i++)n+=e[i];for(var a=0;a<r;a++)e[a]=e[a]/n;return e},"inPlaceSumNormalize"),oa=o(function(e,r,n,i){return(1-i)*(1-i)*e+2*(1-i)*i*r+i*i*n},"qbezierAt"),W1=o(function(e,r,n,i){return{x:oa(e.x,r.x,n.x,i),y:oa(e.y,r.y,n.y,i)}},"qbezierPtAt"),Iqe=o(function(e,r,n,i){var a={x:r.x-e.x,y:r.y-e.y},s=Gp(e,r),l={x:a.x/s,y:a.y/s};return n=n??0,i=i??n*s,{x:e.x+l.x*i,y:e.y+l.y*i}},"lineAt"),Yb=o(function(e,r,n){return Math.max(e,Math.min(n,r))},"bound"),Hs=o(function(e){if(e==null)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(e.x1!=null&&e.y1!=null){if(e.x2!=null&&e.y2!=null&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),Oqe=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),Pqe=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),Bqe=o(function(e,r,n){return{x1:e.x1+r,x2:e.x2+r,y1:e.y1+n,y2:e.y2+n,w:e.w,h:e.h}},"shiftBoundingBox"),gme=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),Fqe=o(function(e,r,n){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),cS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),uS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],n,i,a,s;if(r.length===1)n=i=a=s=r[0];else if(r.length===2)n=a=r[0],s=i=r[1];else if(r.length===4){var l=_i(r,4);n=l[0],i=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=i,e.y1-=n,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),Fpe=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),aB=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2<r.x1||r.x2<e.x1||e.y2<r.y1||r.y2<e.y1||e.y1>r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),K1=o(function(e,r,n){return e.x1<=r&&r<=e.x2&&e.y1<=n&&n<=e.y2},"inBoundingBox"),$qe=o(function(e,r){return K1(e,r.x,r.y)},"pointInBoundingBox"),yme=o(function(e,r){return K1(e,r.x1,r.y1)&&K1(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),vme=o(function(e,r,n,i,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?Vp(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=n-f+h-l,v=i-d-l,x=n+f-h+l,b=v;if(g=Ef(e,r,n,i,y,v,x,b,!1),g.length>0)return g}if(m){var w=n+f+l,C=i-d+h-l,T=w,E=i+d-h+l;if(g=Ef(e,r,n,i,w,C,T,E,!1),g.length>0)return g}if(p){var A=n-f+h-l,S=i+d+l,_=n+f-h+l,I=S;if(g=Ef(e,r,n,i,A,S,_,I,!1),g.length>0)return g}if(m){var D=n-f-l,k=i-d+h-l,L=D,R=i+d-h+l;if(g=Ef(e,r,n,i,D,k,L,R,!1),g.length>0)return g}var O;{var M=n-f+h,B=i-d+h;if(O=Pb(e,r,n,i,M,B,h+l),O.length>0&&O[0]<=M&&O[1]<=B)return[O[0],O[1]]}{var F=n+f-h,P=i-d+h;if(O=Pb(e,r,n,i,F,P,h+l),O.length>0&&O[0]>=F&&O[1]<=P)return[O[0],O[1]]}{var z=n+f-h,$=i+d-h;if(O=Pb(e,r,n,i,z,$,h+l),O.length>0&&O[0]>=z&&O[1]>=$)return[O[0],O[1]]}{var H=n-f+h,Q=i+d-h;if(O=Pb(e,r,n,i,H,Q,h+l),O.length>0&&O[0]<=H&&O[1]>=Q)return[O[0],O[1]]}return[]},"roundRectangleIntersectLine"),zqe=o(function(e,r,n,i,a,s,l){var u=l,h=Math.min(n,a),f=Math.max(n,a),d=Math.min(i,s),p=Math.max(i,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),Gqe=o(function(e,r,n,i,a,s,l,u,h){var f={x1:Math.min(n,l,a)-h,x2:Math.max(n,l,a)+h,y1:Math.min(i,u,s)-h,y2:Math.max(i,u,s)+h};return!(e<f.x1||e>f.x2||r<f.y1||r>f.y2)},"inBezierVicinity"),Vqe=o(function(e,r,n,i){n-=i;var a=r*r-4*e*n;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),Uqe=o(function(e,r,n,i,a){var s=1e-5;e===0&&(e=s),r/=e,n/=e,i/=e;var l,u,h,f,d,p,m,g;if(u=(3*n-r*r)/9,h=-(27*i)+r*(9*n-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),Hqe=o(function(e,r,n,i,a,s,l,u){var h=1*n*n-4*n*a+2*n*l+4*a*a-4*a*l+l*l+i*i-4*i*s+2*i*u+4*s*s-4*s*u+u*u,f=1*9*n*a-3*n*n-3*n*l-6*a*a+3*a*l+9*i*s-3*i*i-3*i*u-6*s*s+3*s*u,d=1*3*n*n-6*n*a+n*l-n*e+2*a*a+2*a*e-l*e+3*i*i-6*i*s+i*u-i*r+2*s*s+2*s*r-u*r,p=1*n*a-n*n+n*e-a*e+i*s-i*i+i*r-s*r,m=[];Uqe(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])<g&&m[v]>=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,w,C,T=0;T<y.length;T++)b=Math.pow(1-y[T],2)*n+2*(1-y[T])*y[T]*a+y[T]*y[T]*l,w=Math.pow(1-y[T],2)*i+2*(1-y[T])*y[T]*s+y[T]*y[T]*u,C=Math.pow(b-e,2)+Math.pow(w-r,2),x>=0?C<x&&(x=C):x=C;return x},"sqdistToQuadraticBezier"),Wqe=o(function(e,r,n,i,a,s){var l=[e-n,r-i],u=[a-n,s-i],h=u[0]*u[0]+u[1]*u[1],f=l[0]*l[0]+l[1]*l[1],d=l[0]*u[0]+l[1]*u[1],p=d*d/h;return d<0?f:p>h?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),Us=o(function(e,r,n){for(var i,a,s,l,u,h=0,f=0;f<n.length/2;f++)if(i=n[f*2],a=n[f*2+1],f+1<n.length/2?(s=n[(f+1)*2],l=n[(f+1)*2+1]):(s=n[(f+1-n.length/2)*2],l=n[(f+1-n.length/2)*2+1]),!(i==e&&s==e))if(i>=e&&e>=s||i<=e&&e<=s)u=(e-i)/(s-i)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),Zu=o(function(e,r,n,i,a,s,l,u,h){var f=new Array(n.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g<f.length/2;g++)f[g*2]=s/2*(n[g*2]*p-n[g*2+1]*m),f[g*2+1]=l/2*(n[g*2+1]*p+n[g*2]*m),f[g*2]+=i,f[g*2+1]+=a;var y;if(h>0){var v=TS(f,-h);y=wS(v)}else y=f;return Us(e,r,y)},"pointInsidePolygon"),qqe=o(function(e,r,n,i,a,s,l,u){for(var h=new Array(n.length*2),f=0;f<u.length;f++){var d=u[f];h[f*4+0]=d.startX,h[f*4+1]=d.startY,h[f*4+2]=d.stopX,h[f*4+3]=d.stopY;var p=Math.pow(d.cx-e,2)+Math.pow(d.cy-r,2);if(p<=Math.pow(d.radius,2))return!0}return Us(e,r,h)},"pointInsideRoundPolygon"),wS=o(function(e){for(var r=new Array(e.length/2),n,i,a,s,l,u,h,f,d=0;d<e.length/4;d++){n=e[d*4],i=e[d*4+1],a=e[d*4+2],s=e[d*4+3],d<e.length/4-1?(l=e[(d+1)*4],u=e[(d+1)*4+1],h=e[(d+1)*4+2],f=e[(d+1)*4+3]):(l=e[0],u=e[1],h=e[2],f=e[3]);var p=Ef(n,i,a,s,l,u,h,f,!0);r[d*2]=p[0],r[d*2+1]=p[1]}return r},"joinLines"),TS=o(function(e,r){for(var n=new Array(e.length*2),i,a,s,l,u=0;u<e.length/2;u++){i=e[u*2],a=e[u*2+1],u<e.length/2-1?(s=e[(u+1)*2],l=e[(u+1)*2+1]):(s=e[0],l=e[1]);var h=l-a,f=-(s-i),d=Math.sqrt(h*h+f*f),p=h/d,m=f/d;n[u*4]=i+p*r,n[u*4+1]=a+m*r,n[u*4+2]=s+p*r,n[u*4+3]=l+m*r}return n},"expandPolygon"),Yqe=o(function(e,r,n,i,a,s){var l=n-e,u=i-r;l/=a,u/=s;var h=Math.sqrt(l*l+u*u),f=h-1;if(f<0)return[];var d=f/h;return[(n-e)*d+e,(i-r)*d+r]},"intersectLineEllipse"),$p=o(function(e,r,n,i,a,s,l){return e-=a,r-=s,e/=n/2+l,r/=i/2+l,e*e+r*r<=1},"checkInEllipse"),Pb=o(function(e,r,n,i,a,s,l){var u=[n-e,i-r],h=[e-a,r-s],f=u[0]*u[0]+u[1]*u[1],d=2*(h[0]*u[0]+h[1]*u[1]),p=h[0]*h[0]+h[1]*h[1]-l*l,m=d*d-4*f*p;if(m<0)return[];var g=(-d+Math.sqrt(m))/(2*f),y=(-d-Math.sqrt(m))/(2*f),v=Math.min(g,y),x=Math.max(g,y),b=[];if(v>=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var w=b[0]*u[0]+e,C=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[w,C];var T=b[1]*u[0]+e,E=b[1]*u[1]+r;return[w,C,T,E]}else return[w,C]},"intersectLineCircle"),TP=o(function(e,r,n){return r<=e&&e<=n||n<=e&&e<=r?e:e<=r&&r<=n||n<=r&&r<=e?r:n},"midOfThree"),Ef=o(function(e,r,n,i,a,s,l,u,h){var f=e-a,d=n-e,p=l-a,m=r-s,g=i-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var w=v/b,C=x/b,T=.001,E=0-T,A=1+T;return E<=w&&w<=A&&E<=C&&C<=A?[e+w*d,r+w*g]:h?[e+w*d,r+w*g]:[]}else return v===0||x===0?TP(e,n,l)===l?[l,u]:TP(e,n,a)===a?[a,s]:TP(a,l,n)===n?[n,i]:[]:[]},"finiteLinesIntersect"),Xb=o(function(e,r,n,i,a,s,l,u){var h=[],f,d=new Array(n.length),p=!0;s==null&&(p=!1);var m;if(p){for(var g=0;g<d.length/2;g++)d[g*2]=n[g*2]*s+i,d[g*2+1]=n[g*2+1]*l+a;if(u>0){var y=TS(d,-u);m=wS(y)}else m=d}else m=n;for(var v,x,b,w,C=0;C<m.length/2;C++)v=m[C*2],x=m[C*2+1],C<m.length/2-1?(b=m[(C+1)*2],w=m[(C+1)*2+1]):(b=m[0],w=m[1]),f=Ef(e,r,i,a,v,x,b,w),f.length!==0&&h.push(f[0],f[1]);return h},"polygonIntersectLine"),Xqe=o(function(e,r,n,i,a,s,l,u,h){var f=[],d,p=new Array(n.length*2);h.forEach(function(b,w){w===0?(p[p.length-2]=b.startX,p[p.length-1]=b.startY):(p[w*4-2]=b.startX,p[w*4-1]=b.startY),p[w*4]=b.stopX,p[w*4+1]=b.stopY,d=Pb(e,r,i,a,b.cx,b.cy,b.radius),d.length!==0&&f.push(d[0],d[1])});for(var m=0;m<p.length/4;m++)d=Ef(e,r,i,a,p[m*4],p[m*4+1],p[m*4+2],p[m*4+3],!1),d.length!==0&&f.push(d[0],d[1]);if(f.length>2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;v<f.length/2;v++){var x=Math.pow(f[v*2]-e,2)+Math.pow(f[v*2+1]-r,2);x<=y&&(g[0]=f[v*2],g[1]=f[v*2+1],y=x)}return g}return f},"roundPolygonIntersectLine"),Q6=o(function(e,r,n){var i=[e[0]-r[0],e[1]-r[1]],a=Math.sqrt(i[0]*i[0]+i[1]*i[1]),s=(a-n)/a;return s<0&&(s=1e-5),[r[0]+s*i[0],r[1]+s*i[1]]},"shortenIntersection"),gs=o(function(e,r){var n=PP(e,r);return n=xme(n),n},"generateUnitNgonPointsFitToSquare"),xme=o(function(e){for(var r,n,i=e.length/2,a=1/0,s=1/0,l=-1/0,u=-1/0,h=0;h<i;h++)r=e[2*h],n=e[2*h+1],a=Math.min(a,r),l=Math.max(l,r),s=Math.min(s,n),u=Math.max(u,n);for(var f=2/(l-a),d=2/(u-s),p=0;p<i;p++)r=e[2*p]=e[2*p]*f,n=e[2*p+1]=e[2*p+1]*d,a=Math.min(a,r),l=Math.max(l,r),s=Math.min(s,n),u=Math.max(u,n);if(s<-1)for(var m=0;m<i;m++)n=e[2*m+1]=e[2*m+1]+(-1-s);return e},"fitPolygonToSquare"),PP=o(function(e,r){var n=1/e*2*Math.PI,i=e%2===0?Math.PI/2+n/2:Math.PI/2;i+=r;for(var a=new Array(e*2),s,l=0;l<e;l++)s=l*n+i,a[2*l]=Math.cos(s),a[2*l+1]=Math.sin(-s);return a},"generateUnitNgonPoints"),Vp=o(function(e,r){return Math.min(e/4,r/4,8)},"getRoundRectangleRadius"),bme=o(function(e,r){return Math.min(e/10,r/10,8)},"getRoundPolygonRadius"),sB=o(function(){return 8},"getCutRectangleCornerLength"),jqe=o(function(e,r,n){return[e-2*r+n,2*(r-e),e]},"bezierPtsToQuadCoeff"),BP=o(function(e,r){return{heightOffset:Math.min(15,.05*r),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},"getBarrelCurveConstants"),Kqe=la({dampingFactor:.8,precision:1e-6,iterations:200,weight:o(function(e){return 1},"weight")}),Qqe={pageRank:o(function(e){for(var r=Kqe(e),n=r.dampingFactor,i=r.precision,a=r.iterations,s=r.weight,l=this._private.cy,u=this.byGroup(),h=u.nodes,f=u.edges,d=h.length,p=d*d,m=f.length,g=new Array(p),y=new Array(d),v=(1-n)/d,x=0;x<d;x++){for(var b=0;b<d;b++){var w=x*d+b;g[w]=0}y[x]=0}for(var C=0;C<m;C++){var T=f[C],E=T.data("source"),A=T.data("target");if(E!==A){var S=h.indexOfId(E),_=h.indexOfId(A),I=s(T),D=_*d+S;g[D]+=I,y[S]+=I}}for(var k=1/d+v,L=0;L<d;L++)if(y[L]===0)for(var R=0;R<d;R++){var O=R*d+L;g[O]=k}else for(var M=0;M<d;M++){var B=M*d+L;g[B]=g[B]/y[L]+v}for(var F=new Array(d),P=new Array(d),z,$=0;$<d;$++)F[$]=1;for(var H=0;H<a;H++){for(var Q=0;Q<d;Q++)P[Q]=0;for(var j=0;j<d;j++)for(var ie=0;ie<d;ie++){var ne=j*d+ie;P[j]+=g[ne]*F[ie]}Mqe(P),z=F,F=P,P=z;for(var le=0,he=0;he<d;he++){var K=z[he]-F[he];le+=K*K}if(le<i)break}var X={rank:o(function(J){return J=l.collection(J)[0],F[h.indexOf(J)]},"rank")};return X},"pageRank")},$pe=la({root:null,weight:o(function(e){return 1},"weight"),directed:!1,alpha:0}),q1={degreeCentralityNormalized:o(function(e){e=$pe(e);var r=this.cy(),n=this.nodes(),i=n.length;if(e.directed){for(var f={},d={},p=0,m=0,g=0;g<i;g++){var y=n[g],v=y.id();e.root=y;var x=this.degreeCentrality(e);p<x.indegree&&(p=x.indegree),m<x.outdegree&&(m=x.outdegree),f[v]=x.indegree,d[v]=x.outdegree}return{indegree:o(function(w){return p==0?0:(Zt(w)&&(w=r.filter(w)),f[w.id()]/p)},"indegree"),outdegree:o(function(w){return m===0?0:(Zt(w)&&(w=r.filter(w)),d[w.id()]/m)},"outdegree")}}else{for(var a={},s=0,l=0;l<i;l++){var u=n[l];e.root=u;var h=this.degreeCentrality(e);s<h.degree&&(s=h.degree),a[u.id()]=h.degree}return{degree:o(function(w){return s===0?0:(Zt(w)&&(w=r.filter(w)),a[w.id()]/s)},"degree")}}},"degreeCentralityNormalized"),degreeCentrality:o(function(e){e=$pe(e);var r=this.cy(),n=this,i=e,a=i.root,s=i.weight,l=i.directed,u=i.alpha;if(a=r.collection(a)[0],l){for(var m=a.connectedEdges(),g=m.filter(function(E){return E.target().same(a)&&n.has(E)}),y=m.filter(function(E){return E.source().same(a)&&n.has(E)}),v=g.length,x=y.length,b=0,w=0,C=0;C<g.length;C++)b+=s(g[C]);for(var T=0;T<y.length;T++)w+=s(y[T]);return{indegree:Math.pow(v,1-u)*Math.pow(b,u),outdegree:Math.pow(x,1-u)*Math.pow(w,u)}}else{for(var h=a.connectedEdges().intersection(n),f=h.length,d=0,p=0;p<h.length;p++)d+=s(h[p]);return{degree:Math.pow(f,1-u)*Math.pow(d,u)}}},"degreeCentrality")};q1.dc=q1.degreeCentrality;q1.dcn=q1.degreeCentralityNormalised=q1.degreeCentralityNormalized;zpe=la({harmonic:!0,weight:o(function(){return 1},"weight"),directed:!1,root:null}),Y1={closenessCentralityNormalized:o(function(e){for(var r=zpe(e),n=r.harmonic,i=r.weight,a=r.directed,s=this.cy(),l={},u=0,h=this.nodes(),f=this.floydWarshall({weight:i,directed:a}),d=0;d<h.length;d++){for(var p=0,m=h[d],g=0;g<h.length;g++)if(d!==g){var y=f.distance(m,h[g]);n?p+=1/y:p+=y}n||(p=1/p),u<p&&(u=p),l[m.id()]=p}return{closeness:o(function(x){return u==0?0:(Zt(x)?x=s.filter(x)[0].id():x=x.id(),l[x]/u)},"closeness")}},"closenessCentralityNormalized"),closenessCentrality:o(function(e){var r=zpe(e),n=r.root,i=r.weight,a=r.directed,s=r.harmonic;n=this.filter(n)[0];for(var l=this.dijkstra({root:n,weight:i,directed:a}),u=0,h=this.nodes(),f=0;f<h.length;f++){var d=h[f];if(!d.same(n)){var p=l.distanceTo(d);s?u+=1/p:u+=p}}return s?u:1/u},"closenessCentrality")};Y1.cc=Y1.closenessCentrality;Y1.ccn=Y1.closenessCentralityNormalised=Y1.closenessCentralityNormalized;Zqe=la({weight:null,directed:!1}),FP={betweennessCentrality:o(function(e){for(var r=Zqe(e),n=r.directed,i=r.weight,a=i!=null,s=this.cy(),l=this.nodes(),u={},h={},f=0,d={set:o(function(w,C){h[w]=C,C>f&&(f=C)},"set"),get:o(function(w){return h[w]},"get")},p=0;p<l.length;p++){var m=l[p],g=m.id();n?u[g]=m.outgoers().nodes():u[g]=m.openNeighborhood().nodes(),d.set(g,0)}for(var y=o(function(w){for(var C=l[w].id(),T=[],E={},A={},S={},_=new i4(function(ie,ne){return S[ie]-S[ne]}),I=0;I<l.length;I++){var D=l[I].id();E[D]=[],A[D]=0,S[D]=1/0}for(A[C]=1,S[C]=0,_.push(C);!_.empty();){var k=_.pop();if(T.push(k),a)for(var L=0;L<u[k].length;L++){var R=u[k][L],O=s.getElementById(k),M=void 0;O.edgesTo(R).length>0?M=O.edgesTo(R)[0]:M=R.edgesTo(O)[0];var B=i(M);R=R.id(),S[R]>S[k]+B&&(S[R]=S[k]+B,_.nodes.indexOf(R)<0?_.push(R):_.updateItem(R),A[R]=0,E[R]=[]),S[R]==S[k]+B&&(A[R]=A[R]+A[k],E[R].push(k))}else for(var F=0;F<u[k].length;F++){var P=u[k][F].id();S[P]==1/0&&(_.push(P),S[P]=S[k]+1),S[P]==S[k]+1&&(A[P]=A[P]+A[k],E[P].push(k))}}for(var z={},$=0;$<l.length;$++)z[l[$].id()]=0;for(;T.length>0;){for(var H=T.pop(),Q=0;Q<E[H].length;Q++){var j=E[H][Q];z[j]=z[j]+A[j]/A[H]*(1+z[H])}H!=l[w].id()&&d.set(H,d.get(H)+z[H])}},"_loop"),v=0;v<l.length;v++)y(v);var x={betweenness:o(function(w){var C=s.collection(w).id();return d.get(C)},"betweenness"),betweennessNormalized:o(function(w){if(f==0)return 0;var C=s.collection(w).id();return d.get(C)/f},"betweennessNormalized")};return x.betweennessNormalised=x.betweennessNormalized,x},"betweennessCentrality")};FP.bc=FP.betweennessCentrality;Jqe=la({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(t){return 1}]}),eYe=o(function(e){return Jqe(e)},"setOptions"),tYe=o(function(e,r){for(var n=0,i=0;i<r.length;i++)n+=r[i](e);return n},"getSimilarity"),rYe=o(function(e,r,n){for(var i=0;i<r;i++)e[i*r+i]=n},"addLoops"),wme=o(function(e,r){for(var n,i=0;i<r;i++){n=0;for(var a=0;a<r;a++)n+=e[a*r+i];for(var s=0;s<r;s++)e[s*r+i]=e[s*r+i]/n}},"normalize"),nYe=o(function(e,r,n){for(var i=new Array(n*n),a=0;a<n;a++){for(var s=0;s<n;s++)i[a*n+s]=0;for(var l=0;l<n;l++)for(var u=0;u<n;u++)i[a*n+u]+=e[a*n+l]*r[l*n+u]}return i},"mmult"),iYe=o(function(e,r,n){for(var i=e.slice(0),a=1;a<n;a++)e=nYe(e,i,r);return e},"expand"),aYe=o(function(e,r,n){for(var i=new Array(r*r),a=0;a<r*r;a++)i[a]=Math.pow(e[a],n);return wme(i,r),i},"inflate"),sYe=o(function(e,r,n,i){for(var a=0;a<n;a++){var s=Math.round(e[a]*Math.pow(10,i))/Math.pow(10,i),l=Math.round(r[a]*Math.pow(10,i))/Math.pow(10,i);if(s!==l)return!1}return!0},"hasConverged"),oYe=o(function(e,r,n,i){for(var a=[],s=0;s<r;s++){for(var l=[],u=0;u<r;u++)Math.round(e[s*r+u]*1e3)/1e3>0&&l.push(n[u]);l.length!==0&&a.push(i.collection(l))}return a},"assign"),lYe=o(function(e,r){for(var n=0;n<e.length;n++)if(!r[n]||e[n].id()!==r[n].id())return!1;return!0},"isDuplicate"),cYe=o(function(e){for(var r=0;r<e.length;r++)for(var n=0;n<e.length;n++)r!=n&&lYe(e[r],e[n])&&e.splice(n,1);return e},"removeDuplicates"),Gpe=o(function(e){for(var r=this.nodes(),n=this.edges(),i=this.cy(),a=eYe(e),s={},l=0;l<r.length;l++)s[r[l].id()]=l;for(var u=r.length,h=u*u,f=new Array(h),d,p=0;p<h;p++)f[p]=0;for(var m=0;m<n.length;m++){var g=n[m],y=s[g.source().id()],v=s[g.target().id()],x=tYe(g,a.attributes);f[y*u+v]+=x,f[v*u+y]+=x}rYe(f,u,a.multFactor),wme(f,u);for(var b=!0,w=0;b&&w<a.maxIterations;)b=!1,d=iYe(f,u,a.expandFactor),f=aYe(d,u,a.inflateFactor),sYe(f,d,h,4)||(b=!0),w++;var C=oYe(f,u,r,i);return C=cYe(C),C},"markovClustering"),uYe={markovClustering:Gpe,mcl:Gpe},hYe=o(function(e){return e},"identity"),Tme=o(function(e,r){return Math.abs(r-e)},"absDiff"),Vpe=o(function(e,r,n){return e+Tme(r,n)},"addAbsDiff"),Upe=o(function(e,r,n){return e+Math.pow(n-r,2)},"addSquaredDiff"),fYe=o(function(e){return Math.sqrt(e)},"sqrt"),dYe=o(function(e,r,n){return Math.max(e,Tme(r,n))},"maxAbsDiff"),_b=o(function(e,r,n,i,a){for(var s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:hYe,l=i,u,h,f=0;f<e;f++)u=r(f),h=n(f),l=a(l,u,h);return s(l)},"getDistance"),Q1={euclidean:o(function(e,r,n){return e>=2?_b(e,r,n,0,Upe,fYe):_b(e,r,n,0,Vpe)},"euclidean"),squaredEuclidean:o(function(e,r,n){return _b(e,r,n,0,Upe)},"squaredEuclidean"),manhattan:o(function(e,r,n){return _b(e,r,n,0,Vpe)},"manhattan"),max:o(function(e,r,n){return _b(e,r,n,-1/0,dYe)},"max")};Q1["squared-euclidean"]=Q1.squaredEuclidean;Q1.squaredeuclidean=Q1.squaredEuclidean;o(IS,"clusteringDistance");pYe=la({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),oB=o(function(e){return pYe(e)},"setOptions"),kS=o(function(e,r,n,i,a){var s=a!=="kMedoids",l=s?function(d){return n[d]}:function(d){return i[d](n)},u=o(function(p){return i[p](r)},"getQ"),h=n,f=r;return IS(e,i.length,l,u,h,f)},"getDist"),kP=o(function(e,r,n){for(var i=n.length,a=new Array(i),s=new Array(i),l=new Array(r),u=null,h=0;h<i;h++)a[h]=e.min(n[h]).value,s[h]=e.max(n[h]).value;for(var f=0;f<r;f++){u=[];for(var d=0;d<i;d++)u[d]=Math.random()*(s[d]-a[d])+a[d];l[f]=u}return l},"randomCentroids"),kme=o(function(e,r,n,i,a){for(var s=1/0,l=0,u=0;u<r.length;u++){var h=kS(n,e,r[u],i,a);h<s&&(s=h,l=u)}return l},"classify"),Eme=o(function(e,r,n){for(var i=[],a=null,s=0;s<r.length;s++)a=r[s],n[a.id()]===e&&i.push(a);return i},"buildCluster"),mYe=o(function(e,r,n){return Math.abs(r-e)<=n},"haveValuesConverged"),gYe=o(function(e,r,n){for(var i=0;i<e.length;i++)for(var a=0;a<e[i].length;a++){var s=Math.abs(e[i][a]-r[i][a]);if(s>n)return!1}return!0},"haveMatricesConverged"),yYe=o(function(e,r,n){for(var i=0;i<n;i++)if(e===r[i])return!0;return!1},"seenBefore"),Hpe=o(function(e,r){var n=new Array(r);if(e.length<50)for(var i=0;i<r;i++){for(var a=e[Math.floor(Math.random()*e.length)];yYe(a,n,i);)a=e[Math.floor(Math.random()*e.length)];n[i]=a}else for(var s=0;s<r;s++)n[s]=e[Math.floor(Math.random()*e.length)];return n},"randomMedoids"),Wpe=o(function(e,r,n){for(var i=0,a=0;a<r.length;a++)i+=kS("manhattan",r[a],e,n,"kMedoids");return i},"findCost"),vYe=o(function(e){var r=this.cy(),n=this.nodes(),i=null,a=oB(e),s=new Array(a.k),l={},u;a.testMode?typeof a.testCentroids=="number"?(a.testCentroids,u=kP(n,a.k,a.attributes)):Wi(a.testCentroids)==="object"?u=a.testCentroids:u=kP(n,a.k,a.attributes):u=kP(n,a.k,a.attributes);for(var h=!0,f=0;h&&f<a.maxIterations;){for(var d=0;d<n.length;d++)i=n[d],l[i.id()]=kme(i,u,a.distance,a.attributes,"kMeans");h=!1;for(var p=0;p<a.k;p++){var m=Eme(p,n,l);if(m.length!==0){for(var g=a.attributes.length,y=u[p],v=new Array(g),x=new Array(g),b=0;b<g;b++){x[b]=0;for(var w=0;w<m.length;w++)i=m[w],x[b]+=a.attributes[b](i);v[b]=x[b]/m.length,mYe(v[b],y[b],a.sensitivityThreshold)||(h=!0)}u[p]=v,s[p]=r.collection(m)}}f++}return s},"kMeans"),xYe=o(function(e){var r=this.cy(),n=this.nodes(),i=null,a=oB(e),s=new Array(a.k),l,u={},h,f=new Array(a.k);a.testMode?typeof a.testCentroids=="number"||(Wi(a.testCentroids)==="object"?l=a.testCentroids:l=Hpe(n,a.k)):l=Hpe(n,a.k);for(var d=!0,p=0;d&&p<a.maxIterations;){for(var m=0;m<n.length;m++)i=n[m],u[i.id()]=kme(i,l,a.distance,a.attributes,"kMedoids");d=!1;for(var g=0;g<l.length;g++){var y=Eme(g,n,u);if(y.length!==0){f[g]=Wpe(l[g],y,a.attributes);for(var v=0;v<y.length;v++)h=Wpe(y[v],y,a.attributes),h<f[g]&&(f[g]=h,l[g]=y[v],d=!0);s[g]=r.collection(y)}}p++}return s},"kMedoids"),bYe=o(function(e,r,n,i,a){for(var s,l,u=0;u<r.length;u++)for(var h=0;h<e.length;h++)i[u][h]=Math.pow(n[u][h],a.m);for(var f=0;f<e.length;f++)for(var d=0;d<a.attributes.length;d++){s=0,l=0;for(var p=0;p<r.length;p++)s+=i[p][f]*a.attributes[d](r[p]),l+=i[p][f];e[f][d]=s/l}},"updateCentroids"),wYe=o(function(e,r,n,i,a){for(var s=0;s<e.length;s++)r[s]=e[s].slice();for(var l,u,h,f=2/(a.m-1),d=0;d<n.length;d++)for(var p=0;p<i.length;p++){l=0;for(var m=0;m<n.length;m++)u=kS(a.distance,i[p],n[d],a.attributes,"cmeans"),h=kS(a.distance,i[p],n[m],a.attributes,"cmeans"),l+=Math.pow(u/h,f);e[p][d]=1/l}},"updateMembership"),TYe=o(function(e,r,n,i){for(var a=new Array(n.k),s=0;s<a.length;s++)a[s]=[];for(var l,u,h=0;h<r.length;h++){l=-1/0,u=-1;for(var f=0;f<r[0].length;f++)r[h][f]>l&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d<a.length;d++)a[d]=i.collection(a[d]);return a},"assign"),qpe=o(function(e){var r=this.cy(),n=this.nodes(),i=oB(e),a,s,l,u,h;u=new Array(n.length);for(var f=0;f<n.length;f++)u[f]=new Array(i.k);l=new Array(n.length);for(var d=0;d<n.length;d++)l[d]=new Array(i.k);for(var p=0;p<n.length;p++){for(var m=0,g=0;g<i.k;g++)l[p][g]=Math.random(),m+=l[p][g];for(var y=0;y<i.k;y++)l[p][y]=l[p][y]/m}s=new Array(i.k);for(var v=0;v<i.k;v++)s[v]=new Array(i.attributes.length);h=new Array(n.length);for(var x=0;x<n.length;x++)h[x]=new Array(i.k);for(var b=!0,w=0;b&&w<i.maxIterations;)b=!1,bYe(s,n,l,h,i),wYe(l,u,s,n,i),gYe(l,u,i.sensitivityThreshold)||(b=!0),w++;return a=TYe(n,l,i,r),{clusters:a,degreeOfMembership:l}},"fuzzyCMeans"),kYe={kMeans:vYe,kMedoids:xYe,fuzzyCMeans:qpe,fcm:qpe},EYe=la({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),SYe={single:"min",complete:"max"},CYe=o(function(e){var r=EYe(e),n=SYe[r.linkage];return n!=null&&(r.linkage=n),r},"setOptions"),Ype=o(function(e,r,n,i,a){for(var s=0,l=1/0,u,h=a.attributes,f=o(function(_,I){return IS(a.distance,h.length,function(D){return h[D](_)},function(D){return h[D](I)},_,I)},"getDist"),d=0;d<e.length;d++){var p=e[d].key,m=n[p][i[p]];m<l&&(s=p,l=m)}if(a.mode==="threshold"&&l>=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[i[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;x<e.length;x++){var b=e[x];g.key===b.key?u=1/0:a.linkage==="min"?(u=n[g.key][b.key],n[g.key][b.key]>n[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="max"?(u=n[g.key][b.key],n[g.key][b.key]<n[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="mean"?u=(n[g.key][b.key]*g.size+n[y.key][b.key]*y.size)/(g.size+y.size):a.mode==="dendrogram"?u=f(b.value,g.value):u=f(b.value[0],g.value[0]),n[g.key][b.key]=n[b.key][g.key]=u}for(var w=0;w<e.length;w++){var C=e[w].key;if(i[C]===g.key||i[C]===y.key){for(var T=C,E=0;E<e.length;E++){var A=e[E].key;n[C][A]<n[C][T]&&(T=A)}i[C]=T}e[w].index=w}return g.key=y.key=g.index=y.index=null,!0},"mergeClosest"),Z6=o(function t(e,r,n){e&&(e.value?r.push(e.value):(e.left&&t(e.left,r),e.right&&t(e.right,r)))},"getAllChildren"),AYe=o(function t(e,r){if(!e)return"";if(e.left&&e.right){var n=t(e.left,r),i=t(e.right,r),a=r.add({group:"nodes",data:{id:n+","+i}});return r.add({group:"edges",data:{source:n,target:a.id()}}),r.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}else if(e.value)return e.value.id()},"buildDendrogram"),_Ye=o(function t(e,r,n){if(!e)return[];var i=[],a=[],s=[];return r===0?(e.left&&Z6(e.left,i),e.right&&Z6(e.right,a),s=i.concat(a),[n.collection(s)]):r===1?e.value?[n.collection(e.value)]:(e.left&&Z6(e.left,i),e.right&&Z6(e.right,a),[n.collection(i),n.collection(a)]):e.value?[n.collection(e.value)]:(e.left&&(i=t(e.left,r-1,n)),e.right&&(a=t(e.right,r-1,n)),i.concat(a))},"buildClustersFromTree"),Xpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=CYe(e),a=i.attributes,s=o(function(w,C){return IS(i.distance,a.length,function(T){return a[T](w)},function(T){return a[T](C)},w,C)},"getDist"),l=[],u=[],h=[],f=[],d=0;d<n.length;d++){var p={value:i.mode==="dendrogram"?n[d]:[n[d]],key:d,index:d};l[d]=p,f[d]=p,u[d]=[],h[d]=0}for(var m=0;m<l.length;m++)for(var g=0;g<=m;g++){var y=void 0;i.mode==="dendrogram"?y=m===g?1/0:s(l[m].value,l[g].value):y=m===g?1/0:s(l[m].value[0],l[g].value[0]),u[m][g]=y,u[g][m]=y,y<u[m][h[m]]&&(h[m]=g)}for(var v=Ype(l,f,u,h,i);v;)v=Ype(l,f,u,h,i);var x;return i.mode==="dendrogram"?(x=_Ye(l[0],i.dendrogramDepth,r),i.addDendrogram&&AYe(l[0],r)):(x=new Array(l.length),l.forEach(function(b,w){b.key=b.index=null,x[w]=r.collection(b.value)})),x},"hierarchicalClustering"),DYe={hierarchicalClustering:Xpe,hca:Xpe},LYe=la({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),RYe=o(function(e){var r=e.damping,n=e.preference;.5<=r&&r<1||ai("Damping must range on [0.5, 1). Got: ".concat(r));var i=["median","mean","min","max"];return i.some(function(a){return a===n})||Ct(n)||ai("Preference must be one of [".concat(i.map(function(a){return"'".concat(a,"'")}).join(", "),"] or a number. Got: ").concat(n)),LYe(e)},"setOptions"),NYe=o(function(e,r,n,i){var a=o(function(l,u){return i[u](l)},"attr");return-IS(e,i.length,function(s){return a(r,s)},function(s){return a(n,s)},r,n)},"getSimilarity"),MYe=o(function(e,r){var n=null;return r==="median"?n=Rqe(e):r==="mean"?n=Lqe(e):r==="min"?n=_qe(e):r==="max"?n=Dqe(e):n=r,n},"getPreference"),IYe=o(function(e,r,n){for(var i=[],a=0;a<e;a++)r[a*e+a]+n[a*e+a]>0&&i.push(a);return i},"findExemplars"),jpe=o(function(e,r,n){for(var i=[],a=0;a<e;a++){for(var s=-1,l=-1/0,u=0;u<n.length;u++){var h=n[u];r[a*e+h]>l&&(s=h,l=r[a*e+h])}s>0&&i.push(s)}for(var f=0;f<n.length;f++)i[n[f]]=n[f];return i},"assignClusters"),OYe=o(function(e,r,n){for(var i=jpe(e,r,n),a=0;a<n.length;a++){for(var s=[],l=0;l<i.length;l++)i[l]===n[a]&&s.push(l);for(var u=-1,h=-1/0,f=0;f<s.length;f++){for(var d=0,p=0;p<s.length;p++)d+=r[s[p]*e+s[f]];d>h&&(u=f,h=d)}n[a]=s[u]}return i=jpe(e,r,n),i},"assign"),Kpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=RYe(e),a={},s=0;s<n.length;s++)a[n[s].id()]=s;var l,u,h,f,d,p;l=n.length,u=l*l,h=new Array(u);for(var m=0;m<u;m++)h[m]=-1/0;for(var g=0;g<l;g++)for(var y=0;y<l;y++)g!==y&&(h[g*l+y]=NYe(i.distance,n[g],n[y],i.attributes));f=MYe(h,i.preference);for(var v=0;v<l;v++)h[v*l+v]=f;d=new Array(u);for(var x=0;x<u;x++)d[x]=0;p=new Array(u);for(var b=0;b<u;b++)p[b]=0;for(var w=new Array(l),C=new Array(l),T=new Array(l),E=0;E<l;E++)w[E]=0,C[E]=0,T[E]=0;for(var A=new Array(l*i.minIterations),S=0;S<A.length;S++)A[S]=0;var _;for(_=0;_<i.maxIterations;_++){for(var I=0;I<l;I++){for(var D=-1/0,k=-1/0,L=-1,R=0,O=0;O<l;O++)w[O]=d[I*l+O],R=p[I*l+O]+h[I*l+O],R>=D?(k=D,D=R,L=O):R>k&&(k=R);for(var M=0;M<l;M++)d[I*l+M]=(1-i.damping)*(h[I*l+M]-D)+i.damping*w[M];d[I*l+L]=(1-i.damping)*(h[I*l+L]-k)+i.damping*w[L]}for(var B=0;B<l;B++){for(var F=0,P=0;P<l;P++)w[P]=p[P*l+B],C[P]=Math.max(0,d[P*l+B]),F+=C[P];F-=C[B],C[B]=d[B*l+B],F+=C[B];for(var z=0;z<l;z++)p[z*l+B]=(1-i.damping)*Math.min(0,F-C[z])+i.damping*w[z];p[B*l+B]=(1-i.damping)*(F-C[B])+i.damping*w[B]}for(var $=0,H=0;H<l;H++){var Q=p[H*l+H]+d[H*l+H]>0?1:0;A[_%i.minIterations*l+H]=Q,$+=Q}if($>0&&(_>=i.minIterations-1||_==i.maxIterations-1)){for(var j=0,ie=0;ie<l;ie++){T[ie]=0;for(var ne=0;ne<i.minIterations;ne++)T[ie]+=A[ne*l+ie];(T[ie]===0||T[ie]===i.minIterations)&&j++}if(j===l)break}}for(var le=IYe(l,d,p),he=OYe(l,h,le),K={},X=0;X<le.length;X++)K[le[X]]=[];for(var te=0;te<n.length;te++){var J=a[n[te].id()],se=he[J];se!=null&&K[se].push(n[te])}for(var ue=new Array(le.length),Z=0;Z<le.length;Z++)ue[Z]=r.collection(K[le[Z]]);return ue},"affinityPropagation"),PYe={affinityPropagation:Kpe,ap:Kpe},BYe=la({root:void 0,directed:!1}),FYe={hierholzer:o(function(e){if(!Ur(e)){var r=arguments;e={root:r[0],directed:r[1]}}var n=BYe(e),i=n.root,a=n.directed,s=this,l=!1,u,h,f;i&&(f=Zt(i)?this.filter(i)[0].id():i[0].id());var d={},p={};a?s.forEach(function(b){var w=b.id();if(b.isNode()){var C=b.indegree(!0),T=b.outdegree(!0),E=C-T,A=T-C;E==1?u?l=!0:u=w:A==1?h?l=!0:h=w:(A>1||E>1)&&(l=!0),d[w]=[],b.outgoers().forEach(function(S){S.isEdge()&&d[w].push(S.id())})}else p[w]=[void 0,b.target().id()]}):s.forEach(function(b){var w=b.id();if(b.isNode()){var C=b.degree(!0);C%2&&(u?h?l=!0:h=w:u=w),d[w]=[],b.connectedEdges().forEach(function(T){return d[w].push(T.id())})}else p[w]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(w){for(var C=w,T=[w],E,A,S;d[C].length;)E=d[C].shift(),A=p[E][0],S=p[E][1],C!=S?(d[S]=d[S].filter(function(_){return _!=E}),C=S):!a&&C!=A&&(d[A]=d[A].filter(function(_){return _!=E}),C=A),T.unshift(E),T.unshift(C);return T},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},J6=o(function(){var e=this,r={},n=0,i=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(w){var C=w.id(),T=w.connectedEdges().intersection(e);v.merge(w),r[C].cutVertex?v.merge(T.filter(function(E){return E.isLoop()})):v.merge(T)})}),a.push(v)},"buildComponent"),h=o(function d(p,m,g){p===g&&(i+=1),r[m]={id:n,low:n++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,w;y.forEach(function(C){v=C.source().id(),x=C.target().id(),b=v===m?x:v,b!==g&&(w=C.id(),l[w]||(l[w]=!0,s.push({x:m,y:b,edge:C})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(d(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(i=0,h(p,p),r[p].cutVertex=i>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),$Ye={hopcroftTarjanBiconnected:J6,htbc:J6,htb:J6,hopcroftTarjanBiconnectedComponents:J6},eS=o(function(){var e=this,r={},n=0,i=[],a=[],s=e.spawn(e),l=o(function u(h){a.push(h),r[h]={index:n,low:n++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||u(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);i.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:i}},"tarjanStronglyConnected"),zYe={tarjanStronglyConnected:eS,tsc:eS,tscc:eS,tarjanStronglyConnectedComponents:eS},Sme={};[qb,gqe,yqe,xqe,wqe,kqe,Cqe,Qqe,q1,Y1,FP,uYe,kYe,DYe,PYe,FYe,$Ye,zYe].forEach(function(t){rr(Sme,t)});Cme=0,Ame=1,_me=2,Ju=o(function t(e){if(!(this instanceof t))return new t(e);this.id="Thenable/1.0.7",this.state=Cme,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");Ju.prototype={fulfill:o(function(e){return Qpe(this,Ame,"fulfillValue",e)},"fulfill"),reject:o(function(e){return Qpe(this,_me,"rejectReason",e)},"reject"),then:o(function(e,r){var n=this,i=new Ju;return n.onFulfilled.push(Jpe(e,i,"fulfill")),n.onRejected.push(Jpe(r,i,"reject")),Dme(n),i.proxy},"then")};Qpe=o(function(e,r,n,i){return e.state===Cme&&(e.state=r,e[n]=i,Dme(e)),e},"deliver"),Dme=o(function(e){e.state===Ame?Zpe(e,"onFulfilled",e.fulfillValue):e.state===_me&&Zpe(e,"onRejected",e.rejectReason)},"execute"),Zpe=o(function(e,r,n){if(e[r].length!==0){var i=e[r];e[r]=[];var a=o(function(){for(var l=0;l<i.length;l++)i[l](n)},"func");typeof setImmediate=="function"?setImmediate(a):setTimeout(a,0)}},"execute_handlers"),Jpe=o(function(e,r,n){return function(i){if(typeof e!="function")r[n].call(r,i);else{var a;try{a=e(i)}catch(s){r.reject(s);return}GYe(r,a)}}},"resolver"),GYe=o(function t(e,r){if(e===r||e.proxy===r){e.reject(new TypeError("cannot resolve promise with itself"));return}var n;if(Wi(r)==="object"&&r!==null||typeof r=="function")try{n=r.then}catch(a){e.reject(a);return}if(typeof n=="function"){var i=!1;try{n.call(r,function(a){i||(i=!0,a===r?e.reject(new TypeError("circular thenable chain")):t(e,a))},function(a){i||(i=!0,e.reject(a))})}catch(a){i||e.reject(a)}return}e.fulfill(r)},"resolve");Ju.all=function(t){return new Ju(function(e,r){for(var n=new Array(t.length),i=0,a=o(function(u,h){n[u]=h,i++,i===t.length&&e(n)},"fulfill"),s=0;s<t.length;s++)(function(l){var u=t[l],h=u!=null&&u.then!=null;if(h)u.then(function(d){a(l,d)},function(d){r(d)});else{var f=u;a(l,f)}})(s)})};Ju.resolve=function(t){return new Ju(function(e,r){e(t)})};Ju.reject=function(t){return new Ju(function(e,r){r(t)})};ey=typeof Promise<"u"?Promise:Ju,$P=o(function(e,r,n){var i=JP(e),a=!i,s=this._private=rr({duration:1e3},r,n);if(s.target=e,s.style=s.style||s.css,s.started=!1,s.playing=!1,s.hooked=!1,s.applying=!1,s.progress=0,s.completes=[],s.frames=[],s.complete&&si(s.complete)&&s.completes.push(s.complete),a){var l=e.position();s.startPosition=s.startPosition||{x:l.x,y:l.y},s.startStyle=s.startStyle||e.cy().style().getAnimationStartStyle(e,s.style)}if(i){var u=e.pan();s.startPan={x:u.x,y:u.y},s.startZoom=e.zoom()}this.length=1,this[0]=this},"Animation"),Up=$P.prototype;rr(Up,{instanceString:o(function(){return"animation"},"instanceString"),hook:o(function(){var e=this._private;if(!e.hooked){var r,n=e.target._private.animation;e.queue?r=n.queue:r=n.current,r.push(this),go(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},"hook"),play:o(function(){var e=this._private;return e.progress===1&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},"play"),playing:o(function(){return this._private.playing},"playing"),apply:o(function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},"apply"),applying:o(function(){return this._private.applying},"applying"),pause:o(function(){var e=this._private;return e.playing=!1,e.started=!1,this},"pause"),stop:o(function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},"stop"),rewind:o(function(){return this.progress(0)},"rewind"),fastforward:o(function(){return this.progress(1)},"fastforward"),time:o(function(e){var r=this._private;return e===void 0?r.progress*r.duration:this.progress(e/r.duration)},"time"),progress:o(function(e){var r=this._private,n=r.playing;return e===void 0?r.progress:(n&&this.pause(),r.progress=e,r.started=!1,n&&this.play(),this)},"progress"),completed:o(function(){return this._private.progress===1},"completed"),reverse:o(function(){var e=this._private,r=e.playing;r&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=o(function(h,f){var d=e[h];d!=null&&(e[h]=e[f],e[f]=d)},"swap");if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var i=0;i<e.style.length;i++){var a=e.style[i],s=a.name,l=e.startStyle[s];e.startStyle[s]=a,e.style[i]=l}return r&&this.play(),this},"reverse"),promise:o(function(e){var r=this._private,n;switch(e){case"frame":n=r.frames;break;default:case"complete":case"completed":n=r.completes}return new ey(function(i,a){n.push(function(){i()})})},"promise")});Up.complete=Up.completed;Up.run=Up.play;Up.running=Up.playing;VYe={animated:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return!1;var s=i[0];if(s)return s._private.animation.current.length>0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s<i.length;s++){var l=i[s];l._private.animation.queue=[]}return this},"clearQueueImpl")},"clearQueue"),delay:o(function(){return o(function(r,n){var i=this._private.cy||this;return i.styleEnabled()?this.animate({delay:r,duration:r,complete:n}):this},"delayImpl")},"delay"),delayAnimation:o(function(){return o(function(r,n){var i=this._private.cy||this;return i.styleEnabled()?this.animation({delay:r,duration:r,complete:n}):this},"delayAnimationImpl")},"delayAnimation"),animation:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this,u=!a,h=!u;if(!l.styleEnabled())return this;var f=l.style();r=rr({},r,n);var d=Object.keys(r).length===0;if(d)return new $P(s[0],r);switch(r.duration===void 0&&(r.duration=400),r.duration){case"slow":r.duration=600;break;case"fast":r.duration=200;break}if(h&&(r.style=f.getPropsList(r.style||r.css),r.css=void 0),h&&r.renderedPosition!=null){var p=r.renderedPosition,m=l.pan(),g=l.zoom();r.position=pme(p,g,m)}if(u&&r.panBy!=null){var y=r.panBy,v=l.pan();r.pan={x:v.x+y.x,y:v.y+y.y}}var x=r.center||r.centre;if(u&&x!=null){var b=l.getCenterPan(x.eles,r.zoom);b!=null&&(r.pan=b)}if(u&&r.fit!=null){var w=r.fit,C=l.getFitViewport(w.eles||w.boundingBox,w.padding);C!=null&&(r.pan=C.pan,r.zoom=C.zoom)}if(u&&Ur(r.zoom)){var T=l.getZoomedViewport(r.zoom);T!=null?(T.zoomed&&(r.zoom=T.zoom),T.panned&&(r.pan=T.pan)):r.zoom=null}return new $P(s[0],r)},"animationImpl")},"animation"),animate:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this;if(!l.styleEnabled())return this;n&&(r=rr({},r,n));for(var u=0;u<s.length;u++){var h=s[u],f=h.animated()&&(r.queue===void 0||r.queue),d=h.animation(r,f?{queue:!0}:void 0);d.play()}return this},"animateImpl")},"animate"),stop:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this;if(!l.styleEnabled())return this;for(var u=0;u<s.length;u++){for(var h=s[u],f=h._private,d=f.animation.current,p=0;p<d.length;p++){var m=d[p],g=m._private;n&&(g.duration=0)}r&&(f.animation.queue=[]),n||(f.animation.current=[])}return l.notify("draw"),this},"stopImpl")},"stop")},UYe=Array.isArray,OS=UYe,HYe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,WYe=/^\w*$/;o(qYe,"isKey");YYe=qYe,XYe="[object AsyncFunction]",jYe="[object Function]",KYe="[object GeneratorFunction]",QYe="[object Proxy]";o(ZYe,"isFunction");JYe=ZYe,eXe=RS["__core-js_shared__"],EP=eXe,e0e=function(){var t=/[^.]+$/.exec(EP&&EP.keys&&EP.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(tXe,"isMasked");rXe=tXe,nXe=Function.prototype,iXe=nXe.toString;o(aXe,"toSource");sXe=aXe,oXe=/[\\^$.*+?()[\]{}|]/g,lXe=/^\[object .+?Constructor\]$/,cXe=Function.prototype,uXe=Object.prototype,hXe=cXe.toString,fXe=uXe.hasOwnProperty,dXe=RegExp("^"+hXe.call(fXe).replace(oXe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(pXe,"baseIsNative");mXe=pXe;o(gXe,"getValue$1");yXe=gXe;o(vXe,"getNative");lB=vXe,xXe=lB(Object,"create"),jb=xXe;o(bXe,"hashClear");wXe=bXe;o(TXe,"hashDelete");kXe=TXe,EXe="__lodash_hash_undefined__",SXe=Object.prototype,CXe=SXe.hasOwnProperty;o(AXe,"hashGet");_Xe=AXe,DXe=Object.prototype,LXe=DXe.hasOwnProperty;o(RXe,"hashHas");NXe=RXe,MXe="__lodash_hash_undefined__";o(IXe,"hashSet");OXe=IXe;o(ty,"Hash");ty.prototype.clear=wXe;ty.prototype.delete=kXe;ty.prototype.get=_Xe;ty.prototype.has=NXe;ty.prototype.set=OXe;t0e=ty;o(PXe,"listCacheClear");BXe=PXe;o(FXe,"eq");Lme=FXe;o($Xe,"assocIndexOf");PS=$Xe,zXe=Array.prototype,GXe=zXe.splice;o(VXe,"listCacheDelete");UXe=VXe;o(HXe,"listCacheGet");WXe=HXe;o(qXe,"listCacheHas");YXe=qXe;o(XXe,"listCacheSet");jXe=XXe;o(ry,"ListCache");ry.prototype.clear=BXe;ry.prototype.delete=UXe;ry.prototype.get=WXe;ry.prototype.has=YXe;ry.prototype.set=jXe;KXe=ry,QXe=lB(RS,"Map"),ZXe=QXe;o(JXe,"mapCacheClear");eje=JXe;o(tje,"isKeyable");rje=tje;o(nje,"getMapData");BS=nje;o(ije,"mapCacheDelete");aje=ije;o(sje,"mapCacheGet");oje=sje;o(lje,"mapCacheHas");cje=lje;o(uje,"mapCacheSet");hje=uje;o(ny,"MapCache");ny.prototype.clear=eje;ny.prototype.delete=aje;ny.prototype.get=oje;ny.prototype.has=cje;ny.prototype.set=hje;Rme=ny,fje="Expected a function";o(cB,"memoize");cB.Cache=Rme;dje=cB,pje=500;o(mje,"memoizeCapped");gje=mje,yje=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,vje=/\\(\\)?/g,xje=gje(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(yje,function(r,n,i,a){e.push(i?a.replace(vje,"$1"):n||r)}),e}),Nme=xje;o(bje,"arrayMap");Mme=bje,wje=1/0,r0e=j1?j1.prototype:void 0,n0e=r0e?r0e.toString:void 0;o(Ime,"baseToString");Tje=Ime;o(kje,"toString$1");Ome=kje;o(Eje,"castPath");Pme=Eje,Sje=1/0;o(Cje,"toKey");uB=Cje;o(Aje,"baseGet");_je=Aje;o(Dje,"get");Lje=Dje,Rje=function(){try{var t=lB(Object,"defineProperty");return t({},"",{}),t}catch{}}(),i0e=Rje;o(Nje,"baseAssignValue");Mje=Nje,Ije=Object.prototype,Oje=Ije.hasOwnProperty;o(Pje,"assignValue");Bje=Pje,Fje=9007199254740991,$je=/^(?:0|[1-9]\d*)$/;o(zje,"isIndex");Gje=zje;o(Vje,"baseSet");Uje=Vje;o(Hje,"set");Wje=Hje;o(qje,"copyArray");Yje=qje;o(Xje,"toPath");jje=Xje,Kje={data:o(function(e){var r={field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:o(function(i){},"beforeGet"),beforeSet:o(function(i,a){},"beforeSet"),onSet:o(function(i){},"onSet"),canSet:o(function(i){return!0},"canSet")};return e=rr({},r,e),o(function(i,a){var s=e,l=this,u=l.length!==void 0,h=u?l:[l],f=u?l[0]:l;if(Zt(i)){var d=i.indexOf(".")!==-1,p=d&&jje(i);if(s.allowGetting&&a===void 0){var m;return f&&(s.beforeGet(f),p&&f._private[s.field][i]===void 0?m=Lje(f._private[s.field],p):m=f._private[s.field][i]),m}else if(s.allowSetting&&a!==void 0){var g=!s.immutableKeys[i];if(g){var y=X0e({},i,a);s.beforeSet(l,y);for(var v=0,x=h.length;v<x;v++){var b=h[v];s.canSet(b)&&(p&&f._private[s.field][i]===void 0?Wje(b._private[s.field],p,a):b._private[s.field][i]=a)}s.updateStyle&&l.updateStyle(),s.onSet(l),s.settingTriggersEvent&&l[s.triggerFnName](s.settingEvent)}}}else if(s.allowSetting&&Ur(i)){var w=i,C,T,E=Object.keys(w);s.beforeSet(l,w);for(var A=0;A<E.length;A++){C=E[A],T=w[C];var S=!s.immutableKeys[C];if(S)for(var _=0;_<h.length;_++){var I=h[_];s.canSet(I)&&(I._private[s.field][C]=T)}}s.updateStyle&&l.updateStyle(),s.onSet(l),s.settingTriggersEvent&&l[s.triggerFnName](s.settingEvent)}else if(s.allowBinding&&si(i)){var D=i;l.on(s.bindingEvent,D)}else if(s.allowGetting&&i===void 0){var k;return f&&(s.beforeGet(f),k=f._private[s.field]),k}return l},"dataImpl")},"data"),removeData:o(function(e){var r={field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}};return e=rr({},r,e),o(function(i){var a=e,s=this,l=s.length!==void 0,u=l?s:[s];if(Zt(i)){for(var h=i.split(/\s+/),f=h.length,d=0;d<f;d++){var p=h[d];if(!Af(p)){var m=!a.immutableKeys[p];if(m)for(var g=0,y=u.length;g<y;g++)u[g]._private[a.field][p]=void 0}}a.triggerEvent&&s[a.triggerFnName](a.event)}else if(i===void 0){for(var v=0,x=u.length;v<x;v++)for(var b=u[v]._private[a.field],w=Object.keys(b),C=0;C<w.length;C++){var T=w[C],E=!a.immutableKeys[T];E&&(b[T]=void 0)}a.triggerEvent&&s[a.triggerFnName](a.event)}return s},"removeDataImpl")},"removeData")},Qje={eventAliasesOn:o(function(e){var r=e;r.addListener=r.listen=r.bind=r.on,r.unlisten=r.unbind=r.off=r.removeListener,r.trigger=r.emit,r.pon=r.promiseOn=function(n,i){var a=this,s=Array.prototype.slice.call(arguments,0);return new ey(function(l,u){var h=o(function(m){a.off.apply(a,d),l(m)},"callback"),f=s.concat([h]),d=f.concat([]);a.on.apply(a,f)})}},"eventAliasesOn")},cn={};[VYe,Kje,Qje].forEach(function(t){rr(cn,t)});Zje={animate:cn.animate(),animation:cn.animation(),animated:cn.animated(),clearQueue:cn.clearQueue(),delay:cn.delay(),delayAnimation:cn.delayAnimation(),stop:cn.stop()},hS={classes:o(function(e){var r=this;if(e===void 0){var n=[];return r[0]._private.classes.forEach(function(g){return n.push(g)}),n}else En(e)||(e=(e||"").match(/\S+/g)||[]);for(var i=[],a=new J1(e),s=0;s<r.length;s++){for(var l=r[s],u=l._private,h=u.classes,f=!1,d=0;d<e.length;d++){var p=e[d],m=h.has(p);if(!m){f=!0;break}}f||(f=h.size!==e.length),f&&(u.classes=a,i.push(l))}return i.length>0&&this.spawn(i).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){En(e)||(e=e.match(/\S+/g)||[]);for(var n=this,i=r===void 0,a=[],s=0,l=n.length;s<l;s++)for(var u=n[s],h=u._private.classes,f=!1,d=0;d<e.length;d++){var p=e[d],m=h.has(p),g=!1;r||i&&!m?(h.add(p),g=!0):(!r||i&&m)&&(h.delete(p),g=!0),!f&&g&&(a.push(u),f=!0)}return a.length>0&&this.spawn(a).updateStyle().emit("class"),n},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var n=this;if(r==null)r=250;else if(r===0)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},r),n},"flashClass")};hS.className=hS.classNames=hS.classes;Vr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Hi,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Vr.variable="(?:[\\w-.]|(?:\\\\"+Vr.metaChar+"))+";Vr.className="(?:[\\w-]|(?:\\\\"+Vr.metaChar+"))+";Vr.value=Vr.string+"|"+Vr.number;Vr.id=Vr.variable;(function(){var t,e,r;for(t=Vr.comparatorOp.split("|"),r=0;r<t.length;r++)e=t[r],Vr.comparatorOp+="|@"+e;for(t=Vr.comparatorOp.split("|"),r=0;r<t.length;r++)e=t[r],!(e.indexOf("!")>=0)&&e!=="="&&(Vr.comparatorOp+="|\\!"+e)})();mn=o(function(){return{checks:[]}},"newQuery"),$t={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},zP=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return hWe(t.selector,e.selector)}),Jje=function(){for(var t={},e,r=0;r<zP.length;r++)e=zP[r],t[e.selector]=e.matches;return t}(),eKe=o(function(e,r){return Jje[e](r)},"stateSelectorMatches"),tKe="("+zP.map(function(t){return t.selector}).join("|")+")",B1=o(function(e){return e.replace(new RegExp("\\\\("+Vr.metaChar+")","g"),function(r,n){return n})},"cleanMetaChars"),Tf=o(function(e,r,n){e[e.length-1]=n},"replaceLastQuery"),GP=[{name:"group",query:!0,regex:"("+Vr.group+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.GROUP,value:a==="*"?a:a+"s"})},"populate")},{name:"state",query:!0,regex:tKe,populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.STATE,value:a})},"populate")},{name:"id",query:!0,regex:"\\#("+Vr.id+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.ID,value:B1(a)})},"populate")},{name:"className",query:!0,regex:"\\.("+Vr.className+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.CLASS,value:B1(a)})},"populate")},{name:"dataExists",query:!0,regex:"\\[\\s*("+Vr.variable+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.DATA_EXIST,field:B1(a)})},"populate")},{name:"dataCompare",query:!0,regex:"\\[\\s*("+Vr.variable+")\\s*("+Vr.comparatorOp+")\\s*("+Vr.value+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,3),a=i[0],s=i[1],l=i[2],u=new RegExp("^"+Vr.string+"$").exec(l)!=null;u?l=l.substring(1,l.length-1):l=parseFloat(l),r.checks.push({type:$t.DATA_COMPARE,field:B1(a),operator:s,value:l})},"populate")},{name:"dataBool",query:!0,regex:"\\[\\s*("+Vr.boolOp+")\\s*("+Vr.variable+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,2),a=i[0],s=i[1];r.checks.push({type:$t.DATA_BOOL,field:B1(s),operator:a})},"populate")},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+Vr.meta+")\\s*("+Vr.comparatorOp+")\\s*("+Vr.number+")\\s*\\]\\]",populate:o(function(e,r,n){var i=_i(n,3),a=i[0],s=i[1],l=i[2];r.checks.push({type:$t.META_COMPARE,field:B1(a),operator:s,value:parseFloat(l)})},"populate")},{name:"nextQuery",separator:!0,regex:Vr.separator,populate:o(function(e,r){var n=e.currentSubject,i=e.edgeCount,a=e.compoundCount,s=e[e.length-1];n!=null&&(s.subject=n,e.currentSubject=null),s.edgeCount=i,s.compoundCount=a,e.edgeCount=0,e.compoundCount=0;var l=e[e.length++]=mn();return l},"populate")},{name:"directedEdge",separator:!0,regex:Vr.directedEdge,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=r,a=mn();return n.checks.push({type:$t.DIRECTED_EDGE,source:i,target:a}),Tf(e,r,n),e.edgeCount++,a}else{var s=mn(),l=r,u=mn();return s.checks.push({type:$t.NODE_SOURCE,source:l,target:u}),Tf(e,r,s),e.edgeCount++,u}},"populate")},{name:"undirectedEdge",separator:!0,regex:Vr.undirectedEdge,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=r,a=mn();return n.checks.push({type:$t.UNDIRECTED_EDGE,nodes:[i,a]}),Tf(e,r,n),e.edgeCount++,a}else{var s=mn(),l=r,u=mn();return s.checks.push({type:$t.NODE_NEIGHBOR,node:l,neighbor:u}),Tf(e,r,s),u}},"populate")},{name:"child",separator:!0,regex:Vr.child,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=mn(),a=e[e.length-1];return n.checks.push({type:$t.CHILD,parent:a,child:i}),Tf(e,r,n),e.compoundCount++,i}else if(e.currentSubject===r){var s=mn(),l=e[e.length-1],u=mn(),h=mn(),f=mn(),d=mn();return s.checks.push({type:$t.COMPOUND_SPLIT,left:l,right:u,subject:h}),h.checks=r.checks,r.checks=[{type:$t.TRUE}],d.checks.push({type:$t.TRUE}),u.checks.push({type:$t.PARENT,parent:d,child:f}),Tf(e,l,s),e.currentSubject=h,e.compoundCount++,f}else{var p=mn(),m=mn(),g=[{type:$t.PARENT,parent:p,child:m}];return p.checks=r.checks,r.checks=g,e.compoundCount++,m}},"populate")},{name:"descendant",separator:!0,regex:Vr.descendant,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=mn(),a=e[e.length-1];return n.checks.push({type:$t.DESCENDANT,ancestor:a,descendant:i}),Tf(e,r,n),e.compoundCount++,i}else if(e.currentSubject===r){var s=mn(),l=e[e.length-1],u=mn(),h=mn(),f=mn(),d=mn();return s.checks.push({type:$t.COMPOUND_SPLIT,left:l,right:u,subject:h}),h.checks=r.checks,r.checks=[{type:$t.TRUE}],d.checks.push({type:$t.TRUE}),u.checks.push({type:$t.ANCESTOR,ancestor:d,descendant:f}),Tf(e,l,s),e.currentSubject=h,e.compoundCount++,f}else{var p=mn(),m=mn(),g=[{type:$t.ANCESTOR,ancestor:p,descendant:m}];return p.checks=r.checks,r.checks=g,e.compoundCount++,m}},"populate")},{name:"subject",modifier:!0,regex:Vr.subject,populate:o(function(e,r){if(e.currentSubject!=null&&e.currentSubject!==r)return un("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=r;var n=e[e.length-1],i=n.checks[0],a=i==null?null:i.type;a===$t.DIRECTED_EDGE?i.type=$t.NODE_TARGET:a===$t.UNDIRECTED_EDGE&&(i.type=$t.NODE_NEIGHBOR,i.node=i.nodes[1],i.neighbor=i.nodes[0],i.nodes=null)},"populate")}];GP.forEach(function(t){return t.regexObj=new RegExp("^"+t.regex)});rKe=o(function(e){for(var r,n,i,a=0;a<GP.length;a++){var s=GP[a],l=s.name,u=e.match(s.regexObj);if(u!=null){n=u,r=s,i=l;var h=u[0];e=e.substring(h.length);break}}return{expr:r,match:n,name:i,remaining:e}},"consumeExpr"),nKe=o(function(e){var r=e.match(/^\s+/);if(r){var n=r[0];e=e.substring(n.length)}return e},"consumeWhitespace"),iKe=o(function(e){var r=this,n=r.inputText=e,i=r[0]=mn();for(r.length=1,n=nKe(n);;){var a=rKe(n);if(a.expr==null)return un("The selector `"+e+"`is invalid"),!1;var s=a.match.slice(1),l=a.expr.populate(r,i,s);if(l===!1)return!1;if(l!=null&&(i=l),n=a.remaining,n.match(/^\s*$/))break}var u=r[r.length-1];r.currentSubject!=null&&(u.subject=r.currentSubject),u.edgeCount=r.edgeCount,u.compoundCount=r.compoundCount;for(var h=0;h<r.length;h++){var f=r[h];if(f.compoundCount>0&&f.edgeCount>0)return un("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return un("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&un("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),aKe=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return Zt(f)?'"'+f+'"':e(f)},"cleanVal"),n=o(function(f){return" "+f+" "},"space"),i=o(function(f,d){var p=f.type,m=f.value;switch(p){case $t.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case $t.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+n(e(v))+r(m)+"]"}case $t.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case $t.DATA_EXIST:{var w=f.field;return"["+w+"]"}case $t.META_COMPARE:{var C=f.operator,T=f.field;return"[["+T+n(e(C))+r(m)+"]]"}case $t.STATE:return m;case $t.ID:return"#"+m;case $t.CLASS:return"."+m;case $t.PARENT:case $t.CHILD:return a(f.parent,d)+n(">")+a(f.child,d);case $t.ANCESTOR:case $t.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case $t.COMPOUND_SPLIT:{var E=a(f.left,d),A=a(f.subject,d),S=a(f.right,d);return E+(E.length>0?" ":"")+A+S}case $t.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+i(m,d)},"")},"queryToString"),s="",l=0;l<this.length;l++){var u=this[l];s+=a(u,u.subject),this.length>1&&l<this.length-1&&(s+=", ")}return this.toStringCache=s,s},"toString"),sKe={parse:iKe,toString:aKe},Bme=o(function(e,r,n){var i,a=Zt(e),s=Ct(e),l=Zt(n),u,h,f=!1,d=!1,p=!1;switch(r.indexOf("!")>=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+n),f&&(e=u=u.toLowerCase(),n=h=h.toLowerCase()),r){case"*=":i=u.indexOf(h)>=0;break;case"$=":i=u.indexOf(h,u.length-h.length)>=0;break;case"^=":i=u.indexOf(h)===0;break;case"=":i=e===n;break;case">":p=!0,i=e>n;break;case">=":p=!0,i=e>=n;break;case"<":p=!0,i=e<n;break;case"<=":p=!0,i=e<=n;break;default:i=!1;break}return d&&(e!=null||!p)&&(i=!i),i},"valCmp"),oKe=o(function(e,r){switch(r){case"?":return!!e;case"!":return!e;case"^":return e===void 0}},"boolCmp"),lKe=o(function(e){return e!==void 0},"existCmp"),hB=o(function(e,r){return e.data(r)},"data"),cKe=o(function(e,r){return e[r]()},"meta"),fi=[],zn=o(function(e,r){return e.checks.every(function(n){return fi[n.type](n,r)})},"matches");fi[$t.GROUP]=function(t,e){var r=t.value;return r==="*"||r===e.group()};fi[$t.STATE]=function(t,e){var r=t.value;return eKe(r,e)};fi[$t.ID]=function(t,e){var r=t.value;return e.id()===r};fi[$t.CLASS]=function(t,e){var r=t.value;return e.hasClass(r)};fi[$t.META_COMPARE]=function(t,e){var r=t.field,n=t.operator,i=t.value;return Bme(cKe(e,r),n,i)};fi[$t.DATA_COMPARE]=function(t,e){var r=t.field,n=t.operator,i=t.value;return Bme(hB(e,r),n,i)};fi[$t.DATA_BOOL]=function(t,e){var r=t.field,n=t.operator;return oKe(hB(e,r),n)};fi[$t.DATA_EXIST]=function(t,e){var r=t.field;return t.operator,lKe(hB(e,r))};fi[$t.UNDIRECTED_EDGE]=function(t,e){var r=t.nodes[0],n=t.nodes[1],i=e.source(),a=e.target();return zn(r,i)&&zn(n,a)||zn(n,i)&&zn(r,a)};fi[$t.NODE_NEIGHBOR]=function(t,e){return zn(t.node,e)&&e.neighborhood().some(function(r){return r.isNode()&&zn(t.neighbor,r)})};fi[$t.DIRECTED_EDGE]=function(t,e){return zn(t.source,e.source())&&zn(t.target,e.target())};fi[$t.NODE_SOURCE]=function(t,e){return zn(t.source,e)&&e.outgoers().some(function(r){return r.isNode()&&zn(t.target,r)})};fi[$t.NODE_TARGET]=function(t,e){return zn(t.target,e)&&e.incomers().some(function(r){return r.isNode()&&zn(t.source,r)})};fi[$t.CHILD]=function(t,e){return zn(t.child,e)&&zn(t.parent,e.parent())};fi[$t.PARENT]=function(t,e){return zn(t.parent,e)&&e.children().some(function(r){return zn(t.child,r)})};fi[$t.DESCENDANT]=function(t,e){return zn(t.descendant,e)&&e.ancestors().some(function(r){return zn(t.ancestor,r)})};fi[$t.ANCESTOR]=function(t,e){return zn(t.ancestor,e)&&e.descendants().some(function(r){return zn(t.descendant,r)})};fi[$t.COMPOUND_SPLIT]=function(t,e){return zn(t.subject,e)&&zn(t.left,e)&&zn(t.right,e)};fi[$t.TRUE]=function(){return!0};fi[$t.COLLECTION]=function(t,e){var r=t.value;return r.has(e)};fi[$t.FILTER]=function(t,e){var r=t.value;return r(e)};uKe=o(function(e){var r=this;if(r.length===1&&r[0].checks.length===1&&r[0].checks[0].type===$t.ID)return e.getElementById(r[0].checks[0].value).collection();var n=o(function(a){for(var s=0;s<r.length;s++){var l=r[s];if(zn(l,a))return!0}return!1},"selectorFunction");return r.text()==null&&(n=o(function(){return!0},"selectorFunction")),e.filter(n)},"filter"),hKe=o(function(e){for(var r=this,n=0;n<r.length;n++){var i=r[n];if(zn(i,e))return!0}return!1},"matches"),fKe={matches:hKe,filter:uKe},Lf=o(function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,e==null||Zt(e)&&e.match(/^\s*$/)||(go(e)?this.addQuery({checks:[{type:$t.COLLECTION,value:e.collection()}]}):si(e)?this.addQuery({checks:[{type:$t.FILTER,value:e}]}):Zt(e)?this.parse(e)||(this.invalid=!0):ai("A selector must be created from a string; found "))},"Selector"),Rf=Lf.prototype;[sKe,fKe].forEach(function(t){return rr(Rf,t)});Rf.text=function(){return this.inputText};Rf.size=function(){return this.length};Rf.eq=function(t){return this[t]};Rf.sameText=function(t){return!this.invalid&&!t.invalid&&this.text()===t.text()};Rf.addQuery=function(t){this[this.length++]=t};Rf.selector=Rf.toString;Sf={allAre:o(function(e){var r=new Lf(e);return this.every(function(n){return r.matches(n)})},"allAre"),is:o(function(e){var r=new Lf(e);return this.some(function(n){return r.matches(n)})},"is"),some:o(function(e,r){for(var n=0;n<this.length;n++){var i=r?e.apply(r,[this[n],n,this]):e(this[n],n,this);if(i)return!0}return!1},"some"),every:o(function(e,r){for(var n=0;n<this.length;n++){var i=r?e.apply(r,[this[n],n,this]):e(this[n],n,this);if(!i)return!1}return!0},"every"),same:o(function(e){if(this===e)return!0;e=this.cy().collection(e);var r=this.length,n=e.length;return r!==n?!1:r===1?this[0]===e[0]:this.every(function(i){return e.hasElementWithId(i.id())})},"same"),anySame:o(function(e){return e=this.cy().collection(e),this.some(function(r){return e.hasElementWithId(r.id())})},"anySame"),allAreNeighbors:o(function(e){e=this.cy().collection(e);var r=this.neighborhood();return e.every(function(n){return r.hasElementWithId(n.id())})},"allAreNeighbors"),contains:o(function(e){e=this.cy().collection(e);var r=this;return e.every(function(n){return r.hasElementWithId(n.id())})},"contains")};Sf.allAreNeighbours=Sf.allAreNeighbors;Sf.has=Sf.contains;Sf.equal=Sf.equals=Sf.same;tl=o(function(e,r){return o(function(i,a,s,l){var u=i,h=this,f;if(u==null?f="":go(u)&&u.length===1&&(f=u.id()),h.length===1&&f){var d=h[0]._private,p=d.traversalCache=d.traversalCache||{},m=p[r]=p[r]||[],g=_f(f),y=m[g];return y||(m[g]=e.call(h,i,a,s,l))}else return e.call(h,i,a,s,l)},"traversalCache")},"cache"),Z1={parent:o(function(e){var r=[];if(this.length===1){var n=this[0]._private.parent;if(n)return n}for(var i=0;i<this.length;i++){var a=this[i],s=a._private.parent;s&&r.push(s)}return this.spawn(r,!0).filter(e)},"parent"),parents:o(function(e){for(var r=[],n=this.parent();n.nonempty();){for(var i=0;i<n.length;i++){var a=n[i];r.push(a)}n=n.parent()}return this.spawn(r,!0).filter(e)},"parents"),commonAncestors:o(function(e){for(var r,n=0;n<this.length;n++){var i=this[n],a=i.parents();r=r||a,r=r.intersect(a)}return r.filter(e)},"commonAncestors"),orphans:o(function(e){return this.stdFilter(function(r){return r.isOrphan()}).filter(e)},"orphans"),nonorphans:o(function(e){return this.stdFilter(function(r){return r.isChild()}).filter(e)},"nonorphans"),children:tl(function(t){for(var e=[],r=0;r<this.length;r++)for(var n=this[r],i=n._private.children,a=0;a<i.length;a++)e.push(i[a]);return this.spawn(e,!0).filter(t)},"children"),siblings:o(function(e){return this.parent().children().not(this).filter(e)},"siblings"),isParent:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.children.length!==0},"isParent"),isChildless:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.children.length===0},"isChildless"),isChild:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.parent!=null},"isChild"),isOrphan:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.parent==null},"isOrphan"),descendants:o(function(e){var r=[];function n(i){for(var a=0;a<i.length;a++){var s=i[a];r.push(s),s.children().nonempty()&&n(s.children())}}return o(n,"add"),n(this.children()),this.spawn(r,!0).filter(e)},"descendants")};o(fB,"forEachCompound");o(Fme,"addChildren");Z1.forEachDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,Fme)};o($me,"addParent");Z1.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,$me)};o(dKe,"addParentAndChildren");Z1.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,dKe)};Z1.ancestors=Z1.parents;Kb=zme={data:cn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:cn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:cn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:cn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:cn.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:cn.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};Kb.attr=Kb.data;Kb.removeAttr=Kb.removeData;pKe=zme,FS={};o(SP,"defineDegreeFunction");rr(FS,{degree:SP(function(t,e){return e.source().same(e.target())?2:1}),indegree:SP(function(t,e){return e.target().same(t)?1:0}),outdegree:SP(function(t,e){return e.source().same(t)?1:0})});o(F1,"defineDegreeBoundsFunction");rr(FS,{minDegree:F1("degree",function(t,e){return t<e}),maxDegree:F1("degree",function(t,e){return t>e}),minIndegree:F1("indegree",function(t,e){return t<e}),maxIndegree:F1("indegree",function(t,e){return t>e}),minOutdegree:F1("outdegree",function(t,e){return t<e}),maxOutdegree:F1("outdegree",function(t,e){return t>e})});rr(FS,{totalDegree:o(function(e){for(var r=0,n=this.nodes(),i=0;i<n.length;i++)r+=n[i].degree(e);return r},"totalDegree")});Vme=o(function(e,r,n){for(var i=0;i<e.length;i++){var a=e[i];if(!a.locked()){var s=a._private.position,l={x:r.x!=null?r.x-s.x:0,y:r.y!=null?r.y-s.y:0};a.isParent()&&!(l.x===0&&l.y===0)&&a.children().shift(l,n),a.dirtyBoundingBoxCache()}}},"beforePositionSet"),a0e={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:o(function(e){e.updateCompoundBounds()},"beforeGet"),beforeSet:o(function(e,r){Vme(e,r,!1)},"beforeSet"),onSet:o(function(e){e.dirtyCompoundBoundsCache()},"onSet"),canSet:o(function(e){return!e.locked()},"canSet")};Vl=Gme={position:cn.data(a0e),silentPosition:cn.data(rr({},a0e,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:o(function(e,r){Vme(e,r,!0)},"beforeSet"),onSet:o(function(e){e.dirtyCompoundBoundsCache()},"onSet")})),positions:o(function(e,r){if(Ur(e))r?this.silentPosition(e):this.position(e);else if(si(e)){var n=e,i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var s=this[a],l=void 0;(l=n(s,a))&&(r?s.silentPosition(l):s.position(l))}i.endBatch()}return this},"positions"),silentPositions:o(function(e){return this.positions(e,!0)},"silentPositions"),shift:o(function(e,r,n){var i;if(Ur(e)?(i={x:Ct(e.x)?e.x:0,y:Ct(e.y)?e.y:0},n=r):Zt(e)&&Ct(r)&&(i={x:0,y:0},i[e]=r),i!=null){var a=this.cy();a.startBatch();for(var s=0;s<this.length;s++){var l=this[s];if(!(a.hasCompoundNodes()&&l.isChild()&&l.ancestors().anySame(this))){var u=l.position(),h={x:u.x+i.x,y:u.y+i.y};n?l.silentPosition(h):l.position(h)}}a.endBatch()}return this},"shift"),silentShift:o(function(e,r){return Ur(e)?this.shift(e,!0):Zt(e)&&Ct(r)&&this.shift(e,r,!0),this},"silentShift"),renderedPosition:o(function(e,r){var n=this[0],i=this.cy(),a=i.zoom(),s=i.pan(),l=Ur(e)?e:void 0,u=l!==void 0||r!==void 0&&Zt(e);if(n&&n.isNode())if(u)for(var h=0;h<this.length;h++){var f=this[h];r!==void 0?f.position(e,(r-s[e])/a):l!==void 0&&f.position(pme(l,a,s))}else{var d=n.position();return l=MS(d,a,s),e===void 0?l:l[e]}else if(!u)return;return this},"renderedPosition"),relativePosition:o(function(e,r){var n=this[0],i=this.cy(),a=Ur(e)?e:void 0,s=a!==void 0||r!==void 0&&Zt(e),l=i.hasCompoundNodes();if(n&&n.isNode())if(s)for(var u=0;u<this.length;u++){var h=this[u],f=l?h.parent():null,d=f&&f.length>0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=n.position(),y=l?n.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Vl.modelPosition=Vl.point=Vl.position;Vl.modelPositions=Vl.points=Vl.positions;Vl.renderedPoint=Vl.renderedPosition;Vl.relativePoint=Vl.relativePosition;mKe=Gme;X1=Of={};Of.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),n=r.zoom(),i=r.pan(),a=e.x1*n+i.x,s=e.x2*n+i.x,l=e.y1*n+i.y,u=e.y2*n+i.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Of.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var n=r._private;n.compoundBoundsClean=!1,n.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Of.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(_,I,D){var k=0,L=0,R=I+D;return _>0&&R>0&&(k=I/R*_,L=D/R*_),{biasDiff:k,biasComplementDiff:L}}o(m,"computeBiasValues");function g(_,I,D,k){if(D.units==="%")switch(k){case"width":return _>0?D.pfValue*_:0;case"height":return I>0?D.pfValue*I:0;case"average":return _>0&&I>0?D.pfValue*(_+I)/2:0;case"min":return _>0&&I>0?_>I?D.pfValue*I:D.pfValue*_:0;case"max":return _>0&&I>0?_>I?D.pfValue*_:D.pfValue*I:0;default:return 0}else return D.units==="px"?D.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var w=m(f.width.val-d.w,y,v),C=w.biasDiff,T=w.biasComplementDiff,E=m(f.height.val-d.h,x,b),A=E.biasDiff,S=E.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-C+d.x1+d.x2+T)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-A+d.y1+d.y2+S)/2}o(r,"update");for(var n=0;n<this.length;n++){var i=this[n],a=i._private;(!a.compoundBoundsClean||t)&&(r(i),e.batching()||(a.compoundBoundsClean=!0))}return this};el=o(function(e){return e===1/0||e===-1/0?0:e},"noninf"),zl=o(function(e,r,n,i,a){i-r===0||a-n===0||r==null||n==null||i==null||a==null||(e.x1=r<e.x1?r:e.x1,e.x2=i>e.x2?i:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=a>e.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),Pp=o(function(e,r){return r==null?e:zl(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Db=o(function(e,r,n){return Gl(e,r,n)},"prefixedProperty"),tS=o(function(e,r,n){if(!r.cy().headless()){var i=r._private,a=i.rstyle,s=a.arrowWidth/2,l=r.pstyle(n+"-arrow-shape").value,u,h;if(l!=="none"){n==="source"?(u=a.srcX,h=a.srcY):n==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=i.arrowBounds=i.arrowBounds||{},d=f[n]=f[n]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,cS(d,1),zl(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),CP=o(function(e,r,n){if(!r.cy().headless()){var i;n?i=n+"-":i="";var a=r._private,s=a.rstyle,l=r.pstyle(i+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Db(s,"labelWidth",n),d=Db(s,"labelHeight",n),p=Db(s,"labelX",n),m=Db(s,"labelY",n),g=r.pstyle(i+"text-margin-x").pfValue,y=r.pstyle(i+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(i+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,w=r.pstyle("text-border-width").pfValue,C=w/2,T=r.pstyle("text-background-padding").pfValue,E=2,A=d,S=f,_=S/2,I=A/2,D,k,L,R;if(v)D=p-_,k=p+_,L=m-I,R=m+I;else{switch(u.value){case"left":D=p-S,k=p;break;case"center":D=p-_,k=p+_;break;case"right":D=p,k=p+S;break}switch(h.value){case"top":L=m-A,R=m;break;case"center":L=m-I,R=m+I;break;case"bottom":L=m,R=m+A;break}}var O=g-Math.max(b,C)-T-E,M=g+Math.max(b,C)+T+E,B=y-Math.max(b,C)-T-E,F=y+Math.max(b,C)+T+E;D+=O,k+=M,L+=B,R+=F;var P=n||"main",z=a.labelBounds,$=z[P]=z[P]||{};$.x1=D,$.y1=L,$.x2=k,$.y2=R,$.w=k-D,$.h=R-L,$.leftPad=O,$.rightPad=M,$.topPad=B,$.botPad=F;var H=v&&x.strValue==="autorotate",Q=x.pfValue!=null&&x.pfValue!==0;if(H||Q){var j=H?Db(a.rstyle,"labelAngle",n):x.pfValue,ie=Math.cos(j),ne=Math.sin(j),le=(D+k)/2,he=(L+R)/2;if(!v){switch(u.value){case"left":le=k;break;case"right":le=D;break}switch(h.value){case"top":he=R;break;case"bottom":he=L;break}}var K=o(function(ce,ae){return ce=ce-le,ae=ae-he,{x:ce*ie-ae*ne+le,y:ce*ne+ae*ie+he}},"rotate"),X=K(D,L),te=K(D,R),J=K(k,L),se=K(k,R);D=Math.min(X.x,te.x,J.x,se.x),k=Math.max(X.x,te.x,J.x,se.x),L=Math.min(X.y,te.y,J.y,se.y),R=Math.max(X.y,te.y,J.y,se.y)}var ue=P+"Rot",Z=z[ue]=z[ue]||{};Z.x1=D,Z.y1=L,Z.x2=k,Z.y2=R,Z.w=k-D,Z.h=R-L,zl(e,D,L,k,R),zl(a.labelBounds.all,D,L,k,R)}return e}},"updateBoundsFromLabel"),gKe=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("outline-opacity").value,i=r.pstyle("outline-width").value;if(n>0&&i>0){var a=r.pstyle("outline-offset").value,s=r.pstyle("shape").value,l=i+a,u=(e.w+l*2)/e.w,h=(e.h+l*2)/e.h,f=0,d=0;["diamond","pentagon","round-triangle"].includes(s)?(u=(e.w+l*2.4)/e.w,d=-l/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(s)?u=(e.w+l*2.4)/e.w:s==="star"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.6)/e.h,d=-l/3.8):s==="triangle"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.4)/e.h,d=-l/1.4):s==="vee"&&(u=(e.w+l*4.4)/e.w,h=(e.h+l*3.8)/e.h,d=-l*.5);var p=e.h*h-e.h,m=e.w*u-e.w;if(uS(e,[Math.ceil(p/2),Math.ceil(m/2)]),f!=0||d!==0){var g=Bqe(e,f,d);gme(e,g)}}}},"updateBoundsFromOutline"),yKe=o(function(e,r){var n=e._private.cy,i=n.styleEnabled(),a=n.headless(),s=Hs(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&i?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(Se){return Se.pstyle("display").value!=="none"},"isDisplayed"),w=!i||b(e)&&(!h||b(e.source())&&b(e.target()));if(w){var C=0,T=0;i&&r.includeOverlays&&(C=e.pstyle("overlay-opacity").value,C!==0&&(T=e.pstyle("overlay-padding").value));var E=0,A=0;i&&r.includeUnderlays&&(E=e.pstyle("underlay-opacity").value,E!==0&&(A=e.pstyle("underlay-padding").value));var S=Math.max(T,A),_=0,I=0;if(i&&(_=e.pstyle("width").pfValue,I=_/2),u&&r.includeNodes){var D=e.position();g=D.x,y=D.y;var k=e.outerWidth(),L=k/2,R=e.outerHeight(),O=R/2;f=g-L,d=g+L,p=y-O,m=y+O,zl(s,f,p,d,m),i&&r.includeOutlines&&gKe(s,e)}else if(h&&r.includeEdges)if(i&&!a){var M=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=I,d+=I,p-=I,m+=I,zl(s,f,p,d,m),M==="haystack"){var B=v.haystackPts;if(B&&B.length===2){if(f=B[0].x,p=B[0].y,d=B[1].x,m=B[1].y,f>d){var F=f;f=d,d=F}if(p>m){var P=p;p=m,m=P}zl(s,f-I,p-I,d+I,m+I)}}else if(M==="bezier"||M==="unbundled-bezier"||M.endsWith("segments")||M.endsWith("taxi")){var z;switch(M){case"bezier":case"unbundled-bezier":z=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":z=v.linePts;break}if(z!=null)for(var $=0;$<z.length;$++){var H=z[$];f=H.x-I,d=H.x+I,p=H.y-I,m=H.y+I,zl(s,f,p,d,m)}}}else{var Q=e.source(),j=Q.position(),ie=e.target(),ne=ie.position();if(f=j.x,d=ne.x,p=j.y,m=ne.y,f>d){var le=f;f=d,d=le}if(p>m){var he=p;p=m,m=he}f-=I,d+=I,p-=I,m+=I,zl(s,f,p,d,m)}if(i&&r.includeEdges&&h&&(tS(s,e,"mid-source"),tS(s,e,"mid-target"),tS(s,e,"source"),tS(s,e,"target")),i){var K=e.pstyle("ghost").value==="yes";if(K){var X=e.pstyle("ghost-offset-x").pfValue,te=e.pstyle("ghost-offset-y").pfValue;zl(s,s.x1+X,s.y1+te,s.x2+X,s.y2+te)}}var J=l.bodyBounds=l.bodyBounds||{};Fpe(J,s),uS(J,x),cS(J,1),i&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,zl(s,f-S,p-S,d+S,m+S));var se=l.overlayBounds=l.overlayBounds||{};Fpe(se,s),uS(se,x),cS(se,1);var ue=l.labelBounds=l.labelBounds||{};ue.all!=null?Pqe(ue.all):ue.all=Hs(),i&&r.includeLabels&&(r.includeMainLabels&&CP(s,e,null),h&&(r.includeSourceLabels&&CP(s,e,"source"),r.includeTargetLabels&&CP(s,e,"target")))}return s.x1=el(s.x1),s.y1=el(s.y1),s.x2=el(s.x2),s.y2=el(s.y2),s.w=el(s.x2-s.x1),s.h=el(s.y2-s.y1),s.w>0&&s.h>0&&w&&(uS(s,x),cS(s,1)),s},"boundingBoxImpl"),Ume=o(function(e){var r=0,n=o(function(s){return(s?1:0)<<r++},"tf"),i=0;return i+=n(e.incudeNodes),i+=n(e.includeEdges),i+=n(e.includeLabels),i+=n(e.includeMainLabels),i+=n(e.includeSourceLabels),i+=n(e.includeTargetLabels),i+=n(e.includeOverlays),i+=n(e.includeOutlines),i},"getKey"),Hme=o(function(e){if(e.isEdge()){var r=e.source().position(),n=e.target().position(),i=o(function(s){return Math.round(s)},"r");return nqe([i(r.x),i(r.y),i(n.x),i(n.y)])}else return 0},"getBoundingBoxPosKey"),s0e=o(function(e,r){var n=e._private,i,a=e.isEdge(),s=r==null?o0e:Ume(r),l=s===o0e,u=Hme(e),h=n.bbCachePosKey===u,f=r.useCache&&h,d=o(function(y){return y._private.bbCache==null||y._private.styleDirty},"isDirty"),p=!f||d(e)||a&&(d(e.source())||d(e.target()));if(p?(h||e.recalculateRenderedStyle(f),i=yKe(e,Qb),n.bbCache=i,n.bbCachePosKey=u):i=n.bbCache,!l){var m=e.isNode();i=Hs(),(r.includeNodes&&m||r.includeEdges&&!m)&&(r.includeOverlays?Pp(i,n.overlayBounds):Pp(i,n.bodyBounds)),r.includeLabels&&(r.includeMainLabels&&(!a||r.includeSourceLabels&&r.includeTargetLabels)?Pp(i,n.labelBounds.all):(r.includeMainLabels&&Pp(i,n.labelBounds.mainRot),r.includeSourceLabels&&Pp(i,n.labelBounds.sourceRot),r.includeTargetLabels&&Pp(i,n.labelBounds.targetRot))),i.w=i.x2-i.x1,i.h=i.y2-i.y1}return i},"cachedBoundingBoxImpl"),Qb={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,includeOutlines:!0,useCache:!0},o0e=Ume(Qb),l0e=la(Qb);Of.boundingBox=function(t){var e;if(this.length===1&&this[0]._private.bbCache!=null&&!this[0]._private.styleDirty&&(t===void 0||t.useCache===void 0||t.useCache===!0))t===void 0?t=Qb:t=l0e(t),e=s0e(this[0],t);else{e=Hs(),t=t||Qb;var r=l0e(t),n=this,i=n.cy(),a=i.styleEnabled();if(a)for(var s=0;s<n.length;s++){var l=n[s],u=l._private,h=Hme(l),f=u.bbCachePosKey===h,d=r.useCache&&f&&!u.styleDirty;l.recalculateRenderedStyle(d)}this.updateCompoundBounds(!t.useCache);for(var p=0;p<n.length;p++){var m=n[p];Pp(e,s0e(m,r))}}return e.x1=el(e.x1),e.y1=el(e.y1),e.x2=el(e.x2),e.y2=el(e.y2),e.w=el(e.x2-e.x1),e.h=el(e.y2-e.y1),e};Of.dirtyBoundingBoxCache=function(){for(var t=0;t<this.length;t++){var e=this[t]._private;e.bbCache=null,e.bbCachePosKey=null,e.bodyBounds=null,e.overlayBounds=null,e.labelBounds.all=null,e.labelBounds.source=null,e.labelBounds.target=null,e.labelBounds.main=null,e.labelBounds.sourceRot=null,e.labelBounds.targetRot=null,e.labelBounds.mainRot=null,e.arrowBounds.source=null,e.arrowBounds.target=null,e.arrowBounds["mid-source"]=null,e.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this};Of.boundingBoxAt=function(t){var e=this.nodes(),r=this.cy(),n=r.hasCompoundNodes(),i=r.collection();if(n&&(i=e.filter(function(h){return h.isParent()}),e=e.not(i)),Ur(t)){var a=t;t=o(function(){return a},"fn")}var s=o(function(f,d){return f._private.bbAtOldPos=t(f,d)},"storeOldPos"),l=o(function(f){return f._private.bbAtOldPos},"getOldPos");r.startBatch(),e.forEach(s).silentPositions(t),n&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var u=Oqe(this.boundingBox({useCache:!1}));return e.silentPositions(l),n&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),r.endBatch(),u};X1.boundingbox=X1.bb=X1.boundingBox;X1.renderedBoundingbox=X1.renderedBoundingBox;vKe=Of;Bb=a4={};Wme=o(function(e){e.uppercaseName=Rpe(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=Rpe(e.outerName),Bb[e.name]=o(function(){var n=this[0],i=n._private,a=i.cy,s=a._private.styleEnabled;if(n)if(s){if(n.isParent())return n.updateCompoundBounds(),i[e.autoName]||0;var l=n.pstyle(e.name);switch(l.strValue){case"label":return n.recalculateRenderedStyle(),i.rstyle[e.labelName]||0;default:return l.pfValue}}else return 1},"dimImpl"),Bb["outer"+e.uppercaseName]=o(function(){var n=this[0],i=n._private,a=i.cy,s=a._private.styleEnabled;if(n)if(s){var l=n[e.name](),u=n.pstyle("border-width").pfValue,h=2*n.padding();return l+u+h}else return 1},"outerDimImpl"),Bb["rendered"+e.uppercaseName]=o(function(){var n=this[0];if(n){var i=n[e.name]();return i*this.cy().zoom()}},"renderedDimImpl"),Bb["rendered"+e.uppercaseOuterName]=o(function(){var n=this[0];if(n){var i=n[e.outerName]();return i*this.cy().zoom()}},"renderedOuterDimImpl")},"defineDimFns");Wme({name:"width"});Wme({name:"height"});a4.padding=function(){var t=this[0],e=t._private;return t.isParent()?(t.updateCompoundBounds(),e.autoPadding!==void 0?e.autoPadding:t.pstyle("padding").pfValue):t.pstyle("padding").pfValue};a4.paddedHeight=function(){var t=this[0];return t.height()+2*t.padding()};a4.paddedWidth=function(){var t=this[0];return t.width()+2*t.padding()};xKe=a4,bKe=o(function(e,r){if(e.isEdge())return r(e)},"ifEdge"),wKe=o(function(e,r){if(e.isEdge()){var n=e.cy();return MS(r(e),n.zoom(),n.pan())}},"ifEdgeRenderedPosition"),TKe=o(function(e,r){if(e.isEdge()){var n=e.cy(),i=n.pan(),a=n.zoom();return r(e).map(function(s){return MS(s,a,i)})}},"ifEdgeRenderedPositions"),kKe=o(function(e){return e.renderer().getControlPoints(e)},"controlPoints"),EKe=o(function(e){return e.renderer().getSegmentPoints(e)},"segmentPoints"),SKe=o(function(e){return e.renderer().getSourceEndpoint(e)},"sourceEndpoint"),CKe=o(function(e){return e.renderer().getTargetEndpoint(e)},"targetEndpoint"),AKe=o(function(e){return e.renderer().getEdgeMidpoint(e)},"midpoint"),c0e={controlPoints:{get:kKe,mult:!0},segmentPoints:{get:EKe,mult:!0},sourceEndpoint:{get:SKe},targetEndpoint:{get:CKe},midpoint:{get:AKe}},_Ke=o(function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)},"renderedName"),DKe=Object.keys(c0e).reduce(function(t,e){var r=c0e[e],n=_Ke(e);return t[e]=function(){return bKe(this,r.get)},r.mult?t[n]=function(){return TKe(this,r.get)}:t[n]=function(){return wKe(this,r.get)},t},{}),LKe=rr({},mKe,vKe,xKe,DKe);qme=o(function(e,r){this.recycle(e,r)},"Event");o(Lb,"returnFalse");o(rS,"returnTrue");qme.prototype={instanceString:o(function(){return"event"},"instanceString"),recycle:o(function(e,r){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Lb,e!=null&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?rS:Lb):e!=null&&e.type?r=e:this.type=e,r!=null&&(this.originalEvent=r.originalEvent,this.type=r.type!=null?r.type:this.type,this.cy=r.cy,this.target=r.target,this.position=r.position,this.renderedPosition=r.renderedPosition,this.namespace=r.namespace,this.layout=r.layout),this.cy!=null&&this.position!=null&&this.renderedPosition==null){var n=this.position,i=this.cy.zoom(),a=this.cy.pan();this.renderedPosition={x:n.x*i+a.x,y:n.y*i+a.y}}this.timeStamp=e&&e.timeStamp||Date.now()},"recycle"),preventDefault:o(function(){this.isDefaultPrevented=rS;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},"preventDefault"),stopPropagation:o(function(){this.isPropagationStopped=rS;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},"stopPropagation"),stopImmediatePropagation:o(function(){this.isImmediatePropagationStopped=rS,this.stopPropagation()},"stopImmediatePropagation"),isDefaultPrevented:Lb,isPropagationStopped:Lb,isImmediatePropagationStopped:Lb};Yme=/^([^.]+)(\.(?:[^.]+))?$/,RKe=".*",Xme={qualifierCompare:o(function(e,r){return e===r},"qualifierCompare"),eventMatches:o(function(){return!0},"eventMatches"),addEventFields:o(function(){},"addEventFields"),callbackContext:o(function(e){return e},"callbackContext"),beforeEmit:o(function(){},"beforeEmit"),afterEmit:o(function(){},"afterEmit"),bubble:o(function(){return!1},"bubble"),parent:o(function(){return null},"parent"),context:null},u0e=Object.keys(Xme),NKe={};o($S,"Emitter");Nf=$S.prototype,jme=o(function(e,r,n,i,a,s,l){si(i)&&(a=i,i=null),l&&(s==null?s=l:s=rr({},s,l));for(var u=En(n)?n:n.split(/\s+/),h=0;h<u.length;h++){var f=u[h];if(!Af(f)){var d=f.match(Yme);if(d){var p=d[1],m=d[2]?d[2]:null,g=r(e,f,p,m,i,a,s);if(g===!1)break}}}},"forEachEvent"),h0e=o(function(e,r){return e.addEventFields(e.context,r),new qme(r.type,r)},"makeEventObj"),MKe=o(function(e,r,n){if(eWe(n)){r(e,n);return}else if(Ur(n)){r(e,h0e(e,n));return}for(var i=En(n)?n:n.split(/\s+/),a=0;a<i.length;a++){var s=i[a];if(!Af(s)){var l=s.match(Yme);if(l){var u=l[1],h=l[2]?l[2]:null,f=h0e(e,{type:u,namespace:h,target:e.context});r(e,f)}}}},"forEachEventObj");Nf.on=Nf.addListener=function(t,e,r,n,i){return jme(this,function(a,s,l,u,h,f,d){si(f)&&a.listeners.push({event:s,callback:f,type:l,namespace:u,qualifier:h,conf:d})},t,e,r,n,i),this};Nf.one=function(t,e,r,n){return this.on(t,e,r,n,{one:!0})};Nf.removeListener=Nf.off=function(t,e,r,n){var i=this;this.emitting!==0&&(this.listeners=lqe(this.listeners));for(var a=this.listeners,s=o(function(h){var f=a[h];jme(i,function(d,p,m,g,y,v){if((f.type===m||t==="*")&&(!g&&f.namespace!==".*"||f.namespace===g)&&(!y||d.qualifierCompare(f.qualifier,y))&&(!v||f.callback===v))return a.splice(h,1),!1},t,e,r,n)},"_loop"),l=a.length-1;l>=0;l--)s(l);return this};Nf.removeAllListeners=function(){return this.removeListener("*")};Nf.emit=Nf.trigger=function(t,e,r){var n=this.listeners,i=n.length;return this.emitting++,En(e)||(e=[e]),MKe(this,function(a,s){r!=null&&(n=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],i=n.length);for(var l=o(function(f){var d=n[f];if(d.type===s.type&&(!d.namespace||d.namespace===s.namespace||d.namespace===RKe)&&a.eventMatches(a.context,d,s)){var p=[s];e!=null&&uqe(p,e),a.beforeEmit(a.context,d,s),d.conf&&d.conf.one&&(a.listeners=a.listeners.filter(function(y){return y!==d}));var m=a.callbackContext(a.context,d,s),g=d.callback.apply(m,p);a.afterEmit(a.context,d,s),g===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u<i;u++)l(u);a.bubble(a.context)&&!s.isPropagationStopped()&&a.parent(a.context).emit(s,e)},t),this.emitting--,this};IKe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&t4(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e.cy(),r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext"),beforeEmit:o(function(e,r){r.conf&&r.conf.once&&r.conf.onceCollection.removeListener(r.event,r.qualifier,r.callback)},"beforeEmit"),bubble:o(function(){return!0},"bubble"),parent:o(function(e){return e.isChild()?e.parent():e.cy()},"parent")},nS=o(function(e){return Zt(e)?new Lf(e):e},"argSelector"),Kme={createEmitter:o(function(){for(var e=0;e<this.length;e++){var r=this[e],n=r._private;n.emitter||(n.emitter=new $S(IKe,r))}return this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().on(e,i,n)}return this},"on"),removeListener:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().removeListener(e,i,n)}return this},"removeListener"),removeAllListeners:o(function(){for(var e=0;e<this.length;e++){var r=this[e];r.emitter().removeAllListeners()}return this},"removeAllListeners"),one:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().one(e,i,n)}return this},"one"),once:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().on(e,i,n,{once:!0,onceCollection:this})}},"once"),emit:o(function(e,r){for(var n=0;n<this.length;n++){var i=this[n];i.emitter().emit(e,r)}return this},"emit"),emitAndNotify:o(function(e,r){if(this.length!==0)return this.cy().notify(e,this),this.emit(e,r),this},"emitAndNotify")};cn.eventAliasesOn(Kme);Qme={nodes:o(function(e){return this.filter(function(r){return r.isNode()}).filter(e)},"nodes"),edges:o(function(e){return this.filter(function(r){return r.isEdge()}).filter(e)},"edges"),byGroup:o(function(){for(var e=this.spawn(),r=this.spawn(),n=0;n<this.length;n++){var i=this[n];i.isNode()?e.push(i):r.push(i)}return{nodes:e,edges:r}},"byGroup"),filter:o(function(e,r){if(e===void 0)return this;if(Zt(e)||go(e))return new Lf(e).filter(this);if(si(e)){for(var n=this.spawn(),i=this,a=0;a<i.length;a++){var s=i[a],l=r?e.apply(r,[s,a,i]):e(s,a,i);l&&n.push(s)}return n}return this.spawn()},"filter"),not:o(function(e){if(e){Zt(e)&&(e=this.filter(e));for(var r=this.spawn(),n=0;n<this.length;n++){var i=this[n],a=e.has(i);a||r.push(i)}return r}else return this},"not"),absoluteComplement:o(function(){var e=this.cy();return e.mutableElements().not(this)},"absoluteComplement"),intersect:o(function(e){if(Zt(e)){var r=e;return this.filter(r)}for(var n=this.spawn(),i=this,a=e,s=this.length<e.length,l=s?i:a,u=s?a:i,h=0;h<l.length;h++){var f=l[h];u.has(f)&&n.push(f)}return n},"intersect"),xor:o(function(e){var r=this._private.cy;Zt(e)&&(e=r.$(e));var n=this.spawn(),i=this,a=e,s=o(function(u,h){for(var f=0;f<u.length;f++){var d=u[f],p=d._private.data.id,m=h.hasElementWithId(p);m||n.push(d)}},"add");return s(i,a),s(a,i),n},"xor"),diff:o(function(e){var r=this._private.cy;Zt(e)&&(e=r.$(e));var n=this.spawn(),i=this.spawn(),a=this.spawn(),s=this,l=e,u=o(function(f,d,p){for(var m=0;m<f.length;m++){var g=f[m],y=g._private.data.id,v=d.hasElementWithId(y);v?a.merge(g):p.push(g)}},"add");return u(s,l,n),u(l,s,i),{left:n,right:i,both:a}},"diff"),add:o(function(e){var r=this._private.cy;if(!e)return this;if(Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=this.spawnSelf(),a=0;a<e.length;a++){var s=e[a],l=!this.has(s);l&&i.push(s)}return i},"add"),merge:o(function(e){var r=this._private,n=r.cy;if(!e)return this;if(e&&Zt(e)){var i=e;e=n.mutableElements().filter(i)}for(var a=r.map,s=0;s<e.length;s++){var l=e[s],u=l._private.data.id,h=!a.has(u);if(h){var f=this.length++;this[f]=l,a.set(u,{ele:l,index:f})}}return this},"merge"),unmergeAt:o(function(e){var r=this[e],n=r.id(),i=this._private,a=i.map;this[e]=void 0,a.delete(n);var s=e===this.length-1;if(this.length>1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,n=e._private.data.id,i=r.map,a=i.get(n);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=0;i<e.length;i++)this.unmergeOne(e[i]);return this},"unmerge"),unmergeBy:o(function(e){for(var r=this.length-1;r>=0;r--){var n=this[r];e(n)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var n=[],i=this,a=0;a<i.length;a++){var s=i[a],l=r?e.apply(r,[s,a,i]):e(s,a,i);n.push(l)}return n},"map"),reduce:o(function(e,r){for(var n=r,i=this,a=0;a<i.length;a++)n=e(n,i[a],a,i);return n},"reduce"),max:o(function(e,r){for(var n=-1/0,i,a=this,s=0;s<a.length;s++){var l=a[s],u=r?e.apply(r,[l,s,a]):e(l,s,a);u>n&&(n=u,i=l)}return{value:n,ele:i}},"max"),min:o(function(e,r){for(var n=1/0,i,a=this,s=0;s<a.length;s++){var l=a[s],u=r?e.apply(r,[l,s,a]):e(l,s,a);u<n&&(n=u,i=l)}return{value:n,ele:i}},"min")},Qr=Qme;Qr.u=Qr["|"]=Qr["+"]=Qr.union=Qr.or=Qr.add;Qr["\\"]=Qr["!"]=Qr["-"]=Qr.difference=Qr.relativeComplement=Qr.subtract=Qr.not;Qr.n=Qr["&"]=Qr["."]=Qr.and=Qr.intersection=Qr.intersect;Qr["^"]=Qr["(+)"]=Qr["(-)"]=Qr.symmetricDifference=Qr.symdiff=Qr.xor;Qr.fnFilter=Qr.filterFn=Qr.stdFilter=Qr.filter;Qr.complement=Qr.abscomp=Qr.absoluteComplement;OKe={isNode:o(function(){return this.group()==="nodes"},"isNode"),isEdge:o(function(){return this.group()==="edges"},"isEdge"),isLoop:o(function(){return this.isEdge()&&this.source()[0]===this.target()[0]},"isLoop"),isSimple:o(function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},"isSimple"),group:o(function(){var e=this[0];if(e)return e._private.group},"group")},Zme=o(function(e,r){var n=e.cy(),i=n.hasCompoundNodes();function a(f){var d=f.pstyle("z-compound-depth");return d.value==="auto"?i?f.zDepth():0:d.value==="bottom"?-1:d.value==="top"?tB:0}o(a,"getDepth");var s=a(e)-a(r);if(s!==0)return s;function l(f){var d=f.pstyle("z-index-compare");return d.value==="auto"&&f.isNode()?1:0}o(l,"getEleDepth");var u=l(e)-l(r);if(u!==0)return u;var h=e.pstyle("z-index").value-r.pstyle("z-index").value;return h!==0?h:e.poolIndex()-r.poolIndex()},"zIndexSort"),ES={forEach:o(function(e,r){if(si(e))for(var n=this.length,i=0;i<n;i++){var a=this[i],s=r?e.apply(r,[a,i,this]):e(a,i,this);if(s===!1)break}return this},"forEach"),toArray:o(function(){for(var e=[],r=0;r<this.length;r++)e.push(this[r]);return e},"toArray"),slice:o(function(e,r){var n=[],i=this.length;r==null&&(r=i),e==null&&(e=0),e<0&&(e=i+e),r<0&&(r=i+r);for(var a=e;a>=0&&a<r&&a<i;a++)n.push(this[a]);return this.spawn(n)},"slice"),size:o(function(){return this.length},"size"),eq:o(function(e){return this[e]||this.spawn()},"eq"),first:o(function(){return this[0]||this.spawn()},"first"),last:o(function(){return this[this.length-1]||this.spawn()},"last"),empty:o(function(){return this.length===0},"empty"),nonempty:o(function(){return!this.empty()},"nonempty"),sort:o(function(e){if(!si(e))return this;var r=this.toArray().sort(e);return this.spawn(r)},"sort"),sortByZIndex:o(function(){return this.sort(Zme)},"sortByZIndex"),zDepth:o(function(){var e=this[0];if(e){var r=e._private,n=r.group;if(n==="nodes"){var i=r.data.parent?e.parents().size():0;return e.isParent()?i:tB-1}else{var a=r.source,s=r.target,l=a.zDepth(),u=s.zDepth();return Math.max(l,u,0)}}},"zDepth")};ES.each=ES.forEach;PKe=o(function(){var e="undefined",r=(typeof Symbol>"u"?"undefined":Wi(Symbol))!=e&&Wi(Symbol.iterator)!=e;r&&(ES[Symbol.iterator]=function(){var n=this,i={value:void 0,done:!1},a=0,s=this.length;return X0e({next:o(function(){return a<s?i.value=n[a++]:(i.value=void 0,i.done=!0),i},"next")},Symbol.iterator,function(){return this})})},"defineSymbolIterator");PKe();BKe=la({nodeDimensionsIncludeLabels:!1}),fS={layoutDimensions:o(function(e){e=BKe(e);var r;if(!this.takesUpSpace())r={w:0,h:0};else if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();r={w:n.w,h:n.h}}else r={w:this.outerWidth(),h:this.outerHeight()};return(r.w===0||r.h===0)&&(r.w=r.h=1),r},"layoutDimensions"),layoutPositions:o(function(e,r,n){var i=this.nodes().filter(function(T){return!T.isParent()}),a=this.cy(),s=r.eles,l=o(function(E){return E.id()},"getMemoizeKey"),u=Ub(n,l);e.emit({type:"layoutstart",layout:e}),e.animations=[];var h=o(function(E,A,S){var _={x:A.x1+A.w/2,y:A.y1+A.h/2},I={x:(S.x-_.x)*E,y:(S.y-_.y)*E};return{x:_.x+I.x,y:_.y+I.y}},"calculateSpacing"),f=r.spacingFactor&&r.spacingFactor!==1,d=o(function(){if(!f)return null;for(var E=Hs(),A=0;A<i.length;A++){var S=i[A],_=u(S,A);Fqe(E,_.x,_.y)}return E},"spacingBb"),p=d(),m=Ub(function(T,E){var A=u(T,E);if(f){var S=Math.abs(r.spacingFactor);A=h(S,p,A)}return r.transform!=null&&(A=r.transform(T,A)),A},l);if(r.animate){for(var g=0;g<i.length;g++){var y=i[g],v=m(y,g),x=r.animateFilter==null||r.animateFilter(y,g);if(x){var b=y.animation({position:v,duration:r.animationDuration,easing:r.animationEasing});e.animations.push(b)}else y.position(v)}if(r.fit){var w=a.animation({fit:{boundingBox:s.boundingBoxAt(m),padding:r.padding},duration:r.animationDuration,easing:r.animationEasing});e.animations.push(w)}else if(r.zoom!==void 0&&r.pan!==void 0){var C=a.animation({zoom:r.zoom,pan:r.pan,duration:r.animationDuration,easing:r.animationEasing});e.animations.push(C)}e.animations.forEach(function(T){return T.play()}),e.one("layoutready",r.ready),e.emit({type:"layoutready",layout:e}),ey.all(e.animations.map(function(T){return T.promise()})).then(function(){e.one("layoutstop",r.stop),e.emit({type:"layoutstop",layout:e})})}else i.positions(m),r.fit&&a.fit(r.eles,r.padding),r.zoom!=null&&a.zoom(r.zoom),r.pan&&a.pan(r.pan),e.one("layoutready",r.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",r.stop),e.emit({type:"layoutstop",layout:e});return this},"layoutPositions"),layout:o(function(e){var r=this.cy();return r.makeLayout(rr({},e,{eles:this}))},"layout")};fS.createLayout=fS.makeLayout=fS.layout;o(Jme,"styleCache");o(zS,"cacheStyleFunction");o(GS,"cachePrototypeStyleFunction");Ta={recalculateRenderedStyle:o(function(e){var r=this.cy(),n=r.renderer(),i=r.styleEnabled();return n&&i&&n.recalculateRenderedStyle(this,e),this},"recalculateRenderedStyle"),dirtyStyleCache:o(function(){var e=this.cy(),r=o(function(a){return a._private.styleCache=null},"dirty");if(e.hasCompoundNodes()){var n;n=this.spawnSelf().merge(this.descendants()).merge(this.parents()),n.merge(n.connectedEdges()),n.forEach(r)}else this.forEach(function(i){r(i),i.connectedEdges().forEach(r)});return this},"dirtyStyleCache"),updateStyle:o(function(e){var r=this._private.cy;if(!r.styleEnabled())return this;if(r.batching()){var n=r._private.batchStyleEles;return n.merge(this),this}var i=r.hasCompoundNodes(),a=this;e=!!(e||e===void 0),i&&(a=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var s=a;return e?s.emitAndNotify("style"):s.emit("style"),a.forEach(function(l){return l._private.styleDirty=!0}),this},"updateStyle"),cleanStyle:o(function(){var e=this.cy();if(e.styleEnabled())for(var r=0;r<this.length;r++){var n=this[r];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},"cleanStyle"),parsedStyle:o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,n=this[0],i=n.cy();if(i.styleEnabled()&&n){n._private.styleDirty&&(n._private.styleDirty=!1,i.style().apply(n));var a=n._private.style[e];return a??(r?i.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var n=r.pstyle(e);return n.pfValue!==void 0?n.pfValue:n.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=this[0];if(n)return r.style().getRenderedStyle(n,e)},"renderedStyle"),style:o(function(e,r){var n=this.cy();if(!n.styleEnabled())return this;var i=!1,a=n.style();if(Ur(e)){var s=e;a.applyBypass(this,s,i),this.emitAndNotify("style")}else if(Zt(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,i),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=!1,i=r.style(),a=this;if(e===void 0)for(var s=0;s<a.length;s++){var l=a[s];i.removeAllBypasses(l,n)}else{e=e.split(/\s+/);for(var u=0;u<a.length;u++){var h=a[u];i.removeBypasses(h,e,n)}}return this.emitAndNotify("style"),this},"removeStyle"),show:o(function(){return this.css("display","element"),this},"show"),hide:o(function(){return this.css("display","none"),this},"hide"),effectiveOpacity:o(function(){var e=this.cy();if(!e.styleEnabled())return 1;var r=e.hasCompoundNodes(),n=this[0];if(n){var i=n._private,a=n.pstyle("opacity").value;if(!r)return a;var s=i.data.parent?n.parents():null;if(s)for(var l=0;l<s.length;l++){var u=s[l],h=u.pstyle("opacity").value;a=h*a}return a}},"effectiveOpacity"),transparent:o(function(){var e=this.cy();if(!e.styleEnabled())return!1;var r=this[0],n=r.cy().hasCompoundNodes();if(r)return n?r.effectiveOpacity()===0:r.pstyle("opacity").value===0},"transparent"),backgrounding:o(function(){var e=this.cy();if(!e.styleEnabled())return!1;var r=this[0];return!!r._private.backgrounding},"backgrounding")};o(AP,"checkCompound");o(dB,"defineDerivedStateFunction");iy=zS("eleTakesUpSpace",function(t){return t.pstyle("display").value==="element"&&t.width()!==0&&(t.isNode()?t.height()!==0:!0)});Ta.takesUpSpace=GS("takesUpSpace",dB({ok:iy}));FKe=zS("eleInteractive",function(t){return t.pstyle("events").value==="yes"&&t.pstyle("visibility").value==="visible"&&iy(t)}),$Ke=zS("parentInteractive",function(t){return t.pstyle("visibility").value==="visible"&&iy(t)});Ta.interactive=GS("interactive",dB({ok:FKe,parentOk:$Ke,edgeOkViaNode:iy}));Ta.noninteractive=function(){var t=this[0];if(t)return!t.interactive()};zKe=zS("eleVisible",function(t){return t.pstyle("visibility").value==="visible"&&t.pstyle("opacity").pfValue!==0&&iy(t)}),GKe=iy;Ta.visible=GS("visible",dB({ok:zKe,edgeOkViaNode:GKe}));Ta.hidden=function(){var t=this[0];if(t)return!t.visible()};Ta.isBundledBezier=GS("isBundledBezier",function(){return this.cy().styleEnabled()?!this.removed()&&this.pstyle("curve-style").value==="bezier"&&this.takesUpSpace():!1});Ta.bypass=Ta.css=Ta.style;Ta.renderedCss=Ta.renderedStyle;Ta.removeBypass=Ta.removeCss=Ta.removeStyle;Ta.pstyle=Ta.parsedStyle;Cf={};o(f0e,"defineSwitchFunction");o(ay,"defineSwitchSet");ay({field:"locked",overrideField:o(function(e){return e.cy().autolock()?!0:void 0},"overrideField"),on:"lock",off:"unlock"});ay({field:"grabbable",overrideField:o(function(e){return e.cy().autoungrabify()||e.pannable()?!1:void 0},"overrideField"),on:"grabify",off:"ungrabify"});ay({field:"selected",ableField:"selectable",overrideAble:o(function(e){return e.cy().autounselectify()?!1:void 0},"overrideAble"),on:"select",off:"unselect"});ay({field:"selectable",overrideField:o(function(e){return e.cy().autounselectify()?!1:void 0},"overrideField"),on:"selectify",off:"unselectify"});Cf.deselect=Cf.unselect;Cf.grabbed=function(){var t=this[0];if(t)return t._private.grabbed};ay({field:"active",on:"activate",off:"unactivate"});ay({field:"pannable",on:"panify",off:"unpanify"});Cf.inactive=function(){var t=this[0];if(t)return!t._private.active};$a={},d0e=o(function(e){return o(function(n){for(var i=this,a=[],s=0;s<i.length;s++){var l=i[s];if(l.isNode()){for(var u=!1,h=l.connectedEdges(),f=0;f<h.length;f++){var d=h[f],p=d.source(),m=d.target();if(e.noIncomingEdges&&m===l&&p!==l||e.noOutgoingEdges&&p===l&&m!==l){u=!0;break}}u||a.push(l)}}return this.spawn(a,!0).filter(n)},"dagExtremityImpl")},"defineDagExtremity"),p0e=o(function(e){return function(r){for(var n=this,i=[],a=0;a<n.length;a++){var s=n[a];if(s.isNode())for(var l=s.connectedEdges(),u=0;u<l.length;u++){var h=l[u],f=h.source(),d=h.target();e.outgoing&&f===s?(i.push(h),i.push(d)):e.incoming&&d===s&&(i.push(h),i.push(f))}}return this.spawn(i,!0).filter(r)}},"defineDagOneHop"),m0e=o(function(e){return function(r){for(var n=this,i=[],a={};;){var s=e.outgoing?n.outgoers():n.incomers();if(s.length===0)break;for(var l=!1,u=0;u<s.length;u++){var h=s[u],f=h.id();a[f]||(a[f]=!0,i.push(h),l=!0)}if(!l)break;n=s}return this.spawn(i,!0).filter(r)}},"defineDagAllHops");$a.clearTraversalCache=function(){for(var t=0;t<this.length;t++)this[t]._private.traversalCache=null};rr($a,{roots:d0e({noIncomingEdges:!0}),leaves:d0e({noOutgoingEdges:!0}),outgoers:tl(p0e({outgoing:!0}),"outgoers"),successors:m0e({outgoing:!0}),incomers:tl(p0e({incoming:!0}),"incomers"),predecessors:m0e({incoming:!0})});rr($a,{neighborhood:tl(function(t){for(var e=[],r=this.nodes(),n=0;n<r.length;n++)for(var i=r[n],a=i.connectedEdges(),s=0;s<a.length;s++){var l=a[s],u=l.source(),h=l.target(),f=i===u?h:u;f.length>0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});$a.neighbourhood=$a.neighborhood;$a.closedNeighbourhood=$a.closedNeighborhood;$a.openNeighbourhood=$a.openNeighborhood;rr($a,{source:tl(o(function(e){var r=this[0],n;return r&&(n=r._private.source||r.cy().collection()),n&&e?n.filter(e):n},"sourceImpl"),"source"),target:tl(o(function(e){var r=this[0],n;return r&&(n=r._private.target||r.cy().collection()),n&&e?n.filter(e):n},"targetImpl"),"target"),sources:g0e({attr:"source"}),targets:g0e({attr:"target"})});o(g0e,"defineSourceFunction");rr($a,{edgesWith:tl(y0e(),"edgesWith"),edgesTo:tl(y0e({thisIsSrc:!0}),"edgesTo")});o(y0e,"defineEdgesWithFunction");rr($a,{connectedEdges:tl(function(t){for(var e=[],r=this,n=0;n<r.length;n++){var i=r[n];if(i.isNode())for(var a=i._private.edges,s=0;s<a.length;s++){var l=a[s];e.push(l)}}return this.spawn(e,!0).filter(t)},"connectedEdges"),connectedNodes:tl(function(t){for(var e=[],r=this,n=0;n<r.length;n++){var i=r[n];i.isEdge()&&(e.push(i.source()[0]),e.push(i.target()[0]))}return this.spawn(e,!0).filter(t)},"connectedNodes"),parallelEdges:tl(v0e(),"parallelEdges"),codirectedEdges:tl(v0e({codirected:!0}),"codirectedEdges")});o(v0e,"defineParallelEdgesFunction");rr($a,{components:o(function(e){var r=this,n=r.cy(),i=n.collection(),a=e==null?r.nodes():e.nodes(),s=[];e!=null&&a.empty()&&(a=e.sources());var l=o(function(f,d){i.merge(f),a.unmerge(f),d.merge(f)},"visitInComponent");if(a.empty())return r.spawn();var u=o(function(){var f=n.collection();s.push(f);var d=a[0];l(d,f),r.bfs({directed:!1,roots:d,visit:o(function(m){return l(m,f)},"visit")}),f.forEach(function(p){p.connectedEdges().forEach(function(m){r.has(m)&&f.has(m.source())&&f.has(m.target())&&f.merge(m)})})},"_loop");do u();while(a.length>0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});$a.componentsOf=$a.components;ka=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){ai("A collection must have a reference to the core");return}var a=new Xc,s=!1;if(!r)r=[];else if(r.length>0&&Ur(r[0])&&!t4(r[0])){s=!0;for(var l=[],u=new J1,h=0,f=r.length;h<f;h++){var d=r[h];d.data==null&&(d.data={});var p=d.data;if(p.id==null)p.id=fme();else if(e.hasElementWithId(p.id)||u.has(p.id))continue;var m=new NS(e,d,!1);l.push(m),u.add(p.id)}r=l}this.length=0;for(var g=0,y=r.length;g<y;g++){var v=r[g][0];if(v!=null){var x=v._private.data.id;(!n||!a.has(x))&&(n&&a.set(x,{index:this.length,ele:v}),this[this.length]=v,this.length++)}}this._private={eles:this,cy:e,get map(){return this.lazyMap==null&&this.rebuildMap(),this.lazyMap},set map(b){this.lazyMap=b},rebuildMap:o(function(){for(var w=this.lazyMap=new Xc,C=this.eles,T=0;T<C.length;T++){var E=C[T];w.set(E.id(),{index:T,ele:E})}},"rebuildMap")},n&&(this._private.map=a),s&&!i&&this.restore()},"Collection"),Mn=NS.prototype=ka.prototype=Object.create(Array.prototype);Mn.instanceString=function(){return"collection"};Mn.spawn=function(t,e){return new ka(this.cy(),t,e)};Mn.spawnSelf=function(){return this.spawn(this)};Mn.cy=function(){return this._private.cy};Mn.renderer=function(){return this._private.cy.renderer()};Mn.element=function(){return this[0]};Mn.collection=function(){return Q0e(this)?this:new ka(this._private.cy,[this])};Mn.unique=function(){return new ka(this._private.cy,this,!0)};Mn.hasElementWithId=function(t){return t=""+t,this._private.map.has(t)};Mn.getElementById=function(t){t=""+t;var e=this._private.cy,r=this._private.map.get(t);return r?r.ele:new ka(e)};Mn.$id=Mn.getElementById;Mn.poolIndex=function(){var t=this._private.cy,e=t._private.elements,r=this[0]._private.data.id;return e._private.map.get(r).index};Mn.indexOf=function(t){var e=t[0]._private.data.id;return this._private.map.get(e).index};Mn.indexOfId=function(t){return t=""+t,this._private.map.get(t).index};Mn.json=function(t){var e=this.element(),r=this.cy();if(e==null&&t)return this;if(e!=null){var n=e._private;if(Ur(t)){if(r.startBatch(),t.data){e.data(t.data);var i=n.data;if(e.isEdge()){var a=!1,s={},l=t.data.source,u=t.data.target;l!=null&&l!=i.source&&(s.source=""+l,a=!0),u!=null&&u!=i.target&&(s.target=""+u,a=!0),a&&(e=e.move(s))}else{var h="parent"in t.data,f=t.data.parent;h&&(f!=null||i.parent!=null)&&f!=i.parent&&(f===void 0&&(f=null),f!=null&&(f=""+f),e=e.move({parent:f}))}}t.position&&e.position(t.position);var d=o(function(y,v,x){var b=t[y];b!=null&&b!==n[y]&&(b?e[v]():e[x]())},"checkSwitch");return d("removed","remove","restore"),d("selected","select","unselect"),d("selectable","selectify","unselectify"),d("locked","lock","unlock"),d("grabbable","grabify","ungrabify"),d("pannable","panify","unpanify"),t.classes!=null&&e.classes(t.classes),r.endBatch(),this}else if(t===void 0){var p={data:Yc(n.data),position:Yc(n.position),group:n.group,removed:n.removed,selected:n.selected,selectable:n.selectable,locked:n.locked,grabbable:n.grabbable,pannable:n.pannable,classes:null};p.classes="";var m=0;return n.classes.forEach(function(g){return p.classes+=m++===0?g:" "+g}),p}}};Mn.jsons=function(){for(var t=[],e=0;e<this.length;e++){var r=this[e],n=r.json();t.push(n)}return t};Mn.clone=function(){for(var t=this.cy(),e=[],r=0;r<this.length;r++){var n=this[r],i=n.json(),a=new NS(t,i,!1);e.push(a)}return new ka(t,e)};Mn.copy=Mn.clone;Mn.restore=function(){for(var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=r.cy(),i=n._private,a=[],s=[],l,u=0,h=r.length;u<h;u++){var f=r[u];e&&!f.removed()||(f.isNode()?a.push(f):s.push(f))}l=a.concat(s);var d,p=o(function(){l.splice(d,1),d--},"removeFromElements");for(d=0;d<l.length;d++){var m=l[d],g=m._private,y=g.data;if(m.clearTraversalCache(),!(!e&&!g.removed)){if(y.id===void 0)y.id=fme();else if(Ct(y.id))y.id=""+y.id;else if(Af(y.id)||!Zt(y.id)){ai("Can not create element with invalid string ID `"+y.id+"`"),p();continue}else if(n.hasElementWithId(y.id)){ai("Can not create second element with ID `"+y.id+"`"),p();continue}}var v=y.id;if(m.isNode()){var x=g.position;x.x==null&&(x.x=0),x.y==null&&(x.y=0)}if(m.isEdge()){for(var b=m,w=["source","target"],C=w.length,T=!1,E=0;E<C;E++){var A=w[E],S=y[A];Ct(S)&&(S=y[A]=""+y[A]),S==null||S===""?(ai("Can not create edge `"+v+"` with unspecified "+A),T=!0):n.hasElementWithId(S)||(ai("Can not create edge `"+v+"` with nonexistant "+A+" `"+S+"`"),T=!0)}if(T){p();continue}var _=n.getElementById(y.source),I=n.getElementById(y.target);_.same(I)?_._private.edges.push(b):(_._private.edges.push(b),I._private.edges.push(b)),b._private.source=_,b._private.target=I}g.map=new Xc,g.map.set(v,{ele:m,index:0}),g.removed=!1,e&&n.addToPool(m)}for(var D=0;D<a.length;D++){var k=a[D],L=k._private.data;Ct(L.parent)&&(L.parent=""+L.parent);var R=L.parent,O=R!=null;if(O||k._private.parent){var M=k._private.parent?n.collection().merge(k._private.parent):n.getElementById(R);if(M.empty())L.parent=void 0;else if(M[0].removed())un("Node added with missing parent, reference to parent removed"),L.parent=void 0,k._private.parent=null;else{for(var B=!1,F=M;!F.empty();){if(k.same(F)){B=!0,L.parent=void 0;break}F=F.parent()}B||(M[0]._private.children.push(k),k._private.parent=M[0],i.hasCompoundNodes=!0)}}}if(l.length>0){for(var P=l.length===r.length?r:new ka(n,l),z=0;z<P.length;z++){var $=P[z];$.isNode()||($.parallelEdges().clearTraversalCache(),$.source().clearTraversalCache(),$.target().clearTraversalCache())}var H;i.hasCompoundNodes?H=n.collection().merge(P).merge(P.connectedNodes()).merge(P.parent()):H=P,H.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(t),t?P.emitAndNotify("add"):e&&P.emit("add")}return r};Mn.removed=function(){var t=this[0];return t&&t._private.removed};Mn.inside=function(){var t=this[0];return t&&!t._private.removed};Mn.remove=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=[],i={},a=r._private.cy;function s(R){for(var O=R._private.edges,M=0;M<O.length;M++)u(O[M])}o(s,"addConnectedEdges");function l(R){for(var O=R._private.children,M=0;M<O.length;M++)u(O[M])}o(l,"addChildren");function u(R){var O=i[R.id()];e&&R.removed()||O||(i[R.id()]=!0,R.isNode()?(n.push(R),s(R),l(R)):n.unshift(R))}o(u,"add");for(var h=0,f=r.length;h<f;h++){var d=r[h];u(d)}function p(R,O){var M=R._private.edges;Df(M,O),R.clearTraversalCache()}o(p,"removeEdgeRef");function m(R){R.clearTraversalCache()}o(m,"removeParallelRef");var g=[];g.ids={};function y(R,O){O=O[0],R=R[0];var M=R._private.children,B=R.id();Df(M,O),O._private.parent=null,g.ids[B]||(g.ids[B]=!0,g.push(R))}o(y,"removeChildRef"),r.dirtyCompoundBoundsCache(),e&&a.removeFromPool(n);for(var v=0;v<n.length;v++){var x=n[v];if(x.isEdge()){var b=x.source()[0],w=x.target()[0];p(b,x),p(w,x);for(var C=x.parallelEdges(),T=0;T<C.length;T++){var E=C[T];m(E),E.isBundledBezier()&&E.dirtyBoundingBoxCache()}}else{var A=x.parent();A.length!==0&&y(A,x)}e&&(x._private.removed=!0)}var S=a._private.elements;a._private.hasCompoundNodes=!1;for(var _=0;_<S.length;_++){var I=S[_];if(I.isParent()){a._private.hasCompoundNodes=!0;break}}var D=new ka(this.cy(),n);D.size()>0&&(t?D.emitAndNotify("remove"):e&&D.emit("remove"));for(var k=0;k<g.length;k++){var L=g[k];(!e||!L.removed())&&L.updateStyle()}return D};Mn.move=function(t){var e=this._private.cy,r=this,n=!1,i=!1,a=o(function(g){return g==null?g:""+g},"toString");if(t.source!==void 0||t.target!==void 0){var s=a(t.source),l=a(t.target),u=s!=null&&e.hasElementWithId(s),h=l!=null&&e.hasElementWithId(l);(u||h)&&(e.batch(function(){r.remove(n,i),r.emitAndNotify("moveout");for(var m=0;m<r.length;m++){var g=r[m],y=g._private.data;g.isEdge()&&(u&&(y.source=s),h&&(y.target=l))}r.restore(n,i)}),r.emitAndNotify("move"))}else if(t.parent!==void 0){var f=a(t.parent),d=f===null||e.hasElementWithId(f);if(d){var p=f===null?void 0:f;e.batch(function(){var m=r.remove(n,i);m.emitAndNotify("moveout");for(var g=0;g<r.length;g++){var y=r[g],v=y._private.data;y.isNode()&&(v.parent=p)}m.restore(n,i)}),r.emitAndNotify("move")}}return this};[Sme,Zje,hS,Sf,Z1,pKe,FS,LKe,Kme,Qme,OKe,ES,fS,Ta,Cf,$a].forEach(function(t){rr(Mn,t)});VKe={add:o(function(e){var r,n=this;if(go(e)){var i=e;if(i._private.cy===n)r=i.restore();else{for(var a=[],s=0;s<i.length;s++){var l=i[s];a.push(l.json())}r=new ka(n,a)}}else if(En(e)){var u=e;r=new ka(n,u)}else if(Ur(e)&&(En(e.nodes)||En(e.edges))){for(var h=e,f=[],d=["nodes","edges"],p=0,m=d.length;p<m;p++){var g=d[p],y=h[g];if(En(y))for(var v=0,x=y.length;v<x;v++){var b=rr({group:g},y[v]);f.push(b)}}r=new ka(n,f)}else{var w=e;r=new NS(n,w).collection()}return r},"add"),remove:o(function(e){if(!go(e)){if(Zt(e)){var r=e;e=this.$(r)}}return e.remove()},"remove")};o(UKe,"generateCubicBezier");HKe=function(){function t(n){return-n.tension*n.x-n.friction*n.v}o(t,"springAccelerationForState");function e(n,i,a){var s={x:n.x+a.dx*i,v:n.v+a.dv*i,tension:n.tension,friction:n.friction};return{dx:s.v,dv:t(s)}}o(e,"springEvaluateStateWithDerivative");function r(n,i){var a={dx:n.v,dv:t(n)},s=e(n,i*.5,a),l=e(n,i*.5,s),u=e(n,i,l),h=1/6*(a.dx+2*(s.dx+l.dx)+u.dx),f=1/6*(a.dv+2*(s.dv+l.dv)+u.dv);return n.x=n.x+h*i,n.v=n.v+f*i,n}return o(r,"springIntegrateState"),o(function n(i,a,s){var l={x:-1,v:0,tension:null,friction:null},u=[0],h=0,f=1/1e4,d=16/1e3,p,m,g;for(i=parseFloat(i)||500,a=parseFloat(a)||20,s=s||null,l.tension=i,l.friction=a,p=s!==null,p?(h=n(i,a),m=h/s*d):m=d;g=r(g||l,m),u.push(1+g.x),h+=16,Math.abs(g.x)>f&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")}(),Nn=o(function(e,r,n,i){var a=UKe(e,r,n,i);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),dS={linear:o(function(e,r,n){return e+(r-e)*n},"linear"),ease:Nn(.25,.1,.25,1),"ease-in":Nn(.42,0,1,1),"ease-out":Nn(0,0,.58,1),"ease-in-out":Nn(.42,0,.58,1),"ease-in-sine":Nn(.47,0,.745,.715),"ease-out-sine":Nn(.39,.575,.565,1),"ease-in-out-sine":Nn(.445,.05,.55,.95),"ease-in-quad":Nn(.55,.085,.68,.53),"ease-out-quad":Nn(.25,.46,.45,.94),"ease-in-out-quad":Nn(.455,.03,.515,.955),"ease-in-cubic":Nn(.55,.055,.675,.19),"ease-out-cubic":Nn(.215,.61,.355,1),"ease-in-out-cubic":Nn(.645,.045,.355,1),"ease-in-quart":Nn(.895,.03,.685,.22),"ease-out-quart":Nn(.165,.84,.44,1),"ease-in-out-quart":Nn(.77,0,.175,1),"ease-in-quint":Nn(.755,.05,.855,.06),"ease-out-quint":Nn(.23,1,.32,1),"ease-in-out-quint":Nn(.86,0,.07,1),"ease-in-expo":Nn(.95,.05,.795,.035),"ease-out-expo":Nn(.19,1,.22,1),"ease-in-out-expo":Nn(1,0,0,1),"ease-in-circ":Nn(.6,.04,.98,.335),"ease-out-circ":Nn(.075,.82,.165,1),"ease-in-out-circ":Nn(.785,.135,.15,.86),spring:o(function(e,r,n){if(n===0)return dS.linear;var i=HKe(e,r,n);return function(a,s,l){return a+(s-a)*i(l)}},"spring"),"cubic-bezier":Nn};o(x0e,"getEasedValue");o(b0e,"getValue");o($1,"ease");o(WKe,"step$1");o(Rb,"valid");o(qKe,"startAnimation");o(w0e,"stepAll");YKe={animate:cn.animate(),animation:cn.animation(),animated:cn.animated(),clearQueue:cn.clearQueue(),delay:cn.delay(),delayAnimation:cn.delayAnimation(),stop:cn.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&xS(o(function(a){w0e(a,e),r()},"animationStep"))}o(r,"headlessStep");var n=e.renderer();n&&n.beforeRender?n.beforeRender(o(function(a,s){w0e(s,e)},"rendererAnimationStep"),n.beforeRenderPriorities.animations):r()},"startAnimationLoop")},XKe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&t4(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext")},iS=o(function(e){return Zt(e)?new Lf(e):e},"argSelector"),ege={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new $S(XKe,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){return this.emitter().on(e,iS(r),n),this},"on"),removeListener:o(function(e,r,n){return this.emitter().removeListener(e,iS(r),n),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,n){return this.emitter().one(e,iS(r),n),this},"one"),once:o(function(e,r,n){return this.emitter().one(e,iS(r),n),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};cn.eventAliasesOn(ege);VP={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};VP.jpeg=VP.jpg;pS={layout:o(function(e){var r=this;if(e==null){ai("Layout options must be specified to make a layout");return}if(e.name==null){ai("A `name` must be specified to make a layout");return}var n=e.name,i=r.extension("layout",n);if(i==null){ai("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;Zt(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new i(rr({},e,{cy:r,eles:a}));return s},"layout")};pS.createLayout=pS.makeLayout=pS.layout;jKe={notify:o(function(e,r){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var i=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();r!=null&&i.merge(r);return}if(n.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var i=e.batchNotifications[n];i.empty()?r.notify(n):r.notify(n,i)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var n=Object.keys(e),i=0;i<n.length;i++){var a=n[i],s=e[a],l=r.getElementById(a);l.data(s)}})},"batchData")},KKe=la({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1,webgl:!1,webglDebug:!1,webglDebugShowAtlases:!1,webglTexSize:2048,webglTexRows:12,webglBatchSize:2048,webglTexPerBatch:14,webglBgColor:[255,255,255]}),UP={renderTo:o(function(e,r,n,i){var a=this._private.renderer;return a.renderTo(e,r,n,i),this},"renderTo"),renderer:o(function(){return this._private.renderer},"renderer"),forceRender:o(function(){return this.notify("draw"),this},"forceRender"),resize:o(function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},"resize"),initRenderer:o(function(e){var r=this,n=r.extension("renderer",e.name);if(n==null){ai("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"));return}e.wheelSensitivity!==void 0&&un("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");var i=KKe(e);i.cy=r,r._private.renderer=new n(i),this.notify("init")},"initRenderer"),destroyRenderer:o(function(){var e=this;e.notify("destroy");var r=e.container();if(r)for(r._cyreg=null;r.childNodes.length>0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(n){var i=n._private;i.rscratch={},i.rstyle={},i.animation.current=[],i.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};UP.invalidateDimensions=UP.resize;mS={collection:o(function(e,r){return Zt(e)?this.$(e):go(e)?e.collection():En(e)?(r||(r={}),new ka(this,e,r.unique,r.removed)):new ka(this)},"collection"),nodes:o(function(e){var r=this.$(function(n){return n.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(n){return n.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};mS.elements=mS.filter=mS.$;Ga={},$b="t",QKe="f";Ga.apply=function(t){for(var e=this,r=e._private,n=r.cy,i=n.collection(),a=0;a<t.length;a++){var s=t[a],l=e.getContextMeta(s);if(!l.empty){var u=e.getContextStyle(l),h=e.applyContextStyle(l,u,s);s._private.appliedInitStyle?e.updateTransitions(s,h.diffProps):s._private.appliedInitStyle=!0;var f=e.updateStyleHints(s);f&&i.push(s)}}return i};Ga.getPropertiesDiff=function(t,e){var r=this,n=r._private.propDiffs=r._private.propDiffs||{},i=t+"-"+e,a=n[i];if(a)return a;for(var s=[],l={},u=0;u<r.length;u++){var h=r[u],f=t[u]===$b,d=e[u]===$b,p=f!==d,m=h.mappedProperties.length>0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y<g.length;y++){for(var v=g[y],x=v.name,b=!1,w=u+1;w<r.length;w++){var C=r[w],T=e[w]===$b;if(T&&(b=C.properties[v.name]!=null,b))break}!l[x]&&!b&&(l[x]=!0,s.push(x))}}}return n[i]=s,s};Ga.getContextMeta=function(t){for(var e=this,r="",n,i=t._private.styleCxtKey||"",a=0;a<e.length;a++){var s=e[a],l=s.selector&&s.selector.matches(t);l?r+=$b:r+=QKe}return n=e.getPropertiesDiff(i,r),t._private.styleCxtKey=r,{key:r,diffPropNames:n,empty:n.length===0}};Ga.getContextStyle=function(t){var e=t.key,r=this,n=this._private.contextStyles=this._private.contextStyles||{};if(n[e])return n[e];for(var i={_private:{key:e}},a=0;a<r.length;a++){var s=r[a],l=e[a]===$b;if(l)for(var u=0;u<s.properties.length;u++){var h=s.properties[u];i[h.name]=h}}return n[e]=i,i};Ga.applyContextStyle=function(t,e,r){for(var n=this,i=t.diffPropNames,a={},s=n.types,l=0;l<i.length;l++){var u=i[l],h=e[u],f=r.pstyle(u);if(!h)if(f)f.bypass?h={name:u,deleteBypassed:!0}:h={name:u,delete:!0};else continue;if(f!==h){if(h.mapped===s.fn&&f!=null&&f.mapping!=null&&f.mapping.value===h.value){var d=f.mapping,p=d.fnValue=h.value(r);if(p===d.prevFnValue)continue}var m=a[u]={prev:f};n.applyParsedProperty(r,h),m.next=r.pstyle(u),m.next&&m.next.bypass&&(m.next=m.next.bypassed)}}return{diffProps:a}};Ga.updateStyleHints=function(t){var e=t._private,r=this,n=r.propertyGroupNames,i=r.propertyGroupKeys,a=o(function(te,J,se){return r.getPropertiesHash(te,J,se)},"propHash"),s=e.styleKey;if(t.removed())return!1;var l=e.group==="nodes",u=t._private.style;n=Object.keys(u);for(var h=0;h<i.length;h++){var f=i[h];e.styleKeys[f]=[V1,Ob]}for(var d=o(function(te,J){return e.styleKeys[J][0]=Hb(te,e.styleKeys[J][0])},"updateGrKey1"),p=o(function(te,J){return e.styleKeys[J][1]=Wb(te,e.styleKeys[J][1])},"updateGrKey2"),m=o(function(te,J){d(te,J),p(te,J)},"updateGrKey"),g=o(function(te,J){for(var se=0;se<te.length;se++){var ue=te.charCodeAt(se);d(ue,J),p(ue,J)}},"updateGrKeyWStr"),y=2e9,v=o(function(te){return-128<te&&te<128&&Math.floor(te)!==te?y-(te*1024|0):te},"cleanNum"),x=0;x<n.length;x++){var b=n[x],w=u[b];if(w!=null){var C=this.properties[b],T=C.type,E=C.groupKey,A=void 0;C.hashOverride!=null?A=C.hashOverride(t,w):w.pfValue!=null&&(A=w.pfValue);var S=C.enums==null?w.value:null,_=A!=null,I=S!=null,D=_||I,k=w.units;if(T.number&&D&&!T.multiple){var L=_?A:S;m(v(L),E),!_&&k!=null&&g(k,E)}else g(w.strValue,E)}}for(var R=[V1,Ob],O=0;O<i.length;O++){var M=i[O],B=e.styleKeys[M];R[0]=Hb(B[0],R[0]),R[1]=Wb(B[1],R[1])}e.styleKey=rqe(R[0],R[1]);var F=e.styleKeys;e.labelDimsKey=wf(F.labelDimensions);var P=a(t,["label"],F.labelDimensions);if(e.labelKey=wf(P),e.labelStyleKey=wf(j6(F.commonLabel,P)),!l){var z=a(t,["source-label"],F.labelDimensions);e.sourceLabelKey=wf(z),e.sourceLabelStyleKey=wf(j6(F.commonLabel,z));var $=a(t,["target-label"],F.labelDimensions);e.targetLabelKey=wf($),e.targetLabelStyleKey=wf(j6(F.commonLabel,$))}if(l){var H=e.styleKeys,Q=H.nodeBody,j=H.nodeBorder,ie=H.nodeOutline,ne=H.backgroundImage,le=H.compound,he=H.pie,K=[Q,j,ie,ne,le,he].filter(function(X){return X!=null}).reduce(j6,[V1,Ob]);e.nodeKey=wf(K),e.hasPie=he!=null&&he[0]!==V1&&he[1]!==Ob}return s!==e.styleKey};Ga.clearStyleHints=function(t){var e=t._private;e.styleCxtKey="",e.styleKeys={},e.styleKey=null,e.labelKey=null,e.labelStyleKey=null,e.sourceLabelKey=null,e.sourceLabelStyleKey=null,e.targetLabelKey=null,e.targetLabelStyleKey=null,e.nodeKey=null,e.hasPie=null};Ga.applyParsedProperty=function(t,e){var r=this,n=e,i=t._private.style,a,s=r.types,l=r.properties[n.name].type,u=n.bypass,h=i[n.name],f=h&&h.bypass,d=t._private,p="mapping",m=o(function(Q){return Q==null?null:Q.pfValue!=null?Q.pfValue:Q.value},"getVal"),g=o(function(){var Q=m(h),j=m(n);r.checkTriggers(t,n.name,Q,j)},"checkTriggers");if(e.name==="curve-style"&&t.isEdge()&&(e.value!=="bezier"&&t.isLoop()||e.value==="haystack"&&(t.source().isParent()||t.target().isParent()))&&(n=e=this.parse(e.name,"bezier",u)),n.delete)return i[n.name]=void 0,g(),!0;if(n.deleteBypassed)return h?h.bypass?(h.bypassed=void 0,g(),!0):!1:(g(),!0);if(n.deleteBypass)return h?h.bypass?(i[n.name]=h.bypassed,g(),!0):!1:(g(),!0);var y=o(function(){un("Do not assign mappings to elements without corresponding data (i.e. ele `"+t.id()+"` has no mapping for property `"+n.name+"` with data field `"+n.field+"`); try a `["+n.field+"]` selector to limit scope to elements with `"+n.field+"` defined")},"printMappingErr");switch(n.mapped){case s.mapData:{for(var v=n.field.split("."),x=d.data,b=0;b<v.length&&x;b++){var w=v[b];x=x[w]}if(x==null)return y(),!1;var C;if(Ct(x)){var T=n.fieldMax-n.fieldMin;T===0?C=0:C=(x-n.fieldMin)/T}else return un("Do not use continuous mappers without specifying numeric data (i.e. `"+n.field+": "+x+"` for `"+t.id()+"` is non-numeric)"),!1;if(C<0?C=0:C>1&&(C=1),l.color){var E=n.valueMin[0],A=n.valueMax[0],S=n.valueMin[1],_=n.valueMax[1],I=n.valueMin[2],D=n.valueMax[2],k=n.valueMin[3]==null?1:n.valueMin[3],L=n.valueMax[3]==null?1:n.valueMax[3],R=[Math.round(E+(A-E)*C),Math.round(S+(_-S)*C),Math.round(I+(D-I)*C),Math.round(k+(L-k)*C)];a={bypass:n.bypass,name:n.name,value:R,strValue:"rgb("+R[0]+", "+R[1]+", "+R[2]+")"}}else if(l.number){var O=n.valueMin+(n.valueMax-n.valueMin)*C;a=this.parse(n.name,O,n.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=n,n=a;break}case s.data:{for(var M=n.field.split("."),B=d.data,F=0;F<M.length&&B;F++){var P=M[F];B=B[P]}if(B!=null&&(a=this.parse(n.name,B,n.bypass,p)),!a)return y(),!1;a.mapping=n,n=a;break}case s.fn:{var z=n.value,$=n.fnValue!=null?n.fnValue:z(t);if(n.prevFnValue=$,$==null)return un("Custom function mappers may not return null (i.e. `"+n.name+"` for ele `"+t.id()+"` is null)"),!1;if(a=this.parse(n.name,$,n.bypass,p),!a)return un("Custom function mappers may not return invalid values for the property type (i.e. `"+n.name+"` for ele `"+t.id()+"` is invalid)"),!1;a.mapping=Yc(n),n=a;break}case void 0:break;default:return!1}return u?(f?n.bypassed=h.bypassed:n.bypassed=h,i[n.name]=n):f?h.bypassed=n:i[n.name]=n,g(),!0};Ga.cleanElements=function(t,e){for(var r=0;r<t.length;r++){var n=t[r];if(this.clearStyleHints(n),n.dirtyCompoundBoundsCache(),n.dirtyBoundingBoxCache(),!e)n._private.style={};else for(var i=n._private.style,a=Object.keys(i),s=0;s<a.length;s++){var l=a[s],u=i[l];u!=null&&(u.bypass?u.bypassed=null:i[l]=null)}}};Ga.update=function(){var t=this._private.cy,e=t.mutableElements();e.updateStyle()};Ga.updateTransitions=function(t,e){var r=this,n=t._private,i=t.pstyle("transition-property").value,a=t.pstyle("transition-duration").pfValue,s=t.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var l={},u=!1,h=0;h<i.length;h++){var f=i[h],d=t.pstyle(f),p=e[f];if(p){var m=p.prev,g=m,y=p.next!=null?p.next:d,v=!1,x=void 0,b=1e-6;g&&(Ct(g.pfValue)&&Ct(y.pfValue)?(v=y.pfValue-g.pfValue,x=g.pfValue+b*v):Ct(g.value)&&Ct(y.value)?(v=y.value-g.value,x=g.value+b*v):En(g.value)&&En(y.value)&&(v=g.value[0]!==y.value[0]||g.value[1]!==y.value[1]||g.value[2]!==y.value[2],x=g.strValue),v&&(l[f]=y.strValue,this.applyBypass(t,f,x),u=!0))}}if(!u)return;n.transitioning=!0,new ey(function(w){s>0?t.delayAnimation(s).play().promise().then(w):w()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1})}else n.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1)};Ga.checkTrigger=function(t,e,r,n,i,a){var s=this.properties[e],l=i(s);l!=null&&l(r,n)&&a(s)};Ga.checkZOrderTrigger=function(t,e,r,n){var i=this;this.checkTrigger(t,e,r,n,function(a){return a.triggersZOrder},function(){i._private.cy.notify("zorder",t)})};Ga.checkBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBounds},function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),i.triggersBoundsOfParallelBeziers&&e==="curve-style"&&(r==="bezier"||n==="bezier")&&t.parallelEdges().forEach(function(a){a.dirtyBoundingBoxCache()}),i.triggersBoundsOfConnectedEdges&&e==="display"&&(r==="none"||n==="none")&&t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Ga.checkTriggers=function(t,e,r,n){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,n),this.checkBoundsTrigger(t,e,r,n)};s4={};s4.applyBypass=function(t,e,r,n){var i=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;l<i.properties.length;l++){var u=i.properties[l],h=u.name,f=this.parse(h,r,!0);f&&a.push(f)}}else if(Zt(e)){var d=this.parse(e,r,!0);d&&a.push(d)}else if(Ur(e)){var p=e;n=r;for(var m=Object.keys(p),g=0;g<m.length;g++){var y=m[g],v=p[y];if(v===void 0&&(v=p[LS(y)]),v!==void 0){var x=this.parse(y,v,!0);x&&a.push(x)}}}else return!1;if(a.length===0)return!1;for(var b=!1,w=0;w<t.length;w++){for(var C=t[w],T={},E=void 0,A=0;A<a.length;A++){var S=a[A];if(n){var _=C.pstyle(S.name);E=T[S.name]={prev:_}}b=this.applyParsedProperty(C,Yc(S))||b,n&&(E.next=C.pstyle(S.name))}b&&this.updateStyleHints(C),n&&this.updateTransitions(C,T,s)}return b};s4.overrideBypass=function(t,e,r){e=eB(e);for(var n=0;n<t.length;n++){var i=t[n],a=i._private.style[e],s=this.properties[e].type,l=s.color,u=s.mutiple,h=a?a.pfValue!=null?a.pfValue:a.value:null;!a||!a.bypass?this.applyBypass(i,e,r):(a.value=r,a.pfValue!=null&&(a.pfValue=r),l?a.strValue="rgb("+r.join(",")+")":u?a.strValue=r.join(" "):a.strValue=""+r,this.updateStyleHints(i)),this.checkTriggers(i,e,h,r)}};s4.removeAllBypasses=function(t,e){return this.removeBypasses(t,this.propertyNames,e)};s4.removeBypasses=function(t,e,r){for(var n=!0,i=0;i<t.length;i++){for(var a=t[i],s={},l=0;l<e.length;l++){var u=e[l],h=this.properties[u],f=a.pstyle(h.name);if(!(!f||!f.bypass)){var d="",p=this.parse(u,d,!0),m=s[h.name]={prev:f};this.applyParsedProperty(a,p),m.next=a.pstyle(h.name)}}this.updateStyleHints(a),r&&this.updateTransitions(a,s,n)}};pB={};pB.getEmSizeInPixels=function(){var t=this.containerCss("font-size");return t!=null?parseFloat(t):1};pB.containerCss=function(t){var e=this._private.cy,r=e.container(),n=e.window();if(n&&r&&n.getComputedStyle)return n.getComputedStyle(r).getPropertyValue(t)};jc={};jc.getRenderedStyle=function(t,e){return e?this.getStylePropertyValue(t,e,!0):this.getRawStyle(t,!0)};jc.getRawStyle=function(t,e){var r=this;if(t=t[0],t){for(var n={},i=0;i<r.properties.length;i++){var a=r.properties[i],s=r.getStylePropertyValue(t,a.name,e);s!=null&&(n[a.name]=s,n[LS(a.name)]=s)}return n}};jc.getIndexedStyle=function(t,e,r,n){var i=t.pstyle(e)[r][n];return i??t.cy().style().getDefaultProperty(e)[r][0]};jc.getStylePropertyValue=function(t,e,r){var n=this;if(t=t[0],t){var i=n.properties[e];i.alias&&(i=i.pointsTo);var a=i.type,s=t.pstyle(i.name);if(s){var l=s.value,u=s.units,h=s.strValue;if(r&&a.number&&l!=null&&Ct(l)){var f=t.cy().zoom(),d=o(function(v){return v*f},"getRenderedValue"),p=o(function(v,x){return d(v)+x},"getValueStringWithUnits"),m=En(l),g=m?u.every(function(y){return y!=null}):u!=null;return g?m?l.map(function(y,v){return p(y,u[v])}).join(" "):p(l,u):m?l.map(function(y){return Zt(y)?y:""+d(y)}).join(" "):""+d(l)}else if(h!=null)return h}return null}};jc.getAnimationStartStyle=function(t,e){for(var r={},n=0;n<e.length;n++){var i=e[n],a=i.name,s=t.pstyle(a);s!==void 0&&(Ur(s)?s=this.parse(a,s.strValue):s=this.parse(a,s)),s&&(r[a]=s)}return r};jc.getPropsList=function(t){var e=this,r=[],n=t,i=e.properties;if(n)for(var a=Object.keys(n),s=0;s<a.length;s++){var l=a[s],u=n[l],h=i[l]||i[eB(l)],f=this.parse(h.name,u);f&&r.push(f)}return r};jc.getNonDefaultPropertiesHash=function(t,e,r){var n=r.slice(),i,a,s,l,u,h;for(u=0;u<e.length;u++)if(i=e[u],a=t.pstyle(i,!1),a!=null)if(a.pfValue!=null)n[0]=Hb(l,n[0]),n[1]=Wb(l,n[1]);else for(s=a.strValue,h=0;h<s.length;h++)l=s.charCodeAt(h),n[0]=Hb(l,n[0]),n[1]=Wb(l,n[1]);return n};jc.getPropertiesHash=jc.getNonDefaultPropertiesHash;VS={};VS.appendFromJson=function(t){for(var e=this,r=0;r<t.length;r++){var n=t[r],i=n.selector,a=n.style||n.css,s=Object.keys(a);e.selector(i);for(var l=0;l<s.length;l++){var u=s[l],h=a[u];e.css(u,h)}}return e};VS.fromJson=function(t){var e=this;return e.resetToDefault(),e.appendFromJson(t),e};VS.json=function(){for(var t=[],e=this.defaultLength;e<this.length;e++){for(var r=this[e],n=r.selector,i=r.properties,a={},s=0;s<i.length;s++){var l=i[s];a[l.name]=l.strValue}t.push({selector:n?n.toString():"core",style:a})}return t};mB={};mB.appendFromString=function(t){var e=this,r=this,n=""+t,i,a,s;n=n.replace(/[/][*](\s|.)+?[*][/]/g,"");function l(){n.length>i.length?n=n.substr(i.length):n=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=n.match(/^\s*$/);if(h)break;var f=n.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){un("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+n);break}i=f[0];var d=f[1];if(d!=="core"){var p=new Lf(d);if(p.invalid){un("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){un("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],w=x[2],C=e.properties[b];if(!C){un("Skipping property: Invalid property name in: "+s),u();continue}var T=r.parse(b,w);if(!T){un("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:w}),u()}if(g){l();break}r.selector(d);for(var E=0;E<y.length;E++){var A=y[E];r.css(A.name,A.val)}l()}return r};mB.fromString=function(t){var e=this;return e.resetToDefault(),e.appendFromString(t),e};wa={};(function(){var t=Hi,e=sWe,r=lWe,n=cWe,i=uWe,a=o(function(K){return"^"+K+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},"data"),s=o(function(K){var X=t+"|\\w+|"+e+"|"+r+"|"+n+"|"+i;return"^"+K+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+t+")\\s*\\,\\s*("+t+")\\s*,\\s*("+X+")\\s*\\,\\s*("+X+")\\)$"},"mapData"),l=[`^url\\s*\\(\\s*['"]?(.+?)['"]?\\s*\\)$`,"^(none)$","^(.+)$"];wa.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},nonNegativeNumber:{number:!0,min:0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},linePosition:{enums:["center","inside","outside"]},lineJoin:{enums:["round","bevel","miter"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi","round-segments","round-taxi"]},radiusType:{enums:["arc-radius","influence-radius"],multiple:!0},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textOverflowWrap:{enums:["whitespace","anywhere"]},textBackgroundShape:{enums:["rectangle","roundrectangle","round-rectangle"]},nodeShape:{enums:["rectangle","roundrectangle","round-rectangle","cutrectangle","cut-rectangle","bottomroundrectangle","bottom-round-rectangle","barrel","ellipse","triangle","round-triangle","square","pentagon","round-pentagon","hexagon","round-hexagon","concavehexagon","concave-hexagon","heptagon","round-heptagon","octagon","round-octagon","tag","round-tag","star","diamond","round-diamond","vee","rhomboid","right-rhomboid","polygon"]},overlayShape:{enums:["roundrectangle","round-rectangle","ellipse"]},cornerRadius:{number:!0,min:0,units:"px|em",implicitUnits:"px",enums:["auto"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","circle-triangle","triangle-cross","triangle-backcurve","vee","square","circle","diamond","chevron","none"]},arrowFill:{enums:["filled","hollow"]},arrowWidth:{number:!0,units:"%|px|em",implicitUnits:"px",enums:["match-line"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},justification:{enums:["left","center","right","auto"]},text:{string:!0},data:{mapping:!0,regex:a("data")},layoutData:{mapping:!0,regex:a("layoutData")},scratch:{mapping:!0,regex:a("scratch")},mapData:{mapping:!0,regex:s("mapData")},mapLayoutData:{mapping:!0,regex:s("mapLayoutData")},mapScratch:{mapping:!0,regex:s("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:l,singleRegexMatchValue:!0},urls:{regexes:l,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position","endpoints"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-node-or-label","outside-to-line","outside-to-line-or-label"],singleEnum:!0,validate:o(function(K,X){switch(K.length){case 2:return X[0]!=="deg"&&X[0]!=="rad"&&X[1]!=="deg"&&X[1]!=="rad";case 1:return Zt(K[0])||X[0]==="deg"||X[0]==="rad";default:return!1}},"validate")},easing:{regexes:["^(spring)\\s*\\(\\s*("+t+")\\s*,\\s*("+t+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+t+")\\s*,\\s*("+t+")\\s*,\\s*("+t+")\\s*,\\s*("+t+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]},gradientDirection:{enums:["to-bottom","to-top","to-left","to-right","to-bottom-right","to-bottom-left","to-top-right","to-top-left","to-right-bottom","to-left-bottom","to-right-top","to-left-top"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:o(function(K){var X=K.length;return X===1||X===2||X===4},"validate")}};var u={zeroNonZero:o(function(K,X){return(K==null||X==null)&&K!==X||K==0&&X!=0?!0:K!=0&&X==0},"zeroNonZero"),any:o(function(K,X){return K!=X},"any"),emptyNonEmpty:o(function(K,X){var te=Af(K),J=Af(X);return te&&!J||!te&&J},"emptyNonEmpty")},h=wa.types,f=[{name:"label",type:h.text,triggersBounds:u.any,triggersZOrder:u.emptyNonEmpty},{name:"text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any}],d=[{name:"source-label",type:h.text,triggersBounds:u.any},{name:"source-text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"source-text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"source-text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"source-text-offset",type:h.size,triggersBounds:u.any}],p=[{name:"target-label",type:h.text,triggersBounds:u.any},{name:"target-text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"target-text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"target-text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"target-text-offset",type:h.size,triggersBounds:u.any}],m=[{name:"font-family",type:h.fontFamily,triggersBounds:u.any},{name:"font-style",type:h.fontStyle,triggersBounds:u.any},{name:"font-weight",type:h.fontWeight,triggersBounds:u.any},{name:"font-size",type:h.size,triggersBounds:u.any},{name:"text-transform",type:h.textTransform,triggersBounds:u.any},{name:"text-wrap",type:h.textWrap,triggersBounds:u.any},{name:"text-overflow-wrap",type:h.textOverflowWrap,triggersBounds:u.any},{name:"text-max-width",type:h.size,triggersBounds:u.any},{name:"text-outline-width",type:h.size,triggersBounds:u.any},{name:"line-height",type:h.positiveNumber,triggersBounds:u.any}],g=[{name:"text-valign",type:h.valign,triggersBounds:u.any},{name:"text-halign",type:h.halign,triggersBounds:u.any},{name:"color",type:h.color},{name:"text-outline-color",type:h.color},{name:"text-outline-opacity",type:h.zeroOneNumber},{name:"text-background-color",type:h.color},{name:"text-background-opacity",type:h.zeroOneNumber},{name:"text-background-padding",type:h.size,triggersBounds:u.any},{name:"text-border-opacity",type:h.zeroOneNumber},{name:"text-border-color",type:h.color},{name:"text-border-width",type:h.size,triggersBounds:u.any},{name:"text-border-style",type:h.borderStyle,triggersBounds:u.any},{name:"text-background-shape",type:h.textBackgroundShape,triggersBounds:u.any},{name:"text-justification",type:h.justification}],y=[{name:"events",type:h.bool,triggersZOrder:u.any},{name:"text-events",type:h.bool,triggersZOrder:u.any}],v=[{name:"display",type:h.display,triggersZOrder:u.any,triggersBounds:u.any,triggersBoundsOfConnectedEdges:!0},{name:"visibility",type:h.visibility,triggersZOrder:u.any},{name:"opacity",type:h.zeroOneNumber,triggersZOrder:u.zeroNonZero},{name:"text-opacity",type:h.zeroOneNumber},{name:"min-zoomed-font-size",type:h.size},{name:"z-compound-depth",type:h.zCompoundDepth,triggersZOrder:u.any},{name:"z-index-compare",type:h.zIndexCompare,triggersZOrder:u.any},{name:"z-index",type:h.number,triggersZOrder:u.any}],x=[{name:"overlay-padding",type:h.size,triggersBounds:u.any},{name:"overlay-color",type:h.color},{name:"overlay-opacity",type:h.zeroOneNumber,triggersBounds:u.zeroNonZero},{name:"overlay-shape",type:h.overlayShape,triggersBounds:u.any},{name:"overlay-corner-radius",type:h.cornerRadius}],b=[{name:"underlay-padding",type:h.size,triggersBounds:u.any},{name:"underlay-color",type:h.color},{name:"underlay-opacity",type:h.zeroOneNumber,triggersBounds:u.zeroNonZero},{name:"underlay-shape",type:h.overlayShape,triggersBounds:u.any},{name:"underlay-corner-radius",type:h.cornerRadius}],w=[{name:"transition-property",type:h.propList},{name:"transition-duration",type:h.time},{name:"transition-delay",type:h.time},{name:"transition-timing-function",type:h.easing}],C=o(function(K,X){return X.value==="label"?-K.poolIndex():X.pfValue},"nodeSizeHashOverride"),T=[{name:"height",type:h.nodeSize,triggersBounds:u.any,hashOverride:C},{name:"width",type:h.nodeSize,triggersBounds:u.any,hashOverride:C},{name:"shape",type:h.nodeShape,triggersBounds:u.any},{name:"shape-polygon-points",type:h.polygonPointList,triggersBounds:u.any},{name:"corner-radius",type:h.cornerRadius},{name:"background-color",type:h.color},{name:"background-fill",type:h.fill},{name:"background-opacity",type:h.zeroOneNumber},{name:"background-blacken",type:h.nOneOneNumber},{name:"background-gradient-stop-colors",type:h.colors},{name:"background-gradient-stop-positions",type:h.percentages},{name:"background-gradient-direction",type:h.gradientDirection},{name:"padding",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"padding-relative-to",type:h.paddingRelativeTo,triggersBounds:u.any},{name:"bounds-expansion",type:h.boundsExpansion,triggersBounds:u.any}],E=[{name:"border-color",type:h.color},{name:"border-opacity",type:h.zeroOneNumber},{name:"border-width",type:h.size,triggersBounds:u.any},{name:"border-style",type:h.borderStyle},{name:"border-cap",type:h.lineCap},{name:"border-join",type:h.lineJoin},{name:"border-dash-pattern",type:h.numbers},{name:"border-dash-offset",type:h.number},{name:"border-position",type:h.linePosition}],A=[{name:"outline-color",type:h.color},{name:"outline-opacity",type:h.zeroOneNumber},{name:"outline-width",type:h.size,triggersBounds:u.any},{name:"outline-style",type:h.borderStyle},{name:"outline-offset",type:h.size,triggersBounds:u.any}],S=[{name:"background-image",type:h.urls},{name:"background-image-crossorigin",type:h.bgCrossOrigin},{name:"background-image-opacity",type:h.zeroOneNumbers},{name:"background-image-containment",type:h.bgContainment},{name:"background-image-smoothing",type:h.bools},{name:"background-position-x",type:h.bgPos},{name:"background-position-y",type:h.bgPos},{name:"background-width-relative-to",type:h.bgRelativeTo},{name:"background-height-relative-to",type:h.bgRelativeTo},{name:"background-repeat",type:h.bgRepeat},{name:"background-fit",type:h.bgFit},{name:"background-clip",type:h.bgClip},{name:"background-width",type:h.bgWH},{name:"background-height",type:h.bgWH},{name:"background-offset-x",type:h.bgPos},{name:"background-offset-y",type:h.bgPos}],_=[{name:"position",type:h.position,triggersBounds:u.any},{name:"compound-sizing-wrt-labels",type:h.compoundIncludeLabels,triggersBounds:u.any},{name:"min-width",type:h.size,triggersBounds:u.any},{name:"min-width-bias-left",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-width-bias-right",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-height",type:h.size,triggersBounds:u.any},{name:"min-height-bias-top",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-height-bias-bottom",type:h.sizeMaybePercent,triggersBounds:u.any}],I=[{name:"line-style",type:h.lineStyle},{name:"line-color",type:h.color},{name:"line-fill",type:h.fill},{name:"line-cap",type:h.lineCap},{name:"line-opacity",type:h.zeroOneNumber},{name:"line-dash-pattern",type:h.numbers},{name:"line-dash-offset",type:h.number},{name:"line-outline-width",type:h.size},{name:"line-outline-color",type:h.color},{name:"line-gradient-stop-colors",type:h.colors},{name:"line-gradient-stop-positions",type:h.percentages},{name:"curve-style",type:h.curveStyle,triggersBounds:u.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:h.zeroOneNumber,triggersBounds:u.any},{name:"source-endpoint",type:h.edgeEndpoint,triggersBounds:u.any},{name:"target-endpoint",type:h.edgeEndpoint,triggersBounds:u.any},{name:"control-point-step-size",type:h.size,triggersBounds:u.any},{name:"control-point-distances",type:h.bidirectionalSizes,triggersBounds:u.any},{name:"control-point-weights",type:h.numbers,triggersBounds:u.any},{name:"segment-distances",type:h.bidirectionalSizes,triggersBounds:u.any},{name:"segment-weights",type:h.numbers,triggersBounds:u.any},{name:"segment-radii",type:h.numbers,triggersBounds:u.any},{name:"radius-type",type:h.radiusType,triggersBounds:u.any},{name:"taxi-turn",type:h.bidirectionalSizeMaybePercent,triggersBounds:u.any},{name:"taxi-turn-min-distance",type:h.size,triggersBounds:u.any},{name:"taxi-direction",type:h.axisDirection,triggersBounds:u.any},{name:"taxi-radius",type:h.number,triggersBounds:u.any},{name:"edge-distances",type:h.edgeDistances,triggersBounds:u.any},{name:"arrow-scale",type:h.positiveNumber,triggersBounds:u.any},{name:"loop-direction",type:h.angle,triggersBounds:u.any},{name:"loop-sweep",type:h.angle,triggersBounds:u.any},{name:"source-distance-from-node",type:h.size,triggersBounds:u.any},{name:"target-distance-from-node",type:h.size,triggersBounds:u.any}],D=[{name:"ghost",type:h.bool,triggersBounds:u.any},{name:"ghost-offset-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"ghost-offset-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"ghost-opacity",type:h.zeroOneNumber}],k=[{name:"selection-box-color",type:h.color},{name:"selection-box-opacity",type:h.zeroOneNumber},{name:"selection-box-border-color",type:h.color},{name:"selection-box-border-width",type:h.size},{name:"active-bg-color",type:h.color},{name:"active-bg-opacity",type:h.zeroOneNumber},{name:"active-bg-size",type:h.size},{name:"outside-texture-bg-color",type:h.color},{name:"outside-texture-bg-opacity",type:h.zeroOneNumber}],L=[];wa.pieBackgroundN=16,L.push({name:"pie-size",type:h.sizeMaybePercent});for(var R=1;R<=wa.pieBackgroundN;R++)L.push({name:"pie-"+R+"-background-color",type:h.color}),L.push({name:"pie-"+R+"-background-size",type:h.percent}),L.push({name:"pie-"+R+"-background-opacity",type:h.zeroOneNumber});var O=[],M=wa.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:h.arrowShape,triggersBounds:u.any},{name:"arrow-color",type:h.color},{name:"arrow-fill",type:h.arrowFill},{name:"arrow-width",type:h.arrowWidth}].forEach(function(he){M.forEach(function(K){var X=K+"-"+he.name,te=he.type,J=he.triggersBounds;O.push({name:X,type:te,triggersBounds:J})})},{});var B=wa.properties=[].concat(y,w,v,x,b,D,g,m,f,d,p,T,E,A,S,L,_,I,O,k),F=wa.propertyGroups={behavior:y,transition:w,visibility:v,overlay:x,underlay:b,ghost:D,commonLabel:g,labelDimensions:m,mainLabel:f,sourceLabel:d,targetLabel:p,nodeBody:T,nodeBorder:E,nodeOutline:A,backgroundImage:S,pie:L,compound:_,edgeLine:I,edgeArrow:O,core:k},P=wa.propertyGroupNames={},z=wa.propertyGroupKeys=Object.keys(F);z.forEach(function(he){P[he]=F[he].map(function(K){return K.name}),F[he].forEach(function(K){return K.groupKey=he})});var $=wa.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"segment-distance",pointsTo:"segment-distances"},{name:"segment-weight",pointsTo:"segment-weights"},{name:"segment-radius",pointsTo:"segment-radii"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];wa.propertyNames=B.map(function(he){return he.name});for(var H=0;H<B.length;H++){var Q=B[H];B[Q.name]=Q}for(var j=0;j<$.length;j++){var ie=$[j],ne=B[ie.pointsTo],le={name:ie.name,alias:!0,pointsTo:ne};B.push(le),B[ie.name]=le}})();wa.getDefaultProperty=function(t){return this.getDefaultProperties()[t]};wa.getDefaultProperties=function(){var t=this._private;if(t.defaultProperties!=null)return t.defaultProperties;for(var e=rr({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,events:"yes","text-events":"no","text-valign":"top","text-halign":"center","text-justification":"auto","line-height":1,color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-overflow-wrap":"whitespace","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"overlay-shape":"round-rectangle","overlay-corner-radius":"auto","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","underlay-corner-radius":"auto","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-fill":"solid","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-image-containment":"inside","background-image-smoothing":"yes","background-position-x":"50%","background-position-y":"50%","background-offset-x":0,"background-offset-y":0,"background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid","border-dash-pattern":[4,2],"border-dash-offset":0,"border-cap":"butt","border-join":"miter","border-position":"center","outline-color":"#999","outline-opacity":1,"outline-width":0,"outline-offset":0,"outline-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","corner-radius":"auto","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce(function(u,h){for(var f=1;f<=wa.pieBackgroundN;f++){var d=h.name.replace("{{i}}",f),p=h.value;u[d]=p}return u},{}),{"line-style":"solid","line-color":"#999","line-fill":"solid","line-cap":"butt","line-opacity":1,"line-outline-width":0,"line-outline-color":"#000","line-gradient-stop-colors":"#999","line-gradient-stop-positions":"0%","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"segment-radii":15,"radius-type":"arc-radius","taxi-turn":"50%","taxi-radius":15,"taxi-turn-min-distance":10,"taxi-direction":"auto","edge-distances":"intersection","curve-style":"haystack","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node","line-dash-pattern":[6,3],"line-dash-offset":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"},{name:"arrow-width",value:1}].reduce(function(u,h){return wa.arrowPrefixes.forEach(function(f){var d=f+"-"+h.name,p=h.value;u[d]=p}),u},{})),r={},n=0;n<this.properties.length;n++){var i=this.properties[n];if(!i.pointsTo){var a=i.name,s=e[a],l=this.parse(a,s);r[a]=l}}return t.defaultProperties=r,t.defaultProperties};wa.addDefaultStylesheet=function(){this.selector(":parent").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3}).selector(":loop").css({"curve-style":"bezier"}).selector("edge:compound").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector(":parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}),this.defaultLength=this.length};US={};US.parse=function(t,e,r,n){var i=this;if(si(e))return i.parseImplWarn(t,e,r,n);var a=n==="mapping"||n===!0||n===!1||n==null?"dontcare":n,s=r?"t":"f",l=""+e,u=cme(t,l,s,a),h=i.propCache=i.propCache||[],f;return(f=h[u])||(f=h[u]=i.parseImplWarn(t,e,r,n)),(r||n==="mapping")&&(f=Yc(f),f&&(f.value=Yc(f.value))),f};US.parseImplWarn=function(t,e,r,n){var i=this.parseImpl(t,e,r,n);return!i&&e!=null&&un("The style property `".concat(t,": ").concat(e,"` is invalid")),i&&(i.name==="width"||i.name==="height")&&e==="label"&&un("The style value of `label` is deprecated for `"+i.name+"`"),i};US.parseImpl=function(t,e,r,n){var i=this;t=eB(t);var a=i.properties[t],s=e,l=i.types;if(!a||e===void 0)return null;a.alias&&(a=a.pointsTo,t=a.name);var u=Zt(e);u&&(e=e.trim());var h=a.type;if(!h)return null;if(r&&(e===""||e===null))return{name:t,value:e,bypass:!0,deleteBypass:!0};if(si(e))return{name:t,value:e,strValue:"fn",mapped:l.fn,bypass:r};var f,d;if(!(!u||n||e.length<7||e[1]!=="a")){if(e.length>=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return un("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&n!=="multiple"){var w;if(u?w=e.split(/\s+/):En(e)?w=e:w=[e],h.evenMultiple&&w.length%2!==0)return null;for(var C=[],T=[],E=[],A="",S=!1,_=0;_<w.length;_++){var I=i.parse(t,w[_],r,"multiple");S=S||Zt(I.value),C.push(I.value),E.push(I.pfValue!=null?I.pfValue:I.value),T.push(I.units),A+=(_>0?" ":"")+I.strValue}return h.validate&&!h.validate(C,T)?null:h.singleEnum&&S?C.length===1&&Zt(C[0])?{name:t,value:C[0],strValue:C[0],bypass:r}:null:{name:t,value:C,pfValue:E,strValue:A,bypass:r,units:T}}var D=o(function(){for(var K=0;K<h.enums.length;K++){var X=h.enums[K];if(X===e)return{name:t,value:e,strValue:""+e,bypass:r}}return null},"checkEnums");if(h.number){var k,L="px";if(h.units&&(k=h.units),h.implicitUnits&&(L=h.implicitUnits),!h.unitless)if(u){var R="px|em"+(h.allowPercent?"|\\%":"");k&&(R=k);var O=e.match("^("+Hi+")("+R+")?$");O&&(e=O[1],k=O[2]||L)}else(!k||h.implicitUnits)&&(k=L);if(e=parseFloat(e),isNaN(e)&&h.enums===void 0)return null;if(isNaN(e)&&h.enums!==void 0)return e=s,D();if(h.integer&&!JHe(e)||h.min!==void 0&&(e<h.min||h.strictMin&&e===h.min)||h.max!==void 0&&(e>h.max||h.strictMax&&e===h.max))return null;var M={name:t,value:e,strValue:""+e+(k||""),units:k,bypass:r};return h.unitless||k!=="px"&&k!=="em"?M.pfValue=e:M.pfValue=k==="px"||!k?e:this.getEmSizeInPixels()*e,(k==="ms"||k==="s")&&(M.pfValue=k==="ms"?e:1e3*e),(k==="deg"||k==="rad")&&(M.pfValue=k==="rad"?e:Nqe(e)),k==="%"&&(M.pfValue=e/100),M}else if(h.propList){var B=[],F=""+e;if(F!=="none"){for(var P=F.split(/\s*,\s*|\s+/),z=0;z<P.length;z++){var $=P[z].trim();i.properties[$]?B.push($):un("`"+$+"` is not a valid property name")}if(B.length===0)return null}return{name:t,value:B,strValue:B.length===0?"none":B.join(" "),bypass:r}}else if(h.color){var H=tme(e);return H?{name:t,value:H,pfValue:H,strValue:"rgb("+H[0]+","+H[1]+","+H[2]+")",bypass:r}:null}else if(h.regex||h.regexes){if(h.enums){var Q=D();if(Q)return Q}for(var j=h.regexes?h.regexes:[h.regex],ie=0;ie<j.length;ie++){var ne=new RegExp(j[ie]),le=ne.exec(e);if(le)return{name:t,value:h.singleRegexMatchValue?le[1]:le,strValue:""+e,bypass:r}}return null}else return h.string?{name:t,value:""+e,strValue:""+e,bypass:r}:h.enums?D():null};Fa=o(function t(e){if(!(this instanceof t))return new t(e);if(!JP(e)){ai("A style must have a core reference");return}this._private={cy:e,coreStyle:{}},this.length=0,this.resetToDefault()},"Style"),za=Fa.prototype;za.instanceString=function(){return"style"};za.clear=function(){for(var t=this._private,e=t.cy,r=e.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,t.contextStyles={},t.propDiffs={},this.cleanElements(r,!0),r.forEach(function(i){var a=i[0]._private;a.styleDirty=!0,a.appliedInitStyle=!1}),this};za.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this};za.core=function(t){return this._private.coreStyle[t]||this.getDefaultProperty(t)};za.selector=function(t){var e=t==="core"?null:new Lf(t),r=this.length++;return this[r]={selector:e,properties:[],mappedProperties:[],index:r},this};za.css=function(){var t=this,e=arguments;if(e.length===1)for(var r=e[0],n=0;n<t.properties.length;n++){var i=t.properties[n],a=r[i.name];a===void 0&&(a=r[LS(i.name)]),a!==void 0&&this.cssRule(i.name,a)}else e.length===2&&this.cssRule(e[0],e[1]);return this};za.style=za.css;za.cssRule=function(t,e){var r=this.parse(t,e);if(r){var n=this.length-1;this[n].properties.push(r),this[n].properties[r.name]=r,r.name.match(/pie-(\d+)-background-size/)&&r.value&&(this._private.hasPie=!0),r.mapped&&this[n].mappedProperties.push(r);var i=!this[n].selector;i&&(this._private.coreStyle[r.name]=r)}return this};za.append=function(t){return Z0e(t)?t.appendToStyle(this):En(t)?this.appendFromJson(t):Zt(t)&&this.appendFromString(t),this};Fa.fromJson=function(t,e){var r=new Fa(t);return r.fromJson(e),r};Fa.fromString=function(t,e){return new Fa(t).fromString(e)};[Ga,s4,pB,jc,VS,mB,wa,US].forEach(function(t){rr(za,t)});Fa.types=za.types;Fa.properties=za.properties;Fa.propertyGroups=za.propertyGroups;Fa.propertyGroupNames=za.propertyGroupNames;Fa.propertyGroupKeys=za.propertyGroupKeys;ZKe={style:o(function(e){if(e){var r=this.setStyle(e);r.update()}return this._private.style},"style"),setStyle:o(function(e){var r=this._private;return Z0e(e)?r.style=e.generateStyle(this):En(e)?r.style=Fa.fromJson(this,e):Zt(e)?r.style=Fa.fromString(this,e):r.style=Fa(this),r.style},"setStyle"),updateStyle:o(function(){this.mutableElements().updateStyle()},"updateStyle")},JKe="single",Hp={autolock:o(function(e){if(e!==void 0)this._private.autolock=!!e;else return this._private.autolock;return this},"autolock"),autoungrabify:o(function(e){if(e!==void 0)this._private.autoungrabify=!!e;else return this._private.autoungrabify;return this},"autoungrabify"),autounselectify:o(function(e){if(e!==void 0)this._private.autounselectify=!!e;else return this._private.autounselectify;return this},"autounselectify"),selectionType:o(function(e){var r=this._private;if(r.selectionType==null&&(r.selectionType=JKe),e!==void 0)(e==="additive"||e==="single")&&(r.selectionType=e);else return r.selectionType;return this},"selectionType"),panningEnabled:o(function(e){if(e!==void 0)this._private.panningEnabled=!!e;else return this._private.panningEnabled;return this},"panningEnabled"),userPanningEnabled:o(function(e){if(e!==void 0)this._private.userPanningEnabled=!!e;else return this._private.userPanningEnabled;return this},"userPanningEnabled"),zoomingEnabled:o(function(e){if(e!==void 0)this._private.zoomingEnabled=!!e;else return this._private.zoomingEnabled;return this},"zoomingEnabled"),userZoomingEnabled:o(function(e){if(e!==void 0)this._private.userZoomingEnabled=!!e;else return this._private.userZoomingEnabled;return this},"userZoomingEnabled"),boxSelectionEnabled:o(function(e){if(e!==void 0)this._private.boxSelectionEnabled=!!e;else return this._private.boxSelectionEnabled;return this},"boxSelectionEnabled"),pan:o(function(){var e=arguments,r=this._private.pan,n,i,a,s,l;switch(e.length){case 0:return r;case 1:if(Zt(e[0]))return n=e[0],r[n];if(Ur(e[0])){if(!this._private.panningEnabled)return this;a=e[0],s=a.x,l=a.y,Ct(s)&&(r.x=s),Ct(l)&&(r.y=l),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;n=e[0],i=e[1],(n==="x"||n==="y")&&Ct(i)&&(r[n]=i),this.emit("pan viewport");break}return this.notify("viewport"),this},"pan"),panBy:o(function(e,r){var n=arguments,i=this._private.pan,a,s,l,u,h;if(!this._private.panningEnabled)return this;switch(n.length){case 1:Ur(e)&&(l=n[0],u=l.x,h=l.y,Ct(u)&&(i.x+=u),Ct(h)&&(i.y+=h),this.emit("pan viewport"));break;case 2:a=e,s=r,(a==="x"||a==="y")&&Ct(s)&&(i[a]+=s),this.emit("pan viewport");break}return this.notify("viewport"),this},"panBy"),gc:o(function(){this.notify("gc")},"gc"),fit:o(function(e,r){var n=this.getFitViewport(e,r);if(n){var i=this._private;i.zoom=n.zoom,i.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},"fit"),getFitViewport:o(function(e,r){if(Ct(e)&&r===void 0&&(r=e,e=void 0),!(!this._private.panningEnabled||!this._private.zoomingEnabled)){var n;if(Zt(e)){var i=e;e=this.$(i)}else if(rWe(e)){var a=e;n={x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2},n.w=n.x2-n.x1,n.h=n.y2-n.y1}else go(e)||(e=this.mutableElements());if(!(go(e)&&e.empty())){n=n||e.boundingBox();var s=this.width(),l=this.height(),u;if(r=Ct(r)?r:0,!isNaN(s)&&!isNaN(l)&&s>0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0){u=Math.min((s-2*r)/n.w,(l-2*r)/n.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u<this._private.minZoom?this._private.minZoom:u;var h={x:(s-u*(n.x1+n.x2))/2,y:(l-u*(n.y1+n.y2))/2};return{zoom:u,pan:h}}}}},"getFitViewport"),zoomRange:o(function(e,r){var n=this._private;if(r==null){var i=e;e=i.min,r=i.max}return Ct(e)&&Ct(r)&&e<=r?(n.minZoom=e,n.maxZoom=r):Ct(e)&&r===void 0&&e<=n.maxZoom?n.minZoom=e:Ct(r)&&e===void 0&&r>=n.minZoom&&(n.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,n=r.pan,i=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),Ct(e)?s=e:Ur(e)&&(s=e.level,e.position!=null?a=MS(e.position,i,n):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=s<r.minZoom?r.minZoom:s,l||!Ct(s)||s===i||a!=null&&(!Ct(a.x)||!Ct(a.y)))return null;if(a!=null){var u=n,h=i,f=s,d={x:-f/h*(a.x-u.x)+a.x,y:-f/h*(a.y-u.y)+a.y};return{zoomed:!0,panned:!0,zoom:f,pan:d}}else return{zoomed:!0,panned:!1,zoom:s,pan:n}},"getZoomedViewport"),zoom:o(function(e){if(e===void 0)return this._private.zoom;var r=this.getZoomedViewport(e),n=this._private;return r==null||!r.zoomed?this:(n.zoom=r.zoom,r.panned&&(n.pan.x=r.pan.x,n.pan.y=r.pan.y),this.emit("zoom"+(r.panned?" pan":"")+" viewport"),this.notify("viewport"),this)},"zoom"),viewport:o(function(e){var r=this._private,n=!0,i=!0,a=[],s=!1,l=!1;if(!e)return this;if(Ct(e.zoom)||(n=!1),Ur(e.pan)||(i=!1),!n&&!i)return this;if(n){var u=e.zoom;u<r.minZoom||u>r.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(i&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;Ct(h.x)&&(r.pan.x=h.x,l=!1),Ct(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(Zt(e)){var n=e;e=this.mutableElements().filter(n)}else go(e)||(e=this.mutableElements());if(e.length!==0){var i=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(i.x1+i.x2))/2,y:(s-r*(i.y1+i.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,n=this;return e.sizeCache=e.sizeCache||(r?function(){var i=n.window().getComputedStyle(r),a=o(function(l){return parseFloat(i.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}}():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,n=this.renderedExtent(),i={x1:(n.x1-e.x)/r,x2:(n.x2-e.x)/r,y1:(n.y1-e.y)/r,y2:(n.y2-e.y)/r};return i.w=i.x2-i.x1,i.h=i.y2-i.y1,i},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};Hp.centre=Hp.center;Hp.autolockNodes=Hp.autolock;Hp.autoungrabifyNodes=Hp.autoungrabify;Zb={data:cn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:cn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:cn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:cn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Zb.attr=Zb.data;Zb.removeAttr=Zb.removeData;Jb=o(function(e){var r=this;e=rr({},e);var n=e.container;n&&!vS(n)&&vS(n[0])&&(n=n[0]);var i=n?n._cyreg:null;i=i||{},i&&i.cy&&(i.cy.destroy(),i={});var a=i.readies=i.readies||[];n&&(n._cyreg=i),i.cy=r;var s=Ui!==void 0&&n!==void 0&&!e.headless,l=e;l.layout=rr({name:s?"grid":"null"},l.layout),l.renderer=rr({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:n,ready:!1,options:l,elements:new ka(this),listeners:[],aniEles:new ka(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:Ct(l.zoom)?l.zoom:1,pan:{x:Ur(l.pan)&&Ct(l.pan.x)?l.pan.x:0,y:Ur(l.pan)&&Ct(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(nWe);if(v)return ey.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=rr({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Ur(g)||En(g))&&r.add(g),r.one("layoutready",function(w){r.notifications(!0),r.emit(w),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=rr({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,si(l.ready)&&r.on("ready",l.ready);for(var v=0;v<a.length;v++){var x=a[v];r.on("ready",x)}i&&(i.readies=[]),r.emit("ready")},l.done)})},"Core"),SS=Jb.prototype;rr(SS,{instanceString:o(function(){return"core"},"instanceString"),isReady:o(function(){return this._private.ready},"isReady"),destroyed:o(function(){return this._private.destroyed},"destroyed"),ready:o(function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},"ready"),destroy:o(function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},"destroy"),hasElementWithId:o(function(e){return this._private.elements.hasElementWithId(e)},"hasElementWithId"),getElementById:o(function(e){return this._private.elements.getElementById(e)},"getElementById"),hasCompoundNodes:o(function(){return this._private.hasCompoundNodes},"hasCompoundNodes"),headless:o(function(){return this._private.renderer.isHeadless()},"headless"),styleEnabled:o(function(){return this._private.styleEnabled},"styleEnabled"),addToPool:o(function(e){return this._private.elements.merge(e),this},"addToPool"),removeFromPool:o(function(e){return this._private.elements.unmerge(e),this},"removeFromPool"),container:o(function(){return this._private.container||null},"container"),window:o(function(){var e=this._private.container;if(e==null)return Ui;var r=this._private.container.ownerDocument;return r===void 0||r==null?Ui:r.defaultView||Ui},"window"),mount:o(function(e){if(e!=null){var r=this,n=r._private,i=n.options;return!vS(e)&&vS(e[0])&&(e=e[0]),r.stopAnimationLoop(),r.destroyRenderer(),n.container=e,n.styleEnabled=!0,r.invalidateSize(),r.initRenderer(rr({},i,i.renderer,{name:i.renderer.name==="null"?"canvas":i.renderer.name})),r.startAnimationLoop(),r.style(i.style),r.emit("mount"),r}},"mount"),unmount:o(function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},"unmount"),options:o(function(){return Yc(this._private.options)},"options"),json:o(function(e){var r=this,n=r._private,i=r.mutableElements(),a=o(function(C){return r.getElementById(C.id())},"getFreshRef");if(Ur(e)){if(r.startBatch(),e.elements){var s={},l=o(function(C,T){for(var E=[],A=[],S=0;S<C.length;S++){var _=C[S];if(!_.data.id){un("cy.json() cannot handle elements without an ID attribute");continue}var I=""+_.data.id,D=r.getElementById(I);s[I]=!0,D.length!==0?A.push({ele:D,json:_}):(T&&(_.group=T),E.push(_))}r.add(E);for(var k=0;k<A.length;k++){var L=A[k],R=L.ele,O=L.json;R.json(O)}},"updateEles");if(En(e.elements))l(e.elements);else for(var u=["nodes","edges"],h=0;h<u.length;h++){var f=u[h],d=e.elements[f];En(d)&&l(d,f)}var p=r.collection();i.filter(function(w){return!s[w.id()]}).forEach(function(w){w.isParent()?p.merge(w):w.remove()}),p.forEach(function(w){return w.children().move({parent:null})}),p.forEach(function(w){return a(w).remove()})}e.style&&r.style(e.style),e.zoom!=null&&e.zoom!==n.zoom&&r.zoom(e.zoom),e.pan&&(e.pan.x!==n.pan.x||e.pan.y!==n.pan.y)&&r.pan(e.pan),e.data&&r.data(e.data);for(var m=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],g=0;g<m.length;g++){var y=m[g];e[y]!=null&&r[y](e[y])}return r.endBatch(),this}else{var v=!!e,x={};v?x.elements=this.elements().map(function(w){return w.json()}):(x.elements={},i.forEach(function(w){var C=w.group();x.elements[C]||(x.elements[C]=[]),x.elements[C].push(w.json())})),this._private.styleEnabled&&(x.style=r.style().json()),x.data=Yc(r.data());var b=n.options;return x.zoomingEnabled=n.zoomingEnabled,x.userZoomingEnabled=n.userZoomingEnabled,x.zoom=n.zoom,x.minZoom=n.minZoom,x.maxZoom=n.maxZoom,x.panningEnabled=n.panningEnabled,x.userPanningEnabled=n.userPanningEnabled,x.pan=Yc(n.pan),x.boxSelectionEnabled=n.boxSelectionEnabled,x.renderer=Yc(b.renderer),x.hideEdgesOnViewport=b.hideEdgesOnViewport,x.textureOnViewport=b.textureOnViewport,x.wheelSensitivity=b.wheelSensitivity,x.motionBlur=b.motionBlur,x.multiClickDebounceTime=b.multiClickDebounceTime,x}},"json")});SS.$id=SS.getElementById;[VKe,YKe,ege,VP,pS,jKe,UP,mS,ZKe,Hp,Zb].forEach(function(t){rr(SS,t)});eQe={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")},tQe={maximal:!1,acyclic:!1},z1=o(function(e){return e.scratch("breadthfirst")},"getInfo"),T0e=o(function(e,r){return e.scratch("breadthfirst",r)},"setInfo");o(tge,"BreadthFirstLayout");tge.prototype.run=function(){var t=this.options,e=t.cy,r=t.eles,n=r.nodes().filter(function(ae){return ae.isChildless()}),i=r,a=t.directed,s=t.acyclic||t.maximal||t.maximalAdjustments>0,l=!!t.boundingBox,u=e.extent(),h=Hs(l?t.boundingBox:{x1:u.x1,y1:u.y1,w:u.w,h:u.h}),f;if(go(t.roots))f=t.roots;else if(En(t.roots)){for(var d=[],p=0;p<t.roots.length;p++){var m=t.roots[p],g=e.getElementById(m);d.push(g)}f=e.collection(d)}else if(Zt(t.roots))f=e.$(t.roots);else if(a)f=n.roots();else{var y=r.components();f=e.collection();for(var v=o(function(Oe){var ge=y[Oe],ze=ge.maxDegree(!1),He=ge.filter(function($e){return $e.degree(!1)===ze});f=f.add(He)},"_loop"),x=0;x<y.length;x++)v(x)}var b=[],w={},C=o(function(Oe,ge){b[ge]==null&&(b[ge]=[]);var ze=b[ge].length;b[ge].push(Oe),T0e(Oe,{index:ze,depth:ge})},"addToDepth"),T=o(function(Oe,ge){var ze=z1(Oe),He=ze.depth,$e=ze.index;b[He][$e]=null,Oe.isChildless()&&C(Oe,ge)},"changeDepth");i.bfs({roots:f,directed:t.directed,visit:o(function(Oe,ge,ze,He,$e){var Re=Oe[0],Ie=Re.id();Re.isChildless()&&C(Re,$e),w[Ie]=!0},"visit")});for(var E=[],A=0;A<n.length;A++){var S=n[A];w[S.id()]||E.push(S)}var _=o(function(Oe){for(var ge=b[Oe],ze=0;ze<ge.length;ze++){var He=ge[ze];if(He==null){ge.splice(ze,1),ze--;continue}T0e(He,{depth:Oe,index:ze})}},"assignDepthsAt"),I=o(function(Oe,ge){for(var ze=z1(Oe),He=Oe.incomers().filter(function(re){return re.isNode()&&r.has(re)}),$e=-1,Re=Oe.id(),Ie=0;Ie<He.length;Ie++){var be=He[Ie],W=z1(be);$e=Math.max($e,W.depth)}if(ze.depth<=$e){if(!t.acyclic&&ge[Re])return null;var de=$e+1;return T(Oe,de),ge[Re]=de,!0}return!1},"adjustMaximally");if(a&&s){var D=[],k={},L=o(function(Oe){return D.push(Oe)},"enqueue"),R=o(function(){return D.shift()},"dequeue");for(n.forEach(function(ae){return D.push(ae)});D.length>0;){var O=R(),M=I(O,k);if(M)O.outgoers().filter(function(ae){return ae.isNode()&&r.has(ae)}).forEach(L);else if(M===null){un("Detected double maximal shift for node `"+O.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var B=0;if(t.avoidOverlap)for(var F=0;F<n.length;F++){var P=n[F],z=P.layoutDimensions(t),$=z.w,H=z.h;B=Math.max(B,$,H)}var Q={},j=o(function(Oe){if(Q[Oe.id()])return Q[Oe.id()];for(var ge=z1(Oe).depth,ze=Oe.neighborhood(),He=0,$e=0,Re=0;Re<ze.length;Re++){var Ie=ze[Re];if(!(Ie.isEdge()||Ie.isParent()||!n.has(Ie))){var be=z1(Ie);if(be!=null){var W=be.index,de=be.depth;if(!(W==null||de==null)){var re=b[de].length;de<ge&&(He+=W/re,$e++)}}}}return $e=Math.max(1,$e),He=He/$e,$e===0&&(He=0),Q[Oe.id()]=He,He},"getWeightedPercent"),ie=o(function(Oe,ge){var ze=j(Oe),He=j(ge),$e=ze-He;return $e===0?eme(Oe.id(),ge.id()):$e},"sortFn");t.depthSort!==void 0&&(ie=t.depthSort);for(var ne=b.length,le=0;le<ne;le++)b[le].sort(ie),_(le);for(var he=[],K=0;K<E.length;K++)he.push(E[K]);var X=o(function(){for(var Oe=0;Oe<ne;Oe++)_(Oe)},"assignDepths");he.length&&(b.unshift(he),ne=b.length,X());for(var te=0,J=0;J<ne;J++)te=Math.max(b[J].length,te);var se={x:h.x1+h.w/2,y:h.y1+h.h/2},ue=n.reduce(function(ae,Oe){return function(ge){return{w:ae.w===-1?ge.w:(ae.w+ge.w)/2,h:ae.h===-1?ge.h:(ae.h+ge.h)/2}}(Oe.boundingBox({includeLabels:t.nodeDimensionsIncludeLabels}))},{w:-1,h:-1}),Z=Math.max(ne===1?0:l?(h.h-t.padding*2-ue.h)/(ne-1):(h.h-t.padding*2-ue.h)/(ne+1),B),Se=b.reduce(function(ae,Oe){return Math.max(ae,Oe.length)},0),ce=o(function(Oe){var ge=z1(Oe),ze=ge.depth,He=ge.index;if(t.circle){var $e=Math.min(h.w/2/ne,h.h/2/ne);$e=Math.max($e,B);var Re=$e*ze+$e-(ne>0&&b[0].length<=3?$e/2:0),Ie=2*Math.PI/b[ze].length*He;return ze===0&&b[0].length===1&&(Re=1),{x:se.x+Re*Math.cos(Ie),y:se.y+Re*Math.sin(Ie)}}else{var be=b[ze].length,W=Math.max(be===1?0:l?(h.w-t.padding*2-ue.w)/((t.grid?Se:be)-1):(h.w-t.padding*2-ue.w)/((t.grid?Se:be)+1),B),de={x:se.x+(He+1-(be+1)/2)*W,y:se.y+(ze+1-(ne+1)/2)*Z};return de}},"getPosition");return r.nodes().layoutPositions(this,t,ce),this};rQe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(rge,"CircleLayout");rge.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=n.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p<a.length;p++){var m=a[p],g=m.layoutDimensions(e),y=g.w,v=g.h;d=Math.max(d,y,v)}if(Ct(e.radius)?f=e.radius:a.length<=1?f=0:f=Math.min(s.h,s.w)/2-d,a.length>1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),w=Math.sqrt(d*d/(x*x+b*b));f=Math.max(w,f)}var C=o(function(E,A){var S=e.startAngle+A*h*(i?1:-1),_=f*Math.cos(S),I=f*Math.sin(S),D={x:l.x+_,y:l.y+I};return D},"getPos");return n.nodes().layoutPositions(this,e,C),this};nQe={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(nge,"ConcentricLayout");nge.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,n=t.cy,i=e.eles,a=i.nodes().not(":parent"),s=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f<a.length;f++){var d=a[f],p=void 0;p=e.concentric(d),u.push({value:p,node:d}),d._private.scratch.concentric=p}a.updateStyle();for(var m=0;m<a.length;m++){var g=a[m],y=g.layoutDimensions(e);h=Math.max(h,y.w,y.h)}u.sort(function(ue,Z){return Z.value-ue.value});for(var v=e.levelWidth(a),x=[[]],b=x[0],w=0;w<u.length;w++){var C=u[w];if(b.length>0){var T=Math.abs(b[0].value-C.value);T>=v&&(b=[],x.push(b))}b.push(C)}var E=h+e.minNodeSpacing;if(!e.avoidOverlap){var A=x.length>0&&x[0].length>1,S=Math.min(s.w,s.h)/2-E,_=S/(x.length+A?1:0);E=Math.min(E,_)}for(var I=0,D=0;D<x.length;D++){var k=x[D],L=e.sweep===void 0?2*Math.PI-2*Math.PI/k.length:e.sweep,R=k.dTheta=L/Math.max(1,k.length-1);if(k.length>1&&e.avoidOverlap){var O=Math.cos(R)-Math.cos(0),M=Math.sin(R)-Math.sin(0),B=Math.sqrt(E*E/(O*O+M*M));I=Math.max(B,I)}k.r=I,I+=E}if(e.equidistant){for(var F=0,P=0,z=0;z<x.length;z++){var $=x[z],H=$.r-P;F=Math.max(F,H)}P=0;for(var Q=0;Q<x.length;Q++){var j=x[Q];Q===0&&(P=j.r),j.r=P,P+=F}}for(var ie={},ne=0;ne<x.length;ne++)for(var le=x[ne],he=le.dTheta,K=le.r,X=0;X<le.length;X++){var te=le[X],J=e.startAngle+(r?1:-1)*he*X,se={x:l.x+K*Math.cos(J),y:l.y+K*Math.sin(J)};ie[te.node.id()]=se}return i.nodes().layoutPositions(this,e,function(ue){var Z=ue.id();return ie[Z]}),this};iQe={ready:o(function(){},"ready"),stop:o(function(){},"stop"),animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:o(function(e){return 2048},"nodeRepulsion"),nodeOverlap:4,idealEdgeLength:o(function(e){return 32},"idealEdgeLength"),edgeElasticity:o(function(e){return 32},"edgeElasticity"),nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};o(HS,"CoseLayout");HS.prototype.run=function(){var t=this.options,e=t.cy,r=this;r.stopped=!1,(t.animate===!0||t.animate===!1)&&r.emit({type:"layoutstart",layout:r}),t.debug===!0?_P=!0:_P=!1;var n=aQe(e,r,t);_P&&lQe(n),t.randomize&&cQe(n);var i=Qu(),a=o(function(){uQe(n,e,t),t.fit===!0&&e.fit(t.padding)},"refresh"),s=o(function(p){return!(r.stopped||p>=t.numIter||(hQe(n,t),n.temperature=n.temperature*t.coolingFactor,n.temperature<t.minTemp))},"mainLoop"),l=o(function(){if(t.animate===!0||t.animate===!1)a(),r.one("layoutstop",t.stop),r.emit({type:"layoutstop",layout:r});else{var p=t.eles.nodes(),m=ige(n,t,p);p.layoutPositions(r,t,m)}},"done"),u=0,h=!0;if(t.animate===!0){var f=o(function d(){for(var p=0;h&&p<t.refresh;)h=s(u),u++,p++;if(!h)E0e(n,t),l();else{var m=Qu();m-i>=t.animationThreshold&&a(),xS(d)}},"frame");f()}else{for(;h;)h=s(u),u++;E0e(n,t),l()}return this};HS.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};HS.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};aQe=o(function(e,r,n){for(var i=n.eles.edges(),a=n.eles.nodes(),s=Hs(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:i.size(),temperature:n.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=n.eles.components(),h={},f=0;f<u.length;f++)for(var d=u[f],p=0;p<d.length;p++){var m=d[p];h[m.id()]=f}for(var f=0;f<l.nodeSize;f++){var g=a[f],y=g.layoutDimensions(n),v={};v.isLocked=g.locked(),v.id=g.data("id"),v.parentId=g.data("parent"),v.cmptId=h[g.id()],v.children=[],v.positionX=g.position("x"),v.positionY=g.position("y"),v.offsetX=0,v.offsetY=0,v.height=y.w,v.width=y.h,v.maxX=v.positionX+v.width/2,v.minX=v.positionX-v.width/2,v.maxY=v.positionY+v.height/2,v.minY=v.positionY-v.height/2,v.padLeft=parseFloat(g.style("padding")),v.padRight=parseFloat(g.style("padding")),v.padTop=parseFloat(g.style("padding")),v.padBottom=parseFloat(g.style("padding")),v.nodeRepulsion=si(n.nodeRepulsion)?n.nodeRepulsion(g):n.nodeRepulsion,l.layoutNodes.push(v),l.idToIndex[v.id]=f}for(var x=[],b=0,w=-1,C=[],f=0;f<l.nodeSize;f++){var g=l.layoutNodes[f],T=g.parentId;T!=null?l.layoutNodes[l.idToIndex[T]].children.push(g.id):(x[++w]=g.id,C.push(g.id))}for(l.graphSet.push(C);b<=w;){var E=x[b++],A=l.idToIndex[E],m=l.layoutNodes[A],S=m.children;if(S.length>0){l.graphSet.push(S);for(var f=0;f<S.length;f++)x[++w]=S[f]}}for(var f=0;f<l.graphSet.length;f++)for(var _=l.graphSet[f],p=0;p<_.length;p++){var I=l.idToIndex[_[p]];l.indexToGraph[I]=f}for(var f=0;f<l.edgeSize;f++){var D=i[f],k={};k.id=D.data("id"),k.sourceId=D.data("source"),k.targetId=D.data("target");var L=si(n.idealEdgeLength)?n.idealEdgeLength(D):n.idealEdgeLength,R=si(n.edgeElasticity)?n.edgeElasticity(D):n.edgeElasticity,O=l.idToIndex[k.sourceId],M=l.idToIndex[k.targetId],B=l.indexToGraph[O],F=l.indexToGraph[M];if(B!=F){for(var P=sQe(k.sourceId,k.targetId,l),z=l.graphSet[P],$=0,v=l.layoutNodes[O];z.indexOf(v.id)===-1;)v=l.layoutNodes[l.idToIndex[v.parentId]],$++;for(v=l.layoutNodes[M];z.indexOf(v.id)===-1;)v=l.layoutNodes[l.idToIndex[v.parentId]],$++;L*=$*n.nestingFactor}k.idealLength=L,k.elasticity=R,l.layoutEdges.push(k)}return l},"createLayoutInfo"),sQe=o(function(e,r,n){var i=oQe(e,r,0,n);return 2>i.count?0:i.graph},"findLCA"),oQe=o(function t(e,r,n,i){var a=i.graphSet[n];if(-1<a.indexOf(e)&&-1<a.indexOf(r))return{count:2,graph:n};for(var s=0,l=0;l<a.length;l++){var u=a[l],h=i.idToIndex[u],f=i.layoutNodes[h].children;if(f.length!==0){var d=i.indexToGraph[i.idToIndex[f[0]]],p=t(e,r,d,i);if(p.count!==0)if(p.count===1){if(s++,s===2)break}else return p}}return{count:s,graph:n}},"findLCA_aux"),cQe=o(function(e,r){for(var n=e.clientWidth,i=e.clientHeight,a=0;a<e.nodeSize;a++){var s=e.layoutNodes[a];s.children.length===0&&!s.isLocked&&(s.positionX=Math.random()*n,s.positionY=Math.random()*i)}},"randomizePositions"),ige=o(function(e,r,n){var i=e.boundingBox,a={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return r.boundingBox&&(n.forEach(function(s){var l=e.layoutNodes[e.idToIndex[s.data("id")]];a.x1=Math.min(a.x1,l.positionX),a.x2=Math.max(a.x2,l.positionX),a.y1=Math.min(a.y1,l.positionY),a.y2=Math.max(a.y2,l.positionY)}),a.w=a.x2-a.x1,a.h=a.y2-a.y1),function(s,l){var u=e.layoutNodes[e.idToIndex[s.data("id")]];if(r.boundingBox){var h=(u.positionX-a.x1)/a.w,f=(u.positionY-a.y1)/a.h;return{x:i.x1+h*i.w,y:i.y1+f*i.h}}else return{x:u.positionX,y:u.positionY}}},"getScaleInBoundsFn"),uQe=o(function(e,r,n){var i=n.layout,a=n.eles.nodes(),s=ige(e,n,a);a.positions(s),e.ready!==!0&&(e.ready=!0,i.one("layoutready",n.ready),i.emit({type:"layoutready",layout:this}))},"refreshPositions"),hQe=o(function(e,r,n){fQe(e,r),mQe(e),gQe(e,r),yQe(e),vQe(e)},"step"),fQe=o(function(e,r){for(var n=0;n<e.graphSet.length;n++)for(var i=e.graphSet[n],a=i.length,s=0;s<a;s++)for(var l=e.layoutNodes[e.idToIndex[i[s]]],u=s+1;u<a;u++){var h=e.layoutNodes[e.idToIndex[i[u]]];dQe(l,h,e,r)}},"calculateNodeForces"),k0e=o(function(e){return-e+2*e*Math.random()},"randomDistance"),dQe=o(function(e,r,n,i){var a=e.cmptId,s=r.cmptId;if(!(a!==s&&!n.isCompound)){var l=r.positionX-e.positionX,u=r.positionY-e.positionY,h=1;l===0&&u===0&&(l=k0e(h),u=k0e(h));var f=pQe(e,r,l,u);if(f>0)var d=i.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=CS(e,l,u),v=CS(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,w=x*x+b*b,p=Math.sqrt(w),d=(e.nodeRepulsion+r.nodeRepulsion)/w,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),pQe=o(function(e,r,n,i){if(n>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(i>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),CS=o(function(e,r,n){var i=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=n/r,h=s/l,f={};return r===0&&0<n||r===0&&0>n?(f.x=i,f.y=a+s/2,f):0<r&&-1*h<=u&&u<=h?(f.x=i+l/2,f.y=a+l*n/2/r,f):0>r&&-1*h<=u&&u<=h?(f.x=i-l/2,f.y=a-l*n/2/r,f):0<n&&(u<=-1*h||u>=h)?(f.x=i+s*r/2/n,f.y=a+s/2,f):(0>n&&(u<=-1*h||u>=h)&&(f.x=i-s*r/2/n,f.y=a-s/2),f)},"findClippingPoint"),mQe=o(function(e,r){for(var n=0;n<e.edgeSize;n++){var i=e.layoutEdges[n],a=e.idToIndex[i.sourceId],s=e.layoutNodes[a],l=e.idToIndex[i.targetId],u=e.layoutNodes[l],h=u.positionX-s.positionX,f=u.positionY-s.positionY;if(!(h===0&&f===0)){var d=CS(s,h,f),p=CS(u,-1*h,-1*f),m=p.x-d.x,g=p.y-d.y,y=Math.sqrt(m*m+g*g),v=Math.pow(i.idealLength-y,2)/i.elasticity;if(y!==0)var x=v*m/y,b=v*g/y;else var x=0,b=0;s.isLocked||(s.offsetX+=x,s.offsetY+=b),u.isLocked||(u.offsetX-=x,u.offsetY-=b)}}},"calculateEdgeForces"),gQe=o(function(e,r){if(r.gravity!==0)for(var n=1,i=0;i<e.graphSet.length;i++){var a=e.graphSet[i],s=a.length;if(i===0)var l=e.clientHeight/2,u=e.clientWidth/2;else var h=e.layoutNodes[e.idToIndex[a[0]]],f=e.layoutNodes[e.idToIndex[h.parentId]],l=f.positionX,u=f.positionY;for(var d=0;d<s;d++){var p=e.layoutNodes[e.idToIndex[a[d]]];if(!p.isLocked){var m=l-p.positionX,g=u-p.positionY,y=Math.sqrt(m*m+g*g);if(y>n){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),yQe=o(function(e,r){var n=[],i=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;i<=a;){var s=n[i++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0<h.length&&!u.isLocked){for(var f=u.offsetX,d=u.offsetY,p=0;p<h.length;p++){var m=e.layoutNodes[e.idToIndex[h[p]]];m.offsetX+=f,m.offsetY+=d,n[++a]=h[p]}u.offsetX=0,u.offsetY=0}}},"propagateForces"),vQe=o(function(e,r){for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];0<i.children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0)}for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];if(!(0<i.children.length||i.isLocked)){var a=xQe(i.offsetX,i.offsetY,e.temperature);i.positionX+=a.x,i.positionY+=a.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,bQe(i,e)}}for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];0<i.children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},"updatePositions"),xQe=o(function(e,r,n){var i=Math.sqrt(e*e+r*r);if(i>n)var a={x:n*e/i,y:n*r/i};else var a={x:e,y:r};return a},"limitForce"),bQe=o(function t(e,r){var n=e.parentId;if(n!=null){var i=r.layoutNodes[r.idToIndex[n]],a=!1;if((i.maxX==null||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,a=!0),(i.minX==null||e.minX-i.padLeft<i.minX)&&(i.minX=e.minX-i.padLeft,a=!0),(i.maxY==null||e.maxY+i.padBottom>i.maxY)&&(i.maxY=e.maxY+i.padBottom,a=!0),(i.minY==null||e.minY-i.padTop<i.minY)&&(i.minY=e.minY-i.padTop,a=!0),a)return t(i,r)}},"updateAncestryBoundaries"),E0e=o(function(e,r){for(var n=e.layoutNodes,i=[],a=0;a<n.length;a++){var s=n[a],l=s.cmptId,u=i[l]=i[l]||[];u.push(s)}for(var h=0,a=0;a<i.length;a++){var f=i[a];if(f){f.x1=1/0,f.x2=-1/0,f.y1=1/0,f.y2=-1/0;for(var d=0;d<f.length;d++){var p=f[d];f.x1=Math.min(f.x1,p.positionX-p.width/2),f.x2=Math.max(f.x2,p.positionX+p.width/2),f.y1=Math.min(f.y1,p.positionY-p.height/2),f.y2=Math.max(f.y2,p.positionY+p.height/2)}f.w=f.x2-f.x1,f.h=f.y2-f.y1,h+=f.w*f.h}}i.sort(function(b,w){return w.w*w.h-b.w*b.h});for(var m=0,g=0,y=0,v=0,x=Math.sqrt(h)*e.clientWidth/e.clientHeight,a=0;a<i.length;a++){var f=i[a];if(f){for(var d=0;d<f.length;d++){var p=f[d];p.isLocked||(p.positionX+=m-f.x1,p.positionY+=g-f.y1)}m+=f.w+r.componentSpacing,y+=f.w+r.componentSpacing,v=Math.max(v,f.h),y>x&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),wQe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(age,"GridLayout");age.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=n.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));var a=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)n.nodes().layoutPositions(this,e,function(Q){return{x:a.x1,y:a.y1}});else{var s=i.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(j){if(j==null)return Math.min(u,h);var ie=Math.min(u,h);ie==u?u=j:h=j},"small"),d=o(function(j){if(j==null)return Math.max(u,h);var ie=Math.max(u,h);ie==u?u=j:h=j},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u<s;){var v=f(),x=d();(x+1)*v>=s?d(x+1):f(v+1)}var b=a.w/h,w=a.h/u;if(e.condense&&(b=0,w=0),e.avoidOverlap)for(var C=0;C<i.length;C++){var T=i[C],E=T._private.position;(E.x==null||E.y==null)&&(E.x=0,E.y=0);var A=T.layoutDimensions(e),S=e.avoidOverlapPadding,_=A.w+S,I=A.h+S;b=Math.max(b,_),w=Math.max(w,I)}for(var D={},k=o(function(j,ie){return!!D["c-"+j+"-"+ie]},"used"),L=o(function(j,ie){D["c-"+j+"-"+ie]=!0},"use"),R=0,O=0,M=o(function(){O++,O>=h&&(O=0,R++)},"moveToNextCell"),B={},F=0;F<i.length;F++){var P=i[F],z=e.position(P);if(z&&(z.row!==void 0||z.col!==void 0)){var $={row:z.row,col:z.col};if($.col===void 0)for($.col=0;k($.row,$.col);)$.col++;else if($.row===void 0)for($.row=0;k($.row,$.col);)$.row++;B[P.id()]=$,L($.row,$.col)}}var H=o(function(j,ie){var ne,le;if(j.locked()||j.isParent())return!1;var he=B[j.id()];if(he)ne=he.col*b+b/2+a.x1,le=he.row*w+w/2+a.y1;else{for(;k(R,O);)M();ne=O*b+b/2+a.x1,le=R*w+w/2+a.y1,L(R,O),M()}return{x:ne,y:le}},"getPos");i.layoutPositions(this,e,H)}return this};TQe={ready:o(function(){},"ready"),stop:o(function(){},"stop")};o(gB,"NullLayout");gB.prototype.run=function(){var t=this.options,e=t.eles,r=this;return t.cy,r.emit("layoutstart"),e.nodes().positions(function(){return{x:0,y:0}}),r.one("layoutready",t.ready),r.emit("layoutready"),r.one("layoutstop",t.stop),r.emit("layoutstop"),this};gB.prototype.stop=function(){return this};kQe={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,spacingFactor:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(sge,"PresetLayout");sge.prototype.run=function(){var t=this.options,e=t.eles,r=e.nodes(),n=si(t.positions);function i(a){if(t.positions==null)return Aqe(a.position());if(n)return t.positions(a);var s=t.positions[a._private.data.id];return s??null}return o(i,"getPosition"),r.layoutPositions(this,t,function(a,s){var l=i(a);return a.locked()||l==null?!1:l}),this};EQe={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(oge,"RandomLayout");oge.prototype.run=function(){var t=this.options,e=t.cy,r=t.eles,n=Hs(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),i=o(function(s,l){return{x:n.x1+Math.round(Math.random()*n.w),y:n.y1+Math.round(Math.random()*n.h)}},"getPos");return r.nodes().layoutPositions(this,t,i),this};SQe=[{name:"breadthfirst",impl:tge},{name:"circle",impl:rge},{name:"concentric",impl:nge},{name:"cose",impl:HS},{name:"grid",impl:age},{name:"null",impl:gB},{name:"preset",impl:sge},{name:"random",impl:oge}];o(lge,"NullRenderer");S0e=o(function(){},"noop"),C0e=o(function(){throw new Error("A headless instance can not render images")},"throwImgErr");lge.prototype={recalculateRenderedStyle:S0e,notify:o(function(){this.notifications++},"notify"),init:S0e,isHeadless:o(function(){return!0},"isHeadless"),png:C0e,jpg:C0e};yB={};yB.arrowShapeWidth=.3;yB.registerArrowShapes=function(){var t=this.arrowShapes={},e=this,r=o(function(h,f,d,p,m,g,y){var v=m.x-d/2-y,x=m.x+d/2+y,b=m.y-d/2-y,w=m.y+d/2+y,C=v<=h&&h<=x&&b<=f&&f<=w;return C},"bbCollide"),n=o(function(h,f,d,p,m){var g=h*Math.cos(p)-f*Math.sin(p),y=h*Math.sin(p)+f*Math.cos(p),v=g*d,x=y*d,b=v+m.x,w=x+m.y;return{x:b,y:w}},"transform"),i=o(function(h,f,d,p){for(var m=[],g=0;g<h.length;g+=2){var y=h[g],v=h[g+1];m.push(n(y,v,f,d,p))}return m},"transformPoints"),a=o(function(h){for(var f=[],d=0;d<h.length;d++){var p=h[d];f.push(p.x,p.y)}return f},"pointsToArr"),s=o(function(h){return h.pstyle("width").pfValue*h.pstyle("arrow-scale").pfValue*2},"standardGap"),l=o(function(h,f){Zt(f)&&(f=t[f]),t[h]=rr({name:h,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:o(function(p,m,g,y,v,x){var b=a(i(this.points,g+2*x,y,v)),w=Us(p,m,b);return w},"collide"),roughCollide:r,draw:o(function(p,m,g,y){var v=i(this.points,m,g,y);e.arrowShapeImpl("polygon")(p,v)},"draw"),spacing:o(function(p){return 0},"spacing"),gap:s},f)},"defineArrowShape");l("none",{collide:bS,roughCollide:bS,draw:rB,spacing:Ppe,gap:Ppe}),l("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),l("arrow","triangle"),l("triangle-backcurve",{points:t.triangle.points,controlPoint:[0,-.15],roughCollide:r,draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=this.controlPoint,v=n(y[0],y[1],f,d,p);e.arrowShapeImpl(this.name)(h,g,v)},"draw"),gap:o(function(h){return s(h)*.8},"gap")}),l("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:o(function(h,f,d,p,m,g,y){var v=a(i(this.points,d+2*y,p,m)),x=a(i(this.pointsTee,d+2*y,p,m)),b=Us(h,f,v)||Us(h,f,x);return b},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=i(this.pointsTee,f,d,p);e.arrowShapeImpl(this.name)(h,g,y)},"draw")}),l("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:o(function(h,f,d,p,m,g,y){var v=m,x=Math.pow(v.x-h,2)+Math.pow(v.y-f,2)<=Math.pow((d+2*y)*this.radius,2),b=a(i(this.points,d+2*y,p,m));return Us(h,f,b)||x},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.pointsTr,f,d,p);e.arrowShapeImpl(this.name)(h,g,p.x,p.y,this.radius*f)},"draw"),spacing:o(function(h){return e.getArrowWidth(h.pstyle("width").pfValue,h.pstyle("arrow-scale").value)*this.radius},"spacing")}),l("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:o(function(h,f){var d=this.baseCrossLinePts.slice(),p=f/h,m=3,g=5;return d[m]=d[m]-p,d[g]=d[g]-p,d},"crossLinePts"),collide:o(function(h,f,d,p,m,g,y){var v=a(i(this.points,d+2*y,p,m)),x=a(i(this.crossLinePts(d,g),d+2*y,p,m)),b=Us(h,f,v)||Us(h,f,x);return b},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=i(this.crossLinePts(f,m),f,d,p);e.arrowShapeImpl(this.name)(h,g,y)},"draw")}),l("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:o(function(h){return s(h)*.525},"gap")}),l("circle",{radius:.15,collide:o(function(h,f,d,p,m,g,y){var v=m,x=Math.pow(v.x-h,2)+Math.pow(v.y-f,2)<=Math.pow((d+2*y)*this.radius,2);return x},"collide"),draw:o(function(h,f,d,p,m){e.arrowShapeImpl(this.name)(h,p.x,p.y,this.radius*f)},"draw"),spacing:o(function(h){return e.getArrowWidth(h.pstyle("width").pfValue,h.pstyle("arrow-scale").value)*this.radius},"spacing")}),l("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:o(function(h){return 1},"spacing"),gap:o(function(h){return 1},"gap")}),l("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),l("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:o(function(h){return h.pstyle("width").pfValue*h.pstyle("arrow-scale").value},"gap")}),l("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:o(function(h){return .95*h.pstyle("width").pfValue*h.pstyle("arrow-scale").value},"gap")})};qp={};qp.projectIntoViewport=function(t,e){var r=this.cy,n=this.findContainerClientCoords(),i=n[0],a=n[1],s=n[4],l=r.pan(),u=r.zoom(),h=((t-i)/s-l.x)/u,f=((e-a)/s-l.y)/u;return[h,f]};qp.findContainerClientCoords=function(){if(this.containerBB)return this.containerBB;var t=this.container,e=t.getBoundingClientRect(),r=this.cy.window().getComputedStyle(t),n=o(function(x){return parseFloat(r.getPropertyValue(x))},"styleValue"),i={left:n("padding-left"),right:n("padding-right"),top:n("padding-top"),bottom:n("padding-bottom")},a={left:n("border-left-width"),right:n("border-right-width"),top:n("border-top-width"),bottom:n("border-bottom-width")},s=t.clientWidth,l=t.clientHeight,u=i.left+i.right,h=i.top+i.bottom,f=a.left+a.right,d=e.width/(s+f),p=s-u,m=l-h,g=e.left+i.left+a.left,y=e.top+i.top+a.top;return this.containerBB=[g,y,p,m,d]};qp.invalidateContainerClientCoordsCache=function(){this.containerBB=null};qp.findNearestElement=function(t,e,r,n){return this.findNearestElements(t,e,r,n)[0]};qp.findNearestElements=function(t,e,r,n){var i=this,a=this,s=a.getCachedZSortedEles(),l=[],u=a.cy.zoom(),h=a.cy.hasCompoundNodes(),f=(n?24:8)/u,d=(n?8:2)/u,p=(n?8:2)/u,m=1/0,g,y;r&&(s=s.interactive);function v(A,S){if(A.isNode()){if(y)return;y=A,l.push(A)}if(A.isEdge()&&(S==null||S<m))if(g){if(g.pstyle("z-compound-depth").value===A.pstyle("z-compound-depth").value&&g.pstyle("z-compound-depth").value===A.pstyle("z-compound-depth").value){for(var _=0;_<l.length;_++)if(l[_].isEdge()){l[_]=A,g=A,m=S??m;break}}}else l.push(A),g=A,m=S??m}o(v,"addEle");function x(A){var S=A.outerWidth()+2*d,_=A.outerHeight()+2*d,I=S/2,D=_/2,k=A.position(),L=A.pstyle("corner-radius").value==="auto"?"auto":A.pstyle("corner-radius").pfValue,R=A._private.rscratch;if(k.x-I<=t&&t<=k.x+I&&k.y-D<=e&&e<=k.y+D){var O=a.nodeShapes[i.getNodeShape(A)];if(O.checkPoint(t,e,0,S,_,k.x,k.y,L,R))return v(A,0),!0}}o(x,"checkNode");function b(A){var S=A._private,_=S.rscratch,I=A.pstyle("width").pfValue,D=A.pstyle("arrow-scale").value,k=I/2+f,L=k*k,R=k*2,F=S.source,P=S.target,O;if(_.edgeType==="segments"||_.edgeType==="straight"||_.edgeType==="haystack"){for(var M=_.allpts,B=0;B+3<M.length;B+=2)if(zqe(t,e,M[B],M[B+1],M[B+2],M[B+3],R)&&L>(O=Wqe(t,e,M[B],M[B+1],M[B+2],M[B+3])))return v(A,O),!0}else if(_.edgeType==="bezier"||_.edgeType==="multibezier"||_.edgeType==="self"||_.edgeType==="compound"){for(var M=_.allpts,B=0;B+5<_.allpts.length;B+=4)if(Gqe(t,e,M[B],M[B+1],M[B+2],M[B+3],M[B+4],M[B+5],R)&&L>(O=Hqe(t,e,M[B],M[B+1],M[B+2],M[B+3],M[B+4],M[B+5])))return v(A,O),!0}for(var F=F||S.source,P=P||S.target,z=i.getArrowWidth(I,D),$=[{name:"source",x:_.arrowStartX,y:_.arrowStartY,angle:_.srcArrowAngle},{name:"target",x:_.arrowEndX,y:_.arrowEndY,angle:_.tgtArrowAngle},{name:"mid-source",x:_.midX,y:_.midY,angle:_.midsrcArrowAngle},{name:"mid-target",x:_.midX,y:_.midY,angle:_.midtgtArrowAngle}],B=0;B<$.length;B++){var H=$[B],Q=a.arrowShapes[A.pstyle(H.name+"-arrow-shape").value],j=A.pstyle("width").pfValue;if(Q.roughCollide(t,e,z,H.angle,{x:H.x,y:H.y},j,f)&&Q.collide(t,e,z,H.angle,{x:H.x,y:H.y},j,f))return v(A),!0}h&&l.length>0&&(x(F),x(P))}o(b,"checkEdge");function w(A,S,_){return Gl(A,S,_)}o(w,"preprop");function C(A,S){var _=A._private,I=p,D;S?D=S+"-":D="",A.boundingBox();var k=_.labelBounds[S||"main"],L=A.pstyle(D+"label").value,R=A.pstyle("text-events").strValue==="yes";if(!(!R||!L)){var O=w(_.rscratch,"labelX",S),M=w(_.rscratch,"labelY",S),B=w(_.rscratch,"labelAngle",S),F=A.pstyle(D+"text-margin-x").pfValue,P=A.pstyle(D+"text-margin-y").pfValue,z=k.x1-I-F,$=k.x2+I-F,H=k.y1-I-P,Q=k.y2+I-P;if(B){var j=Math.cos(B),ie=Math.sin(B),ne=o(function(se,ue){return se=se-O,ue=ue-M,{x:se*j-ue*ie+O,y:se*ie+ue*j+M}},"rotate"),le=ne(z,H),he=ne(z,Q),K=ne($,H),X=ne($,Q),te=[le.x+F,le.y+P,K.x+F,K.y+P,X.x+F,X.y+P,he.x+F,he.y+P];if(Us(t,e,te))return v(A),!0}else if(K1(k,t,e))return v(A),!0}}o(C,"checkLabel");for(var T=s.length-1;T>=0;T--){var E=s[T];E.isNode()?x(E)||C(E):b(E)||C(E)||C(E,"source")||C(E,"target")}return l};qp.getAllInBox=function(t,e,r,n){var i=this.getCachedZSortedEles().interactive,a=[],s=Math.min(t,r),l=Math.max(t,r),u=Math.min(e,n),h=Math.max(e,n);t=s,r=l,e=u,n=h;for(var f=Hs({x1:t,y1:e,x2:r,y2:n}),d=0;d<i.length;d++){var p=i[d];if(p.isNode()){var m=p,g=m.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});aB(f,g)&&!yme(g,f)&&a.push(m)}else{var y=p,v=y._private,x=v.rscratch;if(x.startX!=null&&x.startY!=null&&!K1(f,x.startX,x.startY)||x.endX!=null&&x.endY!=null&&!K1(f,x.endX,x.endY))continue;if(x.edgeType==="bezier"||x.edgeType==="multibezier"||x.edgeType==="self"||x.edgeType==="compound"||x.edgeType==="segments"||x.edgeType==="haystack"){for(var b=v.rstyle.bezierPts||v.rstyle.linePts||v.rstyle.haystackPts,w=!0,C=0;C<b.length;C++)if(!$qe(f,b[C])){w=!1;break}w&&a.push(y)}else(x.edgeType==="haystack"||x.edgeType==="straight")&&a.push(y)}}return a};AS={};AS.calculateArrowAngles=function(t){var e=t._private.rscratch,r=e.edgeType==="haystack",n=e.edgeType==="bezier",i=e.edgeType==="multibezier",a=e.edgeType==="segments",s=e.edgeType==="compound",l=e.edgeType==="self",u,h,f,d,p,m,x,b;if(r?(f=e.haystackPts[0],d=e.haystackPts[1],p=e.haystackPts[2],m=e.haystackPts[3]):(f=e.arrowStartX,d=e.arrowStartY,p=e.arrowEndX,m=e.arrowEndY),x=e.midX,b=e.midY,a)u=f-e.segpts[0],h=d-e.segpts[1];else if(i||s||l||n){var g=e.allpts,y=oa(g[0],g[2],g[4],.1),v=oa(g[1],g[3],g[5],.1);u=f-y,h=d-v}else u=f-x,h=d-b;e.srcArrowAngle=K6(u,h);var x=e.midX,b=e.midY;if(r&&(x=(f+p)/2,b=(d+m)/2),u=p-f,h=m-d,a){var g=e.allpts;if(g.length/2%2===0){var w=g.length/2,C=w-2;u=g[w]-g[C],h=g[w+1]-g[C+1]}else if(e.isRound)u=e.midVector[1],h=-e.midVector[0];else{var w=g.length/2-1,C=w-2;u=g[w]-g[C],h=g[w+1]-g[C+1]}}else if(i||s||l){var g=e.allpts,T=e.ctrlpts,E,A,S,_;if(T.length/2%2===0){var I=g.length/2-1,D=I+2,k=D+2;E=oa(g[I],g[D],g[k],0),A=oa(g[I+1],g[D+1],g[k+1],0),S=oa(g[I],g[D],g[k],1e-4),_=oa(g[I+1],g[D+1],g[k+1],1e-4)}else{var D=g.length/2-1,I=D-2,k=D+2;E=oa(g[I],g[D],g[k],.4999),A=oa(g[I+1],g[D+1],g[k+1],.4999),S=oa(g[I],g[D],g[k],.5),_=oa(g[I+1],g[D+1],g[k+1],.5)}u=S-E,h=_-A}if(e.midtgtArrowAngle=K6(u,h),e.midDispX=u,e.midDispY=h,u*=-1,h*=-1,a){var g=e.allpts;if(g.length/2%2!==0){if(!e.isRound){var w=g.length/2-1,L=w+2;u=-(g[L]-g[w]),h=-(g[L+1]-g[w+1])}}}if(e.midsrcArrowAngle=K6(u,h),a)u=p-e.segpts[e.segpts.length-2],h=m-e.segpts[e.segpts.length-1];else if(i||s||l||n){var g=e.allpts,R=g.length,y=oa(g[R-6],g[R-4],g[R-2],.9),v=oa(g[R-5],g[R-3],g[R-1],.9);u=p-y,h=m-v}else u=p-x,h=m-b;e.tgtArrowAngle=K6(u,h)};AS.getArrowWidth=AS.getArrowHeight=function(t,e){var r=this.arrowWidthCache=this.arrowWidthCache||{},n=r[t+", "+e];return n||(n=Math.max(Math.pow(t*13.37,.9),29)*e,r[t+", "+e]=n,n)};qc={},Jo={},L0e=o(function(e,r,n){n.x=r.x-e.x,n.y=r.y-e.y,n.len=Math.sqrt(n.x*n.x+n.y*n.y),n.nx=n.x/n.len,n.ny=n.y/n.len,n.ang=Math.atan2(n.ny,n.nx)},"asVec"),CQe=o(function(e,r){r.x=e.x*-1,r.y=e.y*-1,r.nx=e.nx*-1,r.ny=e.ny*-1,r.ang=e.ang>0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),AQe=o(function(e,r,n,i,a){if(e!==D0e?L0e(r,e,qc):CQe(Jo,qc),L0e(r,n,Jo),A0e=qc.nx*Jo.ny-qc.ny*Jo.nx,_0e=qc.nx*Jo.nx-qc.ny*-Jo.ny,Ku=Math.asin(Math.max(-1,Math.min(1,A0e))),Math.abs(Ku)<1e-6){HP=r.x,WP=r.y,Bp=G1=0;return}Fp=1,gS=!1,_0e<0?Ku<0?Ku=Math.PI+Ku:(Ku=Math.PI-Ku,Fp=-1,gS=!0):Ku>0&&(Fp=-1,gS=!0),r.radius!==void 0?G1=r.radius:G1=i,Mp=Ku/2,aS=Math.min(qc.len/2,Jo.len/2),a?(Wc=Math.abs(Math.cos(Mp)*G1/Math.sin(Mp)),Wc>aS?(Wc=aS,Bp=Math.abs(Wc*Math.sin(Mp)/Math.cos(Mp))):Bp=G1):(Wc=Math.min(aS,G1),Bp=Math.abs(Wc*Math.sin(Mp)/Math.cos(Mp))),qP=r.x+Jo.nx*Wc,YP=r.y+Jo.ny*Wc,HP=qP-Jo.ny*Bp*Fp,WP=YP+Jo.nx*Bp*Fp,cge=r.x+qc.nx*Wc,uge=r.y+qc.ny*Wc,D0e=r},"calcCornerArc");o(hge,"drawPreparedRoundCorner");o(vB,"getRoundCorner");Va={};Va.findMidptPtsEtc=function(t,e){var r=e.posPts,n=e.intersectionPts,i=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(T,E,A,S){var _=S-E,I=A-T,D=Math.sqrt(I*I+_*_);return{x:-_/D,y:I/D}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=n;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=_i(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=_i(y,2),x=v[0],b=v[1],w={x1:m,y1:g,x2:x,y2:b};i=h(m,g,x,b),a=w}else un("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=n;break}}return{midptPts:a,vectorNormInverse:i}};Va.findHaystackPoints=function(t){for(var e=0;e<t.length;e++){var r=t[e],n=r._private,i=n.rscratch;if(!i.haystack){var a=Math.random()*2*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=Math.random()*2*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var s=n.source,l=n.target,u=s.position(),h=l.position(),f=s.width(),d=l.width(),p=s.height(),m=l.height(),g=r.pstyle("haystack-radius").value,y=g/2;i.haystackPts=i.allpts=[i.source.x*f*y+u.x,i.source.y*p*y+u.y,i.target.x*d*y+h.x,i.target.y*m*y+h.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(r),this.calculateArrowAngles(r),this.recalculateEdgeLabelProjections(r),this.calculateLabelAngles(r)}};Va.findSegmentsPoints=function(t,e){var r=t._private.rscratch,n=t.pstyle("segment-weights"),i=t.pstyle("segment-distances"),a=t.pstyle("segment-radii"),s=t.pstyle("radius-type"),l=Math.min(n.pfValue.length,i.pfValue.length),u=a.pfValue[a.pfValue.length-1],h=s.pfValue[s.pfValue.length-1];r.edgeType="segments",r.segpts=[],r.radii=[],r.isArcRadius=[];for(var f=0;f<l;f++){var d=n.pfValue[f],p=i.pfValue[f],m=1-d,g=d,y=this.findMidptPtsEtc(t,e),v=y.midptPts,x=y.vectorNormInverse,b={x:v.x1*m+v.x2*g,y:v.y1*m+v.y2*g};r.segpts.push(b.x+x.x*p,b.y+x.y*p),r.radii.push(a.pfValue[f]!==void 0?a.pfValue[f]:u),r.isArcRadius.push((s.pfValue[f]!==void 0?s.pfValue[f]:h)==="arc-radius")}};Va.findLoopPoints=function(t,e,r,n){var i=t._private.rscratch,a=e.dirCounts,s=e.srcPos,l=t.pstyle("control-point-distances"),u=l?l.pfValue[0]:void 0,h=t.pstyle("loop-direction").pfValue,f=t.pstyle("loop-sweep").pfValue,d=t.pstyle("control-point-step-size").pfValue;i.edgeType="self";var p=r,m=d;n&&(p=0,m=u);var g=h-Math.PI/2,y=g-f/2,v=g+f/2,x=h+"_"+f;p=a[x]===void 0?a[x]=0:++a[x],i.ctrlpts=[s.x+Math.cos(y)*1.4*m*(p/3+1),s.y+Math.sin(y)*1.4*m*(p/3+1),s.x+Math.cos(v)*1.4*m*(p/3+1),s.y+Math.sin(v)*1.4*m*(p/3+1)]};Va.findCompoundLoopPoints=function(t,e,r,n){var i=t._private.rscratch;i.edgeType="compound";var a=e.srcPos,s=e.tgtPos,l=e.srcW,u=e.srcH,h=e.tgtW,f=e.tgtH,d=t.pstyle("control-point-step-size").pfValue,p=t.pstyle("control-point-distances"),m=p?p.pfValue[0]:void 0,g=r,y=d;n&&(g=0,y=m);var v=50,x={x:a.x-l/2,y:a.y-u/2},b={x:s.x-h/2,y:s.y-f/2},w={x:Math.min(x.x,b.x),y:Math.min(x.y,b.y)},C=.5,T=Math.max(C,Math.log(l*.01)),E=Math.max(C,Math.log(h*.01));i.ctrlpts=[w.x,w.y-(1+Math.pow(v,1.12)/100)*y*(g/3+1)*T,w.x-(1+Math.pow(v,1.12)/100)*y*(g/3+1)*E,w.y]};Va.findStraightEdgePoints=function(t){t._private.rscratch.edgeType="straight"};Va.findBezierPoints=function(t,e,r,n,i){var a=t._private.rscratch,s=t.pstyle("control-point-step-size").pfValue,l=t.pstyle("control-point-distances"),u=t.pstyle("control-point-weights"),h=l&&u?Math.min(l.value.length,u.value.length):1,f=l?l.pfValue[0]:void 0,d=u.value[0],p=n;a.edgeType=p?"multibezier":"bezier",a.ctrlpts=[];for(var m=0;m<h;m++){var g=(.5-e.eles.length/2+r)*s*(i?-1:1),y=void 0,v=mme(g);p&&(f=l?l.pfValue[m]:s,d=u.value[m]),n?y=f:y=f!==void 0?v*f:void 0;var x=y!==void 0?y:g,b=1-d,w=d,C=this.findMidptPtsEtc(t,e),T=C.midptPts,E=C.vectorNormInverse,A={x:T.x1*b+T.x2*w,y:T.y1*b+T.y2*w};a.ctrlpts.push(A.x+E.x*x,A.y+E.y*x)}};Va.findTaxiPoints=function(t,e){var r=t._private.rscratch;r.edgeType="segments";var n="vertical",i="horizontal",a="leftward",s="rightward",l="downward",u="upward",h="auto",f=e.posPts,d=e.srcW,p=e.srcH,m=e.tgtW,g=e.tgtH,y=t.pstyle("edge-distances").value,v=y!=="node-position",x=t.pstyle("taxi-direction").value,b=x,w=t.pstyle("taxi-turn"),C=w.units==="%",T=w.pfValue,E=T<0,A=t.pstyle("taxi-turn-min-distance").pfValue,S=v?(d+m)/2:0,_=v?(p+g)/2:0,I=f.x2-f.x1,D=f.y2-f.y1,k=o(function(q,pe){return q>0?Math.max(q-pe,0):Math.min(q+pe,0)},"subDWH"),L=k(I,S),R=k(D,_),O=!1;b===h?x=Math.abs(L)>Math.abs(R)?i:n:b===u||b===l?(x=n,O=!0):(b===a||b===s)&&(x=i,O=!0);var M=x===n,B=M?R:L,F=M?D:I,P=mme(F),z=!1;!(O&&(C||E))&&(b===l&&F<0||b===u&&F>0||b===a&&F>0||b===s&&F<0)&&(P*=-1,B=P*Math.abs(B),z=!0);var $;if(C){var H=T<0?1+T:T;$=H*B}else{var Q=T<0?B:0;$=Q+T*P}var j=o(function(q){return Math.abs(q)<A||Math.abs(q)>=Math.abs(B)},"getIsTooClose"),ie=j($),ne=j(Math.abs(B)-Math.abs($)),le=ie||ne;if(le&&!z)if(M){var he=Math.abs(F)<=p/2,K=Math.abs(I)<=m/2;if(he){var X=(f.x1+f.x2)/2,te=f.y1,J=f.y2;r.segpts=[X,te,X,J]}else if(K){var se=(f.y1+f.y2)/2,ue=f.x1,Z=f.x2;r.segpts=[ue,se,Z,se]}else r.segpts=[f.x1,f.y2]}else{var Se=Math.abs(F)<=d/2,ce=Math.abs(D)<=g/2;if(Se){var ae=(f.y1+f.y2)/2,Oe=f.x1,ge=f.x2;r.segpts=[Oe,ae,ge,ae]}else if(ce){var ze=(f.x1+f.x2)/2,He=f.y1,$e=f.y2;r.segpts=[ze,He,ze,$e]}else r.segpts=[f.x2,f.y1]}else if(M){var Re=f.y1+$+(v?p/2*P:0),Ie=f.x1,be=f.x2;r.segpts=[Ie,Re,be,Re]}else{var W=f.x1+$+(v?d/2*P:0),de=f.y1,re=f.y2;r.segpts=[W,de,W,re]}if(r.isRound){var oe=t.pstyle("taxi-radius").value,V=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(oe),r.isArcRadius=new Array(r.segpts.length/2).fill(V)}};Va.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var n=e.srcPos,i=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!Ct(r.startX)||!Ct(r.startY),v=!Ct(r.arrowStartX)||!Ct(r.arrowStartY),x=!Ct(r.endX)||!Ct(r.endY),b=!Ct(r.arrowEndX)||!Ct(r.arrowEndY),w=3,C=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,T=w*C,E=Gp({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),A=E<T,S=Gp({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.endX,y:r.endY}),_=S<T,I=!1;if(y||v||A){I=!0;var D={x:r.ctrlpts[0]-n.x,y:r.ctrlpts[1]-n.y},k=Math.sqrt(D.x*D.x+D.y*D.y),L={x:D.x/k,y:D.y/k},R=Math.max(a,s),O={x:r.ctrlpts[0]+L.x*2*R,y:r.ctrlpts[1]+L.y*2*R},M=h.intersectLine(n.x,n.y,a,s,O.x,O.y,0,d,m);A?(r.ctrlpts[0]=r.ctrlpts[0]+L.x*(T-E),r.ctrlpts[1]=r.ctrlpts[1]+L.y*(T-E)):(r.ctrlpts[0]=M[0]+L.x*T,r.ctrlpts[1]=M[1]+L.y*T)}if(x||b||_){I=!0;var B={x:r.ctrlpts[0]-i.x,y:r.ctrlpts[1]-i.y},F=Math.sqrt(B.x*B.x+B.y*B.y),P={x:B.x/F,y:B.y/F},z=Math.max(a,s),$={x:r.ctrlpts[0]+P.x*2*z,y:r.ctrlpts[1]+P.y*2*z},H=f.intersectLine(i.x,i.y,l,u,$.x,$.y,0,p,g);_?(r.ctrlpts[0]=r.ctrlpts[0]+P.x*(T-S),r.ctrlpts[1]=r.ctrlpts[1]+P.y*(T-S)):(r.ctrlpts[0]=H[0]+P.x*T,r.ctrlpts[1]=H[1]+P.y*T)}I&&this.findEndpoints(t)}};Va.storeAllpts=function(t){var e=t._private.rscratch;if(e.edgeType==="multibezier"||e.edgeType==="bezier"||e.edgeType==="self"||e.edgeType==="compound"){e.allpts=[],e.allpts.push(e.startX,e.startY);for(var r=0;r+1<e.ctrlpts.length;r+=2)e.allpts.push(e.ctrlpts[r],e.ctrlpts[r+1]),r+3<e.ctrlpts.length&&e.allpts.push((e.ctrlpts[r]+e.ctrlpts[r+2])/2,(e.ctrlpts[r+1]+e.ctrlpts[r+3])/2);e.allpts.push(e.endX,e.endY);var n,i;e.ctrlpts.length/2%2===0?(n=e.allpts.length/2-1,e.midX=e.allpts[n],e.midY=e.allpts[n+1]):(n=e.allpts.length/2-3,i=.5,e.midX=oa(e.allpts[n],e.allpts[n+2],e.allpts[n+4],i),e.midY=oa(e.allpts[n+1],e.allpts[n+3],e.allpts[n+5],i))}else if(e.edgeType==="straight")e.allpts=[e.startX,e.startY,e.endX,e.endY],e.midX=(e.startX+e.endX+e.arrowStartX+e.arrowEndX)/4,e.midY=(e.startY+e.endY+e.arrowStartY+e.arrowEndY)/4;else if(e.edgeType==="segments"){if(e.allpts=[],e.allpts.push(e.startX,e.startY),e.allpts.push.apply(e.allpts,e.segpts),e.allpts.push(e.endX,e.endY),e.isRound){e.roundCorners=[];for(var a=2;a+3<e.allpts.length;a+=2){var s=e.radii[a/2-1],l=e.isArcRadius[a/2-1];e.roundCorners.push(vB({x:e.allpts[a-2],y:e.allpts[a-1]},{x:e.allpts[a],y:e.allpts[a+1],radius:s},{x:e.allpts[a+2],y:e.allpts[a+3]},s,l))}}if(e.segpts.length%4===0){var u=e.segpts.length/2,h=u-2;e.midX=(e.segpts[h]+e.segpts[u])/2,e.midY=(e.segpts[h+1]+e.segpts[u+1])/2}else{var f=e.segpts.length/2-1;if(!e.isRound)e.midX=e.segpts[f],e.midY=e.segpts[f+1];else{var d={x:e.segpts[f],y:e.segpts[f+1]},p=e.roundCorners[f/2],m=[d.x-p.cx,d.y-p.cy],g=p.radius/Math.sqrt(Math.pow(m[0],2)+Math.pow(m[1],2));m=m.map(function(y){return y*g}),e.midX=p.cx+m[0],e.midY=p.cy+m[1],e.midVector=m}}}};Va.checkForInvalidEdgeWarning=function(t){var e=t[0]._private.rscratch;e.nodesOverlap||Ct(e.startX)&&Ct(e.startY)&&Ct(e.endX)&&Ct(e.endY)?e.loggedErr=!1:e.loggedErr||(e.loggedErr=!0,un("Edge `"+t.id()+"` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap."))};Va.findEdgeControlPoints=function(t){var e=this;if(!(!t||t.length===0)){for(var r=this,n=r.cy,i=n.hasCompoundNodes(),a={map:new Xc,get:o(function(A){var S=this.map.get(A[0]);return S!=null?S.get(A[1]):null},"get"),set:o(function(A,S){var _=this.map.get(A[0]);_==null&&(_=new Xc,this.map.set(A[0],_)),_.set(A[1],S)},"set")},s=[],l=[],u=0;u<t.length;u++){var h=t[u],f=h._private,d=h.pstyle("curve-style").value;if(!(h.removed()||!h.takesUpSpace())){if(d==="haystack"){l.push(h);continue}var p=d==="unbundled-bezier"||d.endsWith("segments")||d==="straight"||d==="straight-triangle"||d.endsWith("taxi"),m=d==="unbundled-bezier"||d==="bezier",g=f.source,y=f.target,v=g.poolIndex(),x=y.poolIndex(),b=[v,x].sort(),w=a.get(b);w==null&&(w={eles:[]},a.set(b,w),s.push(b)),w.eles.push(h),p&&(w.hasUnbundled=!0),m&&(w.hasBezier=!0)}}for(var C=o(function(A){var S=s[A],_=a.get(S),I=void 0;if(!_.hasUnbundled){var D=_.eles[0].parallelEdges().filter(function(W){return W.isBundledBezier()});nB(_.eles),D.forEach(function(W){return _.eles.push(W)}),_.eles.sort(function(W,de){return W.poolIndex()-de.poolIndex()})}var k=_.eles[0],L=k.source(),R=k.target();if(L.poolIndex()>R.poolIndex()){var O=L;L=R,R=O}var M=_.srcPos=L.position(),B=_.tgtPos=R.position(),F=_.srcW=L.outerWidth(),P=_.srcH=L.outerHeight(),z=_.tgtW=R.outerWidth(),$=_.tgtH=R.outerHeight(),H=_.srcShape=r.nodeShapes[e.getNodeShape(L)],Q=_.tgtShape=r.nodeShapes[e.getNodeShape(R)],j=_.srcCornerRadius=L.pstyle("corner-radius").value==="auto"?"auto":L.pstyle("corner-radius").pfValue,ie=_.tgtCornerRadius=R.pstyle("corner-radius").value==="auto"?"auto":R.pstyle("corner-radius").pfValue,ne=_.tgtRs=R._private.rscratch,le=_.srcRs=L._private.rscratch;_.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var he=0;he<_.eles.length;he++){var K=_.eles[he],X=K[0]._private.rscratch,te=K.pstyle("curve-style").value,J=te==="unbundled-bezier"||te.endsWith("segments")||te.endsWith("taxi"),se=!L.same(K.source());if(!_.calculatedIntersection&&L!==R&&(_.hasBezier||_.hasUnbundled)){_.calculatedIntersection=!0;var ue=H.intersectLine(M.x,M.y,F,P,B.x,B.y,0,j,le),Z=_.srcIntn=ue,Se=Q.intersectLine(B.x,B.y,z,$,M.x,M.y,0,ie,ne),ce=_.tgtIntn=Se,ae=_.intersectionPts={x1:ue[0],x2:Se[0],y1:ue[1],y2:Se[1]},Oe=_.posPts={x1:M.x,x2:B.x,y1:M.y,y2:B.y},ge=Se[1]-ue[1],ze=Se[0]-ue[0],He=Math.sqrt(ze*ze+ge*ge),$e=_.vector={x:ze,y:ge},Re=_.vectorNorm={x:$e.x/He,y:$e.y/He},Ie={x:-Re.y,y:Re.x};_.nodesOverlap=!Ct(He)||Q.checkPoint(ue[0],ue[1],0,z,$,B.x,B.y,ie,ne)||H.checkPoint(Se[0],Se[1],0,F,P,M.x,M.y,j,le),_.vectorNormInverse=Ie,I={nodesOverlap:_.nodesOverlap,dirCounts:_.dirCounts,calculatedIntersection:!0,hasBezier:_.hasBezier,hasUnbundled:_.hasUnbundled,eles:_.eles,srcPos:B,srcRs:ne,tgtPos:M,tgtRs:le,srcW:z,srcH:$,tgtW:F,tgtH:P,srcIntn:ce,tgtIntn:Z,srcShape:Q,tgtShape:H,posPts:{x1:Oe.x2,y1:Oe.y2,x2:Oe.x1,y2:Oe.y1},intersectionPts:{x1:ae.x2,y1:ae.y2,x2:ae.x1,y2:ae.y1},vector:{x:-$e.x,y:-$e.y},vectorNorm:{x:-Re.x,y:-Re.y},vectorNormInverse:{x:-Ie.x,y:-Ie.y}}}var be=se?I:_;X.nodesOverlap=be.nodesOverlap,X.srcIntn=be.srcIntn,X.tgtIntn=be.tgtIntn,X.isRound=te.startsWith("round"),i&&(L.isParent()||L.isChild()||R.isParent()||R.isChild())&&(L.parents().anySame(R)||R.parents().anySame(L)||L.same(R)&&L.isParent())?e.findCompoundLoopPoints(K,be,he,J):L===R?e.findLoopPoints(K,be,he,J):te.endsWith("segments")?e.findSegmentsPoints(K,be):te.endsWith("taxi")?e.findTaxiPoints(K,be):te==="straight"||!J&&_.eles.length%2===1&&he===Math.floor(_.eles.length/2)?e.findStraightEdgePoints(K):e.findBezierPoints(K,be,he,J,se),e.findEndpoints(K),e.tryToCorrectInvalidPoints(K,be),e.checkForInvalidEdgeWarning(K),e.storeAllpts(K),e.storeEdgeProjections(K),e.calculateArrowAngles(K),e.recalculateEdgeLabelProjections(K),e.calculateLabelAngles(K)}},"_loop"),T=0;T<s.length;T++)C(T);this.findHaystackPoints(l)}};o(fge,"getPts");Va.getSegmentPoints=function(t){var e=t[0]._private.rscratch;this.recalculateRenderedStyle(t);var r=e.edgeType;if(r==="segments")return fge(e.segpts)};Va.getControlPoints=function(t){var e=t[0]._private.rscratch;this.recalculateRenderedStyle(t);var r=e.edgeType;if(r==="bezier"||r==="multibezier"||r==="self"||r==="compound")return fge(e.ctrlpts)};Va.getEdgeMidpoint=function(t){var e=t[0]._private.rscratch;return this.recalculateRenderedStyle(t),{x:e.midX,y:e.midY}};o4={};o4.manualEndptToPx=function(t,e){var r=this,n=t.position(),i=t.outerWidth(),a=t.outerHeight(),s=t._private.rscratch;if(e.value.length===2){var l=[e.pfValue[0],e.pfValue[1]];return e.units[0]==="%"&&(l[0]=l[0]*i),e.units[1]==="%"&&(l[1]=l[1]*a),l[0]+=n.x,l[1]+=n.y,l}else{var u=e.pfValue[0];u=-Math.PI/2+u;var h=2*Math.max(i,a),f=[n.x+Math.cos(u)*h,n.y+Math.sin(u)*h];return r.nodeShapes[this.getNodeShape(t)].intersectLine(n.x,n.y,i,a,f[0],f[1],0,t.pstyle("corner-radius").value==="auto"?"auto":t.pstyle("corner-radius").pfValue,s)}};o4.findEndpoints=function(t){var e=this,r,n=t.source()[0],i=t.target()[0],a=n.position(),s=i.position(),l=t.pstyle("target-arrow-shape").value,u=t.pstyle("source-arrow-shape").value,h=t.pstyle("target-distance-from-node").pfValue,f=t.pstyle("source-distance-from-node").pfValue,d=n._private.rscratch,p=i._private.rscratch,m=t.pstyle("curve-style").value,g=t._private.rscratch,y=g.edgeType,v=m==="taxi",x=y==="self"||y==="compound",b=y==="bezier"||y==="multibezier"||x,w=y!=="bezier",C=y==="straight"||y==="segments",T=y==="segments",E=b||w||C,A=x||v,S=t.pstyle("source-endpoint"),_=A?"outside-to-node":S.value,I=n.pstyle("corner-radius").value==="auto"?"auto":n.pstyle("corner-radius").pfValue,D=t.pstyle("target-endpoint"),k=A?"outside-to-node":D.value,L=i.pstyle("corner-radius").value==="auto"?"auto":i.pstyle("corner-radius").pfValue;g.srcManEndpt=S,g.tgtManEndpt=D;var R,O,M,B;if(b){var F=[g.ctrlpts[0],g.ctrlpts[1]],P=w?[g.ctrlpts[g.ctrlpts.length-2],g.ctrlpts[g.ctrlpts.length-1]]:F;R=P,O=F}else if(C){var z=T?g.segpts.slice(0,2):[s.x,s.y],$=T?g.segpts.slice(g.segpts.length-2):[a.x,a.y];R=$,O=z}if(k==="inside-to-node")r=[s.x,s.y];else if(D.units)r=this.manualEndptToPx(i,D);else if(k==="outside-to-line")r=g.tgtIntn;else if(k==="outside-to-node"||k==="outside-to-node-or-label"?M=R:(k==="outside-to-line"||k==="outside-to-line-or-label")&&(M=[a.x,a.y]),r=e.nodeShapes[this.getNodeShape(i)].intersectLine(s.x,s.y,i.outerWidth(),i.outerHeight(),M[0],M[1],0,L,p),k==="outside-to-node-or-label"||k==="outside-to-line-or-label"){var H=i._private.rscratch,Q=H.labelWidth,j=H.labelHeight,ie=H.labelX,ne=H.labelY,le=Q/2,he=j/2,K=i.pstyle("text-valign").value;K==="top"?ne-=he:K==="bottom"&&(ne+=he);var X=i.pstyle("text-halign").value;X==="left"?ie-=le:X==="right"&&(ie+=le);var te=Xb(M[0],M[1],[ie-le,ne-he,ie+le,ne-he,ie+le,ne+he,ie-le,ne+he],s.x,s.y);if(te.length>0){var J=a,se=Op(J,U1(r)),ue=Op(J,U1(te)),Z=se;if(ue<se&&(r=te,Z=ue),te.length>2){var Se=Op(J,{x:te[2],y:te[3]});Se<Z&&(r=[te[2],te[3]])}}}var ce=Q6(r,R,e.arrowShapes[l].spacing(t)+h),ae=Q6(r,R,e.arrowShapes[l].gap(t)+h);if(g.endX=ae[0],g.endY=ae[1],g.arrowEndX=ce[0],g.arrowEndY=ce[1],_==="inside-to-node")r=[a.x,a.y];else if(S.units)r=this.manualEndptToPx(n,S);else if(_==="outside-to-line")r=g.srcIntn;else if(_==="outside-to-node"||_==="outside-to-node-or-label"?B=O:(_==="outside-to-line"||_==="outside-to-line-or-label")&&(B=[s.x,s.y]),r=e.nodeShapes[this.getNodeShape(n)].intersectLine(a.x,a.y,n.outerWidth(),n.outerHeight(),B[0],B[1],0,I,d),_==="outside-to-node-or-label"||_==="outside-to-line-or-label"){var Oe=n._private.rscratch,ge=Oe.labelWidth,ze=Oe.labelHeight,He=Oe.labelX,$e=Oe.labelY,Re=ge/2,Ie=ze/2,be=n.pstyle("text-valign").value;be==="top"?$e-=Ie:be==="bottom"&&($e+=Ie);var W=n.pstyle("text-halign").value;W==="left"?He-=Re:W==="right"&&(He+=Re);var de=Xb(B[0],B[1],[He-Re,$e-Ie,He+Re,$e-Ie,He+Re,$e+Ie,He-Re,$e+Ie],a.x,a.y);if(de.length>0){var re=s,oe=Op(re,U1(r)),V=Op(re,U1(de)),xe=oe;if(V<oe&&(r=[de[0],de[1]],xe=V),de.length>2){var q=Op(re,{x:de[2],y:de[3]});q<xe&&(r=[de[2],de[3]])}}}var pe=Q6(r,O,e.arrowShapes[u].spacing(t)+f),ve=Q6(r,O,e.arrowShapes[u].gap(t)+f);g.startX=ve[0],g.startY=ve[1],g.arrowStartX=pe[0],g.arrowStartY=pe[1],E&&(!Ct(g.startX)||!Ct(g.startY)||!Ct(g.endX)||!Ct(g.endY)?g.badLine=!0:g.badLine=!1)};o4.getSourceEndpoint=function(t){var e=t[0]._private.rscratch;switch(this.recalculateRenderedStyle(t),e.edgeType){case"haystack":return{x:e.haystackPts[0],y:e.haystackPts[1]};default:return{x:e.arrowStartX,y:e.arrowStartY}}};o4.getTargetEndpoint=function(t){var e=t[0]._private.rscratch;switch(this.recalculateRenderedStyle(t),e.edgeType){case"haystack":return{x:e.haystackPts[2],y:e.haystackPts[3]};default:return{x:e.arrowEndX,y:e.arrowEndY}}};xB={};o(_Qe,"pushBezierPts");xB.storeEdgeProjections=function(t){var e=t._private,r=e.rscratch,n=r.edgeType;if(e.rstyle.bezierPts=null,e.rstyle.linePts=null,e.rstyle.haystackPts=null,n==="multibezier"||n==="bezier"||n==="self"||n==="compound"){e.rstyle.bezierPts=[];for(var i=0;i+5<r.allpts.length;i+=4)_Qe(this,t,r.allpts.slice(i,i+6))}else if(n==="segments")for(var a=e.rstyle.linePts=[],i=0;i+1<r.allpts.length;i+=2)a.push({x:r.allpts[i],y:r.allpts[i+1]});else if(n==="haystack"){var s=r.haystackPts;e.rstyle.haystackPts=[{x:s[0],y:s[1]},{x:s[2],y:s[3]}]}e.rstyle.arrowWidth=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth};xB.recalculateEdgeProjections=function(t){this.findEdgeControlPoints(t)};Kc={};Kc.recalculateNodeLabelProjection=function(t){var e=t.pstyle("label").strValue;if(!Af(e)){var r,n,i=t._private,a=t.width(),s=t.height(),l=t.padding(),u=t.position(),h=t.pstyle("text-halign").strValue,f=t.pstyle("text-valign").strValue,d=i.rscratch,p=i.rstyle;switch(h){case"left":r=u.x-a/2-l;break;case"right":r=u.x+a/2+l;break;default:r=u.x}switch(f){case"top":n=u.y-s/2-l;break;case"bottom":n=u.y+s/2+l;break;default:n=u.y}d.labelX=r,d.labelY=n,p.labelX=r,p.labelY=n,this.calculateLabelAngles(t),this.applyLabelDimensions(t)}};dge=o(function(e,r){var n=Math.atan(r/e);return e===0&&n<0&&(n=n*-1),n},"lineAngleFromDelta"),pge=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return dge(n,i)},"lineAngle"),DQe=o(function(e,r,n,i){var a=Yb(0,i-.001,1),s=Yb(0,i+.001,1),l=W1(e,r,n,a),u=W1(e,r,n,s);return pge(l,u)},"bezierAngle");Kc.recalculateEdgeLabelProjections=function(t){var e,r=t._private,n=r.rscratch,i=this,a={mid:t.pstyle("label").strValue,source:t.pstyle("source-label").strValue,target:t.pstyle("target-label").strValue};if(a.mid||a.source||a.target){e={x:n.midX,y:n.midY};var s=o(function(d,p,m){kf(r.rscratch,d,p,m),kf(r.rstyle,d,p,m)},"setRs");s("labelX",null,e.x),s("labelY",null,e.y);var l=dge(n.midDispX,n.midDispY);s("labelAutoAngle",null,l);var u=o(function f(){if(f.cache)return f.cache;for(var d=[],p=0;p+5<n.allpts.length;p+=4){var m={x:n.allpts[p],y:n.allpts[p+1]},g={x:n.allpts[p+2],y:n.allpts[p+3]},y={x:n.allpts[p+4],y:n.allpts[p+5]};d.push({p0:m,p1:g,p2:y,startDist:0,length:0,segments:[]})}var v=r.rstyle.bezierPts,x=i.bezierProjPcts.length;function b(A,S,_,I,D){var k=Gp(S,_),L=A.segments[A.segments.length-1],R={p0:S,p1:_,t0:I,t1:D,startDist:L?L.startDist+L.length:0,length:k};A.segments.push(R),A.length+=k}o(b,"addSegment");for(var w=0;w<d.length;w++){var C=d[w],T=d[w-1];T&&(C.startDist=T.startDist+T.length),b(C,C.p0,v[w*x],0,i.bezierProjPcts[0]);for(var E=0;E<x-1;E++)b(C,v[w*x+E],v[w*x+E+1],i.bezierProjPcts[E],i.bezierProjPcts[E+1]);b(C,v[w*x+x-1],C.p2,i.bezierProjPcts[x-1],1)}return f.cache=d},"createControlPointInfo"),h=o(function(d){var p,m=d==="source";if(a[d]){var g=t.pstyle(d+"-text-offset").pfValue;switch(n.edgeType){case"self":case"compound":case"bezier":case"multibezier":{for(var y=u(),v,x=0,b=0,w=0;w<y.length;w++){for(var C=y[m?w:y.length-1-w],T=0;T<C.segments.length;T++){var E=C.segments[m?T:C.segments.length-1-T],A=w===y.length-1&&T===C.segments.length-1;if(x=b,b+=E.length,b>=g||A){v={cp:C,segment:E};break}}if(v)break}var S=v.cp,_=v.segment,I=(g-x)/_.length,D=_.t1-_.t0,k=m?_.t0+D*I:_.t1-D*I;k=Yb(0,k,1),e=W1(S.p0,S.p1,S.p2,k),p=DQe(S.p0,S.p1,S.p2,k);break}case"straight":case"segments":case"haystack":{for(var L=0,R,O,M,B,F=n.allpts.length,P=0;P+3<F&&(m?(M={x:n.allpts[P],y:n.allpts[P+1]},B={x:n.allpts[P+2],y:n.allpts[P+3]}):(M={x:n.allpts[F-2-P],y:n.allpts[F-1-P]},B={x:n.allpts[F-4-P],y:n.allpts[F-3-P]}),R=Gp(M,B),O=L,L+=R,!(L>=g));P+=2);var z=g-O,$=z/R;$=Yb(0,$,1),e=Iqe(M,B,$),p=pge(M,B);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};Kc.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};Kc.applyPrefixedLabelDimensions=function(t,e){var r=t._private,n=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,n),a=t.pstyle("line-height").pfValue,s=t.pstyle("text-wrap").strValue,l=Gl(r.rscratch,"labelWrapCachedLines",e)||[],u=s!=="wrap"?1:Math.max(l.length,1),h=i.height/u,f=h*a,d=i.width,p=i.height+(u-1)*(a-1)*h;kf(r.rstyle,"labelWidth",e,d),kf(r.rscratch,"labelWidth",e,d),kf(r.rstyle,"labelHeight",e,p),kf(r.rscratch,"labelHeight",e,p),kf(r.rscratch,"labelLineHeight",e,f)};Kc.getLabelText=function(t,e){var r=t._private,n=e?e+"-":"",i=t.pstyle(n+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(Q,j){return j?(kf(r.rscratch,Q,e,j),j):Gl(r.rscratch,Q,e)},"rscratch");if(!i)return"";a=="none"||(a=="uppercase"?i=i.toUpperCase():a=="lowercase"&&(i=i.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=i.split(` | |
| 1952 | +`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;v<f.length;v++){var x=f[v],b=this.calculateLabelDimensions(t,x),w=b.width;if(m){var C=x.split("").join(h);x=C}if(w>d){var T=x.matchAll(y),E="",A=0,S=mo(T),_;try{for(S.s();!(_=S.n()).done;){var I=_.value,D=I[0],k=x.substring(A,I.index);A=I.index+D.length;var L=E.length===0?k:E+k+D,R=this.calculateLabelDimensions(t,L),O=R.width;O<=d?E+=k+D:(E&&g.push(E),E=k+D)}}catch(H){S.e(H)}finally{S.f()}E.match(/^[\s\u200b]+$/)||g.push(E)}else g.push(x)}s("labelWrapCachedLines",g),i=s("labelWrapCachedText",g.join(` | |
| 1953 | +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var M=t.pstyle("text-max-width").pfValue,B="",F="\u2026",P=!1;if(this.calculateLabelDimensions(t,i).width<M)return i;for(var z=0;z<i.length;z++){var $=this.calculateLabelDimensions(t,B+i[z]+F).width;if($>M)break;B+=i[z],z===i.length-1&&(P=!0)}return P||(B+=F),B}return i};Kc.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};Kc.calculateLabelDimensions=function(t,e){var r=this,n=r.cy.window(),i=n.document,a=_f(e,t._private.labelDimsKey),s=r.labelDimCache||(r.labelDimCache=[]),l=s[a];if(l!=null)return l;var u=0,h=t.pstyle("font-style").strValue,f=t.pstyle("font-size").pfValue,d=t.pstyle("font-family").strValue,p=t.pstyle("font-weight").strValue,m=this.labelCalcCanvas,g=this.labelCalcCanvasContext;if(!m){m=this.labelCalcCanvas=i.createElement("canvas"),g=this.labelCalcCanvasContext=m.getContext("2d");var y=m.style;y.position="absolute",y.left="-9999px",y.top="-9999px",y.zIndex="-1",y.visibility="hidden",y.pointerEvents="none"}g.font="".concat(h," ").concat(p," ").concat(f,"px ").concat(d);for(var v=0,x=0,b=e.split(` | |
| 1954 | +`),w=0;w<b.length;w++){var C=b[w],T=g.measureText(C),E=Math.ceil(T.width),A=f;v=Math.max(E,v),x+=A}return v+=u,x+=u,s[a]={width:v,height:x}};Kc.calculateLabelAngle=function(t,e){var r=t._private,n=r.rscratch,i=t.isEdge(),a=e?e+"-":"",s=t.pstyle(a+"text-rotation"),l=s.strValue;return l==="none"?0:i&&l==="autorotate"?n.labelAutoAngle:l==="autorotate"?0:s.pfValue};Kc.calculateLabelAngles=function(t){var e=this,r=t.isEdge(),n=t._private,i=n.rscratch;i.labelAngle=e.calculateLabelAngle(t),r&&(i.sourceLabelAngle=e.calculateLabelAngle(t,"source"),i.targetLabelAngle=e.calculateLabelAngle(t,"target"))};mge={},R0e=28,N0e=!1;mge.getNodeShape=function(t){var e=this,r=t.pstyle("shape").value;if(r==="cutrectangle"&&(t.width()<R0e||t.height()<R0e))return N0e||(un("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),N0e=!0),"rectangle";if(t.isParent())return r==="rectangle"||r==="roundrectangle"||r==="round-rectangle"||r==="cutrectangle"||r==="cut-rectangle"||r==="barrel"?r:"rectangle";if(r==="polygon"){var n=t.pstyle("shape-polygon-points").value;return e.nodeShapes.makePolygon(n).name}return r};WS={};WS.registerCalculationListeners=function(){var t=this.cy,e=t.collection(),r=this,n=o(function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u<s.length;u++){var h=s[u],f=h._private,d=f.rstyle;d.clean=!1,d.cleanConnected=!1}},"enqueue");r.binder(t).on("bounds.* dirty.*",o(function(s){var l=s.target;n(l)},"onDirtyBounds")).on("style.* background.*",o(function(s){var l=s.target;n(l,!1)},"onDirtyStyle"));var i=o(function(s){if(s){var l=r.onUpdateEleCalcsFns;e.cleanStyle();for(var u=0;u<e.length;u++){var h=e[u],f=h._private.rstyle;h.isNode()&&!f.cleanConnected&&(n(h.connectedEdges()),f.cleanConnected=!0)}if(l)for(var d=0;d<l.length;d++){var p=l[d];p(s,e)}r.recalculateRenderedStyle(e),e=t.collection()}},"updateEleCalcs");r.flushRenderedStyleQueue=function(){i(!0)},r.beforeRender(i,r.beforeRenderPriorities.eleCalcs)};WS.onUpdateEleCalcs=function(t){var e=this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[];e.push(t)};WS.recalculateRenderedStyle=function(t,e){var r=o(function(C){return C._private.rstyle.cleanConnected},"isCleanConnected"),n=[],i=[];if(!this.destroyed){e===void 0&&(e=!0);for(var a=0;a<t.length;a++){var s=t[a],l=s._private,u=l.rstyle;s.isEdge()&&(!r(s.source())||!r(s.target()))&&(u.clean=!1),!(e&&u.clean||s.removed())&&s.pstyle("display").value!=="none"&&(l.group==="nodes"?i.push(s):n.push(s),u.clean=!0)}for(var h=0;h<i.length;h++){var f=i[h],d=f._private,p=d.rstyle,m=f.position();this.recalculateNodeLabelProjection(f),p.nodeX=m.x,p.nodeY=m.y,p.nodeW=f.pstyle("width").pfValue,p.nodeH=f.pstyle("height").pfValue}this.recalculateEdgeProjections(n);for(var g=0;g<n.length;g++){var y=n[g],v=y._private,x=v.rstyle,b=v.rscratch;x.srcX=b.arrowStartX,x.srcY=b.arrowStartY,x.tgtX=b.arrowEndX,x.tgtY=b.arrowEndY,x.midX=b.midX,x.midY=b.midY,x.labelAngle=b.labelAngle,x.sourceLabelAngle=b.sourceLabelAngle,x.targetLabelAngle=b.targetLabelAngle}}};qS={};qS.updateCachedGrabbedEles=function(){var t=this.cachedZSortedEles;if(t){t.drag=[],t.nondrag=[];for(var e=[],r=0;r<t.length;r++){var n=t[r],i=n._private.rscratch;n.grabbed()&&!n.isParent()?e.push(n):i.inDragLayer?t.drag.push(n):t.nondrag.push(n)}for(var r=0;r<e.length;r++){var n=e[r];t.drag.push(n)}}};qS.invalidateCachedZSortedEles=function(){this.cachedZSortedEles=null};qS.getCachedZSortedEles=function(t){if(t||!this.cachedZSortedEles){var e=this.cy.mutableElements().toArray();e.sort(Zme),e.interactive=e.filter(function(r){return r.interactive()}),this.cachedZSortedEles=e,this.updateCachedGrabbedEles()}else e=this.cachedZSortedEles;return e};gge={};[qp,AS,Va,o4,xB,Kc,mge,WS,qS].forEach(function(t){rr(gge,t)});yge={};yge.getCachedImage=function(t,e,r){var n=this,i=n.imageCache=n.imageCache||{},a=i[t];if(a)return a.image.complete||a.image.addEventListener("load",r),a.image;a=i[t]=i[t]||{};var s=a.image=new Image;s.addEventListener("load",r),s.addEventListener("error",function(){s.error=!0});var l="data:",u=t.substring(0,l.length).toLowerCase()===l;return u||(e=e==="null"?null:e,s.crossOrigin=e),s.src=t,s};sy={};sy.registerBinding=function(t,e,r,n){var i=Array.prototype.slice.apply(arguments,[1]);if(Array.isArray(t)){for(var a=[],s=0;s<t.length;s++){var l=t[s];if(l!==void 0){var u=this.binder(l);a.push(u.on.apply(u,i))}}return a}var u=this.binder(t);return u.on.apply(u,i)};sy.binder=function(t){var e=this,r=e.cy.window(),n=t===r||t===r.document||t===r.document.body||tWe(t);if(e.supportsPassiveEvents==null){var i=!1;try{var a=Object.defineProperty({},"passive",{get:o(function(){return i=!0,!0},"get")});r.addEventListener("test",null,a)}catch{}e.supportsPassiveEvents=i}var s=o(function(u,h,f){var d=Array.prototype.slice.call(arguments);return n&&e.supportsPassiveEvents&&(d[2]={capture:f??!1,passive:!1,once:!1}),e.bindings.push({target:t,args:d}),(t.addEventListener||t.on).apply(t,d),this},"on");return{on:s,addEventListener:s,addListener:s,bind:s}};sy.nodeIsDraggable=function(t){return t&&t.isNode()&&!t.locked()&&t.grabbable()};sy.nodeIsGrabbable=function(t){return this.nodeIsDraggable(t)&&t.interactive()};sy.load=function(){var t=this,e=t.cy.window(),r=o(function(W){return W.selected()},"isSelected"),n=o(function(W){var de=W.getRootNode();if(de&&de.nodeType===11&&de.host!==void 0)return de},"getShadowRoot"),i=o(function(W,de,re,oe){W==null&&(W=t.cy);for(var V=0;V<de.length;V++){var xe=de[V];W.emit({originalEvent:re,type:xe,position:oe})}},"triggerEvents"),a=o(function(W){return W.shiftKey||W.metaKey||W.ctrlKey},"isMultSelKeyDown"),s=o(function(W,de){var re=!0;if(t.cy.hasCompoundNodes()&&W&&W.pannable())for(var oe=0;de&&oe<de.length;oe++){var W=de[oe];if(W.isNode()&&W.isParent()&&!W.pannable()){re=!1;break}}else re=!0;return re},"allowPanningPassthrough"),l=o(function(W){W[0]._private.grabbed=!0},"setGrabbed"),u=o(function(W){W[0]._private.grabbed=!1},"setFreed"),h=o(function(W){W[0]._private.rscratch.inDragLayer=!0},"setInDragLayer"),f=o(function(W){W[0]._private.rscratch.inDragLayer=!1},"setOutDragLayer"),d=o(function(W){W[0]._private.rscratch.isGrabTarget=!0},"setGrabTarget"),p=o(function(W){W[0]._private.rscratch.isGrabTarget=!1},"removeGrabTarget"),m=o(function(W,de){var re=de.addToList,oe=re.has(W);!oe&&W.grabbable()&&!W.locked()&&(re.merge(W),l(W))},"addToDragList"),g=o(function(W,de){if(W.cy().hasCompoundNodes()&&!(de.inDragLayer==null&&de.addToList==null)){var re=W.descendants();de.inDragLayer&&(re.forEach(h),re.connectedEdges().forEach(h)),de.addToList&&m(re,de)}},"addDescendantsToDrag"),y=o(function(W,de){de=de||{};var re=W.cy().hasCompoundNodes();de.inDragLayer&&(W.forEach(h),W.neighborhood().stdFilter(function(oe){return!re||oe.isEdge()}).forEach(h)),de.addToList&&W.forEach(function(oe){m(oe,de)}),g(W,de),b(W,{inDragLayer:de.inDragLayer}),t.updateCachedGrabbedEles()},"addNodesToDrag"),v=y,x=o(function(W){W&&(t.getCachedZSortedEles().forEach(function(de){u(de),f(de),p(de)}),t.updateCachedGrabbedEles())},"freeDraggedElements"),b=o(function(W,de){if(!(de.inDragLayer==null&&de.addToList==null)&&W.cy().hasCompoundNodes()){var re=W.ancestors().orphans();if(!re.same(W)){var oe=re.descendants().spawnSelf().merge(re).unmerge(W).unmerge(W.descendants()),V=oe.connectedEdges();de.inDragLayer&&(V.forEach(h),oe.forEach(h)),de.addToList&&oe.forEach(function(xe){m(xe,de)})}}},"updateAncestorsInDragLayer"),w=o(function(){document.activeElement!=null&&document.activeElement.blur!=null&&document.activeElement.blur()},"blurActiveDomElement"),C=typeof MutationObserver<"u",T=typeof ResizeObserver<"u";C?(t.removeObserver=new MutationObserver(function(be){for(var W=0;W<be.length;W++){var de=be[W],re=de.removedNodes;if(re)for(var oe=0;oe<re.length;oe++){var V=re[oe];if(V===t.container){t.destroy();break}}}}),t.container.parentNode&&t.removeObserver.observe(t.container.parentNode,{childList:!0})):t.registerBinding(t.container,"DOMNodeRemoved",function(be){t.destroy()});var E=n4(function(){t.cy.resize()},100);C&&(t.styleObserver=new MutationObserver(E),t.styleObserver.observe(t.container,{attributes:!0})),t.registerBinding(e,"resize",E),T&&(t.resizeObserver=new ResizeObserver(E),t.resizeObserver.observe(t.container));var A=o(function(W,de){for(;W!=null;)de(W),W=W.parentNode},"forEachUp"),S=o(function(){t.invalidateContainerClientCoordsCache()},"invalidateCoords");A(t.container,function(be){t.registerBinding(be,"transitionend",S),t.registerBinding(be,"animationend",S),t.registerBinding(be,"scroll",S)}),t.registerBinding(t.container,"contextmenu",function(be){be.preventDefault()});var _=o(function(){return t.selection[4]!==0},"inBoxSelection"),I=o(function(W){for(var de=t.findContainerClientCoords(),re=de[0],oe=de[1],V=de[2],xe=de[3],q=W.touches?W.touches:[W],pe=!1,ve=0;ve<q.length;ve++){var Pe=q[ve];if(re<=Pe.clientX&&Pe.clientX<=re+V&&oe<=Pe.clientY&&Pe.clientY<=oe+xe){pe=!0;break}}if(!pe)return!1;for(var _e=t.container,we=W.target,Ve=we.parentNode,De=!1;Ve;){if(Ve===_e){De=!0;break}Ve=Ve.parentNode}return!!De},"eventInContainer");t.registerBinding(t.container,"mousedown",o(function(W){if(I(W)&&!(t.hoverData.which===1&&W.which!==1)){W.preventDefault(),w(),t.hoverData.capture=!0,t.hoverData.which=W.which;var de=t.cy,re=[W.clientX,W.clientY],oe=t.projectIntoViewport(re[0],re[1]),V=t.selection,xe=t.findNearestElements(oe[0],oe[1],!0,!1),q=xe[0],pe=t.dragData.possibleDragElements;t.hoverData.mdownPos=oe,t.hoverData.mdownGPos=re;var ve=o(function(){t.hoverData.tapholdCancelled=!1,clearTimeout(t.hoverData.tapholdTimeout),t.hoverData.tapholdTimeout=setTimeout(function(){if(!t.hoverData.tapholdCancelled){var qe=t.hoverData.down;qe?qe.emit({originalEvent:W,type:"taphold",position:{x:oe[0],y:oe[1]}}):de.emit({originalEvent:W,type:"taphold",position:{x:oe[0],y:oe[1]}})}},t.tapholdDuration)},"checkForTaphold");if(W.which==3){t.hoverData.cxtStarted=!0;var Pe={originalEvent:W,type:"cxttapstart",position:{x:oe[0],y:oe[1]}};q?(q.activate(),q.emit(Pe),t.hoverData.down=q):de.emit(Pe),t.hoverData.downTime=new Date().getTime(),t.hoverData.cxtDragged=!1}else if(W.which==1){q&&q.activate();{if(q!=null&&t.nodeIsGrabbable(q)){var _e=o(function(qe){return{originalEvent:W,type:qe,position:{x:oe[0],y:oe[1]}}},"makeEvent"),we=o(function(qe){qe.emit(_e("grab"))},"triggerGrab");if(d(q),!q.selected())pe=t.dragData.possibleDragElements=de.collection(),v(q,{addToList:pe}),q.emit(_e("grabon")).emit(_e("grab"));else{pe=t.dragData.possibleDragElements=de.collection();var Ve=de.$(function(De){return De.isNode()&&De.selected()&&t.nodeIsGrabbable(De)});y(Ve,{addToList:pe}),q.emit(_e("grabon")),Ve.forEach(we)}t.redrawHint("eles",!0),t.redrawHint("drag",!0)}t.hoverData.down=q,t.hoverData.downs=xe,t.hoverData.downTime=new Date().getTime()}i(q,["mousedown","tapstart","vmousedown"],W,{x:oe[0],y:oe[1]}),q==null?(V[4]=1,t.data.bgActivePosistion={x:oe[0],y:oe[1]},t.redrawHint("select",!0),t.redraw()):q.pannable()&&(V[4]=1),ve()}V[0]=V[2]=oe[0],V[1]=V[3]=oe[1]}},"mousedownHandler"),!1);var D=n(t.container);t.registerBinding([e,D],"mousemove",o(function(W){var de=t.hoverData.capture;if(!(!de&&!I(W))){var re=!1,oe=t.cy,V=oe.zoom(),xe=[W.clientX,W.clientY],q=t.projectIntoViewport(xe[0],xe[1]),pe=t.hoverData.mdownPos,ve=t.hoverData.mdownGPos,Pe=t.selection,_e=null;!t.hoverData.draggingEles&&!t.hoverData.dragging&&!t.hoverData.selecting&&(_e=t.findNearestElement(q[0],q[1],!0,!1));var we=t.hoverData.last,Ve=t.hoverData.down,De=[q[0]-Pe[2],q[1]-Pe[3]],qe=t.dragData.possibleDragElements,at;if(ve){var Rt=xe[0]-ve[0],st=Rt*Rt,Ue=xe[1]-ve[1],ct=Ue*Ue,We=st+ct;t.hoverData.isOverThresholdDrag=at=We>=t.desktopTapThreshold2}var ot=a(W);at&&(t.hoverData.tapholdCancelled=!0);var Yt=o(function(){var Tt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];Tt.length===0?(Tt.push(De[0]),Tt.push(De[1])):(Tt[0]+=De[0],Tt[1]+=De[1])},"updateDragDelta");re=!0,i(_e,["mousemove","vmousemove","tapdrag"],W,{x:q[0],y:q[1]});var bt=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||oe.emit({originalEvent:W,type:"boxstart",position:{x:q[0],y:q[1]}}),Pe[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(at){var Mt={originalEvent:W,type:"cxtdrag",position:{x:q[0],y:q[1]}};Ve?Ve.emit(Mt):oe.emit(Mt),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||_e!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:W,type:"cxtdragout",position:{x:q[0],y:q[1]}}),t.hoverData.cxtOver=_e,_e&&_e.emit({originalEvent:W,type:"cxtdragover",position:{x:q[0],y:q[1]}}))}}else if(t.hoverData.dragging){if(re=!0,oe.panningEnabled()&&oe.userPanningEnabled()){var xt;if(t.hoverData.justStartedPan){var ut=t.hoverData.mdownPos;xt={x:(q[0]-ut[0])*V,y:(q[1]-ut[1])*V},t.hoverData.justStartedPan=!1}else xt={x:De[0]*V,y:De[1]*V};oe.panBy(xt),oe.emit("dragpan"),t.hoverData.dragged=!0}q=t.projectIntoViewport(W.clientX,W.clientY)}else if(Pe[4]==1&&(Ve==null||Ve.pannable())){if(at){if(!t.hoverData.dragging&&oe.boxSelectionEnabled()&&(ot||!oe.panningEnabled()||!oe.userPanningEnabled()))bt();else if(!t.hoverData.selecting&&oe.panningEnabled()&&oe.userPanningEnabled()){var Et=s(Ve,t.hoverData.downs);Et&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,Pe[4]=0,t.data.bgActivePosistion=U1(pe),t.redrawHint("select",!0),t.redraw())}Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate()}}else{if(Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate(),(!Ve||!Ve.grabbed())&&_e!=we&&(we&&i(we,["mouseout","tapdragout"],W,{x:q[0],y:q[1]}),_e&&i(_e,["mouseover","tapdragover"],W,{x:q[0],y:q[1]}),t.hoverData.last=_e),Ve)if(at){if(oe.boxSelectionEnabled()&&ot)Ve&&Ve.grabbed()&&(x(qe),Ve.emit("freeon"),qe.emit("free"),t.dragData.didDrag&&(Ve.emit("dragfreeon"),qe.emit("dragfree"))),bt();else if(Ve&&Ve.grabbed()&&t.nodeIsDraggable(Ve)){var ft=!t.dragData.didDrag;ft&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||y(qe,{inDragLayer:!0});var yt={x:0,y:0};if(Ct(De[0])&&Ct(De[1])&&(yt.x+=De[0],yt.y+=De[1],ft)){var nt=t.hoverData.dragDelta;nt&&Ct(nt[0])&&Ct(nt[1])&&(yt.x+=nt[0],yt.y+=nt[1])}t.hoverData.draggingEles=!0,qe.silentShift(yt).emit("position drag"),t.redrawHint("drag",!0),t.redraw()}}else Yt();re=!0}if(Pe[2]=q[0],Pe[3]=q[1],re)return W.stopPropagation&&W.stopPropagation(),W.preventDefault&&W.preventDefault(),!1}},"mousemoveHandler"),!1);var k,L,R;t.registerBinding(e,"mouseup",o(function(W){if(!(t.hoverData.which===1&&W.which!==1&&t.hoverData.capture)){var de=t.hoverData.capture;if(de){t.hoverData.capture=!1;var re=t.cy,oe=t.projectIntoViewport(W.clientX,W.clientY),V=t.selection,xe=t.findNearestElement(oe[0],oe[1],!0,!1),q=t.dragData.possibleDragElements,pe=t.hoverData.down,ve=a(W);if(t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,pe&&pe.unactivate(),t.hoverData.which===3){var Pe={originalEvent:W,type:"cxttapend",position:{x:oe[0],y:oe[1]}};if(pe?pe.emit(Pe):re.emit(Pe),!t.hoverData.cxtDragged){var _e={originalEvent:W,type:"cxttap",position:{x:oe[0],y:oe[1]}};pe?pe.emit(_e):re.emit(_e)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(i(xe,["mouseup","tapend","vmouseup"],W,{x:oe[0],y:oe[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(i(pe,["click","tap","vclick"],W,{x:oe[0],y:oe[1]}),L=!1,W.timeStamp-R<=re.multiClickDebounceTime()?(k&&clearTimeout(k),L=!0,R=null,i(pe,["dblclick","dbltap","vdblclick"],W,{x:oe[0],y:oe[1]})):(k=setTimeout(function(){L||i(pe,["oneclick","onetap","voneclick"],W,{x:oe[0],y:oe[1]})},re.multiClickDebounceTime()),R=W.timeStamp)),pe==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!a(W)&&(re.$(r).unselect(["tapunselect"]),q.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=q=re.collection()),xe==pe&&!t.dragData.didDrag&&!t.hoverData.selecting&&xe!=null&&xe._private.selectable&&(t.hoverData.dragging||(re.selectionType()==="additive"||ve?xe.selected()?xe.unselect(["tapunselect"]):xe.select(["tapselect"]):ve||(re.$(r).unmerge(xe).unselect(["tapunselect"]),xe.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var we=re.collection(t.getAllInBox(V[0],V[1],V[2],V[3]));t.redrawHint("select",!0),we.length>0&&t.redrawHint("eles",!0),re.emit({type:"boxend",originalEvent:W,position:{x:oe[0],y:oe[1]}});var Ve=o(function(at){return at.selectable()&&!at.selected()},"eleWouldBeSelected");re.selectionType()==="additive"||ve||re.$(r).unmerge(we).unselect(),we.emit("box").stdFilter(Ve).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!V[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var De=pe&&pe.grabbed();x(q),De&&(pe.emit("freeon"),q.emit("free"),t.dragData.didDrag&&(pe.emit("dragfreeon"),q.emit("dragfree")))}}V[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var O=o(function(W){if(!t.scrollingPage){var de=t.cy,re=de.zoom(),oe=de.pan(),V=t.projectIntoViewport(W.clientX,W.clientY),xe=[V[0]*re+oe.x,V[1]*re+oe.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||_()){W.preventDefault();return}if(de.panningEnabled()&&de.userPanningEnabled()&&de.zoomingEnabled()&&de.userZoomingEnabled()){W.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout(function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()},150);var q;W.deltaY!=null?q=W.deltaY/-250:W.wheelDeltaY!=null?q=W.wheelDeltaY/1e3:q=W.wheelDelta/1e3,q=q*t.wheelSensitivity;var pe=W.deltaMode===1;pe&&(q*=33);var ve=de.zoom()*Math.pow(10,q);W.type==="gesturechange"&&(ve=t.gestureStartZoom*W.scale),de.zoom({level:ve,renderedPosition:{x:xe[0],y:xe[1]}}),de.emit(W.type==="gesturechange"?"pinchzoom":"scrollzoom")}}},"wheelHandler");t.registerBinding(t.container,"wheel",O,!0),t.registerBinding(e,"scroll",o(function(W){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(W){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||W.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(be){t.hasTouchStarted||O(be)},!0),t.registerBinding(t.container,"mouseout",o(function(W){var de=t.projectIntoViewport(W.clientX,W.clientY);t.cy.emit({originalEvent:W,type:"mouseout",position:{x:de[0],y:de[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(W){var de=t.projectIntoViewport(W.clientX,W.clientY);t.cy.emit({originalEvent:W,type:"mouseover",position:{x:de[0],y:de[1]}})},"mouseOverHandler"),!1);var M,B,F,P,z,$,H,Q,j,ie,ne,le,he,K=o(function(W,de,re,oe){return Math.sqrt((re-W)*(re-W)+(oe-de)*(oe-de))},"distance"),X=o(function(W,de,re,oe){return(re-W)*(re-W)+(oe-de)*(oe-de)},"distanceSq"),te;t.registerBinding(t.container,"touchstart",te=o(function(W){if(t.hasTouchStarted=!0,!!I(W)){w(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var de=t.cy,re=t.touchData.now,oe=t.touchData.earlier;if(W.touches[0]){var V=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);re[0]=V[0],re[1]=V[1]}if(W.touches[1]){var V=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);re[2]=V[0],re[3]=V[1]}if(W.touches[2]){var V=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);re[4]=V[0],re[5]=V[1]}if(W.touches[1]){t.touchData.singleTouchMoved=!0,x(t.dragData.touchDragEles);var xe=t.findContainerClientCoords();j=xe[0],ie=xe[1],ne=xe[2],le=xe[3],M=W.touches[0].clientX-j,B=W.touches[0].clientY-ie,F=W.touches[1].clientX-j,P=W.touches[1].clientY-ie,he=0<=M&&M<=ne&&0<=F&&F<=ne&&0<=B&&B<=le&&0<=P&&P<=le;var q=de.pan(),pe=de.zoom();z=K(M,B,F,P),$=X(M,B,F,P),H=[(M+F)/2,(B+P)/2],Q=[(H[0]-q.x)/pe,(H[1]-q.y)/pe];var ve=200,Pe=ve*ve;if($<Pe&&!W.touches[2]){var _e=t.findNearestElement(re[0],re[1],!0,!0),we=t.findNearestElement(re[2],re[3],!0,!0);_e&&_e.isNode()?(_e.activate().emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start=_e):we&&we.isNode()?(we.activate().emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start=we):de.emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!0,t.touchData.cxtDragged=!1,t.data.bgActivePosistion=void 0,t.redraw();return}}if(W.touches[2])de.boxSelectionEnabled()&&W.preventDefault();else if(!W.touches[1]){if(W.touches[0]){var Ve=t.findNearestElements(re[0],re[1],!0,!0),De=Ve[0];if(De!=null&&(De.activate(),t.touchData.start=De,t.touchData.starts=Ve,t.nodeIsGrabbable(De))){var qe=t.dragData.touchDragEles=de.collection(),at=null;t.redrawHint("eles",!0),t.redrawHint("drag",!0),De.selected()?(at=de.$(function(We){return We.selected()&&t.nodeIsGrabbable(We)}),y(at,{addToList:qe})):v(De,{addToList:qe}),d(De);var Rt=o(function(ot){return{originalEvent:W,type:ot,position:{x:re[0],y:re[1]}}},"makeEvent");De.emit(Rt("grabon")),at?at.forEach(function(We){We.emit(Rt("grab"))}):De.emit(Rt("grab"))}i(De,["touchstart","tapstart","vmousedown"],W,{x:re[0],y:re[1]}),De==null&&(t.data.bgActivePosistion={x:V[0],y:V[1]},t.redrawHint("select",!0),t.redraw()),t.touchData.singleTouchMoved=!1,t.touchData.singleTouchStartTime=+new Date,clearTimeout(t.touchData.tapholdTimeout),t.touchData.tapholdTimeout=setTimeout(function(){t.touchData.singleTouchMoved===!1&&!t.pinching&&!t.touchData.selecting&&i(t.touchData.start,["taphold"],W,{x:re[0],y:re[1]})},t.tapholdDuration)}}if(W.touches.length>=1){for(var st=t.touchData.startPosition=[null,null,null,null,null,null],Ue=0;Ue<re.length;Ue++)st[Ue]=oe[Ue]=re[Ue];var ct=W.touches[0];t.touchData.startGPosition=[ct.clientX,ct.clientY]}}},"touchstartHandler"),!1);var J;t.registerBinding(e,"touchmove",J=o(function(W){var de=t.touchData.capture;if(!(!de&&!I(W))){var re=t.selection,oe=t.cy,V=t.touchData.now,xe=t.touchData.earlier,q=oe.zoom();if(W.touches[0]){var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}if(W.touches[1]){var pe=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);V[2]=pe[0],V[3]=pe[1]}if(W.touches[2]){var pe=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);V[4]=pe[0],V[5]=pe[1]}var ve=t.touchData.startGPosition,Pe;if(de&&W.touches[0]&&ve){for(var _e=[],we=0;we<V.length;we++)_e[we]=V[we]-xe[we];var Ve=W.touches[0].clientX-ve[0],De=Ve*Ve,qe=W.touches[0].clientY-ve[1],at=qe*qe,Rt=De+at;Pe=Rt>=t.touchTapThreshold2}if(de&&t.touchData.cxt){W.preventDefault();var st=W.touches[0].clientX-j,Ue=W.touches[0].clientY-ie,ct=W.touches[1].clientX-j,We=W.touches[1].clientY-ie,ot=X(st,Ue,ct,We),Yt=ot/$,bt=150,Mt=bt*bt,xt=1.5,ut=xt*xt;if(Yt>=ut||ot>=Mt){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var Et={originalEvent:W,type:"cxttapend",position:{x:V[0],y:V[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(Et),t.touchData.start=null):oe.emit(Et)}}if(de&&t.touchData.cxt){var Et={originalEvent:W,type:"cxtdrag",position:{x:V[0],y:V[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(Et):oe.emit(Et),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var ft=t.findNearestElement(V[0],V[1],!0,!0);(!t.touchData.cxtOver||ft!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:W,type:"cxtdragout",position:{x:V[0],y:V[1]}}),t.touchData.cxtOver=ft,ft&&ft.emit({originalEvent:W,type:"cxtdragover",position:{x:V[0],y:V[1]}}))}else if(de&&W.touches[2]&&oe.boxSelectionEnabled())W.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||oe.emit({originalEvent:W,type:"boxstart",position:{x:V[0],y:V[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,re[4]=1,!re||re.length===0||re[0]===void 0?(re[0]=(V[0]+V[2]+V[4])/3,re[1]=(V[1]+V[3]+V[5])/3,re[2]=(V[0]+V[2]+V[4])/3+1,re[3]=(V[1]+V[3]+V[5])/3+1):(re[2]=(V[0]+V[2]+V[4])/3,re[3]=(V[1]+V[3]+V[5])/3),t.redrawHint("select",!0),t.redraw();else if(de&&W.touches[1]&&!t.touchData.didSelect&&oe.zoomingEnabled()&&oe.panningEnabled()&&oe.userZoomingEnabled()&&oe.userPanningEnabled()){W.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var yt=t.dragData.touchDragEles;if(yt){t.redrawHint("drag",!0);for(var nt=0;nt<yt.length;nt++){var dn=yt[nt]._private;dn.grabbed=!1,dn.rscratch.inDragLayer=!1}}var Tt=t.touchData.start,st=W.touches[0].clientX-j,Ue=W.touches[0].clientY-ie,ct=W.touches[1].clientX-j,We=W.touches[1].clientY-ie,On=K(st,Ue,ct,We),tn=On/z;if(he){var _r=st-M,Dr=Ue-B,Pn=ct-F,At=We-P,Ce=(_r+Pn)/2,tt=(Dr+At)/2,St=oe.zoom(),mr=St*tn,rn=oe.pan(),gn=Q[0]*St+rn.x,Zr=Q[1]*St+rn.y,Ni={x:-mr/St*(gn-rn.x-Ce)+gn,y:-mr/St*(Zr-rn.y-tt)+Zr};if(Tt&&Tt.active()){var yt=t.dragData.touchDragEles;x(yt),t.redrawHint("drag",!0),t.redrawHint("eles",!0),Tt.unactivate().emit("freeon"),yt.emit("free"),t.dragData.didDrag&&(Tt.emit("dragfreeon"),yt.emit("dragfree"))}oe.viewport({zoom:mr,pan:Ni,cancelOnFailedZoom:!0}),oe.emit("pinchzoom"),z=On,M=st,B=Ue,F=ct,P=We,t.pinching=!0}if(W.touches[0]){var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}if(W.touches[1]){var pe=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);V[2]=pe[0],V[3]=pe[1]}if(W.touches[2]){var pe=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);V[4]=pe[0],V[5]=pe[1]}}else if(W.touches[0]&&!t.touchData.didSelect){var Zn=t.touchData.start,Sn=t.touchData.last,ft;if(!t.hoverData.draggingEles&&!t.swipePanning&&(ft=t.findNearestElement(V[0],V[1],!0,!0)),de&&Zn!=null&&W.preventDefault(),de&&Zn!=null&&t.nodeIsDraggable(Zn))if(Pe){var yt=t.dragData.touchDragEles,Hr=!t.dragData.didDrag;Hr&&y(yt,{inDragLayer:!0}),t.dragData.didDrag=!0;var et={x:0,y:0};if(Ct(_e[0])&&Ct(_e[1])&&(et.x+=_e[0],et.y+=_e[1],Hr)){t.redrawHint("eles",!0);var mt=t.touchData.dragDelta;mt&&Ct(mt[0])&&Ct(mt[1])&&(et.x+=mt[0],et.y+=mt[1])}t.hoverData.draggingEles=!0,yt.silentShift(et).emit("position drag"),t.redrawHint("drag",!0),t.touchData.startPosition[0]==xe[0]&&t.touchData.startPosition[1]==xe[1]&&t.redrawHint("eles",!0),t.redraw()}else{var mt=t.touchData.dragDelta=t.touchData.dragDelta||[];mt.length===0?(mt.push(_e[0]),mt.push(_e[1])):(mt[0]+=_e[0],mt[1]+=_e[1])}if(i(Zn||ft,["touchmove","tapdrag","vmousemove"],W,{x:V[0],y:V[1]}),(!Zn||!Zn.grabbed())&&ft!=Sn&&(Sn&&Sn.emit({originalEvent:W,type:"tapdragout",position:{x:V[0],y:V[1]}}),ft&&ft.emit({originalEvent:W,type:"tapdragover",position:{x:V[0],y:V[1]}})),t.touchData.last=ft,de)for(var nt=0;nt<V.length;nt++)V[nt]&&t.touchData.startPosition[nt]&&Pe&&(t.touchData.singleTouchMoved=!0);if(de&&(Zn==null||Zn.pannable())&&oe.panningEnabled()&&oe.userPanningEnabled()){var Kt=s(Zn,t.touchData.starts);Kt&&(W.preventDefault(),t.data.bgActivePosistion||(t.data.bgActivePosistion=U1(t.touchData.startPosition)),t.swipePanning?(oe.panBy({x:_e[0]*q,y:_e[1]*q}),oe.emit("dragpan")):Pe&&(t.swipePanning=!0,oe.panBy({x:Ve*q,y:qe*q}),oe.emit("dragpan"),Zn&&(Zn.unactivate(),t.redrawHint("select",!0),t.touchData.start=null)));var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}}for(var we=0;we<V.length;we++)xe[we]=V[we];de&&W.touches.length>0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var se;t.registerBinding(e,"touchcancel",se=o(function(W){var de=t.touchData.start;t.touchData.capture=!1,de&&de.unactivate()},"touchcancelHandler"));var ue,Z,Se,ce;if(t.registerBinding(e,"touchend",ue=o(function(W){var de=t.touchData.start,re=t.touchData.capture;if(re)W.touches.length===0&&(t.touchData.capture=!1),W.preventDefault();else return;var oe=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var V=t.cy,xe=V.zoom(),q=t.touchData.now,pe=t.touchData.earlier;if(W.touches[0]){var ve=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);q[0]=ve[0],q[1]=ve[1]}if(W.touches[1]){var ve=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);q[2]=ve[0],q[3]=ve[1]}if(W.touches[2]){var ve=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);q[4]=ve[0],q[5]=ve[1]}de&&de.unactivate();var Pe;if(t.touchData.cxt){if(Pe={originalEvent:W,type:"cxttapend",position:{x:q[0],y:q[1]}},de?de.emit(Pe):V.emit(Pe),!t.touchData.cxtDragged){var _e={originalEvent:W,type:"cxttap",position:{x:q[0],y:q[1]}};de?de.emit(_e):V.emit(_e)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!W.touches[2]&&V.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var we=V.collection(t.getAllInBox(oe[0],oe[1],oe[2],oe[3]));oe[0]=void 0,oe[1]=void 0,oe[2]=void 0,oe[3]=void 0,oe[4]=0,t.redrawHint("select",!0),V.emit({type:"boxend",originalEvent:W,position:{x:q[0],y:q[1]}});var Ve=o(function(Mt){return Mt.selectable()&&!Mt.selected()},"eleWouldBeSelected");we.emit("box").stdFilter(Ve).select().emit("boxselect"),we.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(de?.unactivate(),W.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!W.touches[1]){if(!W.touches[0]){if(!W.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var De=t.dragData.touchDragEles;if(de!=null){var qe=de._private.grabbed;x(De),t.redrawHint("drag",!0),t.redrawHint("eles",!0),qe&&(de.emit("freeon"),De.emit("free"),t.dragData.didDrag&&(de.emit("dragfreeon"),De.emit("dragfree"))),i(de,["touchend","tapend","vmouseup","tapdragout"],W,{x:q[0],y:q[1]}),de.unactivate(),t.touchData.start=null}else{var at=t.findNearestElement(q[0],q[1],!0,!0);i(at,["touchend","tapend","vmouseup","tapdragout"],W,{x:q[0],y:q[1]})}var Rt=t.touchData.startPosition[0]-q[0],st=Rt*Rt,Ue=t.touchData.startPosition[1]-q[1],ct=Ue*Ue,We=st+ct,ot=We*xe*xe;t.touchData.singleTouchMoved||(de||V.$(":selected").unselect(["tapunselect"]),i(de,["tap","vclick"],W,{x:q[0],y:q[1]}),Z=!1,W.timeStamp-ce<=V.multiClickDebounceTime()?(Se&&clearTimeout(Se),Z=!0,ce=null,i(de,["dbltap","vdblclick"],W,{x:q[0],y:q[1]})):(Se=setTimeout(function(){Z||i(de,["onetap","voneclick"],W,{x:q[0],y:q[1]})},V.multiClickDebounceTime()),ce=W.timeStamp)),de!=null&&!t.dragData.didDrag&&de._private.selectable&&ot<t.touchTapThreshold2&&!t.pinching&&(V.selectionType()==="single"?(V.$(r).unmerge(de).unselect(["tapunselect"]),de.select(["tapselect"])):de.selected()?de.unselect(["tapunselect"]):de.select(["tapselect"]),t.redrawHint("eles",!0)),t.touchData.singleTouchMoved=!0}}}for(var Yt=0;Yt<q.length;Yt++)pe[Yt]=q[Yt];t.dragData.didDrag=!1,W.touches.length===0&&(t.touchData.dragDelta=[],t.touchData.startPosition=[null,null,null,null,null,null],t.touchData.startGPosition=null,t.touchData.didSelect=!1),W.touches.length<2&&(W.touches.length===1&&(t.touchData.startGPosition=[W.touches[0].clientX,W.touches[0].clientY]),t.pinching=!1,t.redrawHint("eles",!0),t.redraw())},"touchendHandler"),!1),typeof TouchEvent>"u"){var ae=[],Oe=o(function(W){return{clientX:W.clientX,clientY:W.clientY,force:1,identifier:W.pointerId,pageX:W.pageX,pageY:W.pageY,radiusX:W.width/2,radiusY:W.height/2,screenX:W.screenX,screenY:W.screenY,target:W.target}},"makeTouch"),ge=o(function(W){return{event:W,touch:Oe(W)}},"makePointer"),ze=o(function(W){ae.push(ge(W))},"addPointer"),He=o(function(W){for(var de=0;de<ae.length;de++){var re=ae[de];if(re.event.pointerId===W.pointerId){ae.splice(de,1);return}}},"removePointer"),$e=o(function(W){var de=ae.filter(function(re){return re.event.pointerId===W.pointerId})[0];de.event=W,de.touch=Oe(W)},"updatePointer"),Re=o(function(W){W.touches=ae.map(function(de){return de.touch})},"addTouchesToEvent"),Ie=o(function(W){return W.pointerType==="mouse"||W.pointerType===4},"pointerIsMouse");t.registerBinding(t.container,"pointerdown",function(be){Ie(be)||(be.preventDefault(),ze(be),Re(be),te(be))}),t.registerBinding(t.container,"pointerup",function(be){Ie(be)||(He(be),Re(be),ue(be))}),t.registerBinding(t.container,"pointercancel",function(be){Ie(be)||(He(be),Re(be),se(be))}),t.registerBinding(t.container,"pointermove",function(be){Ie(be)||(be.preventDefault(),$e(be),Re(be),J(be))})}};eh={};eh.generatePolygon=function(t,e){return this.nodeShapes[t]={renderer:this,name:t,points:e,draw:o(function(n,i,a,s,l,u){this.renderer.nodeShapeImpl("polygon",n,i,a,s,l,this.points)},"draw"),intersectLine:o(function(n,i,a,s,l,u,h,f){return Xb(l,u,this.points,n,i,a/2,s/2,h)},"intersectLine"),checkPoint:o(function(n,i,a,s,l,u,h,f){return Zu(n,i,this.points,u,h,s,l,[0,-1],a)},"checkPoint")}};eh.generateEllipse=function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){return Yqe(a,s,e,r,n/2+l,i/2+l)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){return $p(e,r,i,a,s,l,n)},"checkPoint")}};eh.generateRoundPolygon=function(t,e){return this.nodeShapes[t]={renderer:this,name:t,points:e,getOrCreateCorners:o(function(n,i,a,s,l,u,h){if(u[h]!==void 0&&u[h+"-cx"]===n&&u[h+"-cy"]===i)return u[h];u[h]=new Array(e.length/2),u[h+"-cx"]=n,u[h+"-cy"]=i;var f=a/2,d=s/2;l=l==="auto"?bme(a,s):l;for(var p=new Array(e.length/2),m=0;m<e.length/2;m++)p[m]={x:n+f*e[m*2],y:i+d*e[m*2+1]};var g,y,v,x,b=p.length;for(y=p[b-1],g=0;g<b;g++)v=p[g%b],x=p[(g+1)%b],u[h][g]=vB(y,v,x,l),y=v,v=x;return u[h]},"getOrCreateCorners"),draw:o(function(n,i,a,s,l,u,h){this.renderer.nodeShapeImpl("round-polygon",n,i,a,s,l,this.points,this.getOrCreateCorners(i,a,s,l,u,h,"drawCorners"))},"draw"),intersectLine:o(function(n,i,a,s,l,u,h,f,d){return Xqe(l,u,this.points,n,i,a,s,h,this.getOrCreateCorners(n,i,a,s,f,d,"corners"))},"intersectLine"),checkPoint:o(function(n,i,a,s,l,u,h,f,d){return qqe(n,i,this.points,u,h,s,l,this.getOrCreateCorners(u,h,s,l,f,d,"corners"))},"checkPoint")}};eh.generateRoundRectangle=function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,this.points,s)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){return vme(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=i/2,f=a/2;u=u==="auto"?Vp(i,a):u,u=Math.min(h,f,u);var d=u*2;return!!(Zu(e,r,this.points,s,l,i,a-d,[0,-1],n)||Zu(e,r,this.points,s,l,i-d,a,[0,-1],n)||$p(e,r,d,d,s-h+u,l-f+u,n)||$p(e,r,d,d,s+h-u,l-f+u,n)||$p(e,r,d,d,s+h-u,l+f-u,n)||$p(e,r,d,d,s-h+u,l+f-u,n))},"checkPoint")}};eh.generateCutRectangle=function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:sB(),points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,null,s)},"draw"),generateCutTrianglePts:o(function(e,r,n,i,a){var s=a==="auto"?this.cornerLength:a,l=r/2,u=e/2,h=n-u,f=n+u,d=i-l,p=i+l;return{topLeft:[h,d+s,h+s,d,h+s,d+s],topRight:[f-s,d,f,d+s,f-s,d+s],bottomRight:[f,p-s,f-s,p,f-s,p-s],bottomLeft:[h+s,p,h,p-s,h+s,p-s]}},"generateCutTrianglePts"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=this.generateCutTrianglePts(n+2*l,i+2*l,e,r,u),f=[].concat.apply([],[h.topLeft.splice(0,4),h.topRight.splice(0,4),h.bottomRight.splice(0,4),h.bottomLeft.splice(0,4)]);return Xb(a,s,f,e,r)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=u==="auto"?this.cornerLength:u;if(Zu(e,r,this.points,s,l,i,a-2*h,[0,-1],n)||Zu(e,r,this.points,s,l,i-2*h,a,[0,-1],n))return!0;var f=this.generateCutTrianglePts(i,a,s,l);return Us(e,r,f.topLeft)||Us(e,r,f.topRight)||Us(e,r,f.bottomRight)||Us(e,r,f.bottomLeft)},"checkPoint")}};eh.generateBarrel=function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=.15,f=.5,d=.85,p=this.generateBarrelBezierPts(n+2*l,i+2*l,e,r),m=o(function(v){var x=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},h),b=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},f),w=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},d);return[v[0],v[1],x.x,x.y,b.x,b.y,w.x,w.y,v[4],v[5]]},"approximateBarrelCurvePts"),g=[].concat(m(p.topLeft),m(p.topRight),m(p.bottomRight),m(p.bottomLeft));return Xb(a,s,g,e,r)},"intersectLine"),generateBarrelBezierPts:o(function(e,r,n,i){var a=r/2,s=e/2,l=n-s,u=n+s,h=i-a,f=i+a,d=BP(e,r),p=d.heightOffset,m=d.widthOffset,g=d.ctrlPtOffsetPct*e,y={topLeft:[l,h+p,l+g,h,l+m,h],topRight:[u-m,h,u-g,h,u,h+p],bottomRight:[u,f-p,u-g,f,u-m,f],bottomLeft:[l+m,f,l+g,f,l,f-p]};return y.topLeft.isTop=!0,y.topRight.isTop=!0,y.bottomLeft.isBottom=!0,y.bottomRight.isBottom=!0,y},"generateBarrelBezierPts"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=BP(i,a),f=h.heightOffset,d=h.widthOffset;if(Zu(e,r,this.points,s,l,i,a-2*f,[0,-1],n)||Zu(e,r,this.points,s,l,i-2*d,a,[0,-1],n))return!0;for(var p=this.generateBarrelBezierPts(i,a,s,l),m=o(function(S,_,I){var D=I[4],k=I[2],L=I[0],R=I[5],O=I[1],M=Math.min(D,L),B=Math.max(D,L),F=Math.min(R,O),P=Math.max(R,O);if(M<=S&&S<=B&&F<=_&&_<=P){var z=jqe(D,k,L),$=Vqe(z[0],z[1],z[2],S),H=$.filter(function(Q){return 0<=Q&&Q<=1});if(H.length>0)return H[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y<g.length;y++){var v=g[y],x=p[v],b=m(e,r,x);if(b!=null){var w=x[5],C=x[3],T=x[1],E=oa(w,C,T,b);if(x.isTop&&E<=r||x.isBottom&&r<=E)return!0}}return!1},"checkPoint")}};eh.generateBottomRoundrectangle=function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,this.points,s)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=e-(n/2+l),f=r-(i/2+l),d=f,p=e+(n/2+l),m=Ef(a,s,e,r,h,f,p,d,!1);return m.length>0?m:vme(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){u=u==="auto"?Vp(i,a):u;var h=2*u;if(Zu(e,r,this.points,s,l,i,a-h,[0,-1],n)||Zu(e,r,this.points,s,l,i-h,a,[0,-1],n))return!0;var f=i/2+2*n,d=a/2+2*n,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(Us(e,r,p)||$p(e,r,h,h,s+i/2-u,l+a/2-u,n)||$p(e,r,h,h,s-i/2+u,l+a/2-u,n))},"checkPoint")}};eh.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",gs(3,0)),this.generateRoundPolygon("round-triangle",gs(3,0)),this.generatePolygon("rectangle",gs(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",gs(5,0)),this.generateRoundPolygon("round-pentagon",gs(5,0)),this.generatePolygon("hexagon",gs(6,0)),this.generateRoundPolygon("round-hexagon",gs(6,0)),this.generatePolygon("heptagon",gs(7,0)),this.generateRoundPolygon("round-heptagon",gs(7,0)),this.generatePolygon("octagon",gs(8,0)),this.generateRoundPolygon("round-octagon",gs(8,0));var n=new Array(20);{var i=PP(5,0),a=PP(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l<a.length/2;l++)a[l*2]*=s,a[l*2+1]*=s;for(var l=0;l<20/4;l++)n[l*4]=i[l*2],n[l*4+1]=i[l*2+1],n[l*4+2]=a[l*2],n[l*4+3]=a[l*2+1]}n=xme(n),this.generatePolygon("star",n),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("right-rhomboid",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);{var u=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",u),this.generateRoundPolygon("round-tag",u)}t.makePolygon=function(h){var f=h.join("$"),d="polygon-"+f,p;return(p=this[d])?p:e.generatePolygon(d,h)}};l4={};l4.timeToRender=function(){return this.redrawTotalTime/this.redrawCount};l4.redraw=function(t){t=t||dme();var e=this;e.averageRedrawTime===void 0&&(e.averageRedrawTime=0),e.lastRedrawTime===void 0&&(e.lastRedrawTime=0),e.lastDrawTime===void 0&&(e.lastDrawTime=0),e.requestedFrame=!0,e.renderOptions=t};l4.beforeRender=function(t,e){if(!this.destroyed){e==null&&ai("Priority is not optional for beforeRender");var r=this.beforeRenderCallbacks;r.push({fn:t,priority:e}),r.sort(function(n,i){return i.priority-n.priority})}};M0e=o(function(e,r,n){for(var i=e.beforeRenderCallbacks,a=0;a<i.length;a++)i[a].fn(r,n)},"beforeRenderCallbacks");l4.startRenderLoop=function(){var t=this,e=t.cy;if(!t.renderLoopStarted){t.renderLoopStarted=!0;var r=o(function n(i){if(!t.destroyed){if(!e.batching())if(t.requestedFrame&&!t.skipFrame){M0e(t,!0,i);var a=Qu();t.render(t.renderOptions);var s=t.lastDrawTime=Qu();t.averageRedrawTime===void 0&&(t.averageRedrawTime=s-a),t.redrawCount===void 0&&(t.redrawCount=0),t.redrawCount++,t.redrawTotalTime===void 0&&(t.redrawTotalTime=0);var l=s-a;t.redrawTotalTime+=l,t.lastRedrawTime=l,t.averageRedrawTime=t.averageRedrawTime/2+l/2,t.requestedFrame=!1}else M0e(t,!1,i);t.skipFrame=!1,xS(n)}},"renderFn");xS(r)}};LQe=o(function(e){this.init(e)},"BaseRenderer"),vge=LQe,oy=vge.prototype;oy.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"];oy.init=function(t){var e=this;e.options=t,e.cy=t.cy;var r=e.container=t.cy.container(),n=e.cy.window();if(n){var i=n.document,a=i.head,s="__________cytoscape_stylesheet",l="__________cytoscape_container",u=i.getElementById(s)!=null;if(r.className.indexOf(l)<0&&(r.className=(r.className||"")+" "+l),!u){var h=i.createElement("style");h.id=s,h.textContent="."+l+" { position: relative; }",a.insertBefore(h,a.children[0])}var f=n.getComputedStyle(r),d=f.getPropertyValue("position");d==="static"&&un("A Cytoscape container has style position:static and so can not use UI extensions properly")}e.selection=[void 0,void 0,void 0,void 0,0],e.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],e.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},e.dragData={possibleDragElements:[]},e.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},e.redraws=0,e.showFps=t.showFps,e.debug=t.debug,e.webgl=t.webgl,e.hideEdgesOnViewport=t.hideEdgesOnViewport,e.textureOnViewport=t.textureOnViewport,e.wheelSensitivity=t.wheelSensitivity,e.motionBlurEnabled=t.motionBlur,e.forcedPixelRatio=Ct(t.pixelRatio)?t.pixelRatio:null,e.motionBlur=t.motionBlur,e.motionBlurOpacity=t.motionBlurOpacity,e.motionBlurTransparency=1-e.motionBlurOpacity,e.motionBlurPxRatio=1,e.mbPxRBlurry=1,e.minMbLowQualFrames=4,e.fullQualityMb=!1,e.clearedForMotionBlur=[],e.desktopTapThreshold=t.desktopTapThreshold,e.desktopTapThreshold2=t.desktopTapThreshold*t.desktopTapThreshold,e.touchTapThreshold=t.touchTapThreshold,e.touchTapThreshold2=t.touchTapThreshold*t.touchTapThreshold,e.tapholdDuration=500,e.bindings=[],e.beforeRenderCallbacks=[],e.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},e.registerNodeShapes(),e.registerArrowShapes(),e.registerCalculationListeners()};oy.notify=function(t,e){var r=this,n=r.cy;if(!this.destroyed){if(t==="init"){r.load();return}if(t==="destroy"){r.destroy();return}(t==="add"||t==="remove"||t==="move"&&n.hasCompoundNodes()||t==="load"||t==="zorder"||t==="mount")&&r.invalidateCachedZSortedEles(),t==="viewport"&&r.redrawHint("select",!0),t==="gc"&&r.redrawHint("gc",!0),(t==="load"||t==="resize"||t==="mount")&&(r.invalidateContainerClientCoordsCache(),r.matchCanvasSize(r.container)),r.redrawHint("eles",!0),r.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()}};oy.destroy=function(){var t=this;t.destroyed=!0,t.cy.stopAnimationLoop();for(var e=0;e<t.bindings.length;e++){var r=t.bindings[e],n=r,i=n.target;(i.off||i.removeEventListener).apply(i,n.args)}if(t.bindings=[],t.beforeRenderCallbacks=[],t.onUpdateEleCalcsFns=[],t.removeObserver&&t.removeObserver.disconnect(),t.styleObserver&&t.styleObserver.disconnect(),t.resizeObserver&&t.resizeObserver.disconnect(),t.labelCalcDiv)try{document.body.removeChild(t.labelCalcDiv)}catch{}};oy.isHeadless=function(){return!1};[yB,gge,yge,sy,eh,l4].forEach(function(t){rr(oy,t)});DP=1e3/60,xge={setupDequeueing:o(function(e){return o(function(){var n=this,i=this.renderer;if(!n.dequeueingSetup){n.dequeueingSetup=!0;var a=n4(function(){i.redrawHint("eles",!0),i.redrawHint("drag",!0),i.redraw()},e.deqRedrawThreshold),s=o(function(h,f){var d=Qu(),p=i.averageRedrawTime,m=i.lastRedrawTime,g=[],y=i.cy.extent(),v=i.getPixelRatio();for(h||i.flushRenderedStyleQueue();;){var x=Qu(),b=x-d,w=x-f;if(m<DP){var C=DP-(h?p:0);if(w>=e.deqFastCost*C)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(w>=e.deqNoDrawCost*DP)break;var T=e.deq(n,v,y);if(T.length>0)for(var E=0;E<T.length;E++)g.push(T[E]);else break}g.length>0&&(e.onDeqd(n,g),!h&&e.shouldRedraw(n,g,v,y)&&a())},"dequeue"),l=e.priority||rB;i.beforeRender(s,l(n))}},"setupDequeueingImpl")},"setupDequeueing")},RQe=function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:bS;Mf(this,t),this.idsByKey=new Xc,this.keyForId=new Xc,this.cachesByLvl=new Xc,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),If(t,[{key:"getIdsFor",value:o(function(r){r==null&&ai("Can not get id list for null key");var n=this.idsByKey,i=this.idsByKey.get(r);return i||(i=new J1,n.set(r,i)),i},"getIdsFor")},{key:"addIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).add(n)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).delete(n)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);this.deleteIdForKey(i,n),this.addIdForKey(a,n),this.keyForId.set(n,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteIdForKey(i,n),this.keyForId.delete(n)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);return i!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var n=this.cachesByLvl,i=this.lvls,a=n.get(r);return a||(a=new Xc,n.set(r,a),i.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,n){return this.getCachesAt(n).get(r)},"getCache")},{key:"get",value:o(function(r,n){var i=this.getKey(r),a=this.getCache(i,n);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,n){var i=this.keyForId.get(r.id()),a=this.getCache(i,n);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,n){return this.getCachesAt(n).has(r)},"hasCache")},{key:"has",value:o(function(r,n){var i=this.getKey(r);return this.hasCache(i,n)},"has")},{key:"setCache",value:o(function(r,n,i){i.key=r,this.getCachesAt(n).set(r,i)},"setCache")},{key:"set",value:o(function(r,n,i){var a=this.getKey(r);this.setCache(a,n,i),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,n){this.getCachesAt(n).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,n){var i=this.getKey(r);this.deleteCache(i,n)},"_delete")},{key:"invalidateKey",value:o(function(r){var n=this;this.lvls.forEach(function(i){return n.deleteCache(r,i)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(i),a||this.getNumberOfIdsForKey(i)===0},"invalidate")}]),t}(),I0e=25,sS=50,yS=-4,XP=3,bge=7.99,NQe=8,MQe=1024,IQe=1024,OQe=1024,PQe=.2,BQe=.8,FQe=10,$Qe=.15,zQe=.1,GQe=.9,VQe=.9,UQe=100,HQe=1,H1={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},WQe=la({getKey:null,doesEleInvalidateKey:bS,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:ume,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Fb=o(function(e,r){var n=this;n.renderer=e,n.onDequeues=[];var i=WQe(r);rr(n,i),n.lookup=new RQe(i.getKey,i.doesEleInvalidateKey),n.setupDequeueing()},"ElementTextureCache"),qi=Fb.prototype;qi.reasons=H1;qi.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};qi.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},n=r[t]=r[t]||[];return n};qi.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new i4(function(r,n){return n.reqs-r.reqs});return e};qi.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};qi.getElement=function(t,e,r,n,i){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(n==null&&(n=Math.ceil(iB(l*r))),n<yS)n=yS;else if(l>=bge||n>XP)return null;var h=Math.pow(2,n),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,n);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=I0e?g=I0e:f<=sS?g=sS:g=Math.ceil(f/sS)*sS,f>OQe||d>IQe)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidth<d&&(v=x());for(var b=o(function(M){return M&&M.scaledLabelShown===p},"scalableFrom"),w=i&&i===H1.dequeue,C=i&&i===H1.highQuality,T=i&&i===H1.downscale,E,A=n+1;A<=XP;A++){var S=u.get(t,A);if(S){E=S;break}}var _=E&&E.level===n+1?E:null,I=o(function(){v.context.drawImage(_.texture.canvas,_.x,0,_.width,_.height,v.usedWidth,0,d,f)},"downscale");if(v.context.setTransform(1,0,0,1,0,0),v.context.clearRect(v.usedWidth,0,d,g),b(_))I();else if(b(E))if(C){for(var D=E.level;D>n;D--)_=a.getElement(t,e,r,D,H1.downscale);I()}else return a.queueElement(t,E.level-1),E;else{var k;if(!w&&!C&&!T)for(var L=n-1;L>=yS;L--){var R=u.get(t,L);if(R){k=R;break}}if(b(k))return a.queueElement(t,n),k;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:n,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+NQe),v.eleCaches.push(m),u.set(t,n,m),a.checkTextureFullness(v),m};qi.invalidateElements=function(t){for(var e=0;e<t.length;e++)this.invalidateElement(t[e])};qi.invalidateElement=function(t){var e=this,r=e.lookup,n=[],i=r.isInvalid(t);if(i){for(var a=yS;a<=XP;a++){var s=r.getForCachedKey(t,a);s&&n.push(s)}var l=r.invalidate(t);if(l)for(var u=0;u<n.length;u++){var h=n[u],f=h.texture;f.invalidatedWidth+=h.width,h.invalidated=!0,e.checkTextureUtility(f)}e.removeFromQueue(t)}};qi.checkTextureUtility=function(t){t.invalidatedWidth>=PQe*t.width&&this.retireTexture(t)};qi.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>BQe&&t.fullnessChecks>=FQe?Df(r,t):t.fullnessChecks++};qi.retireTexture=function(t){var e=this,r=t.height,n=e.getTextureQueue(r),i=this.lookup;Df(n,t),t.retired=!0;for(var a=t.eleCaches,s=0;s<a.length;s++){var l=a[s];i.deleteCache(l.key,l.level)}nB(a);var u=e.getRetiredTextureQueue(r);u.push(t)};qi.addTexture=function(t,e){var r=this,n=r.getTextureQueue(t),i={};return n.push(i),i.eleCaches=[],i.height=t,i.width=Math.max(MQe,e),i.usedWidth=0,i.invalidatedWidth=0,i.fullnessChecks=0,i.canvas=r.renderer.makeOffscreenCanvas(i.width,i.height),i.context=i.canvas.getContext("2d"),i};qi.recycleTexture=function(t,e){for(var r=this,n=r.getTextureQueue(t),i=r.getRetiredTextureQueue(t),a=0;a<i.length;a++){var s=i[a];if(s.width>=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,nB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Df(i,s),n.push(s),s}};qi.queueElement=function(t,e){var r=this,n=r.getElementQueue(),i=r.getElementKeyToQueue(),a=this.getKey(t),s=i[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,n.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};n.push(l),i[a]=l}};qi.dequeue=function(t){for(var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=[],a=e.lookup,s=0;s<HQe&&r.size()>0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(n[u]=null,f)continue;i.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,H1.dequeue)}return i};qi.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=this.getKey(t),a=n[i];a!=null&&(a.eles.length===1?(a.reqs=tB,r.updateItem(a),r.pop(),n[i]=null):a.eles.unmerge(t))};qi.onDequeue=function(t){this.onDequeues.push(t)};qi.offDequeue=function(t){Df(this.onDequeues,t)};qi.setupDequeueing=xge.setupDequeueing({deqRedrawThreshold:UQe,deqCost:$Qe,deqAvgCost:zQe,deqNoDrawCost:GQe,deqFastCost:VQe,deq:o(function(e,r,n){return e.dequeue(r,n)},"deq"),onDeqd:o(function(e,r){for(var n=0;n<e.onDequeues.length;n++){var i=e.onDequeues[n];i(r)}},"onDeqd"),shouldRedraw:o(function(e,r,n,i){for(var a=0;a<r.length;a++)for(var s=r[a].eles,l=0;l<s.length;l++){var u=s[l].boundingBox();if(aB(u,i))return!0}return!1},"shouldRedraw"),priority:o(function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq},"priority")});qQe=1,zb=-4,_S=2,YQe=3.99,XQe=50,jQe=50,KQe=.15,QQe=.1,ZQe=.9,JQe=.9,eZe=1,O0e=250,tZe=4e3*4e3,P0e=32767,rZe=!0,wge=o(function(e){var r=this,n=r.renderer=e,i=n.cy;r.layersByLevel={},r.firstGet=!0,r.lastInvalidationTime=Qu()-2*O0e,r.skipping=!1,r.eleTxrDeqs=i.collection(),r.scheduleElementRefinement=n4(function(){r.refineElementTextures(r.eleTxrDeqs),r.eleTxrDeqs.unmerge(r.eleTxrDeqs)},jQe),n.beforeRender(function(s,l){l-r.lastInvalidationTime<=O0e?r.skipping=!0:r.skipping=!1},n.beforeRenderPriorities.lyrTxrSkip);var a=o(function(l,u){return u.reqs-l.reqs},"qSort");r.layersQueue=new i4(a),r.setupDequeueing()},"LayeredTextureCache"),Ea=wge.prototype,B0e=0,nZe=Math.pow(2,53)-1;Ea.makeLayer=function(t,e){var r=Math.pow(2,e),n=Math.ceil(t.w*r),i=Math.ceil(t.h*r),a=this.renderer.makeOffscreenCanvas(n,i),s={id:B0e=++B0e%nZe,bb:t,level:e,width:n,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},l=s.context,u=-s.bb.x1,h=-s.bb.y1;return l.scale(r,r),l.translate(u,h),s};Ea.getLayers=function(t,e,r){var n=this,i=n.renderer,a=i.cy,s=a.zoom(),l=n.firstGet;if(n.firstGet=!1,r==null){if(r=Math.ceil(iB(s*e)),r<zb)r=zb;else if(s>=YQe||r>_S)return null}n.validateLayersElesOrdering(r,t);var u=n.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=n.levelIsComplete(r,t),m,g=o(function(){var I=o(function(O){if(n.validateLayersElesOrdering(O,t),n.levelIsComplete(O,t))return m=u[O],!0},"canUseAsTmpLvl"),D=o(function(O){if(!m)for(var M=r+O;zb<=M&&M<=_S&&!I(M);M+=O);},"checkLvls");D(1),D(-1);for(var k=f.length-1;k>=0;k--){var L=f[k];L.invalid&&Df(f,L)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=Hs();for(var I=0;I<t.length;I++)gme(d,t[I].boundingBox())}return d},"getBb"),v=o(function(I){I=I||{};var D=I.after;y();var k=Math.ceil(d.w*h),L=Math.ceil(d.h*h);if(k>P0e||L>P0e)return null;var R=k*L;if(R>tZe)return null;var O=n.makeLayer(d,r);if(D!=null){var M=f.indexOf(D)+1;f.splice(M,0,O)}else(I.insert===void 0||I.insert)&&f.unshift(O);return O},"makeLayer");if(n.skipping&&!l)return null;for(var x=null,b=t.length/qQe,w=!l,C=0;C<t.length;C++){var T=t[C],E=T._private.rscratch,A=E.imgLayerCaches=E.imgLayerCaches||{},S=A[r];if(S){x=S;continue}if((!x||x.eles.length>=b||!yme(x.bb,T.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||w?n.queueLayer(x,T):n.drawEleInLayer(x,T,r,e),x.eles.push(T),A[r]=x}return m||(w?null:f)};Ea.getEleLevelForLayerLevel=function(t,e){return t};Ea.drawEleInLayer=function(t,e,r,n){var i=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=i.getEleLevelForLayerLevel(r,n),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,rZe),a.setImgSmoothing(s,!0))};Ea.levelIsComplete=function(t,e){var r=this,n=r.layersByLevel[t];if(!n||n.length===0)return!1;for(var i=0,a=0;a<n.length;a++){var s=n[a];if(s.reqs>0||s.invalid)return!1;i+=s.eles.length}return i===e.length};Ea.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var n=0;n<r.length;n++){for(var i=r[n],a=-1,s=0;s<e.length;s++)if(i.eles[0]===e[s]){a=s;break}if(a<0){this.invalidateLayer(i);continue}for(var l=a,s=0;s<i.eles.length;s++)if(i.eles[s]!==e[l+s]){this.invalidateLayer(i);break}}};Ea.updateElementsInLayers=function(t,e){for(var r=this,n=t4(t[0]),i=0;i<t.length;i++)for(var a=n?null:t[i],s=n?t[i]:t[i].ele,l=s._private.rscratch,u=l.imgLayerCaches=l.imgLayerCaches||{},h=zb;h<=_S;h++){var f=u[h];f&&(a&&r.getEleLevelForLayerLevel(f.level)!==a.level||e(f,s,a))}};Ea.haveLayers=function(){for(var t=this,e=!1,r=zb;r<=_S;r++){var n=t.layersByLevel[r];if(n&&n.length>0){e=!0;break}}return e};Ea.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=Qu(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(n,i,a){e.invalidateLayer(n)},"invalAssocLayers")))};Ea.invalidateLayer=function(t){if(this.lastInvalidationTime=Qu(),!t.invalid){var e=t.level,r=t.eles,n=this.layersByLevel[e];Df(n,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i<r.length;i++){var a=r[i]._private.rscratch.imgLayerCaches;a&&(a[e]=null)}}};Ea.refineElementTextures=function(t){var e=this;e.updateElementsInLayers(t,o(function(n,i,a){var s=n.replacement;if(s||(s=n.replacement=e.makeLayer(n.bb,n.level),s.replaces=n,s.eles=n.eles),!s.reqs)for(var l=0;l<s.eles.length;l++)e.queueLayer(s,s.eles[l])},"refineEachEle"))};Ea.enqueueElementRefinement=function(t){this.eleTxrDeqs.merge(t),this.scheduleElementRefinement()};Ea.queueLayer=function(t,e){var r=this,n=r.layersQueue,i=t.elesQueue,a=i.hasId=i.hasId||{};if(!t.replacement){if(e){if(a[e.id()])return;i.push(e),a[e.id()]=!0}t.reqs?(t.reqs++,n.updateItem(t)):(t.reqs=1,n.push(t))}};Ea.dequeue=function(t){for(var e=this,r=e.layersQueue,n=[],i=0;i<eZe&&r.size()!==0;){var a=r.peek();if(a.replacement){r.pop();continue}if(a.replaces&&a!==a.replaces.replacement){r.pop();continue}if(a.invalid){r.pop();continue}var s=a.elesQueue.shift();s&&(e.drawEleInLayer(a,s,a.level,t),i++),n.length===0&&n.push(!0),a.elesQueue.length===0&&(r.pop(),a.reqs=0,a.replaces&&e.applyLayerReplacement(a),e.requestRedraw())}return n};Ea.applyLayerReplacement=function(t){var e=this,r=e.layersByLevel[t.level],n=t.replaces,i=r.indexOf(n);if(!(i<0||n.invalid)){r[i]=t;for(var a=0;a<t.eles.length;a++){var s=t.eles[a]._private,l=s.imgLayerCaches=s.imgLayerCaches||{};l&&(l[t.level]=t)}e.requestRedraw()}};Ea.requestRedraw=n4(function(){var t=this.renderer;t.redrawHint("eles",!0),t.redrawHint("drag",!0),t.redraw()},100);Ea.setupDequeueing=xge.setupDequeueing({deqRedrawThreshold:XQe,deqCost:KQe,deqAvgCost:QQe,deqNoDrawCost:ZQe,deqFastCost:JQe,deq:o(function(e,r){return e.dequeue(r)},"deq"),onDeqd:rB,shouldRedraw:ume,priority:o(function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq},"priority")});Tge={};o(iZe,"polygon");o(aZe,"triangleBackcurve");o($0e,"triangleTee");o(sZe,"circleTriangle");o(oZe,"circle");Tge.arrowShapeImpl=function(t){return(F0e||(F0e={polygon:iZe,"triangle-backcurve":aZe,"triangle-tee":$0e,"circle-triangle":sZe,"triangle-cross":$0e,circle:oZe}))[t]};Qc={};Qc.drawElement=function(t,e,r,n,i,a){var s=this;e.isNode()?s.drawNode(t,e,r,n,i,a):s.drawEdge(t,e,r,n,i,a)};Qc.drawElementOverlay=function(t,e){var r=this;e.isNode()?r.drawNodeOverlay(t,e):r.drawEdgeOverlay(t,e)};Qc.drawElementUnderlay=function(t,e){var r=this;e.isNode()?r.drawNodeUnderlay(t,e):r.drawEdgeUnderlay(t,e)};Qc.drawCachedElementPortion=function(t,e,r,n,i,a,s,l){var u=this,h=r.getBoundingBox(e);if(!(h.w===0||h.h===0)){var f=r.getElement(e,h,n,i,a);if(f!=null){var d=l(u,e);if(d===0)return;var p=s(u,e),m=h.x1,g=h.y1,y=h.w,v=h.h,x,b,w,C,T;if(p!==0){var E=r.getRotationPoint(e);w=E.x,C=E.y,t.translate(w,C),t.rotate(p),T=u.getImgSmoothing(t),T||u.setImgSmoothing(t,!0);var A=r.getRotationOffset(e);x=A.x,b=A.y}else x=m,b=g;var S;d!==1&&(S=t.globalAlpha,t.globalAlpha=S*d),t.drawImage(f.texture.canvas,f.x,0,f.width,f.height,x,b,y,v),d!==1&&(t.globalAlpha=S),p!==0&&(t.rotate(-p),t.translate(-w,-C),T||u.setImgSmoothing(t,!1))}else r.drawElement(t,e)}};lZe=o(function(){return 0},"getZeroRotation"),cZe=o(function(e,r){return e.getTextAngle(r,null)},"getLabelRotation"),uZe=o(function(e,r){return e.getTextAngle(r,"source")},"getSourceLabelRotation"),hZe=o(function(e,r){return e.getTextAngle(r,"target")},"getTargetLabelRotation"),fZe=o(function(e,r){return r.effectiveOpacity()},"getOpacity"),LP=o(function(e,r){return r.pstyle("text-opacity").pfValue*r.effectiveOpacity()},"getTextOpacity");Qc.drawCachedElement=function(t,e,r,n,i,a){var s=this,l=s.data,u=l.eleTxrCache,h=l.lblTxrCache,f=l.slbTxrCache,d=l.tlbTxrCache,p=e.boundingBox(),m=a===!0?u.reasons.highQuality:null;if(!(p.w===0||p.h===0||!e.visible())&&(!n||aB(p,n))){var g=e.isEdge(),y=e.element()._private.rscratch.badLine;s.drawElementUnderlay(t,e),s.drawCachedElementPortion(t,e,u,r,i,m,lZe,fZe),(!g||!y)&&s.drawCachedElementPortion(t,e,h,r,i,m,cZe,LP),g&&!y&&(s.drawCachedElementPortion(t,e,f,r,i,m,uZe,LP),s.drawCachedElementPortion(t,e,d,r,i,m,hZe,LP)),s.drawElementOverlay(t,e)}};Qc.drawElements=function(t,e){for(var r=this,n=0;n<e.length;n++){var i=e[n];r.drawElement(t,i)}};Qc.drawCachedElements=function(t,e,r,n){for(var i=this,a=0;a<e.length;a++){var s=e[a];i.drawCachedElement(t,s,r,n)}};Qc.drawCachedNodes=function(t,e,r,n){for(var i=this,a=0;a<e.length;a++){var s=e[a];s.isNode()&&i.drawCachedElement(t,s,r,n)}};Qc.drawLayeredElements=function(t,e,r,n){var i=this,a=i.data.lyrTxrCache.getLayers(e,r);if(a)for(var s=0;s<a.length;s++){var l=a[s],u=l.bb;u.w===0||u.h===0||t.drawImage(l.canvas,u.x1,u.y1,u.w,u.h)}else i.drawCachedElements(t,e,r,n)};th={};th.drawEdge=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,w=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,O),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,O),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),C=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],O);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),T=o(function(){i&&s.drawEdgeOverlay(t,e)},"drawOverlay"),E=o(function(){i&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),A=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,O)},"drawArrows"),S=o(function(){s.drawElementText(t,e,null,n)},"drawText");t.lineJoin="round";var _=e.pstyle("ghost").value==="yes";if(_){var I=e.pstyle("ghost-offset-x").pfValue,D=e.pstyle("ghost-offset-y").pfValue,k=e.pstyle("ghost-opacity").value,L=x*k;t.translate(I,D),w(L),A(L),t.translate(-I,-D)}else C();E(),w(),A(),T(),S(),r&&t.translate(u.x1,u.y1)}};kge=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n){if(n.visible()){var i=n.pstyle("".concat(e,"-opacity")).value;if(i!==0){var a=this,s=a.usePaths(),l=n._private.rscratch,u=n.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=n.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],i),a.drawEdgePath(n,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");th.drawEdgeOverlay=kge("overlay");th.drawEdgeUnderlay=kge("underlay");th.drawEdgePath=function(t,e,r,n){var i=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=i.pathCacheKey&&i.pathCacheKey===d;p?(s=e=i.pathCache,l=!0):(s=e=new Path2D,i.pathCacheKey=d,i.pathCache=s)}if(a.setLineDash)switch(n){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!i.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+3<r.length;m+=4)e.quadraticCurveTo(r[m],r[m+1],r[m+2],r[m+3]);break;case"straight":case"haystack":for(var g=2;g+1<r.length;g+=2)e.lineTo(r[g],r[g+1]);break;case"segments":if(i.isRound){var y=mo(i.roundCorners),v;try{for(y.s();!(v=y.n()).done;){var x=v.value;hge(e,x)}}catch(w){y.e(w)}finally{y.f()}e.lineTo(r[r.length-2],r[r.length-1])}else for(var b=2;b+1<r.length;b+=2)e.lineTo(r[b],r[b+1]);break}e=a,u?e.stroke(s):e.stroke(),e.setLineDash&&e.setLineDash([])};th.drawEdgeTrianglePath=function(t,e,r){e.fillStyle=e.strokeStyle;for(var n=t.pstyle("width").pfValue,i=0;i+1<r.length;i+=2){var a=[r[i+2]-r[i],r[i+3]-r[i+1]],s=Math.sqrt(a[0]*a[0]+a[1]*a[1]),l=[a[1]/s,-a[0]/s],u=[l[0]*n/2,l[1]*n/2];e.beginPath(),e.moveTo(r[i]-u[0],r[i+1]-u[1]),e.lineTo(r[i]+u[0],r[i+1]+u[1]),e.lineTo(r[i+2],r[i+3]),e.closePath(),e.fill()}};th.drawArrowheads=function(t,e,r){var n=e._private.rscratch,i=n.edgeType==="haystack";i||this.drawArrowhead(t,e,"source",n.arrowStartX,n.arrowStartY,n.srcArrowAngle,r),this.drawArrowhead(t,e,"mid-target",n.midX,n.midY,n.midtgtArrowAngle,r),this.drawArrowhead(t,e,"mid-source",n.midX,n.midY,n.midsrcArrowAngle,r),i||this.drawArrowhead(t,e,"target",n.arrowEndX,n.arrowEndY,n.tgtArrowAngle,r)};th.drawArrowhead=function(t,e,r,n,i,a,s){if(!(isNaN(n)||n==null||isNaN(i)||i==null||isNaN(a)||a==null)){var l=this,u=e.pstyle(r+"-arrow-shape").value;if(u!=="none"){var h=e.pstyle(r+"-arrow-fill").value==="hollow"?"both":"filled",f=e.pstyle(r+"-arrow-fill").value,d=e.pstyle("width").pfValue,p=e.pstyle(r+"-arrow-width"),m=p.value==="match-line"?d:p.pfValue;p.units==="%"&&(m*=d);var g=e.pstyle("opacity").value;s===void 0&&(s=g);var y=t.globalCompositeOperation;(s!==1||f==="hollow")&&(t.globalCompositeOperation="destination-out",l.colorFillStyle(t,255,255,255,1),l.colorStrokeStyle(t,255,255,255,1),l.drawArrowShape(e,t,h,d,u,m,n,i,a),t.globalCompositeOperation=y);var v=e.pstyle(r+"-arrow-color").value;l.colorFillStyle(t,v[0],v[1],v[2],s),l.colorStrokeStyle(t,v[0],v[1],v[2],s),l.drawArrowShape(e,t,f,d,u,m,n,i,a)}}};th.drawArrowShape=function(t,e,r,n,i,a,s,l,u){var h=this,f=this.usePaths()&&i!=="triangle-cross",d=!1,p,m=e,g={x:s,y:l},y=t.pstyle("arrow-scale").value,v=this.getArrowWidth(n,y),x=h.arrowShapes[i];if(f){var b=h.arrowPathCache=h.arrowPathCache||[],w=_f(i),C=b[w];C!=null?(p=e=C,d=!0):(p=e=new Path2D,b[w]=p)}d||(e.beginPath&&e.beginPath(),f?x.draw(e,1,0,{x:0,y:0},1):x.draw(e,v,u,g,n),e.closePath&&e.closePath()),e=m,f&&(e.translate(s,l),e.rotate(u),e.scale(v,v)),(r==="filled"||r==="both")&&(f?e.fill(p):e.fill()),(r==="hollow"||r==="both")&&(e.lineWidth=a/(f?v:1),e.lineJoin="miter",f?e.stroke(p):e.stroke()),f&&(e.scale(1/v,1/v),e.rotate(-u),e.translate(-s,-l))};bB={};bB.safeDrawImage=function(t,e,r,n,i,a,s,l,u,h){if(!(i<=0||a<=0||u<=0||h<=0))try{t.drawImage(e,r,n,i,a,s,l,u,h)}catch(f){un(f)}};bB.drawInscribedImage=function(t,e,r,n,i){var a=this,s=r.position(),l=s.x,u=s.y,h=r.cy().style(),f=h.getIndexedStyle.bind(h),d=f(r,"background-fit","value",n),p=f(r,"background-repeat","value",n),m=r.width(),g=r.height(),y=r.padding()*2,v=m+(f(r,"background-width-relative-to","value",n)==="inner"?0:y),x=g+(f(r,"background-height-relative-to","value",n)==="inner"?0:y),b=r._private.rscratch,w=f(r,"background-clip","value",n),C=w==="node",T=f(r,"background-image-opacity","value",n)*i,E=f(r,"background-image-smoothing","value",n),A=r.pstyle("corner-radius").value;A!=="auto"&&(A=r.pstyle("corner-radius").pfValue);var S=e.width||e.cachedW,_=e.height||e.cachedH;(S==null||_==null)&&(document.body.appendChild(e),S=e.cachedW=e.width||e.offsetWidth,_=e.cachedH=e.height||e.offsetHeight,document.body.removeChild(e));var I=S,D=_;if(f(r,"background-width","value",n)!=="auto"&&(f(r,"background-width","units",n)==="%"?I=f(r,"background-width","pfValue",n)*v:I=f(r,"background-width","pfValue",n)),f(r,"background-height","value",n)!=="auto"&&(f(r,"background-height","units",n)==="%"?D=f(r,"background-height","pfValue",n)*x:D=f(r,"background-height","pfValue",n)),!(I===0||D===0)){if(d==="contain"){var k=Math.min(v/I,x/D);I*=k,D*=k}else if(d==="cover"){var k=Math.max(v/I,x/D);I*=k,D*=k}var L=l-v/2,R=f(r,"background-position-x","units",n),O=f(r,"background-position-x","pfValue",n);R==="%"?L+=(v-I)*O:L+=O;var M=f(r,"background-offset-x","units",n),B=f(r,"background-offset-x","pfValue",n);M==="%"?L+=(v-I)*B:L+=B;var F=u-x/2,P=f(r,"background-position-y","units",n),z=f(r,"background-position-y","pfValue",n);P==="%"?F+=(x-D)*z:F+=z;var $=f(r,"background-offset-y","units",n),H=f(r,"background-offset-y","pfValue",n);$==="%"?F+=(x-D)*H:F+=H,b.pathCache&&(L-=l,F-=u,l=0,u=0);var Q=t.globalAlpha;t.globalAlpha=T;var j=a.getImgSmoothing(t),ie=!1;if(E==="no"&&j?(a.setImgSmoothing(t,!1),ie=!0):E==="yes"&&!j&&(a.setImgSmoothing(t,!0),ie=!0),p==="no-repeat")C&&(t.save(),b.pathCache?t.clip(b.pathCache):(a.nodeShapes[a.getNodeShape(r)].draw(t,l,u,v,x,A,b),t.clip())),a.safeDrawImage(t,e,0,0,S,_,L,F,I,D),C&&t.restore();else{var ne=t.createPattern(e,p);t.fillStyle=ne,a.nodeShapes[a.getNodeShape(r)].draw(t,l,u,v,x,A,b),t.translate(L,F),t.fill(),t.translate(-L,-F)}t.globalAlpha=Q,ie&&a.setImgSmoothing(t,j)}};Yp={};Yp.eleTextBiggerThanMin=function(t,e){if(!e){var r=t.cy().zoom(),n=this.getPixelRatio(),i=Math.ceil(iB(r*n));e=Math.pow(2,i)}var a=t.pstyle("font-size").pfValue*e,s=t.pstyle("min-zoomed-font-size").pfValue;return!(a<s)};Yp.drawElementText=function(t,e,r,n,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(n==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(n===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),i==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,i,m,a),r&&t.translate(g.x1,g.y1)};Yp.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r<this.fontCaches.length;r++)if(e=this.fontCaches[r],e.context===t)return e;return e={context:t},this.fontCaches.push(e),e};Yp.setupTextStyle=function(t,e){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,n=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=n+" "+s+" "+i+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(RP,"roundRect");Yp.getTextAngle=function(t,e){var r,n=t._private,i=n.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation");if(s.strValue==="autorotate"){var l=Gl(i,"labelAngle",e);r=t.isEdge()?l:0}else s.strValue==="none"?r=0:r=s.pfValue;return r};Yp.drawText=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=i?e.effectiveOpacity():1;if(!(i&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Gl(s,"labelX",r),h=Gl(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,i);var m=r?r+"-":"",g=Gl(s,"labelWidth",r),y=Gl(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),w=e.pstyle("text-halign").value,C=e.pstyle("text-valign").value;b&&(w="center",C="center"),u+=v,h+=x;var T;switch(n?T=this.getTextAngle(e,r):T=0,T!==0&&(f=u,d=h,t.translate(f,d),t.rotate(T),u=0,h=0),C){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var E=e.pstyle("text-background-opacity").value,A=e.pstyle("text-border-opacity").value,S=e.pstyle("text-border-width").pfValue,_=e.pstyle("text-background-padding").pfValue,I=e.pstyle("text-background-shape").strValue,D=I.indexOf("round")===0,k=2;if(E>0||S>0&&A>0){var L=u-_;switch(w){case"left":L-=g;break;case"center":L-=g/2;break}var R=h-y-_,O=g+2*_,M=y+2*_;if(E>0){var B=t.fillStyle,F=e.pstyle("text-background-color").value;t.fillStyle="rgba("+F[0]+","+F[1]+","+F[2]+","+E*l+")",D?RP(t,L,R,O,M,k):t.fillRect(L,R,O,M),t.fillStyle=B}if(S>0&&A>0){var P=t.strokeStyle,z=t.lineWidth,$=e.pstyle("text-border-color").value,H=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+$[0]+","+$[1]+","+$[2]+","+A*l+")",t.lineWidth=S,t.setLineDash)switch(H){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=S/4,t.setLineDash([]);break;case"solid":t.setLineDash([]);break}if(D?RP(t,L,R,O,M,k,"stroke"):t.strokeRect(L,R,O,M),H==="double"){var Q=S/2;D?RP(t,L+Q,R+Q,O-Q*2,M-Q*2,k,"stroke"):t.strokeRect(L+Q,R+Q,O-Q*2,M-Q*2)}t.setLineDash&&t.setLineDash([]),t.lineWidth=z,t.strokeStyle=P}}var j=2*e.pstyle("text-outline-width").pfValue;if(j>0&&(t.lineWidth=j),e.pstyle("text-wrap").value==="wrap"){var ie=Gl(s,"labelWrapCachedLines",r),ne=Gl(s,"labelLineHeight",r),le=g/2,he=this.getLabelJustification(e);switch(he==="auto"||(w==="left"?he==="left"?u+=-g:he==="center"&&(u+=-le):w==="center"?he==="left"?u+=-le:he==="right"&&(u+=le):w==="right"&&(he==="center"?u+=le:he==="right"&&(u+=g))),C){case"top":h-=(ie.length-1)*ne;break;case"center":case"bottom":h-=(ie.length-1)*ne;break}for(var K=0;K<ie.length;K++)j>0&&t.strokeText(ie[K],u,h),t.fillText(ie[K],u,h),h+=ne}else j>0&&t.strokeText(p,u,h),t.fillText(p,u,h);T!==0&&(t.rotate(-T),t.translate(-f,-d))}}};ly={};ly.drawNode=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!Ct(d.x)||!Ct(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),w=b.value,C=new Array(w.length),T=new Array(w.length),E=0,A=0;A<w.length;A++){var S=w[A],_=C[A]=S!=null&&S!=="none";if(_){var I=e.cy().style().getIndexedStyle(e,"background-image-crossorigin","value",A);E++,T[A]=s.getCachedImage(S,I,function(){h.backgroundTimestamp=Date.now(),e.emitAndNotify("background")})}}var D=e.pstyle("background-blacken").value,k=e.pstyle("border-width").pfValue,L=e.pstyle("background-opacity").value*p,R=e.pstyle("border-color").value,O=e.pstyle("border-style").value,M=e.pstyle("border-join").value,B=e.pstyle("border-cap").value,F=e.pstyle("border-position").value,P=e.pstyle("border-dash-pattern").pfValue,z=e.pstyle("border-dash-offset").pfValue,$=e.pstyle("border-opacity").value*p,H=e.pstyle("outline-width").pfValue,Q=e.pstyle("outline-color").value,j=e.pstyle("outline-style").value,ie=e.pstyle("outline-opacity").value*p,ne=e.pstyle("outline-offset").value,le=e.pstyle("corner-radius").value;le!=="auto"&&(le=e.pstyle("corner-radius").pfValue);var he=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:L;s.eleFillStyle(t,e,oe)},"setupShapeColor"),K=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:$;s.colorStrokeStyle(t,R[0],R[1],R[2],oe)},"setupBorderColor"),X=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ie;s.colorStrokeStyle(t,Q[0],Q[1],Q[2],oe)},"setupOutlineColor"),te=o(function(oe,V,xe,q){var pe=s.nodePathCache=s.nodePathCache||[],ve=cme(xe==="polygon"?xe+","+q.join(","):xe,""+V,""+oe,""+le),Pe=pe[ve],_e,we=!1;return Pe!=null?(_e=Pe,we=!0,f.pathCache=_e):(_e=new Path2D,pe[ve]=f.pathCache=_e),{path:_e,cacheHit:we}},"getPath"),J=e.pstyle("shape").strValue,se=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var ue=te(l,u,J,se);g=ue.path,y=ue.cacheHit}var Z=o(function(){if(!y){var oe=d;m&&(oe={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,oe.x,oe.y,l,u,le,f)}m?t.fill(g):t.fill()},"drawShape"),Se=o(function(){for(var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,xe=h.backgrounding,q=0,pe=0;pe<T.length;pe++){var ve=e.cy().style().getIndexedStyle(e,"background-image-containment","value",pe);if(V&&ve==="over"||!V&&ve==="inside"){q++;continue}C[pe]&&T[pe].complete&&!T[pe].error&&(q++,s.drawInscribedImage(t,T[pe],e,pe,oe))}h.backgrounding=q!==E,xe!==h.backgrounding&&e.updateStyle(!1)},"drawImages"),ce=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,V),oe&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,le,f)))},"drawPie"),ae=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=(D>0?D:-D)*oe,xe=D>0?0:255;D!==0&&(s.colorFillStyle(t,xe,xe,xe,V),m?t.fill(g):t.fill())},"darken"),Oe=o(function(){if(k>0){if(t.lineWidth=k,t.lineCap=B,t.lineJoin=M,t.setLineDash)switch(O){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(P),t.lineDashOffset=z;break;case"solid":case"double":t.setLineDash([]);break}if(F!=="center"){if(t.save(),t.lineWidth*=2,F==="inside")m?t.clip(g):t.clip();else{var oe=new Path2D;oe.rect(-l/2-k,-u/2-k,l+2*k,u+2*k),oe.addPath(g),t.clip(oe,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(O==="double"){t.lineWidth=k/3;var V=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=V}t.setLineDash&&t.setLineDash([])}},"drawBorder"),ge=o(function(){if(H>0){if(t.lineWidth=H,t.lineCap="butt",t.setLineDash)switch(j){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var oe=d;m&&(oe={x:0,y:0});var V=s.getNodeShape(e),xe=k;F==="inside"&&(xe=0),F==="outside"&&(xe*=2);var q=(l+xe+(H+ne))/l,pe=(u+xe+(H+ne))/u,ve=l*q,Pe=u*pe,_e=s.nodeShapes[V].points,we;if(m){var Ve=te(ve,Pe,V,_e);we=Ve.path}if(V==="ellipse")s.drawEllipsePath(we||t,oe.x,oe.y,ve,Pe);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(V)){var De=0,qe=0,at=0;V==="round-diamond"?De=(xe+ne+H)*1.4:V==="round-heptagon"?(De=(xe+ne+H)*1.075,at=-(xe/2+ne+H)/35):V==="round-hexagon"?De=(xe+ne+H)*1.12:V==="round-pentagon"?(De=(xe+ne+H)*1.13,at=-(xe/2+ne+H)/15):V==="round-tag"?(De=(xe+ne+H)*1.12,qe=(xe/2+H+ne)*.07):V==="round-triangle"&&(De=(xe+ne+H)*(Math.PI/2),at=-(xe+ne/2+H)/Math.PI),De!==0&&(q=(l+De)/l,ve=l*q,["round-hexagon","round-tag"].includes(V)||(pe=(u+De)/u,Pe=u*pe)),le=le==="auto"?bme(ve,Pe):le;for(var Rt=ve/2,st=Pe/2,Ue=le+(xe+H+ne)/2,ct=new Array(_e.length/2),We=new Array(_e.length/2),ot=0;ot<_e.length/2;ot++)ct[ot]={x:oe.x+qe+Rt*_e[ot*2],y:oe.y+at+st*_e[ot*2+1]};var Yt,bt,Mt,xt,ut=ct.length;for(bt=ct[ut-1],Yt=0;Yt<ut;Yt++)Mt=ct[Yt%ut],xt=ct[(Yt+1)%ut],We[Yt]=vB(bt,Mt,xt,Ue),bt=Mt,Mt=xt;s.drawRoundPolygonPath(we||t,oe.x+qe,oe.y+at,l*q,u*pe,_e,We)}else if(["roundrectangle","round-rectangle"].includes(V))le=le==="auto"?Vp(ve,Pe):le,s.drawRoundRectanglePath(we||t,oe.x,oe.y,ve,Pe,le+(xe+H+ne)/2);else if(["cutrectangle","cut-rectangle"].includes(V))le=le==="auto"?sB():le,s.drawCutRectanglePath(we||t,oe.x,oe.y,ve,Pe,null,le+(xe+H+ne)/4);else if(["bottomroundrectangle","bottom-round-rectangle"].includes(V))le=le==="auto"?Vp(ve,Pe):le,s.drawBottomRoundRectanglePath(we||t,oe.x,oe.y,ve,Pe,le+(xe+H+ne)/2);else if(V==="barrel")s.drawBarrelPath(we||t,oe.x,oe.y,ve,Pe);else if(V.startsWith("polygon")||["rhomboid","right-rhomboid","round-tag","tag","vee"].includes(V)){var Et=(xe+H+ne)/l;_e=wS(TS(_e,Et)),s.drawPolygonPath(we||t,oe.x,oe.y,l,u,_e)}else{var ft=(xe+H+ne)/l;_e=wS(TS(_e,-ft)),s.drawPolygonPath(we||t,oe.x,oe.y,l,u,_e)}if(m?t.stroke(we):t.stroke(),j==="double"){t.lineWidth=xe/3;var yt=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(we):t.stroke(),t.globalCompositeOperation=yt}t.setLineDash&&t.setLineDash([])}},"drawOutline"),ze=o(function(){i&&s.drawNodeOverlay(t,e,d,l,u)},"drawOverlay"),He=o(function(){i&&s.drawNodeUnderlay(t,e,d,l,u)},"drawUnderlay"),$e=o(function(){s.drawElementText(t,e,null,n)},"drawText"),Re=e.pstyle("ghost").value==="yes";if(Re){var Ie=e.pstyle("ghost-offset-x").pfValue,be=e.pstyle("ghost-offset-y").pfValue,W=e.pstyle("ghost-opacity").value,de=W*p;t.translate(Ie,be),X(),ge(),he(W*L),Z(),Se(de,!0),K(W*$),Oe(),ce(D!==0||k!==0),Se(de,!1),ae(de),t.translate(-Ie,-be)}m&&t.translate(-d.x,-d.y),He(),m&&t.translate(d.x,d.y),X(),ge(),he(),Z(),Se(p,!0),K(),Oe(),ce(D!==0||k!==0),Se(p,!1),ae(),m&&t.translate(-d.x,-d.y),$e(),ze(),r&&t.translate(x.x1,x.y1)}};Ege=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n,i,a,s){var l=this;if(n.visible()){var u=n.pstyle("".concat(e,"-padding")).pfValue,h=n.pstyle("".concat(e,"-opacity")).value,f=n.pstyle("".concat(e,"-color")).value,d=n.pstyle("".concat(e,"-shape")).value,p=n.pstyle("".concat(e,"-corner-radius")).value;if(h>0){if(i=i||n.position(),a==null||s==null){var m=n.padding();a=n.width()+2*m,s=n.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,i.x,i.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");ly.drawNodeOverlay=Ege("overlay");ly.drawNodeUnderlay=Ege("underlay");ly.hasPie=function(t){return t=t[0],t._private.hasPie};ly.drawPie=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=e.pstyle("pie-size"),s=n.x,l=n.y,u=e.width(),h=e.height(),f=Math.min(u,h)/2,d=0,p=this.usePaths();p&&(s=0,l=0),a.units==="%"?f=f*a.pfValue:a.pfValue!==void 0&&(f=a.pfValue/2);for(var m=1;m<=i.pieBackgroundN;m++){var g=e.pstyle("pie-"+m+"-background-size").value,y=e.pstyle("pie-"+m+"-background-color").value,v=e.pstyle("pie-"+m+"-background-opacity").value*r,x=g/100;x+d>1&&(x=1-d);var b=1.5*Math.PI+2*Math.PI*d,w=2*Math.PI*x,C=b+w;g===0||d>=1||d+x>1||(t.beginPath(),t.moveTo(s,l),t.arc(s,l,f,b,C),t.closePath(),this.colorFillStyle(t,y[0],y[1],y[2],v),t.fill(),d+=x)}};ys={},dZe=100;ys.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};ys.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,n,i=0;i<e.length;i++)if(n=e[i],n.context===t){r=!1;break}return r&&(n={context:t},e.push(n)),n};ys.createGradientStyleFor=function(t,e,r,n,i){var a,s=this.usePaths(),l=r.pstyle(e+"-gradient-stop-colors").value,u=r.pstyle(e+"-gradient-stop-positions").pfValue;if(n==="radial-gradient")if(r.isEdge()){var h=r.sourceEndpoint(),f=r.targetEndpoint(),d=r.midpoint(),p=Gp(h,d),m=Gp(f,d);a=t.createRadialGradient(d.x,d.y,0,d.x,d.y,Math.max(p,m))}else{var g=s?{x:0,y:0}:r.position(),y=r.paddedWidth(),v=r.paddedHeight();a=t.createRadialGradient(g.x,g.y,0,g.x,g.y,Math.max(y,v))}else if(r.isEdge()){var x=r.sourceEndpoint(),b=r.targetEndpoint();a=t.createLinearGradient(x.x,x.y,b.x,b.y)}else{var w=s?{x:0,y:0}:r.position(),C=r.paddedWidth(),T=r.paddedHeight(),E=C/2,A=T/2,S=r.pstyle("background-gradient-direction").value;switch(S){case"to-bottom":a=t.createLinearGradient(w.x,w.y-A,w.x,w.y+A);break;case"to-top":a=t.createLinearGradient(w.x,w.y+A,w.x,w.y-A);break;case"to-left":a=t.createLinearGradient(w.x+E,w.y,w.x-E,w.y);break;case"to-right":a=t.createLinearGradient(w.x-E,w.y,w.x+E,w.y);break;case"to-bottom-right":case"to-right-bottom":a=t.createLinearGradient(w.x-E,w.y-A,w.x+E,w.y+A);break;case"to-top-right":case"to-right-top":a=t.createLinearGradient(w.x-E,w.y+A,w.x+E,w.y-A);break;case"to-bottom-left":case"to-left-bottom":a=t.createLinearGradient(w.x+E,w.y-A,w.x-E,w.y+A);break;case"to-top-left":case"to-left-top":a=t.createLinearGradient(w.x+E,w.y+A,w.x-E,w.y-A);break}}if(!a)return null;for(var _=u.length===l.length,I=l.length,D=0;D<I;D++)a.addColorStop(_?u[D]:D/(I-1),"rgba("+l[D][0]+","+l[D][1]+","+l[D][2]+","+i+")");return a};ys.gradientFillStyle=function(t,e,r,n){var i=this.createGradientStyleFor(t,"background",e,r,n);if(!i)return null;t.fillStyle=i};ys.colorFillStyle=function(t,e,r,n,i){t.fillStyle="rgba("+e+","+r+","+n+","+i+")"};ys.eleFillStyle=function(t,e,r){var n=e.pstyle("background-fill").value;if(n==="linear-gradient"||n==="radial-gradient")this.gradientFillStyle(t,e,n,r);else{var i=e.pstyle("background-color").value;this.colorFillStyle(t,i[0],i[1],i[2],r)}};ys.gradientStrokeStyle=function(t,e,r,n){var i=this.createGradientStyleFor(t,"line",e,r,n);if(!i)return null;t.strokeStyle=i};ys.colorStrokeStyle=function(t,e,r,n,i){t.strokeStyle="rgba("+e+","+r+","+n+","+i+")"};ys.eleStrokeStyle=function(t,e,r){var n=e.pstyle("line-fill").value;if(n==="linear-gradient"||n==="radial-gradient")this.gradientStrokeStyle(t,e,n,r);else{var i=e.pstyle("line-color").value;this.colorStrokeStyle(t,i[0],i[1],i[2],r)}};ys.matchCanvasSize=function(t){var e=this,r=e.data,n=e.findContainerClientCoords(),i=n[2],a=n[3],s=e.getPixelRatio(),l=e.motionBlurPxRatio;(t===e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE]||t===e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG])&&(s=l);var u=i*s,h=a*s,f;if(!(u===e.canvasWidth&&h===e.canvasHeight)){e.fontCaches=null;var d=r.canvasContainer;d.style.width=i+"px",d.style.height=a+"px";for(var p=0;p<e.CANVAS_LAYERS;p++)f=r.canvases[p],f.width=u,f.height=h,f.style.width=i+"px",f.style.height=a+"px";for(var p=0;p<e.BUFFER_COUNT;p++)f=r.bufferCanvases[p],f.width=u,f.height=h,f.style.width=i+"px",f.style.height=a+"px";e.textureMult=1,s<=1&&(f=r.bufferCanvases[e.TEXTURE_BUFFER],e.textureMult=2,f.width=u*e.textureMult,f.height=h*e.textureMult),e.canvasWidth=u,e.canvasHeight=h,e.pixelRatio=s}};ys.renderTo=function(t,e,r,n){this.render({forcedContext:t,forcedZoom:e,forcedPan:r,drawAllLayers:!0,forcedPxRatio:n})};ys.clearCanvas=function(){var t=this,e=t.data;function r(n){n.clearRect(0,0,t.canvasWidth,t.canvasHeight)}o(r,"clear"),r(e.contexts[t.NODE]),r(e.contexts[t.DRAG])};ys.render=function(t){var e=this;t=t||dme();var r=e.cy,n=t.forcedContext,i=t.drawAllLayers,a=t.drawOnlyNodeLayer,s=t.forcedZoom,l=t.forcedPan,u=t.forcedPxRatio===void 0?this.getPixelRatio():t.forcedPxRatio,h=e.data,f=h.canvasNeedsRedraw,d=e.textureOnViewport&&!n&&(e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming),p=t.motionBlur!==void 0?t.motionBlur:e.motionBlur,m=e.motionBlurPxRatio,g=r.hasCompoundNodes(),y=e.hoverData.draggingEles,v=!!(e.hoverData.selecting||e.touchData.selecting);p=p&&!n&&e.motionBlurEnabled&&!v;var x=p;n||(e.prevPxRatio!==u&&(e.invalidateContainerClientCoordsCache(),e.matchCanvasSize(e.container),e.redrawHint("eles",!0),e.redrawHint("drag",!0)),e.prevPxRatio=u),!n&&e.motionBlurTimeout&&clearTimeout(e.motionBlurTimeout),p&&(e.mbFrames==null&&(e.mbFrames=0),e.mbFrames++,e.mbFrames<3&&(x=!1),e.mbFrames>e.minMbLowQualFrames&&(e.motionBlurPxRatio=e.mbPxRBlurry)),e.clearingMotionBlur&&(e.motionBlurPxRatio=1),e.textureDrawLastFrame&&!d&&(f[e.NODE]=!0,f[e.SELECT_BOX]=!0);var b=r.style(),w=r.zoom(),C=s!==void 0?s:w,T=r.pan(),E={x:T.x,y:T.y},A={zoom:w,pan:{x:T.x,y:T.y}},S=e.prevViewport,_=S===void 0||A.zoom!==S.zoom||A.pan.x!==S.pan.x||A.pan.y!==S.pan.y;!_&&!(y&&!g)&&(e.motionBlurPxRatio=1),l&&(E=l),C*=u,E.x*=u,E.y*=u;var I=e.getCachedZSortedEles();function D(K,X,te,J,se){var ue=K.globalCompositeOperation;K.globalCompositeOperation="destination-out",e.colorFillStyle(K,255,255,255,e.motionBlurTransparency),K.fillRect(X,te,J,se),K.globalCompositeOperation=ue}o(D,"mbclear");function k(K,X){var te,J,se,ue;!e.clearingMotionBlur&&(K===h.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]||K===h.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG])?(te={x:T.x*m,y:T.y*m},J=w*m,se=e.canvasWidth*m,ue=e.canvasHeight*m):(te=E,J=C,se=e.canvasWidth,ue=e.canvasHeight),K.setTransform(1,0,0,1,0,0),X==="motionBlur"?D(K,0,0,se,ue):!n&&(X===void 0||X)&&K.clearRect(0,0,se,ue),i||(K.translate(te.x,te.y),K.scale(J,J)),l&&K.translate(l.x,l.y),s&&K.scale(s,s)}if(o(k,"setContextTransform"),d||(e.textureDrawLastFrame=!1),d){if(e.textureDrawLastFrame=!0,!e.textureCache){e.textureCache={},e.textureCache.bb=r.mutableElements().boundingBox(),e.textureCache.texture=e.data.bufferCanvases[e.TEXTURE_BUFFER];var L=e.data.bufferContexts[e.TEXTURE_BUFFER];L.setTransform(1,0,0,1,0,0),L.clearRect(0,0,e.canvasWidth*e.textureMult,e.canvasHeight*e.textureMult),e.render({forcedContext:L,drawOnlyNodeLayer:!0,forcedPxRatio:u*e.textureMult});var A=e.textureCache.viewport={zoom:r.zoom(),pan:r.pan(),width:e.canvasWidth,height:e.canvasHeight};A.mpan={x:(0-A.pan.x)/A.zoom,y:(0-A.pan.y)/A.zoom}}f[e.DRAG]=!1,f[e.NODE]=!1;var R=h.contexts[e.NODE],O=e.textureCache.texture,A=e.textureCache.viewport;R.setTransform(1,0,0,1,0,0),p?D(R,0,0,A.width,A.height):R.clearRect(0,0,A.width,A.height);var M=b.core("outside-texture-bg-color").value,B=b.core("outside-texture-bg-opacity").value;e.colorFillStyle(R,M[0],M[1],M[2],B),R.fillRect(0,0,A.width,A.height);var w=r.zoom();k(R,!1),R.clearRect(A.mpan.x,A.mpan.y,A.width/A.zoom/u,A.height/A.zoom/u),R.drawImage(O,A.mpan.x,A.mpan.y,A.width/A.zoom/u,A.height/A.zoom/u)}else e.textureOnViewport&&!n&&(e.textureCache=null);var F=r.extent(),P=e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming||e.hoverData.draggingEles||e.cy.animated(),z=e.hideEdgesOnViewport&&P,$=[];if($[e.NODE]=!f[e.NODE]&&p&&!e.clearedForMotionBlur[e.NODE]||e.clearingMotionBlur,$[e.NODE]&&(e.clearedForMotionBlur[e.NODE]=!0),$[e.DRAG]=!f[e.DRAG]&&p&&!e.clearedForMotionBlur[e.DRAG]||e.clearingMotionBlur,$[e.DRAG]&&(e.clearedForMotionBlur[e.DRAG]=!0),f[e.NODE]||i||a||$[e.NODE]){var H=p&&!$[e.NODE]&&m!==1,R=n||(H?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]:h.contexts[e.NODE]),Q=p&&!H?"motionBlur":void 0;k(R,Q),z?e.drawCachedNodes(R,I.nondrag,u,F):e.drawLayeredElements(R,I.nondrag,u,F),e.debug&&e.drawDebugPoints(R,I.nondrag),!i&&!p&&(f[e.NODE]=!1)}if(!a&&(f[e.DRAG]||i||$[e.DRAG])){var H=p&&!$[e.DRAG]&&m!==1,R=n||(H?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG]:h.contexts[e.DRAG]);k(R,p&&!H?"motionBlur":void 0),z?e.drawCachedNodes(R,I.drag,u,F):e.drawCachedElements(R,I.drag,u,F),e.debug&&e.drawDebugPoints(R,I.drag),!i&&!p&&(f[e.DRAG]=!1)}if(this.drawSelectionRectangle(t,k),p&&m!==1){var j=h.contexts[e.NODE],ie=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE],ne=h.contexts[e.DRAG],le=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG],he=o(function(X,te,J){X.setTransform(1,0,0,1,0,0),J||!x?X.clearRect(0,0,e.canvasWidth,e.canvasHeight):D(X,0,0,e.canvasWidth,e.canvasHeight);var se=m;X.drawImage(te,0,0,e.canvasWidth*se,e.canvasHeight*se,0,0,e.canvasWidth,e.canvasHeight)},"drawMotionBlur");(f[e.NODE]||$[e.NODE])&&(he(j,ie,$[e.NODE]),f[e.NODE]=!1),(f[e.DRAG]||$[e.DRAG])&&(he(ne,le,$[e.DRAG]),f[e.DRAG]=!1)}e.prevViewport=A,e.clearingMotionBlur&&(e.clearingMotionBlur=!1,e.motionBlurCleared=!0,e.motionBlur=!0),p&&(e.motionBlurTimeout=setTimeout(function(){e.motionBlurTimeout=null,e.clearedForMotionBlur[e.NODE]=!1,e.clearedForMotionBlur[e.DRAG]=!1,e.motionBlur=!1,e.clearingMotionBlur=!d,e.mbFrames=0,f[e.NODE]=!0,f[e.DRAG]=!0,e.redraw()},dZe)),n||r.emit("render")};ys.drawSelectionRectangle=function(t,e){var r=this,n=r.cy,i=r.data,a=n.style(),s=t.drawOnlyNodeLayer,l=t.drawAllLayers,u=i.canvasNeedsRedraw,h=t.forcedContext;if(r.showFps||!s&&u[r.SELECT_BOX]&&!l){var f=h||i.contexts[r.SELECT_BOX];if(e(f),r.selection[4]==1&&(r.hoverData.selecting||r.touchData.selecting)){var d=r.cy.zoom(),p=a.core("selection-box-border-width").value/d;f.lineWidth=p,f.fillStyle="rgba("+a.core("selection-box-color").value[0]+","+a.core("selection-box-color").value[1]+","+a.core("selection-box-color").value[2]+","+a.core("selection-box-opacity").value+")",f.fillRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]),p>0&&(f.strokeStyle="rgba("+a.core("selection-box-border-color").value[0]+","+a.core("selection-box-border-color").value[1]+","+a.core("selection-box-border-color").value[2]+","+a.core("selection-box-opacity").value+")",f.strokeRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]))}if(i.bgActivePosistion&&!r.hoverData.selecting){var d=r.cy.zoom(),m=i.bgActivePosistion;f.fillStyle="rgba("+a.core("active-bg-color").value[0]+","+a.core("active-bg-color").value[1]+","+a.core("active-bg-color").value[2]+","+a.core("active-bg-opacity").value+")",f.beginPath(),f.arc(m.x,m.y,a.core("active-bg-size").pfValue/d,0,2*Math.PI),f.fill()}var g=r.lastRedrawTime;if(r.showFps&&g){g=Math.round(g);var y=Math.round(1e3/g),v="1 frame = "+g+" ms = "+y+" fps";if(f.setTransform(1,0,0,1,0,0),f.fillStyle="rgba(255, 0, 0, 0.75)",f.strokeStyle="rgba(255, 0, 0, 0.75)",f.font="30px Arial",!Nb){var x=f.measureText(v);Nb=x.actualBoundingBoxAscent}f.fillText(v,0,Nb);var b=60;f.strokeRect(0,Nb+10,250,20),f.fillRect(0,Nb+10,250*Math.min(y/b,1),20)}l||(u[r.SELECT_BOX]=!1)}};o(z0e,"compileShader");o(pZe,"createProgram");o(mZe,"createTextureCanvas");o(wB,"getEffectivePanZoom");o(NP,"modelToRenderedPosition");o(oS,"toWebGLColor");o(lS,"indexToVec4");o(gZe,"vec4ToIndex");o(yZe,"createTexture");o(Sge,"getTypeInfo");o(Cge,"createTypedArray");o(vZe,"createTypedArrayView");o(xZe,"createBufferStaticDraw");o(po,"createBufferDynamicDraw");o(bZe,"createPickingFrameBuffer");G0e=typeof Float32Array<"u"?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)});o(Gb,"create");o(Age,"identity");o(wZe,"multiply");o(DS,"translate");o(_ge,"rotate");o(TB,"scale");o(TZe,"projection");Vb={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},Mb=la({getKey:null,drawElement:null,getBoundingBox:null,getRotation:null,getRotationPoint:null,getRotationOffset:null,isVisible:null,getPadding:null}),kZe=function(){function t(e,r){Mf(this,t),this.debugID=Math.floor(Math.random()*1e4),this.r=e,this.atlasSize=r.webglTexSize,this.rows=r.webglTexRows,this.enableWrapping=r.enableWrapping,this.texHeight=Math.floor(this.atlasSize/this.rows),this.maxTexWidth=this.atlasSize,this.texture=null,this.canvas=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=r.createTextureCanvas(e,this.atlasSize,this.atlasSize),this.scratch=r.createTextureCanvas(e,this.atlasSize,this.texHeight,"scratch")}return o(t,"Atlas"),If(t,[{key:"getKeys",value:o(function(){return new Set(this.keyToLocation.keys())},"getKeys")},{key:"getScale",value:o(function(r){var n=r.w,i=r.h,a=this.texHeight,s=this.maxTexWidth,l=a/i,u=n*l,h=i*l;return u>s&&(l=s/n,u=n*l,h=i*l),{scale:l,texW:u,texH:h}},"getScale")},{key:"draw",value:o(function(r,n,i){var a=this,s=this.atlasSize,l=this.rows,u=this.texHeight,h=this.getScale(n),f=h.scale,d=h.texW,p=h.texH,m=[null,null],g=o(function(w,C){if(i&&C){var T=C.context,E=w.x,A=w.row,S=E,_=u*A;T.save(),T.translate(S,_),T.scale(f,f),i(T,n),T.restore()}},"drawAt"),y=o(function(){g(a.freePointer,a.canvas),m[0]={x:a.freePointer.x,y:a.freePointer.row*u,w:d,h:p},m[1]={x:a.freePointer.x+d,y:a.freePointer.row*u,w:0,h:p},a.freePointer.x+=d,a.freePointer.x==s&&(a.freePointer.x=0,a.freePointer.row++)},"drawNormal"),v=o(function(){var w=a.scratch,C=a.canvas;w.clear(),g({x:0,row:0},w);var T=s-a.freePointer.x,E=d-T,A=u;{var S=a.freePointer.x,_=a.freePointer.row*u,I=T;C.context.drawImage(w,0,0,I,A,S,_,I,A),m[0]={x:S,y:_,w:I,h:p}}{var D=T,k=(a.freePointer.row+1)*u,L=E;C&&C.context.drawImage(w,D,0,L,A,0,k,L,A),m[1]={x:0,y:k,w:L,h:p}}a.freePointer.x=E,a.freePointer.row++},"drawWrapped"),x=o(function(){a.freePointer.x=0,a.freePointer.row++},"moveToStartOfNextRow");if(this.freePointer.x+d<=s)y();else{if(this.freePointer.row>=l-1)return!1;this.freePointer.x===s?(x(),y()):this.enableWrapping?v():(x(),y())}return this.keyToLocation.set(r,m),this.needsBuffer=!0,m},"draw")},{key:"getOffsets",value:o(function(r){return this.keyToLocation.get(r)},"getOffsets")},{key:"isEmpty",value:o(function(){return this.freePointer.x===0&&this.freePointer.row===0},"isEmpty")},{key:"canFit",value:o(function(r){var n=this.atlasSize,i=this.rows,a=this.getScale(r),s=a.texW;return this.freePointer.x+s>n?this.freePointer.row<i-1:!0},"canFit")},{key:"bufferIfNeeded",value:o(function(r){this.texture||(this.texture=yZe(r,this.debugID)),this.needsBuffer&&(this.texture.buffer(this.canvas),this.needsBuffer=!1)},"bufferIfNeeded")},{key:"dispose",value:o(function(){this.texture&&(this.texture.deleteTexture(),this.texture=null,this.needsBuffer=!0)},"dispose")}]),t}(),EZe=function(){function t(e,r){Mf(this,t),this.r=e,this.opts=r,this.keyToIds=new Map,this.idToKey=new Map,this.atlases=[],this.styleKeyToAtlas=new Map,this.styleKeyNeedsRedraw=new Set,this.forceGC=!1}return o(t,"AtlasCollection"),If(t,[{key:"getKeys",value:o(function(){return new Set(this.styleKeyToAtlas.keys())},"getKeys")},{key:"getIdsFor",value:o(function(r){var n=this.keyToIds.get(r);return n||(n=new Set,this.keyToIds.set(r,n)),n},"getIdsFor")},{key:"_createAtlas",value:o(function(){var r=this.r,n=this.opts;return new kZe(r,n)},"_createAtlas")},{key:"_getScratchCanvas",value:o(function(){if(!this.scratch){var r=this.r,n=this.opts,i=n.webglTexSize,a=Math.floor(i/n.webglTexRows);this.scratch=n.createTextureCanvas(r,i,a,"scratch")}return this.scratch},"_getScratchCanvas")},{key:"draw",value:o(function(r,n,i,a){if(this.styleKeyNeedsRedraw.has(n)){this.styleKeyNeedsRedraw.delete(n),this.deleteKey(r,n);var s=this.styleKeyToAtlas.get(n);s&&(s.forceGC=!0),this.styleKeyToAtlas.delete(n)}var l=this.styleKeyToAtlas.get(n);return l||(l=this.atlases[this.atlases.length-1],(!l||!l.canFit(i))&&(l=this._createAtlas(),this.atlases.push(l)),l.draw(n,i,a),this.styleKeyToAtlas.set(n,l),this.getIdsFor(n).add(r),this.idToKey.set(r,n)),l},"draw")},{key:"getAtlas",value:o(function(r){return this.styleKeyToAtlas.get(r)},"getAtlas")},{key:"hasAtlas",value:o(function(r){return this.styleKeyToAtlas.has(r)},"hasAtlas")},{key:"deleteKey",value:o(function(r,n){this.idToKey.delete(r),this.getIdsFor(n).delete(r)},"deleteKey")},{key:"checkKeyIsInvalid",value:o(function(r,n){if(!this.idToKey.has(r))return!1;var i=this.idToKey.get(r);return i!=n?(this.deleteKey(r,i),!0):!1},"checkKeyIsInvalid")},{key:"_getKeysToCollect",value:o(function(){var r=new Set,n=mo(this.styleKeyToAtlas.keys()),i;try{for(n.s();!(i=n.n()).done;){var a=i.value;this.getIdsFor(a).size==0&&r.add(a)}}catch(s){n.e(s)}finally{n.f()}return r},"_getKeysToCollect")},{key:"gc",value:o(function(){var r=this,n=this.atlases.some(function(p){return p.forceGC}),i=this._getKeysToCollect();if(i.size===0&&!n){console.log("nothing to garbage collect");return}var a=[],s=new Map,l=null,u=mo(this.atlases),h;try{var f=o(function(){var m=h.value,g=m.getKeys(),y=SZe(i,g);if(y.size===0&&!m.forceGC)return a.push(m),g.forEach(function(A){return s.set(A,m)}),"continue";l||(l=r._createAtlas(),a.push(l));var v=mo(g),x;try{for(v.s();!(x=v.n()).done;){var b=x.value;if(!y.has(b)){var w=m.getOffsets(b),C=_i(w,2),T=C[0],E=C[1];l.canFit({w:T.w+E.w,h:T.h})||(l=r._createAtlas(),a.push(l)),r._copyTextureToNewAtlas(b,m,l),s.set(b,l)}}}catch(A){v.e(A)}finally{v.f()}},"_loop");for(u.s();!(h=u.n()).done;)var d=f()}catch(p){u.e(p)}finally{u.f()}this.atlases=a,this.styleKeyToAtlas=s},"gc")},{key:"_copyTextureToNewAtlas",value:o(function(r,n,i){var a=n.getOffsets(r),s=_i(a,2),l=s[0],u=s[1];if(u.w===0)i.draw(r,l,function(p){p.drawImage(n.canvas,l.x,l.y,l.w,l.h,0,0,l.w,l.h)});else{var h=this._getScratchCanvas();h.clear(),h.context.drawImage(n.canvas,l.x,l.y,l.w,l.h,0,0,l.w,l.h),h.context.drawImage(n.canvas,u.x,u.y,u.w,u.h,l.w,0,u.w,u.h);var f=l.w+u.w,d=l.h;i.draw(r,{w:f,h:d},function(p){p.drawImage(h,0,0,f,d,0,0,f,d)})}},"_copyTextureToNewAtlas")},{key:"getCounts",value:o(function(){return{keyCount:this.styleKeyToAtlas.size,atlasCount:new Set(this.styleKeyToAtlas.values()).size}},"getCounts")}]),t}();o(SZe,"intersection");CZe=function(){function t(e,r){Mf(this,t),this.r=e;var n=r;this.globalOptions=n,this.maxAtlases=n.webglTexPerBatch,this.atlasSize=n.webglTexSize,this.renderTypes=new Map,this.maxAtlasesPerBatch=r.webglTexPerBatch,this.batchAtlases=[],this._cacheScratchCanvas(n)}return o(t,"AtlasManager"),If(t,[{key:"_cacheScratchCanvas",value:o(function(r){var n=-1,i=-1,a=null,s=r.createTextureCanvas;r.createTextureCanvas=function(l,u,h,f){return f?((!a||u!=n||h!=i)&&(n=u,i=h,a=s(l,u,h)),a):s(l,u,h)}},"_cacheScratchCanvas")},{key:"addRenderType",value:o(function(r,n){var i=new EZe(this.r,this.globalOptions),a=n;this.renderTypes.set(r,rr({type:r,atlasCollection:i},a))},"addRenderType")},{key:"getRenderTypes",value:o(function(){return j0e(this.renderTypes.values())},"getRenderTypes")},{key:"getRenderTypeOpts",value:o(function(r){return this.renderTypes.get(r)},"getRenderTypeOpts")},{key:"invalidate",value:o(function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.forceRedraw,a=i===void 0?!1:i,s=n.filterEle,l=s===void 0?function(){return!0}:s,u=n.filterType,h=u===void 0?function(){return!0}:u,f=!1,d=mo(r),p;try{for(d.s();!(p=d.n()).done;){var m=p.value;if(l(m)){var g=m.id(),y=mo(this.getRenderTypes()),v;try{for(y.s();!(v=y.n()).done;){var x=v.value;if(h(x.type)){var b=x.getKey(m);a?(x.atlasCollection.deleteKey(g,b),x.atlasCollection.styleKeyNeedsRedraw.add(b),f=!0):f|=x.atlasCollection.checkKeyIsInvalid(g,b)}}}catch(w){y.e(w)}finally{y.f()}}}}catch(w){d.e(w)}finally{d.f()}return f},"invalidate")},{key:"gc",value:o(function(){var r=mo(this.getRenderTypes()),n;try{for(r.s();!(n=r.n()).done;){var i=n.value;i.atlasCollection.gc()}}catch(a){r.e(a)}finally{r.f()}},"gc")},{key:"isRenderable",value:o(function(r,n){var i=this.getRenderTypeOpts(n);return i&&i.isVisible(r)},"isRenderable")},{key:"startBatch",value:o(function(){this.batchAtlases=[]},"startBatch")},{key:"getAtlasCount",value:o(function(){return this.batchAtlases.length},"getAtlasCount")},{key:"getAtlases",value:o(function(){return this.batchAtlases},"getAtlases")},{key:"getOrCreateAtlas",value:o(function(r,n,i){var a=this.renderTypes.get(i),s=a.getKey(r),l=r.id();return a.atlasCollection.draw(l,s,n,function(u){a.drawElement(u,r,n,!0,!0)})},"getOrCreateAtlas")},{key:"getAtlasIndexForBatch",value:o(function(r){var n=this.batchAtlases.indexOf(r);if(n<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)return;this.batchAtlases.push(r),n=this.batchAtlases.length-1}return n},"getAtlasIndexForBatch")},{key:"getIndexArray",value:o(function(){return Array.from({length:this.maxAtlases},function(r,n){return n})},"getIndexArray")},{key:"getAtlasInfo",value:o(function(r,n){var i=this.renderTypes.get(n),a=i.getBoundingBox(r),s=this.getOrCreateAtlas(r,a,n),l=this.getAtlasIndexForBatch(s);if(l!==void 0){var u=i.getKey(r),h=s.getOffsets(u),f=_i(h,2),d=f[0],p=f[1];return{atlasID:l,tex:d,tex1:d,tex2:p,bb:a,type:n,styleKey:u}}},"getAtlasInfo")},{key:"canAddToCurrentBatch",value:o(function(r,n){if(this.batchAtlases.length===this.maxAtlasesPerBatch){var i=this.renderTypes.get(n),a=i.getKey(r),s=i.atlasCollection.getAtlas(a);return s&&this.batchAtlases.includes(s)}return!0},"canAddToCurrentBatch")},{key:"setTransformMatrix",value:o(function(r,n,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,s=n.bb,l=n.type,u=n.tex1,h=n.tex2,f=this.getRenderTypeOpts(l),d=f.getPadding?f.getPadding(i):0,p=u.w/(u.w+h.w);a||(p=1-p);var m=this.getAdjustedBB(s,d,a,p),g,y;Age(r);var v=f.getRotation?f.getRotation(i):0;if(v!==0){var x=f.getRotationPoint(i),b=x.x,w=x.y;DS(r,r,[b,w]),_ge(r,r,v);var C=f.getRotationOffset(i);g=C.x+m.xOffset,y=C.y}else g=m.x1,y=m.y1;DS(r,r,[g,y]),TB(r,r,[m.w,m.h])},"setTransformMatrix")},{key:"getTransformMatrix",value:o(function(r,n){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Gb();return this.setTransformMatrix(a,r,n,i),a},"getTransformMatrix")},{key:"getAdjustedBB",value:o(function(r,n,i,a){var s=r.x1,l=r.y1,u=r.w,h=r.h;n&&(s-=n,l-=n,u+=2*n,h+=2*n);var f=0,d=u*a;return i&&a<1?u=d:!i&&a<1&&(f=u-d,s+=f,u=d),{x1:s,y1:l,w:u,h,xOffset:f}},"getAdjustedBB")},{key:"getDebugInfo",value:o(function(){var r=[],n=mo(this.renderTypes),i;try{for(n.s();!(i=n.n()).done;){var a=_i(i.value,2),s=a[0],l=a[1],u=l.atlasCollection.getCounts(),h=u.keyCount,f=u.atlasCount;r.push({type:s,keyCount:h,atlasCount:f})}}catch(d){n.e(d)}finally{n.f()}return r},"getDebugInfo")}]),t}(),MP=0,V0e=1,U0e=2,IP=3,AZe=function(){function t(e,r,n){Mf(this,t),this.r=e,this.gl=r,this.maxInstances=n.webglBatchSize,this.maxAtlases=n.webglTexPerBatch,this.atlasSize=n.webglTexSize,this.bgColor=n.bgColor,n.enableWrapping=!0,n.createTextureCanvas=mZe,this.atlasManager=new CZe(e,n),this.program=this.createShaderProgram(Vb.SCREEN),this.pickingProgram=this.createShaderProgram(Vb.PICKING),this.vao=this.createVAO(),this.debugInfo=[]}return o(t,"ElementDrawingWebGL"),If(t,[{key:"addTextureRenderType",value:o(function(r,n){this.atlasManager.addRenderType(r,n)},"addTextureRenderType")},{key:"invalidate",value:o(function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.type,a=this.atlasManager;return i?a.invalidate(r,{filterType:o(function(l){return l===i},"filterType"),forceRedraw:!0}):a.invalidate(r)},"invalidate")},{key:"gc",value:o(function(){this.atlasManager.gc()},"gc")},{key:"createShaderProgram",value:o(function(r){var n=this.gl,i=`#version 300 es | |
| 1955 | + precision highp float; | |
| 1956 | + | |
| 1957 | + uniform mat3 uPanZoomMatrix; | |
| 1958 | + uniform int uAtlasSize; | |
| 1959 | + | |
| 1960 | + // instanced | |
| 1961 | + in vec2 aPosition; | |
| 1962 | + | |
| 1963 | + // what are we rendering? | |
| 1964 | + in int aVertType; | |
| 1965 | + | |
| 1966 | + // for picking | |
| 1967 | + in vec4 aIndex; | |
| 1968 | + | |
| 1969 | + // For textures | |
| 1970 | + in int aAtlasId; // which shader unit/atlas to use | |
| 1971 | + in vec4 aTex1; // x/y/w/h of texture in atlas | |
| 1972 | + in vec4 aTex2; | |
| 1973 | + | |
| 1974 | + // for any transforms that are needed | |
| 1975 | + in vec4 aScaleRotate1; // vectors use fewer attributes than matrices | |
| 1976 | + in vec2 aTranslate1; | |
| 1977 | + in vec4 aScaleRotate2; | |
| 1978 | + in vec2 aTranslate2; | |
| 1979 | + | |
| 1980 | + // for edges | |
| 1981 | + in vec4 aPointAPointB; | |
| 1982 | + in vec4 aPointCPointD; | |
| 1983 | + in float aLineWidth; | |
| 1984 | + in vec4 aEdgeColor; | |
| 1985 | + | |
| 1986 | + out vec2 vTexCoord; | |
| 1987 | + out vec4 vEdgeColor; | |
| 1988 | + flat out int vAtlasId; | |
| 1989 | + flat out vec4 vIndex; | |
| 1990 | + flat out int vVertType; | |
| 1991 | + | |
| 1992 | + void main(void) { | |
| 1993 | + int vid = gl_VertexID; | |
| 1994 | + vec2 position = aPosition; | |
| 1995 | + | |
| 1996 | + if(aVertType == `.concat(MP,`) { | |
| 1997 | + float texX; | |
| 1998 | + float texY; | |
| 1999 | + float texW; | |
| 2000 | + float texH; | |
| 2001 | + mat3 texMatrix; | |
| 2002 | + | |
| 2003 | + int vid = gl_VertexID; | |
| 2004 | + if(vid <= 5) { | |
| 2005 | + texX = aTex1.x; | |
| 2006 | + texY = aTex1.y; | |
| 2007 | + texW = aTex1.z; | |
| 2008 | + texH = aTex1.w; | |
| 2009 | + texMatrix = mat3( | |
| 2010 | + vec3(aScaleRotate1.xy, 0.0), | |
| 2011 | + vec3(aScaleRotate2.zw, 0.0), | |
| 2012 | + vec3(aTranslate1, 1.0) | |
| 2013 | + ); | |
| 2014 | + } else { | |
| 2015 | + texX = aTex2.x; | |
| 2016 | + texY = aTex2.y; | |
| 2017 | + texW = aTex2.z; | |
| 2018 | + texH = aTex2.w; | |
| 2019 | + texMatrix = mat3( | |
| 2020 | + vec3(aScaleRotate2.xy, 0.0), | |
| 2021 | + vec3(aScaleRotate2.zw, 0.0), | |
| 2022 | + vec3(aTranslate2, 1.0) | |
| 2023 | + ); | |
| 2024 | + } | |
| 2025 | + | |
| 2026 | + if(vid == 1 || vid == 2 || vid == 4 || vid == 7 || vid == 8 || vid == 10) { | |
| 2027 | + texX += texW; | |
| 2028 | + } | |
| 2029 | + if(vid == 2 || vid == 4 || vid == 5 || vid == 8 || vid == 10 || vid == 11) { | |
| 2030 | + texY += texH; | |
| 2031 | + } | |
| 2032 | + | |
| 2033 | + float d = float(uAtlasSize); | |
| 2034 | + vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1 | |
| 2035 | + | |
| 2036 | + gl_Position = vec4(uPanZoomMatrix * texMatrix * vec3(position, 1.0), 1.0); | |
| 2037 | + } | |
| 2038 | + else if(aVertType == `).concat(V0e,` && vid < 6) { | |
| 2039 | + vec2 source = aPointAPointB.xy; | |
| 2040 | + vec2 target = aPointAPointB.zw; | |
| 2041 | + | |
| 2042 | + // adjust the geometry so that the line is centered on the edge | |
| 2043 | + position.y = position.y - 0.5; | |
| 2044 | + | |
| 2045 | + vec2 xBasis = target - source; | |
| 2046 | + vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x)); | |
| 2047 | + vec2 point = source + xBasis * position.x + yBasis * aLineWidth * position.y; | |
| 2048 | + | |
| 2049 | + gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0); | |
| 2050 | + vEdgeColor = aEdgeColor; | |
| 2051 | + } | |
| 2052 | + else if(aVertType == `).concat(U0e,` && vid < 6) { | |
| 2053 | + vec2 pointA = aPointAPointB.xy; | |
| 2054 | + vec2 pointB = aPointAPointB.zw; | |
| 2055 | + vec2 pointC = aPointCPointD.xy; | |
| 2056 | + vec2 pointD = aPointCPointD.zw; | |
| 2057 | + | |
| 2058 | + // adjust the geometry so that the line is centered on the edge | |
| 2059 | + position.y = position.y - 0.5; | |
| 2060 | + | |
| 2061 | + vec2 p0 = pointA; | |
| 2062 | + vec2 p1 = pointB; | |
| 2063 | + vec2 p2 = pointC; | |
| 2064 | + vec2 pos = position; | |
| 2065 | + if(position.x == 1.0) { | |
| 2066 | + p0 = pointD; | |
| 2067 | + p1 = pointC; | |
| 2068 | + p2 = pointB; | |
| 2069 | + pos = vec2(0.0, -position.y); | |
| 2070 | + } | |
| 2071 | + | |
| 2072 | + vec2 p01 = p1 - p0; | |
| 2073 | + vec2 p12 = p2 - p1; | |
| 2074 | + vec2 p21 = p1 - p2; | |
| 2075 | + | |
| 2076 | + // Find the normal vector. | |
| 2077 | + vec2 tangent = normalize(normalize(p12) + normalize(p01)); | |
| 2078 | + vec2 normal = vec2(-tangent.y, tangent.x); | |
| 2079 | + | |
| 2080 | + // Find the vector perpendicular to p0 -> p1. | |
| 2081 | + vec2 p01Norm = normalize(vec2(-p01.y, p01.x)); | |
| 2082 | + | |
| 2083 | + // Determine the bend direction. | |
| 2084 | + float sigma = sign(dot(p01 + p21, normal)); | |
| 2085 | + float width = aLineWidth; | |
| 2086 | + | |
| 2087 | + if(sign(pos.y) == -sigma) { | |
| 2088 | + // This is an intersecting vertex. Adjust the position so that there's no overlap. | |
| 2089 | + vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm); | |
| 2090 | + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0); | |
| 2091 | + } else { | |
| 2092 | + // This is a non-intersecting vertex. Treat it like a mitre join. | |
| 2093 | + vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm); | |
| 2094 | + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0); | |
| 2095 | + } | |
| 2096 | + | |
| 2097 | + vEdgeColor = aEdgeColor; | |
| 2098 | + } | |
| 2099 | + else if(aVertType == `).concat(IP,` && vid < 3) { | |
| 2100 | + // massage the first triangle into an edge arrow | |
| 2101 | + if(vid == 0) | |
| 2102 | + position = vec2(-0.15, -0.3); | |
| 2103 | + if(vid == 1) | |
| 2104 | + position = vec2( 0.0, 0.0); | |
| 2105 | + if(vid == 2) | |
| 2106 | + position = vec2( 0.15, -0.3); | |
| 2107 | + | |
| 2108 | + mat3 transform = mat3( | |
| 2109 | + vec3(aScaleRotate1.xy, 0.0), | |
| 2110 | + vec3(aScaleRotate1.zw, 0.0), | |
| 2111 | + vec3(aTranslate1, 1.0) | |
| 2112 | + ); | |
| 2113 | + gl_Position = vec4(uPanZoomMatrix * transform * vec3(position, 1.0), 1.0); | |
| 2114 | + vEdgeColor = aEdgeColor; | |
| 2115 | + } else { | |
| 2116 | + gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space | |
| 2117 | + } | |
| 2118 | + | |
| 2119 | + vAtlasId = aAtlasId; | |
| 2120 | + vIndex = aIndex; | |
| 2121 | + vVertType = aVertType; | |
| 2122 | + } | |
| 2123 | + `),a=this.atlasManager.getIndexArray(),s=`#version 300 es | |
| 2124 | + precision highp float; | |
| 2125 | + | |
| 2126 | + // define texture unit for each node in the batch | |
| 2127 | + `.concat(a.map(function(h){return"uniform sampler2D uTexture".concat(h,";")}).join(` | |
| 2128 | + `),` | |
| 2129 | + | |
| 2130 | + uniform vec4 uBGColor; | |
| 2131 | + | |
| 2132 | + in vec2 vTexCoord; | |
| 2133 | + in vec4 vEdgeColor; | |
| 2134 | + flat in int vAtlasId; | |
| 2135 | + flat in vec4 vIndex; | |
| 2136 | + flat in int vVertType; | |
| 2137 | + | |
| 2138 | + out vec4 outColor; | |
| 2139 | + | |
| 2140 | + void main(void) { | |
| 2141 | + if(vVertType == `).concat(MP,`) { | |
| 2142 | + `).concat(a.map(function(h){return"if(vAtlasId == ".concat(h,") outColor = texture(uTexture").concat(h,", vTexCoord);")}).join(` | |
| 2143 | + else `),` | |
| 2144 | + } else if(vVertType == `).concat(IP,`) { | |
| 2145 | + // blend arrow color with background (using premultiplied alpha) | |
| 2146 | + outColor.rgb = vEdgeColor.rgb + (uBGColor.rgb * (1.0 - vEdgeColor.a)); | |
| 2147 | + outColor.a = 1.0; // make opaque, masks out line under arrow | |
| 2148 | + } else { | |
| 2149 | + outColor = vEdgeColor; | |
| 2150 | + } | |
| 2151 | + | |
| 2152 | + `).concat(r.picking?`if(outColor.a == 0.0) discard; | |
| 2153 | + else outColor = vIndex;`:"",` | |
| 2154 | + } | |
| 2155 | + `),l=pZe(n,i,s);l.aPosition=n.getAttribLocation(l,"aPosition"),l.aIndex=n.getAttribLocation(l,"aIndex"),l.aVertType=n.getAttribLocation(l,"aVertType"),l.aAtlasId=n.getAttribLocation(l,"aAtlasId"),l.aTex1=n.getAttribLocation(l,"aTex1"),l.aTex2=n.getAttribLocation(l,"aTex2"),l.aScaleRotate1=n.getAttribLocation(l,"aScaleRotate1"),l.aTranslate1=n.getAttribLocation(l,"aTranslate1"),l.aScaleRotate2=n.getAttribLocation(l,"aScaleRotate2"),l.aTranslate2=n.getAttribLocation(l,"aTranslate2"),l.aPointAPointB=n.getAttribLocation(l,"aPointAPointB"),l.aPointCPointD=n.getAttribLocation(l,"aPointCPointD"),l.aLineWidth=n.getAttribLocation(l,"aLineWidth"),l.aEdgeColor=n.getAttribLocation(l,"aEdgeColor"),l.uPanZoomMatrix=n.getUniformLocation(l,"uPanZoomMatrix"),l.uAtlasSize=n.getUniformLocation(l,"uAtlasSize"),l.uBGColor=n.getUniformLocation(l,"uBGColor"),l.uTextures=[];for(var u=0;u<this.atlasManager.maxAtlases;u++)l.uTextures.push(n.getUniformLocation(l,"uTexture".concat(u)));return l},"createShaderProgram")},{key:"createVAO",value:o(function(){var r=[0,0,1,0,1,1,0,0,1,1,0,1],n=[].concat(r,r);this.vertexCount=n.length/2;var i=this.maxInstances,a=this.gl,s=this.program,l=a.createVertexArray();return a.bindVertexArray(l),xZe(a,"vec2",s.aPosition,n),this.indexBuffer=po(a,i,"vec4",s.aIndex),this.vertTypeBuffer=po(a,i,"int",s.aVertType),this.atlasIdBuffer=po(a,i,"int",s.aAtlasId),this.tex1Buffer=po(a,i,"vec4",s.aTex1),this.tex2Buffer=po(a,i,"vec4",s.aTex2),this.scaleRotate1Buffer=po(a,i,"vec4",s.aScaleRotate1),this.translate1Buffer=po(a,i,"vec2",s.aTranslate1),this.scaleRotate2Buffer=po(a,i,"vec4",s.aScaleRotate2),this.translate2Buffer=po(a,i,"vec2",s.aTranslate2),this.pointAPointBBuffer=po(a,i,"vec4",s.aPointAPointB),this.pointCPointDBuffer=po(a,i,"vec4",s.aPointCPointD),this.lineWidthBuffer=po(a,i,"float",s.aLineWidth),this.edgeColorBuffer=po(a,i,"vec4",s.aEdgeColor),a.bindVertexArray(null),l},"createVAO")},{key:"buffers",get:o(function(){var r=this;return this._buffers||(this._buffers=Object.keys(this).filter(function(n){return n.endsWith("Buffer")}).map(function(n){return r[n]})),this._buffers},"get")},{key:"startFrame",value:o(function(r,n){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Vb.SCREEN;this.panZoomMatrix=r,this.debugInfo=n,this.renderTarget=i,this.startBatch()},"startFrame")},{key:"startBatch",value:o(function(){this.instanceCount=0,this.atlasManager.startBatch()},"startBatch")},{key:"endFrame",value:o(function(){this.endBatch()},"endFrame")},{key:"getTempMatrix",value:o(function(){return this.tempMatrix=this.tempMatrix||Gb()},"getTempMatrix")},{key:"drawTexture",value:o(function(r,n,i){var a=this.atlasManager;if(a.isRenderable(r,i)){a.canAddToCurrentBatch(r,i)||this.endBatch();var s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=MP;var l=this.indexBuffer.getView(s);lS(n,l);var u=a.getAtlasInfo(r,i,u),h=u.atlasID,f=u.tex1,d=u.tex2,p=this.atlasIdBuffer.getView(s);p[0]=h;var m=this.tex1Buffer.getView(s);m[0]=f.x,m[1]=f.y,m[2]=f.w,m[3]=f.h;var g=this.tex2Buffer.getView(s);g[0]=d.x,g[1]=d.y,g[2]=d.w,g[3]=d.h;for(var y=this.getTempMatrix(),v=0,x=[1,2];v<x.length;v++){var b=x[v];a.setTransformMatrix(y,u,r,b===1);var w=this["scaleRotate".concat(b,"Buffer")].getView(s);w[0]=y[0],w[1]=y[1],w[2]=y[3],w[3]=y[4];var C=this["translate".concat(b,"Buffer")].getView(s);C[0]=y[6],C[1]=y[7]}this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawTexture")},{key:"drawEdgeArrow",value:o(function(r,n,i){var a=r._private.rscratch,s,l,u;if(i==="source"?(s=a.arrowStartX,l=a.arrowStartY,u=a.srcArrowAngle):(s=a.arrowEndX,l=a.arrowEndY,u=a.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(l)||l==null||isNaN(u)||u==null)){var h=r.pstyle(i+"-arrow-shape").value;if(h!=="none"){var f=r.pstyle(i+"-arrow-color").value,d=r.pstyle("opacity").value,p=r.pstyle("line-opacity").value,m=d*p,g=r.pstyle("width").pfValue,y=r.pstyle("arrow-scale").value,v=this.r.getArrowWidth(g,y),x=this.getTempMatrix();Age(x),DS(x,x,[s,l]),TB(x,x,[v,v]),_ge(x,x,u);var b=this.instanceCount;this.vertTypeBuffer.getView(b)[0]=IP;var w=this.indexBuffer.getView(b);lS(n,w);var C=this.edgeColorBuffer.getView(b);oS(f,m,C);var T=this.scaleRotate1Buffer.getView(b);T[0]=x[0],T[1]=x[1],T[2]=x[3],T[3]=x[4];var E=this.translate1Buffer.getView(b);E[0]=x[6],E[1]=x[7],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}},"drawEdgeArrow")},{key:"drawEdgeLine",value:o(function(r,n){var i=r.pstyle("opacity").value,a=r.pstyle("line-opacity").value,s=r.pstyle("width").pfValue,l=r.pstyle("line-color").value,u=i*a,h=this.getEdgePoints(r);if(h.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),h.length==4){var f=this.instanceCount;this.vertTypeBuffer.getView(f)[0]=V0e;var d=this.indexBuffer.getView(f);lS(n,d);var p=this.edgeColorBuffer.getView(f);oS(l,u,p);var m=this.lineWidthBuffer.getView(f);m[0]=s;var g=this.pointAPointBBuffer.getView(f);g[0]=h[0],g[1]=h[1],g[2]=h[2],g[3]=h[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y<h.length-2;y+=2){var v=this.instanceCount;this.vertTypeBuffer.getView(v)[0]=U0e;var x=this.indexBuffer.getView(v);lS(n,x);var b=this.edgeColorBuffer.getView(v);oS(l,u,b);var w=this.lineWidthBuffer.getView(v);w[0]=s;var C=h[y-2],T=h[y-1],E=h[y],A=h[y+1],S=h[y+2],_=h[y+3],I=h[y+4],D=h[y+5];y==0&&(C=2*E-S+.001,T=2*A-_+.001),y==h.length-4&&(I=2*S-E+.001,D=2*_-A+.001);var k=this.pointAPointBBuffer.getView(v);k[0]=C,k[1]=T,k[2]=E,k[3]=A;var L=this.pointCPointDBuffer.getView(v);L[0]=S,L[1]=_,L[2]=I,L[3]=D,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawEdgeLine")},{key:"getEdgePoints",value:o(function(r){var n=r._private.rscratch,i=n.allpts;if(i.length==4)return i;var a=this.getNumSegments(r);return this.getCurveSegmentPoints(i,a)},"getEdgePoints")},{key:"getNumSegments",value:o(function(r){var n=15;return Math.min(Math.max(n,5),this.maxInstances)},"getNumSegments")},{key:"getCurveSegmentPoints",value:o(function(r,n){if(r.length==4)return r;for(var i=Array((n+1)*2),a=0;a<=n;a++)if(a==0)i[0]=r[0],i[1]=r[1];else if(a==n)i[a*2]=r[r.length-2],i[a*2+1]=r[r.length-1];else{var s=a/n;this.setCurvePoint(r,s,i,a*2)}return i},"getCurveSegmentPoints")},{key:"setCurvePoint",value:o(function(r,n,i,a){if(r.length<=2)i[a]=r[0],i[a+1]=r[1];else{for(var s=Array(r.length-2),l=0;l<s.length;l+=2){var u=(1-n)*r[l]+n*r[l+2],h=(1-n)*r[l+1]+n*r[l+3];s[l]=u,s[l+1]=h}return this.setCurvePoint(s,n,i,a)}},"setCurvePoint")},{key:"endBatch",value:o(function(){var r=this.gl,n=this.vao,i=this.vertexCount,a=this.instanceCount;if(a!==0){var s=this.renderTarget.picking?this.pickingProgram:this.program;r.useProgram(s),r.bindVertexArray(n);var l=mo(this.buffers),u;try{for(l.s();!(u=l.n()).done;){var h=u.value;h.bufferSubData(a)}}catch(g){l.e(g)}finally{l.f()}for(var f=this.atlasManager.getAtlases(),d=0;d<f.length;d++)f[d].bufferIfNeeded(r);for(var p=0;p<f.length;p++)r.activeTexture(r.TEXTURE0+p),r.bindTexture(r.TEXTURE_2D,f[p].texture),r.uniform1i(s.uTextures[p],p);r.uniformMatrix3fv(s.uPanZoomMatrix,!1,this.panZoomMatrix),r.uniform1i(s.uAtlasSize,this.atlasManager.atlasSize);var m=oS(this.bgColor,1);r.uniform4fv(s.uBGColor,m),r.drawArraysInstanced(r.TRIANGLES,0,i,a),r.bindVertexArray(null),r.bindTexture(r.TEXTURE_2D,null),this.debugInfo&&this.debugInfo.push({count:a,atlasCount:f.length}),this.startBatch()}},"endBatch")},{key:"getDebugInfo",value:o(function(){return this.debugInfo},"getDebugInfo")},{key:"getAtlasDebugInfo",value:o(function(){return this.atlasManager.getDebugInfo()},"getAtlasDebugInfo")}]),t}();o(H0e,"fillStyle");_Ze=function(){function t(e){Mf(this,t),this.r=e}return o(t,"OverlayUnderlayRenderer"),If(t,[{key:"getStyleKey",value:o(function(r,n){var i=this.getStyle(r,n),a=i.shape,s=i.opacity,l=i.color;if(!a)return null;var u=n.width(),h=n.height(),f=H0e(l,s);return _f("".concat(a,"-").concat(u,"-").concat(h,"-").concat(f))},"getStyleKey")},{key:"isVisible",value:o(function(r,n){var i=n.pstyle("".concat(r,"-opacity")).value;return i>0},"isVisible")},{key:"getStyle",value:o(function(r,n){var i=n.pstyle("".concat(r,"-opacity")).value,a=n.pstyle("".concat(r,"-color")).value,s=n.pstyle("".concat(r,"-shape")).value;return{opacity:i,color:a,shape:s}},"getStyle")},{key:"getPadding",value:o(function(r,n){return n.pstyle("".concat(r,"-padding")).pfValue},"getPadding")},{key:"draw",value:o(function(r,n,i,a){if(this.isVisible(r,i)){var s=this.r,l=a.w,u=a.h,h=l/2,f=u/2,d=this.getStyle(r,i),p=d.shape,m=d.color,g=d.opacity;n.save(),n.fillStyle=H0e(m,g),p==="round-rectangle"||p==="roundrectangle"?s.drawRoundRectanglePath(n,h,f,l,u,"auto"):p==="ellipse"&&s.drawEllipsePath(n,h,f,l,u),n.fill(),n.restore()}},"draw")}]),t}();o(DZe,"getBGColor");Dge={};Dge.initWebgl=function(t,e){var r=this,n=r.data.contexts[r.WEBGL],i=t.cy.container();t.bgColor=DZe(i),t.webglTexSize=Math.min(t.webglTexSize,n.getParameter(n.MAX_TEXTURE_SIZE)),t.webglTexRows=Math.min(t.webglTexRows,54),t.webglBatchSize=Math.min(t.webglBatchSize,16384),t.webglTexPerBatch=Math.min(t.webglTexPerBatch,n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),r.webglDebug=t.webglDebug,r.webglDebugShowAtlases=t.webglDebugShowAtlases,console.log("max texture units",n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),console.log("max texture size",n.getParameter(n.MAX_TEXTURE_SIZE)),console.log("webgl options",t),r.pickingFrameBuffer=bZe(n),r.pickingFrameBuffer.needsDraw=!0;var a=o(function(f){return r.getTextAngle(f,null)},"getLabelRotation"),s=o(function(f){var d=f.pstyle("label");return d&&d.value},"isLabelVisible");r.eleDrawing=new AZe(r,n,t);var l=new _Ze(r);r.eleDrawing.addTextureRenderType("node-body",Mb({getKey:e.getStyleKey,getBoundingBox:e.getElementBox,drawElement:e.drawElement,isVisible:o(function(f){return f.visible()},"isVisible")})),r.eleDrawing.addTextureRenderType("node-label",Mb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s})),r.eleDrawing.addTextureRenderType("node-overlay",Mb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("overlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("overlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("overlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("overlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("node-underlay",Mb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("underlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("underlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("underlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("underlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("edge-label",Mb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s}));var u=n4(function(){console.log("garbage collect flag set"),r.data.gc=!0},1e4);r.onUpdateEleCalcs(function(h,f){var d=!1;f&&f.length>0&&(d|=r.eleDrawing.invalidate(f)),d&&u()}),LZe(r)};o(LZe,"overrideCanvasRendererFunctions");o(RZe,"clearWebgl");o(NZe,"clearCanvas");o(MZe,"createPanZoomMatrix");o(Lge,"setContextTransform");o(IZe,"drawSelectionRectangle");o(OZe,"drawAxes");o(PZe,"drawAtlases");o(BZe,"getPickingIndexes");o(FZe,"findNearestElementsWebgl");o(Rge,"renderWebgl");Pf={};Pf.drawPolygonPath=function(t,e,r,n,i,a){var s=n/2,l=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u<a.length/2;u++)t.lineTo(e+s*a[u*2],r+l*a[u*2+1]);t.closePath()};Pf.drawRoundPolygonPath=function(t,e,r,n,i,a,s){s.forEach(function(l){return hge(t,l)}),t.closePath()};Pf.drawRoundRectanglePath=function(t,e,r,n,i,a){var s=n/2,l=i/2,u=a==="auto"?Vp(n,i):Math.min(a,l,s);t.beginPath&&t.beginPath(),t.moveTo(e,r-l),t.arcTo(e+s,r-l,e+s,r,u),t.arcTo(e+s,r+l,e,r+l,u),t.arcTo(e-s,r+l,e-s,r,u),t.arcTo(e-s,r-l,e,r-l,u),t.lineTo(e,r-l),t.closePath()};Pf.drawBottomRoundRectanglePath=function(t,e,r,n,i,a){var s=n/2,l=i/2,u=a==="auto"?Vp(n,i):a;t.beginPath&&t.beginPath(),t.moveTo(e,r-l),t.lineTo(e+s,r-l),t.lineTo(e+s,r),t.arcTo(e+s,r+l,e,r+l,u),t.arcTo(e-s,r+l,e-s,r,u),t.lineTo(e-s,r-l),t.lineTo(e,r-l),t.closePath()};Pf.drawCutRectanglePath=function(t,e,r,n,i,a,s){var l=n/2,u=i/2,h=s==="auto"?sB():s;t.beginPath&&t.beginPath(),t.moveTo(e-l+h,r-u),t.lineTo(e+l-h,r-u),t.lineTo(e+l,r-u+h),t.lineTo(e+l,r+u-h),t.lineTo(e+l-h,r+u),t.lineTo(e-l+h,r+u),t.lineTo(e-l,r+u-h),t.lineTo(e-l,r-u+h),t.closePath()};Pf.drawBarrelPath=function(t,e,r,n,i){var a=n/2,s=i/2,l=e-a,u=e+a,h=r-s,f=r+s,d=BP(n,i),p=d.widthOffset,m=d.heightOffset,g=d.ctrlPtOffsetPct*p;t.beginPath&&t.beginPath(),t.moveTo(l,h+m),t.lineTo(l,f-m),t.quadraticCurveTo(l+g,f,l+p,f),t.lineTo(u-p,f),t.quadraticCurveTo(u-g,f,u,f-m),t.lineTo(u,h+m),t.quadraticCurveTo(u-g,h,u-p,h),t.lineTo(l+p,h),t.quadraticCurveTo(l+g,h,l,h+m),t.closePath()};W0e=Math.sin(0),q0e=Math.cos(0),jP={},KP={},Nge=Math.PI/40;for(Ip=0*Math.PI;Ip<2*Math.PI;Ip+=Nge)jP[Ip]=Math.sin(Ip),KP[Ip]=Math.cos(Ip);Pf.drawEllipsePath=function(t,e,r,n,i){if(t.beginPath&&t.beginPath(),t.ellipse)t.ellipse(e,r,n/2,i/2,0,0,2*Math.PI);else for(var a,s,l=n/2,u=i/2,h=0*Math.PI;h<2*Math.PI;h+=Nge)a=e-l*jP[h]*W0e+l*KP[h]*q0e,s=r+u*KP[h]*W0e+u*jP[h]*q0e,h===0?t.moveTo(a,s):t.lineTo(a,s);t.closePath()};c4={};c4.createBuffer=function(t,e){var r=document.createElement("canvas");return r.width=t,r.height=e,[r,r.getContext("2d")]};c4.bufferCanvasImage=function(t){var e=this.cy,r=e.mutableElements(),n=r.boundingBox(),i=this.findContainerClientCoords(),a=t.full?Math.ceil(n.w):i[2],s=t.full?Math.ceil(n.h):i[3],l=Ct(t.maxWidth)||Ct(t.maxHeight),u=this.getPixelRatio(),h=1;if(t.scale!==void 0)a*=t.scale,s*=t.scale,h=t.scale;else if(l){var f=1/0,d=1/0;Ct(t.maxWidth)&&(f=h*t.maxWidth/a),Ct(t.maxHeight)&&(d=h*t.maxHeight/s),h=Math.min(f,d),a*=h,s*=h}l||(a*=u,s*=u,h*=u);var p=document.createElement("canvas");p.width=a,p.height=s,p.style.width=a+"px",p.style.height=s+"px";var m=p.getContext("2d");if(a>0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-n.x1*h,-n.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(n.x1*h,n.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o($Ze,"b64ToBlob");o(Y0e,"b64UriToB64");o(Mge,"output");c4.png=function(t){return Mge(t,this.bufferCanvasImage(t),"image/png")};c4.jpg=function(t){return Mge(t,this.bufferCanvasImage(t),"image/jpeg")};Ige={};Ige.nodeShapeImpl=function(t,e,r,n,i,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,n,i,a);case"polygon":return this.drawPolygonPath(e,r,n,i,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,n,i,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,n,i,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,n,i,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,n,i,a,l);case"barrel":return this.drawBarrelPath(e,r,n,i,a)}};zZe=Oge,Er=Oge.prototype;Er.CANVAS_LAYERS=3;Er.SELECT_BOX=0;Er.DRAG=1;Er.NODE=2;Er.WEBGL=3;Er.CANVAS_TYPES=["2d","2d","2d","webgl2"];Er.BUFFER_COUNT=3;Er.TEXTURE_BUFFER=0;Er.MOTIONBLUR_BUFFER_NODE=1;Er.MOTIONBLUR_BUFFER_DRAG=2;o(Oge,"CanvasRenderer");Er.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Er.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Er.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Er.SELECT_BOX]=e;break;case"gc":r.data.gc=!0;break}};GZe=typeof Path2D<"u";Er.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Er.usePaths=function(){return GZe&&this.pathsEnabled};Er.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Er.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Er.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":Wi(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var n=this.cy.window(),i=n.document;r=i.createElement("canvas"),r.width=t,r.height=e}return r};[Tge,Qc,th,bB,Yp,ly,ys,Dge,Pf,c4,Ige].forEach(function(t){rr(Er,t)});VZe=[{name:"null",impl:lge},{name:"base",impl:vge},{name:"canvas",impl:zZe}],UZe=[{type:"layout",extensions:SQe},{type:"renderer",extensions:VZe}],Pge={},Bge={};o(Fge,"setExtension");o($ge,"getExtension");o(HZe,"setModule");o(WZe,"getModule");QP=o(function(){if(arguments.length===2)return $ge.apply(null,arguments);if(arguments.length===3)return Fge.apply(null,arguments);if(arguments.length===4)return WZe.apply(null,arguments);if(arguments.length===5)return HZe.apply(null,arguments);ai("Invalid extension access syntax")},"extension");Jb.prototype.extension=QP;UZe.forEach(function(t){t.extensions.forEach(function(e){Fge(t.type,e.name,e.impl)})});zge=o(function t(){if(!(this instanceof t))return new t;this.length=0},"Stylesheet"),Wp=zge.prototype;Wp.instanceString=function(){return"stylesheet"};Wp.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};Wp.css=function(t,e){var r=this.length-1;if(Zt(t))this[r].properties.push({name:t,value:e});else if(Ur(t))for(var n=t,i=Object.keys(n),a=0;a<i.length;a++){var s=i[a],l=n[s];if(l!=null){var u=Fa.properties[s]||Fa.properties[LS(s)];if(u!=null){var h=u.name,f=l;this[r].properties.push({name:h,value:f})}}}return this};Wp.style=Wp.css;Wp.generateStyle=function(t){var e=new Fa(t);return this.appendToStyle(e)};Wp.appendToStyle=function(t){for(var e=0;e<this.length;e++){var r=this[e],n=r.selector,i=r.properties;t.selector(n);for(var a=0;a<i.length;a++){var s=i[a];t.css(s.name,s.value)}}return t};qZe="3.31.0",rl=o(function(e){if(e===void 0&&(e={}),Ur(e))return new Jb(e);if(Zt(e))return QP.apply(QP,arguments)},"cytoscape");rl.use=function(t){var e=Array.prototype.slice.call(arguments,1);return e.unshift(rl),t.apply(null,e),this};rl.warnings=function(t){return hme(t)};rl.version=qZe;rl.stylesheet=rl.Stylesheet=zge});var SB=Mi((u4,EB)=>{"use strict";o(function(e,r){typeof u4=="object"&&typeof EB=="object"?EB.exports=r():typeof define=="function"&&define.amd?define([],r):typeof u4=="object"?u4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(u4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=26)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;y<g.length;y++)p=g[y],m=p.withChildren(),m.forEach(function(v){d.add(v)});return d},h.prototype.getNoOfChildren=function(){var d=0,p;if(this.child==null)d=1;else for(var m=this.child.getNodes(),g=0;g<m.length;g++)p=m[g],d+=p.getNoOfChildren();return d==0&&(d=1),d},h.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},h.prototype.calcEstimatedSize=function(){return this.child==null?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},h.prototype.scatter=function(){var d,p,m=-s.INITIAL_WORLD_BOUNDARY,g=s.INITIAL_WORLD_BOUNDARY;d=s.WORLD_CENTER_X+l.nextDouble()*(g-m)+m;var y=-s.INITIAL_WORLD_BOUNDARY,v=s.INITIAL_WORLD_BOUNDARY;p=s.WORLD_CENTER_Y+l.nextDouble()*(v-y)+y,this.rect.x=d,this.rect.y=p},h.prototype.updateBounds=function(){if(this.getChild()==null)throw"assert failed";if(this.getChild().getNodes().length!=0){var d=this.getChild();if(d.updateBounds(!0),this.rect.x=d.getLeft(),this.rect.y=d.getTop(),this.setWidth(d.getRight()-d.getLeft()),this.setHeight(d.getBottom()-d.getTop()),s.NODE_DIMENSIONS_INCLUDE_LABELS){var p=d.getRight()-d.getLeft(),m=d.getBottom()-d.getTop();this.labelWidth>p&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w<b;w++)x=v[w],x.isInterGraph?this.graphManager.remove(x):x.source.owner.remove(x);var C=this.nodes.indexOf(y);if(C==-1)throw"Node not in owner node list!";this.nodes.splice(C,1)}else if(g instanceof u){var x=g;if(x==null)throw"Edge is null!";if(!(x.source!=null&&x.target!=null))throw"Source and/or target is null!";if(!(x.source.owner!=null&&x.target.owner!=null&&x.source.owner==this&&x.target.owner==this))throw"Source and/or target owner is invalid!";var T=x.source.edges.indexOf(x),E=x.target.edges.indexOf(x);if(!(T>-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var C=x.source.owner.getEdges().indexOf(x);if(C==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(C,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),C=w.length,T=0;T<C;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A,S=this.nodes,_=S.length,I=0;I<_;I++){var D=S[I];g&&D.child!=null&&D.updateBounds(),w=D.getLeft(),C=D.getRight(),T=D.getTop(),E=D.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var k=new h(y,x,v-y,b-x);y==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),S[0].getParent().paddingLeft!=null?A=S[0].getParent().paddingLeft:A=this.margin,this.left=k.x-A,this.right=k.x+k.width+A,this.top=k.y-A,this.bottom=k.y+k.height+A},p.calculateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A=g.length,S=0;S<A;S++){var _=g[S];w=_.getLeft(),C=_.getRight(),T=_.getTop(),E=_.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var I=new h(y,x,v-y,b-x);return I},p.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},p.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},p.prototype.calcEstimatedSize=function(){for(var g=0,y=this.nodes,v=y.length,x=0;x<v;x++){var b=y[x];g+=b.calcEstimatedSize()}return g==0?this.estimatedSize=a.EMPTY_COMPOUND_NODE_SIZE:this.estimatedSize=g/Math.sqrt(this.nodes.length),this.estimatedSize},p.prototype.updateConnected=function(){var g=this;if(this.nodes.length==0){this.isConnected=!0;return}var y=new d,v=new Set,x=this.nodes[0],b,w,C=x.withChildren();for(C.forEach(function(I){y.push(I),v.add(I)});y.length!==0;){x=y.shift(),b=x.getEdges();for(var T=b.length,E=0;E<T;E++){var A=b[E];if(w=A.getOtherEndInGraph(x,this),w!=null&&!v.has(w)){var S=w.withChildren();S.forEach(function(I){y.push(I),v.add(I)})}}}if(this.isConnected=!1,v.size>=this.nodes.length){var _=0;v.forEach(function(I){I.owner==g&&_++}),_==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d<f;d++)h=u[d],l.remove(h);var p=[];p=p.concat(l.getNodes());var m;f=p.length;for(var d=0;d<f;d++)m=p[d],l.remove(m);l==this.rootGraph&&this.setRootGraph(null);var g=this.graphs.indexOf(l);this.graphs.splice(g,1),l.parent=null}else if(s instanceof i){if(h=s,h==null)throw"Edge is null!";if(!h.isInterGraph)throw"Not an inter-graph edge!";if(!(h.source!=null&&h.target!=null))throw"Source and/or target is null!";if(!(h.source.edges.indexOf(h)!=-1&&h.target.edges.indexOf(h)!=-1))throw"Source and/or target doesn't know this edge!";var g=h.source.edges.indexOf(h);if(h.source.edges.splice(g,1),g=h.target.edges.indexOf(h),h.target.edges.splice(g,1),!(h.source.owner!=null&&h.source.owner.getGraphManager()!=null))throw"Edge owner graph or owner graph manager is null!";if(h.source.owner.getGraphManager().edges.indexOf(h)==-1)throw"Not in owner graph manager's edge list!";var g=h.source.owner.getGraphManager().edges.indexOf(h);h.source.owner.getGraphManager().edges.splice(g,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(this.allNodes==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<u;h++)s=s.concat(l[h].getNodes());this.allNodes=s}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(this.allEdges==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<l.length;h++)s=s.concat(l[h].getEdges());s=s.concat(this.edges),this.allEdges=s}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(s){if(this.allNodesToApplyGravitation!=null)throw"assert failed";this.allNodesToApplyGravitation=s},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(s){if(s.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=s,s.parent==null&&(s.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(s,l){if(!(s!=null&&l!=null))throw"assert failed";if(s==l)return!0;var u=s.getOwner(),h;do{if(h=u.getParent(),h==null)break;if(h==l)return!0;if(u=h.getOwner(),u==null)break}while(!0);u=l.getOwner();do{if(h=u.getParent(),h==null)break;if(h==s)return!0;if(u=h.getOwner(),u==null)break}while(!0);return!1},a.prototype.calcLowestCommonAncestors=function(){for(var s,l,u,h,f,d=this.getAllEdges(),p=d.length,m=0;m<p;m++){if(s=d[m],l=s.source,u=s.target,s.lca=null,s.sourceInLca=l,s.targetInLca=u,l==u){s.lca=l.getOwner();continue}for(h=l.getOwner();s.lca==null;){for(s.targetInLca=u,f=u.getOwner();s.lca==null;){if(f==h){s.lca=f;break}if(f==this.rootGraph)break;if(s.lca!=null)throw"assert failed";s.targetInLca=f.getParent(),f=s.targetInLca.getOwner()}if(h==this.rootGraph)break;s.lca==null&&(s.sourceInLca=h.getParent(),h=s.sourceInLca.getOwner())}if(s.lca==null)throw"assert failed"}},a.prototype.calcLowestCommonAncestor=function(s,l){if(s==l)return s.getOwner();var u=s.getOwner();do{if(u==null)break;var h=l.getOwner();do{if(h==null)break;if(h==u)return h;h=h.getParent().getOwner()}while(!0);u=u.getParent().getOwner()}while(!0);return u},a.prototype.calcInclusionTreeDepths=function(s,l){s==null&&l==null&&(s=this.rootGraph,l=1);for(var u,h=s.getNodes(),f=h.length,d=0;d<f;d++)u=h[d],u.inclusionTreeDepth=l,u.child!=null&&this.calcInclusionTreeDepths(u.child,l+1)},a.prototype.includesInvalidEdge=function(){for(var s,l=this.edges.length,u=0;u<l;u++)if(s=this.edges[u],this.isOneAncestorOfOther(s.source,s.target))return!0;return!1},t.exports=a},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";var n=r(12);function i(){}o(i,"IGeometry"),i.calcSeparationAmount=function(a,s,l,u){if(!a.intersects(s))throw"assert failed";var h=new Array(2);this.decideDirectionsForOverlappingNodes(a,s,h),l[0]=Math.min(a.getRight(),s.getRight())-Math.max(a.x,s.x),l[1]=Math.min(a.getBottom(),s.getBottom())-Math.max(a.y,s.y),a.getX()<=s.getX()&&a.getRight()>=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]<p?p=l[0]:d=l[1],l[0]=-1*h[0]*(p/2+u),l[1]=-1*h[1]*(d/2+u)},i.decideDirectionsForOverlappingNodes=function(a,s,l){a.getCenterX()<s.getCenterX()?l[0]=-1:l[0]=1,a.getCenterY()<s.getCenterY()?l[1]=-1:l[1]=1},i.getIntersection2=function(a,s,l){var u=a.getCenterX(),h=a.getCenterY(),f=s.getCenterX(),d=s.getCenterY();if(a.intersects(s))return l[0]=u,l[1]=h,l[2]=f,l[3]=d,!0;var p=a.getX(),m=a.getY(),g=a.getRight(),y=a.getX(),v=a.getBottom(),x=a.getRight(),b=a.getWidthHalf(),w=a.getHeightHalf(),C=s.getX(),T=s.getY(),E=s.getRight(),A=s.getX(),S=s.getBottom(),_=s.getRight(),I=s.getWidthHalf(),D=s.getHeightHalf(),k=!1,L=!1;if(u===f){if(h>d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(h<d)return l[0]=u,l[1]=v,l[2]=f,l[3]=T,!1}else if(h===d){if(u>f)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(u<f)return l[0]=g,l[1]=h,l[2]=C,l[3]=d,!1}else{var R=a.height/a.width,O=s.height/s.width,M=(d-h)/(f-u),B=void 0,F=void 0,P=void 0,z=void 0,$=void 0,H=void 0;if(-R===M?u>f?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):R===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===M?f>u?(l[2]=A,l[3]=S,L=!0):(l[2]=E,l[3]=T,L=!0):O===M&&(f>u?(l[2]=C,l[3]=T,L=!0):(l[2]=_,l[3]=S,L=!0)),k&&L)return!1;if(u>f?h>d?(B=this.getCardinalDirection(R,M,4),F=this.getCardinalDirection(O,M,2)):(B=this.getCardinalDirection(-R,M,3),F=this.getCardinalDirection(-O,M,1)):h>d?(B=this.getCardinalDirection(-R,M,1),F=this.getCardinalDirection(-O,M,3)):(B=this.getCardinalDirection(R,M,2),F=this.getCardinalDirection(O,M,4)),!k)switch(B){case 1:z=m,P=u+-w/M,l[0]=P,l[1]=z;break;case 2:P=x,z=h+b*M,l[0]=P,l[1]=z;break;case 3:z=v,P=u+w/M,l[0]=P,l[1]=z;break;case 4:P=y,z=h+-b*M,l[0]=P,l[1]=z;break}if(!L)switch(F){case 1:H=T,$=f+-D/M,l[2]=$,l[3]=H;break;case 2:$=_,H=d+I*M,l[2]=$,l[3]=H;break;case 3:H=S,$=f+D/M,l[2]=$,l[3]=H;break;case 4:$=A,H=d+-I*M,l[2]=$,l[3]=H;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,C=void 0,T=void 0,E=void 0,A=void 0,S=void 0,_=void 0;return w=p-f,T=h-d,A=d*f-h*p,C=v-g,E=m-y,S=y*g-m*v,_=w*E-C*T,_===0?null:(x=(T*S-E*A)/_,b=(C*A-w*S)/_,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l<a?h+=Math.PI:u<s&&(h+=this.TWO_PI)):u<s?h=this.ONE_AND_HALF_PI:h=this.HALF_PI,h},i.doIntersect=function(a,s,l,u){var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=(d-h)*(v-g)-(y-m)*(p-f);if(x===0)return!1;var b=((v-g)*(y-h)+(m-y)*(v-f))/x,w=((f-p)*(y-h)+(d-h)*(v-f))/x;return 0<b&&b<1&&0<w&&w<1},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p<d.length;p++){var m=d[p];m.enumerable=m.enumerable||!1,m.configurable=!0,"value"in m&&(m.writable=!0),Object.defineProperty(f,m.key,m)}}return o(h,"defineProperties"),function(f,d,p){return d&&h(f.prototype,d),p&&h(f,p),f}}();function i(h,f){if(!(h instanceof f))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=o(function(f){return{value:f,next:null,prev:null}},"nodeFrom"),s=o(function(f,d,p,m){return f!==null?f.next=d:m.head=d,p!==null?p.prev=d:m.tail=d,d.prev=f,d.next=p,m.length++,d},"add"),l=o(function(f,d){var p=f.prev,m=f.next;return p!==null?p.next=m:d.head=m,m!==null?m.prev=p:d.tail=p,f.prev=f.next=null,d.length--,f},"_remove"),u=function(){function h(f){var d=this;i(this,h),this.length=0,this.head=null,this.tail=null,f?.forEach(function(p){return d.push(p)})}return o(h,"LinkedList"),n(h,[{key:"size",value:o(function(){return this.length},"size")},{key:"insertBefore",value:o(function(d,p){return s(p.prev,a(d),p,this)},"insertBefore")},{key:"insertAfter",value:o(function(d,p){return s(p,a(d),p.next,this)},"insertAfter")},{key:"insertNodeBefore",value:o(function(d,p){return s(p.prev,d,p,this)},"insertNodeBefore")},{key:"insertNodeAfter",value:o(function(d,p){return s(p,d,p.next,this)},"insertNodeAfter")},{key:"push",value:o(function(d){return s(this.tail,a(d),null,this)},"push")},{key:"unshift",value:o(function(d){return s(null,a(d),this.head,this)},"unshift")},{key:"remove",value:o(function(d){return l(d,this)},"remove")},{key:"pop",value:o(function(){return l(this.tail,this).value},"pop")},{key:"popNode",value:o(function(){return l(this.tail,this)},"popNode")},{key:"shift",value:o(function(){return l(this.head,this).value},"shift")},{key:"shiftNode",value:o(function(){return l(this.head,this)},"shiftNode")},{key:"get_object_at",value:o(function(d){if(d<=this.length()){for(var p=1,m=this.head;p<d;)m=m.next,p++;return m.value}},"get_object_at")},{key:"set_object_at",value:o(function(d,p){if(d<=this.length()){for(var m=1,g=this.head;m<d;)g=g.next,m++;g.value=p}},"set_object_at")}]),h}();t.exports=u},function(t,e,r){"use strict";function n(i,a,s){this.x=null,this.y=null,i==null&&a==null&&s==null?(this.x=0,this.y=0):typeof i=="number"&&typeof a=="number"&&s==null?(this.x=i,this.y=a):i.constructor.name=="Point"&&a==null&&s==null&&(s=i,this.x=s.x,this.y=s.y)}o(n,"Point"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.getLocation=function(){return new n(this.x,this.y)},n.prototype.setLocation=function(i,a,s){i.constructor.name=="Point"&&a==null&&s==null?(s=i,this.setLocation(s.x,s.y)):typeof i=="number"&&typeof a=="number"&&s==null&&(parseInt(i)==i&&parseInt(a)==a?this.move(i,a):(this.x=Math.floor(i+.5),this.y=Math.floor(a+.5)))},n.prototype.move=function(i,a){this.x=i,this.y=a},n.prototype.translate=function(i,a){this.x+=i,this.y+=a},n.prototype.equals=function(i){if(i.constructor.name=="Point"){var a=i;return this.x==a.x&&this.y==a.y}return this==i},n.prototype.toString=function(){return new n().constructor.name+"[x="+this.x+",y="+this.y+"]"},t.exports=n},function(t,e,r){"use strict";function n(i,a,s,l){this.x=0,this.y=0,this.width=0,this.height=0,i!=null&&a!=null&&s!=null&&l!=null&&(this.x=i,this.y=a,this.width=s,this.height=l)}o(n,"RectangleD"),n.prototype.getX=function(){return this.x},n.prototype.setX=function(i){this.x=i},n.prototype.getY=function(){return this.y},n.prototype.setY=function(i){this.y=i},n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},n.prototype.getRight=function(){return this.x+this.width},n.prototype.getBottom=function(){return this.y+this.height},n.prototype.intersects=function(i){return!(this.getRight()<i.x||this.getBottom()<i.y||i.getRight()<this.x||i.getBottom()<this.y)},n.prototype.getCenterX=function(){return this.x+this.width/2},n.prototype.getMinX=function(){return this.getX()},n.prototype.getMaxX=function(){return this.getX()+this.width},n.prototype.getCenterY=function(){return this.y+this.height/2},n.prototype.getMinY=function(){return this.getY()},n.prototype.getMaxY=function(){return this.getY()+this.height},n.prototype.getWidthHalf=function(){return this.width/2},n.prototype.getHeightHalf=function(){return this.height/2},t.exports=n},function(t,e,r){"use strict";var n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(a){return typeof a}:function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};function i(){}o(i,"UniqueIDGeneretor"),i.lastID=0,i.createID=function(a){return i.isPrimitive(a)?a:(a.uniqueID!=null||(a.uniqueID=i.getString(),i.lastID++),a.uniqueID)},i.getString=function(a){return a==null&&(a=i.lastID),"Object#"+a},i.isPrimitive=function(a){var s=typeof a>"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g<m.length;g++)y[g]=m[g];return y}else return Array.from(m)}o(n,"_toConsumableArray");var i=r(0),a=r(6),s=r(3),l=r(1),u=r(5),h=r(4),f=r(17),d=r(27);function p(m){d.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,m!=null&&(this.isRemoteUse=m)}o(p,"Layout"),p.RANDOM_SEED=1,p.prototype=Object.create(d.prototype),p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},p.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},p.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},p.prototype.newGraphManager=function(){var m=new a(this);return this.graphManager=m,m},p.prototype.newGraph=function(m){return new u(null,this.graphManager,m)},p.prototype.newNode=function(m){return new s(this.graphManager,m)},p.prototype.newEdge=function(m){return new l(null,null,m)},p.prototype.checkLayoutSuccess=function(){return this.graphManager.getRoot()==null||this.graphManager.getRoot().getNodes().length==0||this.graphManager.includesInvalidEdge()},p.prototype.runLayout=function(){this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters();var m;return this.checkLayoutSuccess()?m=!1:m=this.layout(),i.ANIMATE==="during"?!1:(m&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,m)},p.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},p.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var m,g=this.graphManager.getAllEdges(),y=0;y<g.length;y++)m=g[y];for(var v,x=this.graphManager.getRoot().getNodes(),y=0;y<x.length;y++)v=x[y];this.update(this.graphManager.getRoot())}},p.prototype.update=function(m){if(m==null)this.update2();else if(m instanceof s){var g=m;if(g.getChild()!=null)for(var y=g.getChild().getNodes(),v=0;v<y.length;v++)update(y[v]);if(g.vGraphObject!=null){var x=g.vGraphObject;x.update(g)}}else if(m instanceof l){var b=m;if(b.vGraphObject!=null){var w=b.vGraphObject;w.update(b)}}else if(m instanceof u){var C=m;if(C.vGraphObject!=null){var T=C.vGraphObject;T.update(C)}}},p.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},p.prototype.transform=function(m){if(m==null)this.transform(new h(0,0));else{var g=new f,y=this.graphManager.getRoot().updateLeftTop();if(y!=null){g.setWorldOrgX(m.x),g.setWorldOrgY(m.y),g.setDeviceOrgX(y.x),g.setDeviceOrgY(y.y);for(var v=this.getAllNodes(),x,b=0;b<v.length;b++)x=v[b],x.transform(g)}}},p.prototype.positionNodesRandomly=function(m){if(m==null)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var g,y,v=m.getNodes(),x=0;x<v.length;x++)g=v[x],y=g.getChild(),y==null||y.getNodes().length==0?g.scatter():(this.positionNodesRandomly(y),g.updateBounds())},p.prototype.getFlatForest=function(){for(var m=[],g=!0,y=this.graphManager.getRoot().getNodes(),v=!0,x=0;x<y.length;x++)y[x].getChild()!=null&&(v=!1);if(!v)return m;var b=new Set,w=[],C=new Map,T=[];for(T=T.concat(y);T.length>0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var A=E.getEdges(),x=0;x<A.length;x++){var S=A[x].getOtherEnd(E);if(C.get(E)!=S)if(!b.has(S))w.push(S),C.set(S,E);else{g=!1;break}}}if(!g)m=[];else{var _=[].concat(n(b));m.push(_);for(var x=0;x<_.length;x++){var I=_[x],D=T.indexOf(I);D>-1&&T.splice(D,1)}b=new Set,C=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x<m.bendpoints.length;x++){var b=this.newNode(null);b.setRect(new Point(0,0),new Dimension(1,1)),v.add(b);var w=this.newEdge(null);this.graphManager.add(w,y,b),g.add(b),y=b}var w=this.newEdge(null);return this.graphManager.add(w,y,m.target),this.edgeToDummyNodes.set(m,g),m.isInterGraph()?this.graphManager.remove(m):v.remove(m),g},p.prototype.createBendpointsFromDummyNodes=function(){var m=[];m=m.concat(this.graphManager.getAllEdges()),m=[].concat(n(this.edgeToDummyNodes.keys())).concat(m);for(var g=0;g<m.length;g++){var y=m[g];if(y.bendpoints.length>0){for(var v=this.edgeToDummyNodes.get(y),x=0;x<v.length;x++){var b=v[x],w=new h(b.getCenterX(),b.getCenterY()),C=y.bendpoints.get(x);C.x=w.x,C.y=w.y,b.getOwner().remove(b)}this.graphManager.add(y,y.source,y.target)}}},p.transform=function(m,g,y,v){if(y!=null&&v!=null){var x=g;if(m<=50){var b=g/y;x-=(g-b)/50*(50-m)}else{var w=g*v;x+=(w-g)/50*(m-50)}return x}else{var C,T;return m<=50?(C=9*g/500,T=g/10):(C=9*g/50,T=-8*g),C*m+T}},p.findCenterOfTree=function(m){var g=[];g=g.concat(m);var y=[],v=new Map,x=!1,b=null;(g.length==1||g.length==2)&&(x=!0,b=g[0]);for(var w=0;w<g.length;w++){var C=g[w],T=C.getNeighborsList().size;v.set(C,C.getNeighborsList().size),T==1&&y.push(C)}var E=[];for(E=E.concat(y);!x;){var A=[];A=A.concat(E),E=[];for(var w=0;w<g.length;w++){var C=g[w],S=g.indexOf(C);S>=0&&g.splice(S,1);var _=C.getNeighborsList();_.forEach(function(k){if(y.indexOf(k)<0){var L=v.get(k),R=L-1;R==1&&E.push(k),v.set(k,R)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(4);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);p<d.length;p++)m[p]=d[p];return m}else return Array.from(d)}o(n,"_toConsumableArray");var i=r(15),a=r(7),s=r(0),l=r(8),u=r(9);function h(){i.call(this),this.useSmartIdealEdgeLengthCalculation=a.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=a.DEFAULT_EDGE_LENGTH,this.springConstant=a.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=a.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=a.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=a.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=a.MAX_ITERATIONS}o(h,"FDLayout"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=a.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},h.prototype.calcIdealEdgeLengths=function(){for(var d,p,m,g,y,v,x=this.getGraphManager().getAllEdges(),b=0;b<x.length;b++)d=x[b],d.idealLength=this.idealEdgeLength,d.isInterGraph&&(m=d.getSource(),g=d.getTarget(),y=d.getSourceInLca().getEstimatedSize(),v=d.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(d.idealLength+=y+v-2*s.SIMPLE_NODE_SIZE),p=d.getLca().getInclusionTreeDepth(),d.idealLength+=a.DEFAULT_EDGE_LENGTH*a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(m.getInclusionTreeDepth()+g.getInclusionTreeDepth()-2*p))},h.prototype.initSpringEmbedder=function(){var d=this.getAllNodes().length;this.incremental?(d>a.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m<d.length;m++)p=d[m],this.calcSpringForce(p,p.idealLength)},h.prototype.calcRepulsionForces=function(){var d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;m<x.length;m++)y=x[m],this.calculateRepulsionForceOfANode(y,b,d,p),b.add(y);else for(m=0;m<x.length;m++)for(y=x[m],g=m+1;g<x.length;g++)v=x[g],y.getOwner()==v.getOwner()&&this.calcRepulsionForce(y,v)},h.prototype.calcGravitationalForces=function(){for(var d,p=this.getAllNodesToApplyGravitation(),m=0;m<p.length;m++)d=p[m],this.calcGravitationalForce(d)},h.prototype.moveNodes=function(){for(var d=this.getAllNodes(),p,m=0;m<d.length;m++)p=d[m],p.move()},h.prototype.calcSpringForce=function(d,p){var m=d.getSource(),g=d.getTarget(),y,v,x,b;if(this.uniformLeafNodeSizes&&m.getChild()==null&&g.getChild()==null)d.updateLengthSimple();else if(d.updateLength(),d.isOverlapingSourceAndTarget)return;y=d.getLength(),y!=0&&(v=this.springConstant*(y-p),x=v*(d.lengthX/y),b=v*(d.lengthY/y),m.springForceX+=x,m.springForceY+=b,g.springForceX-=x,g.springForceY-=b)},h.prototype.calcRepulsionForce=function(d,p){var m=d.getRect(),g=p.getRect(),y=new Array(2),v=new Array(4),x,b,w,C,T,E,A;if(m.intersects(g)){l.calcSeparationAmount(m,g,y,a.DEFAULT_EDGE_LENGTH/2),E=2*y[0],A=2*y[1];var S=d.noOfChildren*p.noOfChildren/(d.noOfChildren+p.noOfChildren);d.repulsionForceX-=S*E,d.repulsionForceY-=S*A,p.repulsionForceX+=S*E,p.repulsionForceY+=S*A}else this.uniformLeafNodeSizes&&d.getChild()==null&&p.getChild()==null?(x=g.getCenterX()-m.getCenterX(),b=g.getCenterY()-m.getCenterY()):(l.getIntersection(m,g,v),x=v[2]-v[0],b=v[3]-v[1]),Math.abs(x)<a.MIN_REPULSION_DIST&&(x=u.sign(x)*a.MIN_REPULSION_DIST),Math.abs(b)<a.MIN_REPULSION_DIST&&(b=u.sign(b)*a.MIN_REPULSION_DIST),w=x*x+b*b,C=Math.sqrt(w),T=this.repulsionConstant*d.noOfChildren*p.noOfChildren/w,E=T*x/C,A=T*b/C,d.repulsionForceX-=E,d.repulsionForceY-=A,p.repulsionForceX+=E,p.repulsionForceY+=A},h.prototype.calcGravitationalForce=function(d){var p,m,g,y,v,x,b,w;p=d.getOwner(),m=(p.getRight()+p.getLeft())/2,g=(p.getTop()+p.getBottom())/2,y=d.getCenterX()-m,v=d.getCenterY()-g,x=Math.abs(y)+d.getWidth()/2,b=Math.abs(v)+d.getHeight()/2,d.getOwner()==this.graphManager.getRoot()?(w=p.getEstimatedSize()*this.gravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,d||p},h.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},h.prototype.calcNoOfChildrenForAllNodes=function(){for(var d,p=this.graphManager.getAllNodes(),m=0;m<p.length;m++)d=p[m],d.noOfChildren=d.getNoOfChildren()},h.prototype.calcGrid=function(d){var p=0,m=0;p=parseInt(Math.ceil((d.getRight()-d.getLeft())/this.repulsionRange)),m=parseInt(Math.ceil((d.getBottom()-d.getTop())/this.repulsionRange));for(var g=new Array(p),y=0;y<p;y++)g[y]=new Array(m);for(var y=0;y<p;y++)for(var v=0;v<m;v++)g[y][v]=new Array;return g},h.prototype.addNodeToGrid=function(d,p,m){var g=0,y=0,v=0,x=0;g=parseInt(Math.floor((d.getRect().x-p)/this.repulsionRange)),y=parseInt(Math.floor((d.getRect().width+d.getRect().x-p)/this.repulsionRange)),v=parseInt(Math.floor((d.getRect().y-m)/this.repulsionRange)),x=parseInt(Math.floor((d.getRect().height+d.getRect().y-m)/this.repulsionRange));for(var b=g;b<=y;b++)for(var w=v;w<=x;w++)this.grid[b][w].push(d),d.setGridCoordinates(g,y,v,x)},h.prototype.updateGrid=function(){var d,p,m=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),d=0;d<m.length;d++)p=m[d],this.addNodeToGrid(p,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},h.prototype.calculateRepulsionForceOfANode=function(d,p,m,g){if(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&m||g){var y=new Set;d.surrounding=new Array;for(var v,x=this.grid,b=d.startX-1;b<d.finishX+2;b++)for(var w=d.startY-1;w<d.finishY+2;w++)if(!(b<0||w<0||b>=x.length||w>=x[0].length)){for(var C=0;C<x[b][w].length;C++)if(v=x[b][w][C],!(d.getOwner()!=v.getOwner()||d==v)&&!p.has(v)&&!y.has(v)){var T=Math.abs(d.getCenterX()-v.getCenterX())-(d.getWidth()/2+v.getWidth()/2),E=Math.abs(d.getCenterY()-v.getCenterY())-(d.getHeight()/2+v.getHeight()/2);T<=this.repulsionRange&&E<=this.repulsionRange&&y.add(v)}}d.surrounding=[].concat(n(y))}for(b=0;b<d.surrounding.length;b++)this.calcRepulsionForce(d,d.surrounding[b])},h.prototype.calcRepulsionRange=function(){return 0},t.exports=h},function(t,e,r){"use strict";var n=r(1),i=r(7);function a(l,u,h){n.call(this,l,u,h),this.idealLength=i.DEFAULT_EDGE_LENGTH}o(a,"FDLayoutEdge"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];t.exports=a},function(t,e,r){"use strict";var n=r(3);function i(s,l,u,h){n.call(this,s,l,u,h),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}o(i,"FDLayoutNode"),i.prototype=Object.create(n.prototype);for(var a in n)i[a]=n[a];i.prototype.setGridCoordinates=function(s,l,u,h){this.startX=s,this.finishX=l,this.startY=u,this.finishY=h},t.exports=i},function(t,e,r){"use strict";function n(i,a){this.width=0,this.height=0,i!==null&&a!==null&&(this.height=a,this.width=i)}o(n,"DimensionD"),n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},t.exports=n},function(t,e,r){"use strict";var n=r(14);function i(){this.map={},this.keys=[]}o(i,"HashMap"),i.prototype.put=function(a,s){var l=n.createID(a);this.contains(l)||(this.map[l]=s,this.keys.push(a))},i.prototype.contains=function(a){var s=n.createID(a);return this.map[a]!=null},i.prototype.get=function(a){var s=n.createID(a);return this.map[s]},i.prototype.keySet=function(){return this.keys},t.exports=i},function(t,e,r){"use strict";var n=r(14);function i(){this.set={}}o(i,"HashSet"),i.prototype.add=function(a){var s=n.createID(a);this.contains(s)||(this.set[s]=a)},i.prototype.remove=function(a){delete this.set[n.createID(a)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(a){return this.set[n.createID(a)]==a},i.prototype.isEmpty=function(){return this.size()===0},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(a){for(var s=Object.keys(this.set),l=s.length,u=0;u<l;u++)a.push(this.set[s[u]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(a){for(var s=a.length,l=0;l<s;l++){var u=a[l];this.add(u)}},t.exports=i},function(t,e,r){"use strict";var n=function(){function l(u,h){for(var f=0;f<h.length;f++){var d=h[f];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(u,d.key,d)}}return o(l,"defineProperties"),function(u,h,f){return h&&l(u.prototype,h),f&&l(u,f),u}}();function i(l,u){if(!(l instanceof u))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=r(11),s=function(){function l(u,h){i(this,l),(h!==null||h!==void 0)&&(this.compareFunction=this._defaultCompareFunction);var f=void 0;u instanceof a?f=u.size():f=u.length,this._quicksort(u,0,f-1)}return o(l,"Quicksort"),n(l,[{key:"_quicksort",value:o(function(h,f,d){if(f<d){var p=this._partition(h,f,d);this._quicksort(h,f,p),this._quicksort(h,p+1,d)}},"_quicksort")},{key:"_partition",value:o(function(h,f,d){for(var p=this._get(h,f),m=f,g=d;;){for(;this.compareFunction(p,this._get(h,g));)g--;for(;this.compareFunction(this._get(h,m),p);)m++;if(m<g)this._swap(h,m,g),m++,g--;else return g}},"_partition")},{key:"_get",value:o(function(h,f){return h instanceof a?h.get_object_at(f):h[f]},"_get")},{key:"_set",value:o(function(h,f,d){h instanceof a?h.set_object_at(f,d):h[f]=d},"_set")},{key:"_swap",value:o(function(h,f,d){var p=this._get(h,f);this._set(h,f,this._get(h,d)),this._set(h,d,p)},"_swap")},{key:"_defaultCompareFunction",value:o(function(h,f){return f>h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h<u.length;h++){var f=u[h];f.enumerable=f.enumerable||!1,f.configurable=!0,"value"in f&&(f.writable=!0),Object.defineProperty(l,f.key,f)}}return o(s,"defineProperties"),function(l,u,h){return u&&s(l.prototype,u),h&&s(l,h),l}}();function i(s,l){if(!(s instanceof l))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=function(){function s(l,u){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p<this.iMax;p++){this.grid[p]=new Array(this.jMax);for(var m=0;m<this.jMax;m++)this.grid[p][m]=0}this.tracebackGrid=new Array(this.iMax);for(var g=0;g<this.iMax;g++){this.tracebackGrid[g]=new Array(this.jMax);for(var y=0;y<this.jMax;y++)this.tracebackGrid[g][y]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return o(s,"NeedlemanWunsch"),n(s,[{key:"getScore",value:o(function(){return this.score},"getScore")},{key:"getAlignments",value:o(function(){return this.alignments},"getAlignments")},{key:"computeGrids",value:o(function(){for(var u=1;u<this.jMax;u++)this.grid[0][u]=this.grid[0][u-1]+this.gap_penalty,this.tracebackGrid[0][u]=[!1,!1,!0];for(var h=1;h<this.iMax;h++)this.grid[h][0]=this.grid[h-1][0]+this.gap_penalty,this.tracebackGrid[h][0]=[!1,!0,!1];for(var f=1;f<this.iMax;f++)for(var d=1;d<this.jMax;d++){var p=void 0;this.sequence1[f-1]===this.sequence2[d-1]?p=this.grid[f-1][d-1]+this.match_score:p=this.grid[f-1][d-1]+this.mismatch_penalty;var m=this.grid[f-1][d]+this.gap_penalty,g=this.grid[f][d-1]+this.gap_penalty,y=[p,m,g],v=this.arrayAllMaxIndexes(y);this.grid[f][d]=y[v[0]],this.tracebackGrid[f][d]=[v.includes(0),v.includes(1),v.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]},"computeGrids")},{key:"alignmentTraceback",value:o(function(){var u=[];for(u.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});u[0];){var h=u[0],f=this.tracebackGrid[h.pos[0]][h.pos[1]];f[0]&&u.push({pos:[h.pos[0]-1,h.pos[1]-1],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),f[1]&&u.push({pos:[h.pos[0]-1,h.pos[1]],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:"-"+h.seq2}),f[2]&&u.push({pos:[h.pos[0],h.pos[1]-1],seq1:"-"+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),h.pos[0]===0&&h.pos[1]===0&&this.alignments.push({sequence1:h.seq1,sequence2:h.seq2}),u.shift()}return this.alignments},"alignmentTraceback")},{key:"getAllIndexes",value:o(function(u,h){for(var f=[],d=-1;(d=u.indexOf(h,d+1))!==-1;)f.push(d);return f},"getAllIndexes")},{key:"arrayAllMaxIndexes",value:o(function(u){return this.getAllIndexes(u,Math.max.apply(null,u))},"arrayAllMaxIndexes")}]),s}();t.exports=a},function(t,e,r){"use strict";var n=o(function(){},"layoutBase");n.FDLayout=r(18),n.FDLayoutConstants=r(7),n.FDLayoutEdge=r(19),n.FDLayoutNode=r(20),n.DimensionD=r(21),n.HashMap=r(22),n.HashSet=r(23),n.IGeometry=r(8),n.IMath=r(9),n.Integer=r(10),n.Point=r(12),n.PointD=r(4),n.RandomSeed=r(16),n.RectangleD=r(13),n.Transform=r(17),n.UniqueIDGeneretor=r(14),n.Quicksort=r(24),n.LinkedList=r(11),n.LGraphObject=r(2),n.LGraph=r(5),n.LEdge=r(1),n.LGraphManager=r(6),n.LNode=r(3),n.Layout=r(15),n.LayoutConstants=r(0),n.NeedlemanWunsch=r(25),t.exports=n},function(t,e,r){"use strict";function n(){this.listeners=[]}o(n,"Emitter");var i=n.prototype;i.addListener=function(a,s){this.listeners.push({event:a,callback:s})},i.removeListener=function(a,s){for(var l=this.listeners.length;l>=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l<this.listeners.length;l++){var u=this.listeners[l];a===u.event&&u.callback(s)}},t.exports=n}])})});var AB=Mi((h4,CB)=>{"use strict";o(function(e,r){typeof h4=="object"&&typeof CB=="object"?CB.exports=r(SB()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof h4=="object"?h4.coseBase=r(SB()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(h4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=7)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in i)a[s]=i[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=i.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutEdge;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraph;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraphManager;function a(l){i.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutNode,a=n(0).IMath;function s(u,h,f,d){i.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p<f.length;p++)d=f[p],d.getChild()==null?(d.moveBy(u,h),d.displacementX+=u,d.displacementY+=h):d.propogateDisplacementToChildren(u,h)},s.prototype.setPred1=function(u){this.pred1=u},s.prototype.getPred1=function(){return pred1},s.prototype.getPred2=function(){return pred2},s.prototype.setNext=function(u){this.next=u},s.prototype.getNext=function(){return next},s.prototype.setProcessed=function(u){this.processed=u},s.prototype.isProcessed=function(){return processed},e.exports=s},function(e,r,n){"use strict";var i=n(0).FDLayout,a=n(4),s=n(3),l=n(5),u=n(2),h=n(1),f=n(0).FDLayoutConstants,d=n(0).LayoutConstants,p=n(0).Point,m=n(0).PointD,g=n(0).Layout,y=n(0).Integer,v=n(0).IGeometry,x=n(0).LGraph,b=n(0).Transform;function w(){i.call(this),this.toBeTiled={}}o(w,"CoSELayout"),w.prototype=Object.create(i.prototype);for(var C in i)w[C]=i[C];w.prototype.newGraphManager=function(){var T=new a(this);return this.graphManager=T,T},w.prototype.newGraph=function(T){return new s(null,this.graphManager,T)},w.prototype.newNode=function(T){return new l(this.graphManager,T)},w.prototype.newEdge=function(T){return new u(null,null,T)},w.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.isSubLayout||(h.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=h.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=h.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=f.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=f.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=f.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=f.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=f.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=f.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/f.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=f.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},w.prototype.layout=function(){var T=d.DEFAULT_CREATE_BENDS_AS_NEEDED;return T&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},w.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(h.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),A=this.nodesWithGravity.filter(function(I){return E.has(I)});this.graphManager.setAllNodesToApplyGravitation(A)}}else{var T=this.getFlatForest();if(T.length>0)this.positionNodesRadially(T);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),A=this.nodesWithGravity.filter(function(S){return E.has(S)});this.graphManager.setAllNodesToApplyGravitation(A),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},w.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%f.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var T=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(_){return T.has(_)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var A=!this.isTreeGrowing&&!this.isGrowthFinished,S=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(A,S),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},w.prototype.getPositionsData=function(){for(var T=this.graphManager.getAllNodes(),E={},A=0;A<T.length;A++){var S=T[A].rect,_=T[A].id;E[_]={id:_,x:S.getCenterX(),y:S.getCenterY(),w:S.width,h:S.height}}return E},w.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var T=!1;if(f.ANIMATE==="during")this.emit("layoutstarted");else{for(;!T;)T=this.tick();this.graphManager.updateBounds()}},w.prototype.calculateNodesToApplyGravitationTo=function(){var T=[],E,A=this.graphManager.getGraphs(),S=A.length,_;for(_=0;_<S;_++)E=A[_],E.updateConnected(),E.isConnected||(T=T.concat(E.getNodes()));return T},w.prototype.createBendpoints=function(){var T=[];T=T.concat(this.graphManager.getAllEdges());var E=new Set,A;for(A=0;A<T.length;A++){var S=T[A];if(!E.has(S)){var _=S.getSource(),I=S.getTarget();if(_==I)S.getBendpoints().push(new m),S.getBendpoints().push(new m),this.createDummyNodesForBendpoints(S),E.add(S);else{var D=[];if(D=D.concat(_.getEdgeListToNode(I)),D=D.concat(I.getEdgeListToNode(_)),!E.has(D[0])){if(D.length>1){var k;for(k=0;k<D.length;k++){var L=D[k];L.getBendpoints().push(new m),this.createDummyNodesForBendpoints(L)}}D.forEach(function(R){E.add(R)})}}}if(E.size==T.length)break}},w.prototype.positionNodesRadially=function(T){for(var E=new p(0,0),A=Math.ceil(Math.sqrt(T.length)),S=0,_=0,I=0,D=new m(0,0),k=0;k<T.length;k++){k%A==0&&(I=0,_=S,k!=0&&(_+=h.DEFAULT_COMPONENT_SEPERATION),S=0);var L=T[k],R=g.findCenterOfTree(L);E.x=I,E.y=_,D=w.radialLayout(L,R,E),D.y>S&&(S=Math.floor(D.y)),I=Math.floor(D.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-D.x/2,d.WORLD_CENTER_Y-D.y/2))},w.radialLayout=function(T,E,A){var S=Math.max(this.maxDiagonalInTree(T),h.DEFAULT_RADIAL_SEPARATION);w.branchRadialLayout(E,null,0,359,0,S);var _=x.calculateBounds(T),I=new b;I.setDeviceOrgX(_.getMinX()),I.setDeviceOrgY(_.getMinY()),I.setWorldOrgX(A.x),I.setWorldOrgY(A.y);for(var D=0;D<T.length;D++){var k=T[D];k.transform(I)}var L=new m(_.getMaxX(),_.getMaxY());return I.inverseTransformPoint(L)},w.branchRadialLayout=function(T,E,A,S,_,I){var D=(S-A+1)/2;D<0&&(D+=180);var k=(D+A)%360,L=k*v.TWO_PI/360,R=Math.cos(L),O=_*Math.cos(L),M=_*Math.sin(L);T.setCenter(O,M);var B=[];B=B.concat(T.getEdges());var F=B.length;E!=null&&F--;for(var P=0,z=B.length,$,H=T.getEdgesBetween(E);H.length>1;){var Q=H[0];H.splice(0,1);var j=B.indexOf(Q);j>=0&&B.splice(j,1),z--,F--}E!=null?$=(B.indexOf(H[0])+1)%z:$=0;for(var ie=Math.abs(S-A)/F,ne=$;P!=F;ne=++ne%z){var le=B[ne].getOtherEnd(T);if(le!=E){var he=(A+P*ie)%360,K=(he+ie)%360;w.branchRadialLayout(le,T,he,K,_+I,I),P++}}},w.maxDiagonalInTree=function(T){for(var E=y.MIN_VALUE,A=0;A<T.length;A++){var S=T[A],_=S.getDiagonal();_>E&&(E=_)}return E},w.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},w.prototype.groupZeroDegreeMembers=function(){var T=this,E={};this.memberGroups={},this.idToDummyNode={};for(var A=[],S=this.graphManager.getAllNodes(),_=0;_<S.length;_++){var I=S[_],D=I.getParent();this.getNodeDegreeWithChildren(I)===0&&(D.id==null||!this.getToBeTiled(D))&&A.push(I)}for(var _=0;_<A.length;_++){var I=A[_],k=I.getParent().id;typeof E[k]>"u"&&(E[k]=[]),E[k]=E[k].concat(I)}Object.keys(E).forEach(function(L){if(E[L].length>1){var R="DummyCompound_"+L;T.memberGroups[R]=E[L];var O=E[L][0].getParent(),M=new l(T.graphManager);M.id=R,M.paddingLeft=O.paddingLeft||0,M.paddingRight=O.paddingRight||0,M.paddingBottom=O.paddingBottom||0,M.paddingTop=O.paddingTop||0,T.idToDummyNode[R]=M;var B=T.getGraphManager().add(T.newGraph(),M),F=O.getChild();F.add(M);for(var P=0;P<E[L].length;P++){var z=E[L][P];F.remove(z),B.add(z)}}})},w.prototype.clearCompounds=function(){var T={},E={};this.performDFSOnCompounds();for(var A=0;A<this.compoundOrder.length;A++)E[this.compoundOrder[A].id]=this.compoundOrder[A],T[this.compoundOrder[A].id]=[].concat(this.compoundOrder[A].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[A].getChild()),this.compoundOrder[A].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(T,E)},w.prototype.clearZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(A){var S=T.idToDummyNode[A];E[A]=T.tileNodes(T.memberGroups[A],S.paddingLeft+S.paddingRight),S.rect.width=E[A].width,S.rect.height=E[A].height})},w.prototype.repopulateCompounds=function(){for(var T=this.compoundOrder.length-1;T>=0;T--){var E=this.compoundOrder[T],A=E.id,S=E.paddingLeft,_=E.paddingTop;this.adjustLocations(this.tiledMemberPack[A],E.rect.x,E.rect.y,S,_)}},w.prototype.repopulateZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(A){var S=T.idToDummyNode[A],_=S.paddingLeft,I=S.paddingTop;T.adjustLocations(E[A],S.rect.x,S.rect.y,_,I)})},w.prototype.getToBeTiled=function(T){var E=T.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var A=T.getChild();if(A==null)return this.toBeTiled[E]=!1,!1;for(var S=A.getNodes(),_=0;_<S.length;_++){var I=S[_];if(this.getNodeDegree(I)>0)return this.toBeTiled[E]=!1,!1;if(I.getChild()==null){this.toBeTiled[I.id]=!1;continue}if(!this.getToBeTiled(I))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},w.prototype.getNodeDegree=function(T){for(var E=T.id,A=T.getEdges(),S=0,_=0;_<A.length;_++){var I=A[_];I.getSource().id!==I.getTarget().id&&(S=S+1)}return S},w.prototype.getNodeDegreeWithChildren=function(T){var E=this.getNodeDegree(T);if(T.getChild()==null)return E;for(var A=T.getChild().getNodes(),S=0;S<A.length;S++){var _=A[S];E+=this.getNodeDegreeWithChildren(_)}return E},w.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},w.prototype.fillCompexOrderByDFS=function(T){for(var E=0;E<T.length;E++){var A=T[E];A.getChild()!=null&&this.fillCompexOrderByDFS(A.getChild().getNodes()),this.getToBeTiled(A)&&this.compoundOrder.push(A)}},w.prototype.adjustLocations=function(T,E,A,S,_){E+=S,A+=_;for(var I=E,D=0;D<T.rows.length;D++){var k=T.rows[D];E=I;for(var L=0,R=0;R<k.length;R++){var O=k[R];O.rect.x=E,O.rect.y=A,E+=O.rect.width+T.horizontalPadding,O.rect.height>L&&(L=O.rect.height)}A+=L+T.verticalPadding}},w.prototype.tileCompoundMembers=function(T,E){var A=this;this.tiledMemberPack=[],Object.keys(T).forEach(function(S){var _=E[S];A.tiledMemberPack[S]=A.tileNodes(T[S],_.paddingLeft+_.paddingRight),_.rect.width=A.tiledMemberPack[S].width,_.rect.height=A.tiledMemberPack[S].height})},w.prototype.tileNodes=function(T,E){var A=h.TILING_PADDING_VERTICAL,S=h.TILING_PADDING_HORIZONTAL,_={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:A,horizontalPadding:S};T.sort(function(k,L){return k.rect.width*k.rect.height>L.rect.width*L.rect.height?-1:k.rect.width*k.rect.height<L.rect.width*L.rect.height?1:0});for(var I=0;I<T.length;I++){var D=T[I];_.rows.length==0?this.insertNodeToRow(_,D,0,E):this.canAddHorizontal(_,D.rect.width,D.rect.height)?this.insertNodeToRow(_,D,this.getShortestRowIndex(_),E):this.insertNodeToRow(_,D,_.rows.length,E),this.shiftToLastRow(_)}return _},w.prototype.insertNodeToRow=function(T,E,A,S){var _=S;if(A==T.rows.length){var I=[];T.rows.push(I),T.rowWidth.push(_),T.rowHeight.push(0)}var D=T.rowWidth[A]+E.rect.width;T.rows[A].length>0&&(D+=T.horizontalPadding),T.rowWidth[A]=D,T.width<D&&(T.width=D);var k=E.rect.height;A>0&&(k+=T.verticalPadding);var L=0;k>T.rowHeight[A]&&(L=T.rowHeight[A],T.rowHeight[A]=k,L=T.rowHeight[A]-L),T.height+=L,T.rows[A].push(E)},w.prototype.getShortestRowIndex=function(T){for(var E=-1,A=Number.MAX_VALUE,S=0;S<T.rows.length;S++)T.rowWidth[S]<A&&(E=S,A=T.rowWidth[S]);return E},w.prototype.getLongestRowIndex=function(T){for(var E=-1,A=Number.MIN_VALUE,S=0;S<T.rows.length;S++)T.rowWidth[S]>A&&(E=S,A=T.rowWidth[S]);return E},w.prototype.canAddHorizontal=function(T,E,A){var S=this.getShortestRowIndex(T);if(S<0)return!0;var _=T.rowWidth[S];if(_+T.horizontalPadding+E<=T.width)return!0;var I=0;T.rowHeight[S]<A&&S>0&&(I=A+T.verticalPadding-T.rowHeight[S]);var D;T.width-_>=E+T.horizontalPadding?D=(T.height+I)/(_+E+T.horizontalPadding):D=(T.height+I)/T.width,I=A+T.verticalPadding;var k;return T.width<E?k=(T.height+I)/E:k=(T.height+I)/T.width,k<1&&(k=1/k),D<1&&(D=1/D),D<k},w.prototype.shiftToLastRow=function(T){var E=this.getLongestRowIndex(T),A=T.rowWidth.length-1,S=T.rows[E],_=S[S.length-1],I=_.width+T.horizontalPadding;if(T.width-T.rowWidth[A]>I&&E!=A){S.splice(-1,1),T.rows[A].push(_),T.rowWidth[E]=T.rowWidth[E]-I,T.rowWidth[A]=T.rowWidth[A]+I,T.width=T.rowWidth[instance.getLongestRowIndex(T)];for(var D=Number.MIN_VALUE,k=0;k<S.length;k++)S[k].height>D&&(D=S[k].height);E>0&&(D+=T.verticalPadding);var L=T.rowHeight[E]+T.rowHeight[A];T.rowHeight[E]=D,T.rowHeight[A]<_.height+T.verticalPadding&&(T.rowHeight[A]=_.height+T.verticalPadding);var R=T.rowHeight[E]+T.rowHeight[A];T.height+=R-L,this.shiftToLastRow(T)}},w.prototype.tilingPreLayout=function(){h.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},w.prototype.tilingPostLayout=function(){h.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},w.prototype.reduceTrees=function(){for(var T=[],E=!0,A;E;){var S=this.graphManager.getAllNodes(),_=[];E=!1;for(var I=0;I<S.length;I++)A=S[I],A.getEdges().length==1&&!A.getEdges()[0].isInterGraph&&A.getChild()==null&&(_.push([A,A.getEdges()[0],A.getOwner()]),E=!0);if(E==!0){for(var D=[],k=0;k<_.length;k++)_[k][0].getEdges().length==1&&(D.push(_[k]),_[k][0].getOwner().remove(_[k][0]));T.push(D),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=T},w.prototype.growTree=function(T){for(var E=T.length,A=T[E-1],S,_=0;_<A.length;_++)S=A[_],this.findPlaceforPrunedNode(S),S[2].add(S[0]),S[2].add(S[1],S[1].source,S[1].target);T.splice(T.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},w.prototype.findPlaceforPrunedNode=function(T){var E,A,S=T[0];S==T[1].source?A=T[1].target:A=T[1].source;var _=A.startX,I=A.finishX,D=A.startY,k=A.finishY,L=0,R=0,O=0,M=0,B=[L,O,R,M];if(D>0)for(var F=_;F<=I;F++)B[0]+=this.grid[F][D-1].length+this.grid[F][D].length-1;if(I<this.grid.length-1)for(var F=D;F<=k;F++)B[1]+=this.grid[I+1][F].length+this.grid[I][F].length-1;if(k<this.grid[0].length-1)for(var F=_;F<=I;F++)B[2]+=this.grid[F][k+1].length+this.grid[F][k].length-1;if(_>0)for(var F=D;F<=k;F++)B[3]+=this.grid[_-1][F].length+this.grid[_][F].length-1;for(var P=y.MAX_VALUE,z,$,H=0;H<B.length;H++)B[H]<P?(P=B[H],z=1,$=H):B[H]==P&&z++;if(z==3&&P==0)B[0]==0&&B[1]==0&&B[2]==0?E=1:B[0]==0&&B[1]==0&&B[3]==0?E=0:B[0]==0&&B[2]==0&&B[3]==0?E=3:B[1]==0&&B[2]==0&&B[3]==0&&(E=2);else if(z==2&&P==0){var Q=Math.floor(Math.random()*2);B[0]==0&&B[1]==0?Q==0?E=0:E=1:B[0]==0&&B[2]==0?Q==0?E=0:E=2:B[0]==0&&B[3]==0?Q==0?E=0:E=3:B[1]==0&&B[2]==0?Q==0?E=1:E=2:B[1]==0&&B[3]==0?Q==0?E=1:E=3:Q==0?E=2:E=3}else if(z==4&&P==0){var Q=Math.floor(Math.random()*4);E=Q}else E=$;E==0?S.setCenter(A.getCenterX(),A.getCenterY()-A.getHeight()/2-f.DEFAULT_EDGE_LENGTH-S.getHeight()/2):E==1?S.setCenter(A.getCenterX()+A.getWidth()/2+f.DEFAULT_EDGE_LENGTH+S.getWidth()/2,A.getCenterY()):E==2?S.setCenter(A.getCenterX(),A.getCenterY()+A.getHeight()/2+f.DEFAULT_EDGE_LENGTH+S.getHeight()/2):S.setCenter(A.getCenterX()-A.getWidth()/2-f.DEFAULT_EDGE_LENGTH-S.getWidth()/2,A.getCenterY())},e.exports=w},function(e,r,n){"use strict";var i={};i.layoutBase=n(0),i.CoSEConstants=n(1),i.CoSEEdge=n(2),i.CoSEGraph=n(3),i.CoSEGraphManager=n(4),i.CoSELayout=n(6),i.CoSENode=n(5),e.exports=i}])})});var Gge=Mi((f4,_B)=>{"use strict";o(function(e,r){typeof f4=="object"&&typeof _B=="object"?_B.exports=r(AB()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof f4=="object"?f4.cytoscapeCoseBilkent=r(AB()):e.cytoscapeCoseBilkent=r(e.coseBase)},"webpackUniversalModuleDefinition")(f4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=1)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).layoutBase.LayoutConstants,a=n(0).layoutBase.FDLayoutConstants,s=n(0).CoSEConstants,l=n(0).CoSELayout,u=n(0).CoSENode,h=n(0).layoutBase.PointD,f=n(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var w in v)b[w]=v[w];for(var w in x)b[w]=x[w];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?i.QUALITY=0:x.quality=="proof"?i.QUALITY=2:i.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=i.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,w=this.idToLNode={},C=this.layout=new l,T=this;T.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var E=C.newGraphManager();this.gm=E;var A=this.options.eles.nodes(),S=this.options.eles.edges();this.root=E.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(A),C);for(var _=0;_<S.length;_++){var I=S[_],D=this.idToLNode[I.data("source")],k=this.idToLNode[I.data("target")];if(D!==k&&D.getEdgesBetween(k).length==0){var L=E.add(C.newEdge(),D,k);L.id=I.id()}}var R=o(function(B,F){typeof B=="number"&&(B=F);var P=B.data("id"),z=T.idToLNode[P];return{x:z.getRect().getCenterX(),y:z.getRect().getCenterY()}},"getPositions"),O=o(function M(){for(var B=o(function(){b.fit&&b.cy.fit(b.eles,b.padding),v||(v=!0,T.cy.one("layoutready",b.ready),T.cy.trigger({type:"layoutready",layout:T}))},"afterReposition"),F=T.options.refresh,P,z=0;z<F&&!P;z++)P=T.stopped||T.layout.tick();if(P){C.checkLayoutSuccess()&&!C.isSubLayout&&C.doPostLayout(),C.tilingPostLayout&&C.tilingPostLayout(),C.isLayoutFinished=!0,T.options.eles.nodes().positions(R),B(),T.cy.one("layoutstop",T.options.stop),T.cy.trigger({type:"layoutstop",layout:T}),x&&cancelAnimationFrame(x),v=!1;return}var $=T.layout.getPositionsData();b.eles.nodes().positions(function(H,Q){if(typeof H=="number"&&(H=Q),!H.isParent()){for(var j=H.id(),ie=$[j],ne=H;ie==null&&(ie=$[ne.data("parent")]||$["DummyCompound_"+ne.data("parent")],$[j]=ie,ne=ne.parent()[0],ne!=null););return ie!=null?{x:ie.x,y:ie.y}:{x:H.position("x"),y:H.position("y")}}}),B(),x=requestAnimationFrame(M)},"iterateAnimated");return C.addListener("layoutstarted",function(){T.options.animate==="during"&&(x=requestAnimationFrame(O))}),C.runLayout(),this.options.animate!=="during"&&(T.options.eles.nodes().not(":parent").layoutPositions(T,T.options,R),v=!1),this},m.prototype.getTopMostNodes=function(v){for(var x={},b=0;b<v.length;b++)x[v[b].id()]=!0;var w=v.filter(function(C,T){typeof C=="number"&&(C=T);for(var E=C.parent()[0];E!=null;){if(x[E.id()])return!1;E=E.parent()[0]}return!0});return w},m.prototype.processChildrenList=function(v,x,b){for(var w=x.length,C=0;C<w;C++){var T=x[C],E=T.children(),A,S=T.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if(T.outerWidth()!=null&&T.outerHeight()!=null?A=v.add(new u(b.graphManager,new h(T.position("x")-S.w/2,T.position("y")-S.h/2),new f(parseFloat(S.w),parseFloat(S.h)))):A=v.add(new u(this.graphManager)),A.id=T.data("id"),A.paddingLeft=parseInt(T.css("padding")),A.paddingTop=parseInt(T.css("padding")),A.paddingRight=parseInt(T.css("padding")),A.paddingBottom=parseInt(T.css("padding")),this.options.nodeDimensionsIncludeLabels&&T.isParent()){var _=T.boundingBox({includeLabels:!0,includeNodes:!1}).w,I=T.boundingBox({includeLabels:!0,includeNodes:!1}).h,D=T.css("text-halign");A.labelWidth=_,A.labelHeight=I,A.labelPos=D}if(this.idToLNode[T.data("id")]=A,isNaN(A.rect.x)&&(A.rect.x=0),isNaN(A.rect.y)&&(A.rect.y=0),E!=null&&E.length>0){var k;k=b.getGraphManager().add(b.newGraph(),A),this.processChildrenList(k,E,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y}])})});function JZe(t,e,r,n,i){return t.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+(i.width-e)/2+", "+r+")")}var YZe,XZe,jZe,KZe,QZe,ZZe,eJe,tJe,Vge,Uge,Hge=N(()=>{"use strict";to();ir();YZe=12,XZe=o(function(t,e,r,n){e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 ${r.height-5} v${-r.height+2*5} q0,-5 5,-5 h${r.width-2*5} q5,0 5,5 v${r.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",r.height).attr("x2",r.width).attr("y2",r.height)},"defaultBkg"),jZe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("width",r.width)},"rectBkg"),KZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n,s=.25*n,l=.35*n,u=.2*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${n*.25},${-1*n*.1} | |
| 2156 | + a${l},${l} 1 0,1 ${n*.4},${-1*n*.1} | |
| 2157 | + a${s},${s} 1 0,1 ${n*.35},${1*n*.2} | |
| 2158 | + | |
| 2159 | + a${a},${a} 1 0,1 ${n*.15},${1*i*.35} | |
| 2160 | + a${u},${u} 1 0,1 ${-1*n*.15},${1*i*.65} | |
| 2161 | + | |
| 2162 | + a${s},${a} 1 0,1 ${-1*n*.25},${n*.15} | |
| 2163 | + a${l},${l} 1 0,1 ${-1*n*.5},0 | |
| 2164 | + a${a},${a} 1 0,1 ${-1*n*.25},${-1*n*.15} | |
| 2165 | + | |
| 2166 | + a${a},${a} 1 0,1 ${-1*n*.1},${-1*i*.35} | |
| 2167 | + a${u},${u} 1 0,1 ${n*.1},${-1*i*.65} | |
| 2168 | + | |
| 2169 | + H0 V0 Z`)},"cloudBkg"),QZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${n*.25},${-1*i*.1} | |
| 2170 | + a${a},${a} 1 0,0 ${n*.25},0 | |
| 2171 | + a${a},${a} 1 0,0 ${n*.25},0 | |
| 2172 | + a${a},${a} 1 0,0 ${n*.25},${1*i*.1} | |
| 2173 | + | |
| 2174 | + a${a},${a} 1 0,0 ${n*.15},${1*i*.33} | |
| 2175 | + a${a*.8},${a*.8} 1 0,0 0,${1*i*.34} | |
| 2176 | + a${a},${a} 1 0,0 ${-1*n*.15},${1*i*.33} | |
| 2177 | + | |
| 2178 | + a${a},${a} 1 0,0 ${-1*n*.25},${i*.15} | |
| 2179 | + a${a},${a} 1 0,0 ${-1*n*.25},0 | |
| 2180 | + a${a},${a} 1 0,0 ${-1*n*.25},0 | |
| 2181 | + a${a},${a} 1 0,0 ${-1*n*.25},${-1*i*.15} | |
| 2182 | + | |
| 2183 | + a${a},${a} 1 0,0 ${-1*n*.1},${-1*i*.33} | |
| 2184 | + a${a*.8},${a*.8} 1 0,0 0,${-1*i*.34} | |
| 2185 | + a${a},${a} 1 0,0 ${n*.1},${-1*i*.33} | |
| 2186 | + | |
| 2187 | + H0 V0 Z`)},"bangBkg"),ZZe=o(function(t,e,r){e.append("circle").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("r",r.width/2)},"circleBkg");o(JZe,"insertPolygonShape");eJe=o(function(t,e,r){let n=r.height,a=n/4,s=r.width-r.padding+2*a,l=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-n/2},{x:s-a,y:-n},{x:a,y:-n},{x:0,y:-n/2}];JZe(e,s,n,l,r)},"hexagonBkg"),tJe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("rx",r.padding).attr("ry",r.padding).attr("width",r.width)},"roundedRectBkg"),Vge=o(async function(t,e,r,n,i){let a=i.htmlLabels,s=n%(YZe-1),l=e.append("g");r.section=s;let u="section-"+s;s<0&&(u+=" section-root"),l.attr("class",(r.class?r.class+" ":"")+"mindmap-node "+u);let h=l.append("g"),f=l.append("g"),d=r.descr.replace(/(<br\/*>)/g,` | |
| 2188 | +`);await Hn(f,d,{useHtmlLabels:a,width:r.width,classes:"mindmap-node-label"},i),a||f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");let p=f.node().getBBox(),[m]=Bo(i.fontSize);if(r.height=p.height+m*1.1*.5+r.padding,r.width=p.width+2*r.padding,r.icon)if(r.type===t.nodeType.CIRCLE)r.height+=50,r.width+=50,l.append("foreignObject").attr("height","50px").attr("width",r.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+r.width/2+", "+(r.height/2-1.5*r.padding)+")");else{r.width+=50;let g=r.height;r.height=Math.max(g,60);let y=Math.abs(r.height-g);l.append("foreignObject").attr("width","60px").attr("height",r.height).attr("style","text-align: center;margin-top:"+y/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+(25+r.width/2)+", "+(y/2+r.padding/2)+")")}else if(a){let g=(r.width-p.width)/2,y=(r.height-p.height)/2;f.attr("transform","translate("+g+", "+y+")")}else{let g=r.width/2,y=r.padding/2;f.attr("transform","translate("+g+", "+y+")")}switch(r.type){case t.nodeType.DEFAULT:XZe(t,h,r,s);break;case t.nodeType.ROUNDED_RECT:tJe(t,h,r,s);break;case t.nodeType.RECT:jZe(t,h,r,s);break;case t.nodeType.CIRCLE:h.attr("transform","translate("+r.width/2+", "+ +r.height/2+")"),ZZe(t,h,r,s);break;case t.nodeType.CLOUD:KZe(t,h,r,s);break;case t.nodeType.BANG:QZe(t,h,r,s);break;case t.nodeType.HEXAGON:eJe(t,h,r,s);break}return t.setElementForId(r.id,l),r.height},"drawNode"),Uge=o(function(t,e){let r=t.getElementById(e.id),n=e.x||0,i=e.y||0;r.attr("transform","translate("+n+","+i+")")},"positionNode")});async function qge(t,e,r,n,i){await Vge(t,e,r,n,i),r.children&&await Promise.all(r.children.map((a,s)=>qge(t,e,a,n<0?s:n,i)))}function rJe(t,e){e.edges().map((r,n)=>{let i=r.data();if(r[0]._private.bodyBounds){let a=r[0]._private.rscratch;Y.trace("Edge: ",n,i),t.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}})}function Yge(t,e,r,n){e.add({group:"nodes",data:{id:t.id.toString(),labelText:t.descr,height:t.height,width:t.width,level:n,nodeId:t.id,padding:t.padding,type:t.type},position:{x:t.x,y:t.y}}),t.children&&t.children.forEach(i=>{Yge(i,e,r,n+1),e.add({group:"edges",data:{id:`${t.id}_${i.id}`,source:t.id,target:i.id,depth:n,section:i.section}})})}function nJe(t,e){return new Promise(r=>{let n=Ge("body").append("div").attr("id","cy").attr("style","display:none"),i=rl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});n.remove(),Yge(t,i,e,0),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}}),i.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),i.ready(a=>{Y.info("Ready",a),r(i)})})}function iJe(t,e){e.nodes().map((r,n)=>{let i=r.data();i.x=r.position().x,i.y=r.position().y,Uge(t,i);let a=t.getElementById(i.nodeId);Y.info("Id:",n,"Position: (",r.position().x,", ",r.position().y,")",i),a.attr("transform",`translate(${r.position().x-i.width/2}, ${r.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)})}var Wge,aJe,Xge,jge=N(()=>{"use strict";kB();Wge=Sa(Gge(),1);dr();zt();vt();Vc();Ei();Hge();Ya();rl.use(Wge.default);o(qge,"drawNodes");o(rJe,"drawEdges");o(Yge,"addNodes");o(nJe,"layoutMindmap");o(iJe,"positionNodes");aJe=o(async(t,e,r,n)=>{Y.debug(`Rendering mindmap diagram | |
| 2189 | +`+t);let i=n.db,a=i.getMindmap();if(!a)return;let s=me();s.htmlLabels=!1;let l=sa(e),u=l.append("g");u.attr("class","mindmap-edges");let h=l.append("g");h.attr("class","mindmap-nodes"),await qge(i,h,a,-1,s);let f=await nJe(a,s);rJe(u,f),iJe(i,f),Ao(void 0,l,s.mindmap?.padding??or.mindmap.padding,s.mindmap?.useMaxWidth??or.mindmap.useMaxWidth)},"draw"),Xge={draw:aJe}});var sJe,oJe,Kge,Qge=N(()=>{"use strict";Ys();sJe=o(t=>{let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)t["lineColor"+r]=t["lineColor"+r]||t["cScaleInv"+r],ca(t["lineColor"+r])?t["lineColor"+r]=Dt(t["lineColor"+r],20):t["lineColor"+r]=Ot(t["lineColor"+r],20);for(let r=0;r<t.THEME_COLOR_LIMIT;r++){let n=""+(17-3*r);e+=` | |
| 2190 | + .section-${r-1} rect, .section-${r-1} path, .section-${r-1} circle, .section-${r-1} polygon, .section-${r-1} path { | |
| 2191 | + fill: ${t["cScale"+r]}; | |
| 2192 | + } | |
| 2193 | + .section-${r-1} text { | |
| 2194 | + fill: ${t["cScaleLabel"+r]}; | |
| 2195 | + } | |
| 2196 | + .node-icon-${r-1} { | |
| 2197 | + font-size: 40px; | |
| 2198 | + color: ${t["cScaleLabel"+r]}; | |
| 2199 | + } | |
| 2200 | + .section-edge-${r-1}{ | |
| 2201 | + stroke: ${t["cScale"+r]}; | |
| 2202 | + } | |
| 2203 | + .edge-depth-${r-1}{ | |
| 2204 | + stroke-width: ${n}; | |
| 2205 | + } | |
| 2206 | + .section-${r-1} line { | |
| 2207 | + stroke: ${t["cScaleInv"+r]} ; | |
| 2208 | + stroke-width: 3; | |
| 2209 | + } | |
| 2210 | + | |
| 2211 | + .disabled, .disabled circle, .disabled text { | |
| 2212 | + fill: lightgray; | |
| 2213 | + } | |
| 2214 | + .disabled text { | |
| 2215 | + fill: #efefef; | |
| 2216 | + } | |
| 2217 | + `}return e},"genSections"),oJe=o(t=>` | |
| 2218 | + .edge { | |
| 2219 | + stroke-width: 3; | |
| 2220 | + } | |
| 2221 | + ${sJe(t)} | |
| 2222 | + .section-root rect, .section-root path, .section-root circle, .section-root polygon { | |
| 2223 | + fill: ${t.git0}; | |
| 2224 | + } | |
| 2225 | + .section-root text { | |
| 2226 | + fill: ${t.gitBranchLabel0}; | |
| 2227 | + } | |
| 2228 | + .icon-container { | |
| 2229 | + height:100%; | |
| 2230 | + display: flex; | |
| 2231 | + justify-content: center; | |
| 2232 | + align-items: center; | |
| 2233 | + } | |
| 2234 | + .edge { | |
| 2235 | + fill: none; | |
| 2236 | + } | |
| 2237 | + .mindmap-node-label { | |
| 2238 | + dy: 1em; | |
| 2239 | + alignment-baseline: middle; | |
| 2240 | + text-anchor: middle; | |
| 2241 | + dominant-baseline: middle; | |
| 2242 | + text-align: center; | |
| 2243 | + } | |
| 2244 | +`,"getStyles"),Kge=oJe});var Zge={};hr(Zge,{diagram:()=>lJe});var lJe,Jge=N(()=>{"use strict";Spe();_pe();jge();Qge();lJe={db:Ape,renderer:Xge,parser:Epe,styles:Kge}});var DB,r1e,n1e=N(()=>{"use strict";DB=function(){var t=o(function(A,S,_,I){for(_=_||{},I=A.length;I--;_[A[I]]=S);return _},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],w=[1,38],C={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(S,_,I,D,k,L,R){var O=L.length-1;switch(k){case 6:case 7:return D;case 8:D.getLogger().trace("Stop NL ");break;case 9:D.getLogger().trace("Stop EOF ");break;case 11:D.getLogger().trace("Stop NL2 ");break;case 12:D.getLogger().trace("Stop EOF2 ");break;case 15:D.getLogger().info("Node: ",L[O-1].id),D.addNode(L[O-2].length,L[O-1].id,L[O-1].descr,L[O-1].type,L[O]);break;case 16:D.getLogger().info("Node: ",L[O].id),D.addNode(L[O-1].length,L[O].id,L[O].descr,L[O].type);break;case 17:D.getLogger().trace("Icon: ",L[O]),D.decorateNode({icon:L[O]});break;case 18:case 23:D.decorateNode({class:L[O]});break;case 19:D.getLogger().trace("SPACELIST");break;case 20:D.getLogger().trace("Node: ",L[O-1].id),D.addNode(0,L[O-1].id,L[O-1].descr,L[O-1].type,L[O]);break;case 21:D.getLogger().trace("Node: ",L[O].id),D.addNode(0,L[O].id,L[O].descr,L[O].type);break;case 22:D.decorateNode({icon:L[O]});break;case 27:D.getLogger().trace("node found ..",L[O-2]),this.$={id:L[O-1],descr:L[O-1],type:D.getType(L[O-2],L[O])};break;case 28:this.$={id:L[O],descr:L[O],type:0};break;case 29:D.getLogger().trace("node found ..",L[O-3]),this.$={id:L[O-3],descr:L[O-1],type:D.getType(L[O-2],L[O])};break;case 30:this.$=L[O-1]+L[O];break;case 31:this.$=L[O];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:w}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:w}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(S,_){if(_.recoverable)this.trace(S);else{var I=new Error(S);throw I.hash=_,I}},"parseError"),parse:o(function(S){var _=this,I=[0],D=[],k=[null],L=[],R=this.table,O="",M=0,B=0,F=0,P=2,z=1,$=L.slice.call(arguments,1),H=Object.create(this.lexer),Q={yy:{}};for(var j in this.yy)Object.prototype.hasOwnProperty.call(this.yy,j)&&(Q.yy[j]=this.yy[j]);H.setInput(S,Q.yy),Q.yy.lexer=H,Q.yy.parser=this,typeof H.yylloc>"u"&&(H.yylloc={});var ie=H.yylloc;L.push(ie);var ne=H.options&&H.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function le(ze){I.length=I.length-2*ze,k.length=k.length-ze,L.length=L.length-ze}o(le,"popStack");function he(){var ze;return ze=D.pop()||H.lex()||z,typeof ze!="number"&&(ze instanceof Array&&(D=ze,ze=D.pop()),ze=_.symbols_[ze]||ze),ze}o(he,"lex");for(var K,X,te,J,se,ue,Z={},Se,ce,ae,Oe;;){if(te=I[I.length-1],this.defaultActions[te]?J=this.defaultActions[te]:((K===null||typeof K>"u")&&(K=he()),J=R[te]&&R[te][K]),typeof J>"u"||!J.length||!J[0]){var ge="";Oe=[];for(Se in R[te])this.terminals_[Se]&&Se>P&&Oe.push("'"+this.terminals_[Se]+"'");H.showPosition?ge="Parse error on line "+(M+1)+`: | |
| 2245 | +`+H.showPosition()+` | |
| 2246 | +Expecting `+Oe.join(", ")+", got '"+(this.terminals_[K]||K)+"'":ge="Parse error on line "+(M+1)+": Unexpected "+(K==z?"end of input":"'"+(this.terminals_[K]||K)+"'"),this.parseError(ge,{text:H.match,token:this.terminals_[K]||K,line:H.yylineno,loc:ie,expected:Oe})}if(J[0]instanceof Array&&J.length>1)throw new Error("Parse Error: multiple actions possible at state: "+te+", token: "+K);switch(J[0]){case 1:I.push(K),k.push(H.yytext),L.push(H.yylloc),I.push(J[1]),K=null,X?(K=X,X=null):(B=H.yyleng,O=H.yytext,M=H.yylineno,ie=H.yylloc,F>0&&F--);break;case 2:if(ce=this.productions_[J[1]][1],Z.$=k[k.length-ce],Z._$={first_line:L[L.length-(ce||1)].first_line,last_line:L[L.length-1].last_line,first_column:L[L.length-(ce||1)].first_column,last_column:L[L.length-1].last_column},ne&&(Z._$.range=[L[L.length-(ce||1)].range[0],L[L.length-1].range[1]]),ue=this.performAction.apply(Z,[O,B,M,Q.yy,J[1],k,L].concat($)),typeof ue<"u")return ue;ce&&(I=I.slice(0,-1*ce*2),k=k.slice(0,-1*ce),L=L.slice(0,-1*ce)),I.push(this.productions_[J[1]][0]),k.push(Z.$),L.push(Z._$),ae=R[I[I.length-2]][I[I.length-1]],I.push(ae);break;case 3:return!0}}return!0},"parse")},T=function(){var A={EOF:1,parseError:o(function(_,I){if(this.yy.parser)this.yy.parser.parseError(_,I);else throw new Error(_)},"parseError"),setInput:o(function(S,_){return this.yy=_||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var _=S.match(/(?:\r\n?|\n).*/g);return _?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var _=S.length,I=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-_),this.offset-=_;var D=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),I.length-1&&(this.yylineno-=I.length-1);var k=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:I?(I.length===D.length?this.yylloc.first_column:0)+D[D.length-I.length].length-I[0].length:this.yylloc.first_column-_},this.options.ranges&&(this.yylloc.range=[k[0],k[0]+this.yyleng-_]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 2247 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),_=new Array(S.length+1).join("-");return S+this.upcomingInput()+` | |
| 2248 | +`+_+"^"},"showPosition"),test_match:o(function(S,_){var I,D,k;if(this.options.backtrack_lexer&&(k={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(k.yylloc.range=this.yylloc.range.slice(0))),D=S[0].match(/(?:\r\n?|\n).*/g),D&&(this.yylineno+=D.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:D?D[D.length-1].length-D[D.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],I=this.performAction.call(this,this.yy,this,_,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),I)return I;if(this._backtrack){for(var L in k)this[L]=k[L];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,_,I,D;this._more||(this.yytext="",this.match="");for(var k=this._currentRules(),L=0;L<k.length;L++)if(I=this._input.match(this.rules[k[L]]),I&&(!_||I[0].length>_[0].length)){if(_=I,D=L,this.options.backtrack_lexer){if(S=this.test_match(I,k[L]),S!==!1)return S;if(this._backtrack){_=!1;continue}else return!1}else if(!this.options.flex)break}return _?(S=this.test_match(_,k[D]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 2249 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var _=this.next();return _||this.lex()},"lex"),begin:o(function(_){this.conditionStack.push(_)},"begin"),popState:o(function(){var _=this.conditionStack.length-1;return _>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(_){return _=this.conditionStack.length-1-Math.abs(_||0),_>=0?this.conditionStack[_]:"INITIAL"},"topState"),pushState:o(function(_){this.begin(_)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(_,I,D,k){var L=k;switch(D){case 0:return this.pushState("shapeData"),I.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let R=/\n\s*/g;return I.yytext=I.yytext.replace(R,"<br/>"),24;break;case 4:return 24;case 5:this.popState();break;case 6:return _.getLogger().trace("Found comment",I.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:_.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return _.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:_.getLogger().trace("end icon"),this.popState();break;case 16:return _.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return _.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return _.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return _.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:_.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return _.getLogger().trace("description:",I.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),_.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),_.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),_.getLogger().trace("node end ...",I.yytext),"NODE_DEND";break;case 36:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),_.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),_.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return _.getLogger().trace("Long description:",I.yytext),21;break;case 42:return _.getLogger().trace("Long description:",I.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return A}();C.lexer=T;function E(){this.yy={}}return o(E,"Parser"),E.prototype=C,C.Parser=E,new E}();DB.parser=DB;r1e=DB});var nl,RB,LB,NB,fJe,dJe,i1e,pJe,mJe,Yi,gJe,yJe,vJe,xJe,bJe,wJe,TJe,a1e,s1e=N(()=>{"use strict";zt();gr();vt();Ya();Ew();nl=[],RB=[],LB=0,NB={},fJe=o(()=>{nl=[],RB=[],LB=0,NB={}},"clear"),dJe=o(t=>{if(nl.length===0)return null;let e=nl[0].level,r=null;for(let n=nl.length-1;n>=0;n--)if(nl[n].level===e&&!r&&(r=nl[n]),nl[n].level<e)throw new Error('Items without section detected, found section ("'+nl[n].label+'")');return t===r?.level?null:r},"getSection"),i1e=o(function(){return RB},"getSections"),pJe=o(function(){let t=[],e=[],r=i1e(),n=me();for(let i of r){let a={id:i.id,label:Tr(i.label??"",n),isGroup:!0,ticket:i.ticket,shape:"kanbanSection",level:i.level,look:n.look};e.push(a);let s=nl.filter(l=>l.parentId===i.id);for(let l of s){let u={id:l.id,parentId:i.id,label:Tr(l.label??"",n),isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:me()}},"getData"),mJe=o((t,e,r,n,i)=>{let a=me(),s=a.mindmap?.padding??or.mindmap.padding;switch(n){case Yi.ROUNDED_RECT:case Yi.RECT:case Yi.HEXAGON:s*=2}let l={id:Tr(e,a)||"kbn"+LB++,level:t,label:Tr(r,a),width:a.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(i!==void 0){let h;i.includes(` | |
| 2250 | +`)?h=i+` | |
| 2251 | +`:h=`{ | |
| 2252 | +`+i+` | |
| 2253 | +}`;let f=cm(h,{schema:lm});if(f.shape&&(f.shape!==f.shape.toLowerCase()||f.shape.includes("_")))throw new Error(`No such shape: ${f.shape}. Shape names should be lowercase.`);f?.shape&&f.shape==="kanbanItem"&&(l.shape=f?.shape),f?.label&&(l.label=f?.label),f?.icon&&(l.icon=f?.icon.toString()),f?.assigned&&(l.assigned=f?.assigned.toString()),f?.ticket&&(l.ticket=f?.ticket.toString()),f?.priority&&(l.priority=f?.priority)}let u=dJe(t);u?l.parentId=u.id||"kbn"+LB++:RB.push(l),nl.push(l)},"addNode"),Yi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},gJe=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Yi.RECT;case"(":return e===")"?Yi.ROUNDED_RECT:Yi.CLOUD;case"((":return Yi.CIRCLE;case")":return Yi.CLOUD;case"))":return Yi.BANG;case"{{":return Yi.HEXAGON;default:return Yi.DEFAULT}},"getType"),yJe=o((t,e)=>{NB[t]=e},"setElementForId"),vJe=o(t=>{if(!t)return;let e=me(),r=nl[nl.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.cssClasses=Tr(t.class,e))},"decorateNode"),xJe=o(t=>{switch(t){case Yi.DEFAULT:return"no-border";case Yi.RECT:return"rect";case Yi.ROUNDED_RECT:return"rounded-rect";case Yi.CIRCLE:return"circle";case Yi.CLOUD:return"cloud";case Yi.BANG:return"bang";case Yi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),bJe=o(()=>Y,"getLogger"),wJe=o(t=>NB[t],"getElementById"),TJe={clear:fJe,addNode:mJe,getSections:i1e,getData:pJe,nodeType:Yi,getType:gJe,setElementForId:yJe,decorateNode:vJe,type2Str:xJe,getLogger:bJe,getElementById:wJe},a1e=TJe});var kJe,o1e,l1e=N(()=>{"use strict";zt();vt();Vc();Ei();Ya();Hw();eT();kJe=o(async(t,e,r,n)=>{Y.debug(`Rendering kanban diagram | |
| 2254 | +`+t);let a=n.db.getData(),s=me();s.htmlLabels=!1;let l=sa(e),u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await ym(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,w=-b*3/2+g,C=w,T=a.nodes.filter(S=>S.parentId===v.id);for(let S of T){if(S.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");S.x=v.x,S.width=b-1.5*p;let I=(await vm(h,S,{config:s})).node().getBBox();S.y=C+I.height/2,await k2(S),C=S.y+I.height/2+p/2}let E=x.cluster.select("rect"),A=Math.max(C-w+3*p,50)+(g-25);E.attr("height",A)}Ao(void 0,l,s.mindmap?.padding??or.kanban.padding,s.mindmap?.useMaxWidth??or.kanban.useMaxWidth)},"draw"),o1e={draw:kJe}});var EJe,SJe,c1e,u1e=N(()=>{"use strict";Ys();EJe=o(t=>{let e="";for(let n=0;n<t.THEME_COLOR_LIMIT;n++)t["lineColor"+n]=t["lineColor"+n]||t["cScaleInv"+n],ca(t["lineColor"+n])?t["lineColor"+n]=Dt(t["lineColor"+n],20):t["lineColor"+n]=Ot(t["lineColor"+n],20);let r=o((n,i)=>t.darkMode?Ot(n,i):Dt(n,i),"adjuster");for(let n=0;n<t.THEME_COLOR_LIMIT;n++){let i=""+(17-3*n);e+=` | |
| 2255 | + .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} polygon, .section-${n-1} path { | |
| 2256 | + fill: ${r(t["cScale"+n],10)}; | |
| 2257 | + stroke: ${r(t["cScale"+n],10)}; | |
| 2258 | + | |
| 2259 | + } | |
| 2260 | + .section-${n-1} text { | |
| 2261 | + fill: ${t["cScaleLabel"+n]}; | |
| 2262 | + } | |
| 2263 | + .node-icon-${n-1} { | |
| 2264 | + font-size: 40px; | |
| 2265 | + color: ${t["cScaleLabel"+n]}; | |
| 2266 | + } | |
| 2267 | + .section-edge-${n-1}{ | |
| 2268 | + stroke: ${t["cScale"+n]}; | |
| 2269 | + } | |
| 2270 | + .edge-depth-${n-1}{ | |
| 2271 | + stroke-width: ${i}; | |
| 2272 | + } | |
| 2273 | + .section-${n-1} line { | |
| 2274 | + stroke: ${t["cScaleInv"+n]} ; | |
| 2275 | + stroke-width: 3; | |
| 2276 | + } | |
| 2277 | + | |
| 2278 | + .disabled, .disabled circle, .disabled text { | |
| 2279 | + fill: lightgray; | |
| 2280 | + } | |
| 2281 | + .disabled text { | |
| 2282 | + fill: #efefef; | |
| 2283 | + } | |
| 2284 | + | |
| 2285 | + .node rect, | |
| 2286 | + .node circle, | |
| 2287 | + .node ellipse, | |
| 2288 | + .node polygon, | |
| 2289 | + .node path { | |
| 2290 | + fill: ${t.background}; | |
| 2291 | + stroke: ${t.nodeBorder}; | |
| 2292 | + stroke-width: 1px; | |
| 2293 | + } | |
| 2294 | + | |
| 2295 | + .kanban-ticket-link { | |
| 2296 | + fill: ${t.background}; | |
| 2297 | + stroke: ${t.nodeBorder}; | |
| 2298 | + text-decoration: underline; | |
| 2299 | + } | |
| 2300 | + `}return e},"genSections"),SJe=o(t=>` | |
| 2301 | + .edge { | |
| 2302 | + stroke-width: 3; | |
| 2303 | + } | |
| 2304 | + ${EJe(t)} | |
| 2305 | + .section-root rect, .section-root path, .section-root circle, .section-root polygon { | |
| 2306 | + fill: ${t.git0}; | |
| 2307 | + } | |
| 2308 | + .section-root text { | |
| 2309 | + fill: ${t.gitBranchLabel0}; | |
| 2310 | + } | |
| 2311 | + .icon-container { | |
| 2312 | + height:100%; | |
| 2313 | + display: flex; | |
| 2314 | + justify-content: center; | |
| 2315 | + align-items: center; | |
| 2316 | + } | |
| 2317 | + .edge { | |
| 2318 | + fill: none; | |
| 2319 | + } | |
| 2320 | + .cluster-label, .label { | |
| 2321 | + color: ${t.textColor}; | |
| 2322 | + fill: ${t.textColor}; | |
| 2323 | + } | |
| 2324 | + .kanban-label { | |
| 2325 | + dy: 1em; | |
| 2326 | + alignment-baseline: middle; | |
| 2327 | + text-anchor: middle; | |
| 2328 | + dominant-baseline: middle; | |
| 2329 | + text-align: center; | |
| 2330 | + } | |
| 2331 | +`,"getStyles"),c1e=SJe});var h1e={};hr(h1e,{diagram:()=>CJe});var CJe,f1e=N(()=>{"use strict";n1e();s1e();l1e();u1e();CJe={db:a1e,renderer:o1e,parser:r1e,styles:c1e}});var MB,d4,m1e=N(()=>{"use strict";MB=function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],n=[1,5,10,12],i={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(n,[2,8]),t(n,[2,9]),{19:[1,16]},t(n,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(n,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,w=2,C=1,T=m.slice.call(arguments,1),E=Object.create(this.lexer),A={yy:{}};for(var S in this.yy)Object.prototype.hasOwnProperty.call(this.yy,S)&&(A.yy[S]=this.yy[S]);E.setInput(u,A.yy),A.yy.lexer=E,A.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var _=E.yylloc;m.push(_);var I=E.options&&E.options.ranges;typeof A.yy.parseError=="function"?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function D(ie){f.length=f.length-2*ie,p.length=p.length-ie,m.length=m.length-ie}o(D,"popStack");function k(){var ie;return ie=d.pop()||E.lex()||C,typeof ie!="number"&&(ie instanceof Array&&(d=ie,ie=d.pop()),ie=h.symbols_[ie]||ie),ie}o(k,"lex");for(var L,R,O,M,B,F,P={},z,$,H,Q;;){if(O=f[f.length-1],this.defaultActions[O]?M=this.defaultActions[O]:((L===null||typeof L>"u")&&(L=k()),M=g[O]&&g[O][L]),typeof M>"u"||!M.length||!M[0]){var j="";Q=[];for(z in g[O])this.terminals_[z]&&z>w&&Q.push("'"+this.terminals_[z]+"'");E.showPosition?j="Parse error on line "+(v+1)+`: | |
| 2332 | +`+E.showPosition()+` | |
| 2333 | +Expecting `+Q.join(", ")+", got '"+(this.terminals_[L]||L)+"'":j="Parse error on line "+(v+1)+": Unexpected "+(L==C?"end of input":"'"+(this.terminals_[L]||L)+"'"),this.parseError(j,{text:E.match,token:this.terminals_[L]||L,line:E.yylineno,loc:_,expected:Q})}if(M[0]instanceof Array&&M.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+L);switch(M[0]){case 1:f.push(L),p.push(E.yytext),m.push(E.yylloc),f.push(M[1]),L=null,R?(L=R,R=null):(x=E.yyleng,y=E.yytext,v=E.yylineno,_=E.yylloc,b>0&&b--);break;case 2:if($=this.productions_[M[1]][1],P.$=p[p.length-$],P._$={first_line:m[m.length-($||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-($||1)].first_column,last_column:m[m.length-1].last_column},I&&(P._$.range=[m[m.length-($||1)].range[0],m[m.length-1].range[1]]),F=this.performAction.apply(P,[y,x,v,A.yy,M[1],p,m].concat(T)),typeof F<"u")return F;$&&(f=f.slice(0,-1*$*2),p=p.slice(0,-1*$),m=m.slice(0,-1*$)),f.push(this.productions_[M[1]][0]),p.push(P.$),m.push(P._$),H=g[f[f.length-2]][f[f.length-1]],f.push(H);break;case 3:return!0}}return!0},"parse")},a=function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 2334 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+` | |
| 2335 | +`+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;m<p.length;m++)if(f=this._input.match(this.rules[p[m]]),f&&(!h||f[0].length>h[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 2336 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;break;case 5:return 20;case 6:return this.popState("escaped_text"),18;break;case 7:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return l}();i.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=i,i.Parser=s,new s}();MB.parser=MB;d4=MB});var XS,jS,YS,LJe,IB,RJe,OB,NJe,MJe,IJe,OJe,g1e,y1e=N(()=>{"use strict";zt();gr();mi();XS=[],jS=[],YS=new Map,LJe=o(()=>{XS=[],jS=[],YS=new Map,Ar()},"clear"),IB=class{constructor(e,r,n=0){this.source=e;this.target=r;this.value=n}static{o(this,"SankeyLink")}},RJe=o((t,e,r)=>{XS.push(new IB(t,e,r))},"addLink"),OB=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},NJe=o(t=>{t=Ze.sanitizeText(t,me());let e=YS.get(t);return e===void 0&&(e=new OB(t),YS.set(t,e),jS.push(e)),e},"findOrCreateNode"),MJe=o(()=>jS,"getNodes"),IJe=o(()=>XS,"getLinks"),OJe=o(()=>({nodes:jS.map(t=>({id:t.ID})),links:XS.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),g1e={nodesMap:YS,getConfig:o(()=>me().sankey,"getConfig"),getNodes:MJe,getLinks:IJe,getGraph:OJe,addLink:RJe,findOrCreateNode:NJe,getAccTitle:Rr,setAccTitle:Lr,getAccDescription:Mr,setAccDescription:Nr,getDiagramTitle:Ir,setDiagramTitle:$r,clear:LJe}});function p4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r<n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r<i||r===void 0&&i>=i)&&(r=i)}return r}var v1e=N(()=>{"use strict";o(p4,"max")});function cy(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var x1e=N(()=>{"use strict";o(cy,"min")});function uy(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}var b1e=N(()=>{"use strict";o(uy,"sum")});var PB=N(()=>{"use strict";v1e();x1e();b1e()});function PJe(t){return t.target.depth}function BB(t){return t.depth}function FB(t,e){return e-1-t.height}function m4(t,e){return t.sourceLinks.length?t.depth:e-1}function $B(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?cy(t.sourceLinks,PJe)-1:0}var zB=N(()=>{"use strict";PB();o(PJe,"targetDepth");o(BB,"left");o(FB,"right");o(m4,"justify");o($B,"center")});function hy(t){return function(){return t}}var w1e=N(()=>{"use strict";o(hy,"constant")});function T1e(t,e){return KS(t.source,e.source)||t.index-e.index}function k1e(t,e){return KS(t.target,e.target)||t.index-e.index}function KS(t,e){return t.y0-e.y0}function GB(t){return t.value}function BJe(t){return t.index}function FJe(t){return t.nodes}function $Je(t){return t.links}function E1e(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function S1e({nodes:t}){for(let e of t){let r=e.y0,n=r;for(let i of e.sourceLinks)i.y0=r+i.width/2,r+=i.width;for(let i of e.targetLinks)i.y1=n+i.width/2,n+=i.width}}function QS(){let t=0,e=0,r=1,n=1,i=24,a=8,s,l=BJe,u=m4,h,f,d=FJe,p=$Je,m=6;function g(){let O={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(O),v(O),x(O),b(O),T(O),S1e(O),O}o(g,"sankey"),g.update=function(O){return S1e(O),O},g.nodeId=function(O){return arguments.length?(l=typeof O=="function"?O:hy(O),g):l},g.nodeAlign=function(O){return arguments.length?(u=typeof O=="function"?O:hy(O),g):u},g.nodeSort=function(O){return arguments.length?(h=O,g):h},g.nodeWidth=function(O){return arguments.length?(i=+O,g):i},g.nodePadding=function(O){return arguments.length?(a=s=+O,g):a},g.nodes=function(O){return arguments.length?(d=typeof O=="function"?O:hy(O),g):d},g.links=function(O){return arguments.length?(p=typeof O=="function"?O:hy(O),g):p},g.linkSort=function(O){return arguments.length?(f=O,g):f},g.size=function(O){return arguments.length?(t=e=0,r=+O[0],n=+O[1],g):[r-t,n-e]},g.extent=function(O){return arguments.length?(t=+O[0][0],r=+O[1][0],e=+O[0][1],n=+O[1][1],g):[[t,e],[r,n]]},g.iterations=function(O){return arguments.length?(m=+O,g):m};function y({nodes:O,links:M}){for(let[F,P]of O.entries())P.index=F,P.sourceLinks=[],P.targetLinks=[];let B=new Map(O.map((F,P)=>[l(F,P,O),F]));for(let[F,P]of M.entries()){P.index=F;let{source:z,target:$}=P;typeof z!="object"&&(z=P.source=E1e(B,z)),typeof $!="object"&&($=P.target=E1e(B,$)),z.sourceLinks.push(P),$.targetLinks.push(P)}if(f!=null)for(let{sourceLinks:F,targetLinks:P}of O)F.sort(f),P.sort(f)}o(y,"computeNodeLinks");function v({nodes:O}){for(let M of O)M.value=M.fixedValue===void 0?Math.max(uy(M.sourceLinks,GB),uy(M.targetLinks,GB)):M.fixedValue}o(v,"computeNodeValues");function x({nodes:O}){let M=O.length,B=new Set(O),F=new Set,P=0;for(;B.size;){for(let z of B){z.depth=P;for(let{target:$}of z.sourceLinks)F.add($)}if(++P>M)throw new Error("circular link");B=F,F=new Set}}o(x,"computeNodeDepths");function b({nodes:O}){let M=O.length,B=new Set(O),F=new Set,P=0;for(;B.size;){for(let z of B){z.height=P;for(let{source:$}of z.targetLinks)F.add($)}if(++P>M)throw new Error("circular link");B=F,F=new Set}}o(b,"computeNodeHeights");function w({nodes:O}){let M=p4(O,P=>P.depth)+1,B=(r-t-i)/(M-1),F=new Array(M);for(let P of O){let z=Math.max(0,Math.min(M-1,Math.floor(u.call(null,P,M))));P.layer=z,P.x0=t+z*B,P.x1=P.x0+i,F[z]?F[z].push(P):F[z]=[P]}if(h)for(let P of F)P.sort(h);return F}o(w,"computeNodeLayers");function C(O){let M=cy(O,B=>(n-e-(B.length-1)*s)/uy(B,GB));for(let B of O){let F=e;for(let P of B){P.y0=F,P.y1=F+P.value*M,F=P.y1+s;for(let z of P.sourceLinks)z.width=z.value*M}F=(n-F+s)/(B.length+1);for(let P=0;P<B.length;++P){let z=B[P];z.y0+=F*(P+1),z.y1+=F*(P+1)}k(B)}}o(C,"initializeNodeBreadths");function T(O){let M=w(O);s=Math.min(a,(n-e)/(p4(M,B=>B.length)-1)),C(M);for(let B=0;B<m;++B){let F=Math.pow(.99,B),P=Math.max(1-F,(B+1)/m);A(M,F,P),E(M,F,P)}}o(T,"computeNodeBreadths");function E(O,M,B){for(let F=1,P=O.length;F<P;++F){let z=O[F];for(let $ of z){let H=0,Q=0;for(let{source:ie,value:ne}of $.targetLinks){let le=ne*($.layer-ie.layer);H+=L(ie,$)*le,Q+=le}if(!(Q>0))continue;let j=(H/Q-$.y0)*M;$.y0+=j,$.y1+=j,D($)}h===void 0&&z.sort(KS),S(z,B)}}o(E,"relaxLeftToRight");function A(O,M,B){for(let F=O.length,P=F-2;P>=0;--P){let z=O[P];for(let $ of z){let H=0,Q=0;for(let{target:ie,value:ne}of $.sourceLinks){let le=ne*(ie.layer-$.layer);H+=R($,ie)*le,Q+=le}if(!(Q>0))continue;let j=(H/Q-$.y0)*M;$.y0+=j,$.y1+=j,D($)}h===void 0&&z.sort(KS),S(z,B)}}o(A,"relaxRightToLeft");function S(O,M){let B=O.length>>1,F=O[B];I(O,F.y0-s,B-1,M),_(O,F.y1+s,B+1,M),I(O,n,O.length-1,M),_(O,e,0,M)}o(S,"resolveCollisions");function _(O,M,B,F){for(;B<O.length;++B){let P=O[B],z=(M-P.y0)*F;z>1e-6&&(P.y0+=z,P.y1+=z),M=P.y1+s}}o(_,"resolveCollisionsTopToBottom");function I(O,M,B,F){for(;B>=0;--B){let P=O[B],z=(P.y1-M)*F;z>1e-6&&(P.y0-=z,P.y1-=z),M=P.y0-s}}o(I,"resolveCollisionsBottomToTop");function D({sourceLinks:O,targetLinks:M}){if(f===void 0){for(let{source:{sourceLinks:B}}of M)B.sort(k1e);for(let{target:{targetLinks:B}}of O)B.sort(T1e)}}o(D,"reorderNodeLinks");function k(O){if(f===void 0)for(let{sourceLinks:M,targetLinks:B}of O)M.sort(k1e),B.sort(T1e)}o(k,"reorderLinks");function L(O,M){let B=O.y0-(O.sourceLinks.length-1)*s/2;for(let{target:F,width:P}of O.sourceLinks){if(F===M)break;B+=P+s}for(let{source:F,width:P}of M.targetLinks){if(F===O)break;B-=P}return B}o(L,"targetTop");function R(O,M){let B=M.y0-(M.targetLinks.length-1)*s/2;for(let{source:F,width:P}of M.targetLinks){if(F===O)break;B+=P+s}for(let{target:F,width:P}of O.sourceLinks){if(F===M)break;B-=P}return B}return o(R,"sourceTop"),g}var C1e=N(()=>{"use strict";PB();zB();w1e();o(T1e,"ascendingSourceBreadth");o(k1e,"ascendingTargetBreadth");o(KS,"ascendingBreadth");o(GB,"value");o(BJe,"defaultId");o(FJe,"defaultNodes");o($Je,"defaultLinks");o(E1e,"find");o(S1e,"computeLinkBreadths");o(QS,"Sankey")});function HB(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function A1e(){return new HB}var VB,UB,Xp,zJe,WB,_1e=N(()=>{"use strict";VB=Math.PI,UB=2*VB,Xp=1e-6,zJe=UB-Xp;o(HB,"Path");o(A1e,"path");HB.prototype=A1e.prototype={constructor:HB,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,l=r-t,u=n-e,h=a-t,f=s-e,d=h*h+f*f;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>Xp)if(!(Math.abs(f*l-u*h)>Xp)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=n-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=i*Math.tan((VB-Math.acos((g+d-y)/(2*v*x)))/2),w=b/x,C=b/v;Math.abs(w-1)>Xp&&(this._+="L"+(t+w*h)+","+(e+w*f)),this._+="A"+i+","+i+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+C*l)+","+(this._y1=e+C*u)}},"arcTo"),arc:o(function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),l=r*Math.sin(n),u=t+s,h=e+l,f=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>Xp||Math.abs(this._y1-h)>Xp)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%UB+UB),d>zJe?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>Xp&&(this._+="A"+r+","+r+",0,"+ +(d>=VB)+","+f+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},"arc"),rect:o(function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};WB=A1e});var D1e=N(()=>{"use strict";_1e()});function ZS(t){return o(function(){return t},"constant")}var L1e=N(()=>{"use strict";o(ZS,"default")});function R1e(t){return t[0]}function N1e(t){return t[1]}var M1e=N(()=>{"use strict";o(R1e,"x");o(N1e,"y")});var I1e,O1e=N(()=>{"use strict";I1e=Array.prototype.slice});function GJe(t){return t.source}function VJe(t){return t.target}function UJe(t){var e=GJe,r=VJe,n=R1e,i=N1e,a=null;function s(){var l,u=I1e.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=WB()),t(a,+n.apply(this,(u[0]=h,u)),+i.apply(this,u),+n.apply(this,(u[0]=f,u)),+i.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(n=typeof l=="function"?l:ZS(+l),s):n},s.y=function(l){return arguments.length?(i=typeof l=="function"?l:ZS(+l),s):i},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function HJe(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function qB(){return UJe(HJe)}var P1e=N(()=>{"use strict";D1e();O1e();L1e();M1e();o(GJe,"linkSource");o(VJe,"linkTarget");o(UJe,"link");o(HJe,"curveHorizontal");o(qB,"linkHorizontal")});var B1e=N(()=>{"use strict";P1e()});function WJe(t){return[t.source.x1,t.y0]}function qJe(t){return[t.target.x0,t.y1]}function JS(){return qB().source(WJe).target(qJe)}var F1e=N(()=>{"use strict";B1e();o(WJe,"horizontalSource");o(qJe,"horizontalTarget");o(JS,"default")});var $1e=N(()=>{"use strict";C1e();zB();F1e()});var g4,z1e=N(()=>{"use strict";g4=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var YJe,XJe,G1e,V1e=N(()=>{"use strict";zt();dr();$1e();Ei();z1e();YJe={left:BB,right:FB,center:$B,justify:m4},XJe=o(function(t,e,r,n){let{securityLevel:i,sankey:a}=me(),s=A3.sankey,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=n.db.getGraph(),b=YJe[m];QS().nodeId(I=>I.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let T=gu(e9);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",I=>(I.uid=g4.next("node-")).id).attr("transform",function(I){return"translate("+I.x0+","+I.y0+")"}).attr("x",I=>I.x0).attr("y",I=>I.y0).append("rect").attr("height",I=>I.y1-I.y0).attr("width",I=>I.x1-I.x0).attr("fill",I=>T(I.id));let E=o(({id:I,value:D})=>v?`${I} | |
| 2337 | +${g}${Math.round(D*100)/100}${y}`:I,"getText");h.append("g").attr("class","node-labels").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",I=>I.x0<f/2?I.x1+6:I.x0-6).attr("y",I=>(I.y1+I.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",I=>I.x0<f/2?"start":"end").text(E);let A=h.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(x.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),S=a?.linkColor??"gradient";if(S==="gradient"){let I=A.append("linearGradient").attr("id",D=>(D.uid=g4.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",D=>D.source.x1).attr("x2",D=>D.target.x0);I.append("stop").attr("offset","0%").attr("stop-color",D=>T(D.source.id)),I.append("stop").attr("offset","100%").attr("stop-color",D=>T(D.target.id))}let _;switch(S){case"gradient":_=o(I=>I.uid,"coloring");break;case"source":_=o(I=>T(I.source.id),"coloring");break;case"target":_=o(I=>T(I.target.id),"coloring");break;default:_=S}A.append("path").attr("d",JS()).attr("stroke",_).attr("stroke-width",I=>Math.max(1,I.width)),Ao(void 0,h,0,p)},"draw"),G1e={draw:XJe}});var U1e,H1e=N(()=>{"use strict";U1e=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` | |
| 2338 | +`).trim(),"prepareTextForParsing")});var jJe,W1e,q1e=N(()=>{"use strict";jJe=o(t=>`.label { | |
| 2339 | + font-family: ${t.fontFamily}; | |
| 2340 | + }`,"getStyles"),W1e=jJe});var Y1e={};hr(Y1e,{diagram:()=>QJe});var KJe,QJe,X1e=N(()=>{"use strict";m1e();y1e();V1e();H1e();q1e();KJe=d4.parse.bind(d4);d4.parse=t=>KJe(U1e(t));QJe={styles:W1e,parser:d4,db:g1e,renderer:G1e}});var Q1e,YB,tet,ret,net,iet,aet,Bf,XB=N(()=>{"use strict";ji();Ya();ir();mi();Q1e={packet:[]},YB=structuredClone(Q1e),tet=or.packet,ret=o(()=>{let t=Fi({...tet,...cr().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),net=o(()=>YB.packet,"getPacket"),iet=o(t=>{t.length>0&&YB.packet.push(t)},"pushWord"),aet=o(()=>{Ar(),YB=structuredClone(Q1e)},"clear"),Bf={pushWord:iet,getPacket:net,getConfig:ret,clear:aet,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var set,oet,cet,Z1e,J1e=N(()=>{"use strict";kp();vt();T1();XB();set=1e4,oet=o(t=>{$c(t,Bf);let e=-1,r=[],n=1,{bitsPerRow:i}=Bf.getConfig();for(let{start:a,end:s,label:l}of t.blocks){if(s&&s<a)throw new Error(`Packet block ${a} - ${s} is invalid. End must be greater than start.`);if(a!==e+1)throw new Error(`Packet block ${a} - ${s??a} is not contiguous. It should start from ${e+1}.`);for(e=s??a,Y.debug(`Packet block ${a} - ${e} with label ${l}`);r.length<=i+1&&Bf.getPacket().length<set;){let[u,h]=cet({start:a,end:s,label:l},n,i);if(r.push(u),u.end+1===n*i&&(Bf.pushWord(r),r=[],n++),!h)break;({start:a,end:s,label:l}=h)}}Bf.pushWord(r)},"populate"),cet=o((t,e,r)=>{if(t.end===void 0&&(t.end=t.start),t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);return t.end+1<=e*r?[t,void 0]:[{start:t.start,end:e*r-1,label:t.label},{start:e*r,end:t.end,label:t.label}]},"getNextFittingBlock"),Z1e={parse:o(async t=>{let e=await uo("packet",t);Y.debug(e),oet(e)},"parse")}});var uet,het,eye,tye=N(()=>{"use strict";Vc();Ei();uet=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=i.getPacket(),d=i.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=sa(e);y.attr("viewbox",`0 0 ${g} ${m}`),vn(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())het(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),het=o((t,e,r,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(n+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-i;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",n).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),eye={draw:uet}});var fet,rye,nye=N(()=>{"use strict";ir();fet={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},rye=o(({packet:t}={})=>{let e=Fi(fet,t);return` | |
| 2341 | + .packetByte { | |
| 2342 | + font-size: ${e.byteFontSize}; | |
| 2343 | + } | |
| 2344 | + .packetByte.start { | |
| 2345 | + fill: ${e.startByteColor}; | |
| 2346 | + } | |
| 2347 | + .packetByte.end { | |
| 2348 | + fill: ${e.endByteColor}; | |
| 2349 | + } | |
| 2350 | + .packetLabel { | |
| 2351 | + fill: ${e.labelColor}; | |
| 2352 | + font-size: ${e.labelFontSize}; | |
| 2353 | + } | |
| 2354 | + .packetTitle { | |
| 2355 | + fill: ${e.titleColor}; | |
| 2356 | + font-size: ${e.titleFontSize}; | |
| 2357 | + } | |
| 2358 | + .packetBlock { | |
| 2359 | + stroke: ${e.blockStrokeColor}; | |
| 2360 | + stroke-width: ${e.blockStrokeWidth}; | |
| 2361 | + fill: ${e.blockFillColor}; | |
| 2362 | + } | |
| 2363 | + `},"styles")});var iye={};hr(iye,{diagram:()=>det});var det,aye=N(()=>{"use strict";XB();J1e();tye();nye();det={parser:Z1e,db:Bf,renderer:eye,styles:rye}});var fy,lye,jp,get,yet,cye,vet,xet,bet,wet,Tet,ket,Eet,Kp,jB=N(()=>{"use strict";ji();Ya();ir();mi();fy={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},lye={axes:[],curves:[],options:fy},jp=structuredClone(lye),get=or.radar,yet=o(()=>Fi({...get,...cr().radar}),"getConfig"),cye=o(()=>jp.axes,"getAxes"),vet=o(()=>jp.curves,"getCurves"),xet=o(()=>jp.options,"getOptions"),bet=o(t=>{jp.axes=t.map(e=>({name:e.name,label:e.label??e.name}))},"setAxes"),wet=o(t=>{jp.curves=t.map(e=>({name:e.name,label:e.label??e.name,entries:Tet(e.entries)}))},"setCurves"),Tet=o(t=>{if(t[0].axis==null)return t.map(r=>r.value);let e=cye();if(e.length===0)throw new Error("Axes must be populated before curves for reference entries");return e.map(r=>{let n=t.find(i=>i.axis?.$refText===r.name);if(n===void 0)throw new Error("Missing entry for axis "+r.label);return n.value})},"computeCurveEntries"),ket=o(t=>{let e=t.reduce((r,n)=>(r[n.name]=n,r),{});jp.options={showLegend:e.showLegend?.value??fy.showLegend,ticks:e.ticks?.value??fy.ticks,max:e.max?.value??fy.max,min:e.min?.value??fy.min,graticule:e.graticule?.value??fy.graticule}},"setOptions"),Eet=o(()=>{Ar(),jp=structuredClone(lye)},"clear"),Kp={getAxes:cye,getCurves:vet,getOptions:xet,setAxes:bet,setCurves:wet,setOptions:ket,getConfig:yet,clear:Eet,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var Cet,uye,hye=N(()=>{"use strict";kp();vt();T1();jB();Cet=o(t=>{$c(t,Kp);let{axes:e,curves:r,options:n}=t;Kp.setAxes(e),Kp.setCurves(r),Kp.setOptions(n)},"populate"),uye={parse:o(async t=>{let e=await uo("radar",t);Y.debug(e),Cet(e)},"parse")}});function Ret(t,e,r,n,i,a,s){let l=e.length,u=Math.min(s.width,s.height)/2;r.forEach((h,f)=>{if(h.entries.length!==l)return;let d=h.entries.map((p,m)=>{let g=2*Math.PI*m/l-Math.PI/2,y=Net(p,n,i,u),v=y*Math.cos(g),x=y*Math.sin(g);return{x:v,y:x}});a==="circle"?t.append("path").attr("d",Met(d,s.curveTension)).attr("class",`radarCurve-${f}`):a==="polygon"&&t.append("polygon").attr("points",d.map(p=>`${p.x},${p.y}`).join(" ")).attr("class",`radarCurve-${f}`)})}function Net(t,e,r,n){let i=Math.min(Math.max(t,e),r);return n*(i-e)/(r-e)}function Met(t,e){let r=t.length,n=`M${t[0].x},${t[0].y}`;for(let i=0;i<r;i++){let a=t[(i-1+r)%r],s=t[i],l=t[(i+1)%r],u=t[(i+2)%r],h={x:s.x+(l.x-a.x)*e,y:s.y+(l.y-a.y)*e},f={x:l.x-(u.x-s.x)*e,y:l.y-(u.y-s.y)*e};n+=` C${h.x},${h.y} ${f.x},${f.y} ${l.x},${l.y}`}return`${n} Z`}function Iet(t,e,r,n){if(!r)return;let i=(n.width/2+n.marginRight)*3/4,a=-(n.height/2+n.marginTop)*3/4,s=20;e.forEach((l,u)=>{let h=t.append("g").attr("transform",`translate(${i}, ${a+u*s})`);h.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${u}`),h.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(l.label)})}var Aet,_et,Det,Let,fye,dye=N(()=>{"use strict";Vc();Aet=o((t,e,r,n)=>{let i=n.db,a=i.getAxes(),s=i.getCurves(),l=i.getOptions(),u=i.getConfig(),h=i.getDiagramTitle(),f=sa(e),d=_et(f,u),p=l.max??Math.max(...s.map(y=>Math.max(...y.entries))),m=l.min,g=Math.min(u.width,u.height)/2;Det(d,a,g,l.ticks,l.graticule),Let(d,a,g,u),Ret(d,a,s,m,p,l.graticule,u),Iet(d,s,l.showLegend,u),d.append("text").attr("class","radarTitle").text(h).attr("x",0).attr("y",-u.height/2-u.marginTop)},"draw"),_et=o((t,e)=>{let r=e.width+e.marginLeft+e.marginRight,n=e.height+e.marginTop+e.marginBottom,i={x:e.marginLeft+e.width/2,y:e.marginTop+e.height/2};return t.attr("viewbox",`0 0 ${r} ${n}`).attr("width",r).attr("height",n),t.append("g").attr("transform",`translate(${i.x}, ${i.y})`)},"drawFrame"),Det=o((t,e,r,n,i)=>{if(i==="circle")for(let a=0;a<n;a++){let s=r*(a+1)/n;t.append("circle").attr("r",s).attr("class","radarGraticule")}else if(i==="polygon"){let a=e.length;for(let s=0;s<n;s++){let l=r*(s+1)/n,u=e.map((h,f)=>{let d=2*f*Math.PI/a-Math.PI/2,p=l*Math.cos(d),m=l*Math.sin(d);return`${p},${m}`}).join(" ");t.append("polygon").attr("points",u).attr("class","radarGraticule")}}},"drawGraticule"),Let=o((t,e,r,n)=>{let i=e.length;for(let a=0;a<i;a++){let s=e[a].label,l=2*a*Math.PI/i-Math.PI/2;t.append("line").attr("x1",0).attr("y1",0).attr("x2",r*n.axisScaleFactor*Math.cos(l)).attr("y2",r*n.axisScaleFactor*Math.sin(l)).attr("class","radarAxisLine"),t.append("text").text(s).attr("x",r*n.axisLabelFactor*Math.cos(l)).attr("y",r*n.axisLabelFactor*Math.sin(l)).attr("class","radarAxisLabel")}},"drawAxes");o(Ret,"drawCurves");o(Net,"relativeRadius");o(Met,"closedRoundCurve");o(Iet,"drawLegend");fye={draw:Aet}});var Oet,Pet,pye,mye=N(()=>{"use strict";ir();_y();ji();Oet=o((t,e)=>{let r="";for(let n=0;n<t.THEME_COLOR_LIMIT;n++){let i=t[`cScale${n}`];r+=` | |
| 2364 | + .radarCurve-${n} { | |
| 2365 | + color: ${i}; | |
| 2366 | + fill: ${i}; | |
| 2367 | + fill-opacity: ${e.curveOpacity}; | |
| 2368 | + stroke: ${i}; | |
| 2369 | + stroke-width: ${e.curveStrokeWidth}; | |
| 2370 | + } | |
| 2371 | + .radarLegendBox-${n} { | |
| 2372 | + fill: ${i}; | |
| 2373 | + fill-opacity: ${e.curveOpacity}; | |
| 2374 | + stroke: ${i}; | |
| 2375 | + } | |
| 2376 | + `}return r},"genIndexStyles"),Pet=o(t=>{let e=oh(),r=cr(),n=Fi(e,r.themeVariables),i=Fi(n.radar,t);return{themeVariables:n,radarOptions:i}},"buildRadarStyleOptions"),pye=o(({radar:t}={})=>{let{themeVariables:e,radarOptions:r}=Pet(t);return` | |
| 2377 | + .radarTitle { | |
| 2378 | + font-size: ${e.fontSize}; | |
| 2379 | + color: ${e.titleColor}; | |
| 2380 | + dominant-baseline: hanging; | |
| 2381 | + text-anchor: middle; | |
| 2382 | + } | |
| 2383 | + .radarAxisLine { | |
| 2384 | + stroke: ${r.axisColor}; | |
| 2385 | + stroke-width: ${r.axisStrokeWidth}; | |
| 2386 | + } | |
| 2387 | + .radarAxisLabel { | |
| 2388 | + dominant-baseline: middle; | |
| 2389 | + text-anchor: middle; | |
| 2390 | + font-size: ${r.axisLabelFontSize}px; | |
| 2391 | + color: ${r.axisColor}; | |
| 2392 | + } | |
| 2393 | + .radarGraticule { | |
| 2394 | + fill: ${r.graticuleColor}; | |
| 2395 | + fill-opacity: ${r.graticuleOpacity}; | |
| 2396 | + stroke: ${r.graticuleColor}; | |
| 2397 | + stroke-width: ${r.graticuleStrokeWidth}; | |
| 2398 | + } | |
| 2399 | + .radarLegendText { | |
| 2400 | + text-anchor: start; | |
| 2401 | + font-size: ${r.legendFontSize}px; | |
| 2402 | + dominant-baseline: hanging; | |
| 2403 | + } | |
| 2404 | + ${Oet(e,r)} | |
| 2405 | + `},"styles")});var gye={};hr(gye,{diagram:()=>Bet});var Bet,yye=N(()=>{"use strict";jB();hye();dye();mye();Bet={parser:uye,db:Kp,renderer:fye,styles:pye}});var KB,bye,wye=N(()=>{"use strict";KB=function(){var t=o(function(w,C,T,E){for(T=T||{},E=w.length;E--;T[w[E]]=C);return T},"o"),e=[1,7],r=[1,13],n=[1,14],i=[1,15],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,21,28,29,30,31,32,40,44,47],d=[1,23],p=[1,24],m=[8,15,16,21,28,29,30,31,32,40,44,47],g=[8,15,16,21,27,28,29,30,31,32,40,44,47],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(C,T,E,A,S,_,I){var D=_.length-1;switch(S){case 4:A.getLogger().debug("Rule: separator (NL) ");break;case 5:A.getLogger().debug("Rule: separator (Space) ");break;case 6:A.getLogger().debug("Rule: separator (EOF) ");break;case 7:A.getLogger().debug("Rule: hierarchy: ",_[D-1]),A.setHierarchy(_[D-1]);break;case 8:A.getLogger().debug("Stop NL ");break;case 9:A.getLogger().debug("Stop EOF ");break;case 10:A.getLogger().debug("Stop NL2 ");break;case 11:A.getLogger().debug("Stop EOF2 ");break;case 12:A.getLogger().debug("Rule: statement: ",_[D]),typeof _[D].length=="number"?this.$=_[D]:this.$=[_[D]];break;case 13:A.getLogger().debug("Rule: statement #2: ",_[D-1]),this.$=[_[D-1]].concat(_[D]);break;case 14:A.getLogger().debug("Rule: link: ",_[D],C),this.$={edgeTypeStr:_[D],label:""};break;case 15:A.getLogger().debug("Rule: LABEL link: ",_[D-3],_[D-1],_[D]),this.$={edgeTypeStr:_[D],label:_[D-1]};break;case 18:let k=parseInt(_[D]),L=A.generateId();this.$={id:L,type:"space",label:"",width:k,children:[]};break;case 23:A.getLogger().debug("Rule: (nodeStatement link node) ",_[D-2],_[D-1],_[D]," typestr: ",_[D-1].edgeTypeStr);let R=A.edgeStrToEdgeData(_[D-1].edgeTypeStr);this.$=[{id:_[D-2].id,label:_[D-2].label,type:_[D-2].type,directions:_[D-2].directions},{id:_[D-2].id+"-"+_[D].id,start:_[D-2].id,end:_[D].id,label:_[D-1].label,type:"edge",directions:_[D].directions,arrowTypeEnd:R,arrowTypeStart:"arrow_open"},{id:_[D].id,label:_[D].label,type:A.typeStr2Type(_[D].typeStr),directions:_[D].directions}];break;case 24:A.getLogger().debug("Rule: nodeStatement (abc88 node size) ",_[D-1],_[D]),this.$={id:_[D-1].id,label:_[D-1].label,type:A.typeStr2Type(_[D-1].typeStr),directions:_[D-1].directions,widthInColumns:parseInt(_[D],10)};break;case 25:A.getLogger().debug("Rule: nodeStatement (node) ",_[D]),this.$={id:_[D].id,label:_[D].label,type:A.typeStr2Type(_[D].typeStr),directions:_[D].directions,widthInColumns:1};break;case 26:A.getLogger().debug("APA123",this?this:"na"),A.getLogger().debug("COLUMNS: ",_[D]),this.$={type:"column-setting",columns:_[D]==="auto"?-1:parseInt(_[D])};break;case 27:A.getLogger().debug("Rule: id-block statement : ",_[D-2],_[D-1]);let O=A.generateId();this.$={..._[D-2],type:"composite",children:_[D-1]};break;case 28:A.getLogger().debug("Rule: blockStatement : ",_[D-2],_[D-1],_[D]);let M=A.generateId();this.$={id:M,type:"composite",label:"",children:_[D-1]};break;case 29:A.getLogger().debug("Rule: node (NODE_ID separator): ",_[D]),this.$={id:_[D]};break;case 30:A.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",_[D-1],_[D]),this.$={id:_[D-1],label:_[D].label,typeStr:_[D].typeStr,directions:_[D].directions};break;case 31:A.getLogger().debug("Rule: dirList: ",_[D]),this.$=[_[D]];break;case 32:A.getLogger().debug("Rule: dirList: ",_[D-1],_[D]),this.$=[_[D-1]].concat(_[D]);break;case 33:A.getLogger().debug("Rule: nodeShapeNLabel: ",_[D-2],_[D-1],_[D]),this.$={typeStr:_[D-2]+_[D],label:_[D-1]};break;case 34:A.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",_[D-3],_[D-2]," #3:",_[D-1],_[D]),this.$={typeStr:_[D-3]+_[D],label:_[D-2],directions:_[D-1]};break;case 35:case 36:this.$={type:"classDef",id:_[D-1].trim(),css:_[D].trim()};break;case 37:this.$={type:"applyClass",id:_[D-1].trim(),styleClass:_[D].trim()};break;case 38:this.$={type:"applyStyles",id:_[D-1].trim(),stylesStr:_[D].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:e,28:r,29:n,31:i,32:a,40:s,44:l,47:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,32:a},{11:27,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},t(g,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,32:a},{32:[2,14]},{17:[1,36]},t(m,[2,24]),{11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{37:[1,47]},{34:48,35:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{39:[1,51]},{34:52,35:y,39:[2,31]},{32:[2,15]},t(g,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(C,T){if(T.recoverable)this.trace(C);else{var E=new Error(C);throw E.hash=T,E}},"parseError"),parse:o(function(C){var T=this,E=[0],A=[],S=[null],_=[],I=this.table,D="",k=0,L=0,R=0,O=2,M=1,B=_.slice.call(arguments,1),F=Object.create(this.lexer),P={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(P.yy[z]=this.yy[z]);F.setInput(C,P.yy),P.yy.lexer=F,P.yy.parser=this,typeof F.yylloc>"u"&&(F.yylloc={});var $=F.yylloc;_.push($);var H=F.options&&F.options.ranges;typeof P.yy.parseError=="function"?this.parseError=P.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Q(ce){E.length=E.length-2*ce,S.length=S.length-ce,_.length=_.length-ce}o(Q,"popStack");function j(){var ce;return ce=A.pop()||F.lex()||M,typeof ce!="number"&&(ce instanceof Array&&(A=ce,ce=A.pop()),ce=T.symbols_[ce]||ce),ce}o(j,"lex");for(var ie,ne,le,he,K,X,te={},J,se,ue,Z;;){if(le=E[E.length-1],this.defaultActions[le]?he=this.defaultActions[le]:((ie===null||typeof ie>"u")&&(ie=j()),he=I[le]&&I[le][ie]),typeof he>"u"||!he.length||!he[0]){var Se="";Z=[];for(J in I[le])this.terminals_[J]&&J>O&&Z.push("'"+this.terminals_[J]+"'");F.showPosition?Se="Parse error on line "+(k+1)+`: | |
| 2406 | +`+F.showPosition()+` | |
| 2407 | +Expecting `+Z.join(", ")+", got '"+(this.terminals_[ie]||ie)+"'":Se="Parse error on line "+(k+1)+": Unexpected "+(ie==M?"end of input":"'"+(this.terminals_[ie]||ie)+"'"),this.parseError(Se,{text:F.match,token:this.terminals_[ie]||ie,line:F.yylineno,loc:$,expected:Z})}if(he[0]instanceof Array&&he.length>1)throw new Error("Parse Error: multiple actions possible at state: "+le+", token: "+ie);switch(he[0]){case 1:E.push(ie),S.push(F.yytext),_.push(F.yylloc),E.push(he[1]),ie=null,ne?(ie=ne,ne=null):(L=F.yyleng,D=F.yytext,k=F.yylineno,$=F.yylloc,R>0&&R--);break;case 2:if(se=this.productions_[he[1]][1],te.$=S[S.length-se],te._$={first_line:_[_.length-(se||1)].first_line,last_line:_[_.length-1].last_line,first_column:_[_.length-(se||1)].first_column,last_column:_[_.length-1].last_column},H&&(te._$.range=[_[_.length-(se||1)].range[0],_[_.length-1].range[1]]),X=this.performAction.apply(te,[D,L,k,P.yy,he[1],S,_].concat(B)),typeof X<"u")return X;se&&(E=E.slice(0,-1*se*2),S=S.slice(0,-1*se),_=_.slice(0,-1*se)),E.push(this.productions_[he[1]][0]),S.push(te.$),_.push(te._$),ue=I[E[E.length-2]][E[E.length-1]],E.push(ue);break;case 3:return!0}}return!0},"parse")},x=function(){var w={EOF:1,parseError:o(function(T,E){if(this.yy.parser)this.yy.parser.parseError(T,E);else throw new Error(T)},"parseError"),setInput:o(function(C,T){return this.yy=T||this.yy||{},this._input=C,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var T=C.match(/(?:\r\n?|\n).*/g);return T?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),C},"input"),unput:o(function(C){var T=C.length,E=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;var A=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),E.length-1&&(this.yylineno-=E.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:E?(E.length===A.length?this.yylloc.first_column:0)+A[A.length-E.length].length-E[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 2408 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(C){this.unput(this.match.slice(C))},"less"),pastInput:o(function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var C=this.match;return C.length<20&&(C+=this._input.substr(0,20-C.length)),(C.substr(0,20)+(C.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var C=this.pastInput(),T=new Array(C.length+1).join("-");return C+this.upcomingInput()+` | |
| 2409 | +`+T+"^"},"showPosition"),test_match:o(function(C,T){var E,A,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),A=C[0].match(/(?:\r\n?|\n).*/g),A&&(this.yylineno+=A.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:A?A[A.length-1].length-A[A.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+C[0].length},this.yytext+=C[0],this.match+=C[0],this.matches=C,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(C[0].length),this.matched+=C[0],E=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var _ in S)this[_]=S[_];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,T,E,A;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),_=0;_<S.length;_++)if(E=this._input.match(this.rules[S[_]]),E&&(!T||E[0].length>T[0].length)){if(T=E,A=_,this.options.backtrack_lexer){if(C=this.test_match(E,S[_]),C!==!1)return C;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(C=this.test_match(T,S[A]),C!==!1?C:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 2410 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(T,E,A,S){var _=S;switch(A){case 0:return 10;case 1:return T.getLogger().debug("Found space-block"),31;break;case 2:return T.getLogger().debug("Found nl-block"),31;break;case 3:return T.getLogger().debug("Found space-block"),29;break;case 4:T.getLogger().debug(".",E.yytext);break;case 5:T.getLogger().debug("_",E.yytext);break;case 6:return 5;case 7:return E.yytext=-1,28;break;case 8:return E.yytext=E.yytext.replace(/columns\s+/,""),T.getLogger().debug("COLUMNS (LEX)",E.yytext),28;break;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:T.getLogger().debug("LEX: POPPING STR:",E.yytext),this.popState();break;case 14:return T.getLogger().debug("LEX: STR end:",E.yytext),"STR";break;case 15:return E.yytext=E.yytext.replace(/space\:/,""),T.getLogger().debug("SPACE NUM (LEX)",E.yytext),21;break;case 16:return E.yytext="1",T.getLogger().debug("COLUMNS (LEX)",E.yytext),21;break;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;break;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 22:return this.popState(),this.pushState("CLASSDEFID"),41;break;case 23:return this.popState(),42;break;case 24:return this.pushState("CLASS"),44;break;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;break;case 26:return this.popState(),46;break;case 27:return this.pushState("STYLE_STMNT"),47;break;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;break;case 29:return this.popState(),49;break;case 30:return this.pushState("acc_title"),"acc_title";break;case 31:return this.popState(),"acc_title_value";break;case 32:return this.pushState("acc_descr"),"acc_descr";break;case 33:return this.popState(),"acc_descr_value";break;case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 40:return this.popState(),T.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 41:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 43:return this.popState(),T.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 44:return this.popState(),T.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 45:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 46:return this.popState(),T.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 47:return this.popState(),T.getLogger().debug("Lex: ("),"NODE_DEND";break;case 48:return this.popState(),T.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 49:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 51:return this.popState(),T.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 52:return this.popState(),T.getLogger().debug("Lex: )"),"NODE_DEND";break;case 53:return this.popState(),T.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 54:return this.popState(),T.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 55:return T.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;break;case 56:return T.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;break;case 57:return T.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;break;case 58:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 59:return T.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;break;case 60:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 61:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 62:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 63:return T.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;break;case 64:return T.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;break;case 65:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 66:return this.pushState("NODE"),36;break;case 67:return this.pushState("NODE"),36;break;case 68:return this.pushState("NODE"),36;break;case 69:return this.pushState("NODE"),36;break;case 70:return this.pushState("NODE"),36;break;case 71:return this.pushState("NODE"),36;break;case 72:return this.pushState("NODE"),36;break;case 73:return T.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;break;case 74:return this.pushState("BLOCK_ARROW"),T.getLogger().debug("LEX ARR START"),38;break;case 75:return T.getLogger().debug("Lex: NODE_ID",E.yytext),32;break;case 76:return T.getLogger().debug("Lex: EOF",E.yytext),8;break;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:T.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:T.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return T.getLogger().debug("LEX: NODE_DESCR:",E.yytext),"NODE_DESCR";break;case 84:T.getLogger().debug("LEX POPPING"),this.popState();break;case 85:T.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (right): dir:",E.yytext),"DIR";break;case 87:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (left):",E.yytext),"DIR";break;case 88:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (x):",E.yytext),"DIR";break;case 89:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (y):",E.yytext),"DIR";break;case 90:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (up):",E.yytext),"DIR";break;case 91:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (down):",E.yytext),"DIR";break;case 92:return E.yytext="]>",T.getLogger().debug("Lex (ARROW_DIR end):",E.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 93:return T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 94:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 95:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 96:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 97:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 98:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 99:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 100:this.pushState("md_string");break;case 101:return T.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 102:return this.popState(),T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 103:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 104:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 105:return T.getLogger().debug("Lex: COLON",E.yytext),E.yytext=E.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return w}();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b}();KB.parser=KB;bye=KB});function Yet(t){switch(Y.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return Y.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function Xet(t){switch(Y.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function jet(t){switch(t.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}var Ul,ZB,QB,Tye,kye,zet,Sye,Get,eC,Vet,Uet,Het,Wet,Cye,JB,y4,qet,Eye,Ket,Qet,Zet,Jet,ett,ttt,rtt,ntt,itt,att,stt,Aye,_ye=N(()=>{"use strict";gL();ji();zt();vt();gr();mi();Ul=new Map,ZB=[],QB=new Map,Tye="color",kye="fill",zet="bgFill",Sye=",",Get=me(),eC=new Map,Vet=o(t=>Ze.sanitizeText(t,Get),"sanitizeText"),Uet=o(function(t,e=""){let r=eC.get(t);r||(r={id:t,styles:[],textStyles:[]},eC.set(t,r)),e?.split(Sye).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(Tye).exec(n)){let s=i.replace(kye,zet).replace(Tye,kye);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),Het=o(function(t,e=""){let r=Ul.get(t);e!=null&&(r.styles=e.split(Sye))},"addStyle2Node"),Wet=o(function(t,e){t.split(",").forEach(function(r){let n=Ul.get(r);if(n===void 0){let i=r.trim();n={id:i,type:"na",children:[]},Ul.set(i,n)}n.classes||(n.classes=[]),n.classes.push(e)})},"setCssClass"),Cye=o((t,e)=>{let r=t.flat(),n=[];for(let i of r){if(i.label&&(i.label=Vet(i.label)),i.type==="classDef"){Uet(i.id,i.css);continue}if(i.type==="applyClass"){Wet(i.id,i?.styleClass??"");continue}if(i.type==="applyStyles"){i?.stylesStr&&Het(i.id,i?.stylesStr);continue}if(i.type==="column-setting")e.columns=i.columns??-1;else if(i.type==="edge"){let a=(QB.get(i.id)??0)+1;QB.set(i.id,a),i.id=a+"-"+i.id,ZB.push(i)}else{i.label||(i.type==="composite"?i.label="":i.label=i.id);let a=Ul.get(i.id);if(a===void 0?Ul.set(i.id,i):(i.type!=="na"&&(a.type=i.type),i.label!==i.id&&(a.label=i.label)),i.children&&Cye(i.children,i),i.type==="space"){let s=i.width??1;for(let l=0;l<s;l++){let u=an(i);u.id=u.id+"-"+l,Ul.set(u.id,u),n.push(u)}}else a===void 0&&n.push(i)}}e.children=n},"populateBlockDatabase"),JB=[],y4={id:"root",type:"composite",children:[],columns:-1},qet=o(()=>{Y.debug("Clear called"),Ar(),y4={id:"root",type:"composite",children:[],columns:-1},Ul=new Map([["root",y4]]),JB=[],eC=new Map,ZB=[],QB=new Map},"clear");o(Yet,"typeStr2Type");o(Xet,"edgeTypeStr2Type");o(jet,"edgeStrToEdgeData");Eye=0,Ket=o(()=>(Eye++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Eye),"generateId"),Qet=o(t=>{y4.children=t,Cye(t,y4),JB=y4.children},"setHierarchy"),Zet=o(t=>{let e=Ul.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),Jet=o(()=>[...Ul.values()],"getBlocksFlat"),ett=o(()=>JB||[],"getBlocks"),ttt=o(()=>ZB,"getEdges"),rtt=o(t=>Ul.get(t),"getBlock"),ntt=o(t=>{Ul.set(t.id,t)},"setBlock"),itt=o(()=>console,"getLogger"),att=o(function(){return eC},"getClasses"),stt={getConfig:o(()=>cr().block,"getConfig"),typeStr2Type:Yet,edgeTypeStr2Type:Xet,edgeStrToEdgeData:jet,getLogger:itt,getBlocksFlat:Jet,getBlocks:ett,getEdges:ttt,setHierarchy:Qet,getBlock:rtt,setBlock:ntt,getColumns:Zet,getClasses:att,clear:qet,generateId:Ket},Aye=stt});var tC,ott,Dye,Lye=N(()=>{"use strict";Ys();tC=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),ott=o(t=>`.label { | |
| 2411 | + font-family: ${t.fontFamily}; | |
| 2412 | + color: ${t.nodeTextColor||t.textColor}; | |
| 2413 | + } | |
| 2414 | + .cluster-label text { | |
| 2415 | + fill: ${t.titleColor}; | |
| 2416 | + } | |
| 2417 | + .cluster-label span,p { | |
| 2418 | + color: ${t.titleColor}; | |
| 2419 | + } | |
| 2420 | + | |
| 2421 | + | |
| 2422 | + | |
| 2423 | + .label text,span,p { | |
| 2424 | + fill: ${t.nodeTextColor||t.textColor}; | |
| 2425 | + color: ${t.nodeTextColor||t.textColor}; | |
| 2426 | + } | |
| 2427 | + | |
| 2428 | + .node rect, | |
| 2429 | + .node circle, | |
| 2430 | + .node ellipse, | |
| 2431 | + .node polygon, | |
| 2432 | + .node path { | |
| 2433 | + fill: ${t.mainBkg}; | |
| 2434 | + stroke: ${t.nodeBorder}; | |
| 2435 | + stroke-width: 1px; | |
| 2436 | + } | |
| 2437 | + .flowchart-label text { | |
| 2438 | + text-anchor: middle; | |
| 2439 | + } | |
| 2440 | + // .flowchart-label .text-outer-tspan { | |
| 2441 | + // text-anchor: middle; | |
| 2442 | + // } | |
| 2443 | + // .flowchart-label .text-inner-tspan { | |
| 2444 | + // text-anchor: start; | |
| 2445 | + // } | |
| 2446 | + | |
| 2447 | + .node .label { | |
| 2448 | + text-align: center; | |
| 2449 | + } | |
| 2450 | + .node.clickable { | |
| 2451 | + cursor: pointer; | |
| 2452 | + } | |
| 2453 | + | |
| 2454 | + .arrowheadPath { | |
| 2455 | + fill: ${t.arrowheadColor}; | |
| 2456 | + } | |
| 2457 | + | |
| 2458 | + .edgePath .path { | |
| 2459 | + stroke: ${t.lineColor}; | |
| 2460 | + stroke-width: 2.0px; | |
| 2461 | + } | |
| 2462 | + | |
| 2463 | + .flowchart-link { | |
| 2464 | + stroke: ${t.lineColor}; | |
| 2465 | + fill: none; | |
| 2466 | + } | |
| 2467 | + | |
| 2468 | + .edgeLabel { | |
| 2469 | + background-color: ${t.edgeLabelBackground}; | |
| 2470 | + rect { | |
| 2471 | + opacity: 0.5; | |
| 2472 | + background-color: ${t.edgeLabelBackground}; | |
| 2473 | + fill: ${t.edgeLabelBackground}; | |
| 2474 | + } | |
| 2475 | + text-align: center; | |
| 2476 | + } | |
| 2477 | + | |
| 2478 | + /* For html labels only */ | |
| 2479 | + .labelBkg { | |
| 2480 | + background-color: ${tC(t.edgeLabelBackground,.5)}; | |
| 2481 | + // background-color: | |
| 2482 | + } | |
| 2483 | + | |
| 2484 | + .node .cluster { | |
| 2485 | + // fill: ${tC(t.mainBkg,.5)}; | |
| 2486 | + fill: ${tC(t.clusterBkg,.5)}; | |
| 2487 | + stroke: ${tC(t.clusterBorder,.2)}; | |
| 2488 | + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; | |
| 2489 | + stroke-width: 1px; | |
| 2490 | + } | |
| 2491 | + | |
| 2492 | + .cluster text { | |
| 2493 | + fill: ${t.titleColor}; | |
| 2494 | + } | |
| 2495 | + | |
| 2496 | + .cluster span,p { | |
| 2497 | + color: ${t.titleColor}; | |
| 2498 | + } | |
| 2499 | + /* .cluster div { | |
| 2500 | + color: ${t.titleColor}; | |
| 2501 | + } */ | |
| 2502 | + | |
| 2503 | + div.mermaidTooltip { | |
| 2504 | + position: absolute; | |
| 2505 | + text-align: center; | |
| 2506 | + max-width: 200px; | |
| 2507 | + padding: 2px; | |
| 2508 | + font-family: ${t.fontFamily}; | |
| 2509 | + font-size: 12px; | |
| 2510 | + background: ${t.tertiaryColor}; | |
| 2511 | + border: 1px solid ${t.border2}; | |
| 2512 | + border-radius: 2px; | |
| 2513 | + pointer-events: none; | |
| 2514 | + z-index: 100; | |
| 2515 | + } | |
| 2516 | + | |
| 2517 | + .flowchartTitleText { | |
| 2518 | + text-anchor: middle; | |
| 2519 | + font-size: 18px; | |
| 2520 | + fill: ${t.textColor}; | |
| 2521 | + } | |
| 2522 | +`,"getStyles"),Dye=ott});var ltt,ctt,utt,htt,ftt,dtt,ptt,mtt,gtt,ytt,vtt,Rye,Nye=N(()=>{"use strict";vt();ltt=o((t,e,r,n)=>{e.forEach(i=>{vtt[i](t,r,n)})},"insertMarkers"),ctt=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),utt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),htt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),ftt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),dtt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),ptt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),mtt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),gtt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),ytt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),vtt={extension:ctt,composition:utt,aggregation:htt,dependency:ftt,lollipop:dtt,point:ptt,circle:mtt,cross:gtt,barb:ytt},Rye=ltt});function xtt(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,n=Math.floor(e/t);return{px:r,py:n}}function eF(t,e,r=0,n=0){Y.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"sieblingWidth",r),t?.size?.width||(t.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(t.children?.length>0){for(let m of t.children)eF(m,e);let s=btt(t);i=s.width,a=s.height,Y.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",i,a);for(let m of t.children)m.size&&(Y.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${i} ${a} ${JSON.stringify(m.size)}`),m.size.width=i*(m.widthInColumns??1)+bi*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,Y.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${i} maxHeight:${a}`));for(let m of t.children)eF(m,e,i,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l<u&&(h=l);let f=Math.ceil(u/h),d=h*(i+bi)+bi,p=f*(a+bi)+bi;if(d<r){Y.debug(`Detected to small siebling: abc95 ${t.id} sieblingWidth ${r} sieblingHeight ${n} width ${d}`),d=r,p=n;let m=(r-h*bi-bi)/h,g=(n-f*bi-bi)/f;Y.debug("Size indata abc88",t.id,"childWidth",m,"maxWidth",i),Y.debug("Size indata abc88",t.id,"childHeight",g,"maxHeight",a),Y.debug("Size indata abc88 xSize",h,"padding",bi);for(let y of t.children)y.size&&(y.size.width=m,y.size.height=g,y.size.x=0,y.size.y=0)}if(Y.debug(`abc95 (finale calc) ${t.id} xSize ${h} ySize ${f} columns ${l}${t.children.length} width=${Math.max(d,t.size?.width||0)}`),d<(t?.size?.width||0)){d=t?.size?.width||0;let m=l>0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*bi-bi)/m;Y.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}Y.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function Mye(t,e){Y.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(Y.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let n=t?.children[0]?.size?.width??0,i=t.children.length*n+(t.children.length-1)*bi;Y.debug("widthOfChildren 88",i,"posX");let a=0;Y.debug("abc91 block?.size?.x",t.id,t?.size?.x);let s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-bi,l=0;for(let u of t.children){let h=t;if(!u.size)continue;let{width:f,height:d}=u.size,{px:p,py:m}=xtt(r,a);if(m!=l&&(l=m,s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-bi,Y.debug("New row in layout for block",t.id," and child ",u.id,l)),Y.debug(`abc89 layout blocks (child) id: ${u.id} Pos: ${a} (px, py) ${p},${m} (${h?.size?.x},${h?.size?.y}) parent: ${h.id} width: ${f}${bi}`),h.size){let g=f/2;u.size.x=s+bi+g,Y.debug(`abc91 layout blocks (calc) px, pyid:${u.id} startingPos=X${s} new startingPosX${u.size.x} ${g} padding=${bi} width=${f} halfWidth=${g} => x:${u.size.x} y:${u.size.y} ${u.widthInColumns} (width * (child?.w || 1)) / 2 ${f*(u?.widthInColumns??1)/2}`),s=u.size.x+g,u.size.y=h.size.y-h.size.height/2+m*(d+bi)+d/2+bi,Y.debug(`abc88 layout blocks (calc) px, pyid:${u.id}startingPosX${s}${bi}${g}=>x:${u.size.x}y:${u.size.y}${u.widthInColumns}(width * (child?.w || 1)) / 2${f*(u?.widthInColumns??1)/2}`)}u.children&&Mye(u,e),a+=u?.widthInColumns??1,Y.debug("abc88 columnsPos",u,a)}}Y.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function Iye(t,{minX:e,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2<e&&(e=a-l/2),s-u/2<r&&(r=s-u/2),a+l/2>n&&(n=a+l/2),s+u/2>i&&(i=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:n,maxY:i}=Iye(a,{minX:e,minY:r,maxX:n,maxY:i}));return{minX:e,minY:r,maxX:n,maxY:i}}function Oye(t){let e=t.getBlock("root");if(!e)return;eF(e,t,0,0),Mye(e,t),Y.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:n,maxX:i,maxY:a}=Iye(e),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}var bi,btt,Pye=N(()=>{"use strict";vt();zt();bi=me()?.block?.padding??8;o(xtt,"calculateBlockPosition");btt=o(t=>{let e=0,r=0;for(let n of t.children){let{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};Y.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>e&&(e=i/(t.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(eF,"setBlockSizes");o(Mye,"layoutBlocks");o(Iye,"findBounds");o(Oye,"layout")});function Bye(t,e){e&&t.attr("style",e)}function wtt(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label,i=t.isNode?"nodeLabel":"edgeLabel",a=r.append("span");return a.html(n),Bye(a,t.labelStyle),a.attr("class",i),Bye(r,t.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var Ttt,vs,rC=N(()=>{"use strict";dr();vt();zt();gr();ir();to();o(Bye,"applyStyle");o(wtt,"addHtmlLabel");Ttt=o((t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),fr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),Y.debug("vertexText"+i);let a={isNode:n,label:DD(na(i)),labelStyle:e.replace("fill:","color:")};return wtt(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),vs=Ttt});var $ye,ktt,Fye,zye=N(()=>{"use strict";vt();$ye=o((t,e,r,n,i)=>{e.arrowTypeStart&&Fye(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&Fye(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),ktt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},Fye=o((t,e,r,n,i,a)=>{let s=ktt[r];if(!s){Y.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function nC(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var tF,Ua,Vye,Uye,Ett,Stt,Gye,Hye,Wye=N(()=>{"use strict";vt();rC();to();dr();zt();ir();gr();JD();w2();zye();tF={},Ua={},Vye=o((t,e)=>{let r=me(),n=fr(r.flowchart.htmlLabels),i=e.labelType==="markdown"?Hn(t,e.label,{style:e.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):vs(e.label,e.labelStyle),a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){let h=i.children[0],f=Ge(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),tF[e.id]=a,e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=vs(e.startLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].startLeft=f,nC(u,e.startLabelLeft)}if(e.startLabelRight){let h=vs(e.startLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].startRight=f,nC(u,e.startLabelRight)}if(e.endLabelLeft){let h=vs(e.endLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].endLeft=f,nC(u,e.endLabelLeft)}if(e.endLabelRight){let h=vs(e.endLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].endRight=f,nC(u,e.endLabelRight)}return i},"insertEdgeLabel");o(nC,"setTerminalWidth");Uye=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,tF[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Ru(n);if(t.label){let a=tF[t.id],s=t.x,l=t.y;if(r){let u=Gt.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=Ua[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Ua[t.id].startRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Ua[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Ua[t.id].endRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),Ett=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),Stt=o((t,e,r)=>{Y.debug(`intersection calc abc89: | |
| 2523 | + outsidePoint: ${JSON.stringify(e)} | |
| 2524 | + insidePoint : ${JSON.stringify(r)} | |
| 2525 | + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.x<e.x?s-a:s+a,u=t.height/2,h=Math.abs(e.y-r.y),f=Math.abs(e.x-r.x);if(Math.abs(i-e.y)*s>Math.abs(n-e.x)*u){let d=r.y<e.y?e.y-u-i:i-u-e.y;l=f*d/h;let p={x:r.x<e.x?r.x+l:r.x-f+l,y:r.y<e.y?r.y+h-d:r.y-h+d};return l===0&&(p.x=e.x,p.y=e.y),f===0&&(p.x=e.x),h===0&&(p.y=e.y),Y.debug(`abc89 topp/bott calc, Q ${h}, q ${d}, R ${f}, r ${l}`,p),p}else{r.x<e.x?l=e.x-s-n:l=n-s-e.x;let d=h*l/f,p=r.x<e.x?r.x+f-l:r.x-f+l,m=r.y<e.y?r.y+d:r.y-d;return Y.debug(`sides calc abc89, Q ${h}, q ${d}, R ${f}, r ${l}`,{_x:p,_y:m}),l===0&&(p=e.x,m=e.y),f===0&&(p=e.x),h===0&&(m=e.y),{x:p,y:m}}},"intersection"),Gye=o((t,e)=>{Y.debug("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(!Ett(e,a)&&!i){let s=Stt(e,n,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),Hye=o(function(t,e,r,n,i,a,s){let l=r.points;Y.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(Y.debug("to cluster abc88",n[r.toCluster]),l=Gye(r.points,n[r.toCluster].node),u=!0),r.fromCluster&&(Y.debug("from cluster abc88",n[r.fromCluster]),l=Gye(l.reverse(),n[r.fromCluster].node).reverse(),u=!0);let d=l.filter(C=>!Number.isNaN(C.y)),p=Do;r.curve&&(i==="graph"||i==="flowchart")&&(p=r.curve);let{x:m,y:g}=qw(r),y=wl().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(b=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,b=b.replace(/\(/g,"\\("),b=b.replace(/\)/g,"\\)")),$ye(x,r,b,s,i);let w={};return u&&(w.updatedPath=l),w.originalPath=r.points,w},"insertEdge")});var Ctt,qye,Yye=N(()=>{"use strict";Ctt=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),qye=o((t,e,r)=>{let n=Ctt(t),i=2,a=e.height+2*r.padding,s=a/i,l=e.width+2*s+r.padding,u=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function Att(t,e){return t.intersect(e)}var Xye,jye=N(()=>{"use strict";o(Att,"intersectNode");Xye=Att});function _tt(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x<i&&(h=-h);var f=Math.abs(e*r*l/u);return n.y<a&&(f=-f),{x:i+h,y:a+f}}var iC,rF=N(()=>{"use strict";o(_tt,"intersectEllipse");iC=_tt});function Dtt(t,e,r){return iC(t,e,e,r)}var Kye,Qye=N(()=>{"use strict";rF();o(Dtt,"intersectCircle");Kye=Dtt});function Ltt(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&Zye(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&Zye(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function Zye(t,e){return t*e>0}var Jye,eve=N(()=>{"use strict";o(Ltt,"intersectLine");o(Zye,"sameSign");Jye=Ltt});function Rtt(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=n-t.width/2-s,h=i-t.height/2-l,f=0;f<e.length;f++){var d=e[f],p=e[f<e.length-1?f+1:0],m=Jye(t,r,{x:u+d.x,y:h+d.y},{x:u+p.x,y:h+p.y});m&&a.push(m)}return a.length?(a.length>1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),w=y.x-r.x,C=y.y-r.y,T=Math.sqrt(w*w+C*C);return b<T?-1:b===T?0:1}),a[0]):t}var tve,rve=N(()=>{"use strict";eve();tve=Rtt;o(Rtt,"intersectPolygon")});var Ntt,nve,ive=N(()=>{"use strict";Ntt=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),nve=Ntt});var In,nF=N(()=>{"use strict";jye();Qye();rF();rve();ive();In={node:Xye,circle:Kye,ellipse:iC,polygon:tve,rect:nve}});function Hl(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Di,Qn,iF=N(()=>{"use strict";rC();to();zt();dr();gr();ir();Di=o(async(t,e,r,n)=>{let i=me(),a,s=e.useHtmlLabels||fr(i.flowchart.htmlLabels);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f=u.node(),d;e.labelType==="markdown"?d=Hn(u,Tr(na(h),i),{useHtmlLabels:s,width:e.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):d=f.appendChild(vs(Tr(na(h),i),e.labelStyle,!1,n));let p=d.getBBox(),m=e.padding/2;if(fr(i.flowchart.htmlLabels)){let g=d.children[0],y=Ge(d),v=g.getElementsByTagName("img");if(v){let x=h.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...v].map(b=>new Promise(w=>{function C(){if(b.style.display="flex",b.style.flexDirection="column",x){let T=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,A=parseInt(T,10)*5+"px";b.style.minWidth=A,b.style.maxWidth=A}else b.style.width="100%";w(b)}o(C,"setupImage"),setTimeout(()=>{b.complete&&C()}),b.addEventListener("error",C),b.addEventListener("load",C)})))}p=g.getBoundingClientRect(),y.attr("width",p.width),y.attr("height",p.height)}return s?u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):u.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:p,halfPadding:m,label:u}},"labelHelper"),Qn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(Hl,"insertPolygonShape")});var Mtt,ave,sve=N(()=>{"use strict";iF();vt();zt();nF();Mtt=o(async(t,e)=>{e.useHtmlLabels||me().flowchart.htmlLabels||(e.centerLabel=!0);let{shapeSvg:n,bbox:i,halfPadding:a}=await Di(t,e,"node "+e.classes,!0);Y.info("Classes = ",e.classes);let s=n.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Qn(e,s),e.intersect=function(l){return In.rect(e,l)},n},"note"),ave=Mtt});function aF(t,e,r,n){let i=[],a=o(l=>{i.push(l,0)},"addBorder"),s=o(l=>{i.push(0,l)},"skipBorder");e.includes("t")?(Y.debug("add top border"),a(r)):s(r),e.includes("r")?(Y.debug("add right border"),a(n)):s(n),e.includes("b")?(Y.debug("add bottom border"),a(r)):s(r),e.includes("l")?(Y.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}var ove,yo,lve,Itt,Ott,Ptt,Btt,Ftt,$tt,ztt,Gtt,Vtt,Utt,Htt,Wtt,qtt,Ytt,Xtt,jtt,Ktt,Qtt,Ztt,cve,Jtt,ert,uve,aC,sF,hve,fve=N(()=>{"use strict";dr();zt();gr();vt();Yye();rC();nF();sve();iF();ove=o(t=>t?" "+t:"","formatClass"),yo=o((t,e)=>`${e||"node default"}${ove(t.classes)} ${ove(t.class)}`,"getClassesFromNode"),lve=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];Y.info("Question main (Circle)");let u=Hl(r,s,s,l);return u.attr("style",e.style),Qn(e,u),e.intersect=function(h){return Y.warn("Intersect called"),In.polygon(e,l,h)},r},"question"),Itt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return In.circle(e,14,s)},r},"choice"),Ott=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=4,a=n.height+e.padding,s=a/i,l=n.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=Hl(r,l,a,u);return h.attr("style",e.style),Qn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"hexagon"),Ptt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,void 0,!0),i=2,a=n.height+2*e.padding,s=a/i,l=n.width+2*s+e.padding,u=qye(e.directions,n,e),h=Hl(r,l,a,u);return h.attr("style",e.style),Qn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"block_arrow"),Btt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Hl(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_left_inv_arrow"),Ftt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_right"),$tt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_left"),ztt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"trapezoid"),Gtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"inv_trapezoid"),Vtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_right_inv_arrow"),Utt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return Qn(e,h),e.intersect=function(f){let d=In.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)<e.width/2||Math.abs(p)==e.width/2&&Math.abs(d.y-e.y)>e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),Htt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(aF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return Qn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"rect"),Wtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(aF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return Qn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"composite"),qtt=o(async(t,e)=>{let{shapeSvg:r}=await Di(t,e,"label",!0);Y.trace("Classes = ",e.class);let n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(aF(n,e.props.borders,i,a),s.delete("borders")),s.forEach(l=>{Y.warn(`Unknown node property ${l}`)})}return Qn(e,n),e.intersect=function(s){return In.rect(e,s)},r},"labelRect");o(aF,"applyNodePropertyBorders");Ytt=o((t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,Y.info("Label text abc79",u,l,typeof l=="object");let h=s.node().appendChild(vs(u,e.labelStyle,!0,!0)),f={width:0,height:0};if(fr(me().flowchart.htmlLabels)){let y=h.children[0],v=Ge(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}Y.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=s.node().appendChild(vs(d.join?d.join("<br/>"):d,e.labelStyle,!0,!0));if(fr(me().flowchart.htmlLabels)){let y=m.children[0],v=Ge(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return Ge(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),Ge(h).attr("transform","translate( "+(f.width<p.width?0:-(p.width-f.width)/2)+", 0)"),f=s.node().getBBox(),s.attr("transform","translate("+-f.width/2+", "+(-f.height/2-g+3)+")"),i.attr("class","outer title-state").attr("x",-f.width/2-g).attr("y",-f.height/2-g).attr("width",f.width+e.padding).attr("height",f.height+e.padding),a.attr("class","divider").attr("x1",-f.width/2-g).attr("x2",f.width/2+g).attr("y1",-f.height/2-g+p.height+g).attr("y2",-f.height/2-g+p.height+g),Qn(e,i),e.intersect=function(y){return In.rect(e,y)},n},"rectWithTitle"),Xtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return Qn(e,s),e.intersect=function(l){return In.rect(e,l)},r},"stadium"),jtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,yo(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("Circle main"),Qn(e,a),e.intersect=function(s){return Y.info("Circle intersect",e,n.width/2+i,s),In.circle(e,n.width/2+i,s)},r},"circle"),Ktt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,yo(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("DoubleCircle main"),Qn(e,l),e.intersect=function(h){return Y.info("DoubleCircle intersect",e,n.width/2+i+a,h),In.circle(e,n.width/2+i+a,h)},r},"doublecircle"),Qtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"subroutine"),Ztt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Qn(e,n),e.intersect=function(i){return In.circle(e,7,i)},r},"start"),cve=o((t,e,r)=>{let n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;r==="LR"&&(i=10,a=70);let s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return Qn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return In.rect(e,l)},n},"forkJoin"),Jtt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Qn(e,i),e.intersect=function(a){return In.circle(e,7,a)},r},"end"),ert=o((t,e)=>{let r=e.padding/2,n=4,i=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=n,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=p.node().appendChild(vs(y,e.labelStyle,!0,!0)),x=v.getBBox();if(fr(me().flowchart.htmlLabels)){let S=v.children[0],_=Ge(v);x=S.getBoundingClientRect(),_.attr("width",x.width),_.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+n,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(me().flowchart.htmlLabels?b+="<"+e.classData.type+">":b+="<"+e.classData.type+">");let w=p.node().appendChild(vs(b,e.labelStyle,!0,!0));Ge(w).attr("class","classTitle");let C=w.getBBox();if(fr(me().flowchart.htmlLabels)){let S=w.children[0],_=Ge(w);C=S.getBoundingClientRect(),_.attr("width",C.width),_.attr("height",C.height)}d+=C.height+n,C.width>f&&(f=C.width);let T=[];e.classData.members.forEach(S=>{let _=S.getDisplayDetails(),I=_.displayText;me().flowchart.htmlLabels&&(I=I.replace(/</g,"<").replace(/>/g,">"));let D=p.node().appendChild(vs(I,_.cssStyle?_.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(fr(me().flowchart.htmlLabels)){let L=D.children[0],R=Ge(D);k=L.getBoundingClientRect(),R.attr("width",k.width),R.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,T.push(D)}),d+=i;let E=[];if(e.classData.methods.forEach(S=>{let _=S.getDisplayDetails(),I=_.displayText;me().flowchart.htmlLabels&&(I=I.replace(/</g,"<").replace(/>/g,">"));let D=p.node().appendChild(vs(I,_.cssStyle?_.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(fr(me().flowchart.htmlLabels)){let L=D.children[0],R=Ge(D);k=L.getBoundingClientRect(),R.attr("width",k.width),R.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,E.push(D)}),d+=i,g){let S=(f-x.width)/2;Ge(v).attr("transform","translate( "+(-1*f/2+S)+", "+-1*d/2+")"),m=x.height+n}let A=(f-C.width)/2;return Ge(w).attr("transform","translate( "+(-1*f/2+A)+", "+(-1*d/2+m)+")"),m+=C.height+n,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,T.forEach(S=>{Ge(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+i/2)+")");let _=S?.getBBox();m+=(_?.height??0)+n}),m+=i,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,E.forEach(S=>{Ge(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let _=S?.getBBox();m+=(_?.height??0)+n}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),Qn(e,l),e.intersect=function(S){return In.rect(e,S)},s},"class_box"),uve={rhombus:lve,composite:Wtt,question:lve,rect:Htt,labelRect:qtt,rectWithTitle:Ytt,choice:Itt,circle:jtt,doublecircle:Ktt,stadium:Xtt,hexagon:Ott,block_arrow:Ptt,rect_left_inv_arrow:Btt,lean_right:Ftt,lean_left:$tt,trapezoid:ztt,inv_trapezoid:Gtt,rect_right_inv_arrow:Vtt,cylinder:Utt,start:Ztt,end:Jtt,note:ave,subroutine:Qtt,fork:cve,join:cve,class_box:ert},aC={},sF=o(async(t,e,r)=>{let n,i;if(e.link){let a;me().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await uve[e.shape](n,e,r)}else i=await uve[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),aC[e.id]=n,e.haveCallback&&aC[e.id].attr("class",aC[e.id].attr("class")+" clickable"),n},"insertNode"),hve=o(t=>{let e=aC[t.id];Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});function dve(t,e,r=!1){let n=t,i="default";(n?.classes?.length||0)>0&&(i=(n?.classes??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=Y9(n?.styles??[]),h=n.label,f=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:i,style:u.style,id:n.id,directions:n.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:n.type,padding:l??cr()?.block?.padding??0}}async function trt(t,e,r){let n=dve(e,r,!1);if(n.type==="group")return;let i=cr(),a=await sF(t,n,{config:i}),s=a.node().getBBox(),l=r.getBlock(n.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function rrt(t,e,r){let n=dve(e,r,!0);if(r.getBlock(n.id).type!=="space"){let a=cr();await sF(t,n,{config:a}),e.intersect=n?.intersect,hve(n)}}async function oF(t,e,r,n){for(let i of e)await n(t,i,r),i.children&&await oF(t,i.children,r,n)}async function pve(t,e,r){await oF(t,e,r,trt)}async function mve(t,e,r){await oF(t,e,r,rrt)}async function gve(t,e,r,n,i){let a=new sn({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=n.getBlock(s.start),u=n.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}];Hye(t,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await Vye(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),Uye({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var yve=N(()=>{"use strict";Vo();ji();Wye();fve();ir();o(dve,"getNodeFromBlock");o(trt,"calculateBlockSize");o(rrt,"insertBlockPositioned");o(oF,"performOperations");o(pve,"calculateBlockSizes");o(mve,"insertBlocks");o(gve,"insertEdges")});var nrt,irt,vve,xve=N(()=>{"use strict";dr();ji();Nye();vt();Ei();Pye();yve();nrt=o(function(t,e){return e.db.getClasses()},"getClasses"),irt=o(async function(t,e,r,n){let{securityLevel:i,block:a}=cr(),s=n.db,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`);Rye(h,["point","circle","cross"],n.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await pve(g,d,s);let y=Oye(s);if(await mve(g,d,s),await gve(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,w=v.width+10,{useMaxWidth:C}=a;vn(h,b,w,!!C),Y.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),vve={draw:irt,getClasses:nrt}});var bve={};hr(bve,{diagram:()=>art});var art,wve=N(()=>{"use strict";wye();_ye();Lye();xve();art={parser:bye,db:Aye,renderer:vve,styles:Dye}});var lF,cF,v4,Eve,uF,Ha,Zc,x4,Sve,crt,b4,Cve,Ave,_ve,Dve,Lve,sC,Ff,oC=N(()=>{"use strict";lF={L:"left",R:"right",T:"top",B:"bottom"},cF={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},v4={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},Eve=o(function(t){return Ha(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),uF=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),Ha=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),Zc=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),x4=o(function(t,e){let r=Ha(t)&&Zc(e),n=Zc(t)&&Ha(e);return r||n},"isArchitectureDirectionXY"),Sve=o(function(t){let e=t[0],r=t[1],n=Ha(e)&&Zc(r),i=Zc(e)&&Ha(r);return n||i},"isArchitecturePairXY"),crt=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),b4=o(function(t,e){let r=`${t}${e}`;return crt(r)?r:void 0},"getArchitectureDirectionPair"),Cve=o(function([t,e],r){let n=r[0],i=r[1];return Ha(n)?Zc(i)?[t+(n==="L"?-1:1),e+(i==="T"?1:-1)]:[t+(n==="L"?-1:1),e]:Ha(i)?[t+(i==="L"?1:-1),e+(n==="T"?1:-1)]:[t,e+(n==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),Ave=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),_ve=o(function(t,e){return x4(t,e)?"bend":Ha(t)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),Dve=o(function(t){return t.type==="service"},"isArchitectureService"),Lve=o(function(t){return t.type==="junction"},"isArchitectureJunction"),sC=o(t=>t.data(),"edgeData"),Ff=o(t=>t.data(),"nodeData")});function Li(t){let e=me().architecture;return e?.[t]?e[t]:Rve[t]}var Rve,vr,urt,hrt,frt,drt,prt,mrt,hF,grt,yrt,vrt,xrt,brt,wrt,Trt,Qp,w4=N(()=>{"use strict";Ya();zt();s6();mi();oC();Rve=or.architecture,vr=new pf(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:Rve,dataStructures:void 0,elements:{}})),urt=o(()=>{vr.reset(),Ar()},"clear"),hrt=o(function({id:t,icon:e,in:r,title:n,iconText:i}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The service id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The service [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The service [${t}]'s parent does not exist. Please make sure the parent is created before this service`);if(vr.records.registeredIds[r]==="node")throw new Error(`The service [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"service",icon:e,iconText:i,title:n,edges:[],in:r}},"addService"),frt=o(()=>Object.values(vr.records.nodes).filter(Dve),"getServices"),drt=o(function({id:t,in:e}){vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"junction",edges:[],in:e}},"addJunction"),prt=o(()=>Object.values(vr.records.nodes).filter(Lve),"getJunctions"),mrt=o(()=>Object.values(vr.records.nodes),"getNodes"),hF=o(t=>vr.records.nodes[t],"getNode"),grt=o(function({id:t,icon:e,in:r,title:n}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The group id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The group [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The group [${t}]'s parent does not exist. Please make sure the parent is created before this group`);if(vr.records.registeredIds[r]==="node")throw new Error(`The group [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="group",vr.records.groups[t]={id:t,icon:e,title:n,in:r}},"addGroup"),yrt=o(()=>Object.values(vr.records.groups),"getGroups"),vrt=o(function({lhsId:t,rhsId:e,lhsDir:r,rhsDir:n,lhsInto:i,rhsInto:a,lhsGroup:s,rhsGroup:l,title:u}){if(!uF(r))throw new Error(`Invalid direction given for left hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${r}`);if(!uF(n))throw new Error(`Invalid direction given for right hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${n}`);if(vr.records.nodes[t]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The left-hand id [${t}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(vr.records.nodes[e]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The right-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);let h=vr.records.nodes[t].in,f=vr.records.nodes[e].in;if(s&&h&&f&&h==f)throw new Error(`The left-hand id [${t}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(l&&h&&f&&h==f)throw new Error(`The right-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let d={lhsId:t,lhsDir:r,lhsInto:i,lhsGroup:s,rhsId:e,rhsDir:n,rhsInto:a,rhsGroup:l,title:u};vr.records.edges.push(d),vr.records.nodes[t]&&vr.records.nodes[e]&&(vr.records.nodes[t].edges.push(vr.records.edges[vr.records.edges.length-1]),vr.records.nodes[e].edges.push(vr.records.edges[vr.records.edges.length-1]))},"addEdge"),xrt=o(()=>vr.records.edges,"getEdges"),brt=o(()=>{if(vr.records.dataStructures===void 0){let t={},e=Object.entries(vr.records.nodes).reduce((l,[u,h])=>(l[u]=h.edges.reduce((f,d)=>{let p=hF(d.lhsId)?.in,m=hF(d.rhsId)?.in;if(p&&m&&p!==m){let g=_ve(d.lhsDir,d.rhsDir);g!=="bend"&&(t[p]??={},t[p][m]=g,t[m]??={},t[m][p]=g)}if(d.lhsId===u){let g=b4(d.lhsDir,d.rhsDir);g&&(f[g]=d.rhsId)}else{let g=b4(d.rhsDir,d.lhsDir);g&&(f[g]=d.lhsId)}return f},{}),l),{}),r=Object.keys(e)[0],n={[r]:1},i=Object.keys(e).reduce((l,u)=>u===r?l:{...l,[u]:1},{}),a=o(l=>{let u={[l]:[0,0]},h=[l];for(;h.length>0;){let f=h.shift();if(f){n[f]=1,delete i[f];let d=e[f],[p,m]=u[f];Object.entries(d).forEach(([g,y])=>{n[y]||(u[y]=Cve([p,m],g),h.push(y))})}}return u},"BFS"),s=[a(r)];for(;Object.keys(i).length>0;)s.push(a(Object.keys(i)[0]));vr.records.dataStructures={adjList:e,spatialMaps:s,groupAlignments:t}}return vr.records.dataStructures},"getDataStructures"),wrt=o((t,e)=>{vr.records.elements[t]=e},"setElementForId"),Trt=o(t=>vr.records.elements[t],"getElementById"),Qp={clear:urt,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addService:hrt,getServices:frt,addJunction:drt,getJunctions:prt,getNodes:mrt,getNode:hF,addGroup:grt,getGroups:yrt,addEdge:vrt,getEdges:xrt,setElementForId:wrt,getElementById:Trt,getDataStructures:brt};o(Li,"getConfigField")});var krt,Nve,Mve=N(()=>{"use strict";kp();vt();T1();w4();krt=o((t,e)=>{$c(t,e),t.groups.map(e.addGroup),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(e.addEdge)},"populateDb"),Nve={parse:o(async t=>{let e=await uo("architecture",t);Y.debug(e),krt(e,Qp)},"parse")}});var Ert,Ive,Ove=N(()=>{"use strict";Ert=o(t=>` | |
| 2526 | + .edge { | |
| 2527 | + stroke-width: ${t.archEdgeWidth}; | |
| 2528 | + stroke: ${t.archEdgeColor}; | |
| 2529 | + fill: none; | |
| 2530 | + } | |
| 2531 | + | |
| 2532 | + .arrow { | |
| 2533 | + fill: ${t.archEdgeArrowColor}; | |
| 2534 | + } | |
| 2535 | + | |
| 2536 | + .node-bkg { | |
| 2537 | + fill: none; | |
| 2538 | + stroke: ${t.archGroupBorderColor}; | |
| 2539 | + stroke-width: ${t.archGroupBorderWidth}; | |
| 2540 | + stroke-dasharray: 8; | |
| 2541 | + } | |
| 2542 | + .node-icon-text { | |
| 2543 | + display: flex; | |
| 2544 | + align-items: center; | |
| 2545 | + } | |
| 2546 | + | |
| 2547 | + .node-icon-text > div { | |
| 2548 | + color: #fff; | |
| 2549 | + margin: 1px; | |
| 2550 | + height: fit-content; | |
| 2551 | + text-align: center; | |
| 2552 | + overflow: hidden; | |
| 2553 | + display: -webkit-box; | |
| 2554 | + -webkit-box-orient: vertical; | |
| 2555 | + } | |
| 2556 | +`,"getStyles"),Ive=Ert});var dF=Mi((T4,fF)=>{"use strict";o(function(e,r){typeof T4=="object"&&typeof fF=="object"?fF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof T4=="object"?T4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(T4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=28)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;y<g.length;y++)p=g[y],m=p.withChildren(),m.forEach(function(v){d.add(v)});return d},h.prototype.getNoOfChildren=function(){var d=0,p;if(this.child==null)d=1;else for(var m=this.child.getNodes(),g=0;g<m.length;g++)p=m[g],d+=p.getNoOfChildren();return d==0&&(d=1),d},h.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},h.prototype.calcEstimatedSize=function(){return this.child==null?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},h.prototype.scatter=function(){var d,p,m=-s.INITIAL_WORLD_BOUNDARY,g=s.INITIAL_WORLD_BOUNDARY;d=s.WORLD_CENTER_X+l.nextDouble()*(g-m)+m;var y=-s.INITIAL_WORLD_BOUNDARY,v=s.INITIAL_WORLD_BOUNDARY;p=s.WORLD_CENTER_Y+l.nextDouble()*(v-y)+y,this.rect.x=d,this.rect.y=p},h.prototype.updateBounds=function(){if(this.getChild()==null)throw"assert failed";if(this.getChild().getNodes().length!=0){var d=this.getChild();if(d.updateBounds(!0),this.rect.x=d.getLeft(),this.rect.y=d.getTop(),this.setWidth(d.getRight()-d.getLeft()),this.setHeight(d.getBottom()-d.getTop()),s.NODE_DIMENSIONS_INCLUDE_LABELS){var p=d.getRight()-d.getLeft(),m=d.getBottom()-d.getTop();this.labelWidth&&(this.labelPosHorizontal=="left"?(this.rect.x-=this.labelWidth,this.setWidth(p+this.labelWidth)):this.labelPosHorizontal=="center"&&this.labelWidth>p?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w<b;w++)x=v[w],x.isInterGraph?this.graphManager.remove(x):x.source.owner.remove(x);var C=this.nodes.indexOf(y);if(C==-1)throw"Node not in owner node list!";this.nodes.splice(C,1)}else if(g instanceof u){var x=g;if(x==null)throw"Edge is null!";if(!(x.source!=null&&x.target!=null))throw"Source and/or target is null!";if(!(x.source.owner!=null&&x.target.owner!=null&&x.source.owner==this&&x.target.owner==this))throw"Source and/or target owner is invalid!";var T=x.source.edges.indexOf(x),E=x.target.edges.indexOf(x);if(!(T>-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var C=x.source.owner.getEdges().indexOf(x);if(C==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(C,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),C=w.length,T=0;T<C;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A,S=this.nodes,_=S.length,I=0;I<_;I++){var D=S[I];g&&D.child!=null&&D.updateBounds(),w=D.getLeft(),C=D.getRight(),T=D.getTop(),E=D.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var k=new h(y,x,v-y,b-x);y==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),S[0].getParent().paddingLeft!=null?A=S[0].getParent().paddingLeft:A=this.margin,this.left=k.x-A,this.right=k.x+k.width+A,this.top=k.y-A,this.bottom=k.y+k.height+A},p.calculateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A=g.length,S=0;S<A;S++){var _=g[S];w=_.getLeft(),C=_.getRight(),T=_.getTop(),E=_.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var I=new h(y,x,v-y,b-x);return I},p.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},p.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},p.prototype.calcEstimatedSize=function(){for(var g=0,y=this.nodes,v=y.length,x=0;x<v;x++){var b=y[x];g+=b.calcEstimatedSize()}return g==0?this.estimatedSize=a.EMPTY_COMPOUND_NODE_SIZE:this.estimatedSize=g/Math.sqrt(this.nodes.length),this.estimatedSize},p.prototype.updateConnected=function(){var g=this;if(this.nodes.length==0){this.isConnected=!0;return}var y=new d,v=new Set,x=this.nodes[0],b,w,C=x.withChildren();for(C.forEach(function(I){y.push(I),v.add(I)});y.length!==0;){x=y.shift(),b=x.getEdges();for(var T=b.length,E=0;E<T;E++){var A=b[E];if(w=A.getOtherEndInGraph(x,this),w!=null&&!v.has(w)){var S=w.withChildren();S.forEach(function(I){y.push(I),v.add(I)})}}}if(this.isConnected=!1,v.size>=this.nodes.length){var _=0;v.forEach(function(I){I.owner==g&&_++}),_==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d<f;d++)h=u[d],l.remove(h);var p=[];p=p.concat(l.getNodes());var m;f=p.length;for(var d=0;d<f;d++)m=p[d],l.remove(m);l==this.rootGraph&&this.setRootGraph(null);var g=this.graphs.indexOf(l);this.graphs.splice(g,1),l.parent=null}else if(s instanceof i){if(h=s,h==null)throw"Edge is null!";if(!h.isInterGraph)throw"Not an inter-graph edge!";if(!(h.source!=null&&h.target!=null))throw"Source and/or target is null!";if(!(h.source.edges.indexOf(h)!=-1&&h.target.edges.indexOf(h)!=-1))throw"Source and/or target doesn't know this edge!";var g=h.source.edges.indexOf(h);if(h.source.edges.splice(g,1),g=h.target.edges.indexOf(h),h.target.edges.splice(g,1),!(h.source.owner!=null&&h.source.owner.getGraphManager()!=null))throw"Edge owner graph or owner graph manager is null!";if(h.source.owner.getGraphManager().edges.indexOf(h)==-1)throw"Not in owner graph manager's edge list!";var g=h.source.owner.getGraphManager().edges.indexOf(h);h.source.owner.getGraphManager().edges.splice(g,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(this.allNodes==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<u;h++)s=s.concat(l[h].getNodes());this.allNodes=s}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(this.allEdges==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<l.length;h++)s=s.concat(l[h].getEdges());s=s.concat(this.edges),this.allEdges=s}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(s){if(this.allNodesToApplyGravitation!=null)throw"assert failed";this.allNodesToApplyGravitation=s},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(s){if(s.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=s,s.parent==null&&(s.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(s,l){if(!(s!=null&&l!=null))throw"assert failed";if(s==l)return!0;var u=s.getOwner(),h;do{if(h=u.getParent(),h==null)break;if(h==l)return!0;if(u=h.getOwner(),u==null)break}while(!0);u=l.getOwner();do{if(h=u.getParent(),h==null)break;if(h==s)return!0;if(u=h.getOwner(),u==null)break}while(!0);return!1},a.prototype.calcLowestCommonAncestors=function(){for(var s,l,u,h,f,d=this.getAllEdges(),p=d.length,m=0;m<p;m++){if(s=d[m],l=s.source,u=s.target,s.lca=null,s.sourceInLca=l,s.targetInLca=u,l==u){s.lca=l.getOwner();continue}for(h=l.getOwner();s.lca==null;){for(s.targetInLca=u,f=u.getOwner();s.lca==null;){if(f==h){s.lca=f;break}if(f==this.rootGraph)break;if(s.lca!=null)throw"assert failed";s.targetInLca=f.getParent(),f=s.targetInLca.getOwner()}if(h==this.rootGraph)break;s.lca==null&&(s.sourceInLca=h.getParent(),h=s.sourceInLca.getOwner())}if(s.lca==null)throw"assert failed"}},a.prototype.calcLowestCommonAncestor=function(s,l){if(s==l)return s.getOwner();var u=s.getOwner();do{if(u==null)break;var h=l.getOwner();do{if(h==null)break;if(h==u)return h;h=h.getParent().getOwner()}while(!0);u=u.getParent().getOwner()}while(!0);return u},a.prototype.calcInclusionTreeDepths=function(s,l){s==null&&l==null&&(s=this.rootGraph,l=1);for(var u,h=s.getNodes(),f=h.length,d=0;d<f;d++)u=h[d],u.inclusionTreeDepth=l,u.child!=null&&this.calcInclusionTreeDepths(u.child,l+1)},a.prototype.includesInvalidEdge=function(){for(var s,l=[],u=this.edges.length,h=0;h<u;h++)s=this.edges[h],this.isOneAncestorOfOther(s.source,s.target)&&l.push(s);for(var h=0;h<l.length;h++)this.remove(l[h]);return!1},t.exports=a},function(t,e,r){"use strict";var n=r(12);function i(){}o(i,"IGeometry"),i.calcSeparationAmount=function(a,s,l,u){if(!a.intersects(s))throw"assert failed";var h=new Array(2);this.decideDirectionsForOverlappingNodes(a,s,h),l[0]=Math.min(a.getRight(),s.getRight())-Math.max(a.x,s.x),l[1]=Math.min(a.getBottom(),s.getBottom())-Math.max(a.y,s.y),a.getX()<=s.getX()&&a.getRight()>=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]<p?p=l[0]:d=l[1],l[0]=-1*h[0]*(p/2+u),l[1]=-1*h[1]*(d/2+u)},i.decideDirectionsForOverlappingNodes=function(a,s,l){a.getCenterX()<s.getCenterX()?l[0]=-1:l[0]=1,a.getCenterY()<s.getCenterY()?l[1]=-1:l[1]=1},i.getIntersection2=function(a,s,l){var u=a.getCenterX(),h=a.getCenterY(),f=s.getCenterX(),d=s.getCenterY();if(a.intersects(s))return l[0]=u,l[1]=h,l[2]=f,l[3]=d,!0;var p=a.getX(),m=a.getY(),g=a.getRight(),y=a.getX(),v=a.getBottom(),x=a.getRight(),b=a.getWidthHalf(),w=a.getHeightHalf(),C=s.getX(),T=s.getY(),E=s.getRight(),A=s.getX(),S=s.getBottom(),_=s.getRight(),I=s.getWidthHalf(),D=s.getHeightHalf(),k=!1,L=!1;if(u===f){if(h>d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(h<d)return l[0]=u,l[1]=v,l[2]=f,l[3]=T,!1}else if(h===d){if(u>f)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(u<f)return l[0]=g,l[1]=h,l[2]=C,l[3]=d,!1}else{var R=a.height/a.width,O=s.height/s.width,M=(d-h)/(f-u),B=void 0,F=void 0,P=void 0,z=void 0,$=void 0,H=void 0;if(-R===M?u>f?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):R===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===M?f>u?(l[2]=A,l[3]=S,L=!0):(l[2]=E,l[3]=T,L=!0):O===M&&(f>u?(l[2]=C,l[3]=T,L=!0):(l[2]=_,l[3]=S,L=!0)),k&&L)return!1;if(u>f?h>d?(B=this.getCardinalDirection(R,M,4),F=this.getCardinalDirection(O,M,2)):(B=this.getCardinalDirection(-R,M,3),F=this.getCardinalDirection(-O,M,1)):h>d?(B=this.getCardinalDirection(-R,M,1),F=this.getCardinalDirection(-O,M,3)):(B=this.getCardinalDirection(R,M,2),F=this.getCardinalDirection(O,M,4)),!k)switch(B){case 1:z=m,P=u+-w/M,l[0]=P,l[1]=z;break;case 2:P=x,z=h+b*M,l[0]=P,l[1]=z;break;case 3:z=v,P=u+w/M,l[0]=P,l[1]=z;break;case 4:P=y,z=h+-b*M,l[0]=P,l[1]=z;break}if(!L)switch(F){case 1:H=T,$=f+-D/M,l[2]=$,l[3]=H;break;case 2:$=_,H=d+I*M,l[2]=$,l[3]=H;break;case 3:H=S,$=f+D/M,l[2]=$,l[3]=H;break;case 4:$=A,H=d+-I*M,l[2]=$,l[3]=H;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,C=void 0,T=void 0,E=void 0,A=void 0,S=void 0,_=void 0;return w=p-f,T=h-d,A=d*f-h*p,C=v-g,E=m-y,S=y*g-m*v,_=w*E-C*T,_===0?null:(x=(T*S-E*A)/_,b=(C*A-w*S)/_,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l<a?h+=Math.PI:u<s&&(h+=this.TWO_PI)):u<s?h=this.ONE_AND_HALF_PI:h=this.HALF_PI,h},i.doIntersect=function(a,s,l,u){var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=(d-h)*(v-g)-(y-m)*(p-f);if(x===0)return!1;var b=((v-g)*(y-h)+(m-y)*(v-f))/x,w=((f-p)*(y-h)+(d-h)*(v-f))/x;return 0<b&&b<1&&0<w&&w<1},i.findCircleLineIntersections=function(a,s,l,u,h,f,d){var p=(l-a)*(l-a)+(u-s)*(u-s),m=2*((a-h)*(l-a)+(s-f)*(u-s)),g=(a-h)*(a-h)+(s-f)*(s-f)-d*d,y=m*m-4*p*g;if(y>=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p<d.length;p++){var m=d[p];m.enumerable=m.enumerable||!1,m.configurable=!0,"value"in m&&(m.writable=!0),Object.defineProperty(f,m.key,m)}}return o(h,"defineProperties"),function(f,d,p){return d&&h(f.prototype,d),p&&h(f,p),f}}();function i(h,f){if(!(h instanceof f))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=o(function(f){return{value:f,next:null,prev:null}},"nodeFrom"),s=o(function(f,d,p,m){return f!==null?f.next=d:m.head=d,p!==null?p.prev=d:m.tail=d,d.prev=f,d.next=p,m.length++,d},"add"),l=o(function(f,d){var p=f.prev,m=f.next;return p!==null?p.next=m:d.head=m,m!==null?m.prev=p:d.tail=p,f.prev=f.next=null,d.length--,f},"_remove"),u=function(){function h(f){var d=this;i(this,h),this.length=0,this.head=null,this.tail=null,f?.forEach(function(p){return d.push(p)})}return o(h,"LinkedList"),n(h,[{key:"size",value:o(function(){return this.length},"size")},{key:"insertBefore",value:o(function(d,p){return s(p.prev,a(d),p,this)},"insertBefore")},{key:"insertAfter",value:o(function(d,p){return s(p,a(d),p.next,this)},"insertAfter")},{key:"insertNodeBefore",value:o(function(d,p){return s(p.prev,d,p,this)},"insertNodeBefore")},{key:"insertNodeAfter",value:o(function(d,p){return s(p,d,p.next,this)},"insertNodeAfter")},{key:"push",value:o(function(d){return s(this.tail,a(d),null,this)},"push")},{key:"unshift",value:o(function(d){return s(null,a(d),this.head,this)},"unshift")},{key:"remove",value:o(function(d){return l(d,this)},"remove")},{key:"pop",value:o(function(){return l(this.tail,this).value},"pop")},{key:"popNode",value:o(function(){return l(this.tail,this)},"popNode")},{key:"shift",value:o(function(){return l(this.head,this).value},"shift")},{key:"shiftNode",value:o(function(){return l(this.head,this)},"shiftNode")},{key:"get_object_at",value:o(function(d){if(d<=this.length()){for(var p=1,m=this.head;p<d;)m=m.next,p++;return m.value}},"get_object_at")},{key:"set_object_at",value:o(function(d,p){if(d<=this.length()){for(var m=1,g=this.head;m<d;)g=g.next,m++;g.value=p}},"set_object_at")}]),h}();t.exports=u},function(t,e,r){"use strict";function n(i,a,s){this.x=null,this.y=null,i==null&&a==null&&s==null?(this.x=0,this.y=0):typeof i=="number"&&typeof a=="number"&&s==null?(this.x=i,this.y=a):i.constructor.name=="Point"&&a==null&&s==null&&(s=i,this.x=s.x,this.y=s.y)}o(n,"Point"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.getLocation=function(){return new n(this.x,this.y)},n.prototype.setLocation=function(i,a,s){i.constructor.name=="Point"&&a==null&&s==null?(s=i,this.setLocation(s.x,s.y)):typeof i=="number"&&typeof a=="number"&&s==null&&(parseInt(i)==i&&parseInt(a)==a?this.move(i,a):(this.x=Math.floor(i+.5),this.y=Math.floor(a+.5)))},n.prototype.move=function(i,a){this.x=i,this.y=a},n.prototype.translate=function(i,a){this.x+=i,this.y+=a},n.prototype.equals=function(i){if(i.constructor.name=="Point"){var a=i;return this.x==a.x&&this.y==a.y}return this==i},n.prototype.toString=function(){return new n().constructor.name+"[x="+this.x+",y="+this.y+"]"},t.exports=n},function(t,e,r){"use strict";function n(i,a,s,l){this.x=0,this.y=0,this.width=0,this.height=0,i!=null&&a!=null&&s!=null&&l!=null&&(this.x=i,this.y=a,this.width=s,this.height=l)}o(n,"RectangleD"),n.prototype.getX=function(){return this.x},n.prototype.setX=function(i){this.x=i},n.prototype.getY=function(){return this.y},n.prototype.setY=function(i){this.y=i},n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},n.prototype.getRight=function(){return this.x+this.width},n.prototype.getBottom=function(){return this.y+this.height},n.prototype.intersects=function(i){return!(this.getRight()<i.x||this.getBottom()<i.y||i.getRight()<this.x||i.getBottom()<this.y)},n.prototype.getCenterX=function(){return this.x+this.width/2},n.prototype.getMinX=function(){return this.getX()},n.prototype.getMaxX=function(){return this.getX()+this.width},n.prototype.getCenterY=function(){return this.y+this.height/2},n.prototype.getMinY=function(){return this.getY()},n.prototype.getMaxY=function(){return this.getY()+this.height},n.prototype.getWidthHalf=function(){return this.width/2},n.prototype.getHeightHalf=function(){return this.height/2},t.exports=n},function(t,e,r){"use strict";var n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(a){return typeof a}:function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};function i(){}o(i,"UniqueIDGeneretor"),i.lastID=0,i.createID=function(a){return i.isPrimitive(a)?a:(a.uniqueID!=null||(a.uniqueID=i.getString(),i.lastID++),a.uniqueID)},i.getString=function(a){return a==null&&(a=i.lastID),"Object#"+a},i.isPrimitive=function(a){var s=typeof a>"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g<m.length;g++)y[g]=m[g];return y}else return Array.from(m)}o(n,"_toConsumableArray");var i=r(0),a=r(7),s=r(3),l=r(1),u=r(6),h=r(5),f=r(17),d=r(29);function p(m){d.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,m!=null&&(this.isRemoteUse=m)}o(p,"Layout"),p.RANDOM_SEED=1,p.prototype=Object.create(d.prototype),p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},p.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},p.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},p.prototype.newGraphManager=function(){var m=new a(this);return this.graphManager=m,m},p.prototype.newGraph=function(m){return new u(null,this.graphManager,m)},p.prototype.newNode=function(m){return new s(this.graphManager,m)},p.prototype.newEdge=function(m){return new l(null,null,m)},p.prototype.checkLayoutSuccess=function(){return this.graphManager.getRoot()==null||this.graphManager.getRoot().getNodes().length==0||this.graphManager.includesInvalidEdge()},p.prototype.runLayout=function(){this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters();var m;return this.checkLayoutSuccess()?m=!1:m=this.layout(),i.ANIMATE==="during"?!1:(m&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,m)},p.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},p.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var m,g=this.graphManager.getAllEdges(),y=0;y<g.length;y++)m=g[y];for(var v,x=this.graphManager.getRoot().getNodes(),y=0;y<x.length;y++)v=x[y];this.update(this.graphManager.getRoot())}},p.prototype.update=function(m){if(m==null)this.update2();else if(m instanceof s){var g=m;if(g.getChild()!=null)for(var y=g.getChild().getNodes(),v=0;v<y.length;v++)update(y[v]);if(g.vGraphObject!=null){var x=g.vGraphObject;x.update(g)}}else if(m instanceof l){var b=m;if(b.vGraphObject!=null){var w=b.vGraphObject;w.update(b)}}else if(m instanceof u){var C=m;if(C.vGraphObject!=null){var T=C.vGraphObject;T.update(C)}}},p.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},p.prototype.transform=function(m){if(m==null)this.transform(new h(0,0));else{var g=new f,y=this.graphManager.getRoot().updateLeftTop();if(y!=null){g.setWorldOrgX(m.x),g.setWorldOrgY(m.y),g.setDeviceOrgX(y.x),g.setDeviceOrgY(y.y);for(var v=this.getAllNodes(),x,b=0;b<v.length;b++)x=v[b],x.transform(g)}}},p.prototype.positionNodesRandomly=function(m){if(m==null)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var g,y,v=m.getNodes(),x=0;x<v.length;x++)g=v[x],y=g.getChild(),y==null||y.getNodes().length==0?g.scatter():(this.positionNodesRandomly(y),g.updateBounds())},p.prototype.getFlatForest=function(){for(var m=[],g=!0,y=this.graphManager.getRoot().getNodes(),v=!0,x=0;x<y.length;x++)y[x].getChild()!=null&&(v=!1);if(!v)return m;var b=new Set,w=[],C=new Map,T=[];for(T=T.concat(y);T.length>0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var A=E.getEdges(),x=0;x<A.length;x++){var S=A[x].getOtherEnd(E);if(C.get(E)!=S)if(!b.has(S))w.push(S),C.set(S,E);else{g=!1;break}}}if(!g)m=[];else{var _=[].concat(n(b));m.push(_);for(var x=0;x<_.length;x++){var I=_[x],D=T.indexOf(I);D>-1&&T.splice(D,1)}b=new Set,C=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x<m.bendpoints.length;x++){var b=this.newNode(null);b.setRect(new Point(0,0),new Dimension(1,1)),v.add(b);var w=this.newEdge(null);this.graphManager.add(w,y,b),g.add(b),y=b}var w=this.newEdge(null);return this.graphManager.add(w,y,m.target),this.edgeToDummyNodes.set(m,g),m.isInterGraph()?this.graphManager.remove(m):v.remove(m),g},p.prototype.createBendpointsFromDummyNodes=function(){var m=[];m=m.concat(this.graphManager.getAllEdges()),m=[].concat(n(this.edgeToDummyNodes.keys())).concat(m);for(var g=0;g<m.length;g++){var y=m[g];if(y.bendpoints.length>0){for(var v=this.edgeToDummyNodes.get(y),x=0;x<v.length;x++){var b=v[x],w=new h(b.getCenterX(),b.getCenterY()),C=y.bendpoints.get(x);C.x=w.x,C.y=w.y,b.getOwner().remove(b)}this.graphManager.add(y,y.source,y.target)}}},p.transform=function(m,g,y,v){if(y!=null&&v!=null){var x=g;if(m<=50){var b=g/y;x-=(g-b)/50*(50-m)}else{var w=g*v;x+=(w-g)/50*(m-50)}return x}else{var C,T;return m<=50?(C=9*g/500,T=g/10):(C=9*g/50,T=-8*g),C*m+T}},p.findCenterOfTree=function(m){var g=[];g=g.concat(m);var y=[],v=new Map,x=!1,b=null;(g.length==1||g.length==2)&&(x=!0,b=g[0]);for(var w=0;w<g.length;w++){var C=g[w],T=C.getNeighborsList().size;v.set(C,C.getNeighborsList().size),T==1&&y.push(C)}var E=[];for(E=E.concat(y);!x;){var A=[];A=A.concat(E),E=[];for(var w=0;w<g.length;w++){var C=g[w],S=g.indexOf(C);S>=0&&g.splice(S,1);var _=C.getNeighborsList();_.forEach(function(k){if(y.indexOf(k)<0){var L=v.get(k),R=L-1;R==1&&E.push(k),v.set(k,R)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(5);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);p<d.length;p++)m[p]=d[p];return m}else return Array.from(d)}o(n,"_toConsumableArray");var i=r(15),a=r(4),s=r(0),l=r(8),u=r(9);function h(){i.call(this),this.useSmartIdealEdgeLengthCalculation=a.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=a.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=a.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=a.MAX_ITERATIONS}o(h,"FDLayout"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=a.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},h.prototype.calcIdealEdgeLengths=function(){for(var d,p,m,g,y,v,x,b=this.getGraphManager().getAllEdges(),w=0;w<b.length;w++)d=b[w],p=d.idealLength,d.isInterGraph&&(g=d.getSource(),y=d.getTarget(),v=d.getSourceInLca().getEstimatedSize(),x=d.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(d.idealLength+=v+x-2*s.SIMPLE_NODE_SIZE),m=d.getLca().getInclusionTreeDepth(),d.idealLength+=p*a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(g.getInclusionTreeDepth()+y.getInclusionTreeDepth()-2*m))},h.prototype.initSpringEmbedder=function(){var d=this.getAllNodes().length;this.incremental?(d>a.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m<d.length;m++)p=d[m],this.calcSpringForce(p,p.idealLength)},h.prototype.calcRepulsionForces=function(){var d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;m<x.length;m++)y=x[m],this.calculateRepulsionForceOfANode(y,b,d,p),b.add(y);else for(m=0;m<x.length;m++)for(y=x[m],g=m+1;g<x.length;g++)v=x[g],y.getOwner()==v.getOwner()&&this.calcRepulsionForce(y,v)},h.prototype.calcGravitationalForces=function(){for(var d,p=this.getAllNodesToApplyGravitation(),m=0;m<p.length;m++)d=p[m],this.calcGravitationalForce(d)},h.prototype.moveNodes=function(){for(var d=this.getAllNodes(),p,m=0;m<d.length;m++)p=d[m],p.move()},h.prototype.calcSpringForce=function(d,p){var m=d.getSource(),g=d.getTarget(),y,v,x,b;if(this.uniformLeafNodeSizes&&m.getChild()==null&&g.getChild()==null)d.updateLengthSimple();else if(d.updateLength(),d.isOverlapingSourceAndTarget)return;y=d.getLength(),y!=0&&(v=d.edgeElasticity*(y-p),x=v*(d.lengthX/y),b=v*(d.lengthY/y),m.springForceX+=x,m.springForceY+=b,g.springForceX-=x,g.springForceY-=b)},h.prototype.calcRepulsionForce=function(d,p){var m=d.getRect(),g=p.getRect(),y=new Array(2),v=new Array(4),x,b,w,C,T,E,A;if(m.intersects(g)){l.calcSeparationAmount(m,g,y,a.DEFAULT_EDGE_LENGTH/2),E=2*y[0],A=2*y[1];var S=d.noOfChildren*p.noOfChildren/(d.noOfChildren+p.noOfChildren);d.repulsionForceX-=S*E,d.repulsionForceY-=S*A,p.repulsionForceX+=S*E,p.repulsionForceY+=S*A}else this.uniformLeafNodeSizes&&d.getChild()==null&&p.getChild()==null?(x=g.getCenterX()-m.getCenterX(),b=g.getCenterY()-m.getCenterY()):(l.getIntersection(m,g,v),x=v[2]-v[0],b=v[3]-v[1]),Math.abs(x)<a.MIN_REPULSION_DIST&&(x=u.sign(x)*a.MIN_REPULSION_DIST),Math.abs(b)<a.MIN_REPULSION_DIST&&(b=u.sign(b)*a.MIN_REPULSION_DIST),w=x*x+b*b,C=Math.sqrt(w),T=(d.nodeRepulsion/2+p.nodeRepulsion/2)*d.noOfChildren*p.noOfChildren/w,E=T*x/C,A=T*b/C,d.repulsionForceX-=E,d.repulsionForceY-=A,p.repulsionForceX+=E,p.repulsionForceY+=A},h.prototype.calcGravitationalForce=function(d){var p,m,g,y,v,x,b,w;p=d.getOwner(),m=(p.getRight()+p.getLeft())/2,g=(p.getTop()+p.getBottom())/2,y=d.getCenterX()-m,v=d.getCenterY()-g,x=Math.abs(y)+d.getWidth()/2,b=Math.abs(v)+d.getHeight()/2,d.getOwner()==this.graphManager.getRoot()?(w=p.getEstimatedSize()*this.gravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,d||p},h.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},h.prototype.calcNoOfChildrenForAllNodes=function(){for(var d,p=this.graphManager.getAllNodes(),m=0;m<p.length;m++)d=p[m],d.noOfChildren=d.getNoOfChildren()},h.prototype.calcGrid=function(d){var p=0,m=0;p=parseInt(Math.ceil((d.getRight()-d.getLeft())/this.repulsionRange)),m=parseInt(Math.ceil((d.getBottom()-d.getTop())/this.repulsionRange));for(var g=new Array(p),y=0;y<p;y++)g[y]=new Array(m);for(var y=0;y<p;y++)for(var v=0;v<m;v++)g[y][v]=new Array;return g},h.prototype.addNodeToGrid=function(d,p,m){var g=0,y=0,v=0,x=0;g=parseInt(Math.floor((d.getRect().x-p)/this.repulsionRange)),y=parseInt(Math.floor((d.getRect().width+d.getRect().x-p)/this.repulsionRange)),v=parseInt(Math.floor((d.getRect().y-m)/this.repulsionRange)),x=parseInt(Math.floor((d.getRect().height+d.getRect().y-m)/this.repulsionRange));for(var b=g;b<=y;b++)for(var w=v;w<=x;w++)this.grid[b][w].push(d),d.setGridCoordinates(g,y,v,x)},h.prototype.updateGrid=function(){var d,p,m=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),d=0;d<m.length;d++)p=m[d],this.addNodeToGrid(p,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},h.prototype.calculateRepulsionForceOfANode=function(d,p,m,g){if(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&m||g){var y=new Set;d.surrounding=new Array;for(var v,x=this.grid,b=d.startX-1;b<d.finishX+2;b++)for(var w=d.startY-1;w<d.finishY+2;w++)if(!(b<0||w<0||b>=x.length||w>=x[0].length)){for(var C=0;C<x[b][w].length;C++)if(v=x[b][w][C],!(d.getOwner()!=v.getOwner()||d==v)&&!p.has(v)&&!y.has(v)){var T=Math.abs(d.getCenterX()-v.getCenterX())-(d.getWidth()/2+v.getWidth()/2),E=Math.abs(d.getCenterY()-v.getCenterY())-(d.getHeight()/2+v.getHeight()/2);T<=this.repulsionRange&&E<=this.repulsionRange&&y.add(v)}}d.surrounding=[].concat(n(y))}for(b=0;b<d.surrounding.length;b++)this.calcRepulsionForce(d,d.surrounding[b])},h.prototype.calcRepulsionRange=function(){return 0},t.exports=h},function(t,e,r){"use strict";var n=r(1),i=r(4);function a(l,u,h){n.call(this,l,u,h),this.idealLength=i.DEFAULT_EDGE_LENGTH,this.edgeElasticity=i.DEFAULT_SPRING_STRENGTH}o(a,"FDLayoutEdge"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];t.exports=a},function(t,e,r){"use strict";var n=r(3),i=r(4);function a(l,u,h,f){n.call(this,l,u,h,f),this.nodeRepulsion=i.DEFAULT_REPULSION_STRENGTH,this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}o(a,"FDLayoutNode"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];a.prototype.setGridCoordinates=function(l,u,h,f){this.startX=l,this.finishX=u,this.startY=h,this.finishY=f},t.exports=a},function(t,e,r){"use strict";function n(i,a){this.width=0,this.height=0,i!==null&&a!==null&&(this.height=a,this.width=i)}o(n,"DimensionD"),n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},t.exports=n},function(t,e,r){"use strict";var n=r(14);function i(){this.map={},this.keys=[]}o(i,"HashMap"),i.prototype.put=function(a,s){var l=n.createID(a);this.contains(l)||(this.map[l]=s,this.keys.push(a))},i.prototype.contains=function(a){var s=n.createID(a);return this.map[a]!=null},i.prototype.get=function(a){var s=n.createID(a);return this.map[s]},i.prototype.keySet=function(){return this.keys},t.exports=i},function(t,e,r){"use strict";var n=r(14);function i(){this.set={}}o(i,"HashSet"),i.prototype.add=function(a){var s=n.createID(a);this.contains(s)||(this.set[s]=a)},i.prototype.remove=function(a){delete this.set[n.createID(a)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(a){return this.set[n.createID(a)]==a},i.prototype.isEmpty=function(){return this.size()===0},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(a){for(var s=Object.keys(this.set),l=s.length,u=0;u<l;u++)a.push(this.set[s[u]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(a){for(var s=a.length,l=0;l<s;l++){var u=a[l];this.add(u)}},t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"Matrix"),n.multMat=function(i,a){for(var s=[],l=0;l<i.length;l++){s[l]=[];for(var u=0;u<a[0].length;u++){s[l][u]=0;for(var h=0;h<i[0].length;h++)s[l][u]+=i[l][h]*a[h][u]}}return s},n.transpose=function(i){for(var a=[],s=0;s<i[0].length;s++){a[s]=[];for(var l=0;l<i.length;l++)a[s][l]=i[l][s]}return a},n.multCons=function(i,a){for(var s=[],l=0;l<i.length;l++)s[l]=i[l]*a;return s},n.minusOp=function(i,a){for(var s=[],l=0;l<i.length;l++)s[l]=i[l]-a[l];return s},n.dotProduct=function(i,a){for(var s=0,l=0;l<i.length;l++)s+=i[l]*a[l];return s},n.mag=function(i){return Math.sqrt(this.dotProduct(i,i))},n.normalize=function(i){for(var a=[],s=this.mag(i),l=0;l<i.length;l++)a[l]=i[l]/s;return a},n.multGamma=function(i){for(var a=[],s=0,l=0;l<i.length;l++)s+=i[l];s*=-1/i.length;for(var u=0;u<i.length;u++)a[u]=s+i[u];return a},n.multL=function(i,a,s){for(var l=[],u=[],h=[],f=0;f<a[0].length;f++){for(var d=0,p=0;p<a.length;p++)d+=-.5*a[p][f]*i[p];u[f]=d}for(var m=0;m<s.length;m++){for(var g=0,y=0;y<s.length;y++)g+=s[m][y]*u[y];h[m]=g}for(var v=0;v<a.length;v++){for(var x=0,b=0;b<a[0].length;b++)x+=a[v][b]*h[b];l[v]=x}return l},t.exports=n},function(t,e,r){"use strict";var n=function(){function l(u,h){for(var f=0;f<h.length;f++){var d=h[f];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(u,d.key,d)}}return o(l,"defineProperties"),function(u,h,f){return h&&l(u.prototype,h),f&&l(u,f),u}}();function i(l,u){if(!(l instanceof u))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=r(11),s=function(){function l(u,h){i(this,l),(h!==null||h!==void 0)&&(this.compareFunction=this._defaultCompareFunction);var f=void 0;u instanceof a?f=u.size():f=u.length,this._quicksort(u,0,f-1)}return o(l,"Quicksort"),n(l,[{key:"_quicksort",value:o(function(h,f,d){if(f<d){var p=this._partition(h,f,d);this._quicksort(h,f,p),this._quicksort(h,p+1,d)}},"_quicksort")},{key:"_partition",value:o(function(h,f,d){for(var p=this._get(h,f),m=f,g=d;;){for(;this.compareFunction(p,this._get(h,g));)g--;for(;this.compareFunction(this._get(h,m),p);)m++;if(m<g)this._swap(h,m,g),m++,g--;else return g}},"_partition")},{key:"_get",value:o(function(h,f){return h instanceof a?h.get_object_at(f):h[f]},"_get")},{key:"_set",value:o(function(h,f,d){h instanceof a?h.set_object_at(f,d):h[f]=d},"_set")},{key:"_swap",value:o(function(h,f,d){var p=this._get(h,f);this._set(h,f,this._get(h,d)),this._set(h,d,p)},"_swap")},{key:"_defaultCompareFunction",value:o(function(h,f){return f>h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";function n(){}o(n,"SVD"),n.svd=function(i){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=i.length,this.n=i[0].length;var a=Math.min(this.m,this.n);this.s=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(Math.min(this.m+1,this.n)),this.U=function(xt){var ut=o(function Et(ft){if(ft.length==0)return 0;for(var yt=[],nt=0;nt<ft[0];nt++)yt.push(Et(ft.slice(1)));return yt},"allocate");return ut(xt)}([this.m,a]),this.V=function(xt){var ut=o(function Et(ft){if(ft.length==0)return 0;for(var yt=[],nt=0;nt<ft[0];nt++)yt.push(Et(ft.slice(1)));return yt},"allocate");return ut(xt)}([this.n,this.n]);for(var s=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(this.n),l=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p<Math.max(f,d);p++){if(p<f){this.s[p]=0;for(var m=p;m<this.m;m++)this.s[p]=n.hypot(this.s[p],i[m][p]);if(this.s[p]!==0){i[p][p]<0&&(this.s[p]=-this.s[p]);for(var g=p;g<this.m;g++)i[g][p]/=this.s[p];i[p][p]+=1}this.s[p]=-this.s[p]}for(var y=p+1;y<this.n;y++){if(function(xt,ut){return xt&&ut}(p<f,this.s[p]!==0)){for(var v=0,x=p;x<this.m;x++)v+=i[x][p]*i[x][y];v=-v/i[p][p];for(var b=p;b<this.m;b++)i[b][y]+=v*i[b][p]}s[y]=i[p][y]}if(function(xt,ut){return xt&&ut}(u,p<f))for(var w=p;w<this.m;w++)this.U[w][p]=i[w][p];if(p<d){s[p]=0;for(var C=p+1;C<this.n;C++)s[p]=n.hypot(s[p],s[C]);if(s[p]!==0){s[p+1]<0&&(s[p]=-s[p]);for(var T=p+1;T<this.n;T++)s[T]/=s[p];s[p+1]+=1}if(s[p]=-s[p],function(xt,ut){return xt&&ut}(p+1<this.m,s[p]!==0)){for(var E=p+1;E<this.m;E++)l[E]=0;for(var A=p+1;A<this.n;A++)for(var S=p+1;S<this.m;S++)l[S]+=s[A]*i[S][A];for(var _=p+1;_<this.n;_++)for(var I=-s[_]/s[p+1],D=p+1;D<this.m;D++)i[D][_]+=I*l[D]}if(h)for(var k=p+1;k<this.n;k++)this.V[k][p]=s[k]}}var L=Math.min(this.n,this.m+1);if(f<this.n&&(this.s[f]=i[f][f]),this.m<L&&(this.s[L-1]=0),d+1<L&&(s[d]=i[d][L-1]),s[L-1]=0,u){for(var R=f;R<a;R++){for(var O=0;O<this.m;O++)this.U[O][R]=0;this.U[R][R]=1}for(var M=f-1;M>=0;M--)if(this.s[M]!==0){for(var B=M+1;B<a;B++){for(var F=0,P=M;P<this.m;P++)F+=this.U[P][M]*this.U[P][B];F=-F/this.U[M][M];for(var z=M;z<this.m;z++)this.U[z][B]+=F*this.U[z][M]}for(var $=M;$<this.m;$++)this.U[$][M]=-this.U[$][M];this.U[M][M]=1+this.U[M][M];for(var H=0;H<M-1;H++)this.U[H][M]=0}else{for(var Q=0;Q<this.m;Q++)this.U[Q][M]=0;this.U[M][M]=1}}if(h)for(var j=this.n-1;j>=0;j--){if(function(xt,ut){return xt&&ut}(j<d,s[j]!==0))for(var ie=j+1;ie<a;ie++){for(var ne=0,le=j+1;le<this.n;le++)ne+=this.V[le][j]*this.V[le][ie];ne=-ne/this.V[j+1][j];for(var he=j+1;he<this.n;he++)this.V[he][ie]+=ne*this.V[he][j]}for(var K=0;K<this.n;K++)this.V[K][j]=0;this.V[j][j]=1}for(var X=L-1,te=0,J=Math.pow(2,-52),se=Math.pow(2,-966);L>0;){var ue=void 0,Z=void 0;for(ue=L-2;ue>=-1&&ue!==-1;ue--)if(Math.abs(s[ue])<=se+J*(Math.abs(this.s[ue])+Math.abs(this.s[ue+1]))){s[ue]=0;break}if(ue===L-2)Z=4;else{var Se=void 0;for(Se=L-1;Se>=ue&&Se!==ue;Se--){var ce=(Se!==L?Math.abs(s[Se]):0)+(Se!==ue+1?Math.abs(s[Se-1]):0);if(Math.abs(this.s[Se])<=se+J*ce){this.s[Se]=0;break}}Se===ue?Z=3:Se===L-1?Z=1:(Z=2,ue=Se)}switch(ue++,Z){case 1:{var ae=s[L-2];s[L-2]=0;for(var Oe=L-2;Oe>=ue;Oe--){var ge=n.hypot(this.s[Oe],ae),ze=this.s[Oe]/ge,He=ae/ge;if(this.s[Oe]=ge,Oe!==ue&&(ae=-He*s[Oe-1],s[Oe-1]=ze*s[Oe-1]),h)for(var $e=0;$e<this.n;$e++)ge=ze*this.V[$e][Oe]+He*this.V[$e][L-1],this.V[$e][L-1]=-He*this.V[$e][Oe]+ze*this.V[$e][L-1],this.V[$e][Oe]=ge}}break;case 2:{var Re=s[ue-1];s[ue-1]=0;for(var Ie=ue;Ie<L;Ie++){var be=n.hypot(this.s[Ie],Re),W=this.s[Ie]/be,de=Re/be;if(this.s[Ie]=be,Re=-de*s[Ie],s[Ie]=W*s[Ie],u)for(var re=0;re<this.m;re++)be=W*this.U[re][Ie]+de*this.U[re][ue-1],this.U[re][ue-1]=-de*this.U[re][Ie]+W*this.U[re][ue-1],this.U[re][Ie]=be}}break;case 3:{var oe=Math.max(Math.max(Math.max(Math.max(Math.abs(this.s[L-1]),Math.abs(this.s[L-2])),Math.abs(s[L-2])),Math.abs(this.s[ue])),Math.abs(s[ue])),V=this.s[L-1]/oe,xe=this.s[L-2]/oe,q=s[L-2]/oe,pe=this.s[ue]/oe,ve=s[ue]/oe,Pe=((xe+V)*(xe-V)+q*q)/2,_e=V*q*(V*q),we=0;(function(xt,ut){return xt||ut})(Pe!==0,_e!==0)&&(we=Math.sqrt(Pe*Pe+_e),Pe<0&&(we=-we),we=_e/(Pe+we));for(var Ve=(pe+V)*(pe-V)+we,De=pe*ve,qe=ue;qe<L-1;qe++){var at=n.hypot(Ve,De),Rt=Ve/at,st=De/at;if(qe!==ue&&(s[qe-1]=at),Ve=Rt*this.s[qe]+st*s[qe],s[qe]=Rt*s[qe]-st*this.s[qe],De=st*this.s[qe+1],this.s[qe+1]=Rt*this.s[qe+1],h)for(var Ue=0;Ue<this.n;Ue++)at=Rt*this.V[Ue][qe]+st*this.V[Ue][qe+1],this.V[Ue][qe+1]=-st*this.V[Ue][qe]+Rt*this.V[Ue][qe+1],this.V[Ue][qe]=at;if(at=n.hypot(Ve,De),Rt=Ve/at,st=De/at,this.s[qe]=at,Ve=Rt*s[qe]+st*this.s[qe+1],this.s[qe+1]=-st*s[qe]+Rt*this.s[qe+1],De=st*s[qe+1],s[qe+1]=Rt*s[qe+1],u&&qe<this.m-1)for(var ct=0;ct<this.m;ct++)at=Rt*this.U[ct][qe]+st*this.U[ct][qe+1],this.U[ct][qe+1]=-st*this.U[ct][qe]+Rt*this.U[ct][qe+1],this.U[ct][qe]=at}s[L-2]=Ve,te=te+1}break;case 4:{if(this.s[ue]<=0&&(this.s[ue]=this.s[ue]<0?-this.s[ue]:0,h))for(var We=0;We<=X;We++)this.V[We][ue]=-this.V[We][ue];for(;ue<X&&!(this.s[ue]>=this.s[ue+1]);){var ot=this.s[ue];if(this.s[ue]=this.s[ue+1],this.s[ue+1]=ot,h&&ue<this.n-1)for(var Yt=0;Yt<this.n;Yt++)ot=this.V[Yt][ue+1],this.V[Yt][ue+1]=this.V[Yt][ue],this.V[Yt][ue]=ot;if(u&&ue<this.m-1)for(var bt=0;bt<this.m;bt++)ot=this.U[bt][ue+1],this.U[bt][ue+1]=this.U[bt][ue],this.U[bt][ue]=ot;ue++}te=0,L--}break}}var Mt={U:this.U,V:this.V,S:this.s};return Mt},n.hypot=function(i,a){var s=void 0;return Math.abs(i)>Math.abs(a)?(s=a/i,s=Math.abs(i)*Math.sqrt(1+s*s)):a!=0?(s=i/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=n},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h<u.length;h++){var f=u[h];f.enumerable=f.enumerable||!1,f.configurable=!0,"value"in f&&(f.writable=!0),Object.defineProperty(l,f.key,f)}}return o(s,"defineProperties"),function(l,u,h){return u&&s(l.prototype,u),h&&s(l,h),l}}();function i(s,l){if(!(s instanceof l))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=function(){function s(l,u){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p<this.iMax;p++){this.grid[p]=new Array(this.jMax);for(var m=0;m<this.jMax;m++)this.grid[p][m]=0}this.tracebackGrid=new Array(this.iMax);for(var g=0;g<this.iMax;g++){this.tracebackGrid[g]=new Array(this.jMax);for(var y=0;y<this.jMax;y++)this.tracebackGrid[g][y]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return o(s,"NeedlemanWunsch"),n(s,[{key:"getScore",value:o(function(){return this.score},"getScore")},{key:"getAlignments",value:o(function(){return this.alignments},"getAlignments")},{key:"computeGrids",value:o(function(){for(var u=1;u<this.jMax;u++)this.grid[0][u]=this.grid[0][u-1]+this.gap_penalty,this.tracebackGrid[0][u]=[!1,!1,!0];for(var h=1;h<this.iMax;h++)this.grid[h][0]=this.grid[h-1][0]+this.gap_penalty,this.tracebackGrid[h][0]=[!1,!0,!1];for(var f=1;f<this.iMax;f++)for(var d=1;d<this.jMax;d++){var p=void 0;this.sequence1[f-1]===this.sequence2[d-1]?p=this.grid[f-1][d-1]+this.match_score:p=this.grid[f-1][d-1]+this.mismatch_penalty;var m=this.grid[f-1][d]+this.gap_penalty,g=this.grid[f][d-1]+this.gap_penalty,y=[p,m,g],v=this.arrayAllMaxIndexes(y);this.grid[f][d]=y[v[0]],this.tracebackGrid[f][d]=[v.includes(0),v.includes(1),v.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]},"computeGrids")},{key:"alignmentTraceback",value:o(function(){var u=[];for(u.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});u[0];){var h=u[0],f=this.tracebackGrid[h.pos[0]][h.pos[1]];f[0]&&u.push({pos:[h.pos[0]-1,h.pos[1]-1],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),f[1]&&u.push({pos:[h.pos[0]-1,h.pos[1]],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:"-"+h.seq2}),f[2]&&u.push({pos:[h.pos[0],h.pos[1]-1],seq1:"-"+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),h.pos[0]===0&&h.pos[1]===0&&this.alignments.push({sequence1:h.seq1,sequence2:h.seq2}),u.shift()}return this.alignments},"alignmentTraceback")},{key:"getAllIndexes",value:o(function(u,h){for(var f=[],d=-1;(d=u.indexOf(h,d+1))!==-1;)f.push(d);return f},"getAllIndexes")},{key:"arrayAllMaxIndexes",value:o(function(u){return this.getAllIndexes(u,Math.max.apply(null,u))},"arrayAllMaxIndexes")}]),s}();t.exports=a},function(t,e,r){"use strict";var n=o(function(){},"layoutBase");n.FDLayout=r(18),n.FDLayoutConstants=r(4),n.FDLayoutEdge=r(19),n.FDLayoutNode=r(20),n.DimensionD=r(21),n.HashMap=r(22),n.HashSet=r(23),n.IGeometry=r(8),n.IMath=r(9),n.Integer=r(10),n.Point=r(12),n.PointD=r(5),n.RandomSeed=r(16),n.RectangleD=r(13),n.Transform=r(17),n.UniqueIDGeneretor=r(14),n.Quicksort=r(25),n.LinkedList=r(11),n.LGraphObject=r(2),n.LGraph=r(6),n.LEdge=r(1),n.LGraphManager=r(7),n.LNode=r(3),n.Layout=r(15),n.LayoutConstants=r(0),n.NeedlemanWunsch=r(27),n.Matrix=r(24),n.SVD=r(26),t.exports=n},function(t,e,r){"use strict";function n(){this.listeners=[]}o(n,"Emitter");var i=n.prototype;i.addListener=function(a,s){this.listeners.push({event:a,callback:s})},i.removeListener=function(a,s){for(var l=this.listeners.length;l>=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l<this.listeners.length;l++){var u=this.listeners[l];a===u.event&&u.callback(s)}},t.exports=n}])})});var mF=Mi((k4,pF)=>{"use strict";o(function(e,r){typeof k4=="object"&&typeof pF=="object"?pF.exports=r(dF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof k4=="object"?k4.coseBase=r(dF()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(k4,function(t){return(()=>{"use strict";var e={45:(a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u},806:(a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h},767:(a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},880:(a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},578:(a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},765:(a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,w=l(551).DimensionD,C=l(551).Layout,T=l(551).Integer,E=l(551).IGeometry,A=l(551).LGraph,S=l(551).Transform,_=l(551).LinkedList;function I(){u.call(this),this.toBeTiled={},this.constraints={}}o(I,"CoSELayout"),I.prototype=Object.create(u.prototype);for(var D in u)I[D]=u[D];I.prototype.newGraphManager=function(){var k=new h(this);return this.graphManager=k,k},I.prototype.newGraph=function(k){return new f(null,this.graphManager,k)},I.prototype.newNode=function(k){return new d(this.graphManager,k)},I.prototype.newEdge=function(k){return new p(null,null,k)},I.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},I.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},I.prototype.layout=function(){var k=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return k&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},I.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var L=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(B){return L.has(B)});this.graphManager.setAllNodesToApplyGravitation(R)}}else{var k=this.getFlatForest();if(k.length>0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var L=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(O){return L.has(O)});this.graphManager.setAllNodesToApplyGravitation(R),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},I.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var k=new Set(this.getAllNodes()),L=this.nodesWithGravity.filter(function(M){return k.has(M)});this.graphManager.setAllNodesToApplyGravitation(L),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var R=!this.isTreeGrowing&&!this.isGrowthFinished,O=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(R,O),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},I.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),L={},R=0;R<k.length;R++){var O=k[R].rect,M=k[R].id;L[M]={id:M,x:O.getCenterX(),y:O.getCenterY(),w:O.width,h:O.height}}return L},I.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var k=!1;if(y.ANIMATE==="during")this.emit("layoutstarted");else{for(;!k;)k=this.tick();this.graphManager.updateBounds()}},I.prototype.moveNodes=function(){for(var k=this.getAllNodes(),L,R=0;R<k.length;R++)L=k[R],L.calculateDisplacement();Object.keys(this.constraints).length>0&&this.updateDisplacements();for(var R=0;R<k.length;R++)L=k[R],L.move()},I.prototype.initConstraintVariables=function(){var k=this;this.idToNodeMap=new Map,this.fixedNodeSet=new Set;for(var L=this.graphManager.getAllNodes(),R=0;R<L.length;R++){var O=L[R];this.idToNodeMap.set(O.id,O)}var M=o(function le(he){for(var K=he.getChild().getNodes(),X,te=0,J=0;J<K.length;J++)X=K[J],X.getChild()==null?k.fixedNodeSet.has(X.id)&&(te+=100):te+=le(X);return te},"calculateCompoundWeight");if(this.constraints.fixedNodeConstraint){this.constraints.fixedNodeConstraint.forEach(function(K){k.fixedNodeSet.add(K.nodeId)});for(var L=this.graphManager.getAllNodes(),O,R=0;R<L.length;R++)if(O=L[R],O.getChild()!=null){var B=M(O);B>0&&(O.fixedNodeWeight=B)}}if(this.constraints.relativePlacementConstraint){var F=new Map,P=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(le){k.fixedNodesOnHorizontal.add(le),k.fixedNodesOnVertical.add(le)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var z=this.constraints.alignmentConstraint.vertical,R=0;R<z.length;R++)this.dummyToNodeForVerticalAlignment.set("dummy"+R,[]),z[R].forEach(function(he){F.set(he,"dummy"+R),k.dummyToNodeForVerticalAlignment.get("dummy"+R).push(he),k.fixedNodeSet.has(he)&&k.fixedNodesOnHorizontal.add("dummy"+R)});if(this.constraints.alignmentConstraint.horizontal)for(var $=this.constraints.alignmentConstraint.horizontal,R=0;R<$.length;R++)this.dummyToNodeForHorizontalAlignment.set("dummy"+R,[]),$[R].forEach(function(he){P.set(he,"dummy"+R),k.dummyToNodeForHorizontalAlignment.get("dummy"+R).push(he),k.fixedNodeSet.has(he)&&k.fixedNodesOnVertical.add("dummy"+R)})}if(m.RELAX_MOVEMENT_ON_CONSTRAINTS)this.shuffle=function(le){var he,K,X;for(X=le.length-1;X>=2*le.length/3;X--)he=Math.floor(Math.random()*(X+1)),K=le[X],le[X]=le[he],le[he]=K;return le},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(le){if(le.left){var he=F.has(le.left)?F.get(le.left):le.left,K=F.has(le.right)?F.get(le.right):le.right;k.nodesInRelativeHorizontal.includes(he)||(k.nodesInRelativeHorizontal.push(he),k.nodeToRelativeConstraintMapHorizontal.set(he,[]),k.dummyToNodeForVerticalAlignment.has(he)?k.nodeToTempPositionMapHorizontal.set(he,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(he)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(he,k.idToNodeMap.get(he).getCenterX())),k.nodesInRelativeHorizontal.includes(K)||(k.nodesInRelativeHorizontal.push(K),k.nodeToRelativeConstraintMapHorizontal.set(K,[]),k.dummyToNodeForVerticalAlignment.has(K)?k.nodeToTempPositionMapHorizontal.set(K,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(K)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(K,k.idToNodeMap.get(K).getCenterX())),k.nodeToRelativeConstraintMapHorizontal.get(he).push({right:K,gap:le.gap}),k.nodeToRelativeConstraintMapHorizontal.get(K).push({left:he,gap:le.gap})}else{var X=P.has(le.top)?P.get(le.top):le.top,te=P.has(le.bottom)?P.get(le.bottom):le.bottom;k.nodesInRelativeVertical.includes(X)||(k.nodesInRelativeVertical.push(X),k.nodeToRelativeConstraintMapVertical.set(X,[]),k.dummyToNodeForHorizontalAlignment.has(X)?k.nodeToTempPositionMapVertical.set(X,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(X)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(X,k.idToNodeMap.get(X).getCenterY())),k.nodesInRelativeVertical.includes(te)||(k.nodesInRelativeVertical.push(te),k.nodeToRelativeConstraintMapVertical.set(te,[]),k.dummyToNodeForHorizontalAlignment.has(te)?k.nodeToTempPositionMapVertical.set(te,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(te)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(te,k.idToNodeMap.get(te).getCenterY())),k.nodeToRelativeConstraintMapVertical.get(X).push({bottom:te,gap:le.gap}),k.nodeToRelativeConstraintMapVertical.get(te).push({top:X,gap:le.gap})}});else{var H=new Map,Q=new Map;this.constraints.relativePlacementConstraint.forEach(function(le){if(le.left){var he=F.has(le.left)?F.get(le.left):le.left,K=F.has(le.right)?F.get(le.right):le.right;H.has(he)?H.get(he).push(K):H.set(he,[K]),H.has(K)?H.get(K).push(he):H.set(K,[he])}else{var X=P.has(le.top)?P.get(le.top):le.top,te=P.has(le.bottom)?P.get(le.bottom):le.bottom;Q.has(X)?Q.get(X).push(te):Q.set(X,[te]),Q.has(te)?Q.get(te).push(X):Q.set(te,[X])}});var j=o(function(he,K){var X=[],te=[],J=new _,se=new Set,ue=0;return he.forEach(function(Z,Se){if(!se.has(Se)){X[ue]=[],te[ue]=!1;var ce=Se;for(J.push(ce),se.add(ce),X[ue].push(ce);J.length!=0;){ce=J.shift(),K.has(ce)&&(te[ue]=!0);var ae=he.get(ce);ae.forEach(function(Oe){se.has(Oe)||(J.push(Oe),se.add(Oe),X[ue].push(Oe))})}ue++}}),{components:X,isFixed:te}},"constructComponents"),ie=j(H,k.fixedNodesOnHorizontal);this.componentsOnHorizontal=ie.components,this.fixedComponentsOnHorizontal=ie.isFixed;var ne=j(Q,k.fixedNodesOnVertical);this.componentsOnVertical=ne.components,this.fixedComponentsOnVertical=ne.isFixed}}},I.prototype.updateDisplacements=function(){var k=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(ne){var le=k.idToNodeMap.get(ne.nodeId);le.displacementX=0,le.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var L=this.constraints.alignmentConstraint.vertical,R=0;R<L.length;R++){for(var O=0,M=0;M<L[R].length;M++){if(this.fixedNodeSet.has(L[R][M])){O=0;break}O+=this.idToNodeMap.get(L[R][M]).displacementX}for(var B=O/L[R].length,M=0;M<L[R].length;M++)this.idToNodeMap.get(L[R][M]).displacementX=B}if(this.constraints.alignmentConstraint.horizontal)for(var F=this.constraints.alignmentConstraint.horizontal,R=0;R<F.length;R++){for(var P=0,M=0;M<F[R].length;M++){if(this.fixedNodeSet.has(F[R][M])){P=0;break}P+=this.idToNodeMap.get(F[R][M]).displacementY}for(var z=P/F[R].length,M=0;M<F[R].length;M++)this.idToNodeMap.get(F[R][M]).displacementY=z}}if(this.constraints.relativePlacementConstraint)if(m.RELAX_MOVEMENT_ON_CONSTRAINTS)this.totalIterations%10==0&&(this.shuffle(this.nodesInRelativeHorizontal),this.shuffle(this.nodesInRelativeVertical)),this.nodesInRelativeHorizontal.forEach(function(ne){if(!k.fixedNodesOnHorizontal.has(ne)){var le=0;k.dummyToNodeForVerticalAlignment.has(ne)?le=k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(ne)[0]).displacementX:le=k.idToNodeMap.get(ne).displacementX,k.nodeToRelativeConstraintMapHorizontal.get(ne).forEach(function(he){if(he.right){var K=k.nodeToTempPositionMapHorizontal.get(he.right)-k.nodeToTempPositionMapHorizontal.get(ne)-le;K<he.gap&&(le-=he.gap-K)}else{var K=k.nodeToTempPositionMapHorizontal.get(ne)-k.nodeToTempPositionMapHorizontal.get(he.left)+le;K<he.gap&&(le+=he.gap-K)}}),k.nodeToTempPositionMapHorizontal.set(ne,k.nodeToTempPositionMapHorizontal.get(ne)+le),k.dummyToNodeForVerticalAlignment.has(ne)?k.dummyToNodeForVerticalAlignment.get(ne).forEach(function(he){k.idToNodeMap.get(he).displacementX=le}):k.idToNodeMap.get(ne).displacementX=le}}),this.nodesInRelativeVertical.forEach(function(ne){if(!k.fixedNodesOnHorizontal.has(ne)){var le=0;k.dummyToNodeForHorizontalAlignment.has(ne)?le=k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(ne)[0]).displacementY:le=k.idToNodeMap.get(ne).displacementY,k.nodeToRelativeConstraintMapVertical.get(ne).forEach(function(he){if(he.bottom){var K=k.nodeToTempPositionMapVertical.get(he.bottom)-k.nodeToTempPositionMapVertical.get(ne)-le;K<he.gap&&(le-=he.gap-K)}else{var K=k.nodeToTempPositionMapVertical.get(ne)-k.nodeToTempPositionMapVertical.get(he.top)+le;K<he.gap&&(le+=he.gap-K)}}),k.nodeToTempPositionMapVertical.set(ne,k.nodeToTempPositionMapVertical.get(ne)+le),k.dummyToNodeForHorizontalAlignment.has(ne)?k.dummyToNodeForHorizontalAlignment.get(ne).forEach(function(he){k.idToNodeMap.get(he).displacementY=le}):k.idToNodeMap.get(ne).displacementY=le}});else{for(var R=0;R<this.componentsOnHorizontal.length;R++){var $=this.componentsOnHorizontal[R];if(this.fixedComponentsOnHorizontal[R])for(var M=0;M<$.length;M++)this.dummyToNodeForVerticalAlignment.has($[M])?this.dummyToNodeForVerticalAlignment.get($[M]).forEach(function(he){k.idToNodeMap.get(he).displacementX=0}):this.idToNodeMap.get($[M]).displacementX=0;else{for(var H=0,Q=0,M=0;M<$.length;M++)if(this.dummyToNodeForVerticalAlignment.has($[M])){var j=this.dummyToNodeForVerticalAlignment.get($[M]);H+=j.length*this.idToNodeMap.get(j[0]).displacementX,Q+=j.length}else H+=this.idToNodeMap.get($[M]).displacementX,Q++;for(var ie=H/Q,M=0;M<$.length;M++)this.dummyToNodeForVerticalAlignment.has($[M])?this.dummyToNodeForVerticalAlignment.get($[M]).forEach(function(he){k.idToNodeMap.get(he).displacementX=ie}):this.idToNodeMap.get($[M]).displacementX=ie}}for(var R=0;R<this.componentsOnVertical.length;R++){var $=this.componentsOnVertical[R];if(this.fixedComponentsOnVertical[R])for(var M=0;M<$.length;M++)this.dummyToNodeForHorizontalAlignment.has($[M])?this.dummyToNodeForHorizontalAlignment.get($[M]).forEach(function(K){k.idToNodeMap.get(K).displacementY=0}):this.idToNodeMap.get($[M]).displacementY=0;else{for(var H=0,Q=0,M=0;M<$.length;M++)if(this.dummyToNodeForHorizontalAlignment.has($[M])){var j=this.dummyToNodeForHorizontalAlignment.get($[M]);H+=j.length*this.idToNodeMap.get(j[0]).displacementY,Q+=j.length}else H+=this.idToNodeMap.get($[M]).displacementY,Q++;for(var ie=H/Q,M=0;M<$.length;M++)this.dummyToNodeForHorizontalAlignment.has($[M])?this.dummyToNodeForHorizontalAlignment.get($[M]).forEach(function(J){k.idToNodeMap.get(J).displacementY=ie}):this.idToNodeMap.get($[M]).displacementY=ie}}}},I.prototype.calculateNodesToApplyGravitationTo=function(){var k=[],L,R=this.graphManager.getGraphs(),O=R.length,M;for(M=0;M<O;M++)L=R[M],L.updateConnected(),L.isConnected||(k=k.concat(L.getNodes()));return k},I.prototype.createBendpoints=function(){var k=[];k=k.concat(this.graphManager.getAllEdges());var L=new Set,R;for(R=0;R<k.length;R++){var O=k[R];if(!L.has(O)){var M=O.getSource(),B=O.getTarget();if(M==B)O.getBendpoints().push(new b),O.getBendpoints().push(new b),this.createDummyNodesForBendpoints(O),L.add(O);else{var F=[];if(F=F.concat(M.getEdgeListToNode(B)),F=F.concat(B.getEdgeListToNode(M)),!L.has(F[0])){if(F.length>1){var P;for(P=0;P<F.length;P++){var z=F[P];z.getBendpoints().push(new b),this.createDummyNodesForBendpoints(z)}}F.forEach(function($){L.add($)})}}}if(L.size==k.length)break}},I.prototype.positionNodesRadially=function(k){for(var L=new x(0,0),R=Math.ceil(Math.sqrt(k.length)),O=0,M=0,B=0,F=new b(0,0),P=0;P<k.length;P++){P%R==0&&(B=0,M=O,P!=0&&(M+=m.DEFAULT_COMPONENT_SEPERATION),O=0);var z=k[P],$=C.findCenterOfTree(z);L.x=B,L.y=M,F=I.radialLayout(z,$,L),F.y>O&&(O=Math.floor(F.y)),B=Math.floor(F.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-F.x/2,v.WORLD_CENTER_Y-F.y/2))},I.radialLayout=function(k,L,R){var O=Math.max(this.maxDiagonalInTree(k),m.DEFAULT_RADIAL_SEPARATION);I.branchRadialLayout(L,null,0,359,0,O);var M=A.calculateBounds(k),B=new S;B.setDeviceOrgX(M.getMinX()),B.setDeviceOrgY(M.getMinY()),B.setWorldOrgX(R.x),B.setWorldOrgY(R.y);for(var F=0;F<k.length;F++){var P=k[F];P.transform(B)}var z=new b(M.getMaxX(),M.getMaxY());return B.inverseTransformPoint(z)},I.branchRadialLayout=function(k,L,R,O,M,B){var F=(O-R+1)/2;F<0&&(F+=180);var P=(F+R)%360,z=P*E.TWO_PI/360,$=Math.cos(z),H=M*Math.cos(z),Q=M*Math.sin(z);k.setCenter(H,Q);var j=[];j=j.concat(k.getEdges());var ie=j.length;L!=null&&ie--;for(var ne=0,le=j.length,he,K=k.getEdgesBetween(L);K.length>1;){var X=K[0];K.splice(0,1);var te=j.indexOf(X);te>=0&&j.splice(te,1),le--,ie--}L!=null?he=(j.indexOf(K[0])+1)%le:he=0;for(var J=Math.abs(O-R)/ie,se=he;ne!=ie;se=++se%le){var ue=j[se].getOtherEnd(k);if(ue!=L){var Z=(R+ne*J)%360,Se=(Z+J)%360;I.branchRadialLayout(ue,k,Z,Se,M+B,B),ne++}}},I.maxDiagonalInTree=function(k){for(var L=T.MIN_VALUE,R=0;R<k.length;R++){var O=k[R],M=O.getDiagonal();M>L&&(L=M)}return L},I.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},I.prototype.groupZeroDegreeMembers=function(){var k=this,L={};this.memberGroups={},this.idToDummyNode={};for(var R=[],O=this.graphManager.getAllNodes(),M=0;M<O.length;M++){var B=O[M],F=B.getParent();this.getNodeDegreeWithChildren(B)===0&&(F.id==null||!this.getToBeTiled(F))&&R.push(B)}for(var M=0;M<R.length;M++){var B=R[M],P=B.getParent().id;typeof L[P]>"u"&&(L[P]=[]),L[P]=L[P].concat(B)}Object.keys(L).forEach(function(z){if(L[z].length>1){var $="DummyCompound_"+z;k.memberGroups[$]=L[z];var H=L[z][0].getParent(),Q=new d(k.graphManager);Q.id=$,Q.paddingLeft=H.paddingLeft||0,Q.paddingRight=H.paddingRight||0,Q.paddingBottom=H.paddingBottom||0,Q.paddingTop=H.paddingTop||0,k.idToDummyNode[$]=Q;var j=k.getGraphManager().add(k.newGraph(),Q),ie=H.getChild();ie.add(Q);for(var ne=0;ne<L[z].length;ne++){var le=L[z][ne];ie.remove(le),j.add(le)}}})},I.prototype.clearCompounds=function(){var k={},L={};this.performDFSOnCompounds();for(var R=0;R<this.compoundOrder.length;R++)L[this.compoundOrder[R].id]=this.compoundOrder[R],k[this.compoundOrder[R].id]=[].concat(this.compoundOrder[R].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[R].getChild()),this.compoundOrder[R].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(k,L)},I.prototype.clearZeroDegreeMembers=function(){var k=this,L=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(R){var O=k.idToDummyNode[R];if(L[R]=k.tileNodes(k.memberGroups[R],O.paddingLeft+O.paddingRight),O.rect.width=L[R].width,O.rect.height=L[R].height,O.setCenter(L[R].centerX,L[R].centerY),O.labelMarginLeft=0,O.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var M=O.rect.width,B=O.rect.height;O.labelWidth&&(O.labelPosHorizontal=="left"?(O.rect.x-=O.labelWidth,O.setWidth(M+O.labelWidth),O.labelMarginLeft=O.labelWidth):O.labelPosHorizontal=="center"&&O.labelWidth>M?(O.rect.x-=(O.labelWidth-M)/2,O.setWidth(O.labelWidth),O.labelMarginLeft=(O.labelWidth-M)/2):O.labelPosHorizontal=="right"&&O.setWidth(M+O.labelWidth)),O.labelHeight&&(O.labelPosVertical=="top"?(O.rect.y-=O.labelHeight,O.setHeight(B+O.labelHeight),O.labelMarginTop=O.labelHeight):O.labelPosVertical=="center"&&O.labelHeight>B?(O.rect.y-=(O.labelHeight-B)/2,O.setHeight(O.labelHeight),O.labelMarginTop=(O.labelHeight-B)/2):O.labelPosVertical=="bottom"&&O.setHeight(B+O.labelHeight))}})},I.prototype.repopulateCompounds=function(){for(var k=this.compoundOrder.length-1;k>=0;k--){var L=this.compoundOrder[k],R=L.id,O=L.paddingLeft,M=L.paddingTop,B=L.labelMarginLeft,F=L.labelMarginTop;this.adjustLocations(this.tiledMemberPack[R],L.rect.x,L.rect.y,O,M,B,F)}},I.prototype.repopulateZeroDegreeMembers=function(){var k=this,L=this.tiledZeroDegreePack;Object.keys(L).forEach(function(R){var O=k.idToDummyNode[R],M=O.paddingLeft,B=O.paddingTop,F=O.labelMarginLeft,P=O.labelMarginTop;k.adjustLocations(L[R],O.rect.x,O.rect.y,M,B,F,P)})},I.prototype.getToBeTiled=function(k){var L=k.id;if(this.toBeTiled[L]!=null)return this.toBeTiled[L];var R=k.getChild();if(R==null)return this.toBeTiled[L]=!1,!1;for(var O=R.getNodes(),M=0;M<O.length;M++){var B=O[M];if(this.getNodeDegree(B)>0)return this.toBeTiled[L]=!1,!1;if(B.getChild()==null){this.toBeTiled[B.id]=!1;continue}if(!this.getToBeTiled(B))return this.toBeTiled[L]=!1,!1}return this.toBeTiled[L]=!0,!0},I.prototype.getNodeDegree=function(k){for(var L=k.id,R=k.getEdges(),O=0,M=0;M<R.length;M++){var B=R[M];B.getSource().id!==B.getTarget().id&&(O=O+1)}return O},I.prototype.getNodeDegreeWithChildren=function(k){var L=this.getNodeDegree(k);if(k.getChild()==null)return L;for(var R=k.getChild().getNodes(),O=0;O<R.length;O++){var M=R[O];L+=this.getNodeDegreeWithChildren(M)}return L},I.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},I.prototype.fillCompexOrderByDFS=function(k){for(var L=0;L<k.length;L++){var R=k[L];R.getChild()!=null&&this.fillCompexOrderByDFS(R.getChild().getNodes()),this.getToBeTiled(R)&&this.compoundOrder.push(R)}},I.prototype.adjustLocations=function(k,L,R,O,M,B,F){L+=O+B,R+=M+F;for(var P=L,z=0;z<k.rows.length;z++){var $=k.rows[z];L=P;for(var H=0,Q=0;Q<$.length;Q++){var j=$[Q];j.rect.x=L,j.rect.y=R,L+=j.rect.width+k.horizontalPadding,j.rect.height>H&&(H=j.rect.height)}R+=H+k.verticalPadding}},I.prototype.tileCompoundMembers=function(k,L){var R=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(O){var M=L[O];if(R.tiledMemberPack[O]=R.tileNodes(k[O],M.paddingLeft+M.paddingRight),M.rect.width=R.tiledMemberPack[O].width,M.rect.height=R.tiledMemberPack[O].height,M.setCenter(R.tiledMemberPack[O].centerX,R.tiledMemberPack[O].centerY),M.labelMarginLeft=0,M.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var B=M.rect.width,F=M.rect.height;M.labelWidth&&(M.labelPosHorizontal=="left"?(M.rect.x-=M.labelWidth,M.setWidth(B+M.labelWidth),M.labelMarginLeft=M.labelWidth):M.labelPosHorizontal=="center"&&M.labelWidth>B?(M.rect.x-=(M.labelWidth-B)/2,M.setWidth(M.labelWidth),M.labelMarginLeft=(M.labelWidth-B)/2):M.labelPosHorizontal=="right"&&M.setWidth(B+M.labelWidth)),M.labelHeight&&(M.labelPosVertical=="top"?(M.rect.y-=M.labelHeight,M.setHeight(F+M.labelHeight),M.labelMarginTop=M.labelHeight):M.labelPosVertical=="center"&&M.labelHeight>F?(M.rect.y-=(M.labelHeight-F)/2,M.setHeight(M.labelHeight),M.labelMarginTop=(M.labelHeight-F)/2):M.labelPosVertical=="bottom"&&M.setHeight(F+M.labelHeight))}})},I.prototype.tileNodes=function(k,L){var R=this.tileNodesByFavoringDim(k,L,!0),O=this.tileNodesByFavoringDim(k,L,!1),M=this.getOrgRatio(R),B=this.getOrgRatio(O),F;return B<M?F=O:F=R,F},I.prototype.getOrgRatio=function(k){var L=k.width,R=k.height,O=L/R;return O<1&&(O=1/O),O},I.prototype.calcIdealRowWidth=function(k,L){var R=m.TILING_PADDING_VERTICAL,O=m.TILING_PADDING_HORIZONTAL,M=k.length,B=0,F=0,P=0;k.forEach(function(ne){B+=ne.getWidth(),F+=ne.getHeight(),ne.getWidth()>P&&(P=ne.getWidth())});var z=B/M,$=F/M,H=Math.pow(R-O,2)+4*(z+O)*($+R)*M,Q=(O-R+Math.sqrt(H))/(2*(z+O)),j;L?(j=Math.ceil(Q),j==Q&&j++):j=Math.floor(Q);var ie=j*(z+O)-O;return P>ie&&(ie=P),ie+=O*2,ie},I.prototype.tileNodesByFavoringDim=function(k,L,R){var O=m.TILING_PADDING_VERTICAL,M=m.TILING_PADDING_HORIZONTAL,B=m.TILING_COMPARE_BY,F={rows:[],rowWidth:[],rowHeight:[],width:0,height:L,verticalPadding:O,horizontalPadding:M,centerX:0,centerY:0};B&&(F.idealRowWidth=this.calcIdealRowWidth(k,R));var P=o(function(le){return le.rect.width*le.rect.height},"getNodeArea"),z=o(function(le,he){return P(he)-P(le)},"areaCompareFcn");k.sort(function(ne,le){var he=z;return F.idealRowWidth?(he=B,he(ne.id,le.id)):he(ne,le)});for(var $=0,H=0,Q=0;Q<k.length;Q++){var j=k[Q];$+=j.getCenterX(),H+=j.getCenterY()}F.centerX=$/k.length,F.centerY=H/k.length;for(var Q=0;Q<k.length;Q++){var j=k[Q];if(F.rows.length==0)this.insertNodeToRow(F,j,0,L);else if(this.canAddHorizontal(F,j.rect.width,j.rect.height)){var ie=F.rows.length-1;F.idealRowWidth||(ie=this.getShortestRowIndex(F)),this.insertNodeToRow(F,j,ie,L)}else this.insertNodeToRow(F,j,F.rows.length,L);this.shiftToLastRow(F)}return F},I.prototype.insertNodeToRow=function(k,L,R,O){var M=O;if(R==k.rows.length){var B=[];k.rows.push(B),k.rowWidth.push(M),k.rowHeight.push(0)}var F=k.rowWidth[R]+L.rect.width;k.rows[R].length>0&&(F+=k.horizontalPadding),k.rowWidth[R]=F,k.width<F&&(k.width=F);var P=L.rect.height;R>0&&(P+=k.verticalPadding);var z=0;P>k.rowHeight[R]&&(z=k.rowHeight[R],k.rowHeight[R]=P,z=k.rowHeight[R]-z),k.height+=z,k.rows[R].push(L)},I.prototype.getShortestRowIndex=function(k){for(var L=-1,R=Number.MAX_VALUE,O=0;O<k.rows.length;O++)k.rowWidth[O]<R&&(L=O,R=k.rowWidth[O]);return L},I.prototype.getLongestRowIndex=function(k){for(var L=-1,R=Number.MIN_VALUE,O=0;O<k.rows.length;O++)k.rowWidth[O]>R&&(L=O,R=k.rowWidth[O]);return L},I.prototype.canAddHorizontal=function(k,L,R){if(k.idealRowWidth){var O=k.rows.length-1,M=k.rowWidth[O];return M+L+k.horizontalPadding<=k.idealRowWidth}var B=this.getShortestRowIndex(k);if(B<0)return!0;var F=k.rowWidth[B];if(F+k.horizontalPadding+L<=k.width)return!0;var P=0;k.rowHeight[B]<R&&B>0&&(P=R+k.verticalPadding-k.rowHeight[B]);var z;k.width-F>=L+k.horizontalPadding?z=(k.height+P)/(F+L+k.horizontalPadding):z=(k.height+P)/k.width,P=R+k.verticalPadding;var $;return k.width<L?$=(k.height+P)/L:$=(k.height+P)/k.width,$<1&&($=1/$),z<1&&(z=1/z),z<$},I.prototype.shiftToLastRow=function(k){var L=this.getLongestRowIndex(k),R=k.rowWidth.length-1,O=k.rows[L],M=O[O.length-1],B=M.width+k.horizontalPadding;if(k.width-k.rowWidth[R]>B&&L!=R){O.splice(-1,1),k.rows[R].push(M),k.rowWidth[L]=k.rowWidth[L]-B,k.rowWidth[R]=k.rowWidth[R]+B,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var F=Number.MIN_VALUE,P=0;P<O.length;P++)O[P].height>F&&(F=O[P].height);L>0&&(F+=k.verticalPadding);var z=k.rowHeight[L]+k.rowHeight[R];k.rowHeight[L]=F,k.rowHeight[R]<M.height+k.verticalPadding&&(k.rowHeight[R]=M.height+k.verticalPadding);var $=k.rowHeight[L]+k.rowHeight[R];k.height+=$-z,this.shiftToLastRow(k)}},I.prototype.tilingPreLayout=function(){m.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},I.prototype.tilingPostLayout=function(){m.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},I.prototype.reduceTrees=function(){for(var k=[],L=!0,R;L;){var O=this.graphManager.getAllNodes(),M=[];L=!1;for(var B=0;B<O.length;B++)if(R=O[B],R.getEdges().length==1&&!R.getEdges()[0].isInterGraph&&R.getChild()==null){if(m.PURE_INCREMENTAL){var F=R.getEdges()[0].getOtherEnd(R),P=new w(R.getCenterX()-F.getCenterX(),R.getCenterY()-F.getCenterY());M.push([R,R.getEdges()[0],R.getOwner(),P])}else M.push([R,R.getEdges()[0],R.getOwner()]);L=!0}if(L==!0){for(var z=[],$=0;$<M.length;$++)M[$][0].getEdges().length==1&&(z.push(M[$]),M[$][0].getOwner().remove(M[$][0]));k.push(z),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=k},I.prototype.growTree=function(k){for(var L=k.length,R=k[L-1],O,M=0;M<R.length;M++)O=R[M],this.findPlaceforPrunedNode(O),O[2].add(O[0]),O[2].add(O[1],O[1].source,O[1].target);k.splice(k.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},I.prototype.findPlaceforPrunedNode=function(k){var L,R,O=k[0];if(O==k[1].source?R=k[1].target:R=k[1].source,m.PURE_INCREMENTAL)O.setCenter(R.getCenterX()+k[3].getWidth(),R.getCenterY()+k[3].getHeight());else{var M=R.startX,B=R.finishX,F=R.startY,P=R.finishY,z=0,$=0,H=0,Q=0,j=[z,H,$,Q];if(F>0)for(var ie=M;ie<=B;ie++)j[0]+=this.grid[ie][F-1].length+this.grid[ie][F].length-1;if(B<this.grid.length-1)for(var ie=F;ie<=P;ie++)j[1]+=this.grid[B+1][ie].length+this.grid[B][ie].length-1;if(P<this.grid[0].length-1)for(var ie=M;ie<=B;ie++)j[2]+=this.grid[ie][P+1].length+this.grid[ie][P].length-1;if(M>0)for(var ie=F;ie<=P;ie++)j[3]+=this.grid[M-1][ie].length+this.grid[M][ie].length-1;for(var ne=T.MAX_VALUE,le,he,K=0;K<j.length;K++)j[K]<ne?(ne=j[K],le=1,he=K):j[K]==ne&&le++;if(le==3&&ne==0)j[0]==0&&j[1]==0&&j[2]==0?L=1:j[0]==0&&j[1]==0&&j[3]==0?L=0:j[0]==0&&j[2]==0&&j[3]==0?L=3:j[1]==0&&j[2]==0&&j[3]==0&&(L=2);else if(le==2&&ne==0){var X=Math.floor(Math.random()*2);j[0]==0&&j[1]==0?X==0?L=0:L=1:j[0]==0&&j[2]==0?X==0?L=0:L=2:j[0]==0&&j[3]==0?X==0?L=0:L=3:j[1]==0&&j[2]==0?X==0?L=1:L=2:j[1]==0&&j[3]==0?X==0?L=1:L=3:X==0?L=2:L=3}else if(le==4&&ne==0){var X=Math.floor(Math.random()*4);L=X}else L=he;L==0?O.setCenter(R.getCenterX(),R.getCenterY()-R.getHeight()/2-y.DEFAULT_EDGE_LENGTH-O.getHeight()/2):L==1?O.setCenter(R.getCenterX()+R.getWidth()/2+y.DEFAULT_EDGE_LENGTH+O.getWidth()/2,R.getCenterY()):L==2?O.setCenter(R.getCenterX(),R.getCenterY()+R.getHeight()/2+y.DEFAULT_EDGE_LENGTH+O.getHeight()/2):O.setCenter(R.getCenterX()-R.getWidth()/2-y.DEFAULT_EDGE_LENGTH-O.getWidth()/2,R.getCenterY())}},a.exports=I},991:(a,s,l)=>{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v<g.length;v++)y=g[v],y.getChild()==null?(y.displacementX+=p,y.displacementY+=m):y.propogateDisplacementToChildren(p,m)},f.prototype.move=function(){var p=this.graphManager.getLayout();(this.child==null||this.child.getNodes().length==0)&&(this.moveBy(this.displacementX,this.displacementY),p.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY)),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},f.prototype.setPred1=function(p){this.pred1=p},f.prototype.getPred1=function(){return pred1},f.prototype.getPred2=function(){return pred2},f.prototype.setNext=function(p){this.next=p},f.prototype.getNext=function(){return next},f.prototype.setProcessed=function(p){this.processed=p},f.prototype.isProcessed=function(){return processed},a.exports=f},902:(a,s,l)=>{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y<g.length;y++)v[y]=g[y];return v}else return Array.from(g)}o(u,"_toConsumableArray");var h=l(806),f=l(551).LinkedList,d=l(551).Matrix,p=l(551).SVD;function m(){}o(m,"ConstraintHandler"),m.handleConstraints=function(g){var y={};y.fixedNodeConstraint=g.constraints.fixedNodeConstraint,y.alignmentConstraint=g.constraints.alignmentConstraint,y.relativePlacementConstraint=g.constraints.relativePlacementConstraint;for(var v=new Map,x=new Map,b=[],w=[],C=g.getAllNodes(),T=0,E=0;E<C.length;E++){var A=C[E];A.getChild()==null&&(x.set(A.id,T++),b.push(A.getCenterX()),w.push(A.getCenterY()),v.set(A.id,A))}y.relativePlacementConstraint&&y.relativePlacementConstraint.forEach(function(oe){!oe.gap&&oe.gap!=0&&(oe.left?oe.gap=h.DEFAULT_EDGE_LENGTH+v.get(oe.left).getWidth()/2+v.get(oe.right).getWidth()/2:oe.gap=h.DEFAULT_EDGE_LENGTH+v.get(oe.top).getHeight()/2+v.get(oe.bottom).getHeight()/2)});var S=o(function(V,xe){return{x:V.x-xe.x,y:V.y-xe.y}},"calculatePositionDiff"),_=o(function(V){var xe=0,q=0;return V.forEach(function(pe){xe+=b[x.get(pe)],q+=w[x.get(pe)]}),{x:xe/V.size,y:q/V.size}},"calculateAvgPosition"),I=o(function(V,xe,q,pe,ve){function Pe(st,Ue){var ct=new Set(st),We=!0,ot=!1,Yt=void 0;try{for(var bt=Ue[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;ct.add(xt)}}catch(ut){ot=!0,Yt=ut}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}return ct}o(Pe,"setUnion");var _e=new Map;V.forEach(function(st,Ue){_e.set(Ue,0)}),V.forEach(function(st,Ue){st.forEach(function(ct){_e.set(ct.id,_e.get(ct.id)+1)})});var we=new Map,Ve=new Map,De=new f;_e.forEach(function(st,Ue){st==0?(De.push(Ue),q||(xe=="horizontal"?we.set(Ue,x.has(Ue)?b[x.get(Ue)]:pe.get(Ue)):we.set(Ue,x.has(Ue)?w[x.get(Ue)]:pe.get(Ue)))):we.set(Ue,Number.NEGATIVE_INFINITY),q&&Ve.set(Ue,new Set([Ue]))}),q&&ve.forEach(function(st){var Ue=[];if(st.forEach(function(ot){q.has(ot)&&Ue.push(ot)}),Ue.length>0){var ct=0;Ue.forEach(function(ot){xe=="horizontal"?(we.set(ot,x.has(ot)?b[x.get(ot)]:pe.get(ot)),ct+=we.get(ot)):(we.set(ot,x.has(ot)?w[x.get(ot)]:pe.get(ot)),ct+=we.get(ot))}),ct=ct/Ue.length,st.forEach(function(ot){q.has(ot)||we.set(ot,ct)})}else{var We=0;st.forEach(function(ot){xe=="horizontal"?We+=x.has(ot)?b[x.get(ot)]:pe.get(ot):We+=x.has(ot)?w[x.get(ot)]:pe.get(ot)}),We=We/st.length,st.forEach(function(ot){we.set(ot,We)})}});for(var qe=o(function(){var Ue=De.shift(),ct=V.get(Ue);ct.forEach(function(We){if(we.get(We.id)<we.get(Ue)+We.gap)if(q&&q.has(We.id)){var ot=void 0;if(xe=="horizontal"?ot=x.has(We.id)?b[x.get(We.id)]:pe.get(We.id):ot=x.has(We.id)?w[x.get(We.id)]:pe.get(We.id),we.set(We.id,ot),ot<we.get(Ue)+We.gap){var Yt=we.get(Ue)+We.gap-ot;Ve.get(Ue).forEach(function(bt){we.set(bt,we.get(bt)-Yt)})}}else we.set(We.id,we.get(Ue)+We.gap);_e.set(We.id,_e.get(We.id)-1),_e.get(We.id)==0&&De.push(We.id),q&&Ve.set(We.id,Pe(Ve.get(Ue),Ve.get(We.id)))})},"_loop");De.length!=0;)qe();if(q){var at=new Set;V.forEach(function(st,Ue){st.length==0&&at.add(Ue)});var Rt=[];Ve.forEach(function(st,Ue){if(at.has(Ue)){var ct=!1,We=!0,ot=!1,Yt=void 0;try{for(var bt=st[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;q.has(xt)&&(ct=!0)}}catch(ft){ot=!0,Yt=ft}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}if(!ct){var ut=!1,Et=void 0;Rt.forEach(function(ft,yt){ft.has([].concat(u(st))[0])&&(ut=!0,Et=yt)}),ut?st.forEach(function(ft){Rt[Et].add(ft)}):Rt.push(new Set(st))}}}),Rt.forEach(function(st,Ue){var ct=Number.POSITIVE_INFINITY,We=Number.POSITIVE_INFINITY,ot=Number.NEGATIVE_INFINITY,Yt=Number.NEGATIVE_INFINITY,bt=!0,Mt=!1,xt=void 0;try{for(var ut=st[Symbol.iterator](),Et;!(bt=(Et=ut.next()).done);bt=!0){var ft=Et.value,yt=void 0;xe=="horizontal"?yt=x.has(ft)?b[x.get(ft)]:pe.get(ft):yt=x.has(ft)?w[x.get(ft)]:pe.get(ft);var nt=we.get(ft);yt<ct&&(ct=yt),yt>ot&&(ot=yt),nt<We&&(We=nt),nt>Yt&&(Yt=nt)}}catch(At){Mt=!0,xt=At}finally{try{!bt&&ut.return&&ut.return()}finally{if(Mt)throw xt}}var dn=(ct+ot)/2-(We+Yt)/2,Tt=!0,On=!1,tn=void 0;try{for(var _r=st[Symbol.iterator](),Dr;!(Tt=(Dr=_r.next()).done);Tt=!0){var Pn=Dr.value;we.set(Pn,we.get(Pn)+dn)}}catch(At){On=!0,tn=At}finally{try{!Tt&&_r.return&&_r.return()}finally{if(On)throw tn}}})}return we},"findAppropriatePositionForRelativePlacement"),D=o(function(V){var xe=0,q=0,pe=0,ve=0;if(V.forEach(function(Ve){Ve.left?b[x.get(Ve.left)]-b[x.get(Ve.right)]>=0?xe++:q++:w[x.get(Ve.top)]-w[x.get(Ve.bottom)]>=0?pe++:ve++}),xe>q&&pe>ve)for(var Pe=0;Pe<x.size;Pe++)b[Pe]=-1*b[Pe],w[Pe]=-1*w[Pe];else if(xe>q)for(var _e=0;_e<x.size;_e++)b[_e]=-1*b[_e];else if(pe>ve)for(var we=0;we<x.size;we++)w[we]=-1*w[we]},"applyReflectionForRelativePlacement"),k=o(function(V){var xe=[],q=new f,pe=new Set,ve=0;return V.forEach(function(Pe,_e){if(!pe.has(_e)){xe[ve]=[];var we=_e;for(q.push(we),pe.add(we),xe[ve].push(we);q.length!=0;){we=q.shift();var Ve=V.get(we);Ve.forEach(function(De){pe.has(De.id)||(q.push(De.id),pe.add(De.id),xe[ve].push(De.id))})}ve++}}),xe},"findComponents"),L=o(function(V){var xe=new Map;return V.forEach(function(q,pe){xe.set(pe,[])}),V.forEach(function(q,pe){q.forEach(function(ve){xe.get(pe).push(ve),xe.get(ve.id).push({id:pe,gap:ve.gap,direction:ve.direction})})}),xe},"dagToUndirected"),R=o(function(V){var xe=new Map;return V.forEach(function(q,pe){xe.set(pe,[])}),V.forEach(function(q,pe){q.forEach(function(ve){xe.get(ve.id).push({id:pe,gap:ve.gap,direction:ve.direction})})}),xe},"dagToReversed"),O=[],M=[],B=!1,F=!1,P=new Set,z=new Map,$=new Map,H=[];if(y.fixedNodeConstraint&&y.fixedNodeConstraint.forEach(function(oe){P.add(oe.nodeId)}),y.relativePlacementConstraint&&(y.relativePlacementConstraint.forEach(function(oe){oe.left?(z.has(oe.left)?z.get(oe.left).push({id:oe.right,gap:oe.gap,direction:"horizontal"}):z.set(oe.left,[{id:oe.right,gap:oe.gap,direction:"horizontal"}]),z.has(oe.right)||z.set(oe.right,[])):(z.has(oe.top)?z.get(oe.top).push({id:oe.bottom,gap:oe.gap,direction:"vertical"}):z.set(oe.top,[{id:oe.bottom,gap:oe.gap,direction:"vertical"}]),z.has(oe.bottom)||z.set(oe.bottom,[]))}),$=L(z),H=k($)),h.TRANSFORM_ON_CONSTRAINT_HANDLING){if(y.fixedNodeConstraint&&y.fixedNodeConstraint.length>1)y.fixedNodeConstraint.forEach(function(oe,V){O[V]=[oe.position.x,oe.position.y],M[V]=[b[x.get(oe.nodeId)],w[x.get(oe.nodeId)]]}),B=!0;else if(y.alignmentConstraint)(function(){var oe=0;if(y.alignmentConstraint.vertical){for(var V=y.alignmentConstraint.vertical,xe=o(function(we){var Ve=new Set;V[we].forEach(function(at){Ve.add(at)});var De=new Set([].concat(u(Ve)).filter(function(at){return P.has(at)})),qe=void 0;De.size>0?qe=b[x.get(De.values().next().value)]:qe=_(Ve).x,V[we].forEach(function(at){O[oe]=[qe,w[x.get(at)]],M[oe]=[b[x.get(at)],w[x.get(at)]],oe++})},"_loop2"),q=0;q<V.length;q++)xe(q);B=!0}if(y.alignmentConstraint.horizontal){for(var pe=y.alignmentConstraint.horizontal,ve=o(function(we){var Ve=new Set;pe[we].forEach(function(at){Ve.add(at)});var De=new Set([].concat(u(Ve)).filter(function(at){return P.has(at)})),qe=void 0;De.size>0?qe=b[x.get(De.values().next().value)]:qe=_(Ve).y,pe[we].forEach(function(at){O[oe]=[b[x.get(at)],qe],M[oe]=[b[x.get(at)],w[x.get(at)]],oe++})},"_loop3"),Pe=0;Pe<pe.length;Pe++)ve(Pe);B=!0}y.relativePlacementConstraint&&(F=!0)})();else if(y.relativePlacementConstraint){for(var Q=0,j=0,ie=0;ie<H.length;ie++)H[ie].length>Q&&(Q=H[ie].length,j=ie);if(Q<$.size/2)D(y.relativePlacementConstraint),B=!1,F=!1;else{var ne=new Map,le=new Map,he=[];H[j].forEach(function(oe){z.get(oe).forEach(function(V){V.direction=="horizontal"?(ne.has(oe)?ne.get(oe).push(V):ne.set(oe,[V]),ne.has(V.id)||ne.set(V.id,[]),he.push({left:oe,right:V.id})):(le.has(oe)?le.get(oe).push(V):le.set(oe,[V]),le.has(V.id)||le.set(V.id,[]),he.push({top:oe,bottom:V.id}))})}),D(he),F=!1;var K=I(ne,"horizontal"),X=I(le,"vertical");H[j].forEach(function(oe,V){M[V]=[b[x.get(oe)],w[x.get(oe)]],O[V]=[],K.has(oe)?O[V][0]=K.get(oe):O[V][0]=b[x.get(oe)],X.has(oe)?O[V][1]=X.get(oe):O[V][1]=w[x.get(oe)]}),B=!0}}if(B){for(var te=void 0,J=d.transpose(O),se=d.transpose(M),ue=0;ue<J.length;ue++)J[ue]=d.multGamma(J[ue]),se[ue]=d.multGamma(se[ue]);var Z=d.multMat(J,d.transpose(se)),Se=p.svd(Z);te=d.multMat(Se.V,d.transpose(Se.U));for(var ce=0;ce<x.size;ce++){var ae=[b[ce],w[ce]],Oe=[te[0][0],te[1][0]],ge=[te[0][1],te[1][1]];b[ce]=d.dotProduct(ae,Oe),w[ce]=d.dotProduct(ae,ge)}F&&D(y.relativePlacementConstraint)}}if(h.ENFORCE_CONSTRAINTS){if(y.fixedNodeConstraint&&y.fixedNodeConstraint.length>0){var ze={x:0,y:0};y.fixedNodeConstraint.forEach(function(oe,V){var xe={x:b[x.get(oe.nodeId)],y:w[x.get(oe.nodeId)]},q=oe.position,pe=S(q,xe);ze.x+=pe.x,ze.y+=pe.y}),ze.x/=y.fixedNodeConstraint.length,ze.y/=y.fixedNodeConstraint.length,b.forEach(function(oe,V){b[V]+=ze.x}),w.forEach(function(oe,V){w[V]+=ze.y}),y.fixedNodeConstraint.forEach(function(oe){b[x.get(oe.nodeId)]=oe.position.x,w[x.get(oe.nodeId)]=oe.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var He=y.alignmentConstraint.vertical,$e=o(function(V){var xe=new Set;He[V].forEach(function(ve){xe.add(ve)});var q=new Set([].concat(u(xe)).filter(function(ve){return P.has(ve)})),pe=void 0;q.size>0?pe=b[x.get(q.values().next().value)]:pe=_(xe).x,xe.forEach(function(ve){P.has(ve)||(b[x.get(ve)]=pe)})},"_loop4"),Re=0;Re<He.length;Re++)$e(Re);if(y.alignmentConstraint.horizontal)for(var Ie=y.alignmentConstraint.horizontal,be=o(function(V){var xe=new Set;Ie[V].forEach(function(ve){xe.add(ve)});var q=new Set([].concat(u(xe)).filter(function(ve){return P.has(ve)})),pe=void 0;q.size>0?pe=w[x.get(q.values().next().value)]:pe=_(xe).y,xe.forEach(function(ve){P.has(ve)||(w[x.get(ve)]=pe)})},"_loop5"),W=0;W<Ie.length;W++)be(W)}y.relativePlacementConstraint&&function(){var oe=new Map,V=new Map,xe=new Map,q=new Map,pe=new Map,ve=new Map,Pe=new Set,_e=new Set;if(P.forEach(function(Hr){Pe.add(Hr),_e.add(Hr)}),y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var we=y.alignmentConstraint.vertical,Ve=o(function(et){xe.set("dummy"+et,[]),we[et].forEach(function(mt){oe.set(mt,"dummy"+et),xe.get("dummy"+et).push(mt),P.has(mt)&&Pe.add("dummy"+et)}),pe.set("dummy"+et,b[x.get(we[et][0])])},"_loop6"),De=0;De<we.length;De++)Ve(De);if(y.alignmentConstraint.horizontal)for(var qe=y.alignmentConstraint.horizontal,at=o(function(et){q.set("dummy"+et,[]),qe[et].forEach(function(mt){V.set(mt,"dummy"+et),q.get("dummy"+et).push(mt),P.has(mt)&&_e.add("dummy"+et)}),ve.set("dummy"+et,w[x.get(qe[et][0])])},"_loop7"),Rt=0;Rt<qe.length;Rt++)at(Rt)}var st=new Map,Ue=new Map,ct=o(function(et){z.get(et).forEach(function(mt){var Kt=void 0,lt=void 0;mt.direction=="horizontal"?(Kt=oe.get(et)?oe.get(et):et,oe.get(mt.id)?lt={id:oe.get(mt.id),gap:mt.gap,direction:mt.direction}:lt=mt,st.has(Kt)?st.get(Kt).push(lt):st.set(Kt,[lt]),st.has(lt.id)||st.set(lt.id,[])):(Kt=V.get(et)?V.get(et):et,V.get(mt.id)?lt={id:V.get(mt.id),gap:mt.gap,direction:mt.direction}:lt=mt,Ue.has(Kt)?Ue.get(Kt).push(lt):Ue.set(Kt,[lt]),Ue.has(lt.id)||Ue.set(lt.id,[]))})},"_loop8"),We=!0,ot=!1,Yt=void 0;try{for(var bt=z.keys()[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;ct(xt)}}catch(Hr){ot=!0,Yt=Hr}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}var ut=L(st),Et=L(Ue),ft=k(ut),yt=k(Et),nt=R(st),dn=R(Ue),Tt=[],On=[];ft.forEach(function(Hr,et){Tt[et]=[],Hr.forEach(function(mt){nt.get(mt).length==0&&Tt[et].push(mt)})}),yt.forEach(function(Hr,et){On[et]=[],Hr.forEach(function(mt){dn.get(mt).length==0&&On[et].push(mt)})});var tn=I(st,"horizontal",Pe,pe,Tt),_r=I(Ue,"vertical",_e,ve,On),Dr=o(function(et){xe.get(et)?xe.get(et).forEach(function(mt){b[x.get(mt)]=tn.get(et)}):b[x.get(et)]=tn.get(et)},"_loop9"),Pn=!0,At=!1,Ce=void 0;try{for(var tt=tn.keys()[Symbol.iterator](),St;!(Pn=(St=tt.next()).done);Pn=!0){var mr=St.value;Dr(mr)}}catch(Hr){At=!0,Ce=Hr}finally{try{!Pn&&tt.return&&tt.return()}finally{if(At)throw Ce}}var rn=o(function(et){q.get(et)?q.get(et).forEach(function(mt){w[x.get(mt)]=_r.get(et)}):w[x.get(et)]=_r.get(et)},"_loop10"),gn=!0,Zr=!1,Ni=void 0;try{for(var Zn=_r.keys()[Symbol.iterator](),Sn;!(gn=(Sn=Zn.next()).done);gn=!0){var mr=Sn.value;rn(mr)}}catch(Hr){Zr=!0,Ni=Hr}finally{try{!gn&&Zn.return&&Zn.return()}finally{if(Zr)throw Ni}}}()}for(var de=0;de<C.length;de++){var re=C[de];re.getChild()==null&&re.setCenter(b[x.get(re.id)],w[x.get(re.id)])}},a.exports=m},551:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(45);return i})()})});var Pve=Mi((E4,gF)=>{"use strict";o(function(e,r){typeof E4=="object"&&typeof gF=="object"?gF.exports=r(mF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof E4=="object"?E4.cytoscapeFcose=r(mF()):e.cytoscapeFcose=r(e.coseBase)},"webpackUniversalModuleDefinition")(E4,function(t){return(()=>{"use strict";var e={658:a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h<l;h++)u[h-1]=arguments[h];return u.forEach(function(f){Object.keys(f).forEach(function(d){return s[d]=f[d]})}),s}},548:(a,s,l)=>{var u=function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),w;!(y=(w=b.next()).done)&&(g.push(w.value),!(m&&g.length===m));y=!0);}catch(C){v=!0,x=C}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m<d.length;m++)p[d[m].id()]=!0;var g=d.filter(function(y,v){typeof y=="number"&&(y=v);for(var x=y.parent()[0];x!=null;){if(p[x.id()])return!1;x=x.parent()[0]}return!0});return g},f.connectComponents=function(d,p,m,g){var y=new h,v=new Set,x=[],b=void 0,w=void 0,C=void 0,T=!1,E=1,A=[],S=[],_=o(function(){var D=d.collection();S.push(D);var k=m[0],L=d.collection();L.merge(k).merge(k.descendants().intersection(p)),x.push(k),L.forEach(function(M){y.push(M),v.add(M),D.merge(M)});for(var R=o(function(){k=y.shift();var B=d.collection();k.neighborhood().nodes().forEach(function($){p.intersection(k.edgesWith($)).length>0&&B.merge($)});for(var F=0;F<B.length;F++){var P=B[F];if(b=m.intersection(P.union(P.ancestors())),b!=null&&!v.has(b[0])){var z=b.union(b.descendants());z.forEach(function($){y.push($),v.add($),D.merge($),m.has($)&&x.push($)})}}},"_loop2");y.length!=0;)R();if(D.forEach(function(M){p.intersection(M.connectedEdges()).forEach(function(B){D.has(B.source())&&D.has(B.target())&&D.merge(B)})}),x.length==m.length&&(T=!0),!T||T&&E>1){w=x[0],C=w.connectedEdges().length,x.forEach(function(M){M.connectedEdges().length<C&&(C=M.connectedEdges().length,w=M)}),A.push(w.id());var O=d.collection();O.merge(x[0]),x.forEach(function(M){O.merge(M)}),x=[],m=m.difference(O),E++}},"_loop");do _();while(!T);return g&&A.length>0&&g.set("dummy"+(g.size+1),A),S},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,w=!1,C=void 0;try{for(var T=p.nodeIndexes[Symbol.iterator](),E;!(b=(E=T.next()).done);b=!0){var A=E.value,S=u(A,2),_=S[0],I=S[1],D=m.cy.getElementById(_);if(D){var k=D.boundingBox(),L=p.xCoords[I]-k.w/2,R=p.xCoords[I]+k.w/2,O=p.yCoords[I]-k.h/2,M=p.yCoords[I]+k.h/2;L<g&&(g=L),R>y&&(y=R),O<v&&(v=O),M>x&&(x=M)}}}catch($){w=!0,C=$}finally{try{!b&&T.return&&T.return()}finally{if(w)throw C}}var B=d.x-(y+g)/2,F=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function($){return $+B}),p.yCoords=p.yCoords.map(function($){return $+F})}else{Object.keys(p).forEach(function($){var H=p[$],Q=H.getRect().x,j=H.getRect().x+H.getRect().width,ie=H.getRect().y,ne=H.getRect().y+H.getRect().height;Q<g&&(g=Q),j>y&&(y=j),ie<v&&(v=ie),ne>x&&(x=ne)});var P=d.x-(y+g)/2,z=d.y-(x+v)/2;Object.keys(p).forEach(function($){var H=p[$];H.setCenter(H.getCenterX()+P,H.getCenterY()+z)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,w=void 0,C=void 0,T=void 0,E=void 0,A=d.descendants().not(":parent"),S=A.length,_=0;_<S;_++){var I=A[_];w=p[g.get(I.id())]-I.width()/2,C=p[g.get(I.id())]+I.width()/2,T=m[g.get(I.id())]-I.height()/2,E=m[g.get(I.id())]+I.height()/2,y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var D={};return D.topLeftX=y,D.topLeftY=x,D.width=v-y,D.height=b-x,D},f.calcParentsWithoutChildren=function(d,p){var m=d.collection();return p.nodes(":parent").forEach(function(g){var y=!1;g.children().forEach(function(v){v.css("display")!="none"&&(y=!0)}),y||m.merge(g)}),m},a.exports=f},816:(a,s,l)=>{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,w){var C=b.cy,T=b.eles,E=T.nodes(),A=T.edges(),S=void 0,_=void 0,I=void 0,D={};b.randomize&&(S=w.nodeIndexes,_=w.xCoords,I=w.yCoords);var k=o(function($){return typeof $=="function"},"isFn"),L=o(function($,H){return k($)?$(H):$},"optFn"),R=u.calcParentsWithoutChildren(C,T),O=o(function z($,H,Q,j){for(var ie=H.length,ne=0;ne<ie;ne++){var le=H[ne],he=null;le.intersection(R).length==0&&(he=le.children());var K=void 0,X=le.layoutDimensions({nodeDimensionsIncludeLabels:j.nodeDimensionsIncludeLabels});if(le.outerWidth()!=null&&le.outerHeight()!=null)if(j.randomize)if(!le.isParent())K=$.add(new f(Q.graphManager,new d(_[S.get(le.id())]-X.w/2,I[S.get(le.id())]-X.h/2),new p(parseFloat(X.w),parseFloat(X.h))));else{var te=u.calcBoundingBox(le,_,I,S);le.intersection(R).length==0?K=$.add(new f(Q.graphManager,new d(te.topLeftX,te.topLeftY),new p(te.width,te.height))):K=$.add(new f(Q.graphManager,new d(te.topLeftX,te.topLeftY),new p(parseFloat(X.w),parseFloat(X.h))))}else K=$.add(new f(Q.graphManager,new d(le.position("x")-X.w/2,le.position("y")-X.h/2),new p(parseFloat(X.w),parseFloat(X.h))));else K=$.add(new f(this.graphManager));if(K.id=le.data("id"),K.nodeRepulsion=L(j.nodeRepulsion,le),K.paddingLeft=parseInt(le.css("padding")),K.paddingTop=parseInt(le.css("padding")),K.paddingRight=parseInt(le.css("padding")),K.paddingBottom=parseInt(le.css("padding")),j.nodeDimensionsIncludeLabels&&(K.labelWidth=le.boundingBox({includeLabels:!0,includeNodes:!1,includeOverlays:!1}).w,K.labelHeight=le.boundingBox({includeLabels:!0,includeNodes:!1,includeOverlays:!1}).h,K.labelPosVertical=le.css("text-valign"),K.labelPosHorizontal=le.css("text-halign")),D[le.data("id")]=K,isNaN(K.rect.x)&&(K.rect.x=0),isNaN(K.rect.y)&&(K.rect.y=0),he!=null&&he.length>0){var J=void 0;J=Q.getGraphManager().add(Q.newGraph(),K),z(J,he,Q,j)}}},"processChildrenList"),M=o(function($,H,Q){for(var j=0,ie=0,ne=0;ne<Q.length;ne++){var le=Q[ne],he=D[le.data("source")],K=D[le.data("target")];if(he&&K&&he!==K&&he.getEdgesBetween(K).length==0){var X=H.add($.newEdge(),he,K);X.id=le.id(),X.idealLength=L(b.idealEdgeLength,le),X.edgeElasticity=L(b.edgeElasticity,le),j+=X.idealLength,ie++}}b.idealEdgeLength!=null&&(ie>0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=j/ie:k(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),B=o(function($,H){H.fixedNodeConstraint&&($.constraints.fixedNodeConstraint=H.fixedNodeConstraint),H.alignmentConstraint&&($.constraints.alignmentConstraint=H.alignmentConstraint),H.relativePlacementConstraint&&($.constraints.relativePlacementConstraint=H.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var F=new h,P=F.newGraphManager();return O(P.addRoot(),u.getTopMostNodes(E),F,b),M(F,P,A),B(F,b),F.runLayout(),D},"coseLayout");a.exports={coseLayout:v}},212:(a,s,l)=>{var u=function(){function b(w,C){for(var T=0;T<C.length;T++){var E=C[T];E.enumerable=E.enumerable||!1,E.configurable=!0,"value"in E&&(E.writable=!0),Object.defineProperty(w,E.key,E)}}return o(b,"defineProperties"),function(w,C,T){return C&&b(w.prototype,C),T&&b(w,T),w}}();function h(b,w){if(!(b instanceof w))throw new TypeError("Cannot call a class as a function")}o(h,"_classCallCheck");var f=l(658),d=l(548),p=l(657),m=p.spectralLayout,g=l(816),y=g.coseLayout,v=Object.freeze({quality:"default",randomize:!0,animate:!0,animationDuration:1e3,animationEasing:void 0,fit:!0,padding:30,nodeDimensionsIncludeLabels:!1,uniformNodeDimensions:!1,packComponents:!0,step:"all",samplingType:!0,sampleSize:25,nodeSeparation:75,piTol:1e-7,nodeRepulsion:o(function(w){return 4500},"nodeRepulsion"),idealEdgeLength:o(function(w){return 50},"idealEdgeLength"),edgeElasticity:o(function(w){return .45},"edgeElasticity"),nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,tilingCompareBy:void 0,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.3,fixedNodeConstraint:void 0,alignmentConstraint:void 0,relativePlacementConstraint:void 0,ready:o(function(){},"ready"),stop:o(function(){},"stop")}),x=function(){function b(w){h(this,b),this.options=f({},v,w)}return o(b,"Layout"),u(b,[{key:"run",value:o(function(){var C=this,T=this.options,E=T.cy,A=T.eles,S=[],_=void 0,I=void 0,D=[],k=void 0,L=[];T.fixedNodeConstraint&&(!Array.isArray(T.fixedNodeConstraint)||T.fixedNodeConstraint.length==0)&&(T.fixedNodeConstraint=void 0),T.alignmentConstraint&&(T.alignmentConstraint.vertical&&(!Array.isArray(T.alignmentConstraint.vertical)||T.alignmentConstraint.vertical.length==0)&&(T.alignmentConstraint.vertical=void 0),T.alignmentConstraint.horizontal&&(!Array.isArray(T.alignmentConstraint.horizontal)||T.alignmentConstraint.horizontal.length==0)&&(T.alignmentConstraint.horizontal=void 0)),T.relativePlacementConstraint&&(!Array.isArray(T.relativePlacementConstraint)||T.relativePlacementConstraint.length==0)&&(T.relativePlacementConstraint=void 0);var R=T.fixedNodeConstraint||T.alignmentConstraint||T.relativePlacementConstraint;R&&(T.tile=!1,T.packComponents=!1);var O=void 0,M=!1;if(E.layoutUtilities&&T.packComponents&&(O=E.layoutUtilities("get"),O||(O=E.layoutUtilities()),M=!0),A.nodes().length>0)if(M){var P=d.getTopMostNodes(T.eles.nodes());if(k=d.connectComponents(E,T.eles,P),k.forEach(function(ce){var ae=ce.boundingBox();L.push({x:ae.x1+ae.w/2,y:ae.y1+ae.h/2})}),T.randomize&&k.forEach(function(ce){T.eles=ce,S.push(m(T))}),T.quality=="default"||T.quality=="proof"){var z=E.collection();if(T.tile){var $=new Map,H=[],Q=[],j=0,ie={nodeIndexes:$,xCoords:H,yCoords:Q},ne=[];if(k.forEach(function(ce,ae){ce.edges().length==0&&(ce.nodes().forEach(function(Oe,ge){z.merge(ce.nodes()[ge]),Oe.isParent()||(ie.nodeIndexes.set(ce.nodes()[ge].id(),j++),ie.xCoords.push(ce.nodes()[0].position().x),ie.yCoords.push(ce.nodes()[0].position().y))}),ne.push(ae))}),z.length>1){var le=z.boundingBox();L.push({x:le.x1+le.w/2,y:le.y1+le.h/2}),k.push(z),S.push(ie);for(var he=ne.length-1;he>=0;he--)k.splice(ne[he],1),S.splice(ne[he],1),L.splice(ne[he],1)}}k.forEach(function(ce,ae){T.eles=ce,D.push(y(T,S[ae])),d.relocateComponent(L[ae],D[ae],T)})}else k.forEach(function(ce,ae){d.relocateComponent(L[ae],S[ae],T)});var K=new Set;if(k.length>1){var X=[],te=A.filter(function(ce){return ce.css("display")=="none"});k.forEach(function(ce,ae){var Oe=void 0;if(T.quality=="draft"&&(Oe=S[ae].nodeIndexes),ce.nodes().not(te).length>0){var ge={};ge.edges=[],ge.nodes=[];var ze=void 0;ce.nodes().not(te).forEach(function(He){if(T.quality=="draft")if(!He.isParent())ze=Oe.get(He.id()),ge.nodes.push({x:S[ae].xCoords[ze]-He.boundingbox().w/2,y:S[ae].yCoords[ze]-He.boundingbox().h/2,width:He.boundingbox().w,height:He.boundingbox().h});else{var $e=d.calcBoundingBox(He,S[ae].xCoords,S[ae].yCoords,Oe);ge.nodes.push({x:$e.topLeftX,y:$e.topLeftY,width:$e.width,height:$e.height})}else D[ae][He.id()]&&ge.nodes.push({x:D[ae][He.id()].getLeft(),y:D[ae][He.id()].getTop(),width:D[ae][He.id()].getWidth(),height:D[ae][He.id()].getHeight()})}),ce.edges().forEach(function(He){var $e=He.source(),Re=He.target();if($e.css("display")!="none"&&Re.css("display")!="none")if(T.quality=="draft"){var Ie=Oe.get($e.id()),be=Oe.get(Re.id()),W=[],de=[];if($e.isParent()){var re=d.calcBoundingBox($e,S[ae].xCoords,S[ae].yCoords,Oe);W.push(re.topLeftX+re.width/2),W.push(re.topLeftY+re.height/2)}else W.push(S[ae].xCoords[Ie]),W.push(S[ae].yCoords[Ie]);if(Re.isParent()){var oe=d.calcBoundingBox(Re,S[ae].xCoords,S[ae].yCoords,Oe);de.push(oe.topLeftX+oe.width/2),de.push(oe.topLeftY+oe.height/2)}else de.push(S[ae].xCoords[be]),de.push(S[ae].yCoords[be]);ge.edges.push({startX:W[0],startY:W[1],endX:de[0],endY:de[1]})}else D[ae][$e.id()]&&D[ae][Re.id()]&&ge.edges.push({startX:D[ae][$e.id()].getCenterX(),startY:D[ae][$e.id()].getCenterY(),endX:D[ae][Re.id()].getCenterX(),endY:D[ae][Re.id()].getCenterY()})}),ge.nodes.length>0&&(X.push(ge),K.add(ae))}});var J=O.packComponents(X,T.randomize).shifts;if(T.quality=="draft")S.forEach(function(ce,ae){var Oe=ce.xCoords.map(function(ze){return ze+J[ae].dx}),ge=ce.yCoords.map(function(ze){return ze+J[ae].dy});ce.xCoords=Oe,ce.yCoords=ge});else{var se=0;K.forEach(function(ce){Object.keys(D[ce]).forEach(function(ae){var Oe=D[ce][ae];Oe.setCenter(Oe.getCenterX()+J[se].dx,Oe.getCenterY()+J[se].dy)}),se++})}}}else{var B=T.eles.boundingBox();if(L.push({x:B.x1+B.w/2,y:B.y1+B.h/2}),T.randomize){var F=m(T);S.push(F)}T.quality=="default"||T.quality=="proof"?(D.push(y(T,S[0])),d.relocateComponent(L[0],D[0],T)):d.relocateComponent(L[0],S[0],T)}var ue=o(function(ae,Oe){if(T.quality=="default"||T.quality=="proof"){typeof ae=="number"&&(ae=Oe);var ge=void 0,ze=void 0,He=ae.data("id");return D.forEach(function(Re){He in Re&&(ge={x:Re[He].getRect().getCenterX(),y:Re[He].getRect().getCenterY()},ze=Re[He])}),T.nodeDimensionsIncludeLabels&&(ze.labelWidth&&(ze.labelPosHorizontal=="left"?ge.x+=ze.labelWidth/2:ze.labelPosHorizontal=="right"&&(ge.x-=ze.labelWidth/2)),ze.labelHeight&&(ze.labelPosVertical=="top"?ge.y+=ze.labelHeight/2:ze.labelPosVertical=="bottom"&&(ge.y-=ze.labelHeight/2))),ge==null&&(ge={x:ae.position("x"),y:ae.position("y")}),{x:ge.x,y:ge.y}}else{var $e=void 0;return S.forEach(function(Re){var Ie=Re.nodeIndexes.get(ae.id());Ie!=null&&($e={x:Re.xCoords[Ie],y:Re.yCoords[Ie]})}),$e==null&&($e={x:ae.position("x"),y:ae.position("y")}),{x:$e.x,y:$e.y}}},"getPositions");if(T.quality=="default"||T.quality=="proof"||T.randomize){var Z=d.calcParentsWithoutChildren(E,A),Se=A.filter(function(ce){return ce.css("display")=="none"});T.eles=A.not(Se),A.nodes().not(":parent").not(Se).layoutPositions(C,T,ue),Z.length>0&&Z.forEach(function(ce){ce.position(ue(ce))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b}();a.exports=x},657:(a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,w=new Map,C=new Map,T=[],E=[],A=[],S=[],_=[],I=[],D=[],k=[],L=void 0,R=void 0,O=1e8,M=1e-9,B=m.piTol,F=m.samplingType,P=m.nodeSeparation,z=void 0,$=o(function(){for(var xe=0,q=0,pe=!1;q<z;){xe=Math.floor(Math.random()*R),pe=!1;for(var ve=0;ve<q;ve++)if(S[ve]==xe){pe=!0;break}if(!pe)S[q]=xe,q++;else continue}},"randomSampleCR"),H=o(function(xe,q,pe){for(var ve=[],Pe=0,_e=0,we=0,Ve=void 0,De=[],qe=0,at=1,Rt=0;Rt<R;Rt++)De[Rt]=O;for(ve[_e]=xe,De[xe]=0;_e>=Pe;){we=ve[Pe++];for(var st=T[we],Ue=0;Ue<st.length;Ue++)Ve=w.get(st[Ue]),De[Ve]==O&&(De[Ve]=De[we]+1,ve[++_e]=Ve);I[we][q]=De[we]*P}if(pe){for(var ct=0;ct<R;ct++)I[ct][q]<_[ct]&&(_[ct]=I[ct][q]);for(var We=0;We<R;We++)_[We]>qe&&(qe=_[We],at=We)}return at},"BFS"),Q=o(function(xe){var q=void 0;if(xe){q=Math.floor(Math.random()*R),L=q;for(var ve=0;ve<R;ve++)_[ve]=O;for(var Pe=0;Pe<z;Pe++)S[Pe]=q,q=H(q,Pe,xe)}else{$();for(var pe=0;pe<z;pe++)H(S[pe],pe,xe,!1)}for(var _e=0;_e<R;_e++)for(var we=0;we<z;we++)I[_e][we]*=I[_e][we];for(var Ve=0;Ve<z;Ve++)D[Ve]=[];for(var De=0;De<z;De++)for(var qe=0;qe<z;qe++)D[De][qe]=I[S[qe]][De]},"allBFS"),j=o(function(){for(var xe=f.svd(D),q=xe.S,pe=xe.U,ve=xe.V,Pe=q[0]*q[0]*q[0],_e=[],we=0;we<z;we++){_e[we]=[];for(var Ve=0;Ve<z;Ve++)_e[we][Ve]=0,we==Ve&&(_e[we][Ve]=q[we]/(q[we]*q[we]+Pe/(q[we]*q[we])))}k=h.multMat(h.multMat(ve,_e),h.transpose(pe))},"sample"),ie=o(function(){for(var xe=void 0,q=void 0,pe=[],ve=[],Pe=[],_e=[],we=0;we<R;we++)pe[we]=Math.random(),ve[we]=Math.random();pe=h.normalize(pe),ve=h.normalize(ve);for(var Ve=0,De=M,qe=M,at=void 0;;){Ve++;for(var Rt=0;Rt<R;Rt++)Pe[Rt]=pe[Rt];if(pe=h.multGamma(h.multL(h.multGamma(Pe),I,k)),xe=h.dotProduct(Pe,pe),pe=h.normalize(pe),De=h.dotProduct(Pe,pe),at=Math.abs(De/qe),at<=1+B&&at>=1)break;qe=De}for(var st=0;st<R;st++)Pe[st]=pe[st];for(Ve=0,qe=M;;){Ve++;for(var Ue=0;Ue<R;Ue++)_e[Ue]=ve[Ue];if(_e=h.minusOp(_e,h.multCons(Pe,h.dotProduct(Pe,_e))),ve=h.multGamma(h.multL(h.multGamma(_e),I,k)),q=h.dotProduct(_e,ve),ve=h.normalize(ve),De=h.dotProduct(_e,ve),at=Math.abs(De/qe),at<=1+B&&at>=1)break;qe=De}for(var ct=0;ct<R;ct++)_e[ct]=ve[ct];E=h.multCons(Pe,Math.sqrt(Math.abs(xe))),A=h.multCons(_e,Math.sqrt(Math.abs(q)))},"powerIteration");u.connectComponents(g,y,u.getTopMostNodes(v),b),x.forEach(function(V){u.connectComponents(g,y,u.getTopMostNodes(V.descendants().intersection(y)),b)});for(var ne=0,le=0;le<v.length;le++)v[le].isParent()||w.set(v[le].id(),ne++);var he=!0,K=!1,X=void 0;try{for(var te=b.keys()[Symbol.iterator](),J;!(he=(J=te.next()).done);he=!0){var se=J.value;w.set(se,ne++)}}catch(V){K=!0,X=V}finally{try{!he&&te.return&&te.return()}finally{if(K)throw X}}for(var ue=0;ue<w.size;ue++)T[ue]=[];x.forEach(function(V){for(var xe=V.children().intersection(y);xe.nodes(":childless").length==0;)xe=xe.nodes()[0].children().intersection(y);var q=0,pe=xe.nodes(":childless")[0].connectedEdges().length;xe.nodes(":childless").forEach(function(ve,Pe){ve.connectedEdges().length<pe&&(pe=ve.connectedEdges().length,q=Pe)}),C.set(V.id(),xe.nodes(":childless")[q].id())}),v.forEach(function(V){var xe=void 0;V.isParent()?xe=w.get(C.get(V.id())):xe=w.get(V.id()),V.neighborhood().nodes().forEach(function(q){y.intersection(V.edgesWith(q)).length>0&&(q.isParent()?T[xe].push(C.get(q.id())):T[xe].push(q.id()))})});var Z=o(function(xe){var q=w.get(xe),pe=void 0;b.get(xe).forEach(function(ve){g.getElementById(ve).isParent()?pe=C.get(ve):pe=ve,T[q].push(pe),T[w.get(pe)].push(xe)})},"_loop"),Se=!0,ce=!1,ae=void 0;try{for(var Oe=b.keys()[Symbol.iterator](),ge;!(Se=(ge=Oe.next()).done);Se=!0){var ze=ge.value;Z(ze)}}catch(V){ce=!0,ae=V}finally{try{!Se&&Oe.return&&Oe.return()}finally{if(ce)throw ae}}R=w.size;var He=void 0;if(R>2){z=R<m.sampleSize?R:m.sampleSize;for(var $e=0;$e<R;$e++)I[$e]=[];for(var Re=0;Re<z;Re++)k[Re]=[];return m.quality=="draft"||m.step=="all"?(Q(F),j(),ie(),He={nodeIndexes:w,xCoords:E,yCoords:A}):(w.forEach(function(V,xe){E.push(g.getElementById(xe).position("x")),A.push(g.getElementById(xe).position("y"))}),He={nodeIndexes:w,xCoords:E,yCoords:A}),He}else{var Ie=w.keys(),be=g.getElementById(Ie.next().value),W=be.position(),de=be.outerWidth();if(E.push(W.x),A.push(W.y),R==2){var re=g.getElementById(Ie.next().value),oe=re.outerWidth();E.push(W.x+de/2+oe/2+m.idealEdgeLength),A.push(W.y)}return He={nodeIndexes:w,xCoords:E,yCoords:A},He}},"spectralLayout");a.exports={spectralLayout:d}},579:(a,s,l)=>{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h},140:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(579);return i})()})});var dy,Zp,yF=N(()=>{"use strict";tu();dy=o(t=>`<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/>${t}</g>`,"wrapIcon"),Zp={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:dy('<path id="b" data-name="4" d="m20,57.86c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path id="c" data-name="3" d="m20,45.95c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path id="d" data-name="2" d="m20,34.05c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse id="e" data-name="1" cx="40" cy="22.14" rx="20" ry="7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="20" y1="57.86" x2="20" y2="22.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="60" y1="57.86" x2="60" y2="22.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},server:{body:dy('<rect x="17.5" y="17.5" width="45" height="45" rx="2" ry="2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="32.5" x2="62.5" y2="32.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="47.5" x2="62.5" y2="47.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><g><path d="m56.25,25c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,25c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><path d="m56.25,40c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,40c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><path d="m56.25,55c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,55c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g>')},disk:{body:dy('<rect x="20" y="15" width="40" height="50" rx="1" ry="1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="24" cy="19.17" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="56" cy="19.17" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="24" cy="60.83" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="56" cy="60.83" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="40" cy="33.75" rx="14" ry="14.58" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="40" cy="33.75" rx="4" ry="4.17" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m37.51,42.52l-4.83,13.22c-.26.71-1.1,1.02-1.76.64l-4.18-2.42c-.66-.38-.81-1.26-.33-1.84l9.01-10.8c.88-1.05,2.56-.08,2.09,1.2Z" style="fill: #fff; stroke-width: 0px;"/>')},internet:{body:dy('<circle cx="40" cy="40" r="22.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="40" y1="17.5" x2="40" y2="62.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="40" x2="62.5" y2="40" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m39.99,17.51c-15.28,11.1-15.28,33.88,0,44.98" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m40.01,17.51c15.28,11.1,15.28,33.88,0,44.98" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="19.75" y1="30.1" x2="60.25" y2="30.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="19.75" y1="49.9" x2="60.25" y2="49.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},cloud:{body:dy('<path d="m65,47.5c0,2.76-2.24,5-5,5H20c-2.76,0-5-2.24-5-5,0-1.87,1.03-3.51,2.56-4.36-.04-.21-.06-.42-.06-.64,0-2.6,2.48-4.74,5.65-4.97,1.65-4.51,6.34-7.76,11.85-7.76.86,0,1.69.08,2.5.23,2.09-1.57,4.69-2.5,7.5-2.5,6.1,0,11.19,4.38,12.28,10.17,2.14.56,3.72,2.51,3.72,4.83,0,.03,0,.07-.01.1,2.29.46,4.01,2.48,4.01,4.9Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},unknown:OC,blank:{body:dy("")}}}});var Bve,Fve,$ve,zve,Gve=N(()=>{"use strict";tu();zt();to();w4();yF();oC();Bve=o(async function(t,e){let r=Li("padding"),n=Li("iconSize"),i=n/2,a=n/6,s=a/2;await Promise.all(e.edges().map(async l=>{let{source:u,sourceDir:h,sourceArrow:f,sourceGroup:d,target:p,targetDir:m,targetArrow:g,targetGroup:y,label:v}=sC(l),{x,y:b}=l[0].sourceEndpoint(),{x:w,y:C}=l[0].midpoint(),{x:T,y:E}=l[0].targetEndpoint(),A=r+4;if(d&&(Ha(h)?x+=h==="L"?-A:A:b+=h==="T"?-A:A+18),y&&(Ha(m)?T+=m==="L"?-A:A:E+=m==="T"?-A:A+18),!d&&Qp.getNode(u)?.type==="junction"&&(Ha(h)?x+=h==="L"?i:-i:b+=h==="T"?i:-i),!y&&Qp.getNode(p)?.type==="junction"&&(Ha(m)?T+=m==="L"?i:-i:E+=m==="T"?i:-i),l[0]._private.rscratch){let S=t.insert("g");if(S.insert("path").attr("d",`M ${x},${b} L ${w},${C} L${T},${E} `).attr("class","edge"),f){let _=Ha(h)?v4[h](x,a):x-s,I=Zc(h)?v4[h](b,a):b-s;S.insert("polygon").attr("points",cF[h](a)).attr("transform",`translate(${_},${I})`).attr("class","arrow")}if(g){let _=Ha(m)?v4[m](T,a):T-s,I=Zc(m)?v4[m](E,a):E-s;S.insert("polygon").attr("points",cF[m](a)).attr("transform",`translate(${_},${I})`).attr("class","arrow")}if(v){let _=x4(h,m)?"XY":Ha(h)?"X":"Y",I=0;_==="X"?I=Math.abs(x-T):_==="Y"?I=Math.abs(b-E)/1.5:I=Math.abs(x-T)/2;let D=S.append("g");if(await Hn(D,v,{useHtmlLabels:!1,width:I,classes:"architecture-service-label"},me()),D.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),_==="X")D.attr("transform","translate("+w+", "+C+")");else if(_==="Y")D.attr("transform","translate("+w+", "+C+") rotate(-90)");else if(_==="XY"){let k=b4(h,m);if(k&&Sve(k)){let L=D.node().getBoundingClientRect(),[R,O]=Ave(k);D.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*R*O*45})`);let M=D.node().getBoundingClientRect();D.attr("transform",` | |
| 2557 | + translate(${w}, ${C-L.height/2}) | |
| 2558 | + translate(${R*M.width/2}, ${O*M.height/2}) | |
| 2559 | + rotate(${-1*R*O*45}, 0, ${L.height/2}) | |
| 2560 | + `)}}}}}))},"drawEdges"),Fve=o(async function(t,e){let n=Li("padding")*.75,i=Li("fontSize"),s=Li("iconSize")/2;await Promise.all(e.nodes().map(async l=>{let u=Ff(l);if(u.type==="group"){let{h,w:f,x1:d,y1:p}=l.boundingBox();t.append("rect").attr("x",d+s).attr("y",p+s).attr("width",f).attr("height",h).attr("class","node-bkg");let m=t.append("g"),g=d,y=p;if(u.icon){let v=m.append("g");v.html(`<g>${await wo(u.icon,{height:n,width:n,fallbackPrefix:Zp.prefix})}</g>`),v.attr("transform","translate("+(g+s+1)+", "+(y+s+1)+")"),g+=n,y+=i/2-1-2}if(u.label){let v=m.append("g");await Hn(v,u.label,{useHtmlLabels:!1,width:f,classes:"architecture-service-label"},me()),v.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),v.attr("transform","translate("+(g+s+4)+", "+(y+s+2)+")")}}}))},"drawGroups"),$ve=o(async function(t,e,r){for(let n of r){let i=e.append("g"),a=Li("iconSize");if(n.title){let h=i.append("g");await Hn(h,n.title,{useHtmlLabels:!1,width:a*1.5,classes:"architecture-service-label"},me()),h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),h.attr("transform","translate("+a/2+", "+a+")")}let s=i.append("g");if(n.icon)s.html(`<g>${await wo(n.icon,{height:a,width:a,fallbackPrefix:Zp.prefix})}</g>`);else if(n.iconText){s.html(`<g>${await wo("blank",{height:a,width:a,fallbackPrefix:Zp.prefix})}</g>`);let d=s.append("g").append("foreignObject").attr("width",a).attr("height",a).append("div").attr("class","node-icon-text").attr("style",`height: ${a}px;`).append("div").html(n.iconText),p=parseInt(window.getComputedStyle(d.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;d.attr("style",`-webkit-line-clamp: ${Math.floor((a-2)/p)};`)}else s.append("path").attr("class","node-bkg").attr("id","node-"+n.id).attr("d",`M0 ${a} v${-a} q0,-5 5,-5 h${a} q5,0 5,5 v${a} H0 Z`);i.attr("class","architecture-service");let{width:l,height:u}=i._groups[0][0].getBBox();n.width=l,n.height=u,t.setElementForId(n.id,i)}return 0},"drawServices"),zve=o(function(t,e,r){r.forEach(n=>{let i=e.append("g"),a=Li("iconSize");i.append("g").append("rect").attr("id","node-"+n.id).attr("fill-opacity","0").attr("width",a).attr("height",a),i.attr("class","architecture-junction");let{width:l,height:u}=i._groups[0][0].getBBox();i.width=l,i.height=u,t.setElementForId(n.id,i)})},"drawJunctions")});function Srt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"service",id:r.id,icon:r.icon,label:r.title,parent:r.in,width:Li("iconSize"),height:Li("iconSize")},classes:"node-service"})})}function Crt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"junction",id:r.id,parent:r.in,width:Li("iconSize"),height:Li("iconSize")},classes:"node-junction"})})}function Art(t,e){e.nodes().map(r=>{let n=Ff(r);if(n.type==="group")return;n.x=r.position().x,n.y=r.position().y,t.getElementById(n.id).attr("transform","translate("+(n.x||0)+","+(n.y||0)+")")})}function _rt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function Drt(t,e){t.forEach(r=>{let{lhsId:n,rhsId:i,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=x4(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${n}-${i}`,label:d,source:n,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:i,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function Lrt(t,e,r){let n=o((l,u)=>Object.entries(l).reduce((h,[f,d])=>{let p=0,m=Object.entries(d);if(m.length===1)return h[f]=m[0][1],h;for(let g=0;g<m.length-1;g++)for(let y=g+1;y<m.length;y++){let[v,x]=m[g],[b,w]=m[y];if(r[v]?.[b]===u)h[f]??=[],h[f]=[...h[f],...x,...w];else if(v==="default"||b==="default")h[f]??=[],h[f]=[...h[f],...x,...w];else{let T=`${f}-${p++}`;h[T]=x;let E=`${f}-${p++}`;h[E]=w}}return h},{}),"flattenAlignments"),i=e.map(l=>{let u={},h={};return Object.entries(l).forEach(([f,[d,p]])=>{let m=t.getNode(f)?.in??"default";u[p]??={},u[p][m]??=[],u[p][m].push(f),h[d]??={},h[d][m]??=[],h[d][m].push(f)}),{horiz:Object.values(n(u,"horizontal")).filter(f=>f.length>1),vert:Object.values(n(h,"vertical")).filter(f=>f.length>1)}}),[a,s]=i.reduce(([l,u],{horiz:h,vert:f})=>[[...l,...h],[...u,...f]],[[],[]]);return{horizontal:a,vertical:s}}function Rrt(t){let e=[],r=o(i=>`${i[0]},${i[1]}`,"posToStr"),n=o(i=>i.split(",").map(a=>parseInt(a)),"strToPos");return t.forEach(i=>{let a=Object.fromEntries(Object.entries(i).map(([h,f])=>[r(f),h])),s=[r([0,0])],l={},u={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;s.length>0;){let h=s.shift();if(h){l[h]=1;let f=a[h];if(f){let d=n(h);Object.entries(u).forEach(([p,m])=>{let g=r([d[0]+m[0],d[1]+m[1]]),y=a[g];y&&!l[g]&&(s.push(g),e.push({[lF[p]]:y,[lF[Eve(p)]]:f,gap:1.5*Li("iconSize")}))})}}}}),e}function Nrt(t,e,r,n,i,{spatialMaps:a,groupAlignments:s}){return new Promise(l=>{let u=Ge("body").append("div").attr("id","cy").attr("style","display:none"),h=rl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${Li("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${Li("padding")}px`}}]});u.remove(),_rt(r,h),Srt(t,h),Crt(e,h),Drt(n,h);let f=Lrt(i,a,s),d=Rrt(a),p=h.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(m){let[g,y]=m.connectedNodes(),{parent:v}=Ff(g),{parent:x}=Ff(y);return v===x?1.5*Li("iconSize"):.5*Li("iconSize")},edgeElasticity(m){let[g,y]=m.connectedNodes(),{parent:v}=Ff(g),{parent:x}=Ff(y);return v===x?.45:.001},alignmentConstraint:f,relativePlacementConstraint:d});p.one("layoutstop",()=>{function m(g,y,v,x){let b,w,{x:C,y:T}=g,{x:E,y:A}=y;w=(x-T+(C-v)*(T-A)/(C-E))/Math.sqrt(1+Math.pow((T-A)/(C-E),2)),b=Math.sqrt(Math.pow(x-T,2)+Math.pow(v-C,2)-Math.pow(w,2));let S=Math.sqrt(Math.pow(E-C,2)+Math.pow(A-T,2));b=b/S;let _=(E-C)*(x-T)-(A-T)*(v-C);switch(!0){case _>=0:_=1;break;case _<0:_=-1;break}let I=(E-C)*(v-C)+(A-T)*(x-T);switch(!0){case I>=0:I=1;break;case I<0:I=-1;break}return w=Math.abs(w)*_,b=b*I,{distances:w,weights:b}}o(m,"getSegmentWeights"),h.startBatch();for(let g of Object.values(h.edges()))if(g.data?.()){let{x:y,y:v}=g.source().position(),{x,y:b}=g.target().position();if(y!==x&&v!==b){let w=g.sourceEndpoint(),C=g.targetEndpoint(),{sourceDir:T}=sC(g),[E,A]=Zc(T)?[w.x,C.y]:[C.x,w.y],{weights:S,distances:_}=m(w,C,E,A);g.style("segment-distances",_),g.style("segment-weights",S)}}h.endBatch(),p.run()}),p.run(),h.ready(m=>{Y.info("Ready",m),l(h)})})}var Vve,Mrt,Uve,Hve=N(()=>{"use strict";tu();kB();Vve=Sa(Pve(),1);dr();vt();Vc();Ei();w4();yF();oC();Gve();P4([{name:Zp.prefix,icons:Zp}]);rl.use(Vve.default);o(Srt,"addServices");o(Crt,"addJunctions");o(Art,"positionNodes");o(_rt,"addGroups");o(Drt,"addEdges");o(Lrt,"getAlignments");o(Rrt,"getRelativeConstraints");o(Nrt,"layoutArchitecture");Mrt=o(async(t,e,r,n)=>{let i=n.db,a=i.getServices(),s=i.getJunctions(),l=i.getGroups(),u=i.getEdges(),h=i.getDataStructures(),f=sa(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await $ve(i,p,a),zve(i,p,s);let g=await Nrt(a,s,l,u,i,h);await Bve(d,g),await Fve(m,g),Art(i,g),Ao(void 0,f,Li("padding"),Li("useMaxWidth"))},"draw"),Uve={draw:Mrt}});var Wve={};hr(Wve,{diagram:()=>Irt});var Irt,qve=N(()=>{"use strict";Mve();w4();Ove();Hve();Irt={parser:Nve,db:Qp,renderer:Uve,styles:Ive}});var bnt={};hr(bnt,{default:()=>xnt});tu();PC();Xf();var YX="c4",PCe=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),BCe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(qX(),WX));return{id:YX,diagram:t}},"loader"),FCe={id:YX,detector:PCe,loader:BCe},XX=FCe;var Xie="flowchart",xOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),bOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:Xie,diagram:t}},"loader"),wOe={id:Xie,detector:xOe,loader:bOe},jie=wOe;var Kie="flowchart-v2",TOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),kOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:Kie,diagram:t}},"loader"),EOe={id:Kie,detector:TOe,loader:kOe},Qie=EOe;var sae="er",DOe=o(t=>/^\s*erDiagram/.test(t),"detector"),LOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(aae(),iae));return{id:sae,diagram:t}},"loader"),ROe={id:sae,detector:DOe,loader:LOe},oae=ROe;var uue="gitGraph",tze=o(t=>/^\s*gitGraph/.test(t),"detector"),rze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(cue(),lue));return{id:uue,diagram:t}},"loader"),nze={id:uue,detector:tze,loader:rze},hue=nze;var Gue="gantt",Hze=o(t=>/^\s*gantt/.test(t),"detector"),Wze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(zue(),$ue));return{id:Gue,diagram:t}},"loader"),qze={id:Gue,detector:Hze,loader:Wze},Vue=qze;var Que="info",Zze=o(t=>/^\s*info/.test(t),"detector"),Jze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Kue(),jue));return{id:Que,diagram:t}},"loader"),Zue={id:Que,detector:Zze,loader:Jze};var lhe="pie",fGe=o(t=>/^\s*pie/.test(t),"detector"),dGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ohe(),she));return{id:lhe,diagram:t}},"loader"),che={id:lhe,detector:fGe,loader:dGe};var The="quadrantChart",RGe=o(t=>/^\s*quadrantChart/.test(t),"detector"),NGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(whe(),bhe));return{id:The,diagram:t}},"loader"),MGe={id:The,detector:RGe,loader:NGe},khe=MGe;var Khe="xychart",jGe=o(t=>/^\s*xychart-beta/.test(t),"detector"),KGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(jhe(),Xhe));return{id:Khe,diagram:t}},"loader"),QGe={id:Khe,detector:jGe,loader:KGe},Qhe=QGe;var sfe="requirement",tVe=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),rVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(afe(),ife));return{id:sfe,diagram:t}},"loader"),nVe={id:sfe,detector:tVe,loader:rVe},ofe=nVe;var Afe="sequence",zVe=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),GVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Cfe(),Sfe));return{id:Afe,diagram:t}},"loader"),VVe={id:Afe,detector:zVe,loader:GVe},_fe=VVe;var Ife="class",XVe=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),jVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Mfe(),Nfe));return{id:Ife,diagram:t}},"loader"),KVe={id:Ife,detector:XVe,loader:jVe},Ofe=KVe;var Ffe="classDiagram",ZVe=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),JVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Bfe(),Pfe));return{id:Ffe,diagram:t}},"loader"),eUe={id:Ffe,detector:ZVe,loader:JVe},$fe=eUe;var Ede="state",LUe=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),RUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(kde(),Tde));return{id:Ede,diagram:t}},"loader"),NUe={id:Ede,detector:LUe,loader:RUe},Sde=NUe;var _de="stateDiagram",IUe=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),OUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Ade(),Cde));return{id:_de,diagram:t}},"loader"),PUe={id:_de,detector:IUe,loader:OUe},Dde=PUe;var Wde="journey",nHe=o(t=>/^\s*journey/.test(t),"detector"),iHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Hde(),Ude));return{id:Wde,diagram:t}},"loader"),aHe={id:Wde,detector:nHe,loader:iHe},qde=aHe;vt();Vc();Ei();var sHe=o((t,e,r)=>{Y.debug(`rendering svg for syntax error | |
| 2561 | +`);let n=sa(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),vn(n,100,512,!0),i.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"),i.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"),i.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"),i.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"),i.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"),i.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"),i.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"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),fP={draw:sHe},Yde=fP;var oHe={db:{},renderer:fP,parser:{parse:o(()=>{},"parse")}},Xde=oHe;var jde="flowchart-elk",lHe=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),cHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:jde,diagram:t}},"loader"),uHe={id:jde,detector:lHe,loader:cHe},Kde=uHe;var Tpe="timeline",DHe=o(t=>/^\s*timeline/.test(t),"detector"),LHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(wpe(),bpe));return{id:Tpe,diagram:t}},"loader"),RHe={id:Tpe,detector:DHe,loader:LHe},kpe=RHe;var e1e="mindmap",cJe=o(t=>/^\s*mindmap/.test(t),"detector"),uJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Jge(),Zge));return{id:e1e,diagram:t}},"loader"),hJe={id:e1e,detector:cJe,loader:uJe},t1e=hJe;var d1e="kanban",AJe=o(t=>/^\s*kanban/.test(t),"detector"),_Je=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(f1e(),h1e));return{id:d1e,diagram:t}},"loader"),DJe={id:d1e,detector:AJe,loader:_Je},p1e=DJe;var j1e="sankey",ZJe=o(t=>/^\s*sankey-beta/.test(t),"detector"),JJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(X1e(),Y1e));return{id:j1e,diagram:t}},"loader"),eet={id:j1e,detector:ZJe,loader:JJe},K1e=eet;var sye="packet",pet=o(t=>/^\s*packet-beta/.test(t),"detector"),met=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(aye(),iye));return{id:sye,diagram:t}},"loader"),oye={id:sye,detector:pet,loader:met};var vye="radar",Fet=o(t=>/^\s*radar-beta/.test(t),"detector"),$et=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(yye(),gye));return{id:vye,diagram:t}},"loader"),xye={id:vye,detector:Fet,loader:$et};var Tve="block",srt=o(t=>/^\s*block-beta/.test(t),"detector"),ort=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(wve(),bve));return{id:Tve,diagram:t}},"loader"),lrt={id:Tve,detector:srt,loader:ort},kve=lrt;var Yve="architecture",Ort=o(t=>/^\s*architecture/.test(t),"detector"),Prt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(qve(),Wve));return{id:Yve,diagram:t}},"loader"),Brt={id:Yve,detector:Ort,loader:Prt},Xve=Brt;Xf();zt();var jve=!1,py=o(()=>{jve||(jve=!0,ad("error",Xde,t=>t.toLowerCase().trim()==="error"),ad("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{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")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),z4(XX,p1e,$fe,Ofe,oae,Vue,Zue,che,ofe,_fe,Kde,Qie,jie,t1e,kpe,hue,Dde,Sde,qde,khe,K1e,oye,Qhe,kve,Xve,xye))},"addDiagrams");vt();Xf();zt();var Kve=o(async()=>{Y.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(Yf).map(async([r,{detector:n,loader:i}])=>{if(i)try{jy(r)}catch{try{let{diagram:a,id:s}=await i();ad(s,a,n)}catch(a){throw Y.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete Yf[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){Y.error(`Failed to load ${e.length} external diagrams`);for(let r of e)Y.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");vt();dr();var lC="comm",cC="rule",uC="decl";var Qve="@import";var Zve="@namespace",Jve="@keyframes";var e2e="@layer";var vF=Math.abs,S4=String.fromCharCode;function hC(t){return t.trim()}o(hC,"trim");function C4(t,e,r){return t.replace(e,r)}o(C4,"replace");function t2e(t,e,r){return t.indexOf(e,r)}o(t2e,"indexof");function $f(t,e){return t.charCodeAt(e)|0}o($f,"charat");function zf(t,e,r){return t.slice(e,r)}o(zf,"substr");function vo(t){return t.length}o(vo,"strlen");function r2e(t){return t.length}o(r2e,"sizeof");function my(t,e){return e.push(t),t}o(my,"append");var fC=1,gy=1,n2e=0,il=0,Ri=0,vy="";function dC(t,e,r,n,i,a,s,l){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:fC,column:gy,length:s,return:"",siblings:l}}o(dC,"node");function i2e(){return Ri}o(i2e,"char");function a2e(){return Ri=il>0?$f(vy,--il):0,gy--,Ri===10&&(gy=1,fC--),Ri}o(a2e,"prev");function al(){return Ri=il<n2e?$f(vy,il++):0,gy++,Ri===10&&(gy=1,fC++),Ri}o(al,"next");function rh(){return $f(vy,il)}o(rh,"peek");function A4(){return il}o(A4,"caret");function pC(t,e){return zf(vy,t,e)}o(pC,"slice");function yy(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}o(yy,"token");function s2e(t){return fC=gy=1,n2e=vo(vy=t),il=0,[]}o(s2e,"alloc");function o2e(t){return vy="",t}o(o2e,"dealloc");function mC(t){return hC(pC(il-1,xF(t===91?t+2:t===40?t+1:t)))}o(mC,"delimit");function l2e(t){for(;(Ri=rh())&&Ri<33;)al();return yy(t)>2||yy(Ri)>3?"":" "}o(l2e,"whitespace");function c2e(t,e){for(;--e&&al()&&!(Ri<48||Ri>102||Ri>57&&Ri<65||Ri>70&&Ri<97););return pC(t,A4()+(e<6&&rh()==32&&al()==32))}o(c2e,"escaping");function xF(t){for(;al();)switch(Ri){case t:return il;case 34:case 39:t!==34&&t!==39&&xF(Ri);break;case 40:t===41&&xF(t);break;case 92:al();break}return il}o(xF,"delimiter");function u2e(t,e){for(;al()&&t+Ri!==57;)if(t+Ri===84&&rh()===47)break;return"/*"+pC(e,il-1)+"*"+S4(t===47?t:al())}o(u2e,"commenter");function h2e(t){for(;!yy(rh());)al();return pC(t,il)}o(h2e,"identifier");function p2e(t){return o2e(gC("",null,null,null,[""],t=s2e(t),0,[0],t))}o(p2e,"compile");function gC(t,e,r,n,i,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,w="",C=i,T=a,E=n,A=w;v;)switch(g=b,b=al()){case 40:if(g!=108&&$f(A,d-1)==58){t2e(A+=C4(mC(b),"&","&\f"),"&\f",vF(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:A+=mC(b);break;case 9:case 10:case 13:case 32:A+=l2e(g);break;case 92:A+=c2e(A4()-1,7);continue;case 47:switch(rh()){case 42:case 47:my(Frt(u2e(al(),A4()),e,r,u),u),(yy(g||1)==5||yy(rh()||1)==5)&&vo(A)&&zf(A,-1,void 0)!==" "&&(A+=" ");break;default:A+="/"}break;case 123*y:l[h++]=vo(A)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(A=C4(A,/\f/g,"")),m>0&&(vo(A)-d||y===0&&g===47)&&my(m>32?d2e(A+";",n,r,d-1,u):d2e(C4(A," ","")+";",n,r,d-2,u),u);break;case 59:A+=";";default:if(my(E=f2e(A,e,r,h,f,i,l,w,C=[],T=[],d,a),a),b===123)if(f===0)gC(A,e,E,E,C,a,d,l,T);else{switch(p){case 99:if($f(A,3)===110)break;case 108:if($f(A,2)===97)break;default:f=0;case 100:case 109:case 115:}f?gC(t,E,E,n&&my(f2e(t,E,E,0,0,i,l,w,i,C=[],d,T),T),i,T,d,l,n?C:T):gC(A,E,E,E,[""],T,0,l,T)}}h=f=m=0,y=x=1,w=A="",d=s;break;case 58:d=1+vo(A),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&a2e()==125)continue}switch(A+=S4(b),b*y){case 38:x=f>0?1:(A+="\f",-1);break;case 44:l[h++]=(vo(A)-1)*x,x=1;break;case 64:rh()===45&&(A+=mC(al())),p=rh(),f=d=vo(w=A+=h2e(A4())),b++;break;case 45:g===45&&vo(A)==2&&(y=0)}}return a}o(gC,"parse");function f2e(t,e,r,n,i,a,s,l,u,h,f,d){for(var p=i-1,m=i===0?a:[""],g=r2e(m),y=0,v=0,x=0;y<n;++y)for(var b=0,w=zf(t,p+1,p=vF(v=s[y])),C=t;b<g;++b)(C=hC(v>0?m[b]+" "+w:C4(w,/&\f/g,m[b])))&&(u[x++]=C);return dC(t,e,r,i===0?cC:l,u,h,f,d)}o(f2e,"ruleset");function Frt(t,e,r,n){return dC(t,e,r,lC,S4(i2e()),zf(t,2,-2),0,n)}o(Frt,"comment");function d2e(t,e,r,n,i){return dC(t,e,r,uC,zf(t,0,n),zf(t,n+1,-1),n,i)}o(d2e,"declaration");function yC(t,e){for(var r="",n=0;n<t.length;n++)r+=e(t[n],n,t,e)||"";return r}o(yC,"serialize");function m2e(t,e,r,n){switch(t.type){case e2e:if(t.children.length)break;case Qve:case Zve:case uC:return t.return=t.return||t.value;case lC:return"";case Jve:return t.return=t.value+"{"+yC(t.children,n)+"}";case cC:if(!vo(t.value=t.props.join(",")))return""}return vo(r=yC(t.children,n))?t.return=t.value+"{"+r+"}":""}o(m2e,"stringify");u7();HT();oO();var $rt="graphics-document document";function g2e(t,e){t.attr("role",$rt),e!==""&&t.attr("aria-roledescription",e)}o(g2e,"setA11yDiagramInfo");function y2e(t,e,r,n){if(t.insert!==void 0){if(r){let i=`chart-desc-${n}`;t.attr("aria-describedby",i),t.insert("desc",":first-child").attr("id",i).text(r)}if(e){let i=`chart-title-${n}`;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}o(y2e,"addSVGa11yTitleDescription");s0();ji();ji();zt();Xf();BC();ir();var xy=class t{constructor(e,r,n,i,a){this.type=e;this.text=r;this.db=n;this.parser=i;this.renderer=a}static{o(this,"Diagram")}static async fromText(e,r={}){let n=cr(),i=a0(e,n);e=PX(e)+` | |
| 2562 | +`;try{jy(i)}catch{let h=ZF(i);if(!h)throw new i0(`Diagram ${i} not found.`);let{id:f,diagram:d}=await h();ad(f,d)}let{db:a,parser:s,renderer:l,init:u}=jy(i);return s.parser&&(s.parser.yy=a),a.clear?.(),u?.(n),r.title&&a.setDiagramTitle?.(r.title),await s.parse(e),new t(i,e,a,s,l)}async render(e,r){await this.renderer.draw(this.text,e,r,this)}getParser(){return this.parser}getType(){return this.type}};gr();var v2e=[];var x2e=o(()=>{v2e.forEach(t=>{t()}),v2e=[]},"attachFunctions");vt();var b2e=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");$4();Ew();function w2e(t){let e=t.match(F4);if(!e)return{text:t,metadata:{}};let r=cm(e[1],{schema:lm})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}o(w2e,"extractFrontMatter");ir();var zrt=o(t=>t.replace(/\r\n?/g,` | |
| 2563 | +`).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),Grt=o(t=>{let{text:e,metadata:r}=w2e(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),Vrt=o(t=>{let e=Gt.detectInit(t)??{},r=Gt.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:IX(t),directive:e}},"processDirectives");function bF(t){let e=zrt(t),r=Grt(e),n=Vrt(r.text),i=Fi(r.config,n.directive);return t=b2e(n.text),{code:t,title:r.title,config:i}}o(bF,"preprocessDiagram");tA();q4();ir();function T2e(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}o(T2e,"toBase64");var Urt=5e4,Hrt="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Wrt="sandbox",qrt="loose",Yrt="http://www.w3.org/2000/svg",Xrt="http://www.w3.org/1999/xlink",jrt="http://www.w3.org/1999/xhtml",Krt="100%",Qrt="100%",Zrt="border:0;margin:0;",Jrt="margin:0",ent="allow-top-navigation-by-user-activation allow-popups",tnt='The "iframe" tag is not supported by your browser.',rnt=["foreignobject"],nnt=["dominant-baseline"];function C2e(t){let e=bF(t);return Ly(),W$(e.config??{}),e}o(C2e,"processAndSetConfigs");async function int(t,e){py();try{let{code:r,config:n}=C2e(t);return{diagramType:(await A2e(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(int,"parse");var k2e=o((t,e,r=[])=>` | |
| 2564 | +.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),ant=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` | |
| 2565 | +${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` | |
| 2566 | +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` | |
| 2567 | +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{ur(l.styles)||s.forEach(u=>{r+=k2e(l.id,u,l.styles)}),ur(l.textStyles)||(r+=k2e(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),snt=o((t,e,r,n)=>{let i=ant(t,r),a=zG(e,i,t.themeVariables);return yC(p2e(`${n}{${a}}`),m2e)},"createUserStyles"),ont=o((t="",e,r)=>{let n=t;return!r&&!e&&(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=na(n),n=n.replace(/<br>/g,"<br/>"),n},"cleanUpSvgCode"),lnt=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":Qrt,n=T2e(`<body style="${Jrt}">${t}</body>`);return`<iframe style="width:${Krt};height:${r};${Zrt}" src="data:text/html;charset=UTF-8;base64,${n}" sandbox="${ent}"> | |
| 2568 | + ${tnt} | |
| 2569 | +</iframe>`},"putIntoIFrame"),E2e=o((t,e,r,n,i)=>{let a=t.append("div");a.attr("id",r),n&&a.attr("style",n);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",Yrt);return i&&s.attr("xmlns:xlink",i),s.append("g"),t},"appendDivSvgG");function S2e(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(S2e,"sandboxedIframe");var cnt=o((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),unt=o(async function(t,e,r){py();let n=C2e(e);e=n.code;let i=cr();Y.debug(i),e.length>(i?.maxTextSize??Urt)&&(e=Hrt);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let L=Ge(p?l:h).node();L&&"remove"in L&&L.remove()},"removeTempElements"),d=Ge("body"),p=i.securityLevel===Wrt,m=i.securityLevel===qrt,g=i.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let k=S2e(Ge(r),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge(r);E2e(d,t,u,`font-family: ${g}`,Xrt)}else{if(cnt(document,t,u,s),p){let k=S2e(Ge("body"),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge("body");E2e(d,t,u)}let y,v;try{y=await xy.fromText(e,{title:n.title})}catch(k){if(i.suppressErrorRendering)throw f(),k;y=await xy.fromText("error"),v=k}let x=d.select(h).node(),b=y.type,w=x.firstChild,C=w.firstChild,T=y.renderer.getClasses?.(e,y),E=snt(i,b,T,a),A=document.createElement("style");A.innerHTML=E,w.insertBefore(A,C);try{await y.renderer.draw(e,t,vb.version,y)}catch(k){throw i.suppressErrorRendering?f():Yde.draw(e,t,vb.version),k}let S=d.select(`${h} svg`),_=y.db.getAccTitle?.(),I=y.db.getAccDescription?.();fnt(b,S,_,I),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",jrt);let D=d.select(h).node().innerHTML;if(Y.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),D=ont(D,p,fr(i.arrowMarkerAbsolute)),p){let k=d.select(h+" svg").node();D=lnt(D,k)}else m||(D=ch.sanitize(D,{ADD_TAGS:rnt,ADD_ATTR:nnt,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(x2e(),v)throw v;return f(),{diagramType:b,svg:D,bindFunctions:y.db.bindFunctions}},"render");function hnt(t={}){let e=Gn({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),V$(e),e?.theme&&e.theme in To?e.themeVariables=To[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=To.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?t7(e):r7();wy(r.logLevel),py()}o(hnt,"initialize");var A2e=o((t,e={})=>{let{code:r}=bF(t);return xy.fromText(r,e)},"getDiagramFromText");function fnt(t,e,r,n){g2e(e,t),y2e(e,r,n,e.attr("id"))}o(fnt,"addA11yInfo");var Gf=Object.freeze({render:unt,parse:int,getDiagramFromText:A2e,initialize:hnt,getConfig:cr,setConfig:X4,getSiteConfig:r7,updateSiteConfig:U$,reset:o(()=>{Ly()},"reset"),globalReset:o(()=>{Ly(lh)},"globalReset"),defaultConfig:lh});wy(cr().logLevel);Ly(cr());Yd();ir();var dnt=o((t,e,r)=>{Y.warn(t),Z9(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),_2e=o(async function(t={querySelector:".mermaid"}){try{await pnt(t)}catch(e){if(Z9(e)&&Y.error(e.str),nh.parseError&&nh.parseError(e),!t.suppressErrors)throw Y.error("Use the suppressErrors option to suppress these errors"),e}},"run"),pnt=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let n=Gf.getConfig();Y.debug(`${t?"":"No "}Callback function found`);let i;if(r)i=r;else if(e)i=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");Y.debug(`Found ${i.length} diagrams`),n?.startOnLoad!==void 0&&(Y.debug("Start On Load: "+n?.startOnLoad),Gf.updateSiteConfig({startOnLoad:n?.startOnLoad}));let a=new Gt.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed),s,l=[];for(let u of Array.from(i)){Y.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=B4(Gt.entityDecode(s)).trim().replace(/<br\s*\/?>/gi,"<br/>");let f=Gt.detectInit(s);f&&Y.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await N2e(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){dnt(d,l,nh.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),D2e=o(function(t){Gf.initialize(t)},"initialize"),mnt=o(async function(t,e,r){Y.warn("mermaid.init is deprecated. Please use run instead."),t&&D2e(t);let n={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await _2e(n)},"init"),gnt=o(async(t,{lazyLoad:e=!0}={})=>{py(),z4(...t),e===!1&&await Kve()},"registerExternalDiagrams"),L2e=o(function(){if(nh.startOnLoad){let{startOnLoad:t}=Gf.getConfig();t&&nh.run().catch(e=>Y.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",L2e,!1)}var ynt=o(function(t){nh.parseError=t},"setParseErrorHandler"),vC=[],wF=!1,R2e=o(async()=>{if(!wF){for(wF=!0;vC.length>0;){let t=vC.shift();if(t)try{await t()}catch(e){Y.error("Error executing queue",e)}}wF=!1}},"executeQueue"),vnt=o(async(t,e)=>new Promise((r,n)=>{let i=o(()=>new Promise((a,s)=>{Gf.parse(t,e).then(l=>{a(l),r(l)},l=>{Y.error("Error parsing",l),nh.parseError?.(l),s(l),n(l)})}),"performCall");vC.push(i),R2e().catch(n)}),"parse"),N2e=o((t,e,r)=>new Promise((n,i)=>{let a=o(()=>new Promise((s,l)=>{Gf.render(t,e,r).then(u=>{s(u),n(u)},u=>{Y.error("Error parsing",u),nh.parseError?.(u),l(u),i(u)})}),"performCall");vC.push(a),R2e().catch(i)}),"render"),nh={startOnLoad:!0,mermaidAPI:Gf,parse:vnt,render:N2e,init:mnt,run:_2e,registerExternalDiagrams:gnt,registerLayoutLoaders:vR,initialize:D2e,parseError:void 0,contentLoaded:L2e,setParseErrorHandler:ynt,detectType:a0,registerIconPacks:P4},xnt=nh;return V2e(bnt);})(); | |
| 2570 | +/*! Check if previously processed */ | |
| 2571 | +/*! | |
| 2572 | + * Wait for document loaded before starting the execution | |
| 2573 | + */ | |
| 2574 | +/*! Bundled license information: | |
| 2575 | + | |
| 2576 | +dompurify/dist/purify.es.mjs: | |
| 2577 | + (*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE *) | |
| 2578 | + | |
| 2579 | +js-yaml/dist/js-yaml.mjs: | |
| 2580 | + (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) | |
| 2581 | + | |
| 2582 | +lodash-es/lodash.js: | |
| 2583 | + (** | |
| 2584 | + * @license | |
| 2585 | + * Lodash (Custom Build) <https://lodash.com/> | |
| 2586 | + * Build: `lodash modularize exports="es" -o ./` | |
| 2587 | + * Copyright OpenJS Foundation and other contributors <https://openjsf.org/> | |
| 2588 | + * Released under MIT license <https://lodash.com/license> | |
| 2589 | + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> | |
| 2590 | + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors | |
| 2591 | + *) | |
| 2592 | + | |
| 2593 | +cytoscape/dist/cytoscape.esm.mjs: | |
| 2594 | + (*! | |
| 2595 | + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable | |
| 2596 | + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) | |
| 2597 | + Licensed under The MIT License (http://opensource.org/licenses/MIT) | |
| 2598 | + *) | |
| 2599 | + (*! | |
| 2600 | + Event object based on jQuery events, MIT license | |
| 2601 | + | |
| 2602 | + https://jquery.org/license/ | |
| 2603 | + https://tldrlegal.com/license/mit-license | |
| 2604 | + https://github.com/jquery/jquery/blob/master/src/event.js | |
| 2605 | + *) | |
| 2606 | + (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *) | |
| 2607 | + (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *) | |
| 2608 | +*/ | |
| 2609 | +globalThis.mermaid = globalThis.__esbuild_esm_mermaid.default; | |
| 2609 | < \ No newline at end of file |
A
book/theme/mermaid-init-ccf746f1.js
+39
-0
@@ -0,0 +1,39 @@
| 1 | +// This Source Code Form is subject to the terms of the Mozilla Public | |
| 2 | +// License, v. 2.0. If a copy of the MPL was not distributed with this | |
| 3 | +// file, You can obtain one at https://mozilla.org/MPL/2.0/. | |
| 4 | + | |
| 5 | +(() => { | |
| 6 | + const darkThemes = ['ayu', 'navy', 'coal']; | |
| 7 | + const lightThemes = ['light', 'rust']; | |
| 8 | + | |
| 9 | + const classList = document.getElementsByTagName('html')[0].classList; | |
| 10 | + | |
| 11 | + let lastThemeWasLight = true; | |
| 12 | + for (const cssClass of classList) { | |
| 13 | + if (darkThemes.includes(cssClass)) { | |
| 14 | + lastThemeWasLight = false; | |
| 15 | + break; | |
| 16 | + } | |
| 17 | + } | |
| 18 | + | |
| 19 | + const theme = lastThemeWasLight ? 'default' : 'dark'; | |
| 20 | + mermaid.initialize({ startOnLoad: true, theme }); | |
| 21 | + | |
| 22 | + // Simplest way to make mermaid re-render the diagrams in the new theme is via refreshing the page | |
| 23 | + | |
| 24 | + for (const darkTheme of darkThemes) { | |
| 25 | + document.getElementById(darkTheme).addEventListener('click', () => { | |
| 26 | + if (lastThemeWasLight) { | |
| 27 | + window.location.reload(); | |
| 28 | + } | |
| 29 | + }); | |
| 30 | + } | |
| 31 | + | |
| 32 | + for (const lightTheme of lightThemes) { | |
| 33 | + document.getElementById(lightTheme).addEventListener('click', () => { | |
| 34 | + if (!lastThemeWasLight) { | |
| 35 | + window.location.reload(); | |
| 36 | + } | |
| 37 | + }); | |
| 38 | + } | |
| 39 | +})(); |
A
book/toc-84dd2703.js
+454
-0
@@ -0,0 +1,454 @@
| 1 | +// Populate the sidebar | |
| 2 | +// | |
| 3 | +// This is a script, and not included directly in the page, to control the total size of the book. | |
| 4 | +// The TOC contains an entry for each page, so if each page includes a copy of the TOC, | |
| 5 | +// the total size of the page becomes O(n**2). | |
| 6 | +class MDBookSidebarScrollbox extends HTMLElement { | |
| 7 | + constructor() { | |
| 8 | + super(); | |
| 9 | + } | |
| 10 | + connectedCallback() { | |
| 11 | + this.innerHTML = '<ol class="chapter"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="introduction.html">Introduction</a></span></li><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel utilisateur</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/index.html"><strong aria-hidden="true">1.</strong> Vue d'ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/index.html"><strong aria-hidden="true">2.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/01-premier-pas.html"><strong aria-hidden="true">2.1.</strong> 01 — Premier pas sur gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/02-cloner-pousser.html"><strong aria-hidden="true">2.2.</strong> 02 — Cloner et pousser du code</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/03-collaborer.html"><strong aria-hidden="true">2.3.</strong> 03 — Collaborer : équipes, issues, pull requests</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/04-automatiser-ci.html"><strong aria-hidden="true">2.4.</strong> 04 — Automatiser avec la CI</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/index.html"><strong aria-hidden="true">3.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/gerer-cles-ssh.html"><strong aria-hidden="true">3.1.</strong> Gérer ses clés SSH</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/configurer-2fa.html"><strong aria-hidden="true">3.2.</strong> Configurer la double authentification (2FA)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/creer-personal-access-token.html"><strong aria-hidden="true">3.3.</strong> Créer un Personal Access Token</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/gerer-equipes-permissions.html"><strong aria-hidden="true">3.4.</strong> Gérer les équipes et les permissions</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/ouvrir-pull-request.html"><strong aria-hidden="true">3.5.</strong> Ouvrir une pull request</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/fusionner-strategies.html"><strong aria-hidden="true">3.6.</strong> Stratégies de fusion (ff / squash / merge commit)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/utiliser-labels-issues.html"><strong aria-hidden="true">3.7.</strong> Utiliser les labels et les issues</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/importer-depot-externe.html"><strong aria-hidden="true">3.8.</strong> Importer un dépôt externe</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/consulter-sbom.html"><strong aria-hidden="true">3.9.</strong> Consulter le SBOM d'un dépôt</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/index.html"><strong aria-hidden="true">4.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/modele-permissions.html"><strong aria-hidden="true">4.1.</strong> Modèle de permissions (4 rôles)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/api-rest-v1.html"><strong aria-hidden="true">4.2.</strong> API REST v1</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/gitrust-ci-yml-schema.html"><strong aria-hidden="true">4.3.</strong> Schéma du fichier .gitrust-ci.yml</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/markdown-et-syntaxe.html"><strong aria-hidden="true">4.4.</strong> Markdown et syntaxe supportée</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/notifications.html"><strong aria-hidden="true">4.5.</strong> Notifications</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/index.html"><strong aria-hidden="true">5.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/modele-collaboration.html"><strong aria-hidden="true">5.1.</strong> Modèle de collaboration sur gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/securite-utilisateur.html"><strong aria-hidden="true">5.2.</strong> Sécurité côté utilisateur</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/cycle-vie-pull-request.html"><strong aria-hidden="true">5.3.</strong> Cycle de vie d'une pull request</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel d'administration</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/index.html"><strong aria-hidden="true">6.</strong> Vue d'ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/index.html"><strong aria-hidden="true">7.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/01-installation-docker.html"><strong aria-hidden="true">7.1.</strong> 01 — Installation avec Docker</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/02-installation-systemd.html"><strong aria-hidden="true">7.2.</strong> 02 — Installation avec systemd</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/03-premier-demarrage.html"><strong aria-hidden="true">7.3.</strong> 03 — Premier démarrage</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/04-mise-en-production-192-168.html"><strong aria-hidden="true">7.4.</strong> 04 — Mise en production (réseau local)</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/index.html"><strong aria-hidden="true">8.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/sauvegarder-restaurer.html"><strong aria-hidden="true">8.1.</strong> Sauvegarder et restaurer</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/mettre-a-jour.html"><strong aria-hidden="true">8.2.</strong> Mettre à jour gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-smtp.html"><strong aria-hidden="true">8.3.</strong> Configurer SMTP</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-oauth.html"><strong aria-hidden="true">8.4.</strong> Configurer OAuth</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-ci-runner-remote.html"><strong aria-hidden="true">8.5.</strong> Configurer un runner CI distant</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/integrer-dependency-track.html"><strong aria-hidden="true">8.6.</strong> Intégrer Dependency-Track (SBOM)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/durcir-avec-fail2ban.html"><strong aria-hidden="true">8.7.</strong> Durcir avec Fail2ban</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/tuner-rate-limiting.html"><strong aria-hidden="true">8.8.</strong> Régler le rate limiting</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/forcer-2fa-globalement.html"><strong aria-hidden="true">8.9.</strong> Forcer le 2FA sur toute l'instance</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/depanner-ssh.html"><strong aria-hidden="true">8.10.</strong> Dépanner SSH</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/depanner-ci.html"><strong aria-hidden="true">8.11.</strong> Dépanner la CI</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/gerer-utilisateurs-admin.html"><strong aria-hidden="true">8.12.</strong> Gérer les utilisateurs (panel /admin)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/auditer-instance.html"><strong aria-hidden="true">8.13.</strong> Auditer une instance</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/index.html"><strong aria-hidden="true">9.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/variables-environnement.html"><strong aria-hidden="true">9.1.</strong> Variables d'environnement</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/parametres-dynamiques.html"><strong aria-hidden="true">9.2.</strong> Paramètres dynamiques</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/schema-base-de-donnees.html"><strong aria-hidden="true">9.3.</strong> Schéma de la base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/ports-et-services.html"><strong aria-hidden="true">9.4.</strong> Ports et services</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/conformite-anssi-pa074.html"><strong aria-hidden="true">9.5.</strong> Conformité ANSSI PA-074</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/index.html"><strong aria-hidden="true">10.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/architecture-globale.html"><strong aria-hidden="true">10.1.</strong> Architecture globale</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/modele-deploiement.html"><strong aria-hidden="true">10.2.</strong> Modèle de déploiement</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/ci-dagger.html"><strong aria-hidden="true">10.3.</strong> CI Dagger : Easy Mode vs Power Mode</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/strategie-sauvegarde.html"><strong aria-hidden="true">10.4.</strong> Stratégie de sauvegarde</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel développeur</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/index.html"><strong aria-hidden="true">11.</strong> Vue d'ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/index.html"><strong aria-hidden="true">12.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/01-getting-started.html"><strong aria-hidden="true">12.1.</strong> 01 — Démarrer avec le code gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/02-premiere-contribution.html"><strong aria-hidden="true">12.2.</strong> 02 — Première contribution</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/03-creer-un-worker-async.html"><strong aria-hidden="true">12.3.</strong> 03 — Créer un worker async (capstone)</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/index.html"><strong aria-hidden="true">13.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/contribuer-workflow-pr.html"><strong aria-hidden="true">13.1.</strong> Workflow de contribution et PR</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/lancer-tests-unitaires.html"><strong aria-hidden="true">13.2.</strong> Lancer les tests unitaires</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/lancer-tests-e2e.html"><strong aria-hidden="true">13.3.</strong> Lancer les tests E2E</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-route-web.html"><strong aria-hidden="true">13.4.</strong> Ajouter une route web</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-service-metier.html"><strong aria-hidden="true">13.5.</strong> Ajouter un service métier</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-migration-db.html"><strong aria-hidden="true">13.6.</strong> Ajouter une migration de base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/implementer-webhooks.html"><strong aria-hidden="true">13.7.</strong> Implémenter des webhooks</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/implementer-endpoint-api.html"><strong aria-hidden="true">13.8.</strong> Implémenter un endpoint API</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/importer-depot-externe-code.html"><strong aria-hidden="true">13.9.</strong> Importer un dépôt externe (code)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/contribuer-a-rustwarden.html"><strong aria-hidden="true">13.10.</strong> Contribuer à rustwarden upstream</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/passer-la-qa-avant-merge.html"><strong aria-hidden="true">13.11.</strong> Passer la QA avant un merge</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/index.html"><strong aria-hidden="true">14.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/architecture-crates.html"><strong aria-hidden="true">14.1.</strong> Architecture des crates</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/services-api-interne.html"><strong aria-hidden="true">14.2.</strong> Services et API interne</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/schema-base-donnees.html"><strong aria-hidden="true">14.3.</strong> Schéma de la base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/regles-qa-anssi.html"><strong aria-hidden="true">14.4.</strong> Règles QA et conformité ANSSI</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/api-rest-v1.html"><strong aria-hidden="true">14.5.</strong> API REST v1</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/git-hooks-post-receive.html"><strong aria-hidden="true">14.6.</strong> Hooks Git post-receive</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/rustwarden-core-api.html"><strong aria-hidden="true">14.7.</strong> API rustwarden-core</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/index.html"><strong aria-hidden="true">15.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/vue-ensemble-architecture.html"><strong aria-hidden="true">15.1.</strong> Vue d'ensemble de l'architecture</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/flux-requetes.html"><strong aria-hidden="true">15.2.</strong> Flux de requêtes</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/modele-permissions-rbac.html"><strong aria-hidden="true">15.3.</strong> Modèle de permissions RBAC</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/2fa-fonctionnement.html"><strong aria-hidden="true">15.4.</strong> Fonctionnement du 2FA</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/hierarchie-labels.html"><strong aria-hidden="true">15.5.</strong> Hiérarchie des labels</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/ci-dagger-easy-vs-power.html"><strong aria-hidden="true">15.6.</strong> CI Dagger : Easy Mode vs Power Mode</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/decisions-ui-htmx.html"><strong aria-hidden="true">15.7.</strong> Décisions UI (HTMX, DaisyUI)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/patron-worker-async.html"><strong aria-hidden="true">15.8.</strong> Patron worker async</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Bibliothèque de templates</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="template/index.html"><strong aria-hidden="true">16.</strong> Catalogue des templates</a></span></li></ol>'; | |
| 12 | + // Set the current, active page, and reveal it if it's hidden | |
| 13 | + let current_page = document.location.href.toString().split('#')[0].split('?')[0]; | |
| 14 | + if (current_page.endsWith('/')) { | |
| 15 | + current_page += 'index.html'; | |
| 16 | + } | |
| 17 | + const links = Array.prototype.slice.call(this.querySelectorAll('a')); | |
| 18 | + const l = links.length; | |
| 19 | + for (let i = 0; i < l; ++i) { | |
| 20 | + const link = links[i]; | |
| 21 | + const href = link.getAttribute('href'); | |
| 22 | + if (href && !href.startsWith('#') && !/^(?:[a-z+]+:)?\/\//.test(href)) { | |
| 23 | + link.href = path_to_root + href; | |
| 24 | + } | |
| 25 | + // The 'index' page is supposed to alias the first chapter in the book. | |
| 26 | + if (link.href === current_page | |
| 27 | + || i === 0 | |
| 28 | + && path_to_root === '' | |
| 29 | + && current_page.endsWith('/index.html')) { | |
| 30 | + link.classList.add('active'); | |
| 31 | + let parent = link.parentElement; | |
| 32 | + while (parent) { | |
| 33 | + if (parent.tagName === 'LI' && parent.classList.contains('chapter-item')) { | |
| 34 | + parent.classList.add('expanded'); | |
| 35 | + } | |
| 36 | + parent = parent.parentElement; | |
| 37 | + } | |
| 38 | + } | |
| 39 | + } | |
| 40 | + // Track and set sidebar scroll position | |
| 41 | + this.addEventListener('click', e => { | |
| 42 | + if (e.target.tagName === 'A') { | |
| 43 | + const clientRect = e.target.getBoundingClientRect(); | |
| 44 | + const sidebarRect = this.getBoundingClientRect(); | |
| 45 | + sessionStorage.setItem('sidebar-scroll-offset', clientRect.top - sidebarRect.top); | |
| 46 | + } | |
| 47 | + }, { passive: true }); | |
| 48 | + const sidebarScrollOffset = sessionStorage.getItem('sidebar-scroll-offset'); | |
| 49 | + sessionStorage.removeItem('sidebar-scroll-offset'); | |
| 50 | + if (sidebarScrollOffset !== null) { | |
| 51 | + // preserve sidebar scroll position when navigating via links within sidebar | |
| 52 | + const activeSection = this.querySelector('.active'); | |
| 53 | + if (activeSection) { | |
| 54 | + const clientRect = activeSection.getBoundingClientRect(); | |
| 55 | + const sidebarRect = this.getBoundingClientRect(); | |
| 56 | + const currentOffset = clientRect.top - sidebarRect.top; | |
| 57 | + this.scrollTop += currentOffset - parseFloat(sidebarScrollOffset); | |
| 58 | + } | |
| 59 | + } else { | |
| 60 | + // scroll sidebar to current active section when navigating via | |
| 61 | + // 'next/previous chapter' buttons | |
| 62 | + const activeSection = document.querySelector('#mdbook-sidebar .active'); | |
| 63 | + if (activeSection) { | |
| 64 | + activeSection.scrollIntoView({ block: 'center' }); | |
| 65 | + } | |
| 66 | + } | |
| 67 | + // Toggle buttons | |
| 68 | + const sidebarAnchorToggles = document.querySelectorAll('.chapter-fold-toggle'); | |
| 69 | + function toggleSection(ev) { | |
| 70 | + ev.currentTarget.parentElement.parentElement.classList.toggle('expanded'); | |
| 71 | + } | |
| 72 | + Array.from(sidebarAnchorToggles).forEach(el => { | |
| 73 | + el.addEventListener('click', toggleSection); | |
| 74 | + }); | |
| 75 | + } | |
| 76 | +} | |
| 77 | +window.customElements.define('mdbook-sidebar-scrollbox', MDBookSidebarScrollbox); | |
| 78 | + | |
| 79 | + | |
| 80 | +// --------------------------------------------------------------------------- | |
| 81 | +// Support for dynamically adding headers to the sidebar. | |
| 82 | + | |
| 83 | +(function() { | |
| 84 | + // This is used to detect which direction the page has scrolled since the | |
| 85 | + // last scroll event. | |
| 86 | + let lastKnownScrollPosition = 0; | |
| 87 | + // This is the threshold in px from the top of the screen where it will | |
| 88 | + // consider a header the "current" header when scrolling down. | |
| 89 | + const defaultDownThreshold = 150; | |
| 90 | + // Same as defaultDownThreshold, except when scrolling up. | |
| 91 | + const defaultUpThreshold = 300; | |
| 92 | + // The threshold is a virtual horizontal line on the screen where it | |
| 93 | + // considers the "current" header to be above the line. The threshold is | |
| 94 | + // modified dynamically to handle headers that are near the bottom of the | |
| 95 | + // screen, and to slightly offset the behavior when scrolling up vs down. | |
| 96 | + let threshold = defaultDownThreshold; | |
| 97 | + // This is used to disable updates while scrolling. This is needed when | |
| 98 | + // clicking the header in the sidebar, which triggers a scroll event. It | |
| 99 | + // is somewhat finicky to detect when the scroll has finished, so this | |
| 100 | + // uses a relatively dumb system of disabling scroll updates for a short | |
| 101 | + // time after the click. | |
| 102 | + let disableScroll = false; | |
| 103 | + // Array of header elements on the page. | |
| 104 | + let headers; | |
| 105 | + // Array of li elements that are initially collapsed headers in the sidebar. | |
| 106 | + // I'm not sure why eslint seems to have a false positive here. | |
| 107 | + // eslint-disable-next-line prefer-const | |
| 108 | + let headerToggles = []; | |
| 109 | + // This is a debugging tool for the threshold which you can enable in the console. | |
| 110 | + let thresholdDebug = false; | |
| 111 | + | |
| 112 | + // Updates the threshold based on the scroll position. | |
| 113 | + function updateThreshold() { | |
| 114 | + const scrollTop = window.pageYOffset || document.documentElement.scrollTop; | |
| 115 | + const windowHeight = window.innerHeight; | |
| 116 | + const documentHeight = document.documentElement.scrollHeight; | |
| 117 | + | |
| 118 | + // The number of pixels below the viewport, at most documentHeight. | |
| 119 | + // This is used to push the threshold down to the bottom of the page | |
| 120 | + // as the user scrolls towards the bottom. | |
| 121 | + const pixelsBelow = Math.max(0, documentHeight - (scrollTop + windowHeight)); | |
| 122 | + // The number of pixels above the viewport, at least defaultDownThreshold. | |
| 123 | + // Similar to pixelsBelow, this is used to push the threshold back towards | |
| 124 | + // the top when reaching the top of the page. | |
| 125 | + const pixelsAbove = Math.max(0, defaultDownThreshold - scrollTop); | |
| 126 | + // How much the threshold should be offset once it gets close to the | |
| 127 | + // bottom of the page. | |
| 128 | + const bottomAdd = Math.max(0, windowHeight - pixelsBelow - defaultDownThreshold); | |
| 129 | + let adjustedBottomAdd = bottomAdd; | |
| 130 | + | |
| 131 | + // Adjusts bottomAdd for a small document. The calculation above | |
| 132 | + // assumes the document is at least twice the windowheight in size. If | |
| 133 | + // it is less than that, then bottomAdd needs to be shrunk | |
| 134 | + // proportional to the difference in size. | |
| 135 | + if (documentHeight < windowHeight * 2) { | |
| 136 | + const maxPixelsBelow = documentHeight - windowHeight; | |
| 137 | + const t = 1 - pixelsBelow / Math.max(1, maxPixelsBelow); | |
| 138 | + const clamp = Math.max(0, Math.min(1, t)); | |
| 139 | + adjustedBottomAdd *= clamp; | |
| 140 | + } | |
| 141 | + | |
| 142 | + let scrollingDown = true; | |
| 143 | + if (scrollTop < lastKnownScrollPosition) { | |
| 144 | + scrollingDown = false; | |
| 145 | + } | |
| 146 | + | |
| 147 | + if (scrollingDown) { | |
| 148 | + // When scrolling down, move the threshold up towards the default | |
| 149 | + // downwards threshold position. If near the bottom of the page, | |
| 150 | + // adjustedBottomAdd will offset the threshold towards the bottom | |
| 151 | + // of the page. | |
| 152 | + const amountScrolledDown = scrollTop - lastKnownScrollPosition; | |
| 153 | + const adjustedDefault = defaultDownThreshold + adjustedBottomAdd; | |
| 154 | + threshold = Math.max(adjustedDefault, threshold - amountScrolledDown); | |
| 155 | + } else { | |
| 156 | + // When scrolling up, move the threshold down towards the default | |
| 157 | + // upwards threshold position. If near the bottom of the page, | |
| 158 | + // quickly transition the threshold back up where it normally | |
| 159 | + // belongs. | |
| 160 | + const amountScrolledUp = lastKnownScrollPosition - scrollTop; | |
| 161 | + const adjustedDefault = defaultUpThreshold - pixelsAbove | |
| 162 | + + Math.max(0, adjustedBottomAdd - defaultDownThreshold); | |
| 163 | + threshold = Math.min(adjustedDefault, threshold + amountScrolledUp); | |
| 164 | + } | |
| 165 | + | |
| 166 | + if (documentHeight <= windowHeight) { | |
| 167 | + threshold = 0; | |
| 168 | + } | |
| 169 | + | |
| 170 | + if (thresholdDebug) { | |
| 171 | + const id = 'mdbook-threshold-debug-data'; | |
| 172 | + let data = document.getElementById(id); | |
| 173 | + if (data === null) { | |
| 174 | + data = document.createElement('div'); | |
| 175 | + data.id = id; | |
| 176 | + data.style.cssText = ` | |
| 177 | + position: fixed; | |
| 178 | + top: 50px; | |
| 179 | + right: 10px; | |
| 180 | + background-color: 0xeeeeee; | |
| 181 | + z-index: 9999; | |
| 182 | + pointer-events: none; | |
| 183 | + `; | |
| 184 | + document.body.appendChild(data); | |
| 185 | + } | |
| 186 | + data.innerHTML = ` | |
| 187 | + <table> | |
| 188 | + <tr><td>documentHeight</td><td>${documentHeight.toFixed(1)}</td></tr> | |
| 189 | + <tr><td>windowHeight</td><td>${windowHeight.toFixed(1)}</td></tr> | |
| 190 | + <tr><td>scrollTop</td><td>${scrollTop.toFixed(1)}</td></tr> | |
| 191 | + <tr><td>pixelsAbove</td><td>${pixelsAbove.toFixed(1)}</td></tr> | |
| 192 | + <tr><td>pixelsBelow</td><td>${pixelsBelow.toFixed(1)}</td></tr> | |
| 193 | + <tr><td>bottomAdd</td><td>${bottomAdd.toFixed(1)}</td></tr> | |
| 194 | + <tr><td>adjustedBottomAdd</td><td>${adjustedBottomAdd.toFixed(1)}</td></tr> | |
| 195 | + <tr><td>scrollingDown</td><td>${scrollingDown}</td></tr> | |
| 196 | + <tr><td>threshold</td><td>${threshold.toFixed(1)}</td></tr> | |
| 197 | + </table> | |
| 198 | + `; | |
| 199 | + drawDebugLine(); | |
| 200 | + } | |
| 201 | + | |
| 202 | + lastKnownScrollPosition = scrollTop; | |
| 203 | + } | |
| 204 | + | |
| 205 | + function drawDebugLine() { | |
| 206 | + if (!document.body) { | |
| 207 | + return; | |
| 208 | + } | |
| 209 | + const id = 'mdbook-threshold-debug-line'; | |
| 210 | + const existingLine = document.getElementById(id); | |
| 211 | + if (existingLine) { | |
| 212 | + existingLine.remove(); | |
| 213 | + } | |
| 214 | + const line = document.createElement('div'); | |
| 215 | + line.id = id; | |
| 216 | + line.style.cssText = ` | |
| 217 | + position: fixed; | |
| 218 | + top: ${threshold}px; | |
| 219 | + left: 0; | |
| 220 | + width: 100vw; | |
| 221 | + height: 2px; | |
| 222 | + background-color: red; | |
| 223 | + z-index: 9999; | |
| 224 | + pointer-events: none; | |
| 225 | + `; | |
| 226 | + document.body.appendChild(line); | |
| 227 | + } | |
| 228 | + | |
| 229 | + function mdbookEnableThresholdDebug() { | |
| 230 | + thresholdDebug = true; | |
| 231 | + updateThreshold(); | |
| 232 | + drawDebugLine(); | |
| 233 | + } | |
| 234 | + | |
| 235 | + window.mdbookEnableThresholdDebug = mdbookEnableThresholdDebug; | |
| 236 | + | |
| 237 | + // Updates which headers in the sidebar should be expanded. If the current | |
| 238 | + // header is inside a collapsed group, then it, and all its parents should | |
| 239 | + // be expanded. | |
| 240 | + function updateHeaderExpanded(currentA) { | |
| 241 | + // Add expanded to all header-item li ancestors. | |
| 242 | + let current = currentA.parentElement; | |
| 243 | + while (current) { | |
| 244 | + if (current.tagName === 'LI' && current.classList.contains('header-item')) { | |
| 245 | + current.classList.add('expanded'); | |
| 246 | + } | |
| 247 | + current = current.parentElement; | |
| 248 | + } | |
| 249 | + } | |
| 250 | + | |
| 251 | + // Updates which header is marked as the "current" header in the sidebar. | |
| 252 | + // This is done with a virtual Y threshold, where headers at or below | |
| 253 | + // that line will be considered the current one. | |
| 254 | + function updateCurrentHeader() { | |
| 255 | + if (!headers || !headers.length) { | |
| 256 | + return; | |
| 257 | + } | |
| 258 | + | |
| 259 | + // Reset the classes, which will be rebuilt below. | |
| 260 | + const els = document.getElementsByClassName('current-header'); | |
| 261 | + for (const el of els) { | |
| 262 | + el.classList.remove('current-header'); | |
| 263 | + } | |
| 264 | + for (const toggle of headerToggles) { | |
| 265 | + toggle.classList.remove('expanded'); | |
| 266 | + } | |
| 267 | + | |
| 268 | + // Find the last header that is above the threshold. | |
| 269 | + let lastHeader = null; | |
| 270 | + for (const header of headers) { | |
| 271 | + const rect = header.getBoundingClientRect(); | |
| 272 | + if (rect.top <= threshold) { | |
| 273 | + lastHeader = header; | |
| 274 | + } else { | |
| 275 | + break; | |
| 276 | + } | |
| 277 | + } | |
| 278 | + if (lastHeader === null) { | |
| 279 | + lastHeader = headers[0]; | |
| 280 | + const rect = lastHeader.getBoundingClientRect(); | |
| 281 | + const windowHeight = window.innerHeight; | |
| 282 | + if (rect.top >= windowHeight) { | |
| 283 | + return; | |
| 284 | + } | |
| 285 | + } | |
| 286 | + | |
| 287 | + // Get the anchor in the summary. | |
| 288 | + const href = '#' + lastHeader.id; | |
| 289 | + const a = [...document.querySelectorAll('.header-in-summary')] | |
| 290 | + .find(element => element.getAttribute('href') === href); | |
| 291 | + if (!a) { | |
| 292 | + return; | |
| 293 | + } | |
| 294 | + | |
| 295 | + a.classList.add('current-header'); | |
| 296 | + | |
| 297 | + updateHeaderExpanded(a); | |
| 298 | + } | |
| 299 | + | |
| 300 | + // Updates which header is "current" based on the threshold line. | |
| 301 | + function reloadCurrentHeader() { | |
| 302 | + if (disableScroll) { | |
| 303 | + return; | |
| 304 | + } | |
| 305 | + updateThreshold(); | |
| 306 | + updateCurrentHeader(); | |
| 307 | + } | |
| 308 | + | |
| 309 | + | |
| 310 | + // When clicking on a header in the sidebar, this adjusts the threshold so | |
| 311 | + // that it is located next to the header. This is so that header becomes | |
| 312 | + // "current". | |
| 313 | + function headerThresholdClick(event) { | |
| 314 | + // See disableScroll description why this is done. | |
| 315 | + disableScroll = true; | |
| 316 | + setTimeout(() => { | |
| 317 | + disableScroll = false; | |
| 318 | + }, 100); | |
| 319 | + // requestAnimationFrame is used to delay the update of the "current" | |
| 320 | + // header until after the scroll is done, and the header is in the new | |
| 321 | + // position. | |
| 322 | + requestAnimationFrame(() => { | |
| 323 | + requestAnimationFrame(() => { | |
| 324 | + // Closest is needed because if it has child elements like <code>. | |
| 325 | + const a = event.target.closest('a'); | |
| 326 | + const href = a.getAttribute('href'); | |
| 327 | + const targetId = href.substring(1); | |
| 328 | + const targetElement = document.getElementById(targetId); | |
| 329 | + if (targetElement) { | |
| 330 | + threshold = targetElement.getBoundingClientRect().bottom; | |
| 331 | + updateCurrentHeader(); | |
| 332 | + } | |
| 333 | + }); | |
| 334 | + }); | |
| 335 | + } | |
| 336 | + | |
| 337 | + // Takes the nodes from the given head and copies them over to the | |
| 338 | + // destination, along with some filtering. | |
| 339 | + function filterHeader(source, dest) { | |
| 340 | + const clone = source.cloneNode(true); | |
| 341 | + clone.querySelectorAll('mark').forEach(mark => { | |
| 342 | + mark.replaceWith(...mark.childNodes); | |
| 343 | + }); | |
| 344 | + dest.append(...clone.childNodes); | |
| 345 | + } | |
| 346 | + | |
| 347 | + // Scans page for headers and adds them to the sidebar. | |
| 348 | + document.addEventListener('DOMContentLoaded', function() { | |
| 349 | + const activeSection = document.querySelector('#mdbook-sidebar .active'); | |
| 350 | + if (activeSection === null) { | |
| 351 | + return; | |
| 352 | + } | |
| 353 | + | |
| 354 | + const main = document.getElementsByTagName('main')[0]; | |
| 355 | + headers = Array.from(main.querySelectorAll('h2, h3, h4, h5, h6')) | |
| 356 | + .filter(h => h.id !== '' && h.children.length && h.children[0].tagName === 'A'); | |
| 357 | + | |
| 358 | + if (headers.length === 0) { | |
| 359 | + return; | |
| 360 | + } | |
| 361 | + | |
| 362 | + // Build a tree of headers in the sidebar. | |
| 363 | + | |
| 364 | + const stack = []; | |
| 365 | + | |
| 366 | + const firstLevel = parseInt(headers[0].tagName.charAt(1)); | |
| 367 | + for (let i = 1; i < firstLevel; i++) { | |
| 368 | + const ol = document.createElement('ol'); | |
| 369 | + ol.classList.add('section'); | |
| 370 | + if (stack.length > 0) { | |
| 371 | + stack[stack.length - 1].ol.appendChild(ol); | |
| 372 | + } | |
| 373 | + stack.push({level: i + 1, ol: ol}); | |
| 374 | + } | |
| 375 | + | |
| 376 | + // The level where it will start folding deeply nested headers. | |
| 377 | + const foldLevel = 3; | |
| 378 | + | |
| 379 | + for (let i = 0; i < headers.length; i++) { | |
| 380 | + const header = headers[i]; | |
| 381 | + const level = parseInt(header.tagName.charAt(1)); | |
| 382 | + | |
| 383 | + const currentLevel = stack[stack.length - 1].level; | |
| 384 | + if (level > currentLevel) { | |
| 385 | + // Begin nesting to this level. | |
| 386 | + for (let nextLevel = currentLevel + 1; nextLevel <= level; nextLevel++) { | |
| 387 | + const ol = document.createElement('ol'); | |
| 388 | + ol.classList.add('section'); | |
| 389 | + const last = stack[stack.length - 1]; | |
| 390 | + const lastChild = last.ol.lastChild; | |
| 391 | + // Handle the case where jumping more than one nesting | |
| 392 | + // level, which doesn't have a list item to place this new | |
| 393 | + // list inside of. | |
| 394 | + if (lastChild) { | |
| 395 | + lastChild.appendChild(ol); | |
| 396 | + } else { | |
| 397 | + last.ol.appendChild(ol); | |
| 398 | + } | |
| 399 | + stack.push({level: nextLevel, ol: ol}); | |
| 400 | + } | |
| 401 | + } else if (level < currentLevel) { | |
| 402 | + while (stack.length > 1 && stack[stack.length - 1].level > level) { | |
| 403 | + stack.pop(); | |
| 404 | + } | |
| 405 | + } | |
| 406 | + | |
| 407 | + const li = document.createElement('li'); | |
| 408 | + li.classList.add('header-item'); | |
| 409 | + li.classList.add('expanded'); | |
| 410 | + if (level < foldLevel) { | |
| 411 | + li.classList.add('expanded'); | |
| 412 | + } | |
| 413 | + const span = document.createElement('span'); | |
| 414 | + span.classList.add('chapter-link-wrapper'); | |
| 415 | + const a = document.createElement('a'); | |
| 416 | + span.appendChild(a); | |
| 417 | + a.href = '#' + header.id; | |
| 418 | + a.classList.add('header-in-summary'); | |
| 419 | + filterHeader(header.children[0], a); | |
| 420 | + a.addEventListener('click', headerThresholdClick); | |
| 421 | + const nextHeader = headers[i + 1]; | |
| 422 | + if (nextHeader !== undefined) { | |
| 423 | + const nextLevel = parseInt(nextHeader.tagName.charAt(1)); | |
| 424 | + if (nextLevel > level && level >= foldLevel) { | |
| 425 | + const toggle = document.createElement('a'); | |
| 426 | + toggle.classList.add('chapter-fold-toggle'); | |
| 427 | + toggle.classList.add('header-toggle'); | |
| 428 | + toggle.addEventListener('click', () => { | |
| 429 | + li.classList.toggle('expanded'); | |
| 430 | + }); | |
| 431 | + const toggleDiv = document.createElement('div'); | |
| 432 | + toggleDiv.textContent = '❱'; | |
| 433 | + toggle.appendChild(toggleDiv); | |
| 434 | + span.appendChild(toggle); | |
| 435 | + headerToggles.push(li); | |
| 436 | + } | |
| 437 | + } | |
| 438 | + li.appendChild(span); | |
| 439 | + | |
| 440 | + const currentParent = stack[stack.length - 1]; | |
| 441 | + currentParent.ol.appendChild(li); | |
| 442 | + } | |
| 443 | + | |
| 444 | + const onThisPage = document.createElement('div'); | |
| 445 | + onThisPage.classList.add('on-this-page'); | |
| 446 | + onThisPage.append(stack[0].ol); | |
| 447 | + const activeItemSpan = activeSection.parentElement; | |
| 448 | + activeItemSpan.after(onThisPage); | |
| 449 | + }); | |
| 450 | + | |
| 451 | + document.addEventListener('DOMContentLoaded', reloadCurrentHeader); | |
| 452 | + document.addEventListener('scroll', reloadCurrentHeader, { passive: true }); | |
| 453 | +})(); | |
| 454 | + |
A
book/toc.html
+31
-0
@@ -0,0 +1,31 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- sidebar iframe generated using mdBook | |
| 5 | + | |
| 6 | + This is a frame, and not included directly in the page, to control the total size of the | |
| 7 | + book. The TOC contains an entry for each page, so if each page includes a copy of the TOC, | |
| 8 | + the total size of the page becomes O(n**2). | |
| 9 | + | |
| 10 | + The frame is only used as a fallback when JS is turned off. When it's on, the sidebar is | |
| 11 | + instead added to the main page by `toc.js` instead. The JavaScript mode is better | |
| 12 | + because, when running in a `file:///` URL, the iframed page would not be Same-Origin as | |
| 13 | + the rest of the page, so the sidebar and the main page theme would fall out of sync. | |
| 14 | + --> | |
| 15 | + <meta charset="UTF-8"> | |
| 16 | + <meta name="robots" content="noindex"> | |
| 17 | + <!-- Custom HTML head --> | |
| 18 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 19 | + <meta name="theme-color" content="#ffffff"> | |
| 20 | + <link rel="stylesheet" href="css/variables-8adf115d.css"> | |
| 21 | + <link rel="stylesheet" href="css/general-2459343d.css"> | |
| 22 | + <link rel="stylesheet" href="css/chrome-ae938929.css"> | |
| 23 | + <link rel="stylesheet" href="css/print-9e4910d8.css" media="print"> | |
| 24 | + <!-- Fonts --> | |
| 25 | + <link rel="stylesheet" href="fonts/fonts-9644e21d.css"> | |
| 26 | + <!-- Custom theme stylesheets --> | |
| 27 | + </head> | |
| 28 | + <body class="sidebar-iframe-inner"> | |
| 29 | + <ol class="chapter"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="introduction.html" target="_parent">Introduction</a></span></li><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel utilisateur</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/index.html" target="_parent"><strong aria-hidden="true">1.</strong> Vue d'ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/index.html" target="_parent"><strong aria-hidden="true">2.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/01-premier-pas.html" target="_parent"><strong aria-hidden="true">2.1.</strong> 01 — Premier pas sur gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/02-cloner-pousser.html" target="_parent"><strong aria-hidden="true">2.2.</strong> 02 — Cloner et pousser du code</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/03-collaborer.html" target="_parent"><strong aria-hidden="true">2.3.</strong> 03 — Collaborer : équipes, issues, pull requests</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/04-automatiser-ci.html" target="_parent"><strong aria-hidden="true">2.4.</strong> 04 — Automatiser avec la CI</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/index.html" target="_parent"><strong aria-hidden="true">3.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/gerer-cles-ssh.html" target="_parent"><strong aria-hidden="true">3.1.</strong> Gérer ses clés SSH</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/configurer-2fa.html" target="_parent"><strong aria-hidden="true">3.2.</strong> Configurer la double authentification (2FA)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/creer-personal-access-token.html" target="_parent"><strong aria-hidden="true">3.3.</strong> Créer un Personal Access Token</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/gerer-equipes-permissions.html" target="_parent"><strong aria-hidden="true">3.4.</strong> Gérer les équipes et les permissions</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/ouvrir-pull-request.html" target="_parent"><strong aria-hidden="true">3.5.</strong> Ouvrir une pull request</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/fusionner-strategies.html" target="_parent"><strong aria-hidden="true">3.6.</strong> Stratégies de fusion (ff / squash / merge commit)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/utiliser-labels-issues.html" target="_parent"><strong aria-hidden="true">3.7.</strong> Utiliser les labels et les issues</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/importer-depot-externe.html" target="_parent"><strong aria-hidden="true">3.8.</strong> Importer un dépôt externe</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/consulter-sbom.html" target="_parent"><strong aria-hidden="true">3.9.</strong> Consulter le SBOM d'un dépôt</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/index.html" target="_parent"><strong aria-hidden="true">4.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/modele-permissions.html" target="_parent"><strong aria-hidden="true">4.1.</strong> Modèle de permissions (4 rôles)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/api-rest-v1.html" target="_parent"><strong aria-hidden="true">4.2.</strong> API REST v1</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/gitrust-ci-yml-schema.html" target="_parent"><strong aria-hidden="true">4.3.</strong> Schéma du fichier .gitrust-ci.yml</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/markdown-et-syntaxe.html" target="_parent"><strong aria-hidden="true">4.4.</strong> Markdown et syntaxe supportée</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/notifications.html" target="_parent"><strong aria-hidden="true">4.5.</strong> Notifications</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/index.html" target="_parent"><strong aria-hidden="true">5.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/modele-collaboration.html" target="_parent"><strong aria-hidden="true">5.1.</strong> Modèle de collaboration sur gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/securite-utilisateur.html" target="_parent"><strong aria-hidden="true">5.2.</strong> Sécurité côté utilisateur</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/cycle-vie-pull-request.html" target="_parent"><strong aria-hidden="true">5.3.</strong> Cycle de vie d'une pull request</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel d'administration</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/index.html" target="_parent"><strong aria-hidden="true">6.</strong> Vue d'ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/index.html" target="_parent"><strong aria-hidden="true">7.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/01-installation-docker.html" target="_parent"><strong aria-hidden="true">7.1.</strong> 01 — Installation avec Docker</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/02-installation-systemd.html" target="_parent"><strong aria-hidden="true">7.2.</strong> 02 — Installation avec systemd</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/03-premier-demarrage.html" target="_parent"><strong aria-hidden="true">7.3.</strong> 03 — Premier démarrage</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/04-mise-en-production-192-168.html" target="_parent"><strong aria-hidden="true">7.4.</strong> 04 — Mise en production (réseau local)</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/index.html" target="_parent"><strong aria-hidden="true">8.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/sauvegarder-restaurer.html" target="_parent"><strong aria-hidden="true">8.1.</strong> Sauvegarder et restaurer</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/mettre-a-jour.html" target="_parent"><strong aria-hidden="true">8.2.</strong> Mettre à jour gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-smtp.html" target="_parent"><strong aria-hidden="true">8.3.</strong> Configurer SMTP</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-oauth.html" target="_parent"><strong aria-hidden="true">8.4.</strong> Configurer OAuth</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-ci-runner-remote.html" target="_parent"><strong aria-hidden="true">8.5.</strong> Configurer un runner CI distant</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/integrer-dependency-track.html" target="_parent"><strong aria-hidden="true">8.6.</strong> Intégrer Dependency-Track (SBOM)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/durcir-avec-fail2ban.html" target="_parent"><strong aria-hidden="true">8.7.</strong> Durcir avec Fail2ban</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/tuner-rate-limiting.html" target="_parent"><strong aria-hidden="true">8.8.</strong> Régler le rate limiting</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/forcer-2fa-globalement.html" target="_parent"><strong aria-hidden="true">8.9.</strong> Forcer le 2FA sur toute l'instance</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/depanner-ssh.html" target="_parent"><strong aria-hidden="true">8.10.</strong> Dépanner SSH</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/depanner-ci.html" target="_parent"><strong aria-hidden="true">8.11.</strong> Dépanner la CI</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/gerer-utilisateurs-admin.html" target="_parent"><strong aria-hidden="true">8.12.</strong> Gérer les utilisateurs (panel /admin)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/auditer-instance.html" target="_parent"><strong aria-hidden="true">8.13.</strong> Auditer une instance</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/index.html" target="_parent"><strong aria-hidden="true">9.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/variables-environnement.html" target="_parent"><strong aria-hidden="true">9.1.</strong> Variables d'environnement</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/parametres-dynamiques.html" target="_parent"><strong aria-hidden="true">9.2.</strong> Paramètres dynamiques</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/schema-base-de-donnees.html" target="_parent"><strong aria-hidden="true">9.3.</strong> Schéma de la base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/ports-et-services.html" target="_parent"><strong aria-hidden="true">9.4.</strong> Ports et services</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/conformite-anssi-pa074.html" target="_parent"><strong aria-hidden="true">9.5.</strong> Conformité ANSSI PA-074</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/index.html" target="_parent"><strong aria-hidden="true">10.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/architecture-globale.html" target="_parent"><strong aria-hidden="true">10.1.</strong> Architecture globale</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/modele-deploiement.html" target="_parent"><strong aria-hidden="true">10.2.</strong> Modèle de déploiement</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/ci-dagger.html" target="_parent"><strong aria-hidden="true">10.3.</strong> CI Dagger : Easy Mode vs Power Mode</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/strategie-sauvegarde.html" target="_parent"><strong aria-hidden="true">10.4.</strong> Stratégie de sauvegarde</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel développeur</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/index.html" target="_parent"><strong aria-hidden="true">11.</strong> Vue d'ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/index.html" target="_parent"><strong aria-hidden="true">12.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/01-getting-started.html" target="_parent"><strong aria-hidden="true">12.1.</strong> 01 — Démarrer avec le code gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/02-premiere-contribution.html" target="_parent"><strong aria-hidden="true">12.2.</strong> 02 — Première contribution</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/03-creer-un-worker-async.html" target="_parent"><strong aria-hidden="true">12.3.</strong> 03 — Créer un worker async (capstone)</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/index.html" target="_parent"><strong aria-hidden="true">13.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/contribuer-workflow-pr.html" target="_parent"><strong aria-hidden="true">13.1.</strong> Workflow de contribution et PR</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/lancer-tests-unitaires.html" target="_parent"><strong aria-hidden="true">13.2.</strong> Lancer les tests unitaires</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/lancer-tests-e2e.html" target="_parent"><strong aria-hidden="true">13.3.</strong> Lancer les tests E2E</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-route-web.html" target="_parent"><strong aria-hidden="true">13.4.</strong> Ajouter une route web</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-service-metier.html" target="_parent"><strong aria-hidden="true">13.5.</strong> Ajouter un service métier</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-migration-db.html" target="_parent"><strong aria-hidden="true">13.6.</strong> Ajouter une migration de base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/implementer-webhooks.html" target="_parent"><strong aria-hidden="true">13.7.</strong> Implémenter des webhooks</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/implementer-endpoint-api.html" target="_parent"><strong aria-hidden="true">13.8.</strong> Implémenter un endpoint API</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/importer-depot-externe-code.html" target="_parent"><strong aria-hidden="true">13.9.</strong> Importer un dépôt externe (code)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/contribuer-a-rustwarden.html" target="_parent"><strong aria-hidden="true">13.10.</strong> Contribuer à rustwarden upstream</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/passer-la-qa-avant-merge.html" target="_parent"><strong aria-hidden="true">13.11.</strong> Passer la QA avant un merge</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/index.html" target="_parent"><strong aria-hidden="true">14.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/architecture-crates.html" target="_parent"><strong aria-hidden="true">14.1.</strong> Architecture des crates</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/services-api-interne.html" target="_parent"><strong aria-hidden="true">14.2.</strong> Services et API interne</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/schema-base-donnees.html" target="_parent"><strong aria-hidden="true">14.3.</strong> Schéma de la base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/regles-qa-anssi.html" target="_parent"><strong aria-hidden="true">14.4.</strong> Règles QA et conformité ANSSI</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/api-rest-v1.html" target="_parent"><strong aria-hidden="true">14.5.</strong> API REST v1</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/git-hooks-post-receive.html" target="_parent"><strong aria-hidden="true">14.6.</strong> Hooks Git post-receive</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/rustwarden-core-api.html" target="_parent"><strong aria-hidden="true">14.7.</strong> API rustwarden-core</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/index.html" target="_parent"><strong aria-hidden="true">15.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/vue-ensemble-architecture.html" target="_parent"><strong aria-hidden="true">15.1.</strong> Vue d'ensemble de l'architecture</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/flux-requetes.html" target="_parent"><strong aria-hidden="true">15.2.</strong> Flux de requêtes</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/modele-permissions-rbac.html" target="_parent"><strong aria-hidden="true">15.3.</strong> Modèle de permissions RBAC</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/2fa-fonctionnement.html" target="_parent"><strong aria-hidden="true">15.4.</strong> Fonctionnement du 2FA</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/hierarchie-labels.html" target="_parent"><strong aria-hidden="true">15.5.</strong> Hiérarchie des labels</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/ci-dagger-easy-vs-power.html" target="_parent"><strong aria-hidden="true">15.6.</strong> CI Dagger : Easy Mode vs Power Mode</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/decisions-ui-htmx.html" target="_parent"><strong aria-hidden="true">15.7.</strong> Décisions UI (HTMX, DaisyUI)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/patron-worker-async.html" target="_parent"><strong aria-hidden="true">15.8.</strong> Patron worker async</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Bibliothèque de templates</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="template/index.html" target="_parent"><strong aria-hidden="true">16.</strong> Catalogue des templates</a></span></li></ol> | |
| 30 | + </body> | |
| 31 | +</html> |
A
book/tomorrow-night-4c0ae647.css
+104
-0
@@ -0,0 +1,104 @@
| 1 | +/* Tomorrow Night Theme */ | |
| 2 | +/* https://github.com/jmblog/color-themes-for-highlightjs */ | |
| 3 | +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ | |
| 4 | +/* https://github.com/jmblog/color-themes-for-highlightjs */ | |
| 5 | + | |
| 6 | +/* Tomorrow Comment */ | |
| 7 | +.hljs-comment { | |
| 8 | + color: #969896; | |
| 9 | +} | |
| 10 | + | |
| 11 | +/* Tomorrow Red */ | |
| 12 | +.hljs-variable, | |
| 13 | +.hljs-attribute, | |
| 14 | +.hljs-attr, | |
| 15 | +.hljs-tag, | |
| 16 | +.hljs-regexp, | |
| 17 | +.ruby .hljs-constant, | |
| 18 | +.xml .hljs-tag .hljs-title, | |
| 19 | +.xml .hljs-pi, | |
| 20 | +.xml .hljs-doctype, | |
| 21 | +.html .hljs-doctype, | |
| 22 | +.css .hljs-id, | |
| 23 | +.css .hljs-class, | |
| 24 | +.css .hljs-pseudo { | |
| 25 | + color: #cc6666; | |
| 26 | +} | |
| 27 | + | |
| 28 | +/* Tomorrow Orange */ | |
| 29 | +.hljs-number, | |
| 30 | +.hljs-preprocessor, | |
| 31 | +.hljs-pragma, | |
| 32 | +.hljs-built_in, | |
| 33 | +.hljs-literal, | |
| 34 | +.hljs-params, | |
| 35 | +.hljs-constant { | |
| 36 | + color: #de935f; | |
| 37 | +} | |
| 38 | + | |
| 39 | +/* Tomorrow Yellow */ | |
| 40 | +.ruby .hljs-class .hljs-title, | |
| 41 | +.css .hljs-rule .hljs-attribute { | |
| 42 | + color: #f0c674; | |
| 43 | +} | |
| 44 | + | |
| 45 | +/* Tomorrow Green */ | |
| 46 | +.hljs-string, | |
| 47 | +.hljs-value, | |
| 48 | +.hljs-inheritance, | |
| 49 | +.hljs-header, | |
| 50 | +.hljs-name, | |
| 51 | +.ruby .hljs-symbol, | |
| 52 | +.xml .hljs-cdata { | |
| 53 | + color: #b5bd68; | |
| 54 | +} | |
| 55 | + | |
| 56 | +/* Tomorrow Aqua */ | |
| 57 | +.hljs-title, | |
| 58 | +.hljs-section, | |
| 59 | +.css .hljs-hexcolor { | |
| 60 | + color: #8abeb7; | |
| 61 | +} | |
| 62 | + | |
| 63 | +/* Tomorrow Blue */ | |
| 64 | +.hljs-function, | |
| 65 | +.python .hljs-decorator, | |
| 66 | +.python .hljs-title, | |
| 67 | +.ruby .hljs-function .hljs-title, | |
| 68 | +.ruby .hljs-title .hljs-keyword, | |
| 69 | +.perl .hljs-sub, | |
| 70 | +.javascript .hljs-title, | |
| 71 | +.coffeescript .hljs-title { | |
| 72 | + color: #81a2be; | |
| 73 | +} | |
| 74 | + | |
| 75 | +/* Tomorrow Purple */ | |
| 76 | +.hljs-keyword, | |
| 77 | +.javascript .hljs-function { | |
| 78 | + color: #b294bb; | |
| 79 | +} | |
| 80 | + | |
| 81 | +.hljs { | |
| 82 | + display: block; | |
| 83 | + overflow-x: auto; | |
| 84 | + background: #1d1f21; | |
| 85 | + color: #c5c8c6; | |
| 86 | +} | |
| 87 | + | |
| 88 | +.coffeescript .javascript, | |
| 89 | +.javascript .xml, | |
| 90 | +.tex .hljs-formula, | |
| 91 | +.xml .javascript, | |
| 92 | +.xml .vbscript, | |
| 93 | +.xml .css, | |
| 94 | +.xml .hljs-cdata { | |
| 95 | + opacity: 0.5; | |
| 96 | +} | |
| 97 | + | |
| 98 | +.hljs-addition { | |
| 99 | + color: #718c00; | |
| 100 | +} | |
| 101 | + | |
| 102 | +.hljs-deletion { | |
| 103 | + color: #c82829; | |
| 104 | +} |
A
book/user_manual/explanation/cycle-vie-pull-request.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Cycle de vie d'une pull request - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/explanation/cycle-vie-pull-request.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="cycle-de-vie-dune-pull-request"><a class="header" href="#cycle-de-vie-dune-pull-request">Cycle de vie d’une pull request</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/explanation/securite-utilisateur.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../administration_manual/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/explanation/securite-utilisateur.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../administration_manual/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/explanation/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Explication - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/explanation/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="explication"><a class="header" href="#explication">Explication</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/reference/notifications.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/explanation/modele-collaboration.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/reference/notifications.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/explanation/modele-collaboration.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/explanation/modele-collaboration.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Modèle de collaboration sur gitrust - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/explanation/modele-collaboration.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="modèle-de-collaboration-sur-gitrust"><a class="header" href="#modèle-de-collaboration-sur-gitrust">Modèle de collaboration sur gitrust</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/explanation/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/explanation/securite-utilisateur.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/explanation/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/explanation/securite-utilisateur.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/explanation/securite-utilisateur.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Sécurité côté utilisateur - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/explanation/securite-utilisateur.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="sécurité-côté-utilisateur"><a class="header" href="#sécurité-côté-utilisateur">Sécurité côté utilisateur</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/explanation/modele-collaboration.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/explanation/cycle-vie-pull-request.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/explanation/modele-collaboration.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/explanation/cycle-vie-pull-request.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/how-to/configurer-2fa.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Configurer la double authentification (2FA) - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/configurer-2fa.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="configurer-la-double-authentification-2fa"><a class="header" href="#configurer-la-double-authentification-2fa">Configurer la double authentification (2FA)</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/how-to/gerer-cles-ssh.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/how-to/creer-personal-access-token.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/how-to/gerer-cles-ssh.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/how-to/creer-personal-access-token.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/how-to/consulter-sbom.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Consulter le SBOM d'un dépôt - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/consulter-sbom.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="consulter-le-sbom-dun-dépôt"><a class="header" href="#consulter-le-sbom-dun-dépôt">Consulter le SBOM d’un dépôt</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/how-to/importer-depot-externe.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/reference/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/how-to/importer-depot-externe.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/reference/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/how-to/creer-personal-access-token.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Créer un Personal Access Token - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/creer-personal-access-token.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="créer-un-personal-access-token"><a class="header" href="#créer-un-personal-access-token">Créer un Personal Access Token</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/how-to/configurer-2fa.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/how-to/gerer-equipes-permissions.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/how-to/configurer-2fa.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/how-to/gerer-equipes-permissions.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/how-to/fusionner-strategies.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Stratégies de fusion (ff / squash / merge commit) - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/fusionner-strategies.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="stratégies-de-fusion-ff--squash--merge-commit"><a class="header" href="#stratégies-de-fusion-ff--squash--merge-commit">Stratégies de fusion (ff / squash / merge commit)</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/how-to/ouvrir-pull-request.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/how-to/utiliser-labels-issues.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/how-to/ouvrir-pull-request.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/how-to/utiliser-labels-issues.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/how-to/gerer-cles-ssh.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Gérer ses clés SSH - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/gerer-cles-ssh.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="gérer-ses-clés-ssh"><a class="header" href="#gérer-ses-clés-ssh">Gérer ses clés SSH</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/how-to/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/how-to/configurer-2fa.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/how-to/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/how-to/configurer-2fa.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/how-to/gerer-equipes-permissions.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Gérer les équipes et les permissions - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/gerer-equipes-permissions.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="gérer-les-équipes-et-les-permissions"><a class="header" href="#gérer-les-équipes-et-les-permissions">Gérer les équipes et les permissions</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/how-to/creer-personal-access-token.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/how-to/ouvrir-pull-request.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/how-to/creer-personal-access-token.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/how-to/ouvrir-pull-request.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/how-to/importer-depot-externe.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Importer un dépôt externe - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/importer-depot-externe.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="importer-un-dépôt-externe"><a class="header" href="#importer-un-dépôt-externe">Importer un dépôt externe</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/how-to/utiliser-labels-issues.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/how-to/consulter-sbom.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/how-to/utiliser-labels-issues.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/how-to/consulter-sbom.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/how-to/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Guides pratiques - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="guides-pratiques"><a class="header" href="#guides-pratiques">Guides pratiques</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/tutorials/04-automatiser-ci.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/how-to/gerer-cles-ssh.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/tutorials/04-automatiser-ci.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/how-to/gerer-cles-ssh.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/how-to/ouvrir-pull-request.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Ouvrir une pull request - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/ouvrir-pull-request.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="ouvrir-une-pull-request"><a class="header" href="#ouvrir-une-pull-request">Ouvrir une pull request</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/how-to/gerer-equipes-permissions.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/how-to/fusionner-strategies.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/how-to/gerer-equipes-permissions.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/how-to/fusionner-strategies.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/how-to/utiliser-labels-issues.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Utiliser les labels et les issues - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/utiliser-labels-issues.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="utiliser-les-labels-et-les-issues"><a class="header" href="#utiliser-les-labels-et-les-issues">Utiliser les labels et les issues</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/how-to/fusionner-strategies.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/how-to/importer-depot-externe.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/how-to/fusionner-strategies.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/how-to/importer-depot-externe.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/index.html
+302
-0
@@ -0,0 +1,302 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Vue d'ensemble - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="manuel-utilisateur"><a class="header" href="#manuel-utilisateur">Manuel utilisateur</a></h1> | |
| 181 | +<p>Ce manuel t’accompagne depuis ta première connexion à une instance gitrust jusqu’à l’autonomie complète : pousser du code, collaborer via les pull requests, gérer les issues et automatiser tes workflows avec la CI intégrée. Tu n’as pas besoin d’administrer ni de comprendre l’architecture interne — ce manuel suppose seulement que tu sais utiliser Git en ligne de commande.</p> | |
| 182 | +<h2 id="parcours-dapprentissage"><a class="header" href="#parcours-dapprentissage">Parcours d’apprentissage</a></h2> | |
| 183 | +<p>Le manuel est structuré comme un <strong>parcours progressif</strong> de 4 tutoriels. Chaque tutoriel te laisse dans un état stable, vérifié, avant de passer au suivant. L’aide fournie recule d’un cran à chaque étape (du copier-coller intégral vers la composition autonome).</p> | |
| 184 | +<pre class="mermaid">graph LR | |
| 185 | + A[Compte créé] --> B[01-premier-pas<br/>20 min] | |
| 186 | + B --> C[02-cloner-pousser<br/>25 min] | |
| 187 | + C --> D[03-collaborer<br/>25 min] | |
| 188 | + D --> E[04-automatiser-ci<br/>20 min] | |
| 189 | + E --> F[Utilisateur autonome] | |
| 190 | +</pre> | |
| 191 | + | |
| 192 | +<blockquote> | |
| 193 | +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, tu dois pouvoir te connecter à gitrust, voir ton dépôt dans l’interface et l’accès SSH configuré. Si ce n’est pas le cas, relis le tutoriel 01.</p> | |
| 194 | +</blockquote> | |
| 195 | +<blockquote> | |
| 196 | +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 03, tu dois avoir poussé au moins un commit sur ta branche via SSH. Si ce n’est pas le cas, relis le tutoriel 02.</p> | |
| 197 | +</blockquote> | |
| 198 | +<blockquote> | |
| 199 | +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 04, tu dois avoir ouvert et mergé une pull request. Si ce n’est pas le cas, relis le tutoriel 03.</p> | |
| 200 | +</blockquote> | |
| 201 | +<hr> | |
| 202 | +<h2 id="tutoriels--apprendre-en-faisant"><a class="header" href="#tutoriels--apprendre-en-faisant">Tutoriels — apprendre en faisant</a></h2> | |
| 203 | +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suis-les dans l’ordre — chacun suppose le précédent complété.</p> | |
| 204 | +<ul> | |
| 205 | +<li><a href="tutorials/01-premier-pas.html">01 — Premiers pas : 2FA, clé SSH, premier dépôt</a> — ~20 min</li> | |
| 206 | +<li><a href="tutorials/02-cloner-pousser.html">02 — Cloner et pousser du code</a> — ~25 min</li> | |
| 207 | +<li><a href="tutorials/03-collaborer.html">03 — Collaborer : équipes, issues, pull requests</a> — ~25 min</li> | |
| 208 | +<li><a href="tutorials/04-automatiser-ci.html">04 — Automatiser avec la CI</a> — ~20 min</li> | |
| 209 | +</ul> | |
| 210 | +<hr> | |
| 211 | +<h2 id="how-to--recettes-pour-les-tâches-courantes"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes">How-to — recettes pour les tâches courantes</a></h2> | |
| 212 | +<p>Les how-to répondent à « comment faire X » sans explication de fond. Tu peux les consulter dans n’importe quel ordre selon ton besoin immédiat.</p> | |
| 213 | +<p>Ces guides supposent que tu as suivi le parcours tutoriels. Ils ne répètent pas les étapes de base.</p> | |
| 214 | +<ul> | |
| 215 | +<li><a href="how-to/gerer-cles-ssh.html">Gérer ses clés SSH</a></li> | |
| 216 | +<li><a href="how-to/configurer-2fa.html">Configurer la 2FA</a></li> | |
| 217 | +<li><a href="how-to/creer-personal-access-token.html">Créer un Personal Access Token</a></li> | |
| 218 | +<li><a href="how-to/gerer-equipes-permissions.html">Gérer les équipes et permissions</a></li> | |
| 219 | +<li><a href="how-to/ouvrir-pull-request.html">Ouvrir une pull request</a></li> | |
| 220 | +<li><a href="how-to/fusionner-strategies.html">Fusionner : fast-forward, squash, merge commit</a></li> | |
| 221 | +<li><a href="how-to/utiliser-labels-issues.html">Utiliser les labels hiérarchiques</a></li> | |
| 222 | +<li><a href="how-to/importer-depot-externe.html">Importer un dépôt externe</a></li> | |
| 223 | +<li><a href="how-to/consulter-sbom.html">Consulter le SBOM de ton projet</a></li> | |
| 224 | +</ul> | |
| 225 | +<hr> | |
| 226 | +<h2 id="référence--informations-techniques-exactes"><a class="header" href="#référence--informations-techniques-exactes">Référence — informations techniques exactes</a></h2> | |
| 227 | +<p>La référence est destinée à la consultation ponctuelle, pas à la lecture linéaire. Elle documente les formats, schémas et comportements exacts.</p> | |
| 228 | +<ul> | |
| 229 | +<li><a href="reference/modele-permissions.html">Modèle de permissions (4 rôles)</a></li> | |
| 230 | +<li><a href="reference/api-rest-v1.html">API REST v1 — authentification, pagination, codes d’erreur</a></li> | |
| 231 | +<li><a href="reference/gitrust-ci-yml-schema.html">Schéma YAML <code>.gitrust-ci.yml</code> (Easy Mode)</a></li> | |
| 232 | +<li><a href="reference/markdown-et-syntaxe.html">Syntaxe Markdown supportée</a></li> | |
| 233 | +<li><a href="reference/notifications.html">Notifications : SSE, e-mail, préférences</a></li> | |
| 234 | +</ul> | |
| 235 | +<hr> | |
| 236 | +<h2 id="explication--comprendre-le-pourquoi"><a class="header" href="#explication--comprendre-le-pourquoi">Explication — comprendre le pourquoi</a></h2> | |
| 237 | +<p>Les explanations t’aident à construire des modèles mentaux durables. Lis-les quand tu veux comprendre <em>pourquoi</em> gitrust fonctionne ainsi, pas seulement <em>comment</em>.</p> | |
| 238 | +<ul> | |
| 239 | +<li><a href="explanation/modele-collaboration.html">Modèle de collaboration gitrust</a></li> | |
| 240 | +<li><a href="explanation/securite-utilisateur.html">Sécurité utilisateur : 2FA, PAT, audit log</a></li> | |
| 241 | +<li><a href="explanation/cycle-vie-pull-request.html">Cycle de vie d’une pull request</a></li> | |
| 242 | +</ul> | |
| 243 | + | |
| 244 | + </main> | |
| 245 | + | |
| 246 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 247 | + <!-- Mobile navigation buttons --> | |
| 248 | + <a rel="prev" href="../introduction.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 249 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 250 | + </a> | |
| 251 | + | |
| 252 | + <a rel="next prefetch" href="../user_manual/tutorials/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 253 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 254 | + </a> | |
| 255 | + | |
| 256 | + <div style="clear: both"></div> | |
| 257 | + </nav> | |
| 258 | + </div> | |
| 259 | + </div> | |
| 260 | + | |
| 261 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 262 | + <a rel="prev" href="../introduction.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 263 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 264 | + </a> | |
| 265 | + | |
| 266 | + <a rel="next prefetch" href="../user_manual/tutorials/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 267 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 268 | + </a> | |
| 269 | + </nav> | |
| 270 | + | |
| 271 | + </div> | |
| 272 | + | |
| 273 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 274 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 275 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 276 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 277 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + <script> | |
| 282 | + window.playground_copyable = true; | |
| 283 | + </script> | |
| 284 | + | |
| 285 | + | |
| 286 | + <script src="../elasticlunr-ef4e11c1.min.js"></script> | |
| 287 | + <script src="../mark-09e88c2c.min.js"></script> | |
| 288 | + <script src="../searcher-c2a407aa.js"></script> | |
| 289 | + | |
| 290 | + <script src="../clipboard-1626706a.min.js"></script> | |
| 291 | + <script src="../highlight-abc7f01d.js"></script> | |
| 292 | + <script src="../book-a0b12cfe.js"></script> | |
| 293 | + | |
| 294 | + <!-- Custom JS scripts --> | |
| 295 | + <script src="../theme/mermaid-eefea253.min.js"></script> | |
| 296 | + <script src="../theme/mermaid-init-ccf746f1.js"></script> | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + </div> | |
| 301 | + </body> | |
| 302 | +</html> |
A
book/user_manual/reference/api-rest-v1.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>API REST v1 - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/api-rest-v1.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="api-rest-v1"><a class="header" href="#api-rest-v1">API REST v1</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/reference/modele-permissions.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/reference/gitrust-ci-yml-schema.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/reference/modele-permissions.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/reference/gitrust-ci-yml-schema.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/reference/gitrust-ci-yml-schema.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Schéma du fichier .gitrust-ci.yml - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/gitrust-ci-yml-schema.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="schéma-du-fichier-gitrust-ciyml"><a class="header" href="#schéma-du-fichier-gitrust-ciyml">Schéma du fichier .gitrust-ci.yml</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/reference/api-rest-v1.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/reference/markdown-et-syntaxe.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/reference/api-rest-v1.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/reference/markdown-et-syntaxe.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/reference/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Référence - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="référence"><a class="header" href="#référence">Référence</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/how-to/consulter-sbom.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/reference/modele-permissions.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/how-to/consulter-sbom.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/reference/modele-permissions.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/reference/markdown-et-syntaxe.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Markdown et syntaxe supportée - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/markdown-et-syntaxe.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="markdown-et-syntaxe-supportée"><a class="header" href="#markdown-et-syntaxe-supportée">Markdown et syntaxe supportée</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/reference/gitrust-ci-yml-schema.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/reference/notifications.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/reference/gitrust-ci-yml-schema.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/reference/notifications.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/reference/modele-permissions.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Modèle de permissions (4 rôles) - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/modele-permissions.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="modèle-de-permissions-4-rôles"><a class="header" href="#modèle-de-permissions-4-rôles">Modèle de permissions (4 rôles)</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/reference/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/reference/api-rest-v1.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/reference/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/reference/api-rest-v1.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/reference/notifications.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Notifications - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/notifications.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="notifications"><a class="header" href="#notifications">Notifications</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/reference/markdown-et-syntaxe.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/explanation/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/reference/markdown-et-syntaxe.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/explanation/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/tutorials/01-premier-pas.html
+374
-0
@@ -0,0 +1,374 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>01 — Premier pas sur gitrust - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/tutorials/01-premier-pas.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt"><a class="header" href="#premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt">Premiers pas : active la 2FA, ajoute ta clé SSH et crée ton premier dépôt</a></h1> | |
| 181 | +<h2 id="objectifs"><a class="header" href="#objectifs">Objectifs</a></h2> | |
| 182 | +<p>À la fin de ce tutoriel, tu sauras :</p> | |
| 183 | +<ul> | |
| 184 | +<li><strong>O1. Activer</strong> l’authentification à deux facteurs (2FA) sur ton compte gitrust</li> | |
| 185 | +<li><strong>O2. Enregistrer</strong> une clé SSH publique dans ton profil pour te connecter sans mot de passe</li> | |
| 186 | +<li><strong>O3. Créer</strong> un dépôt vide et vérifier qu’il est accessible à l’URL attendue</li> | |
| 187 | +</ul> | |
| 188 | +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2> | |
| 189 | +<ul> | |
| 190 | +<li><strong>Technique</strong> : un compte gitrust existant (e-mail + mot de passe), Git installé (<code>git --version</code> répond), une paire de clés SSH générée ou à générer (<code>ssh-keygen</code>)</li> | |
| 191 | +<li><strong>Pédagogique</strong> : aucun tutoriel préalable requis — c’est le point de départ du parcours</li> | |
| 192 | +<li><strong>Temps estimé</strong> : ~20 minutes</li> | |
| 193 | +</ul> | |
| 194 | +<h2 id="vue-densemble"><a class="header" href="#vue-densemble">Vue d’ensemble</a></h2> | |
| 195 | +<p>Avant de taper la première commande, prenons 2 minutes pour comprendre ce que tu vas faire et pourquoi.</p> | |
| 196 | +<p><strong>Un dépôt</strong> (<em>repository</em>), c’est comme un dossier de projet avec tout l’historique de ses modifications — une boîte d’archives vivante que Git surveille. Sur gitrust, ce dossier vit sur le serveur et peut être partagé avec ton équipe.</p> | |
| 197 | +<p><strong>Une clé SSH</strong> fonctionne comme une serrure et une clé : tu gardes la clé privée sur ta machine (ne la partage jamais), et tu déposes la clé publique dans ton profil gitrust. Ensuite, Git se connecte automatiquement sans te redemander de mot de passe — gitrust reconnaît ta machine.</p> | |
| 198 | +<p><strong>La 2FA</strong> (authentification à deux facteurs) ajoute un second verrou à ton compte : même si quelqu’un vole ton mot de passe, il ne peut pas se connecter sans le code de ton téléphone. C’est une protection essentielle pour tout compte qui héberge du code.</p> | |
| 199 | +<p>Voici le flux que tu vas configurer :</p> | |
| 200 | +<pre class="mermaid">sequenceDiagram | |
| 201 | + participant T as Ton navigateur | |
| 202 | + participant G as gitrust (HTTPS :4000) | |
| 203 | + participant S as Ton terminal (SSH :2222) | |
| 204 | + | |
| 205 | + T->>G: Connexion avec e-mail + mdp + code 2FA | |
| 206 | + T->>G: Dépôt de la clé SSH publique | |
| 207 | + S->>G: git push via SSH (authentifié par clé) | |
| 208 | + G-->>T: Dépôt visible dans l'interface web | |
| 209 | +</pre> | |
| 210 | + | |
| 211 | +<hr> | |
| 212 | +<h2 id="étape-1--connecte-toi-et-accède-aux-paramètres-de-sécurité"><a class="header" href="#étape-1--connecte-toi-et-accède-aux-paramètres-de-sécurité">Étape 1 : Connecte-toi et accède aux paramètres de sécurité</a></h2> | |
| 213 | +<p>Ouvre ton navigateur et va sur l’URL de ton instance gitrust (par exemple <code>https://demo.gitrust.eu</code>). Connecte-toi avec ton e-mail et ton mot de passe.</p> | |
| 214 | +<p>Une fois connecté, clique sur ton avatar en haut à droite, puis sur <strong>Paramètres</strong> (<code>/settings</code>). Dans le menu de gauche, sélectionne <strong>Sécurité</strong>.</p> | |
| 215 | +<p><strong>Checkpoint</strong> : tu dois voir la page <em>Sécurité</em> avec une section « Authentification à deux facteurs » et le statut « Désactivée ». Si tu ne la vois pas, vérifie que tu es bien connecté avec le bon compte.</p> | |
| 216 | +<hr> | |
| 217 | +<h2 id="étape-2--active-la-2fa-avec-une-application-dauthentification"><a class="header" href="#étape-2--active-la-2fa-avec-une-application-dauthentification">Étape 2 : Active la 2FA avec une application d’authentification</a></h2> | |
| 218 | +<p>Sur la page <em>Sécurité</em>, clique sur <strong>Activer la 2FA</strong>. gitrust affiche un QR code.</p> | |
| 219 | +<ol> | |
| 220 | +<li>Ouvre ton application d’authentification (Google Authenticator, Authy, ou tout équivalent compatible TOTP).</li> | |
| 221 | +<li>Scanne le QR code avec l’application.</li> | |
| 222 | +<li>L’application affiche un code à 6 chiffres qui change toutes les 30 secondes.</li> | |
| 223 | +<li>Saisis ce code dans le champ <strong>Code de vérification</strong> et clique <strong>Confirmer</strong>.</li> | |
| 224 | +</ol> | |
| 225 | +<p>Sortie attendue (message dans l’interface) :</p> | |
| 226 | +<pre><code>La 2FA a été activée avec succès. | |
| 227 | +Conservez vos codes de secours dans un endroit sûr. | |
| 228 | +</code></pre> | |
| 229 | +<p>gitrust affiche également <strong>10 codes de secours</strong> (format <code>XXXX-XXXX</code>). Copie-les et conserve-les hors ligne — ils te permettent de récupérer l’accès si tu perds ton téléphone.</p> | |
| 230 | +<p><strong>Checkpoint</strong> : retourne sur <em>Paramètres → Sécurité</em>. La section 2FA doit maintenant afficher « <strong>Activée</strong> » en vert. Si elle affiche toujours « Désactivée », recommence l’étape en t’assurant que le code à 6 chiffres est saisi avant qu’il expire.</p> | |
| 231 | +<hr> | |
| 232 | +<h2 id="étape-3--génère-ou-localise-ta-clé-ssh"><a class="header" href="#étape-3--génère-ou-localise-ta-clé-ssh">Étape 3 : Génère ou localise ta clé SSH</a></h2> | |
| 233 | +<p>Si tu n’as pas encore de paire de clés SSH, génère-en une maintenant dans ton terminal :</p> | |
| 234 | +<pre><code class="language-bash">ssh-keygen -t ed25519 -C "mon-compte@example.com" | |
| 235 | +</code></pre> | |
| 236 | +<p>Sortie attendue :</p> | |
| 237 | +<pre><code>Generating public/private ed25519 key pair. | |
| 238 | +Enter file in which to save the key (/home/toi/.ssh/id_ed25519): | |
| 239 | +Enter passphrase (empty for no passphrase): | |
| 240 | +Enter same passphrase again: | |
| 241 | +Your identification has been saved in /home/toi/.ssh/id_ed25519 | |
| 242 | +Your public key has been saved in /home/toi/.ssh/id_ed25519.pub | |
| 243 | +The key fingerprint is: | |
| 244 | +SHA256:xXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx mon-compte@example.com | |
| 245 | +</code></pre> | |
| 246 | +<p>Appuie sur Entrée pour accepter le chemin par défaut. Tu peux choisir une passphrase ou laisser vide (appuie deux fois sur Entrée). Une passphrase ajoute une couche de sécurité.</p> | |
| 247 | +<p>Affiche maintenant ta <strong>clé publique</strong> (le fichier <code>.pub</code> — celui-ci est fait pour être partagé) :</p> | |
| 248 | +<pre><code class="language-bash">cat ~/.ssh/id_ed25519.pub | |
| 249 | +</code></pre> | |
| 250 | +<p>Sortie attendue (une seule ligne) :</p> | |
| 251 | +<pre><code>ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mon-compte@example.com | |
| 252 | +</code></pre> | |
| 253 | +<p>Copie cette ligne entière dans le presse-papier.</p> | |
| 254 | +<p><strong>Checkpoint</strong> : la commande <code>cat</code> doit afficher une ligne commençant par <code>ssh-ed25519</code> (ou <code>ssh-rsa</code> si tu as une clé plus ancienne). Si elle affiche « No such file or directory », la génération n’a pas abouti — relance <code>ssh-keygen</code>.</p> | |
| 255 | +<hr> | |
| 256 | +<h2 id="étape-4--enregistre-la-clé-ssh-dans-ton-profil-gitrust"><a class="header" href="#étape-4--enregistre-la-clé-ssh-dans-ton-profil-gitrust">Étape 4 : Enregistre la clé SSH dans ton profil gitrust</a></h2> | |
| 257 | +<p>Dans ton navigateur, retourne sur <em>Paramètres</em> et clique sur <strong>Clés SSH</strong> dans le menu de gauche.</p> | |
| 258 | +<p>Clique sur <strong>Ajouter une clé SSH</strong>. Un formulaire apparaît :</p> | |
| 259 | +<ul> | |
| 260 | +<li><strong>Titre</strong> : donne un nom descriptif à cette clé (ex. <code>laptop-perso-2026</code>, <code>poste-bureau</code>)</li> | |
| 261 | +<li><strong>Clé</strong> : colle la ligne copiée à l’étape précédente</li> | |
| 262 | +</ul> | |
| 263 | +<p>Clique <strong>Enregistrer la clé</strong>.</p> | |
| 264 | +<p>Sortie attendue (message dans l’interface) :</p> | |
| 265 | +<pre><code>Clé SSH ajoutée avec succès. | |
| 266 | +</code></pre> | |
| 267 | +<p>Teste maintenant la connexion SSH depuis ton terminal :</p> | |
| 268 | +<pre><code class="language-bash">ssh -T git@demo.gitrust.eu -p 2222 | |
| 269 | +</code></pre> | |
| 270 | +<p>Sortie attendue :</p> | |
| 271 | +<pre><code>Bonjour tonpseudo ! Vous êtes authentifié, mais gitrust ne fournit pas d'accès shell. | |
| 272 | +</code></pre> | |
| 273 | +<p><strong>Checkpoint</strong> : si tu obtiens ce message, ta clé SSH est correctement enregistrée. Si tu obtiens <code>Permission denied (publickey)</code>, vérifie que tu as bien copié la clé <strong>publique</strong> (<code>.pub</code>) et non la clé privée. Consulte la section « Et si ça ne marche pas » ci-dessous.</p> | |
| 274 | +<hr> | |
| 275 | +<h2 id="étape-5--crée-ton-premier-dépôt-vide"><a class="header" href="#étape-5--crée-ton-premier-dépôt-vide">Étape 5 : Crée ton premier dépôt vide</a></h2> | |
| 276 | +<p>Dans ton navigateur, clique sur le <strong>+</strong> en haut à droite (ou navigue vers <code>/repo/new</code>).</p> | |
| 277 | +<p>Remplis le formulaire :</p> | |
| 278 | +<ul> | |
| 279 | +<li><strong>Propriétaire</strong> : ton pseudo</li> | |
| 280 | +<li><strong>Nom du dépôt</strong> : <code>mon-premier-depot</code> (lettres, chiffres, tirets uniquement)</li> | |
| 281 | +<li><strong>Visibilité</strong> : Privé (ou Public selon ta préférence)</li> | |
| 282 | +<li><strong>Initialiser le dépôt</strong> : coche « Ajouter un README »</li> | |
| 283 | +</ul> | |
| 284 | +<p>Clique sur <strong>Créer le dépôt</strong>.</p> | |
| 285 | +<p>Sortie attendue : gitrust te redirige vers la page du dépôt à l’URL :</p> | |
| 286 | +<pre><code>https://demo.gitrust.eu/tonpseudo/mon-premier-depot | |
| 287 | +</code></pre> | |
| 288 | +<p>La page affiche un fichier <code>README.md</code> avec le nom du dépôt, et la barre latérale montre 1 commit, 1 branche (<code>main</code>).</p> | |
| 289 | +<p><strong>Checkpoint</strong> : note l’URL affichée dans la barre d’adresse de ton navigateur. Elle doit correspondre au patron <code>https://<instance>/<pseudo>/<nom-depot></code>. Si tu vois une erreur 404 ou 500, relis le formulaire de création.</p> | |
| 290 | +<hr> | |
| 291 | +<h2 id="récapitulatif"><a class="header" href="#récapitulatif">Récapitulatif</a></h2> | |
| 292 | +<ul> | |
| 293 | +<li>✓ <strong>O1 accompli</strong> : la 2FA est activée sur ton compte — tu l’as vérifiée sur la page <em>Sécurité</em> qui affiche « Activée »</li> | |
| 294 | +<li>✓ <strong>O2 accompli</strong> : ta clé SSH publique est enregistrée — tu l’as confirmée avec <code>ssh -T git@... -p 2222</code> qui a répondu « Vous êtes authentifié »</li> | |
| 295 | +<li>✓ <strong>O3 accompli</strong> : ton premier dépôt est créé et visible à l’URL <code>/<pseudo>/mon-premier-depot</code></li> | |
| 296 | +</ul> | |
| 297 | +<hr> | |
| 298 | +<h2 id="et-si-ça-ne-marche-pas"><a class="header" href="#et-si-ça-ne-marche-pas">Et si ça ne marche pas</a></h2> | |
| 299 | +<div class="table-wrapper"> | |
| 300 | +<table> | |
| 301 | +<thead> | |
| 302 | +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr> | |
| 303 | +</thead> | |
| 304 | +<tbody> | |
| 305 | +<tr><td><code>Permission denied (publickey)</code> lors du test SSH</td><td>Tu as collé la clé privée au lieu de la clé publique, ou le fichier <code>.pub</code> ne correspond pas à la clé active</td><td>Dans gitrust, supprime la clé ajoutée. Retourne au terminal et exécute <code>ssh-add -l</code> pour voir les clés actives. Recopie la bonne clé <code>.pub</code> avec <code>cat ~/.ssh/id_ed25519.pub</code></td></tr> | |
| 306 | +<tr><td><code>Connection refused</code> lors du test SSH</td><td>Le port SSH de l’instance est différent de 2222, ou l’instance est inaccessible</td><td>Vérifie avec l’administrateur le port SSH réel. Essaie <code>ssh -T git@<instance> -p 22</code> en alternative</td></tr> | |
| 307 | +<tr><td>Le code 2FA est refusé alors qu’il semble correct</td><td>L’horloge de ton téléphone est désynchronisée (décalage > 30 s)</td><td>Active la synchronisation automatique de l’heure sur ton téléphone (<em>Paramètres → Date et heure → Automatique</em>). Réessaie immédiatement après</td></tr> | |
| 308 | +<tr><td>Le dépôt redirige vers une erreur 422 lors de la création</td><td>Le nom contient des caractères interdits (espaces, accents, <code>/</code>)</td><td>Utilise uniquement des lettres non accentuées, chiffres et tirets. Évite les points en début ou fin de nom</td></tr> | |
| 309 | +</tbody> | |
| 310 | +</table> | |
| 311 | +</div> | |
| 312 | +<hr> | |
| 313 | +<h2 id="prochaine-étape"><a class="header" href="#prochaine-étape">Prochaine étape</a></h2> | |
| 314 | +<p>→ <a href="02-cloner-pousser.html">02 — Cloner et pousser du code</a> : clone ton dépôt en local avec SSH, fais ton premier commit et pousse-le sur gitrust (~25 min)</p> | |
| 315 | + | |
| 316 | + </main> | |
| 317 | + | |
| 318 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 319 | + <!-- Mobile navigation buttons --> | |
| 320 | + <a rel="prev" href="../../user_manual/tutorials/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 321 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 322 | + </a> | |
| 323 | + | |
| 324 | + <a rel="next prefetch" href="../../user_manual/tutorials/02-cloner-pousser.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 325 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 326 | + </a> | |
| 327 | + | |
| 328 | + <div style="clear: both"></div> | |
| 329 | + </nav> | |
| 330 | + </div> | |
| 331 | + </div> | |
| 332 | + | |
| 333 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 334 | + <a rel="prev" href="../../user_manual/tutorials/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 335 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 336 | + </a> | |
| 337 | + | |
| 338 | + <a rel="next prefetch" href="../../user_manual/tutorials/02-cloner-pousser.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 339 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 340 | + </a> | |
| 341 | + </nav> | |
| 342 | + | |
| 343 | + </div> | |
| 344 | + | |
| 345 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 346 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 347 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 348 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 349 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + <script> | |
| 354 | + window.playground_copyable = true; | |
| 355 | + </script> | |
| 356 | + | |
| 357 | + | |
| 358 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 359 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 360 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 361 | + | |
| 362 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 363 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 364 | + <script src="../../book-a0b12cfe.js"></script> | |
| 365 | + | |
| 366 | + <!-- Custom JS scripts --> | |
| 367 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 368 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + </div> | |
| 373 | + </body> | |
| 374 | +</html> |
A
book/user_manual/tutorials/02-cloner-pousser.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>02 — Cloner et pousser du code - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/tutorials/02-cloner-pousser.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="02--cloner-et-pousser-du-code"><a class="header" href="#02--cloner-et-pousser-du-code">02 — Cloner et pousser du code</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/tutorials/01-premier-pas.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/tutorials/03-collaborer.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/tutorials/01-premier-pas.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/tutorials/03-collaborer.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/tutorials/03-collaborer.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>03 — Collaborer : équipes, issues, pull requests - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/tutorials/03-collaborer.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="03--collaborer--équipes-issues-pull-requests"><a class="header" href="#03--collaborer--équipes-issues-pull-requests">03 — Collaborer : équipes, issues, pull requests</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/tutorials/02-cloner-pousser.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/tutorials/04-automatiser-ci.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/tutorials/02-cloner-pousser.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/tutorials/04-automatiser-ci.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/tutorials/04-automatiser-ci.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>04 — Automatiser avec la CI - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/tutorials/04-automatiser-ci.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="04--automatiser-avec-la-ci"><a class="header" href="#04--automatiser-avec-la-ci">04 — Automatiser avec la CI</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/tutorials/03-collaborer.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/how-to/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/tutorials/03-collaborer.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/how-to/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
book/user_manual/tutorials/index.html
+250
-0
@@ -0,0 +1,250 @@
| 1 | +<!DOCTYPE HTML> | |
| 2 | +<html lang="fr" class="light sidebar-visible" dir="ltr"> | |
| 3 | + <head> | |
| 4 | + <!-- Book generated using mdBook --> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>Tutoriels - Documentation gitrust</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + <!-- Custom HTML head --> | |
| 10 | + | |
| 11 | + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"> | |
| 12 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 13 | + <meta name="theme-color" content="#ffffff"> | |
| 14 | + | |
| 15 | + <link rel="icon" href="../../favicon-de23e50b.svg"> | |
| 16 | + <link rel="shortcut icon" href="../../favicon-8114d1fc.png"> | |
| 17 | + <link rel="stylesheet" href="../../css/variables-8adf115d.css"> | |
| 18 | + <link rel="stylesheet" href="../../css/general-2459343d.css"> | |
| 19 | + <link rel="stylesheet" href="../../css/chrome-ae938929.css"> | |
| 20 | + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print"> | |
| 21 | + | |
| 22 | + <!-- Fonts --> | |
| 23 | + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css"> | |
| 24 | + | |
| 25 | + <!-- Highlight.js Stylesheets --> | |
| 26 | + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css"> | |
| 27 | + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css"> | |
| 28 | + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css"> | |
| 29 | + | |
| 30 | + <!-- Custom theme stylesheets --> | |
| 31 | + | |
| 32 | + | |
| 33 | + <!-- Provide site root and default themes to javascript --> | |
| 34 | + <script> | |
| 35 | + const path_to_root = "../../"; | |
| 36 | + const default_light_theme = "light"; | |
| 37 | + const default_dark_theme = "navy"; | |
| 38 | + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js"; | |
| 39 | + </script> | |
| 40 | + <!-- Start loading toc.js asap --> | |
| 41 | + <script src="../../toc-84dd2703.js"></script> | |
| 42 | + </head> | |
| 43 | + <body> | |
| 44 | + <div id="mdbook-help-container"> | |
| 45 | + <div id="mdbook-help-popup"> | |
| 46 | + <h2 class="mdbook-help-title">Keyboard shortcuts</h2> | |
| 47 | + <div> | |
| 48 | + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p> | |
| 49 | + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p> | |
| 50 | + <p>Press <kbd>?</kbd> to show this help</p> | |
| 51 | + <p>Press <kbd>Esc</kbd> to hide this help</p> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div id="mdbook-body-container"> | |
| 56 | + <!-- Work around some values being stored in localStorage wrapped in quotes --> | |
| 57 | + <script> | |
| 58 | + try { | |
| 59 | + let theme = localStorage.getItem('mdbook-theme'); | |
| 60 | + let sidebar = localStorage.getItem('mdbook-sidebar'); | |
| 61 | + | |
| 62 | + if (theme.startsWith('"') && theme.endsWith('"')) { | |
| 63 | + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { | |
| 67 | + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); | |
| 68 | + } | |
| 69 | + } catch (e) { } | |
| 70 | + </script> | |
| 71 | + | |
| 72 | + <!-- Set the theme before any content is loaded, prevents flash --> | |
| 73 | + <script> | |
| 74 | + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme; | |
| 75 | + let theme; | |
| 76 | + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } | |
| 77 | + if (theme === null || theme === undefined) { theme = default_theme; } | |
| 78 | + const html = document.documentElement; | |
| 79 | + html.classList.remove('light') | |
| 80 | + html.classList.add(theme); | |
| 81 | + html.classList.add("js"); | |
| 82 | + </script> | |
| 83 | + | |
| 84 | + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden"> | |
| 85 | + | |
| 86 | + <!-- Hide / unhide sidebar before it is displayed --> | |
| 87 | + <script> | |
| 88 | + let sidebar = null; | |
| 89 | + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor"); | |
| 90 | + if (document.body.clientWidth >= 1080) { | |
| 91 | + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } | |
| 92 | + sidebar = sidebar || 'visible'; | |
| 93 | + } else { | |
| 94 | + sidebar = 'hidden'; | |
| 95 | + sidebar_toggle.checked = false; | |
| 96 | + } | |
| 97 | + if (sidebar === 'visible') { | |
| 98 | + sidebar_toggle.checked = true; | |
| 99 | + } else { | |
| 100 | + html.classList.remove('sidebar-visible'); | |
| 101 | + } | |
| 102 | + </script> | |
| 103 | + | |
| 104 | + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents"> | |
| 105 | + <!-- populated by js --> | |
| 106 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> | |
| 107 | + <noscript> | |
| 108 | + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe> | |
| 109 | + </noscript> | |
| 110 | + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle"> | |
| 111 | + <div class="sidebar-resize-indicator"></div> | |
| 112 | + </div> | |
| 113 | + </nav> | |
| 114 | + | |
| 115 | + <div id="mdbook-page-wrapper" class="page-wrapper"> | |
| 116 | + | |
| 117 | + <div class="page"> | |
| 118 | + <div id="mdbook-menu-bar-hover-placeholder"></div> | |
| 119 | + <div id="mdbook-menu-bar" class="menu-bar sticky"> | |
| 120 | + <div class="left-buttons"> | |
| 121 | + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar"> | |
| 122 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span> | |
| 123 | + </label> | |
| 124 | + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list"> | |
| 125 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span> | |
| 126 | + </button> | |
| 127 | + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu"> | |
| 128 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li> | |
| 129 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li> | |
| 130 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li> | |
| 131 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li> | |
| 132 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li> | |
| 133 | + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li> | |
| 134 | + </ul> | |
| 135 | + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar"> | |
| 136 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span> | |
| 137 | + </button> | |
| 138 | + </div> | |
| 139 | + | |
| 140 | + <h1 class="menu-title">Documentation gitrust</h1> | |
| 141 | + | |
| 142 | + <div class="right-buttons"> | |
| 143 | + <a href="../../print.html" title="Print this book" aria-label="Print this book"> | |
| 144 | + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span> | |
| 145 | + </a> | |
| 146 | + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/tutorials/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit"> | |
| 147 | + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span> | |
| 148 | + </a> | |
| 149 | + | |
| 150 | + </div> | |
| 151 | + </div> | |
| 152 | + | |
| 153 | + <div id="mdbook-search-wrapper" class="hidden"> | |
| 154 | + <form id="mdbook-searchbar-outer" class="searchbar-outer"> | |
| 155 | + <div class="search-wrapper"> | |
| 156 | + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header"> | |
| 157 | + <div class="spinner-wrapper"> | |
| 158 | + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span> | |
| 159 | + </div> | |
| 160 | + </div> | |
| 161 | + </form> | |
| 162 | + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden"> | |
| 163 | + <div id="mdbook-searchresults-header" class="searchresults-header"></div> | |
| 164 | + <ul id="mdbook-searchresults"> | |
| 165 | + </ul> | |
| 166 | + </div> | |
| 167 | + </div> | |
| 168 | + | |
| 169 | + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> | |
| 170 | + <script> | |
| 171 | + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); | |
| 172 | + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); | |
| 173 | + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) { | |
| 174 | + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); | |
| 175 | + }); | |
| 176 | + </script> | |
| 177 | + | |
| 178 | + <div id="mdbook-content" class="content"> | |
| 179 | + <main> | |
| 180 | + <h1 id="tutoriels"><a class="header" href="#tutoriels">Tutoriels</a></h1> | |
| 181 | +<blockquote> | |
| 182 | +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p> | |
| 183 | +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p> | |
| 184 | +</blockquote> | |
| 185 | +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2> | |
| 186 | +<ul> | |
| 187 | +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li> | |
| 188 | +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li> | |
| 189 | +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li> | |
| 190 | +</ul> | |
| 191 | + | |
| 192 | + </main> | |
| 193 | + | |
| 194 | + <nav class="nav-wrapper" aria-label="Page navigation"> | |
| 195 | + <!-- Mobile navigation buttons --> | |
| 196 | + <a rel="prev" href="../../user_manual/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 197 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 198 | + </a> | |
| 199 | + | |
| 200 | + <a rel="next prefetch" href="../../user_manual/tutorials/01-premier-pas.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 201 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 202 | + </a> | |
| 203 | + | |
| 204 | + <div style="clear: both"></div> | |
| 205 | + </nav> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + | |
| 209 | + <nav class="nav-wide-wrapper" aria-label="Page navigation"> | |
| 210 | + <a rel="prev" href="../../user_manual/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> | |
| 211 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span> | |
| 212 | + </a> | |
| 213 | + | |
| 214 | + <a rel="next prefetch" href="../../user_manual/tutorials/01-premier-pas.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> | |
| 215 | + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span> | |
| 216 | + </a> | |
| 217 | + </nav> | |
| 218 | + | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template> | |
| 222 | + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template> | |
| 223 | + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template> | |
| 224 | + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template> | |
| 225 | + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template> | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + <script> | |
| 230 | + window.playground_copyable = true; | |
| 231 | + </script> | |
| 232 | + | |
| 233 | + | |
| 234 | + <script src="../../elasticlunr-ef4e11c1.min.js"></script> | |
| 235 | + <script src="../../mark-09e88c2c.min.js"></script> | |
| 236 | + <script src="../../searcher-c2a407aa.js"></script> | |
| 237 | + | |
| 238 | + <script src="../../clipboard-1626706a.min.js"></script> | |
| 239 | + <script src="../../highlight-abc7f01d.js"></script> | |
| 240 | + <script src="../../book-a0b12cfe.js"></script> | |
| 241 | + | |
| 242 | + <!-- Custom JS scripts --> | |
| 243 | + <script src="../../theme/mermaid-eefea253.min.js"></script> | |
| 244 | + <script src="../../theme/mermaid-init-ccf746f1.js"></script> | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + </div> | |
| 249 | + </body> | |
| 250 | +</html> |
A
developer_manual/explanation/2fa-fonctionnement.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Fonctionnement du 2FA | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/explanation/ci-dagger-easy-vs-power.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# CI Dagger : Easy Mode vs Power Mode | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/explanation/decisions-ui-htmx.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Décisions UI (HTMX, DaisyUI) | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/explanation/flux-requetes.md
+274
-0
@@ -0,0 +1,274 @@
| 1 | +# Flux de requêtes | |
| 2 | + | |
| 3 | +Diagrammes de séquence couvrant les opérations principales de gitrust : création de dépôt, clone et push SSH, enregistrement de clé SSH, résolution des permissions, navigation web, inscription utilisateur. | |
| 4 | + | |
| 5 | +## 1. Création d'un dépôt (Web) | |
| 6 | + | |
| 7 | +```mermaid | |
| 8 | +sequenceDiagram | |
| 9 | + actor User as Utilisateur | |
| 10 | + participant Web as gitrust-web | |
| 11 | + participant RepoSvc as RepositoryService | |
| 12 | + participant ResSvc as ResourceService | |
| 13 | + participant DB as PostgreSQL | |
| 14 | + participant Git as gitrust-git | |
| 15 | + participant FS as Système de fichiers | |
| 16 | + | |
| 17 | + User->>Web: POST /new {name, description} | |
| 18 | + Web->>Web: Extraire user_id (session JWT) | |
| 19 | + | |
| 20 | + Web->>RepoSvc: create(db, owner_id, username, base_path, input) | |
| 21 | + RepoSvc->>RepoSvc: RepoSlug::from_name(input.name) | |
| 22 | + RepoSvc->>DB: SELECT ... WHERE owner_id AND slug | |
| 23 | + DB-->>RepoSvc: None (pas de doublon) | |
| 24 | + | |
| 25 | + RepoSvc->>RepoSvc: compute_disk_path(base, owner, slug) | |
| 26 | + Note over RepoSvc: Validation anti path-traversal | |
| 27 | + | |
| 28 | + RepoSvc->>ResSvc: register(db, "repository", repo_id, owner_id) | |
| 29 | + ResSvc->>DB: INSERT INTO resources | |
| 30 | + DB-->>ResSvc: Ok | |
| 31 | + | |
| 32 | + RepoSvc->>DB: INSERT INTO repositories | |
| 33 | + DB-->>RepoSvc: repository::Model | |
| 34 | + | |
| 35 | + RepoSvc-->>Web: RepositoryOutput | |
| 36 | + | |
| 37 | + Web->>Git: BareRepo::init(disk_path) | |
| 38 | + Git->>FS: git init --bare | |
| 39 | + FS-->>Git: Ok | |
| 40 | + Git-->>Web: Ok | |
| 41 | + | |
| 42 | + Web-->>User: 302 Redirect /{owner}/{slug} | |
| 43 | +``` | |
| 44 | + | |
| 45 | +## 2. Clone SSH (git clone) | |
| 46 | + | |
| 47 | +```mermaid | |
| 48 | +sequenceDiagram | |
| 49 | + actor Dev as Développeur | |
| 50 | + participant Client as Git CLI | |
| 51 | + participant SSH as gitrust-ssh | |
| 52 | + participant Auth as SshKeyService | |
| 53 | + participant Access as AccessService | |
| 54 | + participant Git as gitrust-git | |
| 55 | + participant DB as PostgreSQL | |
| 56 | + participant FS as Bare repo (.git) | |
| 57 | + | |
| 58 | + Dev->>Client: git clone ssh://git@host:2222/alice/my-repo.git | |
| 59 | + Client->>SSH: Connexion TCP :2222 | |
| 60 | + SSH-->>Client: Banner SSH + échange clés | |
| 61 | + | |
| 62 | + Client->>SSH: Auth publickey (signature) | |
| 63 | + SSH->>Auth: find_by_fingerprint(db, fingerprint) | |
| 64 | + Auth->>DB: SELECT FROM ssh_keys WHERE fingerprint = ? | |
| 65 | + DB-->>Auth: ssh_key::Model {user_id, ...} | |
| 66 | + Auth-->>SSH: user_id | |
| 67 | + | |
| 68 | + SSH->>Auth: update_last_used(db, key_id) | |
| 69 | + Auth->>DB: UPDATE ssh_keys SET last_used_at = now() | |
| 70 | + | |
| 71 | + SSH-->>Client: Auth OK | |
| 72 | + | |
| 73 | + Client->>SSH: exec "git-upload-pack 'alice/my-repo.git'" | |
| 74 | + SSH->>SSH: CommandHandler::parse("git-upload-pack alice/my-repo.git") | |
| 75 | + Note over SSH: Extraction owner=alice, repo=my-repo | |
| 76 | + | |
| 77 | + SSH->>Access: effective_role(db, user_id, repo_id) | |
| 78 | + Access->>DB: Check ownership + shares + teams | |
| 79 | + DB-->>Access: Role::Developer | |
| 80 | + Access-->>SSH: can_read = true | |
| 81 | + | |
| 82 | + SSH->>Git: pack_protocol::advertise_refs(repo_path) | |
| 83 | + Git->>FS: Lecture refs | |
| 84 | + FS-->>Git: refs/heads/main, ... | |
| 85 | + Git-->>SSH: advertise output | |
| 86 | + | |
| 87 | + SSH-->>Client: refs advertisement | |
| 88 | + Client->>SSH: want/have negotiation | |
| 89 | + | |
| 90 | + SSH->>Git: pack_protocol::serve_pack(repo_path, wants, haves) | |
| 91 | + Git->>FS: Pack objects | |
| 92 | + FS-->>Git: pack data | |
| 93 | + Git-->>SSH: pack stream | |
| 94 | + | |
| 95 | + SSH-->>Client: pack data | |
| 96 | + Client-->>Dev: Dépôt cloné avec succès | |
| 97 | +``` | |
| 98 | + | |
| 99 | +## 3. Push SSH (git push) | |
| 100 | + | |
| 101 | +```mermaid | |
| 102 | +sequenceDiagram | |
| 103 | + actor Dev as Développeur | |
| 104 | + participant Client as Git CLI | |
| 105 | + participant SSH as gitrust-ssh | |
| 106 | + participant Access as AccessService | |
| 107 | + participant Git as gitrust-git | |
| 108 | + participant Hooks as gitrust-hooks | |
| 109 | + participant DB as PostgreSQL | |
| 110 | + participant FS as Bare repo (.git) | |
| 111 | + | |
| 112 | + Note over Client,SSH: Session SSH déjà authentifiée | |
| 113 | + | |
| 114 | + Client->>SSH: exec "git-receive-pack 'alice/my-repo.git'" | |
| 115 | + SSH->>SSH: CommandHandler::parse(...) | |
| 116 | + Note over SSH: Extraction owner=alice, repo=my-repo | |
| 117 | + | |
| 118 | + SSH->>Access: effective_role(db, user_id, repo_id) | |
| 119 | + Access->>DB: Check ownership + shares + teams | |
| 120 | + DB-->>Access: Role::Developer | |
| 121 | + Access-->>SSH: can_push = true | |
| 122 | + | |
| 123 | + SSH->>Git: pack_protocol::advertise_refs(repo_path) | |
| 124 | + Git->>FS: Lecture refs | |
| 125 | + Git-->>SSH: refs advertisement | |
| 126 | + | |
| 127 | + SSH-->>Client: refs | |
| 128 | + Client->>SSH: pack data + commands | |
| 129 | + | |
| 130 | + SSH->>Git: pack_protocol::serve_pack(repo_path, receive-pack) | |
| 131 | + Git->>FS: Écriture objets + update refs | |
| 132 | + FS-->>Git: Ok | |
| 133 | + Git-->>SSH: Ok | |
| 134 | + | |
| 135 | + SSH->>DB: UPDATE repositories SET is_empty = false, updated_at = now() | |
| 136 | + | |
| 137 | + SSH-->>Client: Push OK | |
| 138 | + Client-->>Dev: Push réussi | |
| 139 | +``` | |
| 140 | + | |
| 141 | +## 4. Enregistrement d'une clé SSH | |
| 142 | + | |
| 143 | +```mermaid | |
| 144 | +sequenceDiagram | |
| 145 | + actor User as Utilisateur | |
| 146 | + participant Web as gitrust-web | |
| 147 | + participant Svc as SshKeyService | |
| 148 | + participant DB as PostgreSQL | |
| 149 | + | |
| 150 | + User->>Web: POST /settings/keys {title, key_data} | |
| 151 | + Web->>Web: Extraire user_id (session) | |
| 152 | + | |
| 153 | + Web->>Svc: create(db, user_id, input) | |
| 154 | + | |
| 155 | + Svc->>Svc: parse_public_key(key_data) | |
| 156 | + Note over Svc: Extraire type + décoder base64 | |
| 157 | + | |
| 158 | + Svc->>Svc: validate_key_type_and_size(type, bytes) | |
| 159 | + Note over Svc: ed25519 OK<br/>RSA >= 4096 bits<br/>ecdsa-p256/p384 OK | |
| 160 | + | |
| 161 | + Svc->>Svc: compute_fingerprint(bytes) | |
| 162 | + Note over Svc: SHA256(key_bytes) -> base64-no-pad | |
| 163 | + | |
| 164 | + Svc->>DB: SELECT FROM ssh_keys WHERE fingerprint = ? | |
| 165 | + DB-->>Svc: None (pas de doublon) | |
| 166 | + | |
| 167 | + Svc->>DB: INSERT INTO ssh_keys | |
| 168 | + DB-->>Svc: ssh_key::Model | |
| 169 | + | |
| 170 | + Svc-->>Web: SshKeyOutput | |
| 171 | + Web-->>User: 200 Clé ajoutée (fingerprint affiché) | |
| 172 | +``` | |
| 173 | + | |
| 174 | +## 5. Résolution des permissions (AccessService) | |
| 175 | + | |
| 176 | +```mermaid | |
| 177 | +sequenceDiagram | |
| 178 | + participant Caller as Handler / SSH Session | |
| 179 | + participant AS as AccessService | |
| 180 | + participant RS as ResourceService | |
| 181 | + participant DB as PostgreSQL | |
| 182 | + | |
| 183 | + Caller->>AS: effective_role(db, user_id, repo_id) | |
| 184 | + | |
| 185 | + AS->>RS: effective_permission(db, user_id, "repository", repo_id) | |
| 186 | + RS->>DB: SELECT FROM resources WHERE type AND id | |
| 187 | + DB-->>RS: resource {owner_id, is_public} | |
| 188 | + | |
| 189 | + alt user_id == owner_id | |
| 190 | + RS-->>AS: "owner" | |
| 191 | + else Share exists | |
| 192 | + RS->>DB: SELECT FROM resource_shares WHERE resource AND user | |
| 193 | + DB-->>RS: share {permission_level} | |
| 194 | + RS-->>AS: permission_level | |
| 195 | + else Resource is public | |
| 196 | + RS-->>AS: "read" | |
| 197 | + else No access | |
| 198 | + RS-->>AS: None | |
| 199 | + end | |
| 200 | + | |
| 201 | + AS->>AS: Role::from_permission(individual_level) | |
| 202 | + | |
| 203 | + AS->>DB: SELECT team_members + team_repository_access<br/>WHERE user_id AND repository_id | |
| 204 | + DB-->>AS: Vec<team_permission> | |
| 205 | + | |
| 206 | + AS->>AS: team_role = max(team_permissions) | |
| 207 | + AS->>AS: effective = max(individual_role, team_role) | |
| 208 | + | |
| 209 | + AS-->>Caller: Role (Reader / Developer / Maintainer / Owner) | |
| 210 | +``` | |
| 211 | + | |
| 212 | +## 6. Navigation dans un dépôt (Web) | |
| 213 | + | |
| 214 | +```mermaid | |
| 215 | +sequenceDiagram | |
| 216 | + actor User as Utilisateur | |
| 217 | + participant Web as gitrust-web | |
| 218 | + participant Ext as RepoExtractor | |
| 219 | + participant Access as AccessService | |
| 220 | + participant Git as gitrust-git | |
| 221 | + participant DB as PostgreSQL | |
| 222 | + participant FS as Bare repo | |
| 223 | + | |
| 224 | + User->>Web: GET /alice/my-repo/tree/main/src | |
| 225 | + Web->>Ext: RepoContext::extract(owner=alice, repo=my-repo, ref=main, path=src) | |
| 226 | + | |
| 227 | + Ext->>DB: SELECT user WHERE username = 'alice' | |
| 228 | + DB-->>Ext: user {id} | |
| 229 | + | |
| 230 | + Ext->>DB: SELECT repository WHERE owner_id AND slug | |
| 231 | + DB-->>Ext: repository::Model | |
| 232 | + | |
| 233 | + Ext->>Access: effective_role(db, visitor_id, repo_id) | |
| 234 | + Access-->>Ext: Role::Reader | |
| 235 | + | |
| 236 | + Ext-->>Web: RepoContext {repo, role, ref, path} | |
| 237 | + | |
| 238 | + Web->>Git: tree_browser::list_tree(repo_path, "main", "src") | |
| 239 | + Git->>FS: Resolve ref main -> commit -> tree -> src/ | |
| 240 | + FS-->>Git: Vec<TreeEntry> | |
| 241 | + | |
| 242 | + Git-->>Web: entries (fichiers + dossiers) | |
| 243 | + | |
| 244 | + Web->>Git: readme::find_readme(repo_path, "main", "src") | |
| 245 | + Git->>FS: Cherche README.md, README, readme.md | |
| 246 | + FS-->>Git: Option<BlobContent> | |
| 247 | + Git-->>Web: Option<readme_content> | |
| 248 | + | |
| 249 | + Web->>Web: Render template tree.html | |
| 250 | + Web-->>User: HTML (arbre + README) | |
| 251 | +``` | |
| 252 | + | |
| 253 | +## 7. Inscription utilisateur + création répertoire | |
| 254 | + | |
| 255 | +```mermaid | |
| 256 | +sequenceDiagram | |
| 257 | + actor User as Nouvel utilisateur | |
| 258 | + participant Web as rustwarden-core (auth) | |
| 259 | + participant Hook as GitrustHooks | |
| 260 | + participant DB as PostgreSQL | |
| 261 | + participant FS as Système de fichiers | |
| 262 | + | |
| 263 | + User->>Web: POST /register {username, email, password} | |
| 264 | + Web->>DB: INSERT INTO users | |
| 265 | + DB-->>Web: user {id, username} | |
| 266 | + | |
| 267 | + Web->>Hook: on_user_registered(db, user_id, username) | |
| 268 | + Hook->>Hook: Valider username (anti path-traversal) | |
| 269 | + Hook->>FS: create_dir_all(repos_base_path / username) | |
| 270 | + FS-->>Hook: Ok | |
| 271 | + Hook-->>Web: Ok | |
| 272 | + | |
| 273 | + Web-->>User: 302 Redirect /login | |
| 274 | +``` |
A
developer_manual/explanation/hierarchie-labels.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Hiérarchie des labels | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/explanation/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Explication | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/explanation/modele-permissions-rbac.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Modèle de permissions RBAC | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/explanation/patron-worker-async.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Patron worker async | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/explanation/vue-ensemble-architecture.md
+153
-0
@@ -0,0 +1,153 @@
| 1 | +# Vue d'ensemble de l'architecture | |
| 2 | + | |
| 3 | +Gitrust est une plateforme d'hébergement Git auto-hébergée construite sur le framework **rustwarden-core**. L'application expose deux points d'entrée réseau (HTTP + SSH) et persiste ses données dans PostgreSQL. | |
| 4 | + | |
| 5 | +## Vue d'ensemble | |
| 6 | + | |
| 7 | +```mermaid | |
| 8 | +graph TB | |
| 9 | + subgraph Clients | |
| 10 | + Browser["Navigateur Web"] | |
| 11 | + GitCLI["Git CLI (ssh/https)"] | |
| 12 | + end | |
| 13 | + | |
| 14 | + subgraph "Gitrust Binary (src/main.rs)" | |
| 15 | + Main["main()"] | |
| 16 | + end | |
| 17 | + | |
| 18 | + subgraph "Crates Gitrust" | |
| 19 | + Web["gitrust-web<br/><i>Routes HTTP, templates,<br/>handlers Axum</i>"] | |
| 20 | + SSH["gitrust-ssh<br/><i>Serveur SSH (russh),<br/>auth par clé, sessions</i>"] | |
| 21 | + Hooks["gitrust-hooks<br/><i>impl RustwardenHooks<br/>(on_user_registered, ...)</i>"] | |
| 22 | + Core["gitrust-core<br/><i>Models, services, migrations,<br/>rôles, types, DTOs</i>"] | |
| 23 | + Git["gitrust-git<br/><i>Bare repos, tree browser,<br/>pack protocol (git2)</i>"] | |
| 24 | + end | |
| 25 | + | |
| 26 | + subgraph "Framework" | |
| 27 | + RW["rustwarden-core<br/><i>Auth, users, JWT, sessions,<br/>ResourceService, i18n</i>"] | |
| 28 | + end | |
| 29 | + | |
| 30 | + subgraph "Stockage" | |
| 31 | + PG[(PostgreSQL)] | |
| 32 | + FS[("Système de fichiers<br/>bare repos .git")] | |
| 33 | + end | |
| 34 | + | |
| 35 | + subgraph "CI/CD (optionnel)" | |
| 36 | + CiWorker["CiWorker<br/><i>tokio::spawn, mpsc,<br/>sous-processus Dagger</i>"] | |
| 37 | + Dagger["Dagger Engine<br/><i>Containers isolés,<br/>cache, exécution</i>"] | |
| 38 | + CiEngine["ci-engine<br/><i>Module Dagger Python<br/>(Easy Mode)</i>"] | |
| 39 | + Syft["Syft (optionnel)<br/><i>Génération SBOM<br/>CycloneDX</i>"] | |
| 40 | + DTrack["Dependency-Track<br/>(optionnel)<br/><i>Analyse vulnérabilités</i>"] | |
| 41 | + end | |
| 42 | + | |
| 43 | + Browser -->|HTTP :4000| Web | |
| 44 | + GitCLI -->|SSH :2222| SSH | |
| 45 | + GitCLI -->|HTTPS :4000| Web | |
| 46 | + | |
| 47 | + Main --> Web | |
| 48 | + Main --> SSH | |
| 49 | + Main --> Hooks | |
| 50 | + Main -.->|"si CI_ENABLED"| CiWorker | |
| 51 | + | |
| 52 | + Web --> Core | |
| 53 | + Web --> Git | |
| 54 | + SSH --> Core | |
| 55 | + SSH --> Git | |
| 56 | + Hooks --> Core | |
| 57 | + | |
| 58 | + Core --> RW | |
| 59 | + Core --> PG | |
| 60 | + Git --> FS | |
| 61 | + | |
| 62 | + CiWorker --> Core | |
| 63 | + CiWorker -->|"dagger call"| Dagger | |
| 64 | + Dagger -->|"Easy Mode"| CiEngine | |
| 65 | + Dagger -->|"Power Mode"| FS | |
| 66 | + CiWorker -.->|"si CI_SBOM_ENABLED"| Syft | |
| 67 | + Syft -.->|"si CI_DTRACK_ENABLED"| DTrack | |
| 68 | +``` | |
| 69 | + | |
| 70 | +--- | |
| 71 | + | |
| 72 | +## Démarrage de l'application | |
| 73 | + | |
| 74 | +Le diagramme suivant détaille la séquence d'initialisation depuis `main()` jusqu'au démarrage des serveurs HTTP et SSH. | |
| 75 | + | |
| 76 | +```mermaid | |
| 77 | +sequenceDiagram | |
| 78 | + participant Main as main() | |
| 79 | + participant Builder as RustwardenBuilder | |
| 80 | + participant App as RustwardenApp | |
| 81 | + participant Mig as AppMigrator | |
| 82 | + participant DB as PostgreSQL | |
| 83 | + participant SMTP as Serveur SMTP | |
| 84 | + | |
| 85 | + Main->>Main: GitrustConfig::from_env() | |
| 86 | + Main->>Main: Arc<GitrustHooks> (hooks FS) | |
| 87 | + | |
| 88 | + Main->>Builder: builder().from_env() | |
| 89 | + Note over Builder: Charge .env, init tracing | |
| 90 | + Main->>Builder: .headless().auto_migrate(false) | |
| 91 | + Main->>Builder: .merge_routes(app_routes(hooks)) | |
| 92 | + Note over Builder: Routes = framework API<br/>+ pages SSR gitrust<br/>+ Extension(hooks) | |
| 93 | + Main->>Builder: .build().await | |
| 94 | + Builder->>DB: Connexion pool | |
| 95 | + Builder->>DB: Migrations rustwarden-core | |
| 96 | + Builder->>SMTP: EmailQueueProcessor.start() | |
| 97 | + Note over SMTP: Worker de fond : dépile<br/>email_queue toutes les 30s | |
| 98 | + Builder-->>Main: RustwardenApp | |
| 99 | + | |
| 100 | + Main->>Mig: run_migrations(app.database()) | |
| 101 | + Mig->>DB: core_migrations() + gitrust_migrations() | |
| 102 | + Note over DB: Tables: users, resources,<br/>repositories, ssh_keys,<br/>teams, team_members,<br/>team_repository_access | |
| 103 | + Mig-->>Main: Ok | |
| 104 | + | |
| 105 | + Main->>Main: tokio::spawn(SSH server :2222) | |
| 106 | + | |
| 107 | + alt CI_ENABLED=true | |
| 108 | + Main->>Main: CiWorker::start(config.ci) | |
| 109 | + Note over Main: Vérifie dagger dans PATH<br/>Si CI_SBOM_ENABLED: vérifie syft<br/>Si CI_DTRACK_ENABLED: vérifie API DT | |
| 110 | + Main->>Main: tokio::spawn(CiWorker loop) | |
| 111 | + Note over Main: Écoute mpsc channel<br/>pour les jobs CI | |
| 112 | + end | |
| 113 | + | |
| 114 | + Main->>App: app.run().await | |
| 115 | + Note over App: HTTP :4000 démarre | |
| 116 | +``` | |
| 117 | + | |
| 118 | +--- | |
| 119 | + | |
| 120 | +## Principes de conception | |
| 121 | + | |
| 122 | +### Séparation framework / métier gitrust | |
| 123 | + | |
| 124 | +Gitrust est construit **au-dessus** de rustwarden-core, un framework Rust d'authentification et de gestion d'utilisateurs. Cette séparation est intentionnelle : | |
| 125 | + | |
| 126 | +- **rustwarden-core** gère : auth JWT, sessions, users, roles génériques, i18n, SMTP, OAuth, audit log générique. | |
| 127 | +- **gitrust-core** gère : tout ce qui est spécifique à la forge Git — dépôts, clés SSH, équipes, permissions RBAC à 4 niveaux, CI, import de dépôts. | |
| 128 | + | |
| 129 | +La règle fondamentale : **ne jamais modifier `crates/rustwarden-core/`**. Toute extension passe par des wrappers, des hooks (`RustwardenHooks`) ou des traits implémentés côté gitrust. | |
| 130 | + | |
| 131 | +### Mode headless | |
| 132 | + | |
| 133 | +gitrust-web opère en mode `headless()` : les pages UI standard de rustwarden (login, register, settings) sont **désactivées** et réimplémentées entièrement dans `gitrust-web/templates/`. Cela permet un design cohérent (sidebar Git, DaisyUI) sans compromis avec l'UI générique du framework. | |
| 134 | + | |
| 135 | +### SSR + HTMX, zéro CDN | |
| 136 | + | |
| 137 | +L'interface est rendue côté serveur via Askama (templates Rust compilés). HTMX gère les interactions dynamiques (mises à jour partielles de page, SSE pour les notifications et les logs CI). Aucun asset externe : tout CSS/JS est servi depuis `static/` — imposé par la Content Security Policy du framework. | |
| 138 | + | |
| 139 | +### Bare repos sur le système de fichiers | |
| 140 | + | |
| 141 | +gitrust-git est **découplé de la base de données**. Les opérations Git (navigation d'arbre, lecture de blobs, pack protocol) travaillent directement sur les bare repos (`{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/`) via libgit2. La base ne stocke que les métadonnées (nom, description, visibilité, ownership). Ce découplage permet de remplacer ou tester gitrust-git indépendamment. | |
| 142 | + | |
| 143 | +### CI hybride : Dagger comme abstraction d'exécution | |
| 144 | + | |
| 145 | +Plutôt que d'implémenter un runner CI from scratch, gitrust délègue l'exécution à **Dagger**, qui garantit l'isolation (containers), la reproductibilité (cache) et la portabilité (local ou runner distant via SSH+rsync). Le `CiWorker` est une tâche Tokio dans le processus principal — pas un daemon séparé — ce qui simplifie le déploiement (un seul binaire). | |
| 146 | + | |
| 147 | +--- | |
| 148 | + | |
| 149 | +## Pour aller plus loin | |
| 150 | + | |
| 151 | +- Référence structurelle complète (tables de modules, routes, dépendances) : `developer_manual/reference/architecture-crates.md` | |
| 152 | +- Diagrammes de séquence détaillés (clone SSH, push, permissions) : `developer_manual/explanation/flux-requetes.md` | |
| 153 | +- Règles de code et gates QA : `developer_manual/reference/regles-qa-anssi.md` |
A
developer_manual/how-to/ajouter-migration-db.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Ajouter une migration de base de données | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/how-to/ajouter-route-web.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Ajouter une route web | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/how-to/ajouter-service-metier.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Ajouter un service métier | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/how-to/contribuer-a-rustwarden.md
+54
-0
@@ -0,0 +1,54 @@
| 1 | +# Contribuer à rustwarden | |
| 2 | + | |
| 3 | +Ce document décrit les interactions entre gitrust et le framework rustwarden-core, et explique comment étendre le framework côté gitrust sans modifier ses sources. | |
| 4 | + | |
| 5 | +## Services framework utilisés | |
| 6 | + | |
| 7 | +| Service | Usage dans gitrust | | |
| 8 | +|---------|-------------------| | |
| 9 | +| `UserService` | CRUD users, roles, `delete_user`, `admin_reset_password`, `change_password_direct`, `unassign_role_from_user` | | |
| 10 | +| `RoleService` | Liste/création/suppression roles, `get_role_by_name` | | |
| 11 | +| `PasswordService` | `hash_password` (async), `verify_password` (async), `generate_secure_password` | | |
| 12 | +| `ResourceService` | `register`/`unregister` repos, `set_public`, `effective_permission`, `find_by_type_and_id` | | |
| 13 | +| `AuthService` | `authenticate_user` (login) | | |
| 14 | +| `JwtService` | `generate_token` (login) | | |
| 15 | +| `EmailValidationService` | Vérification email | | |
| 16 | +| `PasswordResetService` | Flux "mot de passe oublié" | | |
| 17 | +| `AppSettingsService` | `get_bool` pour `registration_enabled` | | |
| 18 | + | |
| 19 | +## Hook `on_user_deleted` implémenté | |
| 20 | + | |
| 21 | +Le hook `on_user_deleted` dans `gitrust-hooks` supprime le répertoire utilisateur sur le filesystem (`repos_base_path/username/`) avant la cascade DB. Appelé automatiquement par `UserService::delete_user`. | |
| 22 | + | |
| 23 | +## Règle fondamentale | |
| 24 | + | |
| 25 | +**Ne jamais modifier `crates/rustwarden-core/`.** Ce crate est le framework partagé. Toute extension passe par : | |
| 26 | + | |
| 27 | +- Des **wrappers** côté `gitrust-core` (services qui délèguent au framework) | |
| 28 | +- Des **trait impls** (`RustwardenHooks` dans `gitrust-hooks`) | |
| 29 | +- Des **extensions** via les mécanismes d'injection Axum (`Extension`, `State`) | |
| 30 | + | |
| 31 | +## Aucun contournement en cours | |
| 32 | + | |
| 33 | +Tous les anciens contournements (entités directes, hash manuels) ont été remplacés par les services du framework suite à la mise à jour du 2026-03-26. | |
| 34 | + | |
| 35 | +## Ajouter une fonctionnalité nécessitant un service framework absent | |
| 36 | + | |
| 37 | +Si un service nécessaire n'existe pas dans rustwarden-core : | |
| 38 | + | |
| 39 | +1. Implémenter le service côté `gitrust-core` en réutilisant les primitives du framework (ex: `PasswordService::hash_password` pour le hashage) | |
| 40 | +2. Si la fonctionnalité est générique et bénéficierait au framework lui-même, ouvrir une issue ou une PR upstream sur le dépôt rustwarden-core | |
| 41 | +3. Ne pas dupliquer la logique d'auth, de session, ou de JWT — ces domaines appartiennent exclusivement au framework | |
| 42 | + | |
| 43 | +## Pattern d'extension via hooks | |
| 44 | + | |
| 45 | +Les hooks (`gitrust-hooks/src/lib.rs`) implémentent `RustwardenHooks` et sont injectés dans le routeur Axum au démarrage : | |
| 46 | + | |
| 47 | +```rust | |
| 48 | +// Dans main.rs | |
| 49 | +let hooks = Arc::new(GitrustHooks::new(config.clone())); | |
| 50 | +// Passé via .merge_routes(app_routes(hooks)) | |
| 51 | +// Puis disponible via axum::Extension dans les handlers | |
| 52 | +``` | |
| 53 | + | |
| 54 | +Pour réagir à un nouvel événement du framework, ajouter la méthode correspondante dans l'impl `RustwardenHooks` de `gitrust-hooks`, sans toucher au code du framework qui émet l'événement. |
A
developer_manual/how-to/contribuer-workflow-pr.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Workflow de contribution et PR | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/how-to/implementer-endpoint-api.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Implémenter un endpoint API | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/how-to/implementer-webhooks.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Implémenter des webhooks | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/how-to/importer-depot-externe-code.md
+200
-0
@@ -0,0 +1,200 @@
| 1 | +# Importer un dépôt externe | |
| 2 | + | |
| 3 | +Référence du flux d'import de dépôts externes dans gitrust : rôle de la base de données, schéma de séquence complet et pistes d'optimisation. | |
| 4 | + | |
| 5 | +## 1. Rôle de la base de données | |
| 6 | + | |
| 7 | +Pendant un import, la DB sert **quatre fonctions distinctes** : | |
| 8 | + | |
| 9 | +| Rôle | Table | Fréquence | | |
| 10 | +|------|-------|-----------| | |
| 11 | +| **File d'attente persistante** | `import_jobs` | 1 INSERT à la création | | |
| 12 | +| **Suivi d'état pour l'UI** | `import_jobs` | 1 UPDATE toutes les ~1.5 s | | |
| 13 | +| **Enregistrement final du dépôt** | `repositories` + `resources` | 2 INSERT à la fin | | |
| 14 | +| **Journal d'audit** | `audit_log` | 1 INSERT à la fin | | |
| 15 | + | |
| 16 | +Le clone lui-même ne passe **jamais** par la DB : seuls les métadonnées et compteurs de progression y transitent. Les objets Git sont écrits directement sur disque dans `{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/`. | |
| 17 | + | |
| 18 | +### Pourquoi persister l'état ? | |
| 19 | + | |
| 20 | +- **Reprise après redémarrage** : le serveur peut crasher pendant un clone de plusieurs minutes. La table permet de marquer ces jobs comme `failed` au redémarrage. | |
| 21 | +- **SSE** : l'UI lit la progression via un endpoint SSE qui interroge la DB toutes les 2 s. Sans DB, il faudrait un canal in-memory plus un mécanisme de routage vers le bon client. | |
| 22 | +- **Multi-navigateurs** : si l'utilisateur ferme l'onglet puis le rouvre, il retrouve l'état exact du job. | |
| 23 | +- **Audit / historique** : conservation des imports passés avec leurs statistiques. | |
| 24 | + | |
| 25 | +## 2. Schéma du flux actuel | |
| 26 | + | |
| 27 | +```mermaid | |
| 28 | +sequenceDiagram | |
| 29 | + autonumber | |
| 30 | + participant UI as Navigateur | |
| 31 | + participant H as Handler HTTP | |
| 32 | + participant Svc as ImportService | |
| 33 | + participant Chan as mpsc Channel | |
| 34 | + participant W as ImportWorker | |
| 35 | + participant G as git2 (libgit2) | |
| 36 | + participant DB as PostgreSQL | |
| 37 | + participant FS as Disque | |
| 38 | + | |
| 39 | + UI->>H: POST /import<br/>(url, slug, pat) | |
| 40 | + H->>Svc: create_job | |
| 41 | + Svc->>DB: INSERT import_jobs (pending) | |
| 42 | + H->>Chan: try_send(ImportTask+PAT) | |
| 43 | + H-->>UI: 302 /imports/{id} | |
| 44 | + | |
| 45 | + UI->>H: GET /imports/{id}/stream (SSE) | |
| 46 | + Note over UI,H: EventSource ouvert | |
| 47 | + | |
| 48 | + Chan->>W: ImportTask | |
| 49 | + W->>Svc: mark_running | |
| 50 | + Svc->>DB: SELECT import_jobs<br/>UPDATE status=running | |
| 51 | + | |
| 52 | + W->>G: RepoBuilder.bare(true).clone() | |
| 53 | + G->>FS: init_bare + fetch | |
| 54 | + loop callbacks transfer_progress (flood) | |
| 55 | + G-->>W: stats (objets/bytes) | |
| 56 | + alt throttle 1500 ms écoulé | |
| 57 | + W->>Svc: update_progress (tokio::spawn) | |
| 58 | + Svc->>DB: SELECT + UPDATE import_jobs | |
| 59 | + else dans le throttle | |
| 60 | + W--xW: ignore | |
| 61 | + end | |
| 62 | + end | |
| 63 | + | |
| 64 | + loop toutes les 2 s | |
| 65 | + H->>DB: SELECT import_jobs WHERE id=? | |
| 66 | + DB-->>H: état courant | |
| 67 | + H-->>UI: SSE event (JSON) | |
| 68 | + UI->>UI: bar.value = percent | |
| 69 | + end | |
| 70 | + | |
| 71 | + G-->>FS: objets écrits | |
| 72 | + G-->>W: Ok | |
| 73 | + | |
| 74 | + W->>Svc: check cancel (SELECT import_jobs) | |
| 75 | + W->>Svc: update_progress (Finalizing) | |
| 76 | + Svc->>DB: SELECT + UPDATE | |
| 77 | + | |
| 78 | + W->>RepositoryService: create | |
| 79 | + RepositoryService->>DB: INSERT resources<br/>INSERT repositories | |
| 80 | + W->>DB: UPDATE repositories<br/>(import_source_url, is_empty=false) | |
| 81 | + W->>Svc: mark_success | |
| 82 | + Svc->>DB: SELECT + UPDATE import_jobs<br/>(status=success, duration) | |
| 83 | + W->>AuditService: log REPO_IMPORTED | |
| 84 | + AuditService->>DB: INSERT audit_log | |
| 85 | + | |
| 86 | + H->>DB: SELECT (prochain tick SSE) | |
| 87 | + H-->>UI: terminal=true | |
| 88 | + UI->>UI: window.location.reload() | |
| 89 | +``` | |
| 90 | + | |
| 91 | +## 3. Coût DB par import | |
| 92 | + | |
| 93 | +Pour un clone de **90 secondes** avec throttle 1500 ms : | |
| 94 | + | |
| 95 | +| Étape | Opérations DB | Cumul | | |
| 96 | +|-------|---------------|-------| | |
| 97 | +| create_job | 1 INSERT | 1 | | |
| 98 | +| mark_running | 1 SELECT + 1 UPDATE | 3 | | |
| 99 | +| update_progress pendant clone | ~60 x (1 SELECT + 1 UPDATE) | 123 | | |
| 100 | +| check cancel | 1 SELECT | 124 | | |
| 101 | +| update_progress finalizing | 1 SELECT + 1 UPDATE | 126 | | |
| 102 | +| RepositoryService::create | 2 INSERT (repo + resource) | 128 | | |
| 103 | +| update repositories | 1 UPDATE | 129 | | |
| 104 | +| mark_success | 1 SELECT + 1 UPDATE | 131 | | |
| 105 | +| audit log | 1 INSERT | 132 | | |
| 106 | +| SSE stream (45 ticks à 2 s) | 45 SELECT | 177 | | |
| 107 | + | |
| 108 | +**~177 requêtes pour un import**, dont **120+ sont des progress updates**. | |
| 109 | + | |
| 110 | +## 4. Pistes d'optimisation (sans changer libgit2) | |
| 111 | + | |
| 112 | +### 4.1 Éliminer le SELECT avant UPDATE dans `update_progress` | |
| 113 | + | |
| 114 | +`update_progress` fait actuellement `load_model` (SELECT) puis `active.update(db)` (UPDATE + RETURNING). Le SELECT est redondant : on connaît l'ID, on veut juste patcher 4 colonnes. | |
| 115 | + | |
| 116 | +**Gain** : divise par 2 les requêtes de progression (~60 requêtes en moins pour un clone de 90 s). | |
| 117 | + | |
| 118 | +Refonte suggérée avec `UpdateMany` (pattern déjà utilisé dans `ci_service.rs::cancel_running_pipelines`) : | |
| 119 | + | |
| 120 | +```rust | |
| 121 | +import_job::Entity::update_many() | |
| 122 | + .col_expr(Column::ReceivedObjects, Expr::value(received as i32)) | |
| 123 | + .col_expr(Column::TotalObjects, Expr::value(total as i32)) | |
| 124 | + .col_expr(Column::ReceivedBytes, Expr::value(bytes as i64)) | |
| 125 | + .col_expr(Column::Phase, Expr::value(phase.as_str())) | |
| 126 | + .col_expr(Column::UpdatedAt, Expr::value(Utc::now())) | |
| 127 | + .filter(Column::Id.eq(job_id)) | |
| 128 | + .exec(db) | |
| 129 | + .await?; | |
| 130 | +``` | |
| 131 | + | |
| 132 | +Même principe pour `mark_running`, `mark_success`, `mark_failed`, `mark_cancelled` → toutes divisent leurs aller-retours DB par 2. | |
| 133 | + | |
| 134 | +### 4.2 Downsampler la progression dans le worker (dédié) | |
| 135 | + | |
| 136 | +Plan alternatif : le callback écrit simplement dans un `tokio::sync::watch<TransferStats>` (en mémoire, zéro DB). Une **tâche dédiée** consomme ce channel et UPDATE la DB à 1 Hz seulement. | |
| 137 | + | |
| 138 | +```mermaid | |
| 139 | +flowchart LR | |
| 140 | + G[git2 callback] -->|watch::send<br/>très haute fréquence| W[watch channel] | |
| 141 | + W --> T[Tâche update<br/>ticker 1 Hz] | |
| 142 | + T -->|1 UPDATE / s| DB | |
| 143 | +``` | |
| 144 | + | |
| 145 | +**Gains** : | |
| 146 | +- **1 seul émetteur DB** au lieu de N tokio::spawn concurrents → zéro contention sur le pool | |
| 147 | +- **Fréquence déterministe** (1 Hz) indépendante de la vitesse réseau | |
| 148 | +- Code plus clair (la tâche est async, on peut `await` sans détour) | |
| 149 | + | |
| 150 | +### 4.3 Supprimer le `RETURNING` implicite de SeaORM | |
| 151 | + | |
| 152 | +`ActiveModel::update(db)` renvoie le modèle complet via `... RETURNING *`. Pour les progress updates, on n'utilise pas le retour. `UpdateMany::exec` n'émet pas de `RETURNING` → moins de bytes sur le wire, moins de désérialisation. | |
| 153 | + | |
| 154 | +### 4.4 Pool DB dédié pour le worker | |
| 155 | + | |
| 156 | +Aujourd'hui le worker partage le pool principal avec les handlers HTTP. Un pool de 4-8 connexions dédié au worker éviterait qu'un import sature le pool et fasse timeouter les requêtes utilisateur. | |
| 157 | + | |
| 158 | +### 4.5 Debouncer le SSE côté serveur | |
| 159 | + | |
| 160 | +Le SSE SELECT toutes les 2 s même quand rien ne change. Alternative : **PostgreSQL LISTEN/NOTIFY** sur une chaîne `import_job_{uuid}`. Chaque UPDATE émet un NOTIFY, la connexion SSE fait LISTEN → push direct, zéro polling. | |
| 161 | + | |
| 162 | +**Coût** : nécessite une connexion DB dédiée par SSE (LISTEN est stateful). Compromis à évaluer. | |
| 163 | + | |
| 164 | +## 5. Optimisation majeure : shell-out vers `git clone --bare` | |
| 165 | + | |
| 166 | +**Indépendant des optimisations DB** mais de loin le plus gros gain. libgit2 est structurellement 2-5x plus lent que `git` CLI sur gros clones HTTPS (pas de multiplexage, résolution de deltas mono-threadée, etc.). | |
| 167 | + | |
| 168 | +```mermaid | |
| 169 | +flowchart TB | |
| 170 | + subgraph Actuel[Flux actuel — libgit2] | |
| 171 | + A1[RepoBuilder::clone] --> A2[libgit2: fetch + resolve] | |
| 172 | + A2 -->|lent 2-5x| A3[bare repo] | |
| 173 | + end | |
| 174 | + subgraph Cible[Flux optimisé — git CLI] | |
| 175 | + B1[Command::new git] --> B2[git clone --bare --progress] | |
| 176 | + B2 -->|stderr| B3[Parser regex<br/>Receiving objects: X%] | |
| 177 | + B3 --> B4[update watch channel] | |
| 178 | + B2 -->|vitesse native| B5[bare repo] | |
| 179 | + end | |
| 180 | +``` | |
| 181 | + | |
| 182 | +Avantages : | |
| 183 | +- **Vitesse native** (parité avec `git` CLI) | |
| 184 | +- **Progression native** via stderr `Receiving objects: 42% (368/876), 1.10 MiB | 2.05 MiB/s` | |
| 185 | +- **HEAD correctement positionné** (plus besoin du workaround `RepoBuilder`) | |
| 186 | +- **Moins de dépendance sur libgit2** pour le cas du clone initial | |
| 187 | + | |
| 188 | +Contrepartie : binaire `git` requis sur le serveur (déjà le cas — utilisé par `SbomService::git_archive`). | |
| 189 | + | |
| 190 | +## 6. Priorités recommandées | |
| 191 | + | |
| 192 | +Si on voulait optimiser maintenant, ordre proposé : | |
| 193 | + | |
| 194 | +1. **Shell-out `git clone --bare`** — gain réel pour l'utilisateur (clone 3-5x plus rapide). | |
| 195 | +2. **`update_many` pour `update_progress`** — divise la pression DB par 2, changement mécanique de ~20 lignes. | |
| 196 | +3. **`watch` channel + tâche 1 Hz** — architecture plus propre, élimine les problèmes de pool. | |
| 197 | +4. **Pool DB dédié worker** — filet de sécurité opérationnel. | |
| 198 | +5. LISTEN/NOTIFY pour SSE — seulement si beaucoup de clients simultanés. | |
| 199 | + | |
| 200 | +Les gains 2-4 sont utiles même avec libgit2 ; le gain 1 est le plus visible pour l'utilisateur final. |
A
developer_manual/how-to/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Guides pratiques | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/how-to/lancer-tests-e2e.md
+139
-0
@@ -0,0 +1,139 @@
| 1 | +# Lancer les tests end-to-end (E2E) | |
| 2 | + | |
| 3 | +Les tests E2E de gitrust utilisent **Playwright** pour piloter un navigateur Chromium contre une instance de l'application configurée avec une base de données et un répertoire de dépôts dédiés. | |
| 4 | + | |
| 5 | +## Pré-requis | |
| 6 | + | |
| 7 | +- Node.js (déjà présent pour Tailwind/DaisyUI) | |
| 8 | +- PostgreSQL accessible en local (Docker via `database/docker-compose.yml`) | |
| 9 | +- `psql`, `createdb`, `dropdb` disponibles dans le PATH | |
| 10 | +- Chromium installé via Playwright (`npx playwright install chromium`) | |
| 11 | + | |
| 12 | +## Commandes | |
| 13 | + | |
| 14 | +```bash | |
| 15 | +# Créer (ou remettre à zéro) la base de données de test | |
| 16 | +npm run test:e2e:setup | |
| 17 | + | |
| 18 | +# Lancer tous les tests E2E | |
| 19 | +npm run test:e2e | |
| 20 | + | |
| 21 | +# Mode debug interactif (inspecteur Playwright, pas-à-pas) | |
| 22 | +npm run test:e2e:debug | |
| 23 | + | |
| 24 | +# Mode UI (interface graphique Playwright) | |
| 25 | +npm run test:e2e:ui | |
| 26 | + | |
| 27 | +# Consulter le rapport HTML après exécution | |
| 28 | +npm run test:e2e:report | |
| 29 | +``` | |
| 30 | + | |
| 31 | +## Architecture | |
| 32 | + | |
| 33 | +``` | |
| 34 | +.env.test # Variables d'environnement de test | |
| 35 | +playwright.config.ts # Configuration Playwright | |
| 36 | + | |
| 37 | +scripts/ | |
| 38 | + e2e-setup-db.sh # Crée la DB gitrust_test + nettoie depot_test | |
| 39 | + e2e-server.sh # Démarre l'app avec .env.test | |
| 40 | + | |
| 41 | +tests/e2e/ | |
| 42 | + fixtures.ts # Fixtures partagées (loginAs, credentials) | |
| 43 | + global-setup.ts # Seed : crée les utilisateurs via /register | |
| 44 | + global-teardown.ts # Nettoyage post-tests | |
| 45 | + auth.spec.ts # Tests d'authentification | |
| 46 | + repository.spec.ts # Tests de gestion des dépôts | |
| 47 | + admin.spec.ts # Tests du panneau d'administration | |
| 48 | + navigation.spec.ts # Tests de navigation et UI | |
| 49 | +``` | |
| 50 | + | |
| 51 | +### Isolation de l'environnement de test | |
| 52 | + | |
| 53 | +| Ressource | Développement | Tests E2E | | |
| 54 | +|------------------|---------------------|---------------------| | |
| 55 | +| Base de données | `gitrust` | `gitrust_test` | | |
| 56 | +| Port HTTP | `4000` | `4001` | | |
| 57 | +| Port SSH | `2222` | `2223` | | |
| 58 | +| Dépôts Git | `./data/repos/` | `./depot_test/` | | |
| 59 | +| Rate limiting | Standard | Relâché (×20) | | |
| 60 | +| Validation email | Activée | Désactivée | | |
| 61 | + | |
| 62 | +### Fonctionnement | |
| 63 | + | |
| 64 | +1. **`npm run test:e2e:setup`** supprime puis recrée la base `gitrust_test` et vide `depot_test/`. | |
| 65 | +2. **Playwright** démarre automatiquement l'application via `scripts/e2e-server.sh`, qui charge les variables de `.env.test` avant d'exécuter `cargo run`. | |
| 66 | +3. Le **global-setup** crée les utilisateurs de test (alice, bob, charlie) en passant par le formulaire `/register` — approche 100% E2E, aucune insertion directe en base. | |
| 67 | +4. Les **tests** s'exécutent séquentiellement (un seul worker) pour éviter les conflits sur la DB partagée. | |
| 68 | +5. Le **global-teardown** est exécuté à la fin de la session. | |
| 69 | + | |
| 70 | +### Fixtures | |
| 71 | + | |
| 72 | +Le fichier `fixtures.ts` fournit une fixture `loginAs` réutilisable dans tous les tests : | |
| 73 | + | |
| 74 | +```typescript | |
| 75 | +import { test, expect } from './fixtures'; | |
| 76 | + | |
| 77 | +test('mon test', async ({ page, loginAs }) => { | |
| 78 | + await loginAs('alice'); | |
| 79 | + // alice est connectée, on peut naviguer | |
| 80 | +}); | |
| 81 | +``` | |
| 82 | + | |
| 83 | +Utilisateurs disponibles : `admin`, `alice`, `bob`, `charlie`. | |
| 84 | + | |
| 85 | +## Liste des tests | |
| 86 | + | |
| 87 | +### `auth.spec.ts` — Authentification | |
| 88 | + | |
| 89 | +| Test | Description | | |
| 90 | +|------|-------------| | |
| 91 | +| login avec des identifiants valides | Vérifie le login standard et la redirection vers `/dashboard` | | |
| 92 | +| login avec un mauvais mot de passe | Vérifie l'affichage d'un message d'erreur | | |
| 93 | +| login avec un utilisateur inexistant | Vérifie le rejet d'un username inconnu | | |
| 94 | +| logout déconnecte l'utilisateur | Vérifie la déconnexion et l'impossibilité d'accéder au dashboard | | |
| 95 | +| accès au dashboard sans login redirige vers login | Vérifie la protection des routes authentifiées | | |
| 96 | +| option remember me est présente | Vérifie la présence de la checkbox remember_me | | |
| 97 | +| formulaire d'inscription est accessible | Vérifie la présence de tous les champs du formulaire | | |
| 98 | +| inscription avec username déjà pris échoue | Vérifie l'unicité des usernames | | |
| 99 | +| inscription avec mots de passe différents échoue | Vérifie la validation de confirmation du mot de passe | | |
| 100 | + | |
| 101 | +### `repository.spec.ts` — Gestion des dépôts | |
| 102 | + | |
| 103 | +| Test | Description | | |
| 104 | +|------|-------------| | |
| 105 | +| créer un dépôt avec nom et description | Crée un dépôt complet et vérifie la redirection | | |
| 106 | +| créer un dépôt sans description | Vérifie que la description est optionnelle | | |
| 107 | +| créer un dépôt avec un nom déjà pris échoue | Vérifie l'unicité des slugs par utilisateur | | |
| 108 | +| le formulaire de création nécessite un login | Vérifie la protection de la route `/new` | | |
| 109 | +| le dashboard liste les dépôts de l'utilisateur | Vérifie l'affichage des dépôts sur le dashboard | | |
| 110 | +| un dépôt public est accessible sans login | Vérifie l'accès anonyme aux dépôts publics | | |
| 111 | + | |
| 112 | +### `admin.spec.ts` — Administration | |
| 113 | + | |
| 114 | +| Test | Description | | |
| 115 | +|------|-------------| | |
| 116 | +| l'admin peut accéder au panneau d'administration | Vérifie l'accès admin à `/admin` | | |
| 117 | +| un utilisateur normal ne peut pas accéder à l'admin | Vérifie le contrôle d'accès | | |
| 118 | +| lister les utilisateurs | Vérifie l'affichage de la liste des utilisateurs | | |
| 119 | +| créer un nouvel utilisateur via l'admin | Teste le formulaire de création d'utilisateur admin | | |
| 120 | +| créer un utilisateur avec un username déjà pris échoue | Vérifie la gestion des doublons côté admin | | |
| 121 | +| les liens du menu admin sont présents | Vérifie la navigation du panneau admin | | |
| 122 | + | |
| 123 | +### `navigation.spec.ts` — Navigation et UI | |
| 124 | + | |
| 125 | +| Test | Description | | |
| 126 | +|------|-------------| | |
| 127 | +| la page de login est accessible | Vérifie le rendu de la page de login | | |
| 128 | +| la navbar est présente après login | Vérifie la présence de la barre de navigation | | |
| 129 | +| le sidebar est présent après login | Vérifie la présence du menu latéral | | |
| 130 | +| le lien vers le dashboard fonctionne | Vérifie la navigation vers le dashboard | | |
| 131 | +| le lien vers la création de dépôt fonctionne | Vérifie le lien `/new` | | |
| 132 | +| la page utilise le thème DaisyUI | Vérifie la présence de l'attribut `data-theme` | | |
| 133 | + | |
| 134 | +## Ajouter un nouveau test | |
| 135 | + | |
| 136 | +1. Créer un fichier `tests/e2e/mon-module.spec.ts` | |
| 137 | +2. Importer les fixtures : `import { test, expect } from './fixtures';` | |
| 138 | +3. Utiliser `loginAs` pour les tests nécessitant une authentification | |
| 139 | +4. Lancer avec `npm run test:e2e` ou cibler le fichier : `npx playwright test mon-module` |
A
developer_manual/how-to/lancer-tests-unitaires.md
+215
-0
@@ -0,0 +1,215 @@
| 1 | +# Lancer les tests unitaires | |
| 2 | + | |
| 3 | +Référence des commandes et de la stratégie de tests pour gitrust. | |
| 4 | + | |
| 5 | +## Infrastructure existante | |
| 6 | + | |
| 7 | +### Tests unitaires Rust | |
| 8 | + | |
| 9 | +```bash | |
| 10 | +cargo test --workspace # Tous les tests | |
| 11 | +cargo test -p gitrust-core # Un crate spécifique | |
| 12 | +cargo test -p gitrust-git # Tests Git (tempdir) | |
| 13 | +``` | |
| 14 | + | |
| 15 | +Les tests unitaires sont intégrés dans chaque crate via `#[cfg(test)]`. | |
| 16 | + | |
| 17 | +### Tests e2e Playwright | |
| 18 | + | |
| 19 | +17 specs couvrant : auth, admin, repos, issues, labels, teams, tokens, settings, navigation. | |
| 20 | + | |
| 21 | +```bash | |
| 22 | +# Pré-requis (première fois) | |
| 23 | +npm install | |
| 24 | +./scripts/e2e-setup-db.sh # Crée la DB gitrust_test | |
| 25 | + | |
| 26 | +# Lancer les tests | |
| 27 | +npm run test:e2e # Mode headless | |
| 28 | +npm run test:e2e:ui # Mode interactif (navigateur visible) | |
| 29 | +npm run test:e2e:debug # Mode debug | |
| 30 | +npm run test:e2e:report # Voir le rapport HTML | |
| 31 | +``` | |
| 32 | + | |
| 33 | +Configuration : `playwright.config.ts` (port 4001, DB `gitrust_test`, locale `fr-FR`). | |
| 34 | + | |
| 35 | +### Structure des répertoires | |
| 36 | + | |
| 37 | +``` | |
| 38 | +tests/ | |
| 39 | + e2e/ # Specs Playwright (TypeScript) | |
| 40 | + global-setup.ts # Setup : lancer l'app, créer admin | |
| 41 | + global-teardown.ts # Teardown : arrêter l'app | |
| 42 | + fixtures.ts # Fixtures Playwright partagées | |
| 43 | + auth.spec.ts # Tests authentification | |
| 44 | + admin.spec.ts # Tests administration | |
| 45 | + issues.spec.ts # Tests issues | |
| 46 | + ... | |
| 47 | + integration/ # Tests d'intégration Rust (DB réelle) [à créer] | |
| 48 | + fixtures/ # Fichiers de test (repos, configs) [à créer] | |
| 49 | + seeds/ # Seeds Rust pour initialiser la DB de test | |
| 50 | + mod.rs | |
| 51 | + seed.rs | |
| 52 | +``` | |
| 53 | + | |
| 54 | +--- | |
| 55 | + | |
| 56 | +## Tests à ajouter | |
| 57 | + | |
| 58 | +### 1. Tests fonctionnels API REST (intégration Rust) | |
| 59 | + | |
| 60 | +Tests avec une DB PostgreSQL réelle pour vérifier les endpoints API. | |
| 61 | + | |
| 62 | +**Emplacement** : `tests/integration/` ou `crates/gitrust-web/tests/` | |
| 63 | + | |
| 64 | +**Approche recommandée** : utiliser `reqwest` + un serveur de test : | |
| 65 | + | |
| 66 | +```rust | |
| 67 | +// tests/integration/api_test.rs | |
| 68 | +use reqwest::Client; | |
| 69 | + | |
| 70 | +#[tokio::test] | |
| 71 | +#[ignore] // Nécessite une DB + serveur running | |
| 72 | +async fn test_api_login() { | |
| 73 | + let client = Client::new(); | |
| 74 | + let res = client.post("http://localhost:4001/api/v1/auth/login") | |
| 75 | + .json(&serde_json::json!({ | |
| 76 | + "login": "admin", | |
| 77 | + "password": "test_password" | |
| 78 | + })) | |
| 79 | + .send() | |
| 80 | + .await | |
| 81 | + .unwrap(); | |
| 82 | + assert_eq!(res.status(), 200); | |
| 83 | +} | |
| 84 | +``` | |
| 85 | + | |
| 86 | +**Alternative** : `axum::test` pour tester les handlers sans serveur HTTP : | |
| 87 | + | |
| 88 | +```rust | |
| 89 | +use axum::body::Body; | |
| 90 | +use axum::http::Request; | |
| 91 | +use tower::ServiceExt; | |
| 92 | + | |
| 93 | +#[tokio::test] | |
| 94 | +async fn test_health_check() { | |
| 95 | + let app = create_test_app().await; // Build router with test DB | |
| 96 | + let response = app | |
| 97 | + .oneshot(Request::builder().uri("/api/hello").body(Body::empty()).unwrap()) | |
| 98 | + .await | |
| 99 | + .unwrap(); | |
| 100 | + assert_eq!(response.status(), 200); | |
| 101 | +} | |
| 102 | +``` | |
| 103 | + | |
| 104 | +### 2. Tests fonctionnels CI | |
| 105 | + | |
| 106 | +| Test | Description | Priorité | | |
| 107 | +|------|-------------|----------| | |
| 108 | +| CI detection | Repo avec `.gitrust-ci.yml` -> Easy, `.dagger/` -> Power, rien -> None | Haute | | |
| 109 | +| Pipeline CRUD | Créer, lister, mettre à jour, annuler un pipeline | Haute | | |
| 110 | +| Config CI | Activer/désactiver CI, modifier triggers, vérifier effet | Haute | | |
| 111 | +| Variables héritage | Team var + repo var -> merge correct | Moyenne | | |
| 112 | +| Auto-cancel | Nouveau push annule les pipelines en cours | Moyenne | | |
| 113 | +| Logs streaming | Append logs + lecture paginée | Moyenne | | |
| 114 | +| Notifications CI | Pipeline échoue -> notification créée | Moyenne | | |
| 115 | + | |
| 116 | +**Pour les tests CI** : mocker `dagger` avec un script shell qui simule success/failure : | |
| 117 | + | |
| 118 | +```bash | |
| 119 | +#!/bin/bash | |
| 120 | +# tests/fixtures/mock-dagger.sh | |
| 121 | +echo "Step 1: Building..." | |
| 122 | +echo "Step 2: Testing..." | |
| 123 | +if [ "$MOCK_FAIL" = "true" ]; then | |
| 124 | + echo "FAILED" >&2 | |
| 125 | + exit 1 | |
| 126 | +fi | |
| 127 | +echo "All checks passed" | |
| 128 | +exit 0 | |
| 129 | +``` | |
| 130 | + | |
| 131 | +Configurer `CI_DAGGER_BIN=tests/fixtures/mock-dagger.sh` dans les tests. | |
| 132 | + | |
| 133 | +### 3. Tests e2e Playwright à ajouter | |
| 134 | + | |
| 135 | +Nouvelles specs pour les fonctionnalités CI et notifications : | |
| 136 | + | |
| 137 | +| Spec | Couverture | | |
| 138 | +|------|------------| | |
| 139 | +| `ci-pipelines.spec.ts` | Liste pipelines, détail, status badges | | |
| 140 | +| `ci-config.spec.ts` | Config CI (enable/disable, triggers, timeout) | | |
| 141 | +| `ci-variables.spec.ts` | CRUD variables CI, masquage secrets | | |
| 142 | +| `notifications.spec.ts` | Liste notifications, marquer lu, préférences | | |
| 143 | +| `api-docs.spec.ts` | Swagger UI accessible, spec chargée | | |
| 144 | +| `i18n.spec.ts` | Changement de langue, textes traduits | | |
| 145 | +| `docker-smoke.spec.ts` | `docker compose up` + smoke test | | |
| 146 | + | |
| 147 | +**Exemple de spec CI** : | |
| 148 | + | |
| 149 | +```typescript | |
| 150 | +// tests/e2e/ci-pipelines.spec.ts | |
| 151 | +import { test, expect } from './fixtures'; | |
| 152 | + | |
| 153 | +test.describe('CI Pipelines', () => { | |
| 154 | + test('affiche la page CI vide', async ({ authenticatedPage }) => { | |
| 155 | + await authenticatedPage.goto('/admin/mon-repo/ci'); | |
| 156 | + await expect(authenticatedPage.locator('text=Aucun pipeline')).toBeVisible(); | |
| 157 | + }); | |
| 158 | + | |
| 159 | + test('bouton trigger CI visible pour le maintainer', async ({ authenticatedPage }) => { | |
| 160 | + await authenticatedPage.goto('/admin/mon-repo/ci'); | |
| 161 | + await expect(authenticatedPage.locator('text=Lancer CI')).toBeVisible(); | |
| 162 | + }); | |
| 163 | +}); | |
| 164 | +``` | |
| 165 | + | |
| 166 | +### 4. Tests settings ↔ comportement | |
| 167 | + | |
| 168 | +Les tests les plus critiques vérifient que **changer un setting modifie le comportement observable** : | |
| 169 | + | |
| 170 | +| Setting | Action | Vérification | | |
| 171 | +|---------|--------|-------------| | |
| 172 | +| PAT révoqué | Appel API | 401 immédiatement | | |
| 173 | +| `ci_enabled = false` | Push | Pas de pipeline créé | | |
| 174 | +| `trigger_on_push = false` | Push | Pas de pipeline | | |
| 175 | +| `auto_cancel = true` | 2 pushes rapides | 1er pipeline annulé | | |
| 176 | +| `email_on_pipeline_failure = false` | Pipeline échoue | Pas d'email, notif in-app ok | | |
| 177 | +| `DEFAULT_LOCALE = en` | Charger page | Texte en anglais | | |
| 178 | + | |
| 179 | +--- | |
| 180 | + | |
| 181 | +## Commandes de test | |
| 182 | + | |
| 183 | +```bash | |
| 184 | +# Tests unitaires Rust | |
| 185 | +cargo test --workspace | |
| 186 | + | |
| 187 | +# Tests avec filtrage | |
| 188 | +cargo test -p gitrust-core -- ci_service | |
| 189 | +cargo test -p gitrust-core -- notification | |
| 190 | + | |
| 191 | +# Tests e2e Playwright | |
| 192 | +npm run test:e2e | |
| 193 | + | |
| 194 | +# Tests e2e spécifiques | |
| 195 | +npx playwright test tests/e2e/ci-pipelines.spec.ts | |
| 196 | +npx playwright test --grep "notifications" | |
| 197 | + | |
| 198 | +# Lint | |
| 199 | +cargo clippy --workspace -- -D warnings | |
| 200 | + | |
| 201 | +# Format check | |
| 202 | +cargo fmt --all -- --check | |
| 203 | +``` | |
| 204 | + | |
| 205 | +--- | |
| 206 | + | |
| 207 | +## CI locale (exécuter avant un push) | |
| 208 | + | |
| 209 | +```bash | |
| 210 | +# Script rapide de vérification pré-push | |
| 211 | +cargo fmt --all -- --check && \ | |
| 212 | +cargo clippy --workspace -- -D warnings && \ | |
| 213 | +cargo test --workspace && \ | |
| 214 | +echo "All checks passed" | |
| 215 | +``` |
A
developer_manual/how-to/passer-la-qa-avant-merge.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Passer la QA avant un merge | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/index.md
+76
-0
@@ -0,0 +1,76 @@
| 1 | +# Manuel développeur | |
| 2 | + | |
| 3 | +Ce manuel s'adresse à deux publics : les contributeurs au code gitrust (core ou via fork rustwarden) et les développeurs externes qui construisent des intégrations sur l'API publique. Il fournit tout le nécessaire pour comprendre l'architecture des 6 crates, contribuer du code conforme aux standards du projet, ou bâtir un client qui parle à l'API gitrust. Il ne couvre pas l'installation d'une instance de production ni l'usage quotidien de la forge. | |
| 4 | + | |
| 5 | +## Parcours d'apprentissage — contributeur core | |
| 6 | + | |
| 7 | +Le parcours contributeur représente environ 4 heures au total, avec un étayage dégressif : le premier tutoriel est entièrement guidé, le troisième (capstone) demande de résoudre sans guide pas-à-pas. | |
| 8 | + | |
| 9 | +```mermaid | |
| 10 | +graph LR | |
| 11 | + A[Utilisateur autonome] --> B[01-getting-started<br/>45 min] | |
| 12 | + B --> C[02-premiere-contribution<br/>90 min] | |
| 13 | + C --> D[03-creer-un-worker-async<br/>capstone 120 min] | |
| 14 | + D --> E[Core contributor] | |
| 15 | +``` | |
| 16 | + | |
| 17 | +> **Checkpoint de parcours** : avant de passer au tutoriel 02, vous devez avoir compilé gitrust localement, lancé les tests unitaires et obtenu une instance de développement fonctionnelle. Si ce n'est pas le cas, relisez le tutoriel 01. | |
| 18 | + | |
| 19 | +> **Checkpoint de parcours** : avant le tutoriel 03 (capstone), vous devez avoir soumis une PR complète avec tests, passé la gate QA et reçu une review. Si ce n'est pas le cas, relisez le tutoriel 02. | |
| 20 | + | |
| 21 | +--- | |
| 22 | + | |
| 23 | +## Tutoriels — apprendre en faisant | |
| 24 | + | |
| 25 | +Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l'ordre — chacun suppose le précédent complété. | |
| 26 | + | |
| 27 | +- [01 — Getting started : build local, tests, instance de dev](tutorials/01-getting-started.md) — ~45 min | |
| 28 | +- [02 — Première contribution : clone, build, test, PR](tutorials/02-premiere-contribution.md) — ~90 min | |
| 29 | +- [03 — Créer un worker async (capstone)](tutorials/03-creer-un-worker-async.md) — ~120 min | |
| 30 | + | |
| 31 | +--- | |
| 32 | + | |
| 33 | +## How-to — recettes pour les tâches courantes | |
| 34 | + | |
| 35 | +Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n'importe quel ordre selon votre besoin. | |
| 36 | + | |
| 37 | +- [Workflow de contribution : Git + review + QA](how-to/contribuer-workflow-pr.md) | |
| 38 | +- [Lancer les tests unitaires](how-to/lancer-tests-unitaires.md) | |
| 39 | +- [Lancer les tests E2E (Playwright)](how-to/lancer-tests-e2e.md) | |
| 40 | +- [Ajouter une route web (patron rustwarden → axum)](how-to/ajouter-route-web.md) | |
| 41 | +- [Ajouter un service métier](how-to/ajouter-service-metier.md) | |
| 42 | +- [Ajouter une migration de base de données](how-to/ajouter-migration-db.md) | |
| 43 | +- [Implémenter des webhooks](how-to/implementer-webhooks.md) | |
| 44 | +- [Implémenter un endpoint API](how-to/implementer-endpoint-api.md) | |
| 45 | +- [Importer un dépôt externe (code)](how-to/importer-depot-externe-code.md) | |
| 46 | +- [Contribuer à rustwarden upstream](how-to/contribuer-a-rustwarden.md) | |
| 47 | +- [Passer la QA avant merge](how-to/passer-la-qa-avant-merge.md) | |
| 48 | + | |
| 49 | +--- | |
| 50 | + | |
| 51 | +## Référence — informations techniques exactes | |
| 52 | + | |
| 53 | +La référence documente de façon exhaustive l'architecture, les API internes, le schéma de données et les règles QA. Destinée à la consultation ponctuelle. | |
| 54 | + | |
| 55 | +- [Architecture des 6 crates](reference/architecture-crates.md) | |
| 56 | +- [Services et API interne](reference/services-api-interne.md) | |
| 57 | +- [Schéma de base de données (ERD)](reference/schema-base-donnees.md) | |
| 58 | +- [Règles QA et gates ANSSI](reference/regles-qa-anssi.md) | |
| 59 | +- [API REST v1 — auth, pagination, codes d'erreur](reference/api-rest-v1.md) | |
| 60 | +- [Git hooks post-receive](reference/git-hooks-post-receive.md) | |
| 61 | +- [rustwarden-core API — helpers, extracteurs, middleware](reference/rustwarden-core-api.md) | |
| 62 | + | |
| 63 | +--- | |
| 64 | + | |
| 65 | +## Explication — comprendre le pourquoi | |
| 66 | + | |
| 67 | +Les explanations construisent les modèles mentaux nécessaires pour contribuer de façon éclairée. Lisez-les quand vous voulez comprendre les décisions d'architecture, pas seulement les appliquer. | |
| 68 | + | |
| 69 | +- [Vue d'ensemble de l'architecture gitrust](explanation/vue-ensemble-architecture.md) | |
| 70 | +- [Flux de requêtes (diagrammes de séquence)](explanation/flux-requetes.md) | |
| 71 | +- [Modèle de permissions RBAC 4 niveaux](explanation/modele-permissions-rbac.md) | |
| 72 | +- [Fonctionnement de la 2FA](explanation/2fa-fonctionnement.md) | |
| 73 | +- [Hiérarchie des labels](explanation/hierarchie-labels.md) | |
| 74 | +- [CI Dagger : Easy Mode vs Power Mode](explanation/ci-dagger-easy-vs-power.md) | |
| 75 | +- [Décisions UI : HTMX + DaisyUI](explanation/decisions-ui-htmx.md) | |
| 76 | +- [Patron worker async](explanation/patron-worker-async.md) |
A
developer_manual/reference/api-rest-v1.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# API REST v1 | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/reference/architecture-crates.md
+260
-0
@@ -0,0 +1,260 @@
| 1 | +# Architecture par crates | |
| 2 | + | |
| 3 | +Référence structurelle de gitrust : crates, modules, routes, dépendances et composants CI. | |
| 4 | + | |
| 5 | +## Dépendances entre crates | |
| 6 | + | |
| 7 | +```mermaid | |
| 8 | +graph LR | |
| 9 | + RW["rustwarden-core"] | |
| 10 | + | |
| 11 | + Git["gitrust-git"] | |
| 12 | + Core["gitrust-core"] | |
| 13 | + Hooks["gitrust-hooks"] | |
| 14 | + SSH["gitrust-ssh"] | |
| 15 | + Web["gitrust-web"] | |
| 16 | + Bin["gitrust (binaire)"] | |
| 17 | + | |
| 18 | + Core --> RW | |
| 19 | + Git -.->|"indépendant<br/>(git2, tokio)"| RW | |
| 20 | + | |
| 21 | + Hooks --> Core | |
| 22 | + Hooks --> RW | |
| 23 | + | |
| 24 | + SSH --> Core | |
| 25 | + SSH --> Git | |
| 26 | + | |
| 27 | + Web --> Core | |
| 28 | + Web --> Git | |
| 29 | + Web -.->|"CI pages"| Git | |
| 30 | + | |
| 31 | + Bin --> Core | |
| 32 | + Bin --> Git | |
| 33 | + Bin --> SSH | |
| 34 | + Bin --> Web | |
| 35 | + Bin --> Hooks | |
| 36 | + Bin --> RW | |
| 37 | + | |
| 38 | + subgraph "Externes CI (Phase 5b)" | |
| 39 | + Dagger["Dagger CLI"] | |
| 40 | + CiEng["ci-engine (Python)"] | |
| 41 | + Syft["Syft"] | |
| 42 | + DTrack["Dependency-Track"] | |
| 43 | + end | |
| 44 | + | |
| 45 | + Core -.->|"CiWorker<br/>sous-processus"| Dagger | |
| 46 | + Dagger -.-> CiEng | |
| 47 | + Core -.-> Syft | |
| 48 | + Syft -.-> DTrack | |
| 49 | +``` | |
| 50 | + | |
| 51 | +--- | |
| 52 | + | |
| 53 | +## Crates — Responsabilités | |
| 54 | + | |
| 55 | +### gitrust-core | |
| 56 | + | |
| 57 | +Cœur métier. Ne dépend que de rustwarden-core et des crates Rust standards. | |
| 58 | + | |
| 59 | +| Module | Rôle | | |
| 60 | +|--------|------| | |
| 61 | +| `config` | `GitrustConfig::from_env()` — ports SSH, chemin repos, limites | | |
| 62 | +| `error` | `GitrustError` — erreurs domaine Git + `IntoResponse` HTTP | | |
| 63 | +| `roles` | `enum Role { Reader, Developer, Maintainer, Owner }` avec `Ord` | | |
| 64 | +| `types` | Newtypes validés : `RepoSlug`, `TeamSlug`, `Fingerprint`, `TokenHash` | | |
| 65 | +| `models/` | Entités SeaORM : repository, ssh_key, team, team_member, team_repository_access, ci_pipeline, ci_job, ci_log, ci_config, ci_variable | | |
| 66 | +| `migrations/` | Migrations SeaORM (tables gitrust) combinées avec les migrations core | | |
| 67 | +| `services/` | `SshKeyService`, `RepositoryService`, `TeamService`, `AccessService`, `CiService`, `CiVariableService`, `CiDetectionService`, `CiWorker`, `NotificationService` | | |
| 68 | +| `dto/` | Structures d'entrée/sortie pour les services | | |
| 69 | + | |
| 70 | +### gitrust-git | |
| 71 | + | |
| 72 | +Opérations Git sur le système de fichiers. Utilise `git2` (libgit2). Pas de dépendance vers la base de données. | |
| 73 | + | |
| 74 | +| Module | Rôle | | |
| 75 | +|--------|------| | |
| 76 | +| `errors` | `enum GitError` (Git, RepoNotFound, RefNotFound, PathTraversal, ...) | | |
| 77 | +| `bare_repo` | Init, open, delete, exists + validation chemin canonique sous base | | |
| 78 | +| `branch` / `tag` | Listing branches (BranchInfo) et tags (TagInfo, annotated/lightweight) | | |
| 79 | +| `reference` | resolve_ref (branch -> tag -> SHA -> revparse) | | |
| 80 | +| `tree_browser` | list_tree (dirs first, sorted), TreeEntry, EntryKind | | |
| 81 | +| `blob_reader` | read_blob -> Text/Binary, détection binaire (null bytes) | | |
| 82 | +| `commit_log` | list_commits (paginé), find_commit, CommitInfo | | |
| 83 | +| `readme` | find_readme (README.md > README > readme.md > ...) | | |
| 84 | +| `pack_protocol` | advertise_refs, serve_pack (async, git-upload-pack/git-receive-pack) | | |
| 85 | + | |
| 86 | +### gitrust-ssh | |
| 87 | + | |
| 88 | +Serveur SSH basé sur `russh`. Authentification par clé publique. | |
| 89 | + | |
| 90 | +| Module (prévu) | Rôle | | |
| 91 | +|----------------|------| | |
| 92 | +| `server` | Démarrage, génération clé hôte Ed25519 | | |
| 93 | +| `auth` | Authentification par fingerprint -> SshKeyService | | |
| 94 | +| `session` | Handler SSH (exec, shell) | | |
| 95 | +| `command_handler` | Parsing `git-upload-pack`/`git-receive-pack` | | |
| 96 | + | |
| 97 | +### gitrust-web | |
| 98 | + | |
| 99 | +Interface web SSR (Server-Side Rendering) avec Askama (templates compilés) + HTMX (interactions dynamiques). Fonctionne en mode `headless()` : les pages UI du framework (`rustwarden-ui`) ne sont pas montées, gitrust-web réimplémente toutes les pages avec un design spécifique (sidebar contextuelle, navigation Git, DaisyUI). | |
| 100 | + | |
| 101 | +**Architecture des routes :** | |
| 102 | + | |
| 103 | +``` | |
| 104 | +gitrust (port 4000) | |
| 105 | +├── /api/v1/auth/* ← Routes API du framework (JSON) | |
| 106 | +│ ├── POST /login AuthService::authenticate_user | |
| 107 | +│ ├── POST /register UserService::create_user | |
| 108 | +│ ├── POST /refresh RefreshTokenService (rotation JWT) | |
| 109 | +│ ├── POST /logout JwtBlacklistService | |
| 110 | +│ ├── GET /me Claims extraction | |
| 111 | +│ ├── POST /forgot-password PasswordResetService::request_reset | |
| 112 | +│ ├── POST /reset-password PasswordResetService::reset_password | |
| 113 | +│ ├── GET /verify-email/{t} EmailValidationService::verify_email | |
| 114 | +│ └── POST /resend-verif EmailValidationService::resend | |
| 115 | +│ | |
| 116 | +├── /api/v1/* ← API REST Gitrust (JSON, auth JWT/PAT) | |
| 117 | +│ ├── /user, /user/repos Profil utilisateur | |
| 118 | +│ ├── /repos/{o}/{r} Détail dépôt, branches, tags, commits | |
| 119 | +│ ├── /repos/{o}/{r}/issues CRUD issues + commentaires | |
| 120 | +│ ├── /repos/{o}/{r}/pulls CRUD PRs + merge | |
| 121 | +│ └── /repos/{o}/{r}/ci/* Pipelines CI (list, trigger, cancel, logs) | |
| 122 | +│ | |
| 123 | +├── /* ← Pages SSR gitrust (HTML) | |
| 124 | +│ ├── /login, /register Pages formulaires (design gitrust) | |
| 125 | +│ ├── /dashboard, /teams Pages utilisateur | |
| 126 | +│ ├── /settings/* Profile, SSH keys, sessions, notifications | |
| 127 | +│ ├── /notifications Liste notifications + SSE stream | |
| 128 | +│ ├── /admin/* Administration (+ admin CI) | |
| 129 | +│ ├── /{owner}/{repo}/* Navigation dépôt Git | |
| 130 | +│ └── /{owner}/{repo}/ci/* Pages CI (pipelines, logs, config, variables) | |
| 131 | +│ | |
| 132 | +└── /static/* ← Assets locaux (CSS, JS, HTMX) | |
| 133 | +``` | |
| 134 | + | |
| 135 | +Les routes API du framework sont montées via `framework_api_routes()` dans `routes.rs`. Elles sont utilisées par : | |
| 136 | +- Les liens dans les emails (vérification, reset password) | |
| 137 | +- Le refresh token (rotation JWT, session longue durée) | |
| 138 | +- L'accès programmatique (GET /me, POST /logout) | |
| 139 | + | |
| 140 | +Les pages SSR et les routes API coexistent : les formulaires HTML soumettent aux handlers gitrust (SSR), tandis que les services framework génèrent des liens vers les routes API. | |
| 141 | + | |
| 142 | +| Module | Rôle | | |
| 143 | +|--------|------| | |
| 144 | +| `routes.rs` | Routeur principal : framework API + API REST Gitrust + pages SSR + fichiers statiques | | |
| 145 | +| `handlers/` | Handlers Axum SSR (un fichier par domaine) + handlers API JSON | | |
| 146 | +| `templates.rs` | Structs Askama + SidebarContext + RepoNav | | |
| 147 | +| `helpers.rs` | require_auth, require_admin, sidebar_*, resolve_repo_access | | |
| 148 | +| `templates/` | Templates HTML (Askama, extends base.html) | | |
| 149 | +| `static_files.rs` | ServeDir pour /static | | |
| 150 | + | |
| 151 | +### gitrust-hooks | |
| 152 | + | |
| 153 | +Implémentation de `RustwardenHooks` pour réagir aux événements du framework. Les hooks sont injectés dans le routeur Axum via `Arc<dyn RustwardenHooks>` + `axum::Extension` (dans `main.rs`). | |
| 154 | + | |
| 155 | +| Hook | Action | | |
| 156 | +|------|--------| | |
| 157 | +| `on_user_registered` | Crée le répertoire utilisateur sur le FS (anti path-traversal) | | |
| 158 | +| `on_user_deleted` | Supprime le répertoire utilisateur + bare repos sur le FS | | |
| 159 | +| `on_resource_shared` | Audit log si resource_type = "repository" | | |
| 160 | +| `on_resource_unshared` | Audit log si resource_type = "repository" | | |
| 161 | + | |
| 162 | +--- | |
| 163 | + | |
| 164 | +## Notifications | |
| 165 | + | |
| 166 | +Système de notification à deux canaux : **in-app** (SSE temps réel + page) et **email** (worker SMTP du framework). | |
| 167 | + | |
| 168 | +``` | |
| 169 | +Événement (pipeline échoue, PR commentée, etc.) | |
| 170 | + │ | |
| 171 | + ▼ | |
| 172 | +NotificationService::notify(user_id, event_type, title, body, link) | |
| 173 | + │ | |
| 174 | + ├── INSERT INTO notifications (in-app) | |
| 175 | + │ → broadcast::Sender → SSE /notifications/stream | |
| 176 | + │ → Badge header mis à jour en temps réel (HTMX) | |
| 177 | + │ | |
| 178 | + └── if user.email_on_{event} = true: | |
| 179 | + EmailQueueService::enqueue() (framework SMTP worker) | |
| 180 | +``` | |
| 181 | + | |
| 182 | +Les préférences de notification sont par utilisateur (email on/off par type d'événement). | |
| 183 | + | |
| 184 | +--- | |
| 185 | + | |
| 186 | +## CI/CD — Modes et composants | |
| 187 | + | |
| 188 | +Système CI hybride à deux niveaux, activé via `CI_ENABLED=true`. | |
| 189 | + | |
| 190 | +### Modes | |
| 191 | + | |
| 192 | +| Mode | Détection | Exécution | | |
| 193 | +|------|-----------|-----------| | |
| 194 | +| **Easy** | `.gitrust-ci.yml` à la racine du repo | Module Dagger Python générique (`ci-engine`) interprète le YAML | | |
| 195 | +| **Power** | `.dagger/` à la racine du repo | `dagger call -m .dagger/` exécute le module utilisateur directement | | |
| 196 | +| Aucun | Ni l'un ni l'autre | Pas de CI pour ce repo | | |
| 197 | + | |
| 198 | +### Architecture CI | |
| 199 | + | |
| 200 | +``` | |
| 201 | +git push (HTTP ou SSH) | |
| 202 | + │ | |
| 203 | + ▼ | |
| 204 | +receive-pack handler | |
| 205 | + │ | |
| 206 | + ├── CiDetectionService::detect(bare_repo, commit_sha) | |
| 207 | + │ → Easy / Power / None | |
| 208 | + │ | |
| 209 | + ├── CiService::create_pipeline(repo_id, sha, mode) | |
| 210 | + │ | |
| 211 | + └── mpsc::Sender.send(job) ──► CiWorker (tokio::spawn) | |
| 212 | + │ | |
| 213 | + ├── 1. Validation statique | |
| 214 | + │ Easy: schéma YAML, whitelist images/packages | |
| 215 | + │ Power: analyse code .dagger/ (si activé) | |
| 216 | + │ | |
| 217 | + ├── 2. SBOM Gate (si CI_SBOM_ENABLED) | |
| 218 | + │ syft scan → sbom.cdx.json | |
| 219 | + │ → Dependency-Track (si CI_DTRACK_ENABLED) | |
| 220 | + │ → PASS/FAIL selon politique | |
| 221 | + │ | |
| 222 | + ├── 3. Résolution variables (héritage team → repo) | |
| 223 | + │ CiVariableService::resolve_for_pipeline() | |
| 224 | + │ | |
| 225 | + ├── 4. Exécution Dagger (isolé, timeout, cgroups) | |
| 226 | + │ Easy: dagger call -m ci-engine test --profile=... | |
| 227 | + │ Power: dagger call -m .dagger/ <function> | |
| 228 | + │ | |
| 229 | + └── 5. Rapport + audit | |
| 230 | + Status, logs (broadcast SSE), ci_audit_log | |
| 231 | +``` | |
| 232 | + | |
| 233 | +### Composants externes (tous optionnels sauf Dagger) | |
| 234 | + | |
| 235 | +| Composant | Rôle | Variable de contrôle | | |
| 236 | +|-----------|------|---------------------| | |
| 237 | +| Dagger Engine | Exécution des pipelines dans des containers isolés | `CI_ENABLED` | | |
| 238 | +| ci-engine (Python) | Moteur générique pour Easy Mode | `CI_DAGGER_MODULE_PATH` | | |
| 239 | +| Syft | Génération SBOM CycloneDX | `CI_SBOM_ENABLED` | | |
| 240 | +| Dependency-Track | Analyse de vulnérabilités sur les SBOM | `CI_DTRACK_ENABLED` | | |
| 241 | + | |
| 242 | +### Variables et secrets CI | |
| 243 | + | |
| 244 | +Héritage **team → repo** : les variables définies au niveau team sont partagées entre tous les repos de l'équipe. Le repo peut surcharger une clé team avec sa propre valeur. Les secrets sont chiffrés en base (AES-256-GCM) et masqués dans les logs (`***`). | |
| 245 | + | |
| 246 | +--- | |
| 247 | + | |
| 248 | +## Sécurité (ANSSI PA-074) | |
| 249 | + | |
| 250 | +| Directive | Scope | | |
| 251 | +|-----------|-------| | |
| 252 | +| `#![forbid(unsafe_code)]` | gitrust-core, gitrust-web, gitrust-hooks | | |
| 253 | +| `#![deny(unsafe_code)]` | gitrust-git, gitrust-ssh (FFI libgit2/russh) | | |
| 254 | +| `deny(clippy::unwrap_used, expect_used, panic)` | Tous les crates | | |
| 255 | +| `deny(clippy::indexing_slicing)` | Tous les crates | | |
| 256 | +| `deny(clippy::mem_forget)` | Tous les crates | | |
| 257 | +| `Zeroize` on drop | `TokenHash` (ANSSI R23) | | |
| 258 | +| RSA minimum 4096 bits | `SshKeyService` | | |
| 259 | +| Path traversal validation | `RepositoryService`, `gitrust-git` | | |
| 260 | +| Slug validation + noms réservés | `RepoSlug`, `TeamSlug` | |
A
developer_manual/reference/git-hooks-post-receive.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Hooks Git post-receive | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/reference/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Référence | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/reference/regles-qa-anssi.md
+130
-0
@@ -0,0 +1,130 @@
| 1 | +# Règles QA & conformité ANSSI | |
| 2 | + | |
| 3 | +Ce document définit les règles de qualité et de sécurité applicables à tout le projet gitrust. Chaque lot doit satisfaire ces règles avant merge. | |
| 4 | + | |
| 5 | +--- | |
| 6 | + | |
| 7 | +## 1. Gates de compilation obligatoires | |
| 8 | + | |
| 9 | +Toute modification doit passer ces 4 gates sans erreur : | |
| 10 | + | |
| 11 | +| Gate | Commande | Critère | | |
| 12 | +|------|----------|---------| | |
| 13 | +| Formatage | `cargo fmt --all -- --check` | Zéro diff | | |
| 14 | +| Linting | `cargo clippy --workspace -- -D warnings` | Zéro warning | | |
| 15 | +| Tests unitaires | `cargo test --workspace` | 100% pass | | |
| 16 | +| Build CSS | `npx tailwindcss -i static/css/input.css -o static/css/style.css --minify` | Si templates modifiés | | |
| 17 | + | |
| 18 | +### Gates supplémentaires (à mettre en place) | |
| 19 | + | |
| 20 | +| Gate | Outil | Rôle | | |
| 21 | +|------|-------|------| | |
| 22 | +| Audit dépendances | `cargo audit` | Détection CVE dans les deps | | |
| 23 | +| Licences & bans | `cargo deny check` | Licences compatibles, pas de crate bannie | | |
| 24 | +| Secrets dans le code | Recherche de patterns sensibles | Pas de token/mot de passe en dur | | |
| 25 | + | |
| 26 | +--- | |
| 27 | + | |
| 28 | +## 2. Règles de sécurité (ANSSI PA-074) | |
| 29 | + | |
| 30 | +### 2.1 Lints Rust obligatoires (déjà en place) | |
| 31 | + | |
| 32 | +```rust | |
| 33 | +#![forbid(unsafe_code)] // core, web, hooks | |
| 34 | +#![deny(unsafe_code)] // git, ssh (FFI nécessaire) | |
| 35 | +#![deny(clippy::unwrap_used)] | |
| 36 | +#![deny(clippy::expect_used)] | |
| 37 | +#![deny(clippy::panic)] | |
| 38 | +#![deny(clippy::indexing_slicing)] | |
| 39 | +#![deny(clippy::mem_forget)] | |
| 40 | +``` | |
| 41 | + | |
| 42 | +### 2.2 Checklist sécurité par feature | |
| 43 | + | |
| 44 | +Avant toute implémentation touchant l'authentification, les secrets ou les permissions, vérifier : | |
| 45 | + | |
| 46 | +- [ ] **Secrets jamais en clair en base** — hash SHA-256 ou bcrypt | |
| 47 | +- [ ] **Secrets jamais loggés** — vérifier `tracing::info/debug/warn`, `Display` et `Debug` impls ne révèlent pas le secret | |
| 48 | +- [ ] **Comparaison constant-time** — `subtle::ConstantTimeEq` pour toute validation de secret (pas de `==` sur des hash) | |
| 49 | +- [ ] **Rate-limiting** — endpoint d'authentification protégé | |
| 50 | +- [ ] **CSRF** — token valide sur toute action mutante (POST/PUT/DELETE) | |
| 51 | +- [ ] **Ownership vérifiée (anti-IDOR)** — le user ne peut agir que sur ses propres ressources (vérifier `user_id` côté serveur) | |
| 52 | +- [ ] **Expiration obligatoire** — tout token/session a une durée de vie max | |
| 53 | +- [ ] **Audit log** — création, révocation, utilisation suspecte tracées | |
| 54 | +- [ ] **Zeroize** — types sensibles implémentent `Zeroize`/`ZeroizeOnDrop` | |
| 55 | +- [ ] **Path traversal** — validation des chemins disque (pas de `..`, `/`, `\`) | |
| 56 | + | |
| 57 | +### 2.3 Marqueurs SEC- | |
| 58 | + | |
| 59 | +Le code utilise des commentaires `// SEC-XX` pour tracer les décisions de sécurité. Tout nouveau contrôle doit être marqué avec le prochain numéro disponible dans sa catégorie : | |
| 60 | + | |
| 61 | +| Préfixe | Catégorie | Exemples | | |
| 62 | +|---------|-----------|----------| | |
| 63 | +| SEC-C | Cryptographie | Timing attack, CSRF, PKCE | | |
| 64 | +| SEC-H | HTTP/Headers | X-Forwarded-For, cookies, nonce | | |
| 65 | +| SEC-L | Logique métier | Hashing, validation, defaults | | |
| 66 | +| SEC-M | Mémoire/sessions | Rate-limit DoS, refresh tokens | | |
| 67 | + | |
| 68 | +--- | |
| 69 | + | |
| 70 | +## 3. Tests requis par catégorie | |
| 71 | + | |
| 72 | +### 3.1 Matrice de couverture | |
| 73 | + | |
| 74 | +| Catégorie | Quand appliquer | Exemples | | |
| 75 | +|-----------|-----------------|----------| | |
| 76 | +| **Unitaire** | Logique pure (validation, parsing, conversion) | `RepoSlug::new("../evil")` → erreur | | |
| 77 | +| **Intégration** | Service avec DB (CRUD, contraintes, transactions) | `PatService::validate` token expiré → None | | |
| 78 | +| **Handler** | Endpoint HTTP (status, redirect, CSRF, auth) | POST sans CSRF → 403 | | |
| 79 | +| **E2E Playwright** | Flow utilisateur complet | Créer token → copier → cloner un dépôt | | |
| 80 | +| **Sécurité négatif** | Tout bypass imaginable | Token user A sur ressource user B → 401 | | |
| 81 | + | |
| 82 | +### 3.2 Règles de tests | |
| 83 | + | |
| 84 | +1. **Tests d'intégration sur vraie DB** — pas de mocks pour la couche persistence (les mocks masquent les bugs de migration) | |
| 85 | +2. **Tests négatifs obligatoires** — pour chaque chemin heureux, tester au moins : input invalide, non-authentifié, non-autorisé, expiré, révoqué | |
| 86 | +3. **Tests E2E en français** — cohérent avec l'UI (locale `fr-FR`) | |
| 87 | +4. **Pas de `sleep()` dans les tests** — utiliser des retry/poll avec timeout | |
| 88 | +5. **Données de test isolées** — chaque test crée ses propres données (pas de dépendance sur l'ordre d'exécution) | |
| 89 | + | |
| 90 | +--- | |
| 91 | + | |
| 92 | +## 4. Règles de code | |
| 93 | + | |
| 94 | +### 4.1 Framework boundary | |
| 95 | + | |
| 96 | +- **Ne jamais modifier** `crates/rustwarden-core/` | |
| 97 | +- Réutiliser les services framework avant d'implémenter (auth, users, sessions, ResourceService, i18n, middleware) | |
| 98 | +- Si un service manque, l'étendre côté gitrust (wrappers, trait impls) | |
| 99 | + | |
| 100 | +### 4.2 Assets | |
| 101 | + | |
| 102 | +- **Zéro CDN** — tous les CSS/JS servis depuis `static/` | |
| 103 | +- La CSP du framework bloque les domaines externes | |
| 104 | + | |
| 105 | +### 4.3 Gestion d'erreurs | |
| 106 | + | |
| 107 | +- `GitrustError` avec `IntoResponse` pour le mapping HTTP | |
| 108 | +- Pas de `.unwrap()` / `.expect()` / `panic!()` / `[index]` | |
| 109 | +- Errors utilisateur : messages génériques (pas de leak d'info interne) | |
| 110 | + | |
| 111 | +### 4.4 Validation aux frontières | |
| 112 | + | |
| 113 | +- Valider les inputs utilisateur (formulaires, query params, headers) | |
| 114 | +- Ne pas re-valider entre services internes | |
| 115 | +- Newtypes avec validation à la construction (`RepoSlug`, `TeamSlug`, `Fingerprint`, `TokenHash`) | |
| 116 | + | |
| 117 | +--- | |
| 118 | + | |
| 119 | +## 5. Checklist pré-merge | |
| 120 | + | |
| 121 | +Avant chaque merge de lot : | |
| 122 | + | |
| 123 | +- [ ] `cargo fmt --all -- --check` passe | |
| 124 | +- [ ] `cargo clippy --workspace -- -D warnings` passe | |
| 125 | +- [ ] `cargo test --workspace` — tous les tests passent | |
| 126 | +- [ ] Tests E2E Playwright passent (`npm run test:e2e`) | |
| 127 | +- [ ] CSS rebuild si templates modifiés | |
| 128 | +- [ ] Aucun secret en clair dans le code ou les logs | |
| 129 | +- [ ] Checklist sécurité §2.2 validée (si applicable) | |
| 130 | +- [ ] Pas de modification dans `crates/rustwarden-core/` |
A
developer_manual/reference/rustwarden-core-api.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# API rustwarden-core | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/reference/schema-base-donnees.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Schéma de la base de données | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/reference/services-api-interne.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Services et API interne | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/tutorials/01-getting-started.md
+385
-0
@@ -0,0 +1,385 @@
| 1 | +# Premiers pas avec gitrust : compilez, configurez et poussez votre premier commit | |
| 2 | + | |
| 3 | +> **Source** : ce tutoriel intègre le contenu de `gitrust/docs/GETTING_STARTED.md` avec la structure pédagogique complète (objectifs Bloom, modèle mental, checkpoints observables, section « Et si ça ne marche pas »). | |
| 4 | + | |
| 5 | +## Objectifs | |
| 6 | + | |
| 7 | +À la fin de ce tutoriel, vous saurez : | |
| 8 | + | |
| 9 | +- **O1. Compiler** gitrust depuis les sources et lancer l'instance de développement localement | |
| 10 | +- **O2. Configurer** l'environnement de développement (base de données, variables d'environnement, assets CSS) | |
| 11 | +- **O3. Exécuter** un premier push SSH vers votre instance locale et vérifier le résultat dans l'interface web | |
| 12 | + | |
| 13 | +## Pré-requis | |
| 14 | + | |
| 15 | +- **Technique** : Rust stable ≥ 1.80 (`rustc --version`), PostgreSQL ≥ 15 (`psql --version`), Node.js ≥ 18 (`node --version`), Git 2.x (`git --version`), Docker (optionnel, recommandé pour la base de données) | |
| 16 | +- **Pédagogique** : être un utilisateur autonome de gitrust (parcours `user_manual` complété ou équivalent) ; familiarité avec Rust (au moins 3 mois de pratique) et avec HTTP/PostgreSQL | |
| 17 | +- **Temps estimé** : ~45 minutes | |
| 18 | + | |
| 19 | +## Vue d'ensemble | |
| 20 | + | |
| 21 | +Avant d'exécuter la première commande, prenons 3 minutes pour comprendre ce que vous allez monter et comment les pièces s'articulent. | |
| 22 | + | |
| 23 | +gitrust est un **monorepo Rust à 6 crates** qui compile en un seul binaire. Quand vous lancez `cargo run`, ce binaire démarre deux serveurs simultanément : un serveur HTTP (`:4000`) pour l'interface web et l'API REST, et un serveur SSH (`:2222`) pour les opérations `git push/pull`. Ils partagent la même base de données PostgreSQL et le même stockage de dépôts bare sur disque. | |
| 24 | + | |
| 25 | +```mermaid | |
| 26 | +graph TB | |
| 27 | + subgraph sources ["Sources gitrust (monorepo Rust)"] | |
| 28 | + C1[rustwarden-core<br/>auth, sessions, middleware] | |
| 29 | + C2[gitrust-core<br/>modèles, services métier] | |
| 30 | + C3[gitrust-git<br/>opérations Git bare] | |
| 31 | + C4[gitrust-web<br/>handlers HTTP + templates] | |
| 32 | + C5[gitrust-ssh<br/>serveur SSH Git] | |
| 33 | + C6[gitrust-hooks<br/>post-receive, pre-receive] | |
| 34 | + end | |
| 35 | + | |
| 36 | + subgraph runtime ["Processus unique (cargo run)"] | |
| 37 | + HTTP["HTTP :4000<br/>UI + API REST"] | |
| 38 | + SSH["SSH :2222<br/>git push/pull"] | |
| 39 | + end | |
| 40 | + | |
| 41 | + subgraph storage ["Stockage"] | |
| 42 | + PG[(PostgreSQL<br/>comptes, dépôts,<br/>issues, PRs)] | |
| 43 | + REPOS[Dépôts bare<br/>data/repos/] | |
| 44 | + end | |
| 45 | + | |
| 46 | + C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| HTTP | |
| 47 | + C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| SSH | |
| 48 | + HTTP & SSH --> PG | |
| 49 | + HTTP & SSH --> REPOS | |
| 50 | +``` | |
| 51 | + | |
| 52 | +**Ce que vous allez faire** : cloner les sources → préparer PostgreSQL → copier et remplir `.env` → compiler les assets CSS → lancer `cargo run` → vérifier l'instance → pousser un premier commit via SSH. | |
| 53 | + | |
| 54 | +--- | |
| 55 | + | |
| 56 | +## Étape 1 : Vérifiez les pré-requis système | |
| 57 | + | |
| 58 | +Avant de cloner quoi que ce soit, vérifiez que tous les outils nécessaires sont installés : | |
| 59 | + | |
| 60 | +```bash | |
| 61 | +rustc --version && cargo --version && psql --version && node --version && git --version | |
| 62 | +``` | |
| 63 | + | |
| 64 | +Sortie attendue (versions exactes peuvent varier) : | |
| 65 | +``` | |
| 66 | +rustc 1.82.0 (f6e511eec 2024-10-15) | |
| 67 | +cargo 1.82.0 (8f40fc59f 2024-10-15) | |
| 68 | +psql (PostgreSQL) 16.3 | |
| 69 | +v20.11.0 | |
| 70 | +git version 2.43.0 | |
| 71 | +``` | |
| 72 | + | |
| 73 | +Si des dépendances système manquent, installez-les : | |
| 74 | + | |
| 75 | +```bash | |
| 76 | +# Debian / Ubuntu | |
| 77 | +sudo apt install build-essential pkg-config libssl-dev libpq-dev cmake git | |
| 78 | + | |
| 79 | +# macOS | |
| 80 | +brew install postgresql openssl cmake | |
| 81 | +``` | |
| 82 | + | |
| 83 | +**Checkpoint** : toutes les commandes de vérification doivent retourner un numéro de version sans erreur. Si `rustc` n'est pas trouvé, installez Rust via `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh` puis rechargez votre shell. | |
| 84 | + | |
| 85 | +--- | |
| 86 | + | |
| 87 | +## Étape 2 : Clonez le projet | |
| 88 | + | |
| 89 | +```bash | |
| 90 | +git clone https://demo.gitrust.eu/gitrust/gitrust.git | |
| 91 | +cd gitrust | |
| 92 | +``` | |
| 93 | + | |
| 94 | +Sortie attendue : | |
| 95 | +``` | |
| 96 | +Cloning into 'gitrust'... | |
| 97 | +remote: Enumerating objects: 12847, done. | |
| 98 | +remote: Counting objects: 100% (12847/12847), done. | |
| 99 | +Receiving objects: 100% (12847/12847), 18.42 MiB | 4.20 MiB/s, done. | |
| 100 | +``` | |
| 101 | + | |
| 102 | +**Checkpoint** : vérifiez que la structure de crates est présente : | |
| 103 | + | |
| 104 | +```bash | |
| 105 | +ls crates/ | |
| 106 | +``` | |
| 107 | + | |
| 108 | +Sortie attendue : | |
| 109 | +``` | |
| 110 | +gitrust-core gitrust-git gitrust-hooks gitrust-ssh gitrust-web rustwarden-core | |
| 111 | +``` | |
| 112 | + | |
| 113 | +--- | |
| 114 | + | |
| 115 | +## Étape 3 : Configurez l'environnement (.env) | |
| 116 | + | |
| 117 | +Copiez le fichier d'exemple et éditez les 5 valeurs essentielles : | |
| 118 | + | |
| 119 | +```bash | |
| 120 | +cp .env.example .env | |
| 121 | +``` | |
| 122 | + | |
| 123 | +Ouvrez `.env` dans votre éditeur et renseignez ces valeurs : | |
| 124 | + | |
| 125 | +```env | |
| 126 | +# Connexion à la base de données | |
| 127 | +DATABASE_URL=postgres://gitrust:motdepasse@localhost:5432/gitrust | |
| 128 | + | |
| 129 | +# Clé secrète JWT (générez-la avec : openssl rand -hex 32) | |
| 130 | +JWT_SECRET=votre_cle_secrete_64_caracteres | |
| 131 | + | |
| 132 | +# Compte administrateur créé au premier lancement | |
| 133 | +ADMIN_USERNAME=admin | |
| 134 | +ADMIN_EMAIL=admin@example.com | |
| 135 | +ADMIN_PASSWORD=MotDePasseFort123! | |
| 136 | +``` | |
| 137 | + | |
| 138 | +> Les autres variables ont des valeurs par défaut raisonnables pour le développement. Consultez `.env.example` pour la liste complète. | |
| 139 | + | |
| 140 | +Générez une vraie valeur pour `JWT_SECRET` : | |
| 141 | + | |
| 142 | +```bash | |
| 143 | +openssl rand -hex 32 | |
| 144 | +``` | |
| 145 | + | |
| 146 | +Sortie attendue (valeur différente à chaque exécution) : | |
| 147 | +``` | |
| 148 | +4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a | |
| 149 | +``` | |
| 150 | + | |
| 151 | +Copiez cette valeur dans `.env` pour `JWT_SECRET`. | |
| 152 | + | |
| 153 | +**Checkpoint** : vérifiez qu'aucune valeur d'exemple reste dans `.env` : | |
| 154 | + | |
| 155 | +```bash | |
| 156 | +grep -E "votre_cle|example\.com|MotDePasse" .env | |
| 157 | +``` | |
| 158 | + | |
| 159 | +La commande doit retourner vide (aucune ligne). Si elle retourne des lignes, ces valeurs placeholder sont encore présentes — l'application démarrera mais avec une configuration non sécurisée. | |
| 160 | + | |
| 161 | +--- | |
| 162 | + | |
| 163 | +## Étape 4 : Préparez la base de données PostgreSQL | |
| 164 | + | |
| 165 | +Vous avez deux options : | |
| 166 | + | |
| 167 | +**Option A — Docker (recommandé pour débuter) :** | |
| 168 | + | |
| 169 | +```bash | |
| 170 | +cd database && docker compose up -d && cd .. | |
| 171 | +``` | |
| 172 | + | |
| 173 | +Sortie attendue : | |
| 174 | +``` | |
| 175 | +[+] Running 2/2 | |
| 176 | + ✔ Container gitrust_postgres_dev Started 0.8s | |
| 177 | + ✔ Container gitrust_pgadmin Started 1.1s | |
| 178 | +``` | |
| 179 | + | |
| 180 | +**Option B — PostgreSQL existant sur la machine :** | |
| 181 | + | |
| 182 | +```bash | |
| 183 | +psql -U postgres << 'SQL' | |
| 184 | +CREATE USER gitrust WITH PASSWORD 'motdepasse'; | |
| 185 | +CREATE DATABASE gitrust OWNER gitrust; | |
| 186 | +SQL | |
| 187 | +``` | |
| 188 | + | |
| 189 | +Sortie attendue : | |
| 190 | +``` | |
| 191 | +CREATE ROLE | |
| 192 | +CREATE DATABASE | |
| 193 | +``` | |
| 194 | + | |
| 195 | +Adaptez le mot de passe dans `DATABASE_URL` dans `.env` si vous utilisez l'option B. | |
| 196 | + | |
| 197 | +**Checkpoint** : vérifiez que la base est accessible depuis l'application : | |
| 198 | + | |
| 199 | +```bash | |
| 200 | +psql "$DATABASE_URL" -c "SELECT version();" | |
| 201 | +``` | |
| 202 | + | |
| 203 | +Sortie attendue : | |
| 204 | +``` | |
| 205 | + version | |
| 206 | +------------------------------------------------------------------------------------------------------- | |
| 207 | + PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, 64-bit | |
| 208 | +(1 row) | |
| 209 | +``` | |
| 210 | + | |
| 211 | +Si vous obtenez `psql: error: connection to server failed`, vérifiez que PostgreSQL tourne et que `DATABASE_URL` correspond. | |
| 212 | + | |
| 213 | +--- | |
| 214 | + | |
| 215 | +## Étape 5 : Compilez les assets CSS | |
| 216 | + | |
| 217 | +gitrust utilise Tailwind CSS + DaisyUI. Les assets doivent être compilés localement — aucun CDN, tous les fichiers sont servis depuis `static/` : | |
| 218 | + | |
| 219 | +```bash | |
| 220 | +npm install | |
| 221 | +npx tailwindcss -i static/css/input.css -o static/css/style.css --minify | |
| 222 | +``` | |
| 223 | + | |
| 224 | +Sortie attendue : | |
| 225 | +``` | |
| 226 | +added 98 packages in 3s | |
| 227 | + | |
| 228 | +Rebuilding... | |
| 229 | +Done in 1842ms. | |
| 230 | +``` | |
| 231 | + | |
| 232 | +**Checkpoint** : vérifiez que le fichier CSS est généré : | |
| 233 | + | |
| 234 | +```bash | |
| 235 | +ls -lh static/css/style.css | |
| 236 | +``` | |
| 237 | + | |
| 238 | +Sortie attendue : | |
| 239 | +``` | |
| 240 | +-rw-r--r-- 1 vous vous 45K avr 17 10:15 static/css/style.css | |
| 241 | +``` | |
| 242 | + | |
| 243 | +Si le fichier fait 0 octet ou n'existe pas, la compilation a échoué — relancez `npm install` puis la commande `npx tailwindcss`. | |
| 244 | + | |
| 245 | +--- | |
| 246 | + | |
| 247 | +## Étape 6 : Lancez l'application | |
| 248 | + | |
| 249 | +```bash | |
| 250 | +cargo run | |
| 251 | +``` | |
| 252 | + | |
| 253 | +La première compilation prend 2 à 5 minutes (toutes les dépendances sont compilées). Les compilations suivantes sont incrémentales et beaucoup plus rapides. | |
| 254 | + | |
| 255 | +Au premier lancement, gitrust exécute automatiquement : | |
| 256 | +1. Les migrations de base de données (création de toutes les tables) | |
| 257 | +2. La création du compte administrateur (depuis `.env`) | |
| 258 | +3. La génération de la clé SSH host (`data/ssh_host_ed25519_key`) | |
| 259 | +4. La création du répertoire de stockage des dépôts (`data/repos/`) | |
| 260 | + | |
| 261 | +Sortie attendue (après compilation) : | |
| 262 | +``` | |
| 263 | + Compiling gitrust-web v0.9.0 (/home/vous/gitrust/crates/gitrust-web) | |
| 264 | + Finished `dev` profile [unoptimized + debuginfo] target(s) in 187.42s | |
| 265 | + Running `target/debug/gitrust` | |
| 266 | +2026-04-17T10:20:00Z INFO gitrust > Starting gitrust v0.9.0 | |
| 267 | +2026-04-17T10:20:00Z INFO gitrust > Running database migrations... applied 42 | |
| 268 | +2026-04-17T10:20:01Z INFO gitrust > Admin account created: admin | |
| 269 | +2026-04-17T10:20:01Z INFO gitrust > SSH host key: SHA256:xxxxxxxxxxxxxxxxxxxx | |
| 270 | +Server listening on http://0.0.0.0:4000 | |
| 271 | +``` | |
| 272 | + | |
| 273 | +**Checkpoint** : ouvrez `http://localhost:4000` dans votre navigateur. Vous devez voir la page d'accueil gitrust. Connectez-vous avec les identifiants `ADMIN_USERNAME` / `ADMIN_PASSWORD` définis dans `.env`. Si la page ne charge pas, vérifiez que le message `Server listening on http://0.0.0.0:4000` est bien apparu dans les logs. | |
| 274 | + | |
| 275 | +--- | |
| 276 | + | |
| 277 | +## Étape 7 : Créez un dépôt et poussez votre premier commit | |
| 278 | + | |
| 279 | +Dans l'interface web (`http://localhost:4000`), cliquez sur **« New repository »**, donnez un nom (ex. `mon-projet`) et cliquez **Créer**. | |
| 280 | + | |
| 281 | +Ajoutez votre clé SSH publique dans **Settings > SSH Keys** en collant le contenu de `~/.ssh/id_ed25519.pub`. | |
| 282 | + | |
| 283 | +Puis dans votre terminal : | |
| 284 | + | |
| 285 | +```bash | |
| 286 | +git clone ssh://git@localhost:2222/admin/mon-projet.git | |
| 287 | +cd mon-projet | |
| 288 | + | |
| 289 | +echo "# Mon projet" > README.md | |
| 290 | +git add README.md | |
| 291 | +git commit -m "Initial commit" | |
| 292 | +git push origin main | |
| 293 | +``` | |
| 294 | + | |
| 295 | +Sortie attendue : | |
| 296 | +``` | |
| 297 | +Cloning into 'mon-projet'... | |
| 298 | +warning: You appear to have cloned an empty repository. | |
| 299 | +[main (root-commit) a1b2c3d] Initial commit | |
| 300 | + 1 file changed, 1 insertion(+) | |
| 301 | + create mode 100644 README.md | |
| 302 | +Enumerating objects: 3, done. | |
| 303 | +Counting objects: 100% (3/3), done. | |
| 304 | +Writing objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done. | |
| 305 | +Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 | |
| 306 | +To ssh://localhost:2222/admin/mon-projet.git | |
| 307 | + * [new branch] main -> main | |
| 308 | +``` | |
| 309 | + | |
| 310 | +**Checkpoint** : retournez dans le navigateur sur `http://localhost:4000/admin/mon-projet`. La page doit afficher le fichier `README.md` avec le contenu `# Mon projet` et indiquer 1 commit sur la branche `main`. | |
| 311 | + | |
| 312 | +--- | |
| 313 | + | |
| 314 | +## Fonctionnalités supplémentaires disponibles | |
| 315 | + | |
| 316 | +### CI intégrée (optionnelle) | |
| 317 | + | |
| 318 | +La CI s'exécute sur un serveur de build via SSH + rsync. Configurez dans `.env` : | |
| 319 | + | |
| 320 | +```env | |
| 321 | +# Même machine (défaut pour le développement) | |
| 322 | +CI_REMOTE_HOST=localhost | |
| 323 | + | |
| 324 | +# Ou serveur dédié | |
| 325 | +CI_REMOTE_HOST=192.168.13.110 | |
| 326 | +CI_REMOTE_USER=ci-runner | |
| 327 | +``` | |
| 328 | + | |
| 329 | +**Easy Mode** — ajoutez `.gitrust-ci.yml` à la racine de votre dépôt : | |
| 330 | + | |
| 331 | +```yaml | |
| 332 | +language: rust | |
| 333 | + | |
| 334 | +build: | |
| 335 | + command: "cargo build --release" | |
| 336 | + | |
| 337 | +tests: | |
| 338 | + command: "cargo test" | |
| 339 | +``` | |
| 340 | + | |
| 341 | +**Power Mode** — placez un module Dagger dans `.dagger/` à la racine. gitrust exécutera `dagger call -m .dagger/ ci`. | |
| 342 | + | |
| 343 | +### Notifications | |
| 344 | + | |
| 345 | +Configurez SMTP dans `.env` pour les notifications e-mail : | |
| 346 | + | |
| 347 | +```env | |
| 348 | +SMTP_HOST=smtp.example.com | |
| 349 | +SMTP_PORT=587 | |
| 350 | +SMTP_USER=user | |
| 351 | +SMTP_PASSWORD=password | |
| 352 | +SMTP_FROM=noreply@gitrust.eu | |
| 353 | +``` | |
| 354 | + | |
| 355 | +### Langue de l'interface | |
| 356 | + | |
| 357 | +gitrust est disponible en 6 langues (fr, en, de, es, pt, it). Définissez la langue par défaut de l'instance : | |
| 358 | + | |
| 359 | +```env | |
| 360 | +DEFAULT_LOCALE=fr | |
| 361 | +``` | |
| 362 | + | |
| 363 | +--- | |
| 364 | + | |
| 365 | +## Récapitulatif | |
| 366 | + | |
| 367 | +- ✓ **O1 accompli** : gitrust est compilé depuis les sources et tourne localement — `cargo run` affiche « Server listening on http://0.0.0.0:4000 » | |
| 368 | +- ✓ **O2 accompli** : l'environnement est configuré — `.env` rempli, PostgreSQL connecté, assets CSS générés, migrations appliquées | |
| 369 | +- ✓ **O3 accompli** : un premier push SSH a réussi — le commit est visible dans l'interface web à `http://localhost:4000/admin/mon-projet` | |
| 370 | + | |
| 371 | +--- | |
| 372 | + | |
| 373 | +## Et si ça ne marche pas | |
| 374 | + | |
| 375 | +| Symptôme | Cause probable | Correction | | |
| 376 | +|----------|----------------|------------| | |
| 377 | +| `error[E0463]: can't find crate for 'std'` à la compilation | Toolchain Rust manquante ou mauvaise version | Exécutez `rustup update stable && rustup default stable`. Vérifiez avec `rustc --version` ≥ 1.80 | | |
| 378 | +| `connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed` | PostgreSQL non démarré ou `DATABASE_URL` incorrect | Démarrez PostgreSQL (`sudo systemctl start postgresql` ou `docker compose up -d` dans `database/`). Vérifiez que `DATABASE_URL` dans `.env` correspond | | |
| 379 | +| `Permission denied (publickey)` lors du `git push` | Clé SSH non enregistrée dans gitrust ou mauvais port | Vérifiez dans *Settings > SSH Keys* que la clé est présente. Testez avec `ssh -T git@localhost -p 2222` — vous devez voir « Vous êtes authentifié » | | |
| 380 | + | |
| 381 | +--- | |
| 382 | + | |
| 383 | +## Prochaine étape | |
| 384 | + | |
| 385 | +→ [02 — Première contribution : clone, build, test, PR](02-premiere-contribution.md) : apprenez à créer une feature branch, écrire des tests, et soumettre votre première pull request en suivant le workflow gitrust (~90 min) |
A
developer_manual/tutorials/02-premiere-contribution.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# 02 — Première contribution | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/tutorials/03-creer-un-worker-async.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# 03 — Créer un worker async (capstone) | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
developer_manual/tutorials/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Tutoriels | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
diagrams/architecture-globale.mmd
+98
-0
@@ -0,0 +1,98 @@
| 1 | +%%{init: {"theme": "default"}}%% | |
| 2 | +flowchart TB | |
| 3 | + %% ------------------------------------------------------------------------- | |
| 4 | + %% Clients externes | |
| 5 | + %% ------------------------------------------------------------------------- | |
| 6 | + subgraph Clients | |
| 7 | + Browser["Navigateur Web"] | |
| 8 | + GitCLI["Git CLI"] | |
| 9 | + end | |
| 10 | + | |
| 11 | + %% ------------------------------------------------------------------------- | |
| 12 | + %% Point d'entrée binaire | |
| 13 | + %% ------------------------------------------------------------------------- | |
| 14 | + subgraph Binaire["Binaire gitrust (src/main.rs)"] | |
| 15 | + Main["main()"] | |
| 16 | + end | |
| 17 | + | |
| 18 | + %% ------------------------------------------------------------------------- | |
| 19 | + %% Crates applicatifs gitrust | |
| 20 | + %% ------------------------------------------------------------------------- | |
| 21 | + subgraph Crates["Crates Gitrust"] | |
| 22 | + Web["gitrust-web\nRoutes HTTP · templates Askama\nhandlers Axum · SSR + API REST"] | |
| 23 | + SSH["gitrust-ssh\nServeur SSH (russh)\nauth par clé · sessions git"] | |
| 24 | + Hooks["gitrust-hooks\nimpl RustwardenHooks\non_user_registered · on_user_deleted"] | |
| 25 | + Core["gitrust-core\nModels SeaORM · services métier\nmigrations · rôles · DTOs"] | |
| 26 | + Git["gitrust-git\nBare repos · tree browser\nblob reader · pack protocol (git2)"] | |
| 27 | + end | |
| 28 | + | |
| 29 | + %% ------------------------------------------------------------------------- | |
| 30 | + %% Framework rustwarden-core | |
| 31 | + %% ------------------------------------------------------------------------- | |
| 32 | + subgraph Framework["Framework"] | |
| 33 | + RW["rustwarden-core\nAuth · JWT · sessions\nResourceService · i18n · SMTP worker"] | |
| 34 | + end | |
| 35 | + | |
| 36 | + %% ------------------------------------------------------------------------- | |
| 37 | + %% Stockage persistant | |
| 38 | + %% ------------------------------------------------------------------------- | |
| 39 | + subgraph Stockage["Stockage"] | |
| 40 | + PG[("PostgreSQL\nusers · repositories · ssh_keys\nteams · ci_pipelines · notifications")] | |
| 41 | + FS[("Filesystem\nbare repos .git\nSSH host key")] | |
| 42 | + end | |
| 43 | + | |
| 44 | + %% ------------------------------------------------------------------------- | |
| 45 | + %% CI/CD (optionnel — CI_ENABLED=true) | |
| 46 | + %% ------------------------------------------------------------------------- | |
| 47 | + subgraph CI["CI/CD (optionnel)"] | |
| 48 | + CiWorker["CiWorker\ntokio::spawn · mpsc"] | |
| 49 | + Dagger["Dagger Engine\ncontainers isolés · cache"] | |
| 50 | + CiEngine["ci-engine\nmodule Dagger Python\nEasy Mode"] | |
| 51 | + Syft["Syft\ngénération SBOM CycloneDX"] | |
| 52 | + DTrack["Dependency-Track\nanalyse vulnérabilités CVE"] | |
| 53 | + end | |
| 54 | + | |
| 55 | + %% ------------------------------------------------------------------------- | |
| 56 | + %% Flux clients → serveurs | |
| 57 | + %% ------------------------------------------------------------------------- | |
| 58 | + Browser -->|"HTTP :4000"| Web | |
| 59 | + GitCLI -->|"SSH :2222"| SSH | |
| 60 | + GitCLI -->|"HTTPS :4000"| Web | |
| 61 | + | |
| 62 | + %% ------------------------------------------------------------------------- | |
| 63 | + %% main() → crates | |
| 64 | + %% ------------------------------------------------------------------------- | |
| 65 | + Main --> Web | |
| 66 | + Main --> SSH | |
| 67 | + Main --> Hooks | |
| 68 | + Main -.->|"si CI_ENABLED"| CiWorker | |
| 69 | + | |
| 70 | + %% ------------------------------------------------------------------------- | |
| 71 | + %% Crates → Core et Git | |
| 72 | + %% ------------------------------------------------------------------------- | |
| 73 | + Web --> Core | |
| 74 | + Web --> Git | |
| 75 | + SSH --> Core | |
| 76 | + SSH --> Git | |
| 77 | + Hooks --> Core | |
| 78 | + | |
| 79 | + %% ------------------------------------------------------------------------- | |
| 80 | + %% Core → Framework et PostgreSQL | |
| 81 | + %% ------------------------------------------------------------------------- | |
| 82 | + Core --> RW | |
| 83 | + Core --> PG | |
| 84 | + | |
| 85 | + %% ------------------------------------------------------------------------- | |
| 86 | + %% Git → Filesystem | |
| 87 | + %% ------------------------------------------------------------------------- | |
| 88 | + Git --> FS | |
| 89 | + | |
| 90 | + %% ------------------------------------------------------------------------- | |
| 91 | + %% CI pipeline | |
| 92 | + %% ------------------------------------------------------------------------- | |
| 93 | + CiWorker --> Core | |
| 94 | + CiWorker -->|"dagger call"| Dagger | |
| 95 | + Dagger -->|"Easy Mode"| CiEngine | |
| 96 | + Dagger -->|"Power Mode (.dagger/)"| FS | |
| 97 | + CiWorker -.->|"si CI_SBOM_ENABLED"| Syft | |
| 98 | + Syft -.->|"si CI_DTRACK_ENABLED"| DTrack |
A
diagrams/flux-requetes.mmd
+68
-0
@@ -0,0 +1,68 @@
| 1 | +%%{init: {"theme": "default"}}%% | |
| 2 | +sequenceDiagram | |
| 3 | + %% ------------------------------------------------------------------------- | |
| 4 | + %% Flux : Push SSH authentifié | |
| 5 | + %% Source : gitrust/docs/SEQUENCES.md §3 (Push SSH) | |
| 6 | + %% ------------------------------------------------------------------------- | |
| 7 | + | |
| 8 | + actor Dev as Développeur | |
| 9 | + participant Client as Git CLI | |
| 10 | + participant SSH as gitrust-ssh | |
| 11 | + participant Auth as SshKeyService | |
| 12 | + participant Access as AccessService | |
| 13 | + participant Git as gitrust-git | |
| 14 | + participant DB as PostgreSQL | |
| 15 | + participant FS as Bare repo (.git) | |
| 16 | + | |
| 17 | + %% --- Phase 1 : connexion et authentification par clé publique --- | |
| 18 | + Dev->>Client: git push ssh://git@host:2222/alice/my-repo.git | |
| 19 | + Client->>SSH: Connexion TCP :2222 | |
| 20 | + SSH-->>Client: Banner SSH + échange de clés | |
| 21 | + | |
| 22 | + Client->>SSH: Auth publickey (signature Ed25519/RSA) | |
| 23 | + SSH->>Auth: find_by_fingerprint(db, fingerprint) | |
| 24 | + Auth->>DB: SELECT FROM ssh_keys WHERE fingerprint = ? | |
| 25 | + DB-->>Auth: ssh_key::Model {user_id, key_id} | |
| 26 | + Auth-->>SSH: user_id | |
| 27 | + | |
| 28 | + SSH->>Auth: update_last_used(db, key_id) | |
| 29 | + Auth->>DB: UPDATE ssh_keys SET last_used_at = now() | |
| 30 | + DB-->>Auth: Ok | |
| 31 | + | |
| 32 | + SSH-->>Client: Auth OK | |
| 33 | + | |
| 34 | + %% --- Phase 2 : commande git-receive-pack --- | |
| 35 | + Client->>SSH: exec "git-receive-pack 'alice/my-repo.git'" | |
| 36 | + SSH->>SSH: CommandHandler::parse(...) | |
| 37 | + Note over SSH: owner=alice · repo=my-repo | |
| 38 | + | |
| 39 | + %% --- Phase 3 : vérification des droits --- | |
| 40 | + SSH->>Access: effective_role(db, user_id, repo_id) | |
| 41 | + Access->>DB: ownership + resource_shares + team_repository_access | |
| 42 | + DB-->>Access: Role::Developer | |
| 43 | + Access-->>SSH: can_push = true (Developer ≥ Developer) | |
| 44 | + | |
| 45 | + %% --- Phase 4 : négociation git pack protocol --- | |
| 46 | + SSH->>Git: pack_protocol::advertise_refs(repo_path) | |
| 47 | + Git->>FS: Lecture refs (heads, tags) | |
| 48 | + FS-->>Git: refs/heads/main · ... | |
| 49 | + Git-->>SSH: refs advertisement | |
| 50 | + | |
| 51 | + SSH-->>Client: refs advertisement | |
| 52 | + Client->>SSH: pack data + update commands | |
| 53 | + | |
| 54 | + %% --- Phase 5 : écriture des objets --- | |
| 55 | + SSH->>Git: pack_protocol::serve_pack(repo_path, receive-pack) | |
| 56 | + Git->>FS: Écriture objets packfile + update refs | |
| 57 | + FS-->>Git: Ok | |
| 58 | + Git-->>SSH: Ok | |
| 59 | + | |
| 60 | + %% --- Phase 6 : mise à jour metadata --- | |
| 61 | + SSH->>DB: UPDATE repositories SET is_empty=false, updated_at=now() | |
| 62 | + DB-->>SSH: Ok | |
| 63 | + | |
| 64 | + SSH-->>Client: Push OK (unpack ok · refs mis à jour) | |
| 65 | + Client-->>Dev: Push réussi | |
| 66 | + | |
| 67 | + %% --- Phase 7 : déclenchement CI (si CI_ENABLED=true) --- | |
| 68 | + Note over SSH,DB: Si CI_ENABLED=true et .gitrust-ci.yml ou .dagger/ détecté :<br/>CiDetectionService::detect() → CiService::create_pipeline() → mpsc::Sender → CiWorker |
A
po/de.po
+21
-0
@@ -0,0 +1,21 @@
| 1 | +# Documentation gitrust — traduction allemande | |
| 2 | +# Copyright (C) 2024 L'équipe gitrust | |
| 3 | +# This file is distributed under the same license as the gitrust documentation package. | |
| 4 | +# | |
| 5 | +# REMARQUE : Ce fichier est un stub vide. | |
| 6 | +# Il sera complété progressivement une fois la version anglaise (en.po) stabilisée. | |
| 7 | +# Pour contribuer : voir CONTRIBUTING.md § Workflow de traduction | |
| 8 | +# | |
| 9 | +msgid "" | |
| 10 | +msgstr "" | |
| 11 | +"Project-Id-Version: girust_doc 1.0\n" | |
| 12 | +"Report-Msgid-Bugs-To: contact@ebii.fr\n" | |
| 13 | +"POT-Creation-Date: 2024-01-01 00:00+0000\n" | |
| 14 | +"PO-Revision-Date: 2024-01-01 00:00+0000\n" | |
| 15 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
| 16 | +"Language-Team: German <LL@li.org>\n" | |
| 17 | +"Language: de\n" | |
| 18 | +"MIME-Version: 1.0\n" | |
| 19 | +"Content-Type: text/plain; charset=UTF-8\n" | |
| 20 | +"Content-Transfer-Encoding: 8bit\n" | |
| 21 | +"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
A
po/en.po
+21
-0
@@ -0,0 +1,21 @@
| 1 | +# Documentation gitrust — traduction anglaise | |
| 2 | +# Copyright (C) 2024 L'équipe gitrust | |
| 3 | +# This file is distributed under the same license as the gitrust documentation package. | |
| 4 | +# | |
| 5 | +# REMARQUE : Ce fichier est un stub initial. | |
| 6 | +# Il sera régénéré par `mdbook-xgettext` une fois les sources FR stabilisées. | |
| 7 | +# Pour contribuer à la traduction : voir CONTRIBUTING.md § Workflow de traduction | |
| 8 | +# | |
| 9 | +msgid "" | |
| 10 | +msgstr "" | |
| 11 | +"Project-Id-Version: girust_doc 1.0\n" | |
| 12 | +"Report-Msgid-Bugs-To: contact@ebii.fr\n" | |
| 13 | +"POT-Creation-Date: 2024-01-01 00:00+0000\n" | |
| 14 | +"PO-Revision-Date: 2024-01-01 00:00+0000\n" | |
| 15 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
| 16 | +"Language-Team: English <LL@li.org>\n" | |
| 17 | +"Language: en\n" | |
| 18 | +"MIME-Version: 1.0\n" | |
| 19 | +"Content-Type: text/plain; charset=UTF-8\n" | |
| 20 | +"Content-Transfer-Encoding: 8bit\n" | |
| 21 | +"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
A
po/es.po
+21
-0
@@ -0,0 +1,21 @@
| 1 | +# Documentation gitrust — traduction espagnole | |
| 2 | +# Copyright (C) 2024 L'équipe gitrust | |
| 3 | +# This file is distributed under the same license as the gitrust documentation package. | |
| 4 | +# | |
| 5 | +# REMARQUE : Ce fichier est un stub vide. | |
| 6 | +# Il sera complété progressivement une fois la version anglaise (en.po) stabilisée. | |
| 7 | +# Pour contribuer : voir CONTRIBUTING.md § Workflow de traduction | |
| 8 | +# | |
| 9 | +msgid "" | |
| 10 | +msgstr "" | |
| 11 | +"Project-Id-Version: girust_doc 1.0\n" | |
| 12 | +"Report-Msgid-Bugs-To: contact@ebii.fr\n" | |
| 13 | +"POT-Creation-Date: 2024-01-01 00:00+0000\n" | |
| 14 | +"PO-Revision-Date: 2024-01-01 00:00+0000\n" | |
| 15 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
| 16 | +"Language-Team: Spanish <LL@li.org>\n" | |
| 17 | +"Language: es\n" | |
| 18 | +"MIME-Version: 1.0\n" | |
| 19 | +"Content-Type: text/plain; charset=UTF-8\n" | |
| 20 | +"Content-Transfer-Encoding: 8bit\n" | |
| 21 | +"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
A
po/it.po
+21
-0
@@ -0,0 +1,21 @@
| 1 | +# Documentation gitrust — traduction italienne | |
| 2 | +# Copyright (C) 2024 L'équipe gitrust | |
| 3 | +# This file is distributed under the same license as the gitrust documentation package. | |
| 4 | +# | |
| 5 | +# REMARQUE : Ce fichier est un stub vide. | |
| 6 | +# Il sera complété progressivement une fois la version anglaise (en.po) stabilisée. | |
| 7 | +# Pour contribuer : voir CONTRIBUTING.md § Workflow de traduction | |
| 8 | +# | |
| 9 | +msgid "" | |
| 10 | +msgstr "" | |
| 11 | +"Project-Id-Version: girust_doc 1.0\n" | |
| 12 | +"Report-Msgid-Bugs-To: contact@ebii.fr\n" | |
| 13 | +"POT-Creation-Date: 2024-01-01 00:00+0000\n" | |
| 14 | +"PO-Revision-Date: 2024-01-01 00:00+0000\n" | |
| 15 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
| 16 | +"Language-Team: Italian <LL@li.org>\n" | |
| 17 | +"Language: it\n" | |
| 18 | +"MIME-Version: 1.0\n" | |
| 19 | +"Content-Type: text/plain; charset=UTF-8\n" | |
| 20 | +"Content-Transfer-Encoding: 8bit\n" | |
| 21 | +"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
A
po/pt.po
+21
-0
@@ -0,0 +1,21 @@
| 1 | +# Documentation gitrust — traduction portugaise | |
| 2 | +# Copyright (C) 2024 L'équipe gitrust | |
| 3 | +# This file is distributed under the same license as the gitrust documentation package. | |
| 4 | +# | |
| 5 | +# REMARQUE : Ce fichier est un stub vide. | |
| 6 | +# Il sera complété progressivement une fois la version anglaise (en.po) stabilisée. | |
| 7 | +# Pour contribuer : voir CONTRIBUTING.md § Workflow de traduction | |
| 8 | +# | |
| 9 | +msgid "" | |
| 10 | +msgstr "" | |
| 11 | +"Project-Id-Version: girust_doc 1.0\n" | |
| 12 | +"Report-Msgid-Bugs-To: contact@ebii.fr\n" | |
| 13 | +"POT-Creation-Date: 2024-01-01 00:00+0000\n" | |
| 14 | +"PO-Revision-Date: 2024-01-01 00:00+0000\n" | |
| 15 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
| 16 | +"Language-Team: Portuguese <LL@li.org>\n" | |
| 17 | +"Language: pt\n" | |
| 18 | +"MIME-Version: 1.0\n" | |
| 19 | +"Content-Type: text/plain; charset=UTF-8\n" | |
| 20 | +"Content-Transfer-Encoding: 8bit\n" | |
| 21 | +"Plural-Forms: nplurals=2; plural=(n > 1);\n" |
A
src/.omc/state/idle-notif-cooldown.json
+3
-0
@@ -0,0 +1,3 @@
| 1 | +{ | |
| 2 | + "lastSentAt": "2026-04-17T14:23:23.237Z" | |
| 3 | +} | |
| 3 | < \ No newline at end of file |
A
src/SUMMARY.md
+115
-0
@@ -0,0 +1,115 @@
| 1 | +# Sommaire | |
| 2 | + | |
| 3 | +[Introduction](introduction.md) | |
| 4 | + | |
| 5 | +--- | |
| 6 | + | |
| 7 | +# Manuel utilisateur | |
| 8 | + | |
| 9 | +- [Vue d'ensemble](user_manual/index.md) | |
| 10 | +- [Tutoriels](user_manual/tutorials/index.md) | |
| 11 | + - [01 — Premier pas sur gitrust](user_manual/tutorials/01-premier-pas.md) | |
| 12 | + - [02 — Cloner et pousser du code](user_manual/tutorials/02-cloner-pousser.md) | |
| 13 | + - [03 — Collaborer : équipes, issues, pull requests](user_manual/tutorials/03-collaborer.md) | |
| 14 | + - [04 — Automatiser avec la CI](user_manual/tutorials/04-automatiser-ci.md) | |
| 15 | +- [Guides pratiques](user_manual/how-to/index.md) | |
| 16 | + - [Gérer ses clés SSH](user_manual/how-to/gerer-cles-ssh.md) | |
| 17 | + - [Configurer la double authentification (2FA)](user_manual/how-to/configurer-2fa.md) | |
| 18 | + - [Créer un Personal Access Token](user_manual/how-to/creer-personal-access-token.md) | |
| 19 | + - [Gérer les équipes et les permissions](user_manual/how-to/gerer-equipes-permissions.md) | |
| 20 | + - [Ouvrir une pull request](user_manual/how-to/ouvrir-pull-request.md) | |
| 21 | + - [Stratégies de fusion (ff / squash / merge commit)](user_manual/how-to/fusionner-strategies.md) | |
| 22 | + - [Utiliser les labels et les issues](user_manual/how-to/utiliser-labels-issues.md) | |
| 23 | + - [Importer un dépôt externe](user_manual/how-to/importer-depot-externe.md) | |
| 24 | + - [Consulter le SBOM d'un dépôt](user_manual/how-to/consulter-sbom.md) | |
| 25 | +- [Référence](user_manual/reference/index.md) | |
| 26 | + - [Modèle de permissions (4 rôles)](user_manual/reference/modele-permissions.md) | |
| 27 | + - [API REST v1](user_manual/reference/api-rest-v1.md) | |
| 28 | + - [Schéma du fichier .gitrust-ci.yml](user_manual/reference/gitrust-ci-yml-schema.md) | |
| 29 | + - [Markdown et syntaxe supportée](user_manual/reference/markdown-et-syntaxe.md) | |
| 30 | + - [Notifications](user_manual/reference/notifications.md) | |
| 31 | +- [Explication](user_manual/explanation/index.md) | |
| 32 | + - [Modèle de collaboration sur gitrust](user_manual/explanation/modele-collaboration.md) | |
| 33 | + - [Sécurité côté utilisateur](user_manual/explanation/securite-utilisateur.md) | |
| 34 | + - [Cycle de vie d'une pull request](user_manual/explanation/cycle-vie-pull-request.md) | |
| 35 | + | |
| 36 | +--- | |
| 37 | + | |
| 38 | +# Manuel d'administration | |
| 39 | + | |
| 40 | +- [Vue d'ensemble](administration_manual/index.md) | |
| 41 | +- [Tutoriels](administration_manual/tutorials/index.md) | |
| 42 | + - [01 — Installation avec Docker](administration_manual/tutorials/01-installation-docker.md) | |
| 43 | + - [02 — Installation avec systemd](administration_manual/tutorials/02-installation-systemd.md) | |
| 44 | + - [03 — Premier démarrage](administration_manual/tutorials/03-premier-demarrage.md) | |
| 45 | + - [04 — Mise en production (réseau local)](administration_manual/tutorials/04-mise-en-production-192-168.md) | |
| 46 | +- [Guides pratiques](administration_manual/how-to/index.md) | |
| 47 | + - [Sauvegarder et restaurer](administration_manual/how-to/sauvegarder-restaurer.md) | |
| 48 | + - [Mettre à jour gitrust](administration_manual/how-to/mettre-a-jour.md) | |
| 49 | + - [Configurer SMTP](administration_manual/how-to/configurer-smtp.md) | |
| 50 | + - [Configurer OAuth](administration_manual/how-to/configurer-oauth.md) | |
| 51 | + - [Configurer un runner CI distant](administration_manual/how-to/configurer-ci-runner-remote.md) | |
| 52 | + - [Intégrer Dependency-Track (SBOM)](administration_manual/how-to/integrer-dependency-track.md) | |
| 53 | + - [Durcir avec Fail2ban](administration_manual/how-to/durcir-avec-fail2ban.md) | |
| 54 | + - [Régler le rate limiting](administration_manual/how-to/tuner-rate-limiting.md) | |
| 55 | + - [Forcer le 2FA sur toute l'instance](administration_manual/how-to/forcer-2fa-globalement.md) | |
| 56 | + - [Dépanner SSH](administration_manual/how-to/depanner-ssh.md) | |
| 57 | + - [Dépanner la CI](administration_manual/how-to/depanner-ci.md) | |
| 58 | + - [Gérer les utilisateurs (panel /admin)](administration_manual/how-to/gerer-utilisateurs-admin.md) | |
| 59 | + - [Auditer une instance](administration_manual/how-to/auditer-instance.md) | |
| 60 | +- [Référence](administration_manual/reference/index.md) | |
| 61 | + - [Variables d'environnement](administration_manual/reference/variables-environnement.md) | |
| 62 | + - [Paramètres dynamiques](administration_manual/reference/parametres-dynamiques.md) | |
| 63 | + - [Schéma de la base de données](administration_manual/reference/schema-base-de-donnees.md) | |
| 64 | + - [Ports et services](administration_manual/reference/ports-et-services.md) | |
| 65 | + - [Conformité ANSSI PA-074](administration_manual/reference/conformite-anssi-pa074.md) | |
| 66 | +- [Explication](administration_manual/explanation/index.md) | |
| 67 | + - [Architecture globale](administration_manual/explanation/architecture-globale.md) | |
| 68 | + - [Modèle de déploiement](administration_manual/explanation/modele-deploiement.md) | |
| 69 | + - [CI Dagger : Easy Mode vs Power Mode](administration_manual/explanation/ci-dagger.md) | |
| 70 | + - [Stratégie de sauvegarde](administration_manual/explanation/strategie-sauvegarde.md) | |
| 71 | + | |
| 72 | +--- | |
| 73 | + | |
| 74 | +# Manuel développeur | |
| 75 | + | |
| 76 | +- [Vue d'ensemble](developer_manual/index.md) | |
| 77 | +- [Tutoriels](developer_manual/tutorials/index.md) | |
| 78 | + - [01 — Démarrer avec le code gitrust](developer_manual/tutorials/01-getting-started.md) | |
| 79 | + - [02 — Première contribution](developer_manual/tutorials/02-premiere-contribution.md) | |
| 80 | + - [03 — Créer un worker async (capstone)](developer_manual/tutorials/03-creer-un-worker-async.md) | |
| 81 | +- [Guides pratiques](developer_manual/how-to/index.md) | |
| 82 | + - [Workflow de contribution et PR](developer_manual/how-to/contribuer-workflow-pr.md) | |
| 83 | + - [Lancer les tests unitaires](developer_manual/how-to/lancer-tests-unitaires.md) | |
| 84 | + - [Lancer les tests E2E](developer_manual/how-to/lancer-tests-e2e.md) | |
| 85 | + - [Ajouter une route web](developer_manual/how-to/ajouter-route-web.md) | |
| 86 | + - [Ajouter un service métier](developer_manual/how-to/ajouter-service-metier.md) | |
| 87 | + - [Ajouter une migration de base de données](developer_manual/how-to/ajouter-migration-db.md) | |
| 88 | + - [Implémenter des webhooks](developer_manual/how-to/implementer-webhooks.md) | |
| 89 | + - [Implémenter un endpoint API](developer_manual/how-to/implementer-endpoint-api.md) | |
| 90 | + - [Importer un dépôt externe (code)](developer_manual/how-to/importer-depot-externe-code.md) | |
| 91 | + - [Contribuer à rustwarden upstream](developer_manual/how-to/contribuer-a-rustwarden.md) | |
| 92 | + - [Passer la QA avant un merge](developer_manual/how-to/passer-la-qa-avant-merge.md) | |
| 93 | +- [Référence](developer_manual/reference/index.md) | |
| 94 | + - [Architecture des crates](developer_manual/reference/architecture-crates.md) | |
| 95 | + - [Services et API interne](developer_manual/reference/services-api-interne.md) | |
| 96 | + - [Schéma de la base de données](developer_manual/reference/schema-base-donnees.md) | |
| 97 | + - [Règles QA et conformité ANSSI](developer_manual/reference/regles-qa-anssi.md) | |
| 98 | + - [API REST v1](developer_manual/reference/api-rest-v1.md) | |
| 99 | + - [Hooks Git post-receive](developer_manual/reference/git-hooks-post-receive.md) | |
| 100 | + - [API rustwarden-core](developer_manual/reference/rustwarden-core-api.md) | |
| 101 | +- [Explication](developer_manual/explanation/index.md) | |
| 102 | + - [Vue d'ensemble de l'architecture](developer_manual/explanation/vue-ensemble-architecture.md) | |
| 103 | + - [Flux de requêtes](developer_manual/explanation/flux-requetes.md) | |
| 104 | + - [Modèle de permissions RBAC](developer_manual/explanation/modele-permissions-rbac.md) | |
| 105 | + - [Fonctionnement du 2FA](developer_manual/explanation/2fa-fonctionnement.md) | |
| 106 | + - [Hiérarchie des labels](developer_manual/explanation/hierarchie-labels.md) | |
| 107 | + - [CI Dagger : Easy Mode vs Power Mode](developer_manual/explanation/ci-dagger-easy-vs-power.md) | |
| 108 | + - [Décisions UI (HTMX, DaisyUI)](developer_manual/explanation/decisions-ui-htmx.md) | |
| 109 | + - [Patron worker async](developer_manual/explanation/patron-worker-async.md) | |
| 110 | + | |
| 111 | +--- | |
| 112 | + | |
| 113 | +# Bibliothèque de templates | |
| 114 | + | |
| 115 | +- [Catalogue des templates](template/index.md) |
A
src/administration_manual
+1
-0
@@ -0,0 +1 @@
| 1 | +../administration_manual | |
| 1 | < \ No newline at end of file |
A
src/developer_manual
+1
-0
@@ -0,0 +1 @@
| 1 | +../developer_manual | |
| 1 | < \ No newline at end of file |
A
src/introduction.md
+36
-0
@@ -0,0 +1,36 @@
| 1 | +# Introduction | |
| 2 | + | |
| 3 | +## Qu'est-ce que gitrust ? | |
| 4 | + | |
| 5 | +**gitrust** est une forge Git self-hosted écrite en Rust, conçue pour les équipes de 3 à 20 personnes qui souhaitent maîtriser leur infrastructure de développement. Elle offre un serveur HTTP (`:4000`) et SSH (`:2222`), une CI intégrée via Dagger, la génération de SBOM avec Syft et l'intégration Dependency-Track, une gestion fine des permissions (4 rôles), la double authentification, des labels hiérarchiques et une conformité ANSSI PA-074. | |
| 6 | + | |
| 7 | +Une instance publique de démonstration est accessible sur [demo.gitrust.eu](https://demo.gitrust.eu). | |
| 8 | + | |
| 9 | +## À qui s'adresse cette documentation ? | |
| 10 | + | |
| 11 | +Cette documentation est organisée en quatre parties selon leurs publics respectifs : | |
| 12 | + | |
| 13 | +- **Manuel utilisateur** — pour les développeurs qui *utilisent* une instance gitrust existante : push/pull, pull requests, issues, CI, notifications. Prérequis : savoir utiliser Git en ligne de commande. | |
| 14 | +- **Manuel d'administration** — pour les ops et self-hosters qui déploient, configurent et maintiennent une instance en production. Prérequis : administration Linux, notions de réseau et TLS. | |
| 15 | +- **Manuel développeur** — pour les contributeurs au code gitrust et les développeurs qui construisent des intégrations sur l'API publique. Prérequis : Rust (pour contribuer) ou un langage client (pour l'API). | |
| 16 | +- **Bibliothèque de templates** — pour tous les profils, lorsqu'ils cherchent un point de départ prêt à l'emploi (fichiers `.env`, `docker-compose.yml`, configs reverse-proxy, scripts de backup, exemples de clients API). | |
| 17 | + | |
| 18 | +## Comment cette documentation est-elle structurée ? | |
| 19 | + | |
| 20 | +Cette documentation suit le cadre **Diátaxis**, qui distingue quatre types de contenu selon le besoin du lecteur : | |
| 21 | + | |
| 22 | +| Type | Quand l'utiliser | Exemples | | |
| 23 | +|---|---|---| | |
| 24 | +| **Tutoriels** | Quand vous apprenez | Installer gitrust, créer votre premier dépôt | | |
| 25 | +| **Guides pratiques** | Quand vous résolvez un problème précis | Configurer SMTP, gérer les clés SSH | | |
| 26 | +| **Référence** | Quand vous cherchez une information technique | Variables d'environnement, schéma API REST | | |
| 27 | +| **Explication** | Quand vous voulez comprendre le pourquoi | Architecture des crates, modèle RBAC | | |
| 28 | + | |
| 29 | +Chaque manuel (utilisateur, administration, développeur) contient ces quatre types de contenu organisés de manière indépendante. | |
| 30 | + | |
| 31 | +## Naviguer dans la documentation | |
| 32 | + | |
| 33 | +- [Manuel utilisateur](user_manual/index.md) — collaborer sur gitrust en tant que développeur | |
| 34 | +- [Manuel d'administration](administration_manual/index.md) — déployer et exploiter une instance | |
| 35 | +- [Manuel développeur](developer_manual/index.md) — contribuer au code ou consommer l'API | |
| 36 | +- [Bibliothèque de templates](template/index.md) — configs et scripts copiables |
A
src/template
+1
-0
@@ -0,0 +1 @@
| 1 | +../template | |
| 1 | < \ No newline at end of file |
A
src/user_manual
+1
-0
@@ -0,0 +1 @@
| 1 | +../user_manual | |
| 1 | < \ No newline at end of file |
A
template/docker/docker-compose.minimal.yml
+101
-0
@@ -0,0 +1,101 @@
| 1 | +# ============================================================================= | |
| 2 | +# Gitrust — Docker Compose minimal (dev local / évaluation) | |
| 3 | +# ============================================================================= | |
| 4 | +# Usage : | |
| 5 | +# cp template/env/dev-local.env .env | |
| 6 | +# # Editer .env : JWT_SECRET (openssl rand -hex 32), ADMIN_PASSWORD | |
| 7 | +# docker compose up -d | |
| 8 | +# docker compose logs -f gitrust | |
| 9 | +# | |
| 10 | +# Ce fichier démarre uniquement les services indispensables : | |
| 11 | +# - gitrust : application principale (HTTP :4000, SSH :2222) | |
| 12 | +# - postgres : base de données PostgreSQL 15 | |
| 13 | +# | |
| 14 | +# Pour une stack production (Redis sessions, SMTP local, CI runner) : | |
| 15 | +# voir template/docker/docker-compose.production.yml | |
| 16 | +# ============================================================================= | |
| 17 | + | |
| 18 | +services: | |
| 19 | + | |
| 20 | + # --------------------------------------------------------------------------- | |
| 21 | + # gitrust — application principale | |
| 22 | + # --------------------------------------------------------------------------- | |
| 23 | + gitrust: | |
| 24 | + # Remplacer par l'image officielle publiée sur le registry du projet. | |
| 25 | + # Format attendu : ghcr.io/<org>/gitrust:<tag> | |
| 26 | + # Exemple : ghcr.io/gitrust/gitrust:latest | |
| 27 | + image: ghcr.io/gitrust/gitrust:latest # <AJUSTER_REGISTRY_ET_TAG> | |
| 28 | + | |
| 29 | + depends_on: | |
| 30 | + postgres: | |
| 31 | + condition: service_healthy | |
| 32 | + | |
| 33 | + ports: | |
| 34 | + # HTTP — interface web et API REST | |
| 35 | + - "4000:4000" | |
| 36 | + # SSH — git clone/push via SSH | |
| 37 | + - "2222:2222" | |
| 38 | + | |
| 39 | + volumes: | |
| 40 | + # Bare repos git (persistés entre redémarrages) | |
| 41 | + - gitrust_repos:/opt/gitrust/data/repos | |
| 42 | + # Clé hôte SSH (générée au premier démarrage, doit survivre aux redémarrages) | |
| 43 | + - gitrust_keys:/opt/gitrust/data | |
| 44 | + | |
| 45 | + env_file: | |
| 46 | + # Le .env doit être dans le même dossier que ce fichier (ou à la racine du projet). | |
| 47 | + # Variables critiques à renseigner avant le premier démarrage : | |
| 48 | + # DATABASE_URL, JWT_SECRET, ADMIN_PASSWORD | |
| 49 | + - ./.env | |
| 50 | + | |
| 51 | + restart: unless-stopped | |
| 52 | + | |
| 53 | + healthcheck: | |
| 54 | + test: ["CMD", "curl", "-f", "http://localhost:4000/api/v1/auth/me"] | |
| 55 | + interval: 30s | |
| 56 | + timeout: 10s | |
| 57 | + retries: 5 | |
| 58 | + start_period: 20s | |
| 59 | + | |
| 60 | + # --------------------------------------------------------------------------- | |
| 61 | + # postgres — base de données | |
| 62 | + # --------------------------------------------------------------------------- | |
| 63 | + postgres: | |
| 64 | + image: postgres:15-alpine | |
| 65 | + | |
| 66 | + environment: | |
| 67 | + # Ces valeurs doivent correspondre à DATABASE_URL dans .env. | |
| 68 | + # Format : postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} | |
| 69 | + POSTGRES_USER: gitrust | |
| 70 | + POSTGRES_PASSWORD: gitrust # <CHANGER_EN_PRODUCTION> | |
| 71 | + POSTGRES_DB: gitrust_dev | |
| 72 | + | |
| 73 | + volumes: | |
| 74 | + - postgres_data:/var/lib/postgresql/data | |
| 75 | + | |
| 76 | + # Ne pas exposer PostgreSQL sur le réseau hôte en production. | |
| 77 | + # Décommenter uniquement pour debug local (accès psql depuis l'hôte) : | |
| 78 | + # ports: | |
| 79 | + # - "127.0.0.1:5432:5432" | |
| 80 | + | |
| 81 | + restart: unless-stopped | |
| 82 | + | |
| 83 | + healthcheck: | |
| 84 | + test: ["CMD-SHELL", "pg_isready -U gitrust -d gitrust_dev"] | |
| 85 | + interval: 10s | |
| 86 | + timeout: 5s | |
| 87 | + retries: 5 | |
| 88 | + | |
| 89 | +# ----------------------------------------------------------------------------- | |
| 90 | +# Volumes nommés — persistés sur le système hôte | |
| 91 | +# ----------------------------------------------------------------------------- | |
| 92 | +volumes: | |
| 93 | + # Bare repos git : contient tous les dépôts hébergés | |
| 94 | + gitrust_repos: | |
| 95 | + | |
| 96 | + # Clé hôte SSH ed25519 — NE PAS SUPPRIMER après le premier démarrage. | |
| 97 | + # La supprimer invalide les known_hosts de tous les utilisateurs. | |
| 98 | + gitrust_keys: | |
| 99 | + | |
| 100 | + # Données PostgreSQL | |
| 101 | + postgres_data: |
A
template/env/dev-local.env
+173
-0
@@ -0,0 +1,173 @@
| 1 | +# ============================================================================= | |
| 2 | +# Gitrust — Configuration de developpement local | |
| 3 | +# ============================================================================= | |
| 4 | +# Usage : | |
| 5 | +# cp template/env/dev-local.env .env | |
| 6 | +# $EDITOR .env # ajuster DATABASE_URL, JWT_SECRET, ADMIN_PASSWORD | |
| 7 | +# docker compose up -d # demarre postgres puis gitrust | |
| 8 | +# | |
| 9 | +# Ce fichier cible un poste de dev local avec Docker Compose. | |
| 10 | +# NE PAS utiliser tel quel en production — voir template/env/production-mono-machine.env | |
| 11 | +# ============================================================================= | |
| 12 | + | |
| 13 | + | |
| 14 | +# ============================================================================= | |
| 15 | +# 1. BASE DE DONNEES | |
| 16 | +# ============================================================================= | |
| 17 | +# Valeurs par defaut compatibles avec docker-compose.minimal.yml (service postgres). | |
| 18 | +# Le mot de passe "gitrust" est acceptable en dev local uniquement. | |
| 19 | +DATABASE_URL=postgres://gitrust:gitrust@localhost:5432/gitrust_dev | |
| 20 | + | |
| 21 | + | |
| 22 | +# ============================================================================= | |
| 23 | +# 2. SERVEUR HTTP | |
| 24 | +# ============================================================================= | |
| 25 | +# Accessible depuis localhost et le LAN local (pratique pour tester sur mobile). | |
| 26 | +SERVER_HOST=0.0.0.0 | |
| 27 | +SERVER_PORT=4000 | |
| 28 | + | |
| 29 | + | |
| 30 | +# ============================================================================= | |
| 31 | +# 3. LOGGING | |
| 32 | +# ============================================================================= | |
| 33 | +# Mode debug : toutes les requetes, migrations, sessions affichees. | |
| 34 | +# Syntaxe avancee : "info,gitrust_core=debug,sea_orm=warn" | |
| 35 | +RUST_LOG=debug | |
| 36 | + | |
| 37 | + | |
| 38 | +# ============================================================================= | |
| 39 | +# 4. SERVEUR SSH GIT | |
| 40 | +# ============================================================================= | |
| 41 | +# Cle hote generee automatiquement au premier demarrage si absente. | |
| 42 | +# En dev : chemin relatif OK. En prod : chemin absolu obligatoire. | |
| 43 | +# Permissions requises : 600, proprietaire = user qui lance gitrust. | |
| 44 | +SSH_HOST_KEY_PATH=./data/ssh_host_ed25519_key | |
| 45 | + | |
| 46 | +# Port SSH non-privilegie — pas de conflit avec sshd systeme (port 22). | |
| 47 | +SSH_PORT=2222 | |
| 48 | +SSH_LISTEN_ADDR=0.0.0.0 | |
| 49 | + | |
| 50 | +# Affiché dans l'UI pour les instructions "Clone via SSH". | |
| 51 | +SSH_PUBLIC_HOST=localhost | |
| 52 | + | |
| 53 | + | |
| 54 | +# ============================================================================= | |
| 55 | +# 5. JWT & AUTHENTIFICATION | |
| 56 | +# ============================================================================= | |
| 57 | +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| 58 | +# JWT_SECRET DOIT etre regenere avant tout usage reel. | |
| 59 | +# Commande : openssl rand -hex 32 | |
| 60 | +# Les valeurs generiques ("change-me", "my-secret-key", etc.) sont REJETEES | |
| 61 | +# au demarrage par AuthConfig::from_env(). | |
| 62 | +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| 63 | +JWT_SECRET=<REMPLACER_openssl_rand_-hex_32> | |
| 64 | + | |
| 65 | +JWT_EXPIRATION_MINUTES=15 | |
| 66 | +JWT_ISSUER=gitrust-dev | |
| 67 | +REFRESH_TOKEN_EXPIRATION_DAYS=7 | |
| 68 | +REMEMBER_ME_EXPIRATION_DAYS=30 | |
| 69 | + | |
| 70 | + | |
| 71 | +# ============================================================================= | |
| 72 | +# 6. SESSIONS | |
| 73 | +# ============================================================================= | |
| 74 | +SESSION_TIMEOUT_MINUTES=30 | |
| 75 | +# seaorm : persiste en base PostgreSQL — recommande meme en dev. | |
| 76 | +# memory : volatil, perdu au redemarrage (dev ultra-rapide uniquement). | |
| 77 | +SESSION_BACKEND=seaorm | |
| 78 | + | |
| 79 | + | |
| 80 | +# ============================================================================= | |
| 81 | +# 7. RATE LIMITING — assoupli pour les tests | |
| 82 | +# ============================================================================= | |
| 83 | +# Valeurs larges pour ne pas bloquer les tests intensifs en dev. | |
| 84 | +# voir .env.example ligne 134 pour les valeurs de production recommandees. | |
| 85 | +RATE_LIMIT_LOGIN_PER_MINUTE=60 | |
| 86 | +RATE_LIMIT_REFRESH_PER_MINUTE=120 | |
| 87 | +RATE_LIMIT_GENERAL_PER_MINUTE=1000 | |
| 88 | + | |
| 89 | + | |
| 90 | +# ============================================================================= | |
| 91 | +# 8. COOKIES & DEBUG | |
| 92 | +# ============================================================================= | |
| 93 | +# APP_DEBUG=true desactive les cookies Secure pour HTTP local. | |
| 94 | +# Ne jamais mettre true en production. | |
| 95 | +APP_DEBUG=true | |
| 96 | +COOKIE_SECURE=false | |
| 97 | +COOKIE_SAME_SITE=Lax | |
| 98 | + | |
| 99 | + | |
| 100 | +# ============================================================================= | |
| 101 | +# 9. ADMIN INITIAL | |
| 102 | +# ============================================================================= | |
| 103 | +# Cree l'utilisateur admin au premier demarrage si la table users est vide. | |
| 104 | +ADMIN_USERNAME=admin | |
| 105 | +ADMIN_EMAIL=admin@localhost.dev | |
| 106 | +# Remplacer par un mot de passe quelconque en dev (min 8 chars). | |
| 107 | +ADMIN_PASSWORD=<REMPLACER_MOT_DE_PASSE_DEV> | |
| 108 | + | |
| 109 | + | |
| 110 | +# ============================================================================= | |
| 111 | +# 10. EMAIL SMTP — desactive en dev | |
| 112 | +# ============================================================================= | |
| 113 | +# SMTP non configure = gitrust demarre, mais les emails ne partent pas. | |
| 114 | +# Pour tester les emails en local, utiliser Mailpit (docker run -p 1025:1025 -p 8025:8025 axllent/mailpit). | |
| 115 | +# Puis decommenter les lignes ci-dessous : | |
| 116 | +# SMTP_HOST=localhost | |
| 117 | +# SMTP_PORT=1025 | |
| 118 | +# SMTP_USER=dev | |
| 119 | +# SMTP_PASSWORD=dev | |
| 120 | +# SMTP_FROM=noreply@localhost.dev | |
| 121 | +# SMTP_FROM_NAME=Gitrust Dev | |
| 122 | +# SMTP_USE_TLS=false | |
| 123 | +# SMTP_USE_STARTTLS=false | |
| 124 | +# SMTP_ACCEPT_INVALID_CERTS=true | |
| 125 | +# EMAIL_BASE_URL=http://localhost:4000 | |
| 126 | +EMAIL_VALIDATION_REQUIRED=false | |
| 127 | + | |
| 128 | + | |
| 129 | +# ============================================================================= | |
| 130 | +# 11. INSCRIPTION | |
| 131 | +# ============================================================================= | |
| 132 | +# Ouvert en dev pour faciliter les tests multi-utilisateurs. | |
| 133 | +ALLOW_REGISTRATION=true | |
| 134 | + | |
| 135 | + | |
| 136 | +# ============================================================================= | |
| 137 | +# 12. APPLICATION | |
| 138 | +# ============================================================================= | |
| 139 | +APP_NAME="Gitrust Dev" | |
| 140 | +DEFAULT_LOCALE=fr | |
| 141 | + | |
| 142 | + | |
| 143 | +# ============================================================================= | |
| 144 | +# 15. DEPOTS GIT | |
| 145 | +# ============================================================================= | |
| 146 | +# Chemin relatif acceptable en dev (binaire lance depuis la racine du projet). | |
| 147 | +# En prod : chemin absolu obligatoire (/opt/gitrust/data/repos). | |
| 148 | +GIT_REPOS_BASE_PATH=./data/repos | |
| 149 | + | |
| 150 | + | |
| 151 | +# ============================================================================= | |
| 152 | +# 18. CI/CD DAGGER — desactive en dev par defaut | |
| 153 | +# ============================================================================= | |
| 154 | +# Mettre CI_ENABLED=true uniquement si dagger est installe et teste localement. | |
| 155 | +CI_ENABLED=false | |
| 156 | +CI_MAX_CONCURRENT=2 | |
| 157 | +CI_DEFAULT_TIMEOUT=3600 | |
| 158 | +CI_WORKSPACE_PATH=/tmp/gitrust-ci | |
| 159 | +CI_LOG_RETENTION_DAYS=7 | |
| 160 | + | |
| 161 | + | |
| 162 | +# ============================================================================= | |
| 163 | +# 20. IMPORT DE DEPOTS EXTERNES | |
| 164 | +# ============================================================================= | |
| 165 | +IMPORT_MAX_CONCURRENT=1 | |
| 166 | +IMPORT_TIMEOUT_SECS=1800 | |
| 167 | + | |
| 168 | + | |
| 169 | +# ============================================================================= | |
| 170 | +# 21. SBOM / DEPENDENCY-TRACK — desactive en dev | |
| 171 | +# ============================================================================= | |
| 172 | +CI_SBOM_ENABLED=false | |
| 173 | +CI_DTRACK_ENABLED=false |
A
template/index.md
+101
-0
@@ -0,0 +1,101 @@
| 1 | +# Bibliothèque de templates gitrust | |
| 2 | + | |
| 3 | +Bienvenue dans l'atelier gitrust. Chaque fichier ici est **standalone et copiable tel quel** — un fichier, un cas d'usage. Les commentaires internes suffisent à l'adapter. Pour les explications pédagogiques, référez-vous aux manuels qui pointent vers ces templates. | |
| 4 | + | |
| 5 | +> **Convention** : copiez le fichier qui correspond à votre cas, adaptez les valeurs marquées `CHANGE_ME`, puis supprimez les commentaires si vous le souhaitez. Ne modifiez pas les fichiers dans ce dépôt — travaillez toujours sur une copie locale. | |
| 6 | + | |
| 7 | +--- | |
| 8 | + | |
| 9 | +## Fichiers d'environnement (`env/`) | |
| 10 | + | |
| 11 | +| Fichier | Cas d'usage | | |
| 12 | +|---------|-------------| | |
| 13 | +| [`env/dev-local.env`](env/dev-local.env) | Instance de développement local sur `localhost:4000` — PostgreSQL local, pas de TLS, debug activé | | |
| 14 | +| [`env/production-mono-machine.env`](env/production-mono-machine.env) | Production mono-machine derrière reverse-proxy — PostgreSQL, SMTP, Redis sessions, TLS délégué | | |
| 15 | +| [`env/production-ci-heavy.env`](env/production-ci-heavy.env) | Production avec CI runners distants intensifs — tuning pool de connexions, rate limiting ajusté | | |
| 16 | +| [`env/tests-e2e.env`](env/tests-e2e.env) | Environnement E2E Playwright — base éphémère, seed de données, SMTP mock | | |
| 17 | + | |
| 18 | +--- | |
| 19 | + | |
| 20 | +## Stacks Docker (`docker/`) | |
| 21 | + | |
| 22 | +| Fichier | Cas d'usage | | |
| 23 | +|---------|-------------| | |
| 24 | +| [`docker/docker-compose.minimal.yml`](docker/docker-compose.minimal.yml) | Stack minimale : gitrust + PostgreSQL uniquement — idéale pour l'évaluation et les tutoriels | | |
| 25 | +| [`docker/docker-compose.production.yml`](docker/docker-compose.production.yml) | Stack production : gitrust + PostgreSQL + Redis sessions + relay SMTP Postfix | | |
| 26 | +| [`docker/docker-compose.with-ci-runner.yml`](docker/docker-compose.with-ci-runner.yml) | Stack production + CI runner Dagger en sidecar — pour instances avec builds fréquents | | |
| 27 | +| [`docker/podman-quadlet.container`](docker/podman-quadlet.container) | Alternative Podman Quadlet — déploiement rootless systemd-native sans Docker daemon | | |
| 28 | + | |
| 29 | +--- | |
| 30 | + | |
| 31 | +## Reverse-proxy (`reverse-proxy/`) | |
| 32 | + | |
| 33 | +| Fichier | Cas d'usage | | |
| 34 | +|---------|-------------| | |
| 35 | +| [`reverse-proxy/nginx-tls.conf`](reverse-proxy/nginx-tls.conf) | Nginx avec TLS Let's Encrypt — virtual host gitrust, headers de sécurité, proxy WebSocket SSE | | |
| 36 | +| [`reverse-proxy/caddy-Caddyfile`](reverse-proxy/caddy-Caddyfile) | Caddyfile — TLS automatique, configuration minimale, idéal pour les petites instances | | |
| 37 | +| [`reverse-proxy/traefik-dynamic.yml`](reverse-proxy/traefik-dynamic.yml) | Traefik config dynamique — intégration labels Docker, middlewares rate-limit et auth | | |
| 38 | + | |
| 39 | +--- | |
| 40 | + | |
| 41 | +## Systemd (`systemd/`) | |
| 42 | + | |
| 43 | +| Fichier | Cas d'usage | | |
| 44 | +|---------|-------------| | |
| 45 | +| [`systemd/gitrust.service`](systemd/gitrust.service) | Service systemd avec hardening AppArmor/seccomp — pour déploiement binaire natif sans Docker | | |
| 46 | +| [`systemd/gitrust-backup.timer`](systemd/gitrust-backup.timer) | Timer systemd de sauvegarde quotidienne — déclenche `backup.sh` à 2h00 avec journalisation | | |
| 47 | + | |
| 48 | +--- | |
| 49 | + | |
| 50 | +## Configurations CI (`.gitrust-ci.yml`) (`ci/`) | |
| 51 | + | |
| 52 | +| Fichier | Cas d'usage | | |
| 53 | +|---------|-------------| | |
| 54 | +| [`ci/rust.gitrust-ci.yml`](ci/rust.gitrust-ci.yml) | Pipeline CI pour projet Rust — fmt, clippy, test, audit de dépendances, SBOM | | |
| 55 | +| [`ci/go.gitrust-ci.yml`](ci/go.gitrust-ci.yml) | Pipeline CI pour projet Go — vet, staticcheck, test, build multi-arch | | |
| 56 | +| [`ci/python.gitrust-ci.yml`](ci/python.gitrust-ci.yml) | Pipeline CI pour projet Python — ruff, mypy, pytest, packaging wheel | | |
| 57 | +| [`ci/node.gitrust-ci.yml`](ci/node.gitrust-ci.yml) | Pipeline CI pour projet Node.js — ESLint, Vitest, build, audit npm | | |
| 58 | +| [`ci/dagger-power-mode/dagger.json`](ci/dagger-power-mode/dagger.json) | Squelette Dagger Power Mode — module Go minimal à étendre pour pipelines complexes | | |
| 59 | +| [`ci/dagger-power-mode/main.go`](ci/dagger-power-mode/main.go) | Module Dagger Go — fonctions build/test/publish prêtes à adapter | | |
| 60 | + | |
| 61 | +--- | |
| 62 | + | |
| 63 | +## Scripts de sauvegarde et restauration (`backup/`) | |
| 64 | + | |
| 65 | +| Fichier | Cas d'usage | | |
| 66 | +|---------|-------------| | |
| 67 | +| [`backup/backup.sh`](backup/backup.sh) | Sauvegarde complète — `pg_dump` + `rsync` des dépôts bare + copie des clés SSH host | | |
| 68 | +| [`backup/restore.sh`](backup/restore.sh) | Restauration complète depuis une archive de sauvegarde — avec vérification d'intégrité | | |
| 69 | + | |
| 70 | +--- | |
| 71 | + | |
| 72 | +## Clients API d'exemple (`api-clients/`) | |
| 73 | + | |
| 74 | +Ces exemples illustrent l'authentification par Personal Access Token (PAT) et les opérations CRUD de base sur l'API REST gitrust v1. | |
| 75 | + | |
| 76 | +| Fichier | Cas d'usage | | |
| 77 | +|---------|-------------| | |
| 78 | +| [`api-clients/python-create-repo.py`](api-clients/python-create-repo.py) | Client Python — créer un dépôt via l'API v1 avec `httpx` et PAT | | |
| 79 | +| [`api-clients/rust-list-repos.rs`](api-clients/rust-list-repos.rs) | Client Rust — lister les dépôts avec pagination via `reqwest` et PAT | | |
| 80 | +| [`api-clients/curl-pat-auth.sh`](api-clients/curl-pat-auth.sh) | Shell curl — exemples d'authentification PAT, GET/POST/DELETE sur les endpoints principaux | | |
| 81 | + | |
| 82 | +--- | |
| 83 | + | |
| 84 | +## Scripts de migration (`migration/`) | |
| 85 | + | |
| 86 | +| Fichier | Cas d'usage | | |
| 87 | +|---------|-------------| | |
| 88 | +| [`migration/from-gitea.sh`](migration/from-gitea.sh) | Import en masse depuis Gitea — dépôts, membres, issues via le worker d'import gitrust | | |
| 89 | +| [`migration/from-forgejo.sh`](migration/from-forgejo.sh) | Import en masse depuis Forgejo — même mécanique, adaptée à l'API Forgejo | | |
| 90 | + | |
| 91 | +--- | |
| 92 | + | |
| 93 | +## Comment utiliser ces templates depuis les manuels | |
| 94 | + | |
| 95 | +Les manuels narratifs pointent vers ces fichiers depuis leurs sections how-to. Par exemple : | |
| 96 | + | |
| 97 | +- `administration_manual/how-to/configurer-smtp.md` → *« Copiez `template/env/production-mono-machine.env` puis... »* | |
| 98 | +- `administration_manual/tutorials/01-installation-docker.md` → *« La stack s'appuie sur `template/docker/docker-compose.minimal.yml` »* | |
| 99 | +- `developer_manual/how-to/implementer-endpoint-api.md` → *« Testez avec `template/api-clients/curl-pat-auth.sh` »* | |
| 100 | + | |
| 101 | +Les templates ne contiennent pas d'explication pédagogique — tout le contexte se trouve dans les manuels. |
A
template/reverse-proxy/nginx-tls.conf
+208
-0
@@ -0,0 +1,208 @@
| 1 | +# ============================================================================= | |
| 2 | +# Gitrust — Reverse proxy Nginx avec TLS (Let's Encrypt) | |
| 3 | +# ============================================================================= | |
| 4 | +# Déploiement : | |
| 5 | +# sudo cp template/reverse-proxy/nginx-tls.conf /etc/nginx/sites-available/gitrust | |
| 6 | +# sudo ln -s /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust | |
| 7 | +# sudo nginx -t && sudo systemctl reload nginx | |
| 8 | +# | |
| 9 | +# TLS (Let's Encrypt, après que le bloc HTTP ci-dessous soit actif) : | |
| 10 | +# sudo certbot --nginx -d <YOUR_DOMAIN> | |
| 11 | +# | |
| 12 | +# SSH git : | |
| 13 | +# Nginx HTTP ne peut pas proxifier SSH. Deux options : | |
| 14 | +# 1) Exposer le port 2222 directement dans le firewall (recommandé, simple) | |
| 15 | +# 2) Proxy stream nginx sur :22 → 127.0.0.1:2222 (voir commentaire en bas) | |
| 16 | +# Prérequis : paquet libnginx-mod-stream + bloc stream{} dans nginx.conf | |
| 17 | +# ============================================================================= | |
| 18 | + | |
| 19 | +upstream gitrust_backend { | |
| 20 | + server 127.0.0.1:4000; | |
| 21 | + keepalive 32; | |
| 22 | +} | |
| 23 | + | |
| 24 | +# ============================================================================= | |
| 25 | +# HTTP — redirection HTTPS + ACME challenge Let's Encrypt | |
| 26 | +# ============================================================================= | |
| 27 | +server { | |
| 28 | + listen 80; | |
| 29 | + listen [::]:80; | |
| 30 | + server_name <YOUR_DOMAIN>; # Remplacer par le FQDN de l'instance | |
| 31 | + | |
| 32 | + # Répertoire de validation certbot — doit être accessible avant TLS | |
| 33 | + location /.well-known/acme-challenge/ { | |
| 34 | + root /var/www/html; | |
| 35 | + } | |
| 36 | + | |
| 37 | + # Tout le reste → HTTPS permanent | |
| 38 | + location / { | |
| 39 | + return 301 https://$host$request_uri; | |
| 40 | + } | |
| 41 | +} | |
| 42 | + | |
| 43 | +# ============================================================================= | |
| 44 | +# HTTPS — reverse proxy vers gitrust | |
| 45 | +# ============================================================================= | |
| 46 | +server { | |
| 47 | + listen 443 ssl; | |
| 48 | + listen [::]:443 ssl; | |
| 49 | + # Syntaxe nginx >= 1.25. Pour nginx <= 1.24, remplacer les deux lignes | |
| 50 | + # listen ci-dessus par : | |
| 51 | + # listen 443 ssl http2; | |
| 52 | + # listen [::]:443 ssl http2; | |
| 53 | + http2 on; | |
| 54 | + server_name <YOUR_DOMAIN>; # Remplacer par le FQDN de l'instance | |
| 55 | + | |
| 56 | + # ------------------------------------------------------------------------- | |
| 57 | + # TLS — certificats Let's Encrypt (remplis automatiquement par certbot) | |
| 58 | + # ------------------------------------------------------------------------- | |
| 59 | + # Décommenter après : sudo certbot --nginx -d <YOUR_DOMAIN> | |
| 60 | + # ssl_certificate /etc/letsencrypt/live/<YOUR_DOMAIN>/fullchain.pem; | |
| 61 | + # ssl_certificate_key /etc/letsencrypt/live/<YOUR_DOMAIN>/privkey.pem; | |
| 62 | + # include /etc/letsencrypt/options-ssl-nginx.conf; | |
| 63 | + # ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; | |
| 64 | + | |
| 65 | + # Certificat auto-signé pour valider la config avant certbot (commenter après) | |
| 66 | + ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; | |
| 67 | + ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; | |
| 68 | + | |
| 69 | + # Hardening TLS | |
| 70 | + ssl_protocols TLSv1.2 TLSv1.3; | |
| 71 | + ssl_prefer_server_ciphers on; | |
| 72 | + ssl_session_cache shared:SSL:10m; | |
| 73 | + ssl_session_timeout 1d; | |
| 74 | + | |
| 75 | + # ------------------------------------------------------------------------- | |
| 76 | + # En-têtes de sécurité | |
| 77 | + # ------------------------------------------------------------------------- | |
| 78 | + # HSTS : force HTTPS pendant 1 an, inclut sous-domaines. | |
| 79 | + # Attention : n'activer includeSubDomains que si TOUS les sous-domaines ont TLS. | |
| 80 | + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |
| 81 | + | |
| 82 | + # Empêche le navigateur de détecter automatiquement le type MIME (MIME sniffing) | |
| 83 | + add_header X-Content-Type-Options "nosniff" always; | |
| 84 | + | |
| 85 | + # Politique referrer : envoie l'origine complète pour requêtes same-origin, | |
| 86 | + # uniquement l'origine (sans path) pour requêtes cross-origin HTTPS. | |
| 87 | + add_header Referrer-Policy "strict-origin-when-cross-origin" always; | |
| 88 | + | |
| 89 | + # Empêche l'intégration dans des iframes d'autres origines | |
| 90 | + add_header X-Frame-Options "SAMEORIGIN" always; | |
| 91 | + | |
| 92 | + # ------------------------------------------------------------------------- | |
| 93 | + # Taille max des corps de requête | |
| 94 | + # ------------------------------------------------------------------------- | |
| 95 | + # 1G pour les git push HTTP de gros dépôts (monorepos, dépôts avec LFS, | |
| 96 | + # binaires commités). Réduire si l'espace disque est contraint. | |
| 97 | + # La location git spécifique ci-dessous passe à 2G pour les push volumineux. | |
| 98 | + client_max_body_size 1G; | |
| 99 | + client_body_buffer_size 128k; | |
| 100 | + | |
| 101 | + # ------------------------------------------------------------------------- | |
| 102 | + # Timeouts étendus pour clone/push de gros dépôts | |
| 103 | + # ------------------------------------------------------------------------- | |
| 104 | + proxy_connect_timeout 300s; | |
| 105 | + proxy_send_timeout 3600s; | |
| 106 | + proxy_read_timeout 3600s; | |
| 107 | + send_timeout 3600s; | |
| 108 | + | |
| 109 | + # ------------------------------------------------------------------------- | |
| 110 | + # Logs | |
| 111 | + # ------------------------------------------------------------------------- | |
| 112 | + access_log /var/log/nginx/gitrust.access.log; | |
| 113 | + error_log /var/log/nginx/gitrust.error.log warn; | |
| 114 | + | |
| 115 | + # ========================================================================= | |
| 116 | + # Route principale — toutes les pages et l'API REST | |
| 117 | + # ========================================================================= | |
| 118 | + location / { | |
| 119 | + proxy_pass http://gitrust_backend; | |
| 120 | + proxy_http_version 1.1; | |
| 121 | + | |
| 122 | + # En-têtes forwarded | |
| 123 | + proxy_set_header Host $host; | |
| 124 | + proxy_set_header X-Real-IP $remote_addr; | |
| 125 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 126 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 127 | + proxy_set_header X-Forwarded-Host $host; | |
| 128 | + proxy_set_header X-Forwarded-Port $server_port; | |
| 129 | + | |
| 130 | + # Keep-alive vers l'upstream (connexion réutilisée) | |
| 131 | + proxy_set_header Connection ""; | |
| 132 | + | |
| 133 | + # SSE et WebSocket — désactiver la mise en tampon pour : | |
| 134 | + # - notifications temps réel (/notifications/stream) | |
| 135 | + # - logs CI en streaming (/repos/.../ci/.../logs) | |
| 136 | + # - HTMX SSE | |
| 137 | + proxy_buffering off; | |
| 138 | + proxy_cache off; | |
| 139 | + proxy_set_header X-Accel-Buffering no; | |
| 140 | + } | |
| 141 | + | |
| 142 | + # ========================================================================= | |
| 143 | + # Git smart HTTP — clone et push via HTTPS | |
| 144 | + # ========================================================================= | |
| 145 | + # Pattern : /<owner>/<repo>.git/info/refs, /git-upload-pack, /git-receive-pack | |
| 146 | + location ~ ^/[^/]+/[^/]+\.git/ { | |
| 147 | + proxy_pass http://gitrust_backend; | |
| 148 | + proxy_http_version 1.1; | |
| 149 | + | |
| 150 | + proxy_set_header Host $host; | |
| 151 | + proxy_set_header X-Real-IP $remote_addr; | |
| 152 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 153 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 154 | + | |
| 155 | + # Désactiver la mise en tampon côté client ET serveur pour les push/clone | |
| 156 | + proxy_buffering off; | |
| 157 | + proxy_request_buffering off; | |
| 158 | + proxy_cache off; | |
| 159 | + | |
| 160 | + # Push de gros dépôts peut dépasser 1G (monorepos lourds) | |
| 161 | + client_max_body_size 2G; | |
| 162 | + } | |
| 163 | + | |
| 164 | + # ========================================================================= | |
| 165 | + # Assets statiques — optionnel : servir directement depuis le filesystem | |
| 166 | + # ========================================================================= | |
| 167 | + # Décommenter si les fichiers /opt/gitrust/static/ sont lisibles par www-data. | |
| 168 | + # Réduit la charge sur gitrust pour CSS/JS/images (cache navigateur 7 jours). | |
| 169 | + # location ^~ /static/ { | |
| 170 | + # alias /opt/gitrust/static/; | |
| 171 | + # expires 7d; | |
| 172 | + # add_header Cache-Control "public, immutable"; | |
| 173 | + # try_files $uri @gitrust; | |
| 174 | + # } | |
| 175 | + # location @gitrust { | |
| 176 | + # proxy_pass http://gitrust_backend; | |
| 177 | + # } | |
| 178 | +} | |
| 179 | + | |
| 180 | +# ============================================================================= | |
| 181 | +# BONUS — Proxy SSH git via nginx stream (port 22 → gitrust SSH :2222) | |
| 182 | +# ============================================================================= | |
| 183 | +# ATTENTION : ce bloc `stream {}` est de niveau RACINE nginx et NE PEUT PAS | |
| 184 | +# être placé dans ce fichier (qui est inclus dans le bloc http{}). | |
| 185 | +# Le décommenter ici provoquerait : nginx: [emerg] "stream" directive is not allowed here | |
| 186 | +# | |
| 187 | +# Méthode correcte : ajouter le bloc ci-dessous À LA FIN de /etc/nginx/nginx.conf | |
| 188 | +# (hors du bloc http{}), ou dans /etc/nginx/conf.d-stream/gitrust-ssh.conf | |
| 189 | +# inclus au niveau racine. | |
| 190 | +# | |
| 191 | +# Prérequis : | |
| 192 | +# - paquet libnginx-mod-stream installé (apt install libnginx-mod-stream) | |
| 193 | +# - sshd système déplacé sur un autre port (ex: 2022) si l'hôte est aussi administré par SSH | |
| 194 | +# | |
| 195 | +# stream { | |
| 196 | +# upstream gitrust_ssh { | |
| 197 | +# server 127.0.0.1:2222; | |
| 198 | +# } | |
| 199 | +# server { | |
| 200 | +# listen 22; | |
| 201 | +# listen [::]:22; | |
| 202 | +# proxy_pass gitrust_ssh; | |
| 203 | +# proxy_timeout 1h; | |
| 204 | +# proxy_connect_timeout 30s; | |
| 205 | +# error_log /var/log/nginx/gitrust-ssh-stream.log; | |
| 206 | +# } | |
| 207 | +# } | |
| 208 | +# ============================================================================= |
A
template/systemd/gitrust.service
+112
-0
@@ -0,0 +1,112 @@
| 1 | +# ============================================================================= | |
| 2 | +# Gitrust — unité systemd avec hardening | |
| 3 | +# ============================================================================= | |
| 4 | +# Déploiement : | |
| 5 | +# sudo cp template/systemd/gitrust.service /etc/systemd/system/gitrust.service | |
| 6 | +# sudo systemctl daemon-reload | |
| 7 | +# sudo systemctl enable --now gitrust | |
| 8 | +# sudo systemctl status gitrust | |
| 9 | +# | |
| 10 | +# Prérequis : | |
| 11 | +# - Binaire installé dans /opt/gitrust/gitrust (chmod 755, owned by root) | |
| 12 | +# - Utilisateur et groupe système créés : | |
| 13 | +# sudo useradd --system --no-create-home --shell /usr/sbin/nologin gitrust | |
| 14 | +# - Répertoire de données créé et attribué : | |
| 15 | +# sudo mkdir -p /opt/gitrust/data/repos /opt/gitrust/data/ssh_keys | |
| 16 | +# sudo chown -R gitrust:gitrust /opt/gitrust/data | |
| 17 | +# - Fichier .env placé dans /opt/gitrust/.env (chmod 640, owned by root:gitrust) | |
| 18 | +# ============================================================================= | |
| 19 | + | |
| 20 | +[Unit] | |
| 21 | +Description=Gitrust - Self-hosted Git platform | |
| 22 | +Documentation=https://gitrust.eu/docs | |
| 23 | +After=network.target postgresql.service | |
| 24 | +# postgresql.service : décommenter si PostgreSQL tourne sur la même machine. | |
| 25 | +# Retirer si PostgreSQL est distant (le service ne doit pas bloquer au démarrage). | |
| 26 | +Wants=network.target | |
| 27 | + | |
| 28 | +[Service] | |
| 29 | +Type=simple | |
| 30 | +User=gitrust | |
| 31 | +Group=gitrust | |
| 32 | +WorkingDirectory=/opt/gitrust | |
| 33 | +EnvironmentFile=/opt/gitrust/.env | |
| 34 | +ExecStart=/opt/gitrust/gitrust | |
| 35 | +Restart=on-failure | |
| 36 | +RestartSec=5 | |
| 37 | + | |
| 38 | +# ------------------------------------------------------------------------- | |
| 39 | +# Hardening systemd | |
| 40 | +# ------------------------------------------------------------------------- | |
| 41 | + | |
| 42 | +# Interdit d'acquérir de nouveaux privilèges via execve (setuid/setgid binaires) | |
| 43 | +NoNewPrivileges=true | |
| 44 | + | |
| 45 | +# Système de fichiers racine en lecture seule (hors ReadWritePaths ci-dessous) | |
| 46 | +ProtectSystem=strict | |
| 47 | + | |
| 48 | +# Répertoires home des utilisateurs inaccessibles | |
| 49 | +ProtectHome=true | |
| 50 | + | |
| 51 | +# /tmp et /var/tmp privés et isolés du reste du système | |
| 52 | +PrivateTmp=true | |
| 53 | + | |
| 54 | +# Périphériques physiques inaccessibles (/dev/sda, /dev/mem, etc.) | |
| 55 | +PrivateDevices=true | |
| 56 | + | |
| 57 | +# Espace de noms réseau partagé avec l'hôte (gitrust a besoin du réseau) | |
| 58 | +# PrivateNetwork=false # valeur par défaut, laisser commenté | |
| 59 | + | |
| 60 | +# Protège le kernel et les paramètres systèmes (/proc/sys, /sys, etc.) | |
| 61 | +ProtectKernelTunables=true | |
| 62 | +ProtectKernelModules=true | |
| 63 | +ProtectKernelLogs=true | |
| 64 | +ProtectControlGroups=true | |
| 65 | + | |
| 66 | +# Restreint les appels système aux familles nécessaires pour Rust/tokio/git2 | |
| 67 | +SystemCallArchitectures=native | |
| 68 | + | |
| 69 | +# Limite les familles d'appels système autorisés | |
| 70 | +# @system-service couvre les appels standards pour un serveur (network, io, process) | |
| 71 | +SystemCallFilter=@system-service @network-io @file-system @io-event @process | |
| 72 | + | |
| 73 | +# Interdit d'écrire en mémoire exécutable (exploits JIT/shellcode) | |
| 74 | +MemoryDenyWriteExecute=true | |
| 75 | + | |
| 76 | +# Interdit de modifier les capabilities du processus | |
| 77 | +RestrictRealtime=true | |
| 78 | +LockPersonality=true | |
| 79 | + | |
| 80 | +# Limite les namespaces créables (gitrust n'a pas besoin de créer de namespaces) | |
| 81 | +RestrictNamespaces=true | |
| 82 | + | |
| 83 | +# ------------------------------------------------------------------------- | |
| 84 | +# Chemins en écriture — tout le reste est en lecture seule (ProtectSystem=strict) | |
| 85 | +# ------------------------------------------------------------------------- | |
| 86 | +# Repos git bare, clé hôte SSH, workspaces CI temporaires | |
| 87 | +ReadWritePaths=/opt/gitrust/data | |
| 88 | +# Workspace CI (si CI_WORKSPACE_PATH pointe ailleurs que /opt/gitrust/data) | |
| 89 | +# ReadWritePaths=/var/lib/gitrust-ci | |
| 90 | + | |
| 91 | +# ------------------------------------------------------------------------- | |
| 92 | +# Ports privilégiés (< 1024) | |
| 93 | +# ------------------------------------------------------------------------- | |
| 94 | +# Décommenter UNIQUEMENT si gitrust doit écouter directement sur :80 ou :22. | |
| 95 | +# En configuration normale (nginx devant, SSH sur :2222), cette ligne est inutile. | |
| 96 | +# AmbientCapabilities=CAP_NET_BIND_SERVICE | |
| 97 | + | |
| 98 | +# ------------------------------------------------------------------------- | |
| 99 | +# Journalisation | |
| 100 | +# ------------------------------------------------------------------------- | |
| 101 | +StandardOutput=journal | |
| 102 | +StandardError=journal | |
| 103 | +SyslogIdentifier=gitrust | |
| 104 | + | |
| 105 | +# ------------------------------------------------------------------------- | |
| 106 | +# Limites de ressources | |
| 107 | +# ------------------------------------------------------------------------- | |
| 108 | +# Nombre de fichiers ouverts — gros dépôts git2 + connexions SSH simultanées | |
| 109 | +LimitNOFILE=65536 | |
| 110 | + | |
| 111 | +[Install] | |
| 112 | +WantedBy=multi-user.target |
A
theme/.gitkeep
+0
-0
A
theme/mermaid-init.js
+39
-0
@@ -0,0 +1,39 @@
| 1 | +// This Source Code Form is subject to the terms of the Mozilla Public | |
| 2 | +// License, v. 2.0. If a copy of the MPL was not distributed with this | |
| 3 | +// file, You can obtain one at https://mozilla.org/MPL/2.0/. | |
| 4 | + | |
| 5 | +(() => { | |
| 6 | + const darkThemes = ['ayu', 'navy', 'coal']; | |
| 7 | + const lightThemes = ['light', 'rust']; | |
| 8 | + | |
| 9 | + const classList = document.getElementsByTagName('html')[0].classList; | |
| 10 | + | |
| 11 | + let lastThemeWasLight = true; | |
| 12 | + for (const cssClass of classList) { | |
| 13 | + if (darkThemes.includes(cssClass)) { | |
| 14 | + lastThemeWasLight = false; | |
| 15 | + break; | |
| 16 | + } | |
| 17 | + } | |
| 18 | + | |
| 19 | + const theme = lastThemeWasLight ? 'default' : 'dark'; | |
| 20 | + mermaid.initialize({ startOnLoad: true, theme }); | |
| 21 | + | |
| 22 | + // Simplest way to make mermaid re-render the diagrams in the new theme is via refreshing the page | |
| 23 | + | |
| 24 | + for (const darkTheme of darkThemes) { | |
| 25 | + document.getElementById(darkTheme).addEventListener('click', () => { | |
| 26 | + if (lastThemeWasLight) { | |
| 27 | + window.location.reload(); | |
| 28 | + } | |
| 29 | + }); | |
| 30 | + } | |
| 31 | + | |
| 32 | + for (const lightTheme of lightThemes) { | |
| 33 | + document.getElementById(lightTheme).addEventListener('click', () => { | |
| 34 | + if (!lastThemeWasLight) { | |
| 35 | + window.location.reload(); | |
| 36 | + } | |
| 37 | + }); | |
| 38 | + } | |
| 39 | +})(); |
A
theme/mermaid.min.js
+2609
-0
@@ -0,0 +1,2609 @@
| 1 | +/* MIT Licensed. Copyright (c) 2014 - 2022 Knut Sveidqvist */ | |
| 2 | +/* For license information please see https://github.com/mermaid-js/mermaid/blob/develop/LICENSE */ | |
| 3 | +"use strict";var __esbuild_esm_mermaid=(()=>{var B2e=Object.create;var by=Object.defineProperty;var F2e=Object.getOwnPropertyDescriptor;var $2e=Object.getOwnPropertyNames;var z2e=Object.getPrototypeOf,G2e=Object.prototype.hasOwnProperty;var o=(t,e)=>by(t,"name",{value:e,configurable:!0});var N=(t,e)=>()=>(t&&(e=t(t=0)),e);var Mi=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),hr=(t,e)=>{for(var r in e)by(t,r,{get:e[r],enumerable:!0})},L4=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of $2e(e))!G2e.call(t,i)&&i!==r&&by(t,i,{get:()=>e[i],enumerable:!(n=F2e(e,i))||n.enumerable});return t},Sr=(t,e,r)=>(L4(t,e,"default"),r&&L4(r,e,"default")),Sa=(t,e,r)=>(r=t!=null?B2e(z2e(t)):{},L4(e||!t||!t.__esModule?by(r,"default",{value:t,enumerable:!0}):r,t)),V2e=t=>L4(by({},"__esModule",{value:!0}),t);var R4=Mi((EC,SC)=>{"use strict";(function(t,e){typeof EC=="object"&&typeof SC<"u"?SC.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(EC,function(){"use strict";var t=1e3,e=6e4,r=36e5,n="millisecond",i="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|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,v={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:o(function(k){var L=["th","st","nd","rd"],R=k%100;return"["+k+(L[(R-20)%10]||L[R]||L[0])+"]"},"ordinal")},x=o(function(k,L,R){var O=String(k);return!O||O.length>=L?k:""+Array(L+1-O.length).join(R)+k},"m"),b={s:x,z:o(function(k){var L=-k.utcOffset(),R=Math.abs(L),O=Math.floor(R/60),M=R%60;return(L<=0?"+":"-")+x(O,2,"0")+":"+x(M,2,"0")},"z"),m:o(function k(L,R){if(L.date()<R.date())return-k(R,L);var O=12*(R.year()-L.year())+(R.month()-L.month()),M=L.clone().add(O,h),B=R-M<0,F=L.clone().add(O+(B?-1:1),h);return+(-(O+(R-M)/(B?M-F:F-M))||0)},"t"),a:o(function(k){return k<0?Math.ceil(k)||0:Math.floor(k)},"a"),p:o(function(k){return{M:h,y:d,w:u,d:l,D:p,h:s,m:a,s:i,ms:n,Q:f}[k]||String(k||"").toLowerCase().replace(/s$/,"")},"p"),u:o(function(k){return k===void 0},"u")},w="en",C={};C[w]=v;var T="$isDayjsObject",E=o(function(k){return k instanceof I||!(!k||!k[T])},"S"),A=o(function k(L,R,O){var M;if(!L)return w;if(typeof L=="string"){var B=L.toLowerCase();C[B]&&(M=B),R&&(C[B]=R,M=B);var F=L.split("-");if(!M&&F.length>1)return k(F[0])}else{var P=L.name;C[P]=L,M=P}return!O&&M&&(w=M),M||!O&&w},"t"),S=o(function(k,L){if(E(k))return k.clone();var R=typeof L=="object"?L:{};return R.date=k,R.args=arguments,new I(R)},"O"),_=b;_.l=A,_.i=E,_.w=function(k,L){return S(k,{locale:L.$L,utc:L.$u,x:L.$x,$offset:L.$offset})};var I=function(){function k(R){this.$L=A(R.locale,null,!0),this.parse(R),this.$x=this.$x||R.x||{},this[T]=!0}o(k,"M");var L=k.prototype;return L.parse=function(R){this.$d=function(O){var M=O.date,B=O.utc;if(M===null)return new Date(NaN);if(_.u(M))return new Date;if(M instanceof Date)return new Date(M);if(typeof M=="string"&&!/Z$/i.test(M)){var F=M.match(g);if(F){var P=F[2]-1||0,z=(F[7]||"0").substring(0,3);return B?new Date(Date.UTC(F[1],P,F[3]||1,F[4]||0,F[5]||0,F[6]||0,z)):new Date(F[1],P,F[3]||1,F[4]||0,F[5]||0,F[6]||0,z)}}return new Date(M)}(R),this.init()},L.init=function(){var R=this.$d;this.$y=R.getFullYear(),this.$M=R.getMonth(),this.$D=R.getDate(),this.$W=R.getDay(),this.$H=R.getHours(),this.$m=R.getMinutes(),this.$s=R.getSeconds(),this.$ms=R.getMilliseconds()},L.$utils=function(){return _},L.isValid=function(){return this.$d.toString()!==m},L.isSame=function(R,O){var M=S(R);return this.startOf(O)<=M&&M<=this.endOf(O)},L.isAfter=function(R,O){return S(R)<this.startOf(O)},L.isBefore=function(R,O){return this.endOf(O)<S(R)},L.$g=function(R,O,M){return _.u(R)?this[O]:this.set(M,R)},L.unix=function(){return Math.floor(this.valueOf()/1e3)},L.valueOf=function(){return this.$d.getTime()},L.startOf=function(R,O){var M=this,B=!!_.u(O)||O,F=_.p(R),P=o(function(le,he){var K=_.w(M.$u?Date.UTC(M.$y,he,le):new Date(M.$y,he,le),M);return B?K:K.endOf(l)},"l"),z=o(function(le,he){return _.w(M.toDate()[le].apply(M.toDate("s"),(B?[0,0,0,0]:[23,59,59,999]).slice(he)),M)},"$"),$=this.$W,H=this.$M,Q=this.$D,j="set"+(this.$u?"UTC":"");switch(F){case d:return B?P(1,0):P(31,11);case h:return B?P(1,H):P(0,H+1);case u:var ie=this.$locale().weekStart||0,ne=($<ie?$+7:$)-ie;return P(B?Q-ne:Q+(6-ne),H);case l:case p:return z(j+"Hours",0);case s:return z(j+"Minutes",1);case a:return z(j+"Seconds",2);case i:return z(j+"Milliseconds",3);default:return this.clone()}},L.endOf=function(R){return this.startOf(R,!1)},L.$set=function(R,O){var M,B=_.p(R),F="set"+(this.$u?"UTC":""),P=(M={},M[l]=F+"Date",M[p]=F+"Date",M[h]=F+"Month",M[d]=F+"FullYear",M[s]=F+"Hours",M[a]=F+"Minutes",M[i]=F+"Seconds",M[n]=F+"Milliseconds",M)[B],z=B===l?this.$D+(O-this.$W):O;if(B===h||B===d){var $=this.clone().set(p,1);$.$d[P](z),$.init(),this.$d=$.set(p,Math.min(this.$D,$.daysInMonth())).$d}else P&&this.$d[P](z);return this.init(),this},L.set=function(R,O){return this.clone().$set(R,O)},L.get=function(R){return this[_.p(R)]()},L.add=function(R,O){var M,B=this;R=Number(R);var F=_.p(O),P=o(function(H){var Q=S(B);return _.w(Q.date(Q.date()+Math.round(H*R)),B)},"y");if(F===h)return this.set(h,this.$M+R);if(F===d)return this.set(d,this.$y+R);if(F===l)return P(1);if(F===u)return P(7);var z=(M={},M[a]=e,M[s]=r,M[i]=t,M)[F]||1,$=this.$d.getTime()+R*z;return _.w($,this)},L.subtract=function(R,O){return this.add(-1*R,O)},L.format=function(R){var O=this,M=this.$locale();if(!this.isValid())return M.invalidDate||m;var B=R||"YYYY-MM-DDTHH:mm:ssZ",F=_.z(this),P=this.$H,z=this.$m,$=this.$M,H=M.weekdays,Q=M.months,j=M.meridiem,ie=o(function(he,K,X,te){return he&&(he[K]||he(O,B))||X[K].slice(0,te)},"h"),ne=o(function(he){return _.s(P%12||12,he,"0")},"d"),le=j||function(he,K,X){var te=he<12?"AM":"PM";return X?te.toLowerCase():te};return B.replace(y,function(he,K){return K||function(X){switch(X){case"YY":return String(O.$y).slice(-2);case"YYYY":return _.s(O.$y,4,"0");case"M":return $+1;case"MM":return _.s($+1,2,"0");case"MMM":return ie(M.monthsShort,$,Q,3);case"MMMM":return ie(Q,$);case"D":return O.$D;case"DD":return _.s(O.$D,2,"0");case"d":return String(O.$W);case"dd":return ie(M.weekdaysMin,O.$W,H,2);case"ddd":return ie(M.weekdaysShort,O.$W,H,3);case"dddd":return H[O.$W];case"H":return String(P);case"HH":return _.s(P,2,"0");case"h":return ne(1);case"hh":return ne(2);case"a":return le(P,z,!0);case"A":return le(P,z,!1);case"m":return String(z);case"mm":return _.s(z,2,"0");case"s":return String(O.$s);case"ss":return _.s(O.$s,2,"0");case"SSS":return _.s(O.$ms,3,"0");case"Z":return F}return null}(he)||F.replace(":","")})},L.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},L.diff=function(R,O,M){var B,F=this,P=_.p(O),z=S(R),$=(z.utcOffset()-this.utcOffset())*e,H=this-z,Q=o(function(){return _.m(F,z)},"D");switch(P){case d:B=Q()/12;break;case h:B=Q();break;case f:B=Q()/3;break;case u:B=(H-$)/6048e5;break;case l:B=(H-$)/864e5;break;case s:B=H/r;break;case a:B=H/e;break;case i:B=H/t;break;default:B=H}return M?B:_.a(B)},L.daysInMonth=function(){return this.endOf(h).$D},L.$locale=function(){return C[this.$L]},L.locale=function(R,O){if(!R)return this.$L;var M=this.clone(),B=A(R,O,!0);return B&&(M.$L=B),M},L.clone=function(){return _.w(this.$d,this)},L.toDate=function(){return new Date(this.valueOf())},L.toJSON=function(){return this.isValid()?this.toISOString():null},L.toISOString=function(){return this.$d.toISOString()},L.toString=function(){return this.$d.toUTCString()},k}(),D=I.prototype;return S.prototype=D,[["$ms",n],["$s",i],["$m",a],["$H",s],["$W",l],["$M",h],["$y",d],["$D",p]].forEach(function(k){D[k[1]]=function(L){return this.$g(L,k[0],k[1])}}),S.extend=function(k,L){return k.$i||(k(L,I,S),k.$i=!0),S},S.locale=A,S.isDayjs=E,S.unix=function(k){return S(1e3*k)},S.en=C[w],S.Ls=C,S.p={},S})});var CF,eu,Y,wy,bo,vt=N(()=>{"use strict";CF=Sa(R4(),1),eu={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Y={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},wy=o(function(t="fatal"){let e=eu.fatal;typeof t=="string"?t.toLowerCase()in eu&&(e=eu[t]):typeof t=="number"&&(e=t),Y.trace=()=>{},Y.debug=()=>{},Y.info=()=>{},Y.warn=()=>{},Y.error=()=>{},Y.fatal=()=>{},e<=eu.fatal&&(Y.fatal=console.error?console.error.bind(console,bo("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",bo("FATAL"))),e<=eu.error&&(Y.error=console.error?console.error.bind(console,bo("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",bo("ERROR"))),e<=eu.warn&&(Y.warn=console.warn?console.warn.bind(console,bo("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",bo("WARN"))),e<=eu.info&&(Y.info=console.info?console.info.bind(console,bo("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",bo("INFO"))),e<=eu.debug&&(Y.debug=console.debug?console.debug.bind(console,bo("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",bo("DEBUG"))),e<=eu.trace&&(Y.trace=console.debug?console.debug.bind(console,bo("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",bo("TRACE")))},"setLogLevel"),bo=o(t=>`%c${(0,CF.default)().format("ss.SSS")} : ${t} : `,"format")});var U2e,e0,CC,AF,N4=N(()=>{"use strict";U2e=Object.freeze({left:0,top:0,width:16,height:16}),e0=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),CC=Object.freeze({...U2e,...e0}),AF=Object.freeze({...CC,body:"",hidden:!1})});var H2e,_F,DF=N(()=>{"use strict";N4();H2e=Object.freeze({width:null,height:null}),_F=Object.freeze({...H2e,...e0})});var AC,M4,LF=N(()=>{"use strict";AC=o((t,e,r,n="")=>{let i=t.split(":");if(t.slice(0,1)==="@"){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let l=i.pop(),u=i.pop(),h={provider:i.length>0?i[0]:n,prefix:u,name:l};return e&&!M4(h)?null:h}let a=i[0],s=a.split("-");if(s.length>1){let l={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!M4(l)?null:l}if(r&&n===""){let l={provider:n,prefix:"",name:a};return e&&!M4(l,r)?null:l}return null},"stringToIcon"),M4=o((t,e)=>t?!!((e&&t.prefix===""||t.prefix)&&t.name):!1,"validateIconName")});function RF(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}var NF=N(()=>{"use strict";o(RF,"mergeIconTransformations")});function _C(t,e){let r=RF(t,e);for(let n in AF)n in e0?n in t&&!(n in r)&&(r[n]=e0[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}var MF=N(()=>{"use strict";N4();NF();o(_C,"mergeIconData")});function IF(t,e){let r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);function a(s){if(r[s])return i[s]=[];if(!(s in i)){i[s]=null;let l=n[s]&&n[s].parent,u=l&&a(l);u&&(i[s]=[l].concat(u))}return i[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(n))).forEach(a),i}var OF=N(()=>{"use strict";o(IF,"getIconsTree")});function PF(t,e,r){let n=t.icons,i=t.aliases||Object.create(null),a={};function s(l){a=_C(n[l]||i[l],a)}return o(s,"parse"),s(e),r.forEach(s),_C(t,a)}function DC(t,e){if(t.icons[e])return PF(t,e,[]);let r=IF(t,[e])[e];return r?PF(t,e,r):null}var BF=N(()=>{"use strict";MF();OF();o(PF,"internalGetIconData");o(DC,"getIconData")});function LC(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let n=t.split(W2e);if(n===null||!n.length)return t;let i=[],a=n.shift(),s=q2e.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?i.push(a):i.push(Math.ceil(l*e*r)/r)}else i.push(a);if(a=n.shift(),a===void 0)return i.join("");s=!s}}var W2e,q2e,FF=N(()=>{"use strict";W2e=/(-?[0-9.]*[0-9]+[0-9.]*)/g,q2e=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(LC,"calculateSize")});function Y2e(t,e="defs"){let r="",n=t.indexOf("<"+e);for(;n>=0;){let i=t.indexOf(">",n),a=t.indexOf("</"+e);if(i===-1||a===-1)break;let s=t.indexOf(">",a);if(s===-1)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(s+1)}return{defs:r,content:t}}function X2e(t,e){return t?"<defs>"+t+"</defs>"+e:e}function $F(t,e,r){let n=Y2e(t);return X2e(n.defs,e+n.content+r)}var zF=N(()=>{"use strict";o(Y2e,"splitSVGDefs");o(X2e,"mergeDefsAndContent");o($F,"wrapSVGContent")});function RC(t,e){let r={...CC,...t},n={..._F,...e},i={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,n].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,w=y.rotate;x?b?w+=2:(v.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),v.push("scale(-1 1)"),i.top=i.left=0):b&&(v.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),v.push("scale(1 -1)"),i.top=i.left=0);let C;switch(w<0&&(w-=Math.floor(w/4)*4),w=w%4,w){case 1:C=i.height/2+i.top,v.unshift("rotate(90 "+C.toString()+" "+C.toString()+")");break;case 2:v.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:C=i.width/2+i.left,v.unshift("rotate(-90 "+C.toString()+" "+C.toString()+")");break}w%2===1&&(i.left!==i.top&&(C=i.left,i.left=i.top,i.top=C),i.width!==i.height&&(C=i.width,i.width=i.height,i.height=C)),v.length&&(a=$F(a,'<g transform="'+v.join(" ")+'">',"</g>"))});let s=n.width,l=n.height,u=i.width,h=i.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=LC(d,u/h)):(f=s==="auto"?u:s,d=l===null?LC(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{j2e(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[i.left,i.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var j2e,GF=N(()=>{"use strict";N4();DF();FF();zF();j2e=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(RC,"iconToSVG")});function NC(t,e=Q2e){let r=[],n;for(;n=K2e.exec(t);)r.push(n[1]);if(!r.length)return t;let i="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(Z2e++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+i+"$3")}),t=t.replace(new RegExp(i,"g"),""),t}var K2e,Q2e,Z2e,VF=N(()=>{"use strict";K2e=/\sid="(\S+)"/g,Q2e="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),Z2e=0;o(NC,"replaceIDs")});function MC(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let n in e)r+=" "+n+'="'+e[n]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+r+">"+t+"</svg>"}var UF=N(()=>{"use strict";o(MC,"iconToHTML")});var WF=Mi((iit,HF)=>{"use strict";var t0=1e3,r0=t0*60,n0=r0*60,Wf=n0*24,J2e=Wf*7,exe=Wf*365.25;HF.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return txe(t);if(r==="number"&&isFinite(t))return e.long?nxe(t):rxe(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function txe(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*exe;case"weeks":case"week":case"w":return r*J2e;case"days":case"day":case"d":return r*Wf;case"hours":case"hour":case"hrs":case"hr":case"h":return r*n0;case"minutes":case"minute":case"mins":case"min":case"m":return r*r0;case"seconds":case"second":case"secs":case"sec":case"s":return r*t0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}o(txe,"parse");function rxe(t){var e=Math.abs(t);return e>=Wf?Math.round(t/Wf)+"d":e>=n0?Math.round(t/n0)+"h":e>=r0?Math.round(t/r0)+"m":e>=t0?Math.round(t/t0)+"s":t+"ms"}o(rxe,"fmtShort");function nxe(t){var e=Math.abs(t);return e>=Wf?I4(t,e,Wf,"day"):e>=n0?I4(t,e,n0,"hour"):e>=r0?I4(t,e,r0,"minute"):e>=t0?I4(t,e,t0,"second"):t+" ms"}o(nxe,"fmtLong");function I4(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}o(I4,"plural")});var YF=Mi((sit,qF)=>{"use strict";function ixe(t){r.debug=r,r.default=r,r.coerce=u,r.disable=s,r.enable=i,r.enabled=l,r.humanize=WF(),r.destroy=h,Object.keys(t).forEach(f=>{r[f]=t[f]}),r.names=[],r.skips=[],r.formatters={};function e(f){let d=0;for(let p=0;p<f.length;p++)d=(d<<5)-d+f.charCodeAt(p),d|=0;return r.colors[Math.abs(d)%r.colors.length]}o(e,"selectColor"),r.selectColor=e;function r(f){let d,p=null,m,g;function y(...v){if(!y.enabled)return;let x=y,b=Number(new Date),w=b-(d||b);x.diff=w,x.prev=d,x.curr=b,d=b,v[0]=r.coerce(v[0]),typeof v[0]!="string"&&v.unshift("%O");let C=0;v[0]=v[0].replace(/%([a-zA-Z%])/g,(E,A)=>{if(E==="%%")return"%";C++;let S=r.formatters[A];if(typeof S=="function"){let _=v[C];E=S.call(x,_),v.splice(C,1),C--}return E}),r.formatArgs.call(x,v),(x.log||r.log).apply(x,v)}return o(y,"debug"),y.namespace=f,y.useColors=r.useColors(),y.color=r.selectColor(f),y.extend=n,y.destroy=r.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:o(()=>p!==null?p:(m!==r.namespaces&&(m=r.namespaces,g=r.enabled(f)),g),"get"),set:o(v=>{p=v},"set")}),typeof r.init=="function"&&r.init(y),y}o(r,"createDebug");function n(f,d){let p=r(this.namespace+(typeof d>"u"?":":d)+f);return p.log=this.log,p}o(n,"extend");function i(f){r.save(f),r.namespaces=f,r.names=[],r.skips=[];let d=(typeof f=="string"?f:"").trim().replace(" ",",").split(",").filter(Boolean);for(let p of d)p[0]==="-"?r.skips.push(p.slice(1)):r.names.push(p)}o(i,"enable");function a(f,d){let p=0,m=0,g=-1,y=0;for(;p<f.length;)if(m<d.length&&(d[m]===f[p]||d[m]==="*"))d[m]==="*"?(g=m,y=p,m++):(p++,m++);else if(g!==-1)m=g+1,y++,p=y;else return!1;for(;m<d.length&&d[m]==="*";)m++;return m===d.length}o(a,"matchesTemplate");function s(){let f=[...r.names,...r.skips.map(d=>"-"+d)].join(",");return r.enable(""),f}o(s,"disable");function l(f){for(let d of r.skips)if(a(f,d))return!1;for(let d of r.names)if(a(f,d))return!0;return!1}o(l,"enabled");function u(f){return f instanceof Error?f.stack||f.message:f}o(u,"coerce");function h(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return o(h,"destroy"),r.enable(r.load()),r}o(ixe,"setup");qF.exports=ixe});var XF=Mi((qs,O4)=>{"use strict";qs.formatArgs=sxe;qs.save=oxe;qs.load=lxe;qs.useColors=axe;qs.storage=cxe();qs.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();qs.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function axe(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}o(axe,"useColors");function sxe(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+O4.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}o(sxe,"formatArgs");qs.log=console.debug||console.log||(()=>{});function oxe(t){try{t?qs.storage.setItem("debug",t):qs.storage.removeItem("debug")}catch{}}o(oxe,"save");function lxe(){let t;try{t=qs.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}o(lxe,"load");function cxe(){try{return localStorage}catch{}}o(cxe,"localstorage");O4.exports=YF()(qs);var{formatters:uxe}=O4.exports;uxe.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var uit,jF=N(()=>{"use strict";LF();BF();GF();VF();UF();uit=Sa(XF(),1)});var OC,IC,KF,P4,hxe,wo,tu=N(()=>{"use strict";vt();jF();OC={body:'<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/><text transform="translate(21.16 64.67)" style="fill: #fff; font-family: ArialMT, Arial; font-size: 67.75px;"><tspan x="0" y="0">?</tspan></text></g>',height:80,width:80},IC=new Map,KF=new Map,P4=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(Y.debug("Registering icon pack:",e.name),"loader"in e)KF.set(e.name,e.loader);else if("icons"in e)IC.set(e.name,e.icons);else throw Y.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),hxe=o(async(t,e)=>{let r=AC(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let i=IC.get(n);if(!i){let s=KF.get(n);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{i={...await s(),prefix:n},IC.set(n,i)}catch(l){throw Y.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=DC(i,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),wo=o(async(t,e)=>{let r;try{r=await hxe(t,e?.fallbackPrefix)}catch(a){Y.error(a),r=OC}let n=RC(r,e);return MC(NC(n.body),n.attributes)},"getIconSVG")});function B4(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=Array.from(typeof t=="string"?[t]:t);n[n.length-1]=n[n.length-1].replace(/\r?\n([\t ]*)$/,"");var i=n.reduce(function(l,u){var h=u.match(/\n([\t ]+|(?!\s).)/g);return h?l.concat(h.map(function(f){var d,p;return(p=(d=f.match(/[\t ]/g))===null||d===void 0?void 0:d.length)!==null&&p!==void 0?p:0})):l},[]);if(i.length){var a=new RegExp(` | |
| 4 | +[ ]{`+Math.min.apply(Math,i)+"}","g");n=n.map(function(l){return l.replace(a,` | |
| 5 | +`)})}n[0]=n[0].replace(/^\r?\n/,"");var s=n[0];return e.forEach(function(l,u){var h=s.match(/(?:^|\n)( *)$/),f=h?h[1]:"",d=l;typeof l=="string"&&l.includes(` | |
| 6 | +`)&&(d=String(l).split(` | |
| 7 | +`).map(function(p,m){return m===0?p:""+f+p}).join(` | |
| 8 | +`)),s+=d+n[u+1]}),s}var PC=N(()=>{"use strict";o(B4,"dedent")});var F4,qf,QF,$4=N(()=>{"use strict";F4=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,qf=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,QF=/\s*%%.*\n/gm});var i0,BC=N(()=>{"use strict";i0=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var Yf,a0,z4,FC,ZF,Xf=N(()=>{"use strict";vt();$4();BC();Yf={},a0=o(function(t,e){t=t.replace(F4,"").replace(qf,"").replace(QF,` | |
| 9 | +`);for(let[r,{detector:n}]of Object.entries(Yf))if(n(t,e))return r;throw new i0(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),z4=o((...t)=>{for(let{id:e,detector:r,loader:n}of t)FC(e,r,n)},"registerLazyLoadedDiagrams"),FC=o((t,e,r)=>{Yf[t]&&Y.warn(`Detector with key ${t} already exists. Overwriting.`),Yf[t]={detector:e,loader:r},Y.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),ZF=o(t=>Yf[t].loader,"getDiagramLoader")});var Ty,JF,$C=N(()=>{"use strict";Ty=function(){var t=o(function($e,Re,Ie,be){for(Ie=Ie||{},be=$e.length;be--;Ie[$e[be]]=Re);return Ie},"o"),e=[1,24],r=[1,25],n=[1,26],i=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],w=[1,35],C=[1,36],T=[1,37],E=[1,38],A=[1,39],S=[1,40],_=[1,41],I=[1,42],D=[1,43],k=[1,44],L=[1,45],R=[1,46],O=[1,47],M=[1,48],B=[1,50],F=[1,51],P=[1,52],z=[1,53],$=[1,54],H=[1,55],Q=[1,56],j=[1,57],ie=[1,58],ne=[1,59],le=[1,60],he=[14,42],K=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],X=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],te=[1,82],J=[1,83],se=[1,84],ue=[1,85],Z=[12,14,42],Se=[12,14,33,42],ce=[12,14,33,42,76,77,79,80],ae=[12,33],Oe=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],ge={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:o(function(Re,Ie,be,W,de,re,oe){var V=re.length-1;switch(de){case 3:W.setDirection("TB");break;case 4:W.setDirection("BT");break;case 5:W.setDirection("RL");break;case 6:W.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:W.setC4Type(re[V-3]);break;case 19:W.setTitle(re[V].substring(6)),this.$=re[V].substring(6);break;case 20:W.setAccDescription(re[V].substring(15)),this.$=re[V].substring(15);break;case 21:this.$=re[V].trim(),W.setTitle(this.$);break;case 22:case 23:this.$=re[V].trim(),W.setAccDescription(this.$);break;case 28:re[V].splice(2,0,"ENTERPRISE"),W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 29:re[V].splice(2,0,"SYSTEM"),W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 30:W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 31:re[V].splice(2,0,"CONTAINER"),W.addContainerBoundary(...re[V]),this.$=re[V];break;case 32:W.addDeploymentNode("node",...re[V]),this.$=re[V];break;case 33:W.addDeploymentNode("nodeL",...re[V]),this.$=re[V];break;case 34:W.addDeploymentNode("nodeR",...re[V]),this.$=re[V];break;case 35:W.popBoundaryParseStack();break;case 39:W.addPersonOrSystem("person",...re[V]),this.$=re[V];break;case 40:W.addPersonOrSystem("external_person",...re[V]),this.$=re[V];break;case 41:W.addPersonOrSystem("system",...re[V]),this.$=re[V];break;case 42:W.addPersonOrSystem("system_db",...re[V]),this.$=re[V];break;case 43:W.addPersonOrSystem("system_queue",...re[V]),this.$=re[V];break;case 44:W.addPersonOrSystem("external_system",...re[V]),this.$=re[V];break;case 45:W.addPersonOrSystem("external_system_db",...re[V]),this.$=re[V];break;case 46:W.addPersonOrSystem("external_system_queue",...re[V]),this.$=re[V];break;case 47:W.addContainer("container",...re[V]),this.$=re[V];break;case 48:W.addContainer("container_db",...re[V]),this.$=re[V];break;case 49:W.addContainer("container_queue",...re[V]),this.$=re[V];break;case 50:W.addContainer("external_container",...re[V]),this.$=re[V];break;case 51:W.addContainer("external_container_db",...re[V]),this.$=re[V];break;case 52:W.addContainer("external_container_queue",...re[V]),this.$=re[V];break;case 53:W.addComponent("component",...re[V]),this.$=re[V];break;case 54:W.addComponent("component_db",...re[V]),this.$=re[V];break;case 55:W.addComponent("component_queue",...re[V]),this.$=re[V];break;case 56:W.addComponent("external_component",...re[V]),this.$=re[V];break;case 57:W.addComponent("external_component_db",...re[V]),this.$=re[V];break;case 58:W.addComponent("external_component_queue",...re[V]),this.$=re[V];break;case 60:W.addRel("rel",...re[V]),this.$=re[V];break;case 61:W.addRel("birel",...re[V]),this.$=re[V];break;case 62:W.addRel("rel_u",...re[V]),this.$=re[V];break;case 63:W.addRel("rel_d",...re[V]),this.$=re[V];break;case 64:W.addRel("rel_l",...re[V]),this.$=re[V];break;case 65:W.addRel("rel_r",...re[V]),this.$=re[V];break;case 66:W.addRel("rel_b",...re[V]),this.$=re[V];break;case 67:re[V].splice(0,1),W.addRel("rel",...re[V]),this.$=re[V];break;case 68:W.updateElStyle("update_el_style",...re[V]),this.$=re[V];break;case 69:W.updateRelStyle("update_rel_style",...re[V]),this.$=re[V];break;case 70:W.updateLayoutConfig("update_layout_config",...re[V]),this.$=re[V];break;case 71:this.$=[re[V]];break;case 72:re[V].unshift(re[V-1]),this.$=re[V];break;case 73:case 75:this.$=re[V].trim();break;case 74:let xe={};xe[re[V-1].trim()]=re[V].trim(),this.$=xe;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:70,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:71,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:72,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:73,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{14:[1,74]},t(he,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le}),t(he,[2,14]),t(K,[2,16],{12:[1,76]}),t(he,[2,36],{12:[1,77]}),t(X,[2,19]),t(X,[2,20]),{25:[1,78]},{27:[1,79]},t(X,[2,23]),{35:80,75:81,76:te,77:J,79:se,80:ue},{35:86,75:81,76:te,77:J,79:se,80:ue},{35:87,75:81,76:te,77:J,79:se,80:ue},{35:88,75:81,76:te,77:J,79:se,80:ue},{35:89,75:81,76:te,77:J,79:se,80:ue},{35:90,75:81,76:te,77:J,79:se,80:ue},{35:91,75:81,76:te,77:J,79:se,80:ue},{35:92,75:81,76:te,77:J,79:se,80:ue},{35:93,75:81,76:te,77:J,79:se,80:ue},{35:94,75:81,76:te,77:J,79:se,80:ue},{35:95,75:81,76:te,77:J,79:se,80:ue},{35:96,75:81,76:te,77:J,79:se,80:ue},{35:97,75:81,76:te,77:J,79:se,80:ue},{35:98,75:81,76:te,77:J,79:se,80:ue},{35:99,75:81,76:te,77:J,79:se,80:ue},{35:100,75:81,76:te,77:J,79:se,80:ue},{35:101,75:81,76:te,77:J,79:se,80:ue},{35:102,75:81,76:te,77:J,79:se,80:ue},{35:103,75:81,76:te,77:J,79:se,80:ue},{35:104,75:81,76:te,77:J,79:se,80:ue},t(Z,[2,59]),{35:105,75:81,76:te,77:J,79:se,80:ue},{35:106,75:81,76:te,77:J,79:se,80:ue},{35:107,75:81,76:te,77:J,79:se,80:ue},{35:108,75:81,76:te,77:J,79:se,80:ue},{35:109,75:81,76:te,77:J,79:se,80:ue},{35:110,75:81,76:te,77:J,79:se,80:ue},{35:111,75:81,76:te,77:J,79:se,80:ue},{35:112,75:81,76:te,77:J,79:se,80:ue},{35:113,75:81,76:te,77:J,79:se,80:ue},{35:114,75:81,76:te,77:J,79:se,80:ue},{35:115,75:81,76:te,77:J,79:se,80:ue},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{12:[1,118],33:[1,117]},{35:119,75:81,76:te,77:J,79:se,80:ue},{35:120,75:81,76:te,77:J,79:se,80:ue},{35:121,75:81,76:te,77:J,79:se,80:ue},{35:122,75:81,76:te,77:J,79:se,80:ue},{35:123,75:81,76:te,77:J,79:se,80:ue},{35:124,75:81,76:te,77:J,79:se,80:ue},{35:125,75:81,76:te,77:J,79:se,80:ue},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(he,[2,15]),t(K,[2,17],{21:22,19:130,22:e,23:r,24:n,26:i,28:a}),t(he,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:n,26:i,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le}),t(X,[2,21]),t(X,[2,22]),t(Z,[2,39]),t(Se,[2,71],{75:81,35:132,76:te,77:J,79:se,80:ue}),t(ce,[2,73]),{78:[1,133]},t(ce,[2,75]),t(ce,[2,76]),t(Z,[2,40]),t(Z,[2,41]),t(Z,[2,42]),t(Z,[2,43]),t(Z,[2,44]),t(Z,[2,45]),t(Z,[2,46]),t(Z,[2,47]),t(Z,[2,48]),t(Z,[2,49]),t(Z,[2,50]),t(Z,[2,51]),t(Z,[2,52]),t(Z,[2,53]),t(Z,[2,54]),t(Z,[2,55]),t(Z,[2,56]),t(Z,[2,57]),t(Z,[2,58]),t(Z,[2,60]),t(Z,[2,61]),t(Z,[2,62]),t(Z,[2,63]),t(Z,[2,64]),t(Z,[2,65]),t(Z,[2,66]),t(Z,[2,67]),t(Z,[2,68]),t(Z,[2,69]),t(Z,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(ae,[2,28]),t(ae,[2,29]),t(ae,[2,30]),t(ae,[2,31]),t(ae,[2,32]),t(ae,[2,33]),t(ae,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(K,[2,18]),t(he,[2,38]),t(Se,[2,72]),t(ce,[2,74]),t(Z,[2,24]),t(Z,[2,35]),t(Oe,[2,25]),t(Oe,[2,26],{12:[1,138]}),t(Oe,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:o(function(Re,Ie){if(Ie.recoverable)this.trace(Re);else{var be=new Error(Re);throw be.hash=Ie,be}},"parseError"),parse:o(function(Re){var Ie=this,be=[0],W=[],de=[null],re=[],oe=this.table,V="",xe=0,q=0,pe=0,ve=2,Pe=1,_e=re.slice.call(arguments,1),we=Object.create(this.lexer),Ve={yy:{}};for(var De in this.yy)Object.prototype.hasOwnProperty.call(this.yy,De)&&(Ve.yy[De]=this.yy[De]);we.setInput(Re,Ve.yy),Ve.yy.lexer=we,Ve.yy.parser=this,typeof we.yylloc>"u"&&(we.yylloc={});var qe=we.yylloc;re.push(qe);var at=we.options&&we.options.ranges;typeof Ve.yy.parseError=="function"?this.parseError=Ve.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Rt(nt){be.length=be.length-2*nt,de.length=de.length-nt,re.length=re.length-nt}o(Rt,"popStack");function st(){var nt;return nt=W.pop()||we.lex()||Pe,typeof nt!="number"&&(nt instanceof Array&&(W=nt,nt=W.pop()),nt=Ie.symbols_[nt]||nt),nt}o(st,"lex");for(var Ue,ct,We,ot,Yt,bt,Mt={},xt,ut,Et,ft;;){if(We=be[be.length-1],this.defaultActions[We]?ot=this.defaultActions[We]:((Ue===null||typeof Ue>"u")&&(Ue=st()),ot=oe[We]&&oe[We][Ue]),typeof ot>"u"||!ot.length||!ot[0]){var yt="";ft=[];for(xt in oe[We])this.terminals_[xt]&&xt>ve&&ft.push("'"+this.terminals_[xt]+"'");we.showPosition?yt="Parse error on line "+(xe+1)+`: | |
| 10 | +`+we.showPosition()+` | |
| 11 | +Expecting `+ft.join(", ")+", got '"+(this.terminals_[Ue]||Ue)+"'":yt="Parse error on line "+(xe+1)+": Unexpected "+(Ue==Pe?"end of input":"'"+(this.terminals_[Ue]||Ue)+"'"),this.parseError(yt,{text:we.match,token:this.terminals_[Ue]||Ue,line:we.yylineno,loc:qe,expected:ft})}if(ot[0]instanceof Array&&ot.length>1)throw new Error("Parse Error: multiple actions possible at state: "+We+", token: "+Ue);switch(ot[0]){case 1:be.push(Ue),de.push(we.yytext),re.push(we.yylloc),be.push(ot[1]),Ue=null,ct?(Ue=ct,ct=null):(q=we.yyleng,V=we.yytext,xe=we.yylineno,qe=we.yylloc,pe>0&&pe--);break;case 2:if(ut=this.productions_[ot[1]][1],Mt.$=de[de.length-ut],Mt._$={first_line:re[re.length-(ut||1)].first_line,last_line:re[re.length-1].last_line,first_column:re[re.length-(ut||1)].first_column,last_column:re[re.length-1].last_column},at&&(Mt._$.range=[re[re.length-(ut||1)].range[0],re[re.length-1].range[1]]),bt=this.performAction.apply(Mt,[V,q,xe,Ve.yy,ot[1],de,re].concat(_e)),typeof bt<"u")return bt;ut&&(be=be.slice(0,-1*ut*2),de=de.slice(0,-1*ut),re=re.slice(0,-1*ut)),be.push(this.productions_[ot[1]][0]),de.push(Mt.$),re.push(Mt._$),Et=oe[be[be.length-2]][be[be.length-1]],be.push(Et);break;case 3:return!0}}return!0},"parse")},ze=function(){var $e={EOF:1,parseError:o(function(Ie,be){if(this.yy.parser)this.yy.parser.parseError(Ie,be);else throw new Error(Ie)},"parseError"),setInput:o(function(Re,Ie){return this.yy=Ie||this.yy||{},this._input=Re,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Re=this._input[0];this.yytext+=Re,this.yyleng++,this.offset++,this.match+=Re,this.matched+=Re;var Ie=Re.match(/(?:\r\n?|\n).*/g);return Ie?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Re},"input"),unput:o(function(Re){var Ie=Re.length,be=Re.split(/(?:\r\n?|\n)/g);this._input=Re+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ie),this.offset-=Ie;var W=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),be.length-1&&(this.yylineno-=be.length-1);var de=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:be?(be.length===W.length?this.yylloc.first_column:0)+W[W.length-be.length].length-be[0].length:this.yylloc.first_column-Ie},this.options.ranges&&(this.yylloc.range=[de[0],de[0]+this.yyleng-Ie]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 12 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Re){this.unput(this.match.slice(Re))},"less"),pastInput:o(function(){var Re=this.matched.substr(0,this.matched.length-this.match.length);return(Re.length>20?"...":"")+Re.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Re=this.match;return Re.length<20&&(Re+=this._input.substr(0,20-Re.length)),(Re.substr(0,20)+(Re.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Re=this.pastInput(),Ie=new Array(Re.length+1).join("-");return Re+this.upcomingInput()+` | |
| 13 | +`+Ie+"^"},"showPosition"),test_match:o(function(Re,Ie){var be,W,de;if(this.options.backtrack_lexer&&(de={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(de.yylloc.range=this.yylloc.range.slice(0))),W=Re[0].match(/(?:\r\n?|\n).*/g),W&&(this.yylineno+=W.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:W?W[W.length-1].length-W[W.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Re[0].length},this.yytext+=Re[0],this.match+=Re[0],this.matches=Re,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Re[0].length),this.matched+=Re[0],be=this.performAction.call(this,this.yy,this,Ie,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),be)return be;if(this._backtrack){for(var re in de)this[re]=de[re];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Re,Ie,be,W;this._more||(this.yytext="",this.match="");for(var de=this._currentRules(),re=0;re<de.length;re++)if(be=this._input.match(this.rules[de[re]]),be&&(!Ie||be[0].length>Ie[0].length)){if(Ie=be,W=re,this.options.backtrack_lexer){if(Re=this.test_match(be,de[re]),Re!==!1)return Re;if(this._backtrack){Ie=!1;continue}else return!1}else if(!this.options.flex)break}return Ie?(Re=this.test_match(Ie,de[W]),Re!==!1?Re:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 14 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ie=this.next();return Ie||this.lex()},"lex"),begin:o(function(Ie){this.conditionStack.push(Ie)},"begin"),popState:o(function(){var Ie=this.conditionStack.length-1;return Ie>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ie){return Ie=this.conditionStack.length-1-Math.abs(Ie||0),Ie>=0?this.conditionStack[Ie]:"INITIAL"},"topState"),pushState:o(function(Ie){this.begin(Ie)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Ie,be,W,de){var re=de;switch(W){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";break;case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return $e}();ge.lexer=ze;function He(){this.yy={}}return o(He,"Parser"),He.prototype=ge,ge.Parser=He,new He}();Ty.parser=Ty;JF=Ty});var zC,Gn,s0=N(()=>{"use strict";zC=o((t,e,{depth:r=2,clobber:n=!1}={})=>{let i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>zC(t,a,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=zC(t[a],e[a],{depth:r-1,clobber:n})):(n||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Gn=zC});var G4,e$,t$=N(()=>{"use strict";G4={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:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},n)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let i=r<.5?r*(1+e):r+e-r*e,a=2*r-i;switch(n){case"r":return G4.hue2rgb(a,i,t+.3333333333333333)*255;case"g":return G4.hue2rgb(a,i,t)*255;case"b":return G4.hue2rgb(a,i,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;let i=Math.max(t,e,r),a=Math.min(t,e,r),s=(i+a)/2;if(n==="l")return s*100;if(i===a)return 0;let l=i-a,u=s>.5?l/(2-i-a):l/(i+a);if(n==="s")return u*100;switch(i){case t:return((e-r)/l+(e<r?6:0))*60;case e:return((r-t)/l+2)*60;case r:return((t-e)/l+4)*60;default:return-1}},"rgb2hsl")},e$=G4});var fxe,r$,n$=N(()=>{"use strict";fxe={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},r$=fxe});var dxe,i$,a$=N(()=>{"use strict";dxe={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},i$=dxe});var pxe,jt,Wl=N(()=>{"use strict";t$();n$();a$();pxe={channel:e$,lang:r$,unit:i$},jt=pxe});var ru,Ii,ky=N(()=>{"use strict";Wl();ru={};for(let t=0;t<=255;t++)ru[t]=jt.unit.dec2hex(t);Ii={ALL:0,RGB:1,HSL:2}});var GC,s$,o$=N(()=>{"use strict";ky();GC=class{static{o(this,"Type")}constructor(){this.type=Ii.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=Ii.ALL}is(e){return this.type===e}},s$=GC});var VC,l$,c$=N(()=>{"use strict";Wl();o$();ky();VC=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new s$}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=Ii.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:n,l:i}=e;r===void 0&&(e.h=jt.channel.rgb2hsl(e,"h")),n===void 0&&(e.s=jt.channel.rgb2hsl(e,"s")),i===void 0&&(e.l=jt.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:n,b:i}=e;r===void 0&&(e.r=jt.channel.hsl2rgb(e,"r")),n===void 0&&(e.g=jt.channel.hsl2rgb(e,"g")),i===void 0&&(e.b=jt.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(Ii.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(Ii.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(Ii.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(Ii.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(Ii.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(Ii.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},l$=VC});var mxe,ih,Ey=N(()=>{"use strict";c$();mxe=new l$({r:0,g:0,b:0,a:0},"transparent"),ih=mxe});var u$,jf,UC=N(()=>{"use strict";Ey();ky();u$={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(u$.re);if(!e)return;let r=e[1],n=parseInt(r,16),i=r.length,a=i%4===0,s=i>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return ih.set({r:(n>>u*(h+3)&f)*l,g:(n>>u*(h+2)&f)*l,b:(n>>u*(h+1)&f)*l,a:a?(n&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`#${ru[Math.round(e)]}${ru[Math.round(r)]}${ru[Math.round(n)]}${ru[Math.round(i*255)]}`:`#${ru[Math.round(e)]}${ru[Math.round(r)]}${ru[Math.round(n)]}`},"stringify")},jf=u$});var V4,Sy,h$=N(()=>{"use strict";Wl();Ey();V4={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:o(t=>{let e=t.match(V4.hueRe);if(e){let[,r,n]=e;switch(n){case"grad":return jt.channel.clamp.h(parseFloat(r)*.9);case"rad":return jt.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return jt.channel.clamp.h(parseFloat(r)*360)}}return jt.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(V4.re);if(!r)return;let[,n,i,a,s,l]=r;return ih.set({h:V4._hue2deg(n),s:jt.channel.clamp.s(parseFloat(i)),l:jt.channel.clamp.l(parseFloat(a)),a:s?jt.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%, ${i})`:`hsl(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%)`},"stringify")},Sy=V4});var U4,HC,f$=N(()=>{"use strict";UC();U4={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:o(t=>{t=t.toLowerCase();let e=U4.colors[t];if(e)return jf.parse(e)},"parse"),stringify:o(t=>{let e=jf.stringify(t);for(let r in U4.colors)if(U4.colors[r]===e)return r},"stringify")},HC=U4});var d$,Cy,p$=N(()=>{"use strict";Wl();Ey();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:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(d$.re);if(!r)return;let[,n,i,a,s,l,u,h,f]=r;return ih.set({r:jt.channel.clamp.r(i?parseFloat(n)*2.55:parseFloat(n)),g:jt.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:jt.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?jt.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)}, ${jt.lang.round(i)})`:`rgb(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)})`},"stringify")},Cy=d$});var gxe,Oi,nu=N(()=>{"use strict";UC();h$();f$();p$();ky();gxe={format:{keyword:HC,hex:jf,rgb:Cy,rgba:Cy,hsl:Sy,hsla:Sy},parse:o(t=>{if(typeof t!="string")return t;let e=jf.parse(t)||Cy.parse(t)||Sy.parse(t)||HC.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(Ii.HSL)||t.data.r===void 0?Sy.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Cy.stringify(t):jf.stringify(t),"stringify")},Oi=gxe});var yxe,H4,WC=N(()=>{"use strict";Wl();nu();yxe=o((t,e)=>{let r=Oi.parse(t);for(let n in e)r[n]=jt.channel.clamp[n](e[n]);return Oi.stringify(r)},"change"),H4=yxe});var vxe,qa,qC=N(()=>{"use strict";Wl();Ey();nu();WC();vxe=o((t,e,r=0,n=1)=>{if(typeof t!="number")return H4(t,{a:e});let i=ih.set({r:jt.channel.clamp.r(t),g:jt.channel.clamp.g(e),b:jt.channel.clamp.b(r),a:jt.channel.clamp.a(n)});return Oi.stringify(i)},"rgba"),qa=vxe});var xxe,Kf,m$=N(()=>{"use strict";Wl();nu();xxe=o((t,e)=>jt.lang.round(Oi.parse(t)[e]),"channel"),Kf=xxe});var bxe,g$,y$=N(()=>{"use strict";Wl();nu();bxe=o(t=>{let{r:e,g:r,b:n}=Oi.parse(t),i=.2126*jt.channel.toLinear(e)+.7152*jt.channel.toLinear(r)+.0722*jt.channel.toLinear(n);return jt.lang.round(i)},"luminance"),g$=bxe});var wxe,v$,x$=N(()=>{"use strict";y$();wxe=o(t=>g$(t)>=.5,"isLight"),v$=wxe});var Txe,ca,b$=N(()=>{"use strict";x$();Txe=o(t=>!v$(t),"isDark"),ca=Txe});var kxe,W4,YC=N(()=>{"use strict";Wl();nu();kxe=o((t,e,r)=>{let n=Oi.parse(t),i=n[e],a=jt.channel.clamp[e](i+r);return i!==a&&(n[e]=a),Oi.stringify(n)},"adjustChannel"),W4=kxe});var Exe,Dt,w$=N(()=>{"use strict";YC();Exe=o((t,e)=>W4(t,"l",e),"lighten"),Dt=Exe});var Sxe,Ot,T$=N(()=>{"use strict";YC();Sxe=o((t,e)=>W4(t,"l",-e),"darken"),Ot=Sxe});var Cxe,Me,k$=N(()=>{"use strict";nu();WC();Cxe=o((t,e)=>{let r=Oi.parse(t),n={};for(let i in e)e[i]&&(n[i]=r[i]+e[i]);return H4(t,n)},"adjust"),Me=Cxe});var Axe,E$,S$=N(()=>{"use strict";nu();qC();Axe=o((t,e,r=50)=>{let{r:n,g:i,b:a,a:s}=Oi.parse(t),{r:l,g:u,b:h,a:f}=Oi.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=n*y+l*v,b=i*y+u*v,w=a*y+h*v,C=s*d+f*(1-d);return qa(x,b,w,C)},"mix"),E$=Axe});var _xe,wt,C$=N(()=>{"use strict";nu();S$();_xe=o((t,e=100)=>{let r=Oi.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,E$(r,t,e)},"invert"),wt=_xe});var A$=N(()=>{"use strict";qC();m$();b$();w$();T$();k$();C$()});var Ys=N(()=>{"use strict";A$()});var ah,sh,Ay=N(()=>{"use strict";ah="#ffffff",sh="#f2f2f2"});var Ti,o0=N(()=>{"use strict";Ys();Ti=o((t,e)=>e?Me(t,{s:-40,l:10}):Me(t,{s:-40,l:-10}),"mkBorder")});var jC,_$,D$=N(()=>{"use strict";Ys();Ay();o0();jC=class{static{o(this,"Theme")}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(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||Me(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||Me(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Ti(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Ti(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||wt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||wt(this.tertiaryColor),this.lineColor=this.lineColor||wt(this.background),this.arrowheadColor=this.arrowheadColor||wt(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?Ot(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||this.actorBorder,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||Ot(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||wt(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||Dt(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.darkMode?(this.rowOdd=this.rowOdd||Ot(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10)):(this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.mainBkg,5)),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||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScale"+r]=Ot(this["cScale"+r],75);else for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScale"+r]=Ot(this["cScale"+r],25);for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScaleInv"+r]=this["cScaleInv"+r]||wt(this["cScale"+r]);for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this.darkMode?this["cScalePeer"+r]=this["cScalePeer"+r]||Dt(this["cScale"+r],10):this["cScalePeer"+r]=this["cScalePeer"+r]||Ot(this["cScale"+r],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScaleLabel"+r]=this["cScaleLabel"+r]||this.scaleLabelColor;let e=this.darkMode?-4:-1;for(let r=0;r<5;r++)this["surface"+r]=this["surface"+r]||Me(this.mainBkg,{h:180,s:-15,l:e*(5+r*3)}),this["surfacePeer"+r]=this["surfacePeer"+r]||Me(this.mainBkg,{h:180,s:-15,l:e*(8+r*3)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||Me(this.primaryColor,{h:64}),this.fillType3=this.fillType3||Me(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||Me(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||Me(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||Me(this.primaryColor,{h:128}),this.fillType7=this.fillType7||Me(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||Me(this.primaryColor,{l:-10}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-10}),this.pie6=this.pie6||Me(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||Me(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||Me(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.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.archEdgeColor=this.archEdgeColor||"#777",this.archEdgeArrowColor=this.archEdgeArrowColor||"#777",this.archEdgeWidth=this.archEdgeWidth||"3",this.archGroupBorderColor=this.archGroupBorderColor||"#000",this.archGroupBorderWidth=this.archGroupBorderWidth||"2px",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(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:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.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?Ot(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||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(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||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},_$=o(t=>{let e=new jC;return e.calculate(t),e},"getThemeVariables")});var KC,L$,R$=N(()=>{"use strict";Ys();o0();KC=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Dt(this.primaryColor,16),this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=wt(this.background),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Dt(wt("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=qa(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=Ot("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Ot(this.sectionBkgColor,10),this.taskBorderColor=qa(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=qa(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.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Dt(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=Dt(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=Dt(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,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=Dt(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.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,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=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(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||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330});for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||wt(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScalePeer"+e]=this["cScalePeer"+e]||Dt(this["cScale"+e],10);for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(-10+e*4)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(-7+e*4)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["pie"+e]=this["cScale"+e];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||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(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:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22"},this.packet={startByteColor:this.primaryTextColor,endByteColor:this.primaryTextColor,labelColor:this.primaryTextColor,titleColor:this.primaryTextColor,blockStrokeColor:this.primaryTextColor,blockFillColor:this.background},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},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?Ot(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=Dt(this.secondaryColor,20),this.git1=Dt(this.pie2||this.secondaryColor,20),this.git2=Dt(this.pie3||this.tertiaryColor,20),this.git3=Dt(this.pie4||Me(this.primaryColor,{h:-30}),20),this.git4=Dt(this.pie5||Me(this.primaryColor,{h:-60}),20),this.git5=Dt(this.pie6||Me(this.primaryColor,{h:-90}),10),this.git6=Dt(this.pie7||Me(this.primaryColor,{h:60}),10),this.git7=Dt(this.pie8||Me(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(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||Dt(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Dt(this.background,2),this.nodeBorder=this.nodeBorder||"#999"}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},L$=o(t=>{let e=new KC;return e.calculate(t),e},"getThemeVariables")});var QC,oh,_y=N(()=>{"use strict";Ys();o0();Ay();QC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=Me(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(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="rgba(232,232,232, 0.8)",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="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="#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=qa(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.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=Ot(this["cScale"+e],10),this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||Me(this["cScale"+e],{h:180});for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,l:-(7+e*5)});if(this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,this.labelTextColor!=="calculated"){this.cScaleLabel0=this.cScaleLabel0||wt(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||wt(this.labelTextColor);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||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=Dt(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.actorLineColor=this.actorBorder,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.rowOdd=this.rowOdd||Dt(this.primaryColor,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.primaryColor,1),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=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||Me(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||Me(this.primaryColor,{l:-10}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-30}),this.pie6=this.pie6||Me(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||Me(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||Me(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||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(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.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.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||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||Ot(wt(this.git0),25),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(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||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(Object.keys(this).forEach(n=>{this[n]==="calculated"&&(this[n]=void 0)}),typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},oh=o(t=>{let e=new QC;return e.calculate(t),e},"getThemeVariables")});var ZC,N$,M$=N(()=>{"use strict";Ys();Ay();o0();ZC=class{static{o(this,"Theme")}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=Dt("#cde498",10),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.primaryColor),this.lineColor=wt(this.background),this.textColor=wt(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="calculated",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.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=Ot(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.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=Ot(this["cScale"+e],10),this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||Me(this["cScale"+e],{h:180});this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(8+e*5)});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.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.mainBkg,20),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=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(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||Me(this.primaryColor,{l:-30}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-30}),this.pie6=this.pie6||Me(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||Me(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||Me(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||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(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.packet={startByteColor:this.primaryTextColor,endByteColor:this.primaryTextColor,labelColor:this.primaryTextColor,titleColor:this.primaryTextColor,blockStrokeColor:this.primaryTextColor,blockFillColor:this.mainBkg},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.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||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(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||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},N$=o(t=>{let e=new ZC;return e.calculate(t),e},"getThemeVariables")});var JC,I$,O$=N(()=>{"use strict";Ys();o0();Ay();JC=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Dt(this.contrast,55),this.background="#ffffff",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(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=this.actorBorder,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.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=Dt(this.contrast,55),this.border2=this.contrast,this.actorBorder=Dt(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,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 e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||wt(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this.darkMode?this["cScalePeer"+e]=this["cScalePeer"+e]||Dt(this["cScale"+e],10):this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{l:-(8+e*5)});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=Dt(this.contrast,30),this.sectionBkgColor2=Dt(this.contrast,30),this.taskBorderColor=Ot(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=Dt(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=Ot(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,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=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128});for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["pie"+e]=this["cScale"+e];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||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(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:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},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=Ot(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||Me(this.primaryColor,{h:-30}),this.git4=this.pie5||Me(this.primaryColor,{h:-60}),this.git5=this.pie6||Me(this.primaryColor,{h:-90}),this.git6=this.pie7||Me(this.primaryColor,{h:60}),this.git7=this.pie8||Me(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(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||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},I$=o(t=>{let e=new JC;return e.calculate(t),e},"getThemeVariables")});var To,q4=N(()=>{"use strict";D$();R$();_y();M$();O$();To={base:{getThemeVariables:_$},dark:{getThemeVariables:L$},default:{getThemeVariables:oh},forest:{getThemeVariables:N$},neutral:{getThemeVariables:I$}}});var ql,P$=N(()=>{"use strict";ql={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},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,hideEmptyMembersBox:!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,nodeSpacing:140,rankSpacing:80,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},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},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,parallelCommits:!1,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:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var B$,F$,$$,or,Ya=N(()=>{"use strict";q4();P$();B$={...ql,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF"},themeCSS:void 0,themeVariables:To.default.getThemeVariables(),sequence:{...ql.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...ql.gantt,tickInterval:void 0,useWidth:void 0},c4:{...ql.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...ql.pie,useWidth:984},xyChart:{...ql.xyChart,useWidth:void 0},requirement:{...ql.requirement,useWidth:void 0},packet:{...ql.packet},radar:{...ql.radar}},F$=o((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:typeof t[n]=="object"&&t[n]!==null?[...r,e+n,...F$(t[n],"")]:[...r,e+n],[]),"keyify"),$$=new Set(F$(B$,"")),or=B$});var l0,Dxe,e7=N(()=>{"use strict";Ya();vt();l0=o(t=>{if(Y.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>l0(e));return}for(let e of Object.keys(t)){if(Y.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!$$.has(e)||t[e]==null){Y.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){Y.debug("sanitizing object",e),l0(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let n of r)e.includes(n)&&(Y.debug("sanitizing css option",e),t[e]=Dxe(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}Y.debug("After sanitization",t)}},"sanitizeDirective"),Dxe=o(t=>{let e=0,r=0;for(let n of t){if(e<r)return"{ /* ERROR: Unbalanced CSS */ }";n==="{"?e++:n==="}"&&r++}return e!==r?"{ /* ERROR: Unbalanced CSS */ }":t},"sanitizeCss")});var lh,xs,G$,c0,Dy,Y4,t7,V$,U$,r7,X4,cr,H$,W$,Ly,Lxe,z$,Rxe,q$,ji=N(()=>{"use strict";s0();vt();q4();Ya();e7();lh=Object.freeze(or),xs=Gn({},lh),c0=[],Dy=Gn({},lh),Y4=o((t,e)=>{let r=Gn({},t),n={};for(let i of e)H$(i),n=Gn(n,i);if(r=Gn(r,n),n.theme&&n.theme in To){let i=Gn({},G$),a=Gn(i.themeVariables||{},n.themeVariables);r.theme&&r.theme in To&&(r.themeVariables=To[r.theme].getThemeVariables(a))}return Dy=r,q$(Dy),Dy},"updateCurrentConfig"),t7=o(t=>(xs=Gn({},lh),xs=Gn(xs,t),t.theme&&To[t.theme]&&(xs.themeVariables=To[t.theme].getThemeVariables(t.themeVariables)),Y4(xs,c0),xs),"setSiteConfig"),V$=o(t=>{G$=Gn({},t)},"saveConfigFromInitialize"),U$=o(t=>(xs=Gn(xs,t),Y4(xs,c0),xs),"updateSiteConfig"),r7=o(()=>Gn({},xs),"getSiteConfig"),X4=o(t=>(q$(t),Gn(Dy,t),cr()),"setConfig"),cr=o(()=>Gn({},Dy),"getConfig"),H$=o(t=>{t&&(["secure",...xs.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(Y.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=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&H$(t[e])}))},"sanitize"),W$=o(t=>{l0(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),c0.push(t),Y4(xs,c0)},"addDirective"),Ly=o((t=xs)=>{c0=[],Y4(t,c0)},"reset"),Lxe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},z$={},Rxe=o(t=>{z$[t]||(Y.warn(Lxe[t]),z$[t]=!0)},"issueWarning"),q$=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&Rxe("LAZY_LOAD_DEPRECATED")},"checkConfig")});function Ka(t){return function(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];return l7(t,e,n)}}function $xe(t){return function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return c7(t,r)}}function Cr(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Q4;Y$&&Y$(t,null);let n=e.length;for(;n--;){let i=e[n];if(typeof i=="string"){let a=r(i);a!==i&&(Nxe(e)||(e[n]=a),i=a)}t[i]=!0}return t}function zxe(t){for(let e=0;e<t.length;e++)sl(t,e)||(t[e]=null);return t}function Qf(t){let e=nz(null);for(let[r,n]of rz(t))sl(t,r)&&(Array.isArray(n)?e[r]=zxe(n):n&&typeof n=="object"&&n.constructor===Object?e[r]=Qf(n):e[r]=n);return e}function Iy(t,e){for(;t!==null;){let n=Ixe(t,e);if(n){if(n.get)return Ka(n.get);if(typeof n.value=="function")return Ka(n.value)}t=Mxe(t)}function r(){return null}return o(r,"fallbackValue"),r}function sz(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Qxe(),e=o(At=>sz(At),"DOMPurify");if(e.version="3.2.4",e.removed=[],!t||!t.document||t.document.nodeType!==Oy.document||!t.Element)return e.isSupported=!1,e;let{document:r}=t,n=r,i=n.currentScript,{DocumentFragment:a,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:h,NamedNodeMap:f=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:m}=t,g=u.prototype,y=Iy(g,"cloneNode"),v=Iy(g,"remove"),x=Iy(g,"nextSibling"),b=Iy(g,"childNodes"),w=Iy(g,"parentNode");if(typeof s=="function"){let At=r.createElement("template");At.content&&At.content.ownerDocument&&(r=At.content.ownerDocument)}let C,T="",{implementation:E,createNodeIterator:A,createDocumentFragment:S,getElementsByTagName:_}=r,{importNode:I}=n,D=tz();e.isSupported=typeof rz=="function"&&typeof w=="function"&&E&&E.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:k,ERB_EXPR:L,TMPLIT_EXPR:R,DATA_ATTR:O,ARIA_ATTR:M,IS_SCRIPT_OR_DATA:B,ATTR_WHITESPACE:F,CUSTOM_ELEMENT:P}=ez,{IS_ALLOWED_URI:z}=ez,$=null,H=Cr({},[...K$,...i7,...a7,...s7,...Q$]),Q=null,j=Cr({},[...Z$,...o7,...J$,...K4]),ie=Object.seal(nz(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}})),ne=null,le=null,he=!0,K=!0,X=!1,te=!0,J=!1,se=!0,ue=!1,Z=!1,Se=!1,ce=!1,ae=!1,Oe=!1,ge=!0,ze=!1,He="user-content-",$e=!0,Re=!1,Ie={},be=null,W=Cr({},["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"]),de=null,re=Cr({},["audio","video","img","source","image","track"]),oe=null,V=Cr({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),xe="http://www.w3.org/1998/Math/MathML",q="http://www.w3.org/2000/svg",pe="http://www.w3.org/1999/xhtml",ve=pe,Pe=!1,_e=null,we=Cr({},[xe,q,pe],n7),Ve=Cr({},["mi","mo","mn","ms","mtext"]),De=Cr({},["annotation-xml"]),qe=Cr({},["title","style","font","a","script"]),at=null,Rt=["application/xhtml+xml","text/html"],st="text/html",Ue=null,ct=null,We=r.createElement("form"),ot=o(function(Ce){return Ce instanceof RegExp||Ce instanceof Function},"isRegexOrFunction"),Yt=o(function(){let Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(ct&&ct===Ce)){if((!Ce||typeof Ce!="object")&&(Ce={}),Ce=Qf(Ce),at=Rt.indexOf(Ce.PARSER_MEDIA_TYPE)===-1?st:Ce.PARSER_MEDIA_TYPE,Ue=at==="application/xhtml+xml"?n7:Q4,$=sl(Ce,"ALLOWED_TAGS")?Cr({},Ce.ALLOWED_TAGS,Ue):H,Q=sl(Ce,"ALLOWED_ATTR")?Cr({},Ce.ALLOWED_ATTR,Ue):j,_e=sl(Ce,"ALLOWED_NAMESPACES")?Cr({},Ce.ALLOWED_NAMESPACES,n7):we,oe=sl(Ce,"ADD_URI_SAFE_ATTR")?Cr(Qf(V),Ce.ADD_URI_SAFE_ATTR,Ue):V,de=sl(Ce,"ADD_DATA_URI_TAGS")?Cr(Qf(re),Ce.ADD_DATA_URI_TAGS,Ue):re,be=sl(Ce,"FORBID_CONTENTS")?Cr({},Ce.FORBID_CONTENTS,Ue):W,ne=sl(Ce,"FORBID_TAGS")?Cr({},Ce.FORBID_TAGS,Ue):{},le=sl(Ce,"FORBID_ATTR")?Cr({},Ce.FORBID_ATTR,Ue):{},Ie=sl(Ce,"USE_PROFILES")?Ce.USE_PROFILES:!1,he=Ce.ALLOW_ARIA_ATTR!==!1,K=Ce.ALLOW_DATA_ATTR!==!1,X=Ce.ALLOW_UNKNOWN_PROTOCOLS||!1,te=Ce.ALLOW_SELF_CLOSE_IN_ATTR!==!1,J=Ce.SAFE_FOR_TEMPLATES||!1,se=Ce.SAFE_FOR_XML!==!1,ue=Ce.WHOLE_DOCUMENT||!1,ce=Ce.RETURN_DOM||!1,ae=Ce.RETURN_DOM_FRAGMENT||!1,Oe=Ce.RETURN_TRUSTED_TYPE||!1,Se=Ce.FORCE_BODY||!1,ge=Ce.SANITIZE_DOM!==!1,ze=Ce.SANITIZE_NAMED_PROPS||!1,$e=Ce.KEEP_CONTENT!==!1,Re=Ce.IN_PLACE||!1,z=Ce.ALLOWED_URI_REGEXP||iz,ve=Ce.NAMESPACE||pe,Ve=Ce.MATHML_TEXT_INTEGRATION_POINTS||Ve,De=Ce.HTML_INTEGRATION_POINTS||De,ie=Ce.CUSTOM_ELEMENT_HANDLING||{},Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ie.tagNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ie.attributeNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&typeof Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(ie.allowCustomizedBuiltInElements=Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),J&&(K=!1),ae&&(ce=!0),Ie&&($=Cr({},Q$),Q=[],Ie.html===!0&&(Cr($,K$),Cr(Q,Z$)),Ie.svg===!0&&(Cr($,i7),Cr(Q,o7),Cr(Q,K4)),Ie.svgFilters===!0&&(Cr($,a7),Cr(Q,o7),Cr(Q,K4)),Ie.mathMl===!0&&(Cr($,s7),Cr(Q,J$),Cr(Q,K4))),Ce.ADD_TAGS&&($===H&&($=Qf($)),Cr($,Ce.ADD_TAGS,Ue)),Ce.ADD_ATTR&&(Q===j&&(Q=Qf(Q)),Cr(Q,Ce.ADD_ATTR,Ue)),Ce.ADD_URI_SAFE_ATTR&&Cr(oe,Ce.ADD_URI_SAFE_ATTR,Ue),Ce.FORBID_CONTENTS&&(be===W&&(be=Qf(be)),Cr(be,Ce.FORBID_CONTENTS,Ue)),$e&&($["#text"]=!0),ue&&Cr($,["html","head","body"]),$.table&&(Cr($,["tbody"]),delete ne.tbody),Ce.TRUSTED_TYPES_POLICY){if(typeof Ce.TRUSTED_TYPES_POLICY.createHTML!="function")throw My('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ce.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw My('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');C=Ce.TRUSTED_TYPES_POLICY,T=C.createHTML("")}else C===void 0&&(C=Zxe(m,i)),C!==null&&typeof T=="string"&&(T=C.createHTML(""));ja&&ja(Ce),ct=Ce}},"_parseConfig"),bt=Cr({},[...i7,...a7,...Gxe]),Mt=Cr({},[...s7,...Vxe]),xt=o(function(Ce){let tt=w(Ce);(!tt||!tt.tagName)&&(tt={namespaceURI:ve,tagName:"template"});let St=Q4(Ce.tagName),mr=Q4(tt.tagName);return _e[Ce.namespaceURI]?Ce.namespaceURI===q?tt.namespaceURI===pe?St==="svg":tt.namespaceURI===xe?St==="svg"&&(mr==="annotation-xml"||Ve[mr]):!!bt[St]:Ce.namespaceURI===xe?tt.namespaceURI===pe?St==="math":tt.namespaceURI===q?St==="math"&&De[mr]:!!Mt[St]:Ce.namespaceURI===pe?tt.namespaceURI===q&&!De[mr]||tt.namespaceURI===xe&&!Ve[mr]?!1:!Mt[St]&&(qe[St]||!bt[St]):!!(at==="application/xhtml+xml"&&_e[Ce.namespaceURI]):!1},"_checkValidNamespace"),ut=o(function(Ce){Ry(e.removed,{element:Ce});try{w(Ce).removeChild(Ce)}catch{v(Ce)}},"_forceRemove"),Et=o(function(Ce,tt){try{Ry(e.removed,{attribute:tt.getAttributeNode(Ce),from:tt})}catch{Ry(e.removed,{attribute:null,from:tt})}if(tt.removeAttribute(Ce),Ce==="is")if(ce||ae)try{ut(tt)}catch{}else try{tt.setAttribute(Ce,"")}catch{}},"_removeAttribute"),ft=o(function(Ce){let tt=null,St=null;if(Se)Ce="<remove></remove>"+Ce;else{let gn=j$(Ce,/^[\r\n\t ]+/);St=gn&&gn[0]}at==="application/xhtml+xml"&&ve===pe&&(Ce='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+Ce+"</body></html>");let mr=C?C.createHTML(Ce):Ce;if(ve===pe)try{tt=new p().parseFromString(mr,at)}catch{}if(!tt||!tt.documentElement){tt=E.createDocument(ve,"template",null);try{tt.documentElement.innerHTML=Pe?T:mr}catch{}}let rn=tt.body||tt.documentElement;return Ce&&St&&rn.insertBefore(r.createTextNode(St),rn.childNodes[0]||null),ve===pe?_.call(tt,ue?"html":"body")[0]:ue?tt.documentElement:rn},"_initDocument"),yt=o(function(Ce){return A.call(Ce.ownerDocument||Ce,Ce,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),nt=o(function(Ce){return Ce instanceof d&&(typeof Ce.nodeName!="string"||typeof Ce.textContent!="string"||typeof Ce.removeChild!="function"||!(Ce.attributes instanceof f)||typeof Ce.removeAttribute!="function"||typeof Ce.setAttribute!="function"||typeof Ce.namespaceURI!="string"||typeof Ce.insertBefore!="function"||typeof Ce.hasChildNodes!="function")},"_isClobbered"),dn=o(function(Ce){return typeof l=="function"&&Ce instanceof l},"_isNode");function Tt(At,Ce,tt){j4(At,St=>{St.call(e,Ce,tt,ct)})}o(Tt,"_executeHooks");let On=o(function(Ce){let tt=null;if(Tt(D.beforeSanitizeElements,Ce,null),nt(Ce))return ut(Ce),!0;let St=Ue(Ce.nodeName);if(Tt(D.uponSanitizeElement,Ce,{tagName:St,allowedTags:$}),Ce.hasChildNodes()&&!dn(Ce.firstElementChild)&&Xa(/<[/\w]/g,Ce.innerHTML)&&Xa(/<[/\w]/g,Ce.textContent)||Ce.nodeType===Oy.progressingInstruction||se&&Ce.nodeType===Oy.comment&&Xa(/<[/\w]/g,Ce.data))return ut(Ce),!0;if(!$[St]||ne[St]){if(!ne[St]&&_r(St)&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,St)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(St)))return!1;if($e&&!be[St]){let mr=w(Ce)||Ce.parentNode,rn=b(Ce)||Ce.childNodes;if(rn&&mr){let gn=rn.length;for(let Zr=gn-1;Zr>=0;--Zr){let Ni=y(rn[Zr],!0);Ni.__removalCount=(Ce.__removalCount||0)+1,mr.insertBefore(Ni,x(Ce))}}}return ut(Ce),!0}return Ce instanceof u&&!xt(Ce)||(St==="noscript"||St==="noembed"||St==="noframes")&&Xa(/<\/no(script|embed|frames)/i,Ce.innerHTML)?(ut(Ce),!0):(J&&Ce.nodeType===Oy.text&&(tt=Ce.textContent,j4([k,L,R],mr=>{tt=Ny(tt,mr," ")}),Ce.textContent!==tt&&(Ry(e.removed,{element:Ce.cloneNode()}),Ce.textContent=tt)),Tt(D.afterSanitizeElements,Ce,null),!1)},"_sanitizeElements"),tn=o(function(Ce,tt,St){if(ge&&(tt==="id"||tt==="name")&&(St in r||St in We))return!1;if(!(K&&!le[tt]&&Xa(O,tt))){if(!(he&&Xa(M,tt))){if(!Q[tt]||le[tt]){if(!(_r(Ce)&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,Ce)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(Ce))&&(ie.attributeNameCheck instanceof RegExp&&Xa(ie.attributeNameCheck,tt)||ie.attributeNameCheck instanceof Function&&ie.attributeNameCheck(tt))||tt==="is"&&ie.allowCustomizedBuiltInElements&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,St)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(St))))return!1}else if(!oe[tt]){if(!Xa(z,Ny(St,F,""))){if(!((tt==="src"||tt==="xlink:href"||tt==="href")&&Ce!=="script"&&Bxe(St,"data:")===0&&de[Ce])){if(!(X&&!Xa(B,Ny(St,F,"")))){if(St)return!1}}}}}}return!0},"_isValidAttribute"),_r=o(function(Ce){return Ce!=="annotation-xml"&&j$(Ce,P)},"_isBasicCustomElement"),Dr=o(function(Ce){Tt(D.beforeSanitizeAttributes,Ce,null);let{attributes:tt}=Ce;if(!tt||nt(Ce))return;let St={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Q,forceKeepAttr:void 0},mr=tt.length;for(;mr--;){let rn=tt[mr],{name:gn,namespaceURI:Zr,value:Ni}=rn,Zn=Ue(gn),Sn=gn==="value"?Ni:Fxe(Ni);if(St.attrName=Zn,St.attrValue=Sn,St.keepAttr=!0,St.forceKeepAttr=void 0,Tt(D.uponSanitizeAttribute,Ce,St),Sn=St.attrValue,ze&&(Zn==="id"||Zn==="name")&&(Et(gn,Ce),Sn=He+Sn),se&&Xa(/((--!?|])>)|<\/(style|title)/i,Sn)){Et(gn,Ce);continue}if(St.forceKeepAttr||(Et(gn,Ce),!St.keepAttr))continue;if(!te&&Xa(/\/>/i,Sn)){Et(gn,Ce);continue}J&&j4([k,L,R],et=>{Sn=Ny(Sn,et," ")});let Hr=Ue(Ce.nodeName);if(tn(Hr,Zn,Sn)){if(C&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Zr)switch(m.getAttributeType(Hr,Zn)){case"TrustedHTML":{Sn=C.createHTML(Sn);break}case"TrustedScriptURL":{Sn=C.createScriptURL(Sn);break}}try{Zr?Ce.setAttributeNS(Zr,gn,Sn):Ce.setAttribute(gn,Sn),nt(Ce)?ut(Ce):X$(e.removed)}catch{}}}Tt(D.afterSanitizeAttributes,Ce,null)},"_sanitizeAttributes"),Pn=o(function At(Ce){let tt=null,St=yt(Ce);for(Tt(D.beforeSanitizeShadowDOM,Ce,null);tt=St.nextNode();)Tt(D.uponSanitizeShadowNode,tt,null),On(tt),Dr(tt),tt.content instanceof a&&At(tt.content);Tt(D.afterSanitizeShadowDOM,Ce,null)},"_sanitizeShadowDOM");return e.sanitize=function(At){let Ce=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},tt=null,St=null,mr=null,rn=null;if(Pe=!At,Pe&&(At="<!-->"),typeof At!="string"&&!dn(At))if(typeof At.toString=="function"){if(At=At.toString(),typeof At!="string")throw My("dirty is not a string, aborting")}else throw My("toString is not a function");if(!e.isSupported)return At;if(Z||Yt(Ce),e.removed=[],typeof At=="string"&&(Re=!1),Re){if(At.nodeName){let Ni=Ue(At.nodeName);if(!$[Ni]||ne[Ni])throw My("root node is forbidden and cannot be sanitized in-place")}}else if(At instanceof l)tt=ft("<!---->"),St=tt.ownerDocument.importNode(At,!0),St.nodeType===Oy.element&&St.nodeName==="BODY"||St.nodeName==="HTML"?tt=St:tt.appendChild(St);else{if(!ce&&!J&&!ue&&At.indexOf("<")===-1)return C&&Oe?C.createHTML(At):At;if(tt=ft(At),!tt)return ce?null:Oe?T:""}tt&&Se&&ut(tt.firstChild);let gn=yt(Re?At:tt);for(;mr=gn.nextNode();)On(mr),Dr(mr),mr.content instanceof a&&Pn(mr.content);if(Re)return At;if(ce){if(ae)for(rn=S.call(tt.ownerDocument);tt.firstChild;)rn.appendChild(tt.firstChild);else rn=tt;return(Q.shadowroot||Q.shadowrootmode)&&(rn=I.call(n,rn,!0)),rn}let Zr=ue?tt.outerHTML:tt.innerHTML;return ue&&$["!doctype"]&&tt.ownerDocument&&tt.ownerDocument.doctype&&tt.ownerDocument.doctype.name&&Xa(az,tt.ownerDocument.doctype.name)&&(Zr="<!DOCTYPE "+tt.ownerDocument.doctype.name+`> | |
| 15 | +`+Zr),J&&j4([k,L,R],Ni=>{Zr=Ny(Zr,Ni," ")}),C&&Oe?C.createHTML(Zr):Zr},e.setConfig=function(){let At=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Yt(At),Z=!0},e.clearConfig=function(){ct=null,Z=!1},e.isValidAttribute=function(At,Ce,tt){ct||Yt({});let St=Ue(At),mr=Ue(Ce);return tn(St,mr,tt)},e.addHook=function(At,Ce){typeof Ce=="function"&&Ry(D[At],Ce)},e.removeHook=function(At,Ce){if(Ce!==void 0){let tt=Oxe(D[At],Ce);return tt===-1?void 0:Pxe(D[At],tt,1)[0]}return X$(D[At])},e.removeHooks=function(At){D[At]=[]},e.removeAllHooks=function(){D=tz()},e}var rz,Y$,Nxe,Mxe,Ixe,ja,ko,nz,l7,c7,j4,Oxe,X$,Ry,Pxe,Q4,n7,j$,Ny,Bxe,Fxe,sl,Xa,My,K$,i7,a7,Gxe,s7,Vxe,Q$,Z$,o7,J$,K4,Uxe,Hxe,Wxe,qxe,Yxe,iz,Xxe,jxe,az,Kxe,ez,Oy,Qxe,Zxe,tz,ch,u7=N(()=>{"use strict";({entries:rz,setPrototypeOf:Y$,isFrozen:Nxe,getPrototypeOf:Mxe,getOwnPropertyDescriptor:Ixe}=Object),{freeze:ja,seal:ko,create:nz}=Object,{apply:l7,construct:c7}=typeof Reflect<"u"&&Reflect;ja||(ja=o(function(e){return e},"freeze"));ko||(ko=o(function(e){return e},"seal"));l7||(l7=o(function(e,r,n){return e.apply(r,n)},"apply"));c7||(c7=o(function(e,r){return new e(...r)},"construct"));j4=Ka(Array.prototype.forEach),Oxe=Ka(Array.prototype.lastIndexOf),X$=Ka(Array.prototype.pop),Ry=Ka(Array.prototype.push),Pxe=Ka(Array.prototype.splice),Q4=Ka(String.prototype.toLowerCase),n7=Ka(String.prototype.toString),j$=Ka(String.prototype.match),Ny=Ka(String.prototype.replace),Bxe=Ka(String.prototype.indexOf),Fxe=Ka(String.prototype.trim),sl=Ka(Object.prototype.hasOwnProperty),Xa=Ka(RegExp.prototype.test),My=$xe(TypeError);o(Ka,"unapply");o($xe,"unconstruct");o(Cr,"addToSet");o(zxe,"cleanArray");o(Qf,"clone");o(Iy,"lookupGetter");K$=ja(["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"]),i7=ja(["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"]),a7=ja(["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"]),Gxe=ja(["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"]),s7=ja(["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"]),Vxe=ja(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Q$=ja(["#text"]),Z$=ja(["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","popover","popovertarget","popovertargetaction","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","wrap","xmlns","slot"]),o7=ja(["accent-height","accumulate","additive","alignment-baseline","amplitude","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","exponent","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","intercept","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","slope","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","tablevalues","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"]),J$=ja(["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"]),K4=ja(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Uxe=ko(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Hxe=ko(/<%[\w\W]*|[\w\W]*%>/gm),Wxe=ko(/\$\{[\w\W]*/gm),qxe=ko(/^data-[\-\w.\u00B7-\uFFFF]+$/),Yxe=ko(/^aria-[\-\w]+$/),iz=ko(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Xxe=ko(/^(?:\w+script|data):/i),jxe=ko(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),az=ko(/^html$/i),Kxe=ko(/^[a-z][.\w]*(-[.\w]+)+$/i),ez=Object.freeze({__proto__:null,ARIA_ATTR:Yxe,ATTR_WHITESPACE:jxe,CUSTOM_ELEMENT:Kxe,DATA_ATTR:qxe,DOCTYPE_NAME:az,ERB_EXPR:Hxe,IS_ALLOWED_URI:iz,IS_SCRIPT_OR_DATA:Xxe,MUSTACHE_EXPR:Uxe,TMPLIT_EXPR:Wxe}),Oy={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Qxe=o(function(){return typeof window>"u"?null:window},"getGlobal"),Zxe=o(function(e,r){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let n=null,i="data-tt-policy-suffix";r&&r.hasAttribute(i)&&(n=r.getAttribute(i));let a="dompurify"+(n?"#"+n:"");try{return e.createPolicy(a,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}},"_createTrustedTypesPolicy"),tz=o(function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},"_createHooksMap");o(sz,"createDOMPurify");ch=sz()});var MG={};hr(MG,{default:()=>q4e});function abe(t){return String(t).replace(ibe,e=>nbe[e])}function cbe(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function gbe(t){for(var e=0;e<k7.length;e++)for(var r=k7[e],n=0;n<r.blocks.length;n++){var i=r.blocks[n];if(t>=i[0]&&t<=i[1])return r.name}return null}function $z(t){for(var e=0;e<u3.length;e+=2)if(t>=u3[e]&&t<=u3[e+1])return!0;return!1}function Abe(t,e){jl[t]=e}function P7(t,e,r){if(!jl[e])throw new Error("Font metrics not found for font: "+e+".");var n=t.charCodeAt(0),i=jl[e][n];if(!i&&t[0]in lz&&(n=lz[t[0]].charCodeAt(0),i=jl[e][n]),!i&&r==="text"&&$z(n)&&(i=jl[e][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}function _be(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!h7[e]){var r=h7[e]={cssEmPerMu:Z4.quad[e]/18};for(var n in Z4)Z4.hasOwnProperty(n)&&(r[n]=Z4[n][e])}return h7[e]}function hz(t){if(t instanceof Ts)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function Nbe(t){if(t instanceof td)return t;throw new Error("Expected span<HtmlDomNode> but got "+String(t)+".")}function G(t,e,r,n,i,a){An[t][i]={font:e,group:r,replace:n},a&&n&&(An[t][n]=An[t][i])}function Nt(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},u=0;u<r.length;++u)jz[r[u]]=l;e&&(a&&(p3[e]=a),s&&(m3[e]=s))}function rd(t){var{type:e,htmlBuilder:r,mathmlBuilder:n}=t;Nt({type:e,names:[],props:{numArgs:0},handler(){throw new Error("Should never be called.")},htmlBuilder:r,mathmlBuilder:n})}function a3(t,e){var r=lu(["base"],t,e),n=lu(["strut"]);return n.style.height=kt(r.height+r.depth),r.depth&&(n.style.verticalAlign=kt(-r.depth)),r.children.unshift(n),r}function _7(t,e){var r=null;t.length===1&&t[0].type==="tag"&&(r=t[0].tag,t=t[0].body);var n=Pi(t,e,"root"),i;n.length===2&&n[1].hasClass("tag")&&(i=n.pop());for(var a=[],s=[],l=0;l<n.length;l++)if(s.push(n[l]),n[l].hasClass("mbin")||n[l].hasClass("mrel")||n[l].hasClass("allowbreak")){for(var u=!1;l<n.length-1&&n[l+1].hasClass("mspace")&&!n[l+1].hasClass("newline");)l++,s.push(n[l]),n[l].hasClass("nobreak")&&(u=!0);u||(a.push(a3(s,e)),s=[])}else n[l].hasClass("newline")&&(s.pop(),s.length>0&&(a.push(a3(s,e)),s=[]),a.push(n[l]));s.length>0&&a.push(a3(s,e));var h;r?(h=a3(Pi(r,e,!0)),h.classes=["tag"],a.push(h)):i&&a.push(i);var f=lu(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=kt(f.height+f.depth),f.depth&&(d.style.verticalAlign=kt(-f.depth))}return f}function Qz(t){return new ed(t)}function gz(t,e,r,n,i){var a=ks(t,r),s;a.length===1&&a[0]instanceof ws&&Jt.contains(["mrow","mtable"],a[0].type)?s=a[0]:s=new dt.MathNode("mrow",a);var l=new dt.MathNode("annotation",[new dt.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new dt.MathNode("semantics",[s,l]),h=new dt.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");var f=i?"katex":"katex-mathml";return Be.makeSpan([f],[h])}function xr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function z7(t){var e=w3(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function w3(t){return t&&(t.type==="atom"||Ibe.hasOwnProperty(t.type))?t:null}function tG(t,e){var r=Pi(t.body,e,!0);return u4e([t.mclass],r,e)}function rG(t,e){var r,n=ks(t.body,e);return t.mclass==="minner"?r=new dt.MathNode("mpadded",n):t.mclass==="mord"?t.isCharacterBox?(r=n[0],r.type="mi"):r=new dt.MathNode("mi",n):(t.isCharacterBox?(r=n[0],r.type="mo"):r=new dt.MathNode("mo",n),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function d4e(t,e,r){var n=h4e[t];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[i,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function p4e(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new gt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var n=[],i=[n],a=0;a<e.length;a++){for(var s=e[a],l=yz(),u=0;u<s.length;u++)if(!vz(s[u]))l.body.push(s[u]);else{n.push(l),u+=1;var h=z7(s[u]).text,f=new Array(2);if(f[0]={type:"ordgroup",mode:"math",body:[]},f[1]={type:"ordgroup",mode:"math",body:[]},!("=|.".indexOf(h)>-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;m<s.length;m++){if(f4e(s[m],h)){p=!1,u=m;break}if(vz(s[m]))throw new gt("Missing a "+h+" character to complete a CD arrow.",s[m]);f[d].body.push(s[m])}if(p)throw new gt("Missing a "+h+" character to complete a CD arrow.",s[u])}else throw new gt('Expected one of "<>AV=|." after @',s[u]);var g=d4e(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};n.push(y),l=yz()}a%2===0?n.push(l):n.shift(),n=[],i.push(n)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}function k3(t,e){var r=w3(t);if(r&&Jt.contains(A4e,r.text))return r;throw r?new gt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new gt("Invalid delimiter type '"+t.type+"'",t)}function bz(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function Ql(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},u=0;u<r.length;++u)mG[r[u]]=l;a&&(p3[e]=a),s&&(m3[e]=s)}function fe(t,e){gG[t]=e}function wz(t){var e=[];t.consumeSpaces();var r=t.fetch().text;for(r==="\\relax"&&(t.consume(),t.consumeSpaces(),r=t.fetch().text);r==="\\hline"||r==="\\hdashline";)t.consume(),e.push(r==="\\hdashline"),t.consumeSpaces(),r=t.fetch().text;return e}function W7(t){if(t.indexOf("ed")===-1)return t.indexOf("*")===-1}function ph(t,e,r){var{hskipBeforeAndAfter:n,addJot:i,cols:a,arraystretch:s,colSeparationType:l,autoTag:u,singleRow:h,emptySingleRow:f,maxNumCols:d,leqno:p}=e;if(t.gullet.beginGroup(),h||t.gullet.macros.set("\\cr","\\\\\\relax"),!s){var m=t.gullet.expandMacroAsText("\\arraystretch");if(m==null)s=1;else if(s=parseFloat(m),!s||s<0)throw new gt("Invalid \\arraystretch: "+m)}t.gullet.beginGroup();var g=[],y=[g],v=[],x=[],b=u!=null?[]:void 0;function w(){u&&t.gullet.macros.set("\\@eqnsw","1",!0)}o(w,"beginRow");function C(){b&&(t.gullet.macros.get("\\df@tag")?(b.push(t.subparse([new So("\\df@tag")])),t.gullet.macros.set("\\df@tag",void 0,!0)):b.push(!!u&&t.gullet.macros.get("\\@eqnsw")==="1"))}for(o(C,"endRow"),w(),x.push(wz(t));;){var T=t.parseExpression(!1,h?"\\end":"\\\\");t.gullet.endGroup(),t.gullet.beginGroup(),T={type:"ordgroup",mode:t.mode,body:T},r&&(T={type:"styling",mode:t.mode,style:r,body:[T]}),g.push(T);var E=t.fetch().text;if(E==="&"){if(d&&g.length===d){if(h||l)throw new gt("Too many tab characters: &",t.nextToken);t.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}t.consume()}else if(E==="\\end"){C(),g.length===1&&T.type==="styling"&&T.body[0].body.length===0&&(y.length>1||!f)&&y.pop(),x.length<y.length+1&&x.push([]);break}else if(E==="\\\\"){t.consume();var A=void 0;t.gullet.future().text!==" "&&(A=t.parseSizeGroup(!0)),v.push(A?A.value:null),C(),x.push(wz(t)),g=[],y.push(g),w()}else throw new gt("Expected & or \\\\ or \\cr or \\end",t.nextToken)}return t.gullet.endGroup(),t.gullet.endGroup(),{type:"array",mode:t.mode,addJot:i,arraystretch:s,body:y,cols:a,rowGaps:v,hskipBeforeAndAfter:n,hLinesBeforeRow:x,colSeparationType:l,tags:b,leqno:p}}function q7(t){return t.slice(0,1)==="d"?"display":"text"}function SG(t,e,r){for(var n=Pi(t,e,!1),i=e.sizeMultiplier/r.sizeMultiplier,a=0;a<n.length;a++){var s=n[a].classes.indexOf("sizing");s<0?Array.prototype.push.apply(n[a].classes,e.sizingClasses(r)):n[a].classes[s+1]==="reset-size"+e.size&&(n[a].classes[s+1]="reset-size"+r.size),n[a].height*=i,n[a].depth*=i}return Be.makeFragment(n)}var Xs,So,gt,Jxe,ebe,tbe,rbe,nbe,ibe,Fz,sbe,obe,lbe,Jt,c3,zy,Yl,O7,h3,f0,su,Gy,Eo,d0,Qa,Xl,ube,hbe,fbe,dbe,pbe,mbe,tr,k7,u3,h0,ybe,vbe,xbe,bbe,wbe,Tbe,kbe,Ebe,Sbe,oz,Cbe,ed,jl,Z4,lz,h7,Dbe,cz,uz,f3,E7,Lbe,zz,ti,kt,fh,Gz,Vz,Uz,td,Vy,S7,Rbe,Ts,ll,Kl,Uy,Mbe,Ibe,An,U,it,ee,ke,Vn,It,Za,p0,er,ki,js,x3,Ee,uu,Le,Hz,fz,f7,J4,dz,d7,e3,d3,Py,t3,sr,Jn,Ca,iu,uh,C7,By,r3,n3,pz,Obe,b3,ol,Pbe,Bbe,Fbe,$be,zbe,B7,bs,Wz,Gbe,Vbe,qz,Ube,Hbe,Wbe,qbe,i3,Yz,Xz,Ybe,Be,ei,Zf,au,Xbe,jbe,jz,p3,m3,g3,di,lu,Kbe,Qbe,Zbe,Jbe,Pi,mz,Kz,e4e,A7,Hy,Fr,ws,Jf,D7,dt,Co,F7,$7,ks,dh,yn,Zz,Jz,t4e,r4e,n4e,i4e,a4e,s4e,o4e,l4e,cu,G7,eG,c4e,s3,u4e,T3,h4e,yz,vz,f4e,nG,iG,L7,aG,m4e,sG,Fy,V7,oG,g4e,y4e,lG,p7,m7,R7,o3,v4e,x4e,cG,g7,y7,v7,b4e,uG,w4e,hG,$y,T4e,k4e,E4e,fG,S4e,dG,pG,C4e,ou,xz,A4e,U7,H7,mG,gG,E3,Zl,_4e,Jl,yG,Tz,vG,xG,kz,bG,Y7,X7,Ez,Sz,wG,D4e,x7,Cz,TG,kG,m0,Wy,L4e,R4e,EG,N4e,Az,M4e,_z,I4e,CG,b7,w7,Dz,Lz,Rz,O4e,Nz,Mz,hh,AG,P4e,B4e,F4e,$4e,N7,z4e,G4e,y3,M7,V4e,Iz,j7,Oz,K7,_G,DG,LG,I7,Pz,l3,T7,Bz,v3,Q7,RG,U4e,H4e,NG,Z7,W4e,q4e,IG=N(()=>{"use strict";Xs=class t{static{o(this,"SourceLocation")}constructor(e,r,n){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=n}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},So=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,Xs.range(this,e))}},gt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n="KaTeX parse error: "+e,i,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;i=s.start,a=s.end,i===l.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var u=l.slice(i,a).replace(/[^]/g,"$&\u0332"),h;i>15?h="\u2026"+l.slice(i-15,i):h=l.slice(0,i);var f;a+15<l.length?f=l.slice(a,a+15)+"\u2026":f=l.slice(a),n+=h+u+f}var d=new Error(n);return d.name="ParseError",d.__proto__=t.prototype,d.position=i,i!=null&&a!=null&&(d.length=a-i),d.rawMessage=e,d}};gt.prototype.__proto__=Error.prototype;Jxe=o(function(e,r){return e.indexOf(r)!==-1},"contains"),ebe=o(function(e,r){return e===void 0?r:e},"deflt"),tbe=/([A-Z])/g,rbe=o(function(e){return e.replace(tbe,"-$1").toLowerCase()},"hyphenate"),nbe={"&":"&",">":">","<":"<",'"':""","'":"'"},ibe=/[&><"']/g;o(abe,"escape");Fz=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),sbe=o(function(e){var r=Fz(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),obe=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),lbe=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),Jt={contains:Jxe,deflt:ebe,escape:abe,hyphenate:rbe,getBaseElem:Fz,isCharacterBox:sbe,protocolFromUrl:lbe},c3={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand <n>",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(cbe,"getDefaultValue");zy=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in c3)if(c3.hasOwnProperty(r)){var n=c3[r];this[r]=e[r]!==void 0?n.processor?n.processor(e[r]):e[r]:cbe(n)}}reportNonstrict(e,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(e,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new gt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,n){var i=this.strict;if(typeof i=="function")try{i=i(e,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=Jt.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var n=typeof this.trust=="function"?this.trust(e):this.trust;return!!n}},Yl=class{static{o(this,"Style")}constructor(e,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=n}sup(){return Xl[ube[this.id]]}sub(){return Xl[hbe[this.id]]}fracNum(){return Xl[fbe[this.id]]}fracDen(){return Xl[dbe[this.id]]}cramp(){return Xl[pbe[this.id]]}text(){return Xl[mbe[this.id]]}isTight(){return this.size>=2}},O7=0,h3=1,f0=2,su=3,Gy=4,Eo=5,d0=6,Qa=7,Xl=[new Yl(O7,0,!1),new Yl(h3,0,!0),new Yl(f0,1,!1),new Yl(su,1,!0),new Yl(Gy,2,!1),new Yl(Eo,2,!0),new Yl(d0,3,!1),new Yl(Qa,3,!0)],ube=[Gy,Eo,Gy,Eo,d0,Qa,d0,Qa],hbe=[Eo,Eo,Eo,Eo,Qa,Qa,Qa,Qa],fbe=[f0,su,Gy,Eo,d0,Qa,d0,Qa],dbe=[su,su,Eo,Eo,Qa,Qa,Qa,Qa],pbe=[h3,h3,su,su,Eo,Eo,Qa,Qa],mbe=[O7,h3,f0,su,f0,su,f0,su],tr={DISPLAY:Xl[O7],TEXT:Xl[f0],SCRIPT:Xl[Gy],SCRIPTSCRIPT:Xl[d0]},k7=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(gbe,"scriptFromCodepoint");u3=[];k7.forEach(t=>t.blocks.forEach(e=>u3.push(...e)));o($z,"supportedCodepoint");h0=80,ybe=o(function(e,r){return"M95,"+(622+e+r)+` | |
| 16 | +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 | |
| 17 | +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 | |
| 18 | +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 | |
| 19 | +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 | |
| 20 | +c69,-144,104.5,-217.7,106.5,-221 | |
| 21 | +l`+e/2.075+" -"+e+` | |
| 22 | +c5.3,-9.3,12,-14,20,-14 | |
| 23 | +H400000v`+(40+e)+`H845.2724 | |
| 24 | +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 | |
| 25 | +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z | |
| 26 | +M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),vbe=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119 | |
| 27 | +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 | |
| 28 | +c340,-704.7,510.7,-1060.3,512,-1067 | |
| 29 | +l`+e/2.084+" -"+e+` | |
| 30 | +c4.7,-7.3,11,-11,19,-11 | |
| 31 | +H40000v`+(40+e)+`H1012.3 | |
| 32 | +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 | |
| 33 | +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 | |
| 34 | +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 | |
| 35 | +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z | |
| 36 | +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),xbe=o(function(e,r){return"M983 "+(10+e+r)+` | |
| 37 | +l`+e/3.13+" -"+e+` | |
| 38 | +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` | |
| 39 | +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 | |
| 40 | +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 | |
| 41 | +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 | |
| 42 | +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 | |
| 43 | +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 | |
| 44 | +c53.7,-170.3,84.5,-266.8,92.5,-289.5z | |
| 45 | +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),bbe=o(function(e,r){return"M424,"+(2398+e+r)+` | |
| 46 | +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 | |
| 47 | +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 | |
| 48 | +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 | |
| 49 | +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 | |
| 50 | +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 | |
| 51 | +v`+(40+e)+`H1014.6 | |
| 52 | +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 | |
| 53 | +c-2,6,-10,9,-24,9 | |
| 54 | +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+` | |
| 55 | +h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),wbe=o(function(e,r){return"M473,"+(2713+e+r)+` | |
| 56 | +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` | |
| 57 | +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 | |
| 58 | +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 | |
| 59 | +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 | |
| 60 | +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 | |
| 61 | +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, | |
| 62 | +606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),Tbe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),kbe=o(function(e,r,n){var i=n-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+` | |
| 63 | +H742v`+i+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 | |
| 64 | +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 | |
| 65 | +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 | |
| 66 | +219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),Ebe=o(function(e,r,n){r=1e3*r;var i="";switch(e){case"sqrtMain":i=ybe(r,h0);break;case"sqrtSize1":i=vbe(r,h0);break;case"sqrtSize2":i=xbe(r,h0);break;case"sqrtSize3":i=bbe(r,h0);break;case"sqrtSize4":i=wbe(r,h0);break;case"sqrtTall":i=kbe(r,h0,n)}return i},"sqrtPath"),Sbe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),oz={doubleleftarrow:`M262 157 | |
| 67 | +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 | |
| 68 | + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 | |
| 69 | + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 | |
| 70 | +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 | |
| 71 | + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 | |
| 72 | +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 | |
| 73 | +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z | |
| 74 | +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l | |
| 75 | +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 | |
| 76 | + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 | |
| 77 | +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 | |
| 78 | +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 | |
| 79 | +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 | |
| 80 | +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 | |
| 81 | +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 | |
| 82 | + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 | |
| 83 | +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 | |
| 84 | +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 | |
| 85 | + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 | |
| 86 | + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 | |
| 87 | + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 | |
| 88 | +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 | |
| 89 | + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 | |
| 90 | + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 | |
| 91 | + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 | |
| 92 | +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 | |
| 93 | +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 | |
| 94 | + 435 0h399565z`,leftgroupunder:`M400000 262 | |
| 95 | +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 | |
| 96 | + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 | |
| 97 | +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 | |
| 98 | +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 | |
| 99 | +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 | |
| 100 | + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 | |
| 101 | +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 | |
| 102 | +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z | |
| 103 | +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 | |
| 104 | + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 | |
| 105 | + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 | |
| 106 | +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 | |
| 107 | + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 | |
| 108 | +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 | |
| 109 | +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 | |
| 110 | +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 | |
| 111 | +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 | |
| 112 | + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z | |
| 113 | +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z | |
| 114 | +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 | |
| 115 | +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 | |
| 116 | +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 | |
| 117 | + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z | |
| 118 | +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334 | |
| 119 | +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 | |
| 120 | +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 | |
| 121 | + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 | |
| 122 | + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 | |
| 123 | +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 | |
| 124 | + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 | |
| 125 | + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 | |
| 126 | +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 | |
| 127 | +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z | |
| 128 | +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 | |
| 129 | +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 | |
| 130 | +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z | |
| 131 | +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 | |
| 132 | +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 | |
| 133 | +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z | |
| 134 | +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 | |
| 135 | +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 | |
| 136 | +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z | |
| 137 | +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 | |
| 138 | +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 | |
| 139 | +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 | |
| 140 | + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 | |
| 141 | + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 | |
| 142 | +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 | |
| 143 | +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 | |
| 144 | + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l | |
| 145 | +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 | |
| 146 | +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 | |
| 147 | +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 | |
| 148 | + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 | |
| 149 | +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 | |
| 150 | + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 | |
| 151 | + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 | |
| 152 | +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 | |
| 153 | +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 | |
| 154 | + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 | |
| 155 | +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 | |
| 156 | + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z | |
| 157 | +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 | |
| 158 | + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 | |
| 159 | +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 | |
| 160 | +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 | |
| 161 | + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 | |
| 162 | + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 | |
| 163 | +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z | |
| 164 | +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 | |
| 165 | + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 | |
| 166 | +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 | |
| 167 | + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z | |
| 168 | +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 | |
| 169 | + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 | |
| 170 | +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 | |
| 171 | +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 | |
| 172 | + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 | |
| 173 | +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 | |
| 174 | +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 | |
| 175 | +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 | |
| 176 | + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 | |
| 177 | +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 | |
| 178 | + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 | |
| 179 | + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 | |
| 180 | +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 | |
| 181 | + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 | |
| 182 | +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 | |
| 183 | + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 | |
| 184 | + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 | |
| 185 | +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 | |
| 186 | +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 | |
| 187 | + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 | |
| 188 | +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 | |
| 189 | + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 | |
| 190 | +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 | |
| 191 | + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 | |
| 192 | + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 | |
| 193 | + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 | |
| 194 | +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 | |
| 195 | + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 | |
| 196 | + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 | |
| 197 | + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 | |
| 198 | +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 | |
| 199 | +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 | |
| 200 | +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 | |
| 201 | +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 | |
| 202 | +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 | |
| 203 | +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 | |
| 204 | +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 | |
| 205 | +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 | |
| 206 | +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 | |
| 207 | +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, | |
| 208 | +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, | |
| 209 | +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, | |
| 210 | +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, | |
| 211 | +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 | |
| 212 | +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 | |
| 213 | +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 | |
| 214 | +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 | |
| 215 | +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 | |
| 216 | +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 | |
| 217 | +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z | |
| 218 | +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 | |
| 219 | +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 | |
| 220 | +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 | |
| 221 | +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 | |
| 222 | +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 | |
| 223 | +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 | |
| 224 | +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 | |
| 225 | +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 | |
| 226 | +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 | |
| 227 | +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 | |
| 228 | +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z | |
| 229 | +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 | |
| 230 | +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, | |
| 231 | +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 | |
| 232 | +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z | |
| 233 | +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 | |
| 234 | +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, | |
| 235 | +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, | |
| 236 | +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z | |
| 237 | +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 | |
| 238 | +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, | |
| 239 | +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 | |
| 240 | +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z | |
| 241 | +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Cbe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 | |
| 242 | +H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z | |
| 243 | +M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 | |
| 244 | +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 | |
| 245 | +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 | |
| 246 | +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 | |
| 247 | +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z | |
| 248 | +M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 | |
| 249 | +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 | |
| 250 | +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z | |
| 251 | +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z | |
| 252 | +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z | |
| 253 | +M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z | |
| 254 | +M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 | |
| 255 | +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, | |
| 256 | +-36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, | |
| 257 | +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 | |
| 258 | +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, | |
| 259 | +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 | |
| 260 | +l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, | |
| 261 | +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, | |
| 262 | +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 | |
| 263 | +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` | |
| 264 | +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 | |
| 265 | +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 | |
| 266 | +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 | |
| 267 | +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 | |
| 268 | +l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, | |
| 269 | +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),ed=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return Jt.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),r=0;r<this.children.length;r++)e.appendChild(this.children[r].toNode());return e}toMarkup(){for(var e="",r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e}toText(){var e=o(r=>r.toText(),"toText");return this.children.map(e).join("")}},jl={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Z4={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},lz={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(Abe,"setFontMetrics");o(P7,"getCharacterMetrics");h7={};o(_be,"getGlobalMetrics");Dbe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],cz=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],uz=o(function(e,r){return r.size<2?e:Dbe[e-1][r.size-1]},"sizeAtStyle"),f3=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=cz[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:uz(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:cz[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=uz(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=_be(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};f3.BASESIZE=6;E7={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},Lbe={ex:!0,em:!0,mu:!0},zz=o(function(e){return typeof e!="string"&&(e=e.unit),e in E7||e in Lbe||e==="ex"},"validUnit"),ti=o(function(e,r){var n;if(e.unit in E7)n=E7[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,e.unit==="ex")n=i.fontMetrics().xHeight;else if(e.unit==="em")n=i.fontMetrics().quad;else throw new gt("Invalid unit: '"+e.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*n,r.maxSize)},"calculateSize"),kt=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),fh=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),Gz=o(function(e,r,n){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},"initNode"),Vz=o(function(e){var r=document.createElement(e);r.className=fh(this.classes);for(var n in this.style)this.style.hasOwnProperty(n)&&(r.style[n]=this.style[n]);for(var i in this.attributes)this.attributes.hasOwnProperty(i)&&r.setAttribute(i,this.attributes[i]);for(var a=0;a<this.children.length;a++)r.appendChild(this.children[a].toNode());return r},"toNode"),Uz=o(function(e){var r="<"+e;this.classes.length&&(r+=' class="'+Jt.escape(fh(this.classes))+'"');var n="";for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(r+=' style="'+Jt.escape(n)+'"');for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&(r+=" "+a+'="'+Jt.escape(this.attributes[a])+'"');r+=">";for(var s=0;s<this.children.length;s++)r+=this.children[s].toMarkup();return r+="</"+e+">",r},"toMarkup"),td=class{static{o(this,"Span")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,Gz.call(this,e,n,i),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return Vz.call(this,"span")}toMarkup(){return Uz.call(this,"span")}},Vy=class{static{o(this,"Anchor")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Gz.call(this,r,i),this.children=n||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return Vz.call(this,"a")}toMarkup(){return Uz.call(this,"a")}},S7=class{static{o(this,"Img")}constructor(e,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=n}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e='<img src="'+Jt.escape(this.src)+'"'+(' alt="'+Jt.escape(this.alt)+'"'),r="";for(var n in this.style)this.style.hasOwnProperty(n)&&(r+=Jt.hyphenate(n)+":"+this.style[n]+";");return r&&(e+=' style="'+Jt.escape(r)+'"'),e+="'/>",e}},Rbe={\u00EE:"\u0131\u0302",\u00EF:"\u0131\u0308",\u00ED:"\u0131\u0301",\u00EC:"\u0131\u0300"},Ts=class{static{o(this,"SymbolNode")}constructor(e,r,n,i,a,s,l,u){this.text=void 0,this.height=void 0,this.depth=void 0,this.italic=void 0,this.skew=void 0,this.width=void 0,this.maxFontSize=void 0,this.classes=void 0,this.style=void 0,this.text=e,this.height=r||0,this.depth=n||0,this.italic=i||0,this.skew=a||0,this.width=s||0,this.classes=l||[],this.style=u||{},this.maxFontSize=0;var h=gbe(this.text.charCodeAt(0));h&&this.classes.push(h+"_fallback"),/[îïíì]/.test(this.text)&&(this.text=Rbe[this.text])}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createTextNode(this.text),r=null;this.italic>0&&(r=document.createElement("span"),r.style.marginRight=kt(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=fh(this.classes));for(var n in this.style)this.style.hasOwnProperty(n)&&(r=r||document.createElement("span"),r.style[n]=this.style[n]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="<span";this.classes.length&&(e=!0,r+=' class="',r+=Jt.escape(fh(this.classes)),r+='"');var n="";this.italic>0&&(n+="margin-right:"+this.italic+"em;");for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(e=!0,r+=' style="'+Jt.escape(n)+'"');var a=Jt.escape(this.text);return e?(r+=">",r+=a,r+="</span>",r):a}},ll=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);for(var i=0;i<this.children.length;i++)r.appendChild(this.children[i].toNode());return r}toMarkup(){var e='<svg xmlns="http://www.w3.org/2000/svg"';for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="'+Jt.escape(this.attributes[r])+'"');e+=">";for(var n=0;n<this.children.length;n++)e+=this.children[n].toMarkup();return e+="</svg>",e}},Kl=class{static{o(this,"PathNode")}constructor(e,r){this.pathName=void 0,this.alternate=void 0,this.pathName=e,this.alternate=r}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"path");return this.alternate?r.setAttribute("d",this.alternate):r.setAttribute("d",oz[this.pathName]),r}toMarkup(){return this.alternate?'<path d="'+Jt.escape(this.alternate)+'"/>':'<path d="'+Jt.escape(oz[this.pathName])+'"/>'}},Uy=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var e="<line";for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="'+Jt.escape(this.attributes[r])+'"');return e+="/>",e}};o(hz,"assertSymbolDomNode");o(Nbe,"assertSpan");Mbe={bin:1,close:1,inner:1,open:1,punct:1,rel:1},Ibe={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},An={math:{},text:{}};o(G,"defineSymbol");U="math",it="text",ee="main",ke="ams",Vn="accent-token",It="bin",Za="close",p0="inner",er="mathord",ki="op-token",js="open",x3="punct",Ee="rel",uu="spacing",Le="textord";G(U,ee,Ee,"\u2261","\\equiv",!0);G(U,ee,Ee,"\u227A","\\prec",!0);G(U,ee,Ee,"\u227B","\\succ",!0);G(U,ee,Ee,"\u223C","\\sim",!0);G(U,ee,Ee,"\u22A5","\\perp");G(U,ee,Ee,"\u2AAF","\\preceq",!0);G(U,ee,Ee,"\u2AB0","\\succeq",!0);G(U,ee,Ee,"\u2243","\\simeq",!0);G(U,ee,Ee,"\u2223","\\mid",!0);G(U,ee,Ee,"\u226A","\\ll",!0);G(U,ee,Ee,"\u226B","\\gg",!0);G(U,ee,Ee,"\u224D","\\asymp",!0);G(U,ee,Ee,"\u2225","\\parallel");G(U,ee,Ee,"\u22C8","\\bowtie",!0);G(U,ee,Ee,"\u2323","\\smile",!0);G(U,ee,Ee,"\u2291","\\sqsubseteq",!0);G(U,ee,Ee,"\u2292","\\sqsupseteq",!0);G(U,ee,Ee,"\u2250","\\doteq",!0);G(U,ee,Ee,"\u2322","\\frown",!0);G(U,ee,Ee,"\u220B","\\ni",!0);G(U,ee,Ee,"\u221D","\\propto",!0);G(U,ee,Ee,"\u22A2","\\vdash",!0);G(U,ee,Ee,"\u22A3","\\dashv",!0);G(U,ee,Ee,"\u220B","\\owns");G(U,ee,x3,".","\\ldotp");G(U,ee,x3,"\u22C5","\\cdotp");G(U,ee,Le,"#","\\#");G(it,ee,Le,"#","\\#");G(U,ee,Le,"&","\\&");G(it,ee,Le,"&","\\&");G(U,ee,Le,"\u2135","\\aleph",!0);G(U,ee,Le,"\u2200","\\forall",!0);G(U,ee,Le,"\u210F","\\hbar",!0);G(U,ee,Le,"\u2203","\\exists",!0);G(U,ee,Le,"\u2207","\\nabla",!0);G(U,ee,Le,"\u266D","\\flat",!0);G(U,ee,Le,"\u2113","\\ell",!0);G(U,ee,Le,"\u266E","\\natural",!0);G(U,ee,Le,"\u2663","\\clubsuit",!0);G(U,ee,Le,"\u2118","\\wp",!0);G(U,ee,Le,"\u266F","\\sharp",!0);G(U,ee,Le,"\u2662","\\diamondsuit",!0);G(U,ee,Le,"\u211C","\\Re",!0);G(U,ee,Le,"\u2661","\\heartsuit",!0);G(U,ee,Le,"\u2111","\\Im",!0);G(U,ee,Le,"\u2660","\\spadesuit",!0);G(U,ee,Le,"\xA7","\\S",!0);G(it,ee,Le,"\xA7","\\S");G(U,ee,Le,"\xB6","\\P",!0);G(it,ee,Le,"\xB6","\\P");G(U,ee,Le,"\u2020","\\dag");G(it,ee,Le,"\u2020","\\dag");G(it,ee,Le,"\u2020","\\textdagger");G(U,ee,Le,"\u2021","\\ddag");G(it,ee,Le,"\u2021","\\ddag");G(it,ee,Le,"\u2021","\\textdaggerdbl");G(U,ee,Za,"\u23B1","\\rmoustache",!0);G(U,ee,js,"\u23B0","\\lmoustache",!0);G(U,ee,Za,"\u27EF","\\rgroup",!0);G(U,ee,js,"\u27EE","\\lgroup",!0);G(U,ee,It,"\u2213","\\mp",!0);G(U,ee,It,"\u2296","\\ominus",!0);G(U,ee,It,"\u228E","\\uplus",!0);G(U,ee,It,"\u2293","\\sqcap",!0);G(U,ee,It,"\u2217","\\ast");G(U,ee,It,"\u2294","\\sqcup",!0);G(U,ee,It,"\u25EF","\\bigcirc",!0);G(U,ee,It,"\u2219","\\bullet",!0);G(U,ee,It,"\u2021","\\ddagger");G(U,ee,It,"\u2240","\\wr",!0);G(U,ee,It,"\u2A3F","\\amalg");G(U,ee,It,"&","\\And");G(U,ee,Ee,"\u27F5","\\longleftarrow",!0);G(U,ee,Ee,"\u21D0","\\Leftarrow",!0);G(U,ee,Ee,"\u27F8","\\Longleftarrow",!0);G(U,ee,Ee,"\u27F6","\\longrightarrow",!0);G(U,ee,Ee,"\u21D2","\\Rightarrow",!0);G(U,ee,Ee,"\u27F9","\\Longrightarrow",!0);G(U,ee,Ee,"\u2194","\\leftrightarrow",!0);G(U,ee,Ee,"\u27F7","\\longleftrightarrow",!0);G(U,ee,Ee,"\u21D4","\\Leftrightarrow",!0);G(U,ee,Ee,"\u27FA","\\Longleftrightarrow",!0);G(U,ee,Ee,"\u21A6","\\mapsto",!0);G(U,ee,Ee,"\u27FC","\\longmapsto",!0);G(U,ee,Ee,"\u2197","\\nearrow",!0);G(U,ee,Ee,"\u21A9","\\hookleftarrow",!0);G(U,ee,Ee,"\u21AA","\\hookrightarrow",!0);G(U,ee,Ee,"\u2198","\\searrow",!0);G(U,ee,Ee,"\u21BC","\\leftharpoonup",!0);G(U,ee,Ee,"\u21C0","\\rightharpoonup",!0);G(U,ee,Ee,"\u2199","\\swarrow",!0);G(U,ee,Ee,"\u21BD","\\leftharpoondown",!0);G(U,ee,Ee,"\u21C1","\\rightharpoondown",!0);G(U,ee,Ee,"\u2196","\\nwarrow",!0);G(U,ee,Ee,"\u21CC","\\rightleftharpoons",!0);G(U,ke,Ee,"\u226E","\\nless",!0);G(U,ke,Ee,"\uE010","\\@nleqslant");G(U,ke,Ee,"\uE011","\\@nleqq");G(U,ke,Ee,"\u2A87","\\lneq",!0);G(U,ke,Ee,"\u2268","\\lneqq",!0);G(U,ke,Ee,"\uE00C","\\@lvertneqq");G(U,ke,Ee,"\u22E6","\\lnsim",!0);G(U,ke,Ee,"\u2A89","\\lnapprox",!0);G(U,ke,Ee,"\u2280","\\nprec",!0);G(U,ke,Ee,"\u22E0","\\npreceq",!0);G(U,ke,Ee,"\u22E8","\\precnsim",!0);G(U,ke,Ee,"\u2AB9","\\precnapprox",!0);G(U,ke,Ee,"\u2241","\\nsim",!0);G(U,ke,Ee,"\uE006","\\@nshortmid");G(U,ke,Ee,"\u2224","\\nmid",!0);G(U,ke,Ee,"\u22AC","\\nvdash",!0);G(U,ke,Ee,"\u22AD","\\nvDash",!0);G(U,ke,Ee,"\u22EA","\\ntriangleleft");G(U,ke,Ee,"\u22EC","\\ntrianglelefteq",!0);G(U,ke,Ee,"\u228A","\\subsetneq",!0);G(U,ke,Ee,"\uE01A","\\@varsubsetneq");G(U,ke,Ee,"\u2ACB","\\subsetneqq",!0);G(U,ke,Ee,"\uE017","\\@varsubsetneqq");G(U,ke,Ee,"\u226F","\\ngtr",!0);G(U,ke,Ee,"\uE00F","\\@ngeqslant");G(U,ke,Ee,"\uE00E","\\@ngeqq");G(U,ke,Ee,"\u2A88","\\gneq",!0);G(U,ke,Ee,"\u2269","\\gneqq",!0);G(U,ke,Ee,"\uE00D","\\@gvertneqq");G(U,ke,Ee,"\u22E7","\\gnsim",!0);G(U,ke,Ee,"\u2A8A","\\gnapprox",!0);G(U,ke,Ee,"\u2281","\\nsucc",!0);G(U,ke,Ee,"\u22E1","\\nsucceq",!0);G(U,ke,Ee,"\u22E9","\\succnsim",!0);G(U,ke,Ee,"\u2ABA","\\succnapprox",!0);G(U,ke,Ee,"\u2246","\\ncong",!0);G(U,ke,Ee,"\uE007","\\@nshortparallel");G(U,ke,Ee,"\u2226","\\nparallel",!0);G(U,ke,Ee,"\u22AF","\\nVDash",!0);G(U,ke,Ee,"\u22EB","\\ntriangleright");G(U,ke,Ee,"\u22ED","\\ntrianglerighteq",!0);G(U,ke,Ee,"\uE018","\\@nsupseteqq");G(U,ke,Ee,"\u228B","\\supsetneq",!0);G(U,ke,Ee,"\uE01B","\\@varsupsetneq");G(U,ke,Ee,"\u2ACC","\\supsetneqq",!0);G(U,ke,Ee,"\uE019","\\@varsupsetneqq");G(U,ke,Ee,"\u22AE","\\nVdash",!0);G(U,ke,Ee,"\u2AB5","\\precneqq",!0);G(U,ke,Ee,"\u2AB6","\\succneqq",!0);G(U,ke,Ee,"\uE016","\\@nsubseteqq");G(U,ke,It,"\u22B4","\\unlhd");G(U,ke,It,"\u22B5","\\unrhd");G(U,ke,Ee,"\u219A","\\nleftarrow",!0);G(U,ke,Ee,"\u219B","\\nrightarrow",!0);G(U,ke,Ee,"\u21CD","\\nLeftarrow",!0);G(U,ke,Ee,"\u21CF","\\nRightarrow",!0);G(U,ke,Ee,"\u21AE","\\nleftrightarrow",!0);G(U,ke,Ee,"\u21CE","\\nLeftrightarrow",!0);G(U,ke,Ee,"\u25B3","\\vartriangle");G(U,ke,Le,"\u210F","\\hslash");G(U,ke,Le,"\u25BD","\\triangledown");G(U,ke,Le,"\u25CA","\\lozenge");G(U,ke,Le,"\u24C8","\\circledS");G(U,ke,Le,"\xAE","\\circledR");G(it,ke,Le,"\xAE","\\circledR");G(U,ke,Le,"\u2221","\\measuredangle",!0);G(U,ke,Le,"\u2204","\\nexists");G(U,ke,Le,"\u2127","\\mho");G(U,ke,Le,"\u2132","\\Finv",!0);G(U,ke,Le,"\u2141","\\Game",!0);G(U,ke,Le,"\u2035","\\backprime");G(U,ke,Le,"\u25B2","\\blacktriangle");G(U,ke,Le,"\u25BC","\\blacktriangledown");G(U,ke,Le,"\u25A0","\\blacksquare");G(U,ke,Le,"\u29EB","\\blacklozenge");G(U,ke,Le,"\u2605","\\bigstar");G(U,ke,Le,"\u2222","\\sphericalangle",!0);G(U,ke,Le,"\u2201","\\complement",!0);G(U,ke,Le,"\xF0","\\eth",!0);G(it,ee,Le,"\xF0","\xF0");G(U,ke,Le,"\u2571","\\diagup");G(U,ke,Le,"\u2572","\\diagdown");G(U,ke,Le,"\u25A1","\\square");G(U,ke,Le,"\u25A1","\\Box");G(U,ke,Le,"\u25CA","\\Diamond");G(U,ke,Le,"\xA5","\\yen",!0);G(it,ke,Le,"\xA5","\\yen",!0);G(U,ke,Le,"\u2713","\\checkmark",!0);G(it,ke,Le,"\u2713","\\checkmark");G(U,ke,Le,"\u2136","\\beth",!0);G(U,ke,Le,"\u2138","\\daleth",!0);G(U,ke,Le,"\u2137","\\gimel",!0);G(U,ke,Le,"\u03DD","\\digamma",!0);G(U,ke,Le,"\u03F0","\\varkappa");G(U,ke,js,"\u250C","\\@ulcorner",!0);G(U,ke,Za,"\u2510","\\@urcorner",!0);G(U,ke,js,"\u2514","\\@llcorner",!0);G(U,ke,Za,"\u2518","\\@lrcorner",!0);G(U,ke,Ee,"\u2266","\\leqq",!0);G(U,ke,Ee,"\u2A7D","\\leqslant",!0);G(U,ke,Ee,"\u2A95","\\eqslantless",!0);G(U,ke,Ee,"\u2272","\\lesssim",!0);G(U,ke,Ee,"\u2A85","\\lessapprox",!0);G(U,ke,Ee,"\u224A","\\approxeq",!0);G(U,ke,It,"\u22D6","\\lessdot");G(U,ke,Ee,"\u22D8","\\lll",!0);G(U,ke,Ee,"\u2276","\\lessgtr",!0);G(U,ke,Ee,"\u22DA","\\lesseqgtr",!0);G(U,ke,Ee,"\u2A8B","\\lesseqqgtr",!0);G(U,ke,Ee,"\u2251","\\doteqdot");G(U,ke,Ee,"\u2253","\\risingdotseq",!0);G(U,ke,Ee,"\u2252","\\fallingdotseq",!0);G(U,ke,Ee,"\u223D","\\backsim",!0);G(U,ke,Ee,"\u22CD","\\backsimeq",!0);G(U,ke,Ee,"\u2AC5","\\subseteqq",!0);G(U,ke,Ee,"\u22D0","\\Subset",!0);G(U,ke,Ee,"\u228F","\\sqsubset",!0);G(U,ke,Ee,"\u227C","\\preccurlyeq",!0);G(U,ke,Ee,"\u22DE","\\curlyeqprec",!0);G(U,ke,Ee,"\u227E","\\precsim",!0);G(U,ke,Ee,"\u2AB7","\\precapprox",!0);G(U,ke,Ee,"\u22B2","\\vartriangleleft");G(U,ke,Ee,"\u22B4","\\trianglelefteq");G(U,ke,Ee,"\u22A8","\\vDash",!0);G(U,ke,Ee,"\u22AA","\\Vvdash",!0);G(U,ke,Ee,"\u2323","\\smallsmile");G(U,ke,Ee,"\u2322","\\smallfrown");G(U,ke,Ee,"\u224F","\\bumpeq",!0);G(U,ke,Ee,"\u224E","\\Bumpeq",!0);G(U,ke,Ee,"\u2267","\\geqq",!0);G(U,ke,Ee,"\u2A7E","\\geqslant",!0);G(U,ke,Ee,"\u2A96","\\eqslantgtr",!0);G(U,ke,Ee,"\u2273","\\gtrsim",!0);G(U,ke,Ee,"\u2A86","\\gtrapprox",!0);G(U,ke,It,"\u22D7","\\gtrdot");G(U,ke,Ee,"\u22D9","\\ggg",!0);G(U,ke,Ee,"\u2277","\\gtrless",!0);G(U,ke,Ee,"\u22DB","\\gtreqless",!0);G(U,ke,Ee,"\u2A8C","\\gtreqqless",!0);G(U,ke,Ee,"\u2256","\\eqcirc",!0);G(U,ke,Ee,"\u2257","\\circeq",!0);G(U,ke,Ee,"\u225C","\\triangleq",!0);G(U,ke,Ee,"\u223C","\\thicksim");G(U,ke,Ee,"\u2248","\\thickapprox");G(U,ke,Ee,"\u2AC6","\\supseteqq",!0);G(U,ke,Ee,"\u22D1","\\Supset",!0);G(U,ke,Ee,"\u2290","\\sqsupset",!0);G(U,ke,Ee,"\u227D","\\succcurlyeq",!0);G(U,ke,Ee,"\u22DF","\\curlyeqsucc",!0);G(U,ke,Ee,"\u227F","\\succsim",!0);G(U,ke,Ee,"\u2AB8","\\succapprox",!0);G(U,ke,Ee,"\u22B3","\\vartriangleright");G(U,ke,Ee,"\u22B5","\\trianglerighteq");G(U,ke,Ee,"\u22A9","\\Vdash",!0);G(U,ke,Ee,"\u2223","\\shortmid");G(U,ke,Ee,"\u2225","\\shortparallel");G(U,ke,Ee,"\u226C","\\between",!0);G(U,ke,Ee,"\u22D4","\\pitchfork",!0);G(U,ke,Ee,"\u221D","\\varpropto");G(U,ke,Ee,"\u25C0","\\blacktriangleleft");G(U,ke,Ee,"\u2234","\\therefore",!0);G(U,ke,Ee,"\u220D","\\backepsilon");G(U,ke,Ee,"\u25B6","\\blacktriangleright");G(U,ke,Ee,"\u2235","\\because",!0);G(U,ke,Ee,"\u22D8","\\llless");G(U,ke,Ee,"\u22D9","\\gggtr");G(U,ke,It,"\u22B2","\\lhd");G(U,ke,It,"\u22B3","\\rhd");G(U,ke,Ee,"\u2242","\\eqsim",!0);G(U,ee,Ee,"\u22C8","\\Join");G(U,ke,Ee,"\u2251","\\Doteq",!0);G(U,ke,It,"\u2214","\\dotplus",!0);G(U,ke,It,"\u2216","\\smallsetminus");G(U,ke,It,"\u22D2","\\Cap",!0);G(U,ke,It,"\u22D3","\\Cup",!0);G(U,ke,It,"\u2A5E","\\doublebarwedge",!0);G(U,ke,It,"\u229F","\\boxminus",!0);G(U,ke,It,"\u229E","\\boxplus",!0);G(U,ke,It,"\u22C7","\\divideontimes",!0);G(U,ke,It,"\u22C9","\\ltimes",!0);G(U,ke,It,"\u22CA","\\rtimes",!0);G(U,ke,It,"\u22CB","\\leftthreetimes",!0);G(U,ke,It,"\u22CC","\\rightthreetimes",!0);G(U,ke,It,"\u22CF","\\curlywedge",!0);G(U,ke,It,"\u22CE","\\curlyvee",!0);G(U,ke,It,"\u229D","\\circleddash",!0);G(U,ke,It,"\u229B","\\circledast",!0);G(U,ke,It,"\u22C5","\\centerdot");G(U,ke,It,"\u22BA","\\intercal",!0);G(U,ke,It,"\u22D2","\\doublecap");G(U,ke,It,"\u22D3","\\doublecup");G(U,ke,It,"\u22A0","\\boxtimes",!0);G(U,ke,Ee,"\u21E2","\\dashrightarrow",!0);G(U,ke,Ee,"\u21E0","\\dashleftarrow",!0);G(U,ke,Ee,"\u21C7","\\leftleftarrows",!0);G(U,ke,Ee,"\u21C6","\\leftrightarrows",!0);G(U,ke,Ee,"\u21DA","\\Lleftarrow",!0);G(U,ke,Ee,"\u219E","\\twoheadleftarrow",!0);G(U,ke,Ee,"\u21A2","\\leftarrowtail",!0);G(U,ke,Ee,"\u21AB","\\looparrowleft",!0);G(U,ke,Ee,"\u21CB","\\leftrightharpoons",!0);G(U,ke,Ee,"\u21B6","\\curvearrowleft",!0);G(U,ke,Ee,"\u21BA","\\circlearrowleft",!0);G(U,ke,Ee,"\u21B0","\\Lsh",!0);G(U,ke,Ee,"\u21C8","\\upuparrows",!0);G(U,ke,Ee,"\u21BF","\\upharpoonleft",!0);G(U,ke,Ee,"\u21C3","\\downharpoonleft",!0);G(U,ee,Ee,"\u22B6","\\origof",!0);G(U,ee,Ee,"\u22B7","\\imageof",!0);G(U,ke,Ee,"\u22B8","\\multimap",!0);G(U,ke,Ee,"\u21AD","\\leftrightsquigarrow",!0);G(U,ke,Ee,"\u21C9","\\rightrightarrows",!0);G(U,ke,Ee,"\u21C4","\\rightleftarrows",!0);G(U,ke,Ee,"\u21A0","\\twoheadrightarrow",!0);G(U,ke,Ee,"\u21A3","\\rightarrowtail",!0);G(U,ke,Ee,"\u21AC","\\looparrowright",!0);G(U,ke,Ee,"\u21B7","\\curvearrowright",!0);G(U,ke,Ee,"\u21BB","\\circlearrowright",!0);G(U,ke,Ee,"\u21B1","\\Rsh",!0);G(U,ke,Ee,"\u21CA","\\downdownarrows",!0);G(U,ke,Ee,"\u21BE","\\upharpoonright",!0);G(U,ke,Ee,"\u21C2","\\downharpoonright",!0);G(U,ke,Ee,"\u21DD","\\rightsquigarrow",!0);G(U,ke,Ee,"\u21DD","\\leadsto");G(U,ke,Ee,"\u21DB","\\Rrightarrow",!0);G(U,ke,Ee,"\u21BE","\\restriction");G(U,ee,Le,"\u2018","`");G(U,ee,Le,"$","\\$");G(it,ee,Le,"$","\\$");G(it,ee,Le,"$","\\textdollar");G(U,ee,Le,"%","\\%");G(it,ee,Le,"%","\\%");G(U,ee,Le,"_","\\_");G(it,ee,Le,"_","\\_");G(it,ee,Le,"_","\\textunderscore");G(U,ee,Le,"\u2220","\\angle",!0);G(U,ee,Le,"\u221E","\\infty",!0);G(U,ee,Le,"\u2032","\\prime");G(U,ee,Le,"\u25B3","\\triangle");G(U,ee,Le,"\u0393","\\Gamma",!0);G(U,ee,Le,"\u0394","\\Delta",!0);G(U,ee,Le,"\u0398","\\Theta",!0);G(U,ee,Le,"\u039B","\\Lambda",!0);G(U,ee,Le,"\u039E","\\Xi",!0);G(U,ee,Le,"\u03A0","\\Pi",!0);G(U,ee,Le,"\u03A3","\\Sigma",!0);G(U,ee,Le,"\u03A5","\\Upsilon",!0);G(U,ee,Le,"\u03A6","\\Phi",!0);G(U,ee,Le,"\u03A8","\\Psi",!0);G(U,ee,Le,"\u03A9","\\Omega",!0);G(U,ee,Le,"A","\u0391");G(U,ee,Le,"B","\u0392");G(U,ee,Le,"E","\u0395");G(U,ee,Le,"Z","\u0396");G(U,ee,Le,"H","\u0397");G(U,ee,Le,"I","\u0399");G(U,ee,Le,"K","\u039A");G(U,ee,Le,"M","\u039C");G(U,ee,Le,"N","\u039D");G(U,ee,Le,"O","\u039F");G(U,ee,Le,"P","\u03A1");G(U,ee,Le,"T","\u03A4");G(U,ee,Le,"X","\u03A7");G(U,ee,Le,"\xAC","\\neg",!0);G(U,ee,Le,"\xAC","\\lnot");G(U,ee,Le,"\u22A4","\\top");G(U,ee,Le,"\u22A5","\\bot");G(U,ee,Le,"\u2205","\\emptyset");G(U,ke,Le,"\u2205","\\varnothing");G(U,ee,er,"\u03B1","\\alpha",!0);G(U,ee,er,"\u03B2","\\beta",!0);G(U,ee,er,"\u03B3","\\gamma",!0);G(U,ee,er,"\u03B4","\\delta",!0);G(U,ee,er,"\u03F5","\\epsilon",!0);G(U,ee,er,"\u03B6","\\zeta",!0);G(U,ee,er,"\u03B7","\\eta",!0);G(U,ee,er,"\u03B8","\\theta",!0);G(U,ee,er,"\u03B9","\\iota",!0);G(U,ee,er,"\u03BA","\\kappa",!0);G(U,ee,er,"\u03BB","\\lambda",!0);G(U,ee,er,"\u03BC","\\mu",!0);G(U,ee,er,"\u03BD","\\nu",!0);G(U,ee,er,"\u03BE","\\xi",!0);G(U,ee,er,"\u03BF","\\omicron",!0);G(U,ee,er,"\u03C0","\\pi",!0);G(U,ee,er,"\u03C1","\\rho",!0);G(U,ee,er,"\u03C3","\\sigma",!0);G(U,ee,er,"\u03C4","\\tau",!0);G(U,ee,er,"\u03C5","\\upsilon",!0);G(U,ee,er,"\u03D5","\\phi",!0);G(U,ee,er,"\u03C7","\\chi",!0);G(U,ee,er,"\u03C8","\\psi",!0);G(U,ee,er,"\u03C9","\\omega",!0);G(U,ee,er,"\u03B5","\\varepsilon",!0);G(U,ee,er,"\u03D1","\\vartheta",!0);G(U,ee,er,"\u03D6","\\varpi",!0);G(U,ee,er,"\u03F1","\\varrho",!0);G(U,ee,er,"\u03C2","\\varsigma",!0);G(U,ee,er,"\u03C6","\\varphi",!0);G(U,ee,It,"\u2217","*",!0);G(U,ee,It,"+","+");G(U,ee,It,"\u2212","-",!0);G(U,ee,It,"\u22C5","\\cdot",!0);G(U,ee,It,"\u2218","\\circ",!0);G(U,ee,It,"\xF7","\\div",!0);G(U,ee,It,"\xB1","\\pm",!0);G(U,ee,It,"\xD7","\\times",!0);G(U,ee,It,"\u2229","\\cap",!0);G(U,ee,It,"\u222A","\\cup",!0);G(U,ee,It,"\u2216","\\setminus",!0);G(U,ee,It,"\u2227","\\land");G(U,ee,It,"\u2228","\\lor");G(U,ee,It,"\u2227","\\wedge",!0);G(U,ee,It,"\u2228","\\vee",!0);G(U,ee,Le,"\u221A","\\surd");G(U,ee,js,"\u27E8","\\langle",!0);G(U,ee,js,"\u2223","\\lvert");G(U,ee,js,"\u2225","\\lVert");G(U,ee,Za,"?","?");G(U,ee,Za,"!","!");G(U,ee,Za,"\u27E9","\\rangle",!0);G(U,ee,Za,"\u2223","\\rvert");G(U,ee,Za,"\u2225","\\rVert");G(U,ee,Ee,"=","=");G(U,ee,Ee,":",":");G(U,ee,Ee,"\u2248","\\approx",!0);G(U,ee,Ee,"\u2245","\\cong",!0);G(U,ee,Ee,"\u2265","\\ge");G(U,ee,Ee,"\u2265","\\geq",!0);G(U,ee,Ee,"\u2190","\\gets");G(U,ee,Ee,">","\\gt",!0);G(U,ee,Ee,"\u2208","\\in",!0);G(U,ee,Ee,"\uE020","\\@not");G(U,ee,Ee,"\u2282","\\subset",!0);G(U,ee,Ee,"\u2283","\\supset",!0);G(U,ee,Ee,"\u2286","\\subseteq",!0);G(U,ee,Ee,"\u2287","\\supseteq",!0);G(U,ke,Ee,"\u2288","\\nsubseteq",!0);G(U,ke,Ee,"\u2289","\\nsupseteq",!0);G(U,ee,Ee,"\u22A8","\\models");G(U,ee,Ee,"\u2190","\\leftarrow",!0);G(U,ee,Ee,"\u2264","\\le");G(U,ee,Ee,"\u2264","\\leq",!0);G(U,ee,Ee,"<","\\lt",!0);G(U,ee,Ee,"\u2192","\\rightarrow",!0);G(U,ee,Ee,"\u2192","\\to");G(U,ke,Ee,"\u2271","\\ngeq",!0);G(U,ke,Ee,"\u2270","\\nleq",!0);G(U,ee,uu,"\xA0","\\ ");G(U,ee,uu,"\xA0","\\space");G(U,ee,uu,"\xA0","\\nobreakspace");G(it,ee,uu,"\xA0","\\ ");G(it,ee,uu,"\xA0"," ");G(it,ee,uu,"\xA0","\\space");G(it,ee,uu,"\xA0","\\nobreakspace");G(U,ee,uu,null,"\\nobreak");G(U,ee,uu,null,"\\allowbreak");G(U,ee,x3,",",",");G(U,ee,x3,";",";");G(U,ke,It,"\u22BC","\\barwedge",!0);G(U,ke,It,"\u22BB","\\veebar",!0);G(U,ee,It,"\u2299","\\odot",!0);G(U,ee,It,"\u2295","\\oplus",!0);G(U,ee,It,"\u2297","\\otimes",!0);G(U,ee,Le,"\u2202","\\partial",!0);G(U,ee,It,"\u2298","\\oslash",!0);G(U,ke,It,"\u229A","\\circledcirc",!0);G(U,ke,It,"\u22A1","\\boxdot",!0);G(U,ee,It,"\u25B3","\\bigtriangleup");G(U,ee,It,"\u25BD","\\bigtriangledown");G(U,ee,It,"\u2020","\\dagger");G(U,ee,It,"\u22C4","\\diamond");G(U,ee,It,"\u22C6","\\star");G(U,ee,It,"\u25C3","\\triangleleft");G(U,ee,It,"\u25B9","\\triangleright");G(U,ee,js,"{","\\{");G(it,ee,Le,"{","\\{");G(it,ee,Le,"{","\\textbraceleft");G(U,ee,Za,"}","\\}");G(it,ee,Le,"}","\\}");G(it,ee,Le,"}","\\textbraceright");G(U,ee,js,"{","\\lbrace");G(U,ee,Za,"}","\\rbrace");G(U,ee,js,"[","\\lbrack",!0);G(it,ee,Le,"[","\\lbrack",!0);G(U,ee,Za,"]","\\rbrack",!0);G(it,ee,Le,"]","\\rbrack",!0);G(U,ee,js,"(","\\lparen",!0);G(U,ee,Za,")","\\rparen",!0);G(it,ee,Le,"<","\\textless",!0);G(it,ee,Le,">","\\textgreater",!0);G(U,ee,js,"\u230A","\\lfloor",!0);G(U,ee,Za,"\u230B","\\rfloor",!0);G(U,ee,js,"\u2308","\\lceil",!0);G(U,ee,Za,"\u2309","\\rceil",!0);G(U,ee,Le,"\\","\\backslash");G(U,ee,Le,"\u2223","|");G(U,ee,Le,"\u2223","\\vert");G(it,ee,Le,"|","\\textbar",!0);G(U,ee,Le,"\u2225","\\|");G(U,ee,Le,"\u2225","\\Vert");G(it,ee,Le,"\u2225","\\textbardbl");G(it,ee,Le,"~","\\textasciitilde");G(it,ee,Le,"\\","\\textbackslash");G(it,ee,Le,"^","\\textasciicircum");G(U,ee,Ee,"\u2191","\\uparrow",!0);G(U,ee,Ee,"\u21D1","\\Uparrow",!0);G(U,ee,Ee,"\u2193","\\downarrow",!0);G(U,ee,Ee,"\u21D3","\\Downarrow",!0);G(U,ee,Ee,"\u2195","\\updownarrow",!0);G(U,ee,Ee,"\u21D5","\\Updownarrow",!0);G(U,ee,ki,"\u2210","\\coprod");G(U,ee,ki,"\u22C1","\\bigvee");G(U,ee,ki,"\u22C0","\\bigwedge");G(U,ee,ki,"\u2A04","\\biguplus");G(U,ee,ki,"\u22C2","\\bigcap");G(U,ee,ki,"\u22C3","\\bigcup");G(U,ee,ki,"\u222B","\\int");G(U,ee,ki,"\u222B","\\intop");G(U,ee,ki,"\u222C","\\iint");G(U,ee,ki,"\u222D","\\iiint");G(U,ee,ki,"\u220F","\\prod");G(U,ee,ki,"\u2211","\\sum");G(U,ee,ki,"\u2A02","\\bigotimes");G(U,ee,ki,"\u2A01","\\bigoplus");G(U,ee,ki,"\u2A00","\\bigodot");G(U,ee,ki,"\u222E","\\oint");G(U,ee,ki,"\u222F","\\oiint");G(U,ee,ki,"\u2230","\\oiiint");G(U,ee,ki,"\u2A06","\\bigsqcup");G(U,ee,ki,"\u222B","\\smallint");G(it,ee,p0,"\u2026","\\textellipsis");G(U,ee,p0,"\u2026","\\mathellipsis");G(it,ee,p0,"\u2026","\\ldots",!0);G(U,ee,p0,"\u2026","\\ldots",!0);G(U,ee,p0,"\u22EF","\\@cdots",!0);G(U,ee,p0,"\u22F1","\\ddots",!0);G(U,ee,Le,"\u22EE","\\varvdots");G(U,ee,Vn,"\u02CA","\\acute");G(U,ee,Vn,"\u02CB","\\grave");G(U,ee,Vn,"\xA8","\\ddot");G(U,ee,Vn,"~","\\tilde");G(U,ee,Vn,"\u02C9","\\bar");G(U,ee,Vn,"\u02D8","\\breve");G(U,ee,Vn,"\u02C7","\\check");G(U,ee,Vn,"^","\\hat");G(U,ee,Vn,"\u20D7","\\vec");G(U,ee,Vn,"\u02D9","\\dot");G(U,ee,Vn,"\u02DA","\\mathring");G(U,ee,er,"\uE131","\\@imath");G(U,ee,er,"\uE237","\\@jmath");G(U,ee,Le,"\u0131","\u0131");G(U,ee,Le,"\u0237","\u0237");G(it,ee,Le,"\u0131","\\i",!0);G(it,ee,Le,"\u0237","\\j",!0);G(it,ee,Le,"\xDF","\\ss",!0);G(it,ee,Le,"\xE6","\\ae",!0);G(it,ee,Le,"\u0153","\\oe",!0);G(it,ee,Le,"\xF8","\\o",!0);G(it,ee,Le,"\xC6","\\AE",!0);G(it,ee,Le,"\u0152","\\OE",!0);G(it,ee,Le,"\xD8","\\O",!0);G(it,ee,Vn,"\u02CA","\\'");G(it,ee,Vn,"\u02CB","\\`");G(it,ee,Vn,"\u02C6","\\^");G(it,ee,Vn,"\u02DC","\\~");G(it,ee,Vn,"\u02C9","\\=");G(it,ee,Vn,"\u02D8","\\u");G(it,ee,Vn,"\u02D9","\\.");G(it,ee,Vn,"\xB8","\\c");G(it,ee,Vn,"\u02DA","\\r");G(it,ee,Vn,"\u02C7","\\v");G(it,ee,Vn,"\xA8",'\\"');G(it,ee,Vn,"\u02DD","\\H");G(it,ee,Vn,"\u25EF","\\textcircled");Hz={"--":!0,"---":!0,"``":!0,"''":!0};G(it,ee,Le,"\u2013","--",!0);G(it,ee,Le,"\u2013","\\textendash");G(it,ee,Le,"\u2014","---",!0);G(it,ee,Le,"\u2014","\\textemdash");G(it,ee,Le,"\u2018","`",!0);G(it,ee,Le,"\u2018","\\textquoteleft");G(it,ee,Le,"\u2019","'",!0);G(it,ee,Le,"\u2019","\\textquoteright");G(it,ee,Le,"\u201C","``",!0);G(it,ee,Le,"\u201C","\\textquotedblleft");G(it,ee,Le,"\u201D","''",!0);G(it,ee,Le,"\u201D","\\textquotedblright");G(U,ee,Le,"\xB0","\\degree",!0);G(it,ee,Le,"\xB0","\\degree");G(it,ee,Le,"\xB0","\\textdegree",!0);G(U,ee,Le,"\xA3","\\pounds");G(U,ee,Le,"\xA3","\\mathsterling",!0);G(it,ee,Le,"\xA3","\\pounds");G(it,ee,Le,"\xA3","\\textsterling",!0);G(U,ke,Le,"\u2720","\\maltese");G(it,ke,Le,"\u2720","\\maltese");fz='0123456789/@."';for(J4=0;J4<fz.length;J4++)f7=fz.charAt(J4),G(U,ee,Le,f7,f7);dz='0123456789!@*()-=+";:?/.,';for(e3=0;e3<dz.length;e3++)d7=dz.charAt(e3),G(it,ee,Le,d7,d7);d3="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";for(t3=0;t3<d3.length;t3++)Py=d3.charAt(t3),G(U,ee,er,Py,Py),G(it,ee,Le,Py,Py);G(U,ke,Le,"C","\u2102");G(it,ke,Le,"C","\u2102");G(U,ke,Le,"H","\u210D");G(it,ke,Le,"H","\u210D");G(U,ke,Le,"N","\u2115");G(it,ke,Le,"N","\u2115");G(U,ke,Le,"P","\u2119");G(it,ke,Le,"P","\u2119");G(U,ke,Le,"Q","\u211A");G(it,ke,Le,"Q","\u211A");G(U,ke,Le,"R","\u211D");G(it,ke,Le,"R","\u211D");G(U,ke,Le,"Z","\u2124");G(it,ke,Le,"Z","\u2124");G(U,ee,er,"h","\u210E");G(it,ee,er,"h","\u210E");sr="";for(Ca=0;Ca<d3.length;Ca++)Jn=d3.charAt(Ca),sr=String.fromCharCode(55349,56320+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56372+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56424+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56580+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56684+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56736+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56788+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56840+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56944+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),Ca<26&&(sr=String.fromCharCode(55349,56632+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56476+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr));sr="\u{1D55C}";G(U,ee,er,"k",sr);G(it,ee,Le,"k",sr);for(uh=0;uh<10;uh++)iu=uh.toString(),sr=String.fromCharCode(55349,57294+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57314+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57324+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57334+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr);C7="\xD0\xDE\xFE";for(r3=0;r3<C7.length;r3++)By=C7.charAt(r3),G(U,ee,er,By,By),G(it,ee,Le,By,By);n3=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],pz=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],Obe=o(function(e,r){var n=e.charCodeAt(0),i=e.charCodeAt(1),a=(n-55296)*1024+(i-56320)+65536,s=r==="math"?0:1;if(119808<=a&&a<120484){var l=Math.floor((a-119808)/26);return[n3[l][2],n3[l][s]]}else if(120782<=a&&a<=120831){var u=Math.floor((a-120782)/10);return[pz[u][2],pz[u][s]]}else{if(a===120485||a===120486)return[n3[0][2],n3[0][s]];if(120486<a&&a<120782)return["",""];throw new gt("Unsupported character: "+e)}},"wideCharacterFont"),b3=o(function(e,r,n){return An[n][e]&&An[n][e].replace&&(e=An[n][e].replace),{value:e,metrics:P7(e,r,n)}},"lookupSymbol"),ol=o(function(e,r,n,i,a){var s=b3(e,r,n),l=s.metrics;e=s.value;var u;if(l){var h=l.italic;(n==="text"||i&&i.font==="mathit")&&(h=0),u=new Ts(e,l.height,l.depth,h,l.skew,l.width,a)}else typeof console<"u"&&console.warn("No character metrics "+("for '"+e+"' in style '"+r+"' and mode '"+n+"'")),u=new Ts(e,0,0,0,0,0,a);if(i){u.maxFontSize=i.sizeMultiplier,i.style.isTight()&&u.classes.push("mtight");var f=i.getColor();f&&(u.style.color=f)}return u},"makeSymbol"),Pbe=o(function(e,r,n,i){return i===void 0&&(i=[]),n.font==="boldsymbol"&&b3(e,"Main-Bold",r).metrics?ol(e,"Main-Bold",r,n,i.concat(["mathbf"])):e==="\\"||An[r][e].font==="main"?ol(e,"Main-Regular",r,n,i):ol(e,"AMS-Regular",r,n,i.concat(["amsrm"]))},"mathsym"),Bbe=o(function(e,r,n,i,a){return a!=="textord"&&b3(e,"Math-BoldItalic",r).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}},"boldsymbol"),Fbe=o(function(e,r,n){var i=e.mode,a=e.text,s=["mord"],l=i==="math"||i==="text"&&r.font,u=l?r.font:r.fontFamily,h="",f="";if(a.charCodeAt(0)===55349&&([h,f]=Obe(a,i)),h.length>0)return ol(a,h,i,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=Bbe(a,i,r,s,n);d=m.fontName,p=[m.fontClass]}else l?(d=Yz[u].fontName,p=[u]):(d=i3(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(b3(a,d,i).metrics)return ol(a,d,i,r,s.concat(p));if(Hz.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y<a.length;y++)g.push(ol(a[y],d,i,r,s.concat(p)));return qz(g)}}if(n==="mathord")return ol(a,"Math-Italic",i,r,s.concat(["mathnormal"]));if(n==="textord"){var v=An[i][a]&&An[i][a].font;if(v==="ams"){var x=i3("amsrm",r.fontWeight,r.fontShape);return ol(a,x,i,r,s.concat("amsrm",r.fontWeight,r.fontShape))}else if(v==="main"||!v){var b=i3("textrm",r.fontWeight,r.fontShape);return ol(a,b,i,r,s.concat(r.fontWeight,r.fontShape))}else{var w=i3(v,r.fontWeight,r.fontShape);return ol(a,w,i,r,s.concat(w,r.fontWeight,r.fontShape))}}else throw new Error("unexpected type: "+n+" in makeOrd")},"makeOrd"),$be=o((t,e)=>{if(fh(t.classes)!==fh(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n in t.style)if(t.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;for(var i in e.style)if(e.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;return!0},"canCombine"),zbe=o(t=>{for(var e=0;e<t.length-1;e++){var r=t[e],n=t[e+1];r instanceof Ts&&n instanceof Ts&&$be(r,n)&&(r.text+=n.text,r.height=Math.max(r.height,n.height),r.depth=Math.max(r.depth,n.depth),r.italic=n.italic,t.splice(e+1,1),e--)}return t},"tryCombineChars"),B7=o(function(e){for(var r=0,n=0,i=0,a=0;a<e.children.length;a++){var s=e.children[a];s.height>r&&(r=s.height),s.depth>n&&(n=s.depth),s.maxFontSize>i&&(i=s.maxFontSize)}e.height=r,e.depth=n,e.maxFontSize=i},"sizeElementFromChildren"),bs=o(function(e,r,n,i){var a=new td(e,r,n,i);return B7(a),a},"makeSpan"),Wz=o((t,e,r,n)=>new td(t,e,r,n),"makeSvgSpan"),Gbe=o(function(e,r,n){var i=bs([e],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=kt(i.height),i.maxFontSize=1,i},"makeLineSpan"),Vbe=o(function(e,r,n,i){var a=new Vy(e,r,n,i);return B7(a),a},"makeAnchor"),qz=o(function(e){var r=new ed(e);return B7(r),r},"makeFragment"),Ube=o(function(e,r){return e instanceof ed?bs([],[e],r):e},"wrapFragment"),Hbe=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,s=1;s<r.length;s++){var l=-r[s].shift-a-r[s].elem.depth,u=l-(r[s-1].elem.height+r[s-1].elem.depth);a=a+l,n.push({type:"kern",size:u}),n.push(r[s])}return{children:n,depth:i}}var h;if(e.positionType==="top"){for(var f=e.positionData,d=0;d<e.children.length;d++){var p=e.children[d];f-=p.type==="kern"?p.size:p.elem.height+p.elem.depth}h=f}else if(e.positionType==="bottom")h=-e.positionData;else{var m=e.children[0];if(m.type!=="elem")throw new Error('First child must have type "elem".');if(e.positionType==="shift")h=-m.elem.depth-e.positionData;else if(e.positionType==="firstBaseline")h=-m.elem.depth;else throw new Error("Invalid positionType "+e.positionType+".")}return{children:e.children,depth:h}},"getVListChildrenAndDepth"),Wbe=o(function(e,r){for(var{children:n,depth:i}=Hbe(e),a=0,s=0;s<n.length;s++){var l=n[s];if(l.type==="elem"){var u=l.elem;a=Math.max(a,u.maxFontSize,u.height)}}a+=2;var h=bs(["pstrut"],[]);h.style.height=kt(a);for(var f=[],d=i,p=i,m=i,g=0;g<n.length;g++){var y=n[g];if(y.type==="kern")m+=y.size;else{var v=y.elem,x=y.wrapperClasses||[],b=y.wrapperStyle||{},w=bs(x,[h,v],void 0,b);w.style.top=kt(-a-m-v.depth),y.marginLeft&&(w.style.marginLeft=y.marginLeft),y.marginRight&&(w.style.marginRight=y.marginRight),f.push(w),m+=v.height+v.depth}d=Math.min(d,m),p=Math.max(p,m)}var C=bs(["vlist"],f);C.style.height=kt(p);var T;if(d<0){var E=bs([],[]),A=bs(["vlist"],[E]);A.style.height=kt(-d);var S=bs(["vlist-s"],[new Ts("\u200B")]);T=[bs(["vlist-r"],[C,S]),bs(["vlist-r"],[A])]}else T=[bs(["vlist-r"],[C])];var _=bs(["vlist-t"],T);return T.length===2&&_.classes.push("vlist-t2"),_.height=p,_.depth=-d,_},"makeVList"),qbe=o((t,e)=>{var r=bs(["mspace"],[],e),n=ti(t,e);return r.style.marginRight=kt(n),r},"makeGlue"),i3=o(function(e,r,n){var i="";switch(e){case"amsrm":i="AMS";break;case"textrm":i="Main";break;case"textsf":i="SansSerif";break;case"texttt":i="Typewriter";break;default:i=e}var a;return r==="textbf"&&n==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",i+"-"+a},"retrieveTextFontName"),Yz={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Xz={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ybe=o(function(e,r){var[n,i,a]=Xz[e],s=new Kl(n),l=new ll([s],{width:kt(i),height:kt(a),style:"width:"+kt(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=Wz(["overlay"],[l],r);return u.height=a,u.style.height=kt(a),u.style.width=kt(i),u},"staticSvg"),Be={fontMap:Yz,makeSymbol:ol,mathsym:Pbe,makeSpan:bs,makeSvgSpan:Wz,makeLineSpan:Gbe,makeAnchor:Vbe,makeFragment:qz,wrapFragment:Ube,makeVList:Wbe,makeOrd:Fbe,makeGlue:qbe,staticSvg:Ybe,svgData:Xz,tryCombineChars:zbe},ei={number:3,unit:"mu"},Zf={number:4,unit:"mu"},au={number:5,unit:"mu"},Xbe={mord:{mop:ei,mbin:Zf,mrel:au,minner:ei},mop:{mord:ei,mop:ei,mrel:au,minner:ei},mbin:{mord:Zf,mop:Zf,mopen:Zf,minner:Zf},mrel:{mord:au,mop:au,mopen:au,minner:au},mopen:{},mclose:{mop:ei,mbin:Zf,mrel:au,minner:ei},mpunct:{mord:ei,mop:ei,mrel:au,mopen:ei,mclose:ei,mpunct:ei,minner:ei},minner:{mord:ei,mop:ei,mbin:Zf,mrel:au,mopen:ei,mpunct:ei,minner:ei}},jbe={mord:{mop:ei},mop:{mord:ei,mop:ei},mbin:{},mrel:{},mopen:{},mclose:{mop:ei},mpunct:{},minner:{mop:ei}},jz={},p3={},m3={};o(Nt,"defineFunction");o(rd,"defineFunctionBuilders");g3=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),di=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),lu=Be.makeSpan,Kbe=["leftmost","mbin","mopen","mrel","mop","mpunct"],Qbe=["rightmost","mrel","mclose","mpunct"],Zbe={display:tr.DISPLAY,text:tr.TEXT,script:tr.SCRIPT,scriptscript:tr.SCRIPTSCRIPT},Jbe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Pi=o(function(e,r,n,i){i===void 0&&(i=[null,null]);for(var a=[],s=0;s<e.length;s++){var l=Fr(e[s],r);if(l instanceof ed){var u=l.children;a.push(...u)}else a.push(l)}if(Be.tryCombineChars(a),!n)return a;var h=r;if(e.length===1){var f=e[0];f.type==="sizing"?h=r.havingSize(f.size):f.type==="styling"&&(h=r.havingStyle(Zbe[f.style]))}var d=lu([i[0]||"leftmost"],[],r),p=lu([i[1]||"rightmost"],[],r),m=n==="root";return mz(a,(g,y)=>{var v=y.classes[0],x=g.classes[0];v==="mbin"&&Jt.contains(Qbe,x)?y.classes[0]="mord":x==="mbin"&&Jt.contains(Kbe,v)&&(g.classes[0]="mord")},{node:d},p,m),mz(a,(g,y)=>{var v=A7(y),x=A7(g),b=v&&x?g.hasClass("mtight")?jbe[v][x]:Xbe[v][x]:null;if(b)return Be.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),mz=o(function t(e,r,n,i,a){i&&e.push(i);for(var s=0;s<e.length;s++){var l=e[s],u=Kz(l);if(u){t(u.children,r,n,null,a);continue}var h=!l.hasClass("mspace");if(h){var f=r(l,n.node);f&&(n.insertAfter?n.insertAfter(f):(e.unshift(f),s++))}h?n.node=l:a&&l.hasClass("newline")&&(n.node=lu(["leftmost"])),n.insertAfter=(d=>p=>{e.splice(d+1,0,p),s++})(s)}i&&e.pop()},"traverseNonSpaceNodes"),Kz=o(function(e){return e instanceof ed||e instanceof Vy||e instanceof td&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),e4e=o(function t(e,r){var n=Kz(e);if(n){var i=n.children;if(i.length){if(r==="right")return t(i[i.length-1],"right");if(r==="left")return t(i[0],"left")}}return e},"getOutermostNode"),A7=o(function(e,r){return e?(r&&(e=e4e(e,r)),Jbe[e.classes[0]]||null):null},"getTypeOfDomTree"),Hy=o(function(e,r){var n=["nulldelimiter"].concat(e.baseSizingClasses());return lu(r.concat(n))},"makeNullDelimiter"),Fr=o(function(e,r,n){if(!e)return lu();if(p3[e.type]){var i=p3[e.type](e,r);if(n&&r.size!==n.size){i=lu(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(a3,"buildHTMLUnbreakable");o(_7,"buildHTML");o(Qz,"newDocumentFragment");ws=class{static{o(this,"MathNode")}constructor(e,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=fh(this.classes));for(var n=0;n<this.children.length;n++)e.appendChild(this.children[n].toNode());return e}toMarkup(){var e="<"+this.type;for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="',e+=Jt.escape(this.attributes[r]),e+='"');this.classes.length>0&&(e+=' class ="'+Jt.escape(fh(this.classes))+'"'),e+=">";for(var n=0;n<this.children.length;n++)e+=this.children[n].toMarkup();return e+="</"+this.type+">",e}toText(){return this.children.map(e=>e.toText()).join("")}},Jf=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return Jt.escape(this.toText())}toText(){return this.text}},D7=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",kt(this.width)),e}toMarkup(){return this.character?"<mtext>"+this.character+"</mtext>":'<mspace width="'+kt(this.width)+'"/>'}toText(){return this.character?this.character:" "}},dt={MathNode:ws,TextNode:Jf,SpaceNode:D7,newDocumentFragment:Qz},Co=o(function(e,r,n){return An[r][e]&&An[r][e].replace&&e.charCodeAt(0)!==55349&&!(Hz.hasOwnProperty(e)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(e=An[r][e].replace),new dt.TextNode(e)},"makeText"),F7=o(function(e){return e.length===1?e[0]:new dt.MathNode("mrow",e)},"makeRow"),$7=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var n=r.font;if(!n||n==="mathnormal")return null;var i=e.mode;if(n==="mathit")return"italic";if(n==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(n==="mathbf")return"bold";if(n==="mathbb")return"double-struck";if(n==="mathfrak")return"fraktur";if(n==="mathscr"||n==="mathcal")return"script";if(n==="mathsf")return"sans-serif";if(n==="mathtt")return"monospace";var a=e.text;if(Jt.contains(["\\imath","\\jmath"],a))return null;An[i][a]&&An[i][a].replace&&(a=An[i][a].replace);var s=Be.fontMap[n].fontName;return P7(a,s,i)?Be.fontMap[n].variant:null},"getVariant"),ks=o(function(e,r,n){if(e.length===1){var i=yn(e[0],r);return n&&i instanceof ws&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],s,l=0;l<e.length;l++){var u=yn(e[l],r);if(u instanceof ws&&s instanceof ws){if(u.type==="mtext"&&s.type==="mtext"&&u.getAttribute("mathvariant")===s.getAttribute("mathvariant")){s.children.push(...u.children);continue}else if(u.type==="mn"&&s.type==="mn"){s.children.push(...u.children);continue}else if(u.type==="mi"&&u.children.length===1&&s.type==="mn"){var h=u.children[0];if(h instanceof Jf&&h.text==="."){s.children.push(...u.children);continue}}else if(s.type==="mi"&&s.children.length===1){var f=s.children[0];if(f instanceof Jf&&f.text==="\u0338"&&(u.type==="mo"||u.type==="mi"||u.type==="mn")){var d=u.children[0];d instanceof Jf&&d.text.length>0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),dh=o(function(e,r,n){return F7(ks(e,r,n))},"buildExpressionRow"),yn=o(function(e,r){if(!e)return new dt.MathNode("mrow");if(m3[e.type]){var n=m3[e.type](e,r);return n}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(gz,"buildMathML");Zz=o(function(e){return new f3({style:e.displayMode?tr.DISPLAY:tr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),Jz=o(function(e,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),e=Be.makeSpan(n,[e])}return e},"displayWrap"),t4e=o(function(e,r,n){var i=Zz(n),a;if(n.output==="mathml")return gz(e,r,i,n.displayMode,!0);if(n.output==="html"){var s=_7(e,i);a=Be.makeSpan(["katex"],[s])}else{var l=gz(e,r,i,n.displayMode,!1),u=_7(e,i);a=Be.makeSpan(["katex"],[l,u])}return Jz(a,n)},"buildTree"),r4e=o(function(e,r,n){var i=Zz(n),a=_7(e,i),s=Be.makeSpan(["katex"],[a]);return Jz(s,n)},"buildHTMLTree"),n4e={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},i4e=o(function(e){var r=new dt.MathNode("mo",[new dt.TextNode(n4e[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),a4e={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},s4e=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),o4e=o(function(e,r){function n(){var l=4e5,u=e.label.slice(1);if(Jt.contains(["widehat","widecheck","widetilde","utilde"],u)){var h=e,f=s4e(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new Kl(p),v=new ll([y],{width:"100%",height:kt(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:Be.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=a4e[u],[w,C,T]=b,E=T/1e3,A=w.length,S,_;if(A===1){var I=b[3];S=["hide-tail"],_=[I]}else if(A===2)S=["halfarrow-left","halfarrow-right"],_=["xMinYMin","xMaxYMin"];else if(A===3)S=["brace-left","brace-center","brace-right"],_=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support | |
| 270 | + `+A+" children.");for(var D=0;D<A;D++){var k=new Kl(w[D]),L=new ll([k],{width:"400em",height:kt(E),viewBox:"0 0 "+l+" "+T,preserveAspectRatio:_[D]+" slice"}),R=Be.makeSvgSpan([S[D]],[L],r);if(A===1)return{span:R,minWidth:C,height:E};R.style.height=kt(E),x.push(R)}return{span:Be.makeSpan(["stretchy"],x,r),minWidth:C,height:E}}}o(n,"buildSvgSpan_");var{span:i,minWidth:a,height:s}=n();return i.height=s,i.style.height=kt(s),a>0&&(i.style.minWidth=kt(a)),i},"svgSpan"),l4e=o(function(e,r,n,i,a){var s,l=e.height+e.depth+n+i;if(/fbox|color|angl/.test(r)){if(s=Be.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new Uy({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new Uy({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new ll(h,{width:"100%",height:kt(l)});s=Be.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=kt(l),s},"encloseSpan"),cu={encloseSpan:l4e,mathMLnode:i4e,svgSpan:o4e};o(xr,"assertNodeType");o(z7,"assertSymbolNodeType");o(w3,"checkSymbolNodeType");G7=o((t,e)=>{var r,n,i;t&&t.type==="supsub"?(n=xr(t.base,"accent"),r=n.base,t.base=r,i=Nbe(Fr(t,e)),t.base=n):(n=xr(t,"accent"),r=n.base);var a=Fr(r,e.havingCrampedStyle()),s=n.isShifty&&Jt.isCharacterBox(r),l=0;if(s){var u=Jt.getBaseElem(r),h=Fr(u,e.havingCrampedStyle());l=hz(h).skew}var f=n.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(n.isStretchy)p=cu.svgSpan(n,e),p=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+kt(2*l)+")",marginLeft:kt(2*l)}:void 0}]},e);else{var m,g;n.label==="\\vec"?(m=Be.staticSvg("vec",e),g=Be.svgData.vec[1]):(m=Be.makeOrd({mode:n.mode,text:n.label},e,"textord"),m=hz(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=Be.makeSpan(["accent-body"],[m]);var y=n.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=kt(v),n.label==="\\textcircled"&&(p.style.top=".2em"),p=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=Be.makeSpan(["mord","accent"],[p],e);return i?(i.children[0]=x,i.height=Math.max(x.height,i.height),i.classes[0]="mord",i):x},"htmlBuilder$a"),eG=o((t,e)=>{var r=t.isStretchy?cu.mathMLnode(t.label):new dt.MathNode("mo",[Co(t.label,t.mode)]),n=new dt.MathNode("mover",[yn(t.base,e),r]);return n.setAttribute("accent","true"),n},"mathmlBuilder$9"),c4e=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));Nt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=g3(e[0]),n=!c4e.test(t.funcName),i=!n||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:n,isShifty:i,base:r}},"handler"),htmlBuilder:G7,mathmlBuilder:eG});Nt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],n=t.parser.mode;return n==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:G7,mathmlBuilder:eG});Nt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},"handler"),htmlBuilder:o((t,e)=>{var r=Fr(t.base,e),n=cu.svgSpan(t,e),i=t.label==="\\utilde"?.12:0,a=Be.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},e);return Be.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=cu.mathMLnode(t.label),n=new dt.MathNode("munder",[yn(t.base,e),r]);return n.setAttribute("accentunder","true"),n},"mathmlBuilder")});s3=o(t=>{var e=new dt.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");Nt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n,funcName:i}=t;return{type:"xArrow",mode:n.mode,label:i,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,n=e.havingStyle(r.sup()),i=Be.wrapFragment(Fr(t.body,n,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var s;t.below&&(n=e.havingStyle(r.sub()),s=Be.wrapFragment(Fr(t.below,n,e),e),s.classes.push(a+"-arrow-pad"));var l=cu.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(i.depth>.25||t.label==="\\xleftequilibrium")&&(h-=i.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),Be.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=cu.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(t.body){var i=s3(yn(t.body,e));if(t.below){var a=s3(yn(t.below,e));n=new dt.MathNode("munderover",[r,a,i])}else n=new dt.MathNode("mover",[r,i])}else if(t.below){var s=s3(yn(t.below,e));n=new dt.MathNode("munder",[r,s])}else n=s3(),n=new dt.MathNode("mover",[r,n]);return n}});u4e=Be.makeSpan;o(tG,"htmlBuilder$9");o(rG,"mathmlBuilder$8");Nt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:di(i),isCharacterBox:Jt.isCharacterBox(i)}},htmlBuilder:tG,mathmlBuilder:rG});T3=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");Nt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:T3(e[0]),body:di(e[1]),isCharacterBox:Jt.isCharacterBox(e[1])}}});Nt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:n}=t,i=e[1],a=e[0],s;n!=="\\stackrel"?s=T3(i):s="mrel";var l={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:di(i)},u={type:"supsub",mode:a.mode,base:l,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:Jt.isCharacterBox(u)}},htmlBuilder:tG,mathmlBuilder:rG});Nt({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:T3(e[0]),body:di(e[0])}},htmlBuilder(t,e){var r=Pi(t.body,e,!0),n=Be.makeSpan([t.mclass],r,e);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(t,e){var r=ks(t.body,e),n=new dt.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});h4e={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},yz=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),vz=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),f4e=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(d4e,"cdArrow");o(p4e,"parseCD");Nt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),n=Be.wrapFragment(Fr(t.label,r,e),e);return n.classes.push("cd-label-"+t.side),n.style.bottom=kt(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(t,e){var r=new dt.MathNode("mrow",[yn(t.label,e)]);return r=new dt.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new dt.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Nt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=Be.wrapFragment(Fr(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new dt.MathNode("mrow",[yn(t.fragment,e)])}});Nt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,n=xr(e[0],"ordgroup"),i=n.body,a="",s=0;s<i.length;s++){var l=xr(i[s],"textord");a+=l.text}var u=parseInt(a),h;if(isNaN(u))throw new gt("\\@char has non-numeric argument "+a);if(u<0||u>=1114111)throw new gt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});nG=o((t,e)=>{var r=Pi(t.body,e.withColor(t.color),!1);return Be.makeFragment(r)},"htmlBuilder$8"),iG=o((t,e)=>{var r=ks(t.body,e.withColor(t.color)),n=new dt.MathNode("mstyle",r);return n.setAttribute("mathcolor",t.color),n},"mathmlBuilder$7");Nt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,n=xr(e[0],"color-token").color,i=e[1];return{type:"color",mode:r.mode,color:n,body:di(i)}},htmlBuilder:nG,mathmlBuilder:iG});Nt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:n}=t,i=xr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:nG,mathmlBuilder:iG});Nt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:n}=t,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&xr(i,"size").value}},htmlBuilder(t,e){var r=Be.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=kt(ti(t.size,e)))),r},mathmlBuilder(t,e){var r=new dt.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",kt(ti(t.size,e)))),r}});L7={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},aG=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new gt("Expected a control sequence",t);return e},"checkControlSequence"),m4e=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),sG=o((t,e,r,n)=>{var i=t.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,i,n)},"letCommand");Nt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var n=e.fetch();if(L7[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=L7[n.text]),xr(e.parseFunction(),"internal");throw new gt("Invalid token after macro prefix",n)}});Nt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new gt("Expected a control sequence",n);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(n=e.gullet.popToken(),n.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(n=e.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new gt('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new gt('Argument number "'+n.text+'" out of order');a++,l.push([])}else{if(n.text==="EOF")throw new gt("Expected a macro definition");l[a].push(n.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(i,{tokens:u,numArgs:a,delimiters:l},r===L7[r]),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=aG(e.gullet.popToken());e.gullet.consumeSpaces();var i=m4e(e);return sG(e,n,i,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=aG(e.gullet.popToken()),i=e.gullet.popToken(),a=e.gullet.popToken();return sG(e,n,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(i),{type:"internal",mode:e.mode}}});Fy=o(function(e,r,n){var i=An.math[e]&&An.math[e].replace,a=P7(i||e,r,n);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),V7=o(function(e,r,n,i){var a=n.havingBaseStyle(r),s=Be.makeSpan(i.concat(a.sizingClasses(n)),[e],n),l=a.sizeMultiplier/n.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),oG=o(function(e,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=kt(a),e.height-=a,e.depth+=a},"centerSpan"),g4e=o(function(e,r,n,i,a,s){var l=Be.makeSymbol(e,"Main-Regular",a,i),u=V7(l,r,i,s);return n&&oG(u,i,r),u},"makeSmallDelim"),y4e=o(function(e,r,n,i){return Be.makeSymbol(e,"Size"+r+"-Regular",n,i)},"mathrmSize"),lG=o(function(e,r,n,i,a,s){var l=y4e(e,r,a,i),u=V7(Be.makeSpan(["delimsizing","size"+r],[l],i),tr.TEXT,i,s);return n&&oG(u,i,tr.TEXT),u},"makeLargeDelim"),p7=o(function(e,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=Be.makeSpan(["delimsizinginner",i],[Be.makeSpan([],[Be.makeSymbol(e,r,n)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),m7=o(function(e,r,n){var i=jl["Size4-Regular"][e.charCodeAt(0)]?jl["Size4-Regular"][e.charCodeAt(0)][4]:jl["Size1-Regular"][e.charCodeAt(0)][4],a=new Kl("inner",Sbe(e,Math.round(1e3*r))),s=new ll([a],{width:kt(i),height:kt(r),style:"width:"+kt(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=Be.makeSvgSpan([],[s],n);return l.height=r,l.style.height=kt(r),l.style.width=kt(i),{type:"elem",elem:l}},"makeInner"),R7=.008,o3={type:"kern",size:-1*R7},v4e=["|","\\lvert","\\rvert","\\vert"],x4e=["\\|","\\lVert","\\rVert","\\Vert"],cG=o(function(e,r,n,i,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):Jt.contains(v4e,e)?(h="\u2223",d="vert",p=333):Jt.contains(x4e,e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=Fy(l,m,a),y=g.height+g.depth,v=Fy(h,m,a),x=v.height+v.depth,b=Fy(f,m,a),w=b.height+b.depth,C=0,T=1;if(u!==null){var E=Fy(u,m,a);C=E.height+E.depth,T=2}var A=y+w+C,S=Math.max(0,Math.ceil((r-A)/(T*x))),_=A+S*T*x,I=i.fontMetrics().axisHeight;n&&(I*=i.sizeMultiplier);var D=_/2-I,k=[];if(d.length>0){var L=_-y-w,R=Math.round(_*1e3),O=Cbe(d,Math.round(L*1e3)),M=new Kl(d,O),B=(p/1e3).toFixed(3)+"em",F=(R/1e3).toFixed(3)+"em",P=new ll([M],{width:B,height:F,viewBox:"0 0 "+p+" "+R}),z=Be.makeSvgSpan([],[P],i);z.height=R/1e3,z.style.width=B,z.style.height=F,k.push({type:"elem",elem:z})}else{if(k.push(p7(f,m,a)),k.push(o3),u===null){var $=_-y-w+2*R7;k.push(m7(h,$,i))}else{var H=(_-y-w-C)/2+2*R7;k.push(m7(h,H,i)),k.push(o3),k.push(p7(u,m,a)),k.push(o3),k.push(m7(h,H,i))}k.push(o3),k.push(p7(l,m,a))}var Q=i.havingBaseStyle(tr.TEXT),j=Be.makeVList({positionType:"bottom",positionData:D,children:k},Q);return V7(Be.makeSpan(["delimsizing","mult"],[j],Q),tr.TEXT,i,s)},"makeStackedDelim"),g7=80,y7=.08,v7=o(function(e,r,n,i,a){var s=Ebe(e,i,n),l=new Kl(e,s),u=new ll([l],{width:"400em",height:kt(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return Be.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),b4e=o(function(e,r){var n=r.havingBaseSizing(),i=dG("\\surd",e*n.sizeMultiplier,fG,n),a=n.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return i.type==="small"?(f=1e3+1e3*s+g7,e<1?a=1:e<1.4&&(a=.7),u=(1+s+y7)/a,h=(1+s)/a,l=v7("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):i.type==="large"?(f=(1e3+g7)*$y[i.size],h=($y[i.size]+s)/a,u=($y[i.size]+s+y7)/a,l=v7("sqrtSize"+i.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+y7,h=e+s,f=Math.floor(1e3*e+s)+g7,l=v7("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=kt(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),uG=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],w4e=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],hG=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],$y=[0,1.2,1.8,2.4,3],T4e=o(function(e,r,n,i,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),Jt.contains(uG,e)||Jt.contains(hG,e))return lG(e,r,!1,n,i,a);if(Jt.contains(w4e,e))return cG(e,$y[r],!1,n,i,a);throw new gt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),k4e=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],E4e=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"stack"}],fG=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],S4e=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),dG=o(function(e,r,n,i){for(var a=Math.min(2,3-i.style.size),s=a;s<n.length&&n[s].type!=="stack";s++){var l=Fy(e,S4e(n[s]),"math"),u=l.height+l.depth;if(n[s].type==="small"){var h=i.havingBaseStyle(n[s].style);u*=h.sizeMultiplier}if(u>r)return n[s]}return n[n.length-1]},"traverseSequence"),pG=o(function(e,r,n,i,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;Jt.contains(hG,e)?l=k4e:Jt.contains(uG,e)?l=fG:l=E4e;var u=dG(e,r,l,i);return u.type==="small"?g4e(e,u.style,n,i,a,s):u.type==="large"?lG(e,u.size,n,i,a,s):cG(e,r,n,i,a,s)},"makeCustomSizedDelim"),C4e=o(function(e,r,n,i,a,s){var l=i.fontMetrics().axisHeight*i.sizeMultiplier,u=901,h=5/i.fontMetrics().ptPerEm,f=Math.max(r-l,n+l),d=Math.max(f/500*u,2*f-h);return pG(e,d,!0,i,a,s)},"makeLeftRightDelim"),ou={sqrtImage:b4e,sizedDelim:T4e,sizeToMaxHeight:$y,customSizedDelim:pG,leftRightDelim:C4e},xz={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},A4e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(k3,"checkDelimiter");Nt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=k3(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:xz[t.funcName].size,mclass:xz[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?Be.makeSpan([t.mclass]):ou.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(Co(t.delim,t.mode));var r=new dt.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=kt(ou.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r},"mathmlBuilder")});o(bz,"assertParsed");Nt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new gt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:k3(e[0],t).text,color:r}},"handler")});Nt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=k3(e[0],t),n=t.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=xr(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{bz(t);for(var r=Pi(t.body,e,!0,["mopen","mclose"]),n=0,i=0,a=!1,s=0;s<r.length;s++)r[s].isMiddle?a=!0:(n=Math.max(r[s].height,n),i=Math.max(r[s].depth,i));n*=e.sizeMultiplier,i*=e.sizeMultiplier;var l;if(t.left==="."?l=Hy(e,["mopen"]):l=ou.leftRightDelim(t.left,n,i,e,t.mode,["mopen"]),r.unshift(l),a)for(var u=1;u<r.length;u++){var h=r[u],f=h.isMiddle;f&&(r[u]=ou.leftRightDelim(f.delim,n,i,f.options,t.mode,[]))}var d;if(t.right===".")d=Hy(e,["mclose"]);else{var p=t.rightColor?e.withColor(t.rightColor):e;d=ou.leftRightDelim(t.right,n,i,p,t.mode,["mclose"])}return r.push(d),Be.makeSpan(["minner"],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{bz(t);var r=ks(t.body,e);if(t.left!=="."){var n=new dt.MathNode("mo",[Co(t.left,t.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(t.right!=="."){var i=new dt.MathNode("mo",[Co(t.right,t.mode)]);i.setAttribute("fence","true"),t.rightColor&&i.setAttribute("mathcolor",t.rightColor),r.push(i)}return F7(r)},"mathmlBuilder")});Nt({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=k3(e[0],t);if(!t.parser.leftrightDepth)throw new gt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=Hy(e,[]);else{r=ou.sizedDelim(t.delim,1,e,t.mode,[]);var n={delim:t.delim,options:e};r.isMiddle=n}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?Co("|","text"):Co(t.delim,t.mode),n=new dt.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n},"mathmlBuilder")});U7=o((t,e)=>{var r=Be.wrapFragment(Fr(t.body,e),e),n=t.label.slice(1),i=e.sizeMultiplier,a,s=0,l=Jt.isCharacterBox(t.body);if(n==="sout")a=Be.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else if(n==="phase"){var u=ti({number:.6,unit:"pt"},e),h=ti({number:.35,unit:"ex"},e),f=e.havingBaseSizing();i=i/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=kt(d/2+u);var p=Math.floor(1e3*d*i),m=Tbe(p),g=new ll([new Kl("phase",m)],{width:"400em",height:kt(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=Be.makeSvgSpan(["hide-tail"],[g],e),a.style.height=kt(d),s=r.depth+u+h}else{/cancel/.test(n)?l||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(n)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(n==="colorbox"?0:x),v=y):n==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=cu.encloseSpan(r,n,y,v,e),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=kt(x)):n==="angl"&&x!==.049&&(a.style.borderTopWidth=kt(x),a.style.borderRightWidth=kt(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var w=/cancel|phase/.test(n)?["svg-align"]:[];b=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:w}]},e)}return/cancel/.test(n)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(n)&&!l?Be.makeSpan(["mord","cancel-lap"],[b],e):Be.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),H7=o((t,e)=>{var r=0,n=new dt.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[yn(t.body,e)]);switch(t.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var i=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);n.setAttribute("style","border: "+i+"em solid "+String(t.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&n.setAttribute("mathbackground",t.backgroundColor),n},"mathmlBuilder$6");Nt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:s}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=xr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});Nt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});mG={};o(Ql,"defineEnvironment");gG={};o(fe,"defineMacro");o(wz,"getHLines");E3=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new gt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(W7,"getAutoTag");o(ph,"parseArray");o(q7,"dCellStyle");Zl=o(function(e,r){var n,i,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(tr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?ti({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,w=0;function C(ae){for(var Oe=0;Oe<ae.length;++Oe)Oe>0&&(w+=.25),h.push({pos:w,isDashed:ae[Oe]})}for(o(C,"setHLinePos"),C(s[0]),n=0;n<e.body.length;++n){var T=e.body[n],E=x,A=b;l<T.length&&(l=T.length);var S=new Array(T.length);for(i=0;i<T.length;++i){var _=Fr(T[i],r);A<_.depth&&(A=_.depth),E<_.height&&(E=_.height),S[i]=_}var I=e.rowGaps[n],D=0;I&&(D=ti(I,r),D>0&&(D+=b,A<D&&(A=D),D=0)),e.addJot&&(A+=y),S.height=E,S.depth=A,w+=E,S.pos=w,w+=A+D,u[n]=S,C(s[n+1])}var k=w/2+r.fontMetrics().axisHeight,L=e.cols||[],R=[],O,M,B=[];if(e.tags&&e.tags.some(ae=>ae))for(n=0;n<a;++n){var F=u[n],P=F.pos-k,z=e.tags[n],$=void 0;z===!0?$=Be.makeSpan(["eqn-num"],[],r):z===!1?$=Be.makeSpan([],[],r):$=Be.makeSpan([],Pi(z,r,!0),r),$.depth=F.depth,$.height=F.height,B.push({type:"elem",elem:$,shift:P})}for(i=0,M=0;i<l||M<L.length;++i,++M){for(var H=L[M]||{},Q=!0;H.type==="separator";){if(Q||(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(r.fontMetrics().doubleRuleSep),R.push(O)),H.separator==="|"||H.separator===":"){var j=H.separator==="|"?"solid":"dashed",ie=Be.makeSpan(["vertical-separator"],[],r);ie.style.height=kt(w),ie.style.borderRightWidth=kt(f),ie.style.borderRightStyle=j,ie.style.margin="0 "+kt(-f/2);var ne=w-k;ne&&(ie.style.verticalAlign=kt(-ne)),R.push(ie)}else throw new gt("Invalid separator type: "+H.separator);M++,H=L[M]||{},Q=!1}if(!(i>=l)){var le=void 0;(i>0||e.hskipBeforeAndAfter)&&(le=Jt.deflt(H.pregap,p),le!==0&&(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(le),R.push(O)));var he=[];for(n=0;n<a;++n){var K=u[n],X=K[i];if(X){var te=K.pos-k;X.depth=K.depth,X.height=K.height,he.push({type:"elem",elem:X,shift:te})}}he=Be.makeVList({positionType:"individualShift",children:he},r),he=Be.makeSpan(["col-align-"+(H.align||"c")],[he]),R.push(he),(i<l-1||e.hskipBeforeAndAfter)&&(le=Jt.deflt(H.postgap,p),le!==0&&(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(le),R.push(O)))}}if(u=Be.makeSpan(["mtable"],R),h.length>0){for(var J=Be.makeLineSpan("hline",r,f),se=Be.makeLineSpan("hdashline",r,f),ue=[{type:"elem",elem:u,shift:0}];h.length>0;){var Z=h.pop(),Se=Z.pos-k;Z.isDashed?ue.push({type:"elem",elem:se,shift:Se}):ue.push({type:"elem",elem:J,shift:Se})}u=Be.makeVList({positionType:"individualShift",children:ue},r)}if(B.length===0)return Be.makeSpan(["mord"],[u],r);var ce=Be.makeVList({positionType:"individualShift",children:B},r);return ce=Be.makeSpan(["tag"],[ce],r),Be.makeFragment([u,ce])},"htmlBuilder"),_4e={c:"center ",l:"left ",r:"right "},Jl=o(function(e,r){for(var n=[],i=new dt.MathNode("mtd",[],["mtr-glue"]),a=new dt.MathNode("mtd",[],["mml-eqn-num"]),s=0;s<e.body.length;s++){for(var l=e.body[s],u=[],h=0;h<l.length;h++)u.push(new dt.MathNode("mtd",[yn(l[h],r)]));e.tags&&e.tags[s]&&(u.unshift(i),u.push(i),e.leqno?u.unshift(a):u.push(a)),n.push(new dt.MathNode("mtr",u))}var f=new dt.MathNode("mtable",n),d=e.arraystretch===.5?.1:.16+e.arraystretch-1+(e.addJot?.09:0);f.setAttribute("rowspacing",kt(d));var p="",m="";if(e.cols&&e.cols.length>0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var w=x;w<b;w++)g[w].type==="align"?(m+=_4e[g[w].align],v&&(y+="none "),v=!0):g[w].type==="separator"&&v&&(y+=g[w].separator==="|"?"solid ":"dashed ",v=!1);f.setAttribute("columnalign",m.trim()),/[sd]/.test(y)&&f.setAttribute("columnlines",y.trim())}if(e.colSeparationType==="align"){for(var C=e.cols||[],T="",E=1;E<C.length;E++)T+=E%2?"0em ":"1em ";f.setAttribute("columnspacing",T.trim())}else e.colSeparationType==="alignat"||e.colSeparationType==="gather"?f.setAttribute("columnspacing","0em"):e.colSeparationType==="small"?f.setAttribute("columnspacing","0.2778em"):e.colSeparationType==="CD"?f.setAttribute("columnspacing","0.5em"):f.setAttribute("columnspacing","1em");var A="",S=e.hLinesBeforeRow;p+=S[0].length>0?"left ":"",p+=S[S.length-1].length>0?"right ":"";for(var _=1;_<S.length-1;_++)A+=S[_].length===0?"none ":S[_][0]?"dashed ":"solid ";return/[sd]/.test(A)&&f.setAttribute("rowlines",A.trim()),p!==""&&(f=new dt.MathNode("menclose",[f]),f.setAttribute("notation",p.trim())),e.arraystretch&&e.arraystretch<1&&(f=new dt.MathNode("mstyle",[f]),f.setAttribute("scriptlevel","1")),f},"mathmlBuilder"),yG=o(function(e,r){e.envName.indexOf("ed")===-1&&E3(e);var n=[],i=e.envName.indexOf("at")>-1?"alignat":"align",a=e.envName==="split",s=ph(e.parser,{cols:n,addJot:!0,autoTag:a?void 0:W7(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d<r[0].body.length;d++){var p=xr(r[0].body[d],"textord");f+=p.text}l=Number(f),u=l*2}var m=!u;s.body.forEach(function(x){for(var b=1;b<x.length;b+=2){var w=xr(x[b],"styling"),C=xr(w.body[0],"ordgroup");C.body.unshift(h)}if(m)u<x.length&&(u=x.length);else{var T=x.length/2;if(l<T)throw new gt("Too many math in a row: "+("expected "+l+", but got "+T),x[0])}});for(var g=0;g<u;++g){var y="r",v=0;g%2===1?y="l":g>0&&m&&(v=1),n[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");Ql({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=w3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=z7(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new gt("Unknown column alignment: "+u,s)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return ph(t.parser,a,q7(t.envName))},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var i=t.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,"lcr".indexOf(r)===-1)throw new gt("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=ph(t.parser,n,q7(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=ph(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=w3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=z7(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new gt("Unknown column alignment: "+u,s)});if(i.length>1)throw new gt("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=ph(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new gt("{subarray} can contain only one column");return a},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=ph(t.parser,e,q7(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:yG,htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){Jt.contains(["gather","gather*"],t.envName)&&E3(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:W7(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return ph(t.parser,e,"display")},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:yG,htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){E3(t);var e={autoTag:W7(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return ph(t.parser,e,"display")},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["CD"],props:{numArgs:0},handler(t){return E3(t),p4e(t.parser)},htmlBuilder:Zl,mathmlBuilder:Jl});fe("\\nonumber","\\gdef\\@eqnsw{0}");fe("\\notag","\\nonumber");Nt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new gt(t.funcName+" valid only within array environment")}});Tz=mG;Nt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];if(i.type!=="ordgroup")throw new gt("Invalid environment name",i);for(var a="",s=0;s<i.body.length;++s)a+=xr(i.body[s],"textord").text;if(n==="\\begin"){if(!Tz.hasOwnProperty(a))throw new gt("No such environment: "+a,i);var l=Tz[a],{args:u,optArgs:h}=r.parseArguments("\\begin{"+a+"}",l),f={mode:r.mode,envName:a,parser:r},d=l.handler(f,u,h);r.expect("\\end",!1);var p=r.nextToken,m=xr(r.parseFunction(),"environment");if(m.name!==a)throw new gt("Mismatch: \\begin{"+a+"} matched by \\end{"+m.name+"}",p);return d}return{type:"environment",mode:r.mode,name:a,nameGroup:i}}});vG=o((t,e)=>{var r=t.font,n=e.withFont(r);return Fr(t.body,n)},"htmlBuilder$5"),xG=o((t,e)=>{var r=t.font,n=e.withFont(r);return yn(t.body,n)},"mathmlBuilder$4"),kz={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Nt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=g3(e[0]),a=n;return a in kz&&(a=kz[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},"handler"),htmlBuilder:vG,mathmlBuilder:xG});Nt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,n=e[0],i=Jt.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:T3(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:i}},"handler")});Nt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,breakOnTokenText:i}=t,{mode:a}=r,s=r.parseExpression(!0,i),l="math"+n.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:vG,mathmlBuilder:xG});bG=o((t,e)=>{var r=e;return t==="display"?r=r.id>=tr.SCRIPT.id?r.text():tr.DISPLAY:t==="text"&&r.size===tr.DISPLAY.size?r=tr.TEXT:t==="script"?r=tr.SCRIPT:t==="scriptscript"&&(r=tr.SCRIPTSCRIPT),r},"adjustStyle"),Y7=o((t,e)=>{var r=bG(t.size,e.style),n=r.fracNum(),i=r.fracDen(),a;a=e.havingStyle(n);var s=Fr(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height<l?l:s.height,s.depth=s.depth<u?u:s.depth}a=e.havingStyle(i);var h=Fr(t.denom,a,e),f,d,p;t.hasBarLine?(t.barSize?(d=ti(t.barSize,e),f=Be.makeLineSpan("frac-line",e,d)):f=Be.makeLineSpan("frac-line",e),d=f.height,p=f.height):(f=null,d=0,p=e.fontMetrics().defaultRuleThickness);var m,g,y;r.size===tr.DISPLAY.size||t.size==="display"?(m=e.fontMetrics().num1,d>0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d)<g&&(m+=g-(m-s.depth-(b+.5*d))),b-.5*d-(h.height-y)<g&&(y+=g-(b-.5*d-(h.height-y)));var w=-(b-.5*d);v=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:h,shift:y},{type:"elem",elem:f,shift:w},{type:"elem",elem:s,shift:-m}]},e)}else{var x=m-s.depth-(h.height-y);x<g&&(m+=.5*(g-x),y+=.5*(g-x)),v=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:h,shift:y},{type:"elem",elem:s,shift:-m}]},e)}a=e.havingStyle(r),v.height*=a.sizeMultiplier/e.sizeMultiplier,v.depth*=a.sizeMultiplier/e.sizeMultiplier;var C;r.size===tr.DISPLAY.size?C=e.fontMetrics().delim1:r.size===tr.SCRIPTSCRIPT.size?C=e.havingStyle(tr.SCRIPT).fontMetrics().delim2:C=e.fontMetrics().delim2;var T,E;return t.leftDelim==null?T=Hy(e,["mopen"]):T=ou.customSizedDelim(t.leftDelim,C,!0,e.havingStyle(r),t.mode,["mopen"]),t.continued?E=Be.makeSpan([]):t.rightDelim==null?E=Hy(e,["mclose"]):E=ou.customSizedDelim(t.rightDelim,C,!0,e.havingStyle(r),t.mode,["mclose"]),Be.makeSpan(["mord"].concat(a.sizingClasses(e)),[T,Be.makeSpan(["mfrac"],[v]),E],e)},"htmlBuilder$4"),X7=o((t,e)=>{var r=new dt.MathNode("mfrac",[yn(t.numer,e),yn(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var n=ti(t.barSize,e);r.setAttribute("linethickness",kt(n))}var i=bG(t.size,e.style);if(i.size!==e.style.size){r=new dt.MathNode("mstyle",[r]);var a=i.size===tr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new dt.MathNode("mo",[new dt.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new dt.MathNode("mo",[new dt.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return F7(s)}return r},"mathmlBuilder$3");Nt({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1],s,l=null,u=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:i,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:Y7,mathmlBuilder:X7});Nt({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:i,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});Nt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:n}=t,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:i,token:n}}});Ez=["display","text","script","scriptscript"],Sz=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");Nt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,n=e[4],i=e[5],a=g3(e[0]),s=a.type==="atom"&&a.family==="open"?Sz(a.text):null,l=g3(e[1]),u=l.type==="atom"&&l.family==="close"?Sz(l.text):null,h=xr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=xr(m.body[0],"textord");p=Ez[Number(g.text)]}}else m=xr(m,"textord"),p=Ez[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:Y7,mathmlBuilder:X7});Nt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:n,token:i}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:xr(e[0],"size").value,token:i}}});Nt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=obe(xr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:Y7,mathmlBuilder:X7});wG=o((t,e)=>{var r=e.style,n,i;t.type==="supsub"?(n=t.sup?Fr(t.sup,e.havingStyle(r.sup()),e):Fr(t.sub,e.havingStyle(r.sub()),e),i=xr(t.base,"horizBrace")):i=xr(t,"horizBrace");var a=Fr(i.base,e.havingBaseStyle(tr.DISPLAY)),s=cu.svgSpan(i,e),l;if(i.isOver?(l=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=Be.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),n){var u=Be.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e);i.isOver?l=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:n}]},e):l=Be.makeVList({positionType:"bottom",positionData:u.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return Be.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),D4e=o((t,e)=>{var r=cu.mathMLnode(t.label);return new dt.MathNode(t.isOver?"mover":"munder",[yn(t.base,e),r])},"mathmlBuilder$2");Nt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:e[0]}},htmlBuilder:wG,mathmlBuilder:D4e});Nt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[1],i=xr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:di(n)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e,!1);return Be.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=dh(t.body,e);return r instanceof ws||(r=new ws("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});Nt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=xr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a<n.length;a++){var s=n[a];s==="~"&&(s="\\textasciitilde"),i.push({type:"textord",mode:"text",text:s})}var l={type:"text",mode:r.mode,font:"\\texttt",body:i};return{type:"href",mode:r.mode,href:n,body:di(l)}},"handler")});Nt({type:"hbox",names:["\\hbox"],props:{numArgs:1,argTypes:["text"],allowedInText:!0,primitive:!0},handler(t,e){var{parser:r}=t;return{type:"hbox",mode:r.mode,body:di(e[0])}},htmlBuilder(t,e){var r=Pi(t.body,e,!1);return Be.makeFragment(r)},mathmlBuilder(t,e){return new dt.MathNode("mrow",ks(t.body,e))}});Nt({type:"html",names:["\\htmlClass","\\htmlId","\\htmlStyle","\\htmlData"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,token:i}=t,a=xr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(n){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f<h.length;f++){var d=h[f].split("=");if(d.length!==2)throw new gt("Error parsing key-value for \\htmlData");u["data-"+d[0].trim()]=d[1].trim()}l={command:"\\htmlData",attributes:u};break}default:throw new Error("Unrecognized html command")}return r.settings.isTrusted(l)?{type:"html",mode:r.mode,attributes:u,body:di(s)}:r.formatUnsupportedCmd(n)},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e,!1),n=["enclosing"];t.attributes.class&&n.push(...t.attributes.class.trim().split(/\s+/));var i=Be.makeSpan(n,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&i.setAttribute(a,t.attributes[a]);return i},"htmlBuilder"),mathmlBuilder:o((t,e)=>dh(t.body,e),"mathmlBuilder")});Nt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:di(e[0]),mathml:di(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.html,e,!1);return Be.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>dh(t.mathml,e),"mathmlBuilder")});x7=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new gt("Invalid size: '"+e+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!zz(n))throw new gt("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n},"sizeData");Nt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:n}=t,i={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=xr(r[0],"raw").string,h=u.split(","),f=0;f<h.length;f++){var d=h[f].split("=");if(d.length===2){var p=d[1].trim();switch(d[0].trim()){case"alt":l=p;break;case"width":i=x7(p);break;case"height":a=x7(p);break;case"totalheight":s=x7(p);break;default:throw new gt("Invalid key: '"+d[0]+"' in \\includegraphics.")}}}var m=xr(e[0],"url").url;return l===""&&(l=m,l=l.replace(/^.*[\\/]/,""),l=l.substring(0,l.lastIndexOf("."))),n.settings.isTrusted({command:"\\includegraphics",url:m})?{type:"includegraphics",mode:n.mode,alt:l,width:i,height:a,totalheight:s,src:m}:n.formatUnsupportedCmd("\\includegraphics")},"handler"),htmlBuilder:o((t,e)=>{var r=ti(t.height,e),n=0;t.totalheight.number>0&&(n=ti(t.totalheight,e)-r);var i=0;t.width.number>0&&(i=ti(t.width,e));var a={height:kt(r+n)};i>0&&(a.width=kt(i)),n>0&&(a.verticalAlign=kt(-n));var s=new S7(t.src,t.alt,a);return s.height=r,s.depth=n,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var n=ti(t.height,e),i=0;if(t.totalheight.number>0&&(i=ti(t.totalheight,e)-n,r.setAttribute("valign",kt(-i))),r.setAttribute("height",kt(n+i)),t.width.number>0){var a=ti(t.width,e);r.setAttribute("width",kt(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});Nt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=xr(e[0],"size");if(r.settings.strict){var a=n[1]==="m",s=i.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(t,e){return Be.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=ti(t.dimension,e);return new dt.SpaceNode(r)}});Nt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=Be.makeSpan([],[Fr(t.body,e)]),r=Be.makeSpan(["inner"],[r],e)):r=Be.makeSpan(["inner"],[Fr(t.body,e)]);var n=Be.makeSpan(["fix"],[]),i=Be.makeSpan([t.alignment],[r,n],e),a=Be.makeSpan(["strut"]);return a.style.height=kt(i.height+i.depth),i.depth&&(a.style.verticalAlign=kt(-i.depth)),i.children.unshift(a),i=Be.makeSpan(["thinbox"],[i],e),Be.makeSpan(["mord","vbox"],[i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mpadded",[yn(t.body,e)]);if(t.alignment!=="rlap"){var n=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});Nt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:n}=t,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",s=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",body:s}}});Nt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new gt("Mismatched "+t.funcName)}});Cz=o((t,e)=>{switch(e.style.size){case tr.DISPLAY.size:return t.display;case tr.TEXT.size:return t.text;case tr.SCRIPT.size:return t.script;case tr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");Nt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:di(e[0]),text:di(e[1]),script:di(e[2]),scriptscript:di(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=Cz(t,e),n=Pi(r,e,!1);return Be.makeFragment(n)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Cz(t,e);return dh(r,e)},"mathmlBuilder")});TG=o((t,e,r,n,i,a,s)=>{t=Be.makeSpan([],[t]);var l=r&&Jt.isCharacterBox(r),u,h;if(e){var f=Fr(e,n.havingStyle(i.sup()),n);h={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=Fr(r,n.havingStyle(i.sub()),n);u={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=n.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=Be.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:kt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:kt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(u){var g=t.height-s;p=Be.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:kt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},n)}else if(h){var y=t.depth+s;p=Be.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:kt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else return t;var v=[p];if(u&&a!==0&&!l){var x=Be.makeSpan(["mspace"],[],n);x.style.marginRight=kt(a),v.unshift(x)}return Be.makeSpan(["mop","op-limits"],v,n)},"assembleSupSub"),kG=["\\smallint"],m0=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"op"),i=!0):a=xr(t,"op");var s=e.style,l=!1;s.size===tr.DISPLAY.size&&a.symbol&&!Jt.contains(kG,a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=Be.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=Be.staticSvg(f+"Size"+(l?"2":"1"),e);u=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=Pi(a.body,e,!0);m.length===1&&m[0]instanceof Ts?(u=m[0],u.classes[0]="mop"):u=Be.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y<a.name.length;y++)g.push(Be.mathsym(a.name[y],a.mode,e));u=Be.makeSpan(["mop"],g,e)}var v=0,x=0;return(u instanceof Ts||a.name==="\\oiint"||a.name==="\\oiiint")&&!a.suppressBaseShift&&(v=(u.height-u.depth)/2-e.fontMetrics().axisHeight,x=u.italic),i?TG(u,r,n,e,s,x,v):(v&&(u.style.position="relative",u.style.top=kt(v)),u)},"htmlBuilder$2"),Wy=o((t,e)=>{var r;if(t.symbol)r=new ws("mo",[Co(t.name,t.mode)]),Jt.contains(kG,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ws("mo",ks(t.body,e));else{r=new ws("mi",[new Jf(t.name.slice(1))]);var n=new ws("mo",[Co("\u2061","text")]);t.parentIsSupSub?r=new ws("mrow",[r,n]):r=Qz([r,n])}return r},"mathmlBuilder$1"),L4e={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};Nt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=n;return i.length===1&&(i=L4e[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},"handler"),htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:di(n)}},"handler"),htmlBuilder:m0,mathmlBuilder:Wy});R4e={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};Nt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,n=r;return n.length===1&&(n=R4e[n]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:m0,mathmlBuilder:Wy});EG=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"operatorname"),i=!0):a=xr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=Pi(l,e.withFont("mathrm"),!0),h=0;h<u.length;h++){var f=u[h];f instanceof Ts&&(f.text=f.text.replace(/\u2212/,"-").replace(/\u2217/,"*"))}s=Be.makeSpan(["mop"],u,e)}else s=Be.makeSpan(["mop"],[],e);return i?TG(s,r,n,e,e.style,0,0):s},"htmlBuilder$1"),N4e=o((t,e)=>{for(var r=ks(t.body,e.withFont("mathrm")),n=!0,i=0;i<r.length;i++){var a=r[i];if(!(a instanceof dt.SpaceNode))if(a instanceof dt.MathNode)switch(a.type){case"mi":case"mn":case"ms":case"mspace":case"mtext":break;case"mo":{var s=a.children[0];a.children.length===1&&s instanceof dt.TextNode?s.text=s.text.replace(/\u2212/,"-").replace(/\u2217/,"*"):n=!1;break}default:n=!1}else n=!1}if(n){var l=r.map(f=>f.toText()).join("");r=[new dt.TextNode(l)]}var u=new dt.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new dt.MathNode("mo",[Co("\u2061","text")]);return t.parentIsSupSub?new dt.MathNode("mrow",[u,h]):dt.newDocumentFragment([u,h])},"mathmlBuilder");Nt({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"operatorname",mode:r.mode,body:di(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:EG,mathmlBuilder:N4e});fe("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");rd({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?Be.makeFragment(Pi(t.body,e,!1)):Be.makeSpan(["mord"],Pi(t.body,e,!0),e)},mathmlBuilder(t,e){return dh(t.body,e,!0)}});Nt({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,n=e[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(t,e){var r=Fr(t.body,e.havingCrampedStyle()),n=Be.makeLineSpan("overline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]},e);return Be.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("mover",[yn(t.body,e),r]);return n.setAttribute("accent","true"),n}});Nt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"phantom",mode:r.mode,body:di(n)}},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e.withPhantom(),!1);return Be.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(t.body,e);return new dt.MathNode("mphantom",r)},"mathmlBuilder")});Nt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"hphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan([],[Fr(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n<r.children.length;n++)r.children[n].height=0,r.children[n].depth=0;return r=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e),Be.makeSpan(["mord"],[r],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(di(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("height","0px"),i.setAttribute("depth","0px"),i},"mathmlBuilder")});Nt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"vphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan(["inner"],[Fr(t.body,e.withPhantom())]),n=Be.makeSpan(["fix"],[]);return Be.makeSpan(["mord","rlap"],[r,n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(di(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("width","0px"),i},"mathmlBuilder")});Nt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,n=xr(e[0],"size").value,i=e[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(t,e){var r=Fr(t.body,e),n=ti(t.dy,e);return Be.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new dt.MathNode("mpadded",[yn(t.body,e)]),n=t.dy.number+t.dy.unit;return r.setAttribute("voffset",n),r}});Nt({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});Nt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(t,e,r){var{parser:n}=t,i=r[0],a=xr(e[0],"size"),s=xr(e[1],"size");return{type:"rule",mode:n.mode,shift:i&&xr(i,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=Be.makeSpan(["mord","rule"],[],e),n=ti(t.width,e),i=ti(t.height,e),a=t.shift?ti(t.shift,e):0;return r.style.borderRightWidth=kt(n),r.style.borderTopWidth=kt(i),r.style.bottom=kt(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=ti(t.width,e),n=ti(t.height,e),i=t.shift?ti(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new dt.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",kt(r)),s.setAttribute("height",kt(n));var l=new dt.MathNode("mpadded",[s]);return i>=0?l.setAttribute("height",kt(i)):(l.setAttribute("height",kt(i)),l.setAttribute("depth",kt(-i))),l.setAttribute("voffset",kt(i)),l}});o(SG,"sizingGroup");Az=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],M4e=o((t,e)=>{var r=e.havingSize(t.size);return SG(t.body,r,e)},"htmlBuilder");Nt({type:"sizing",names:Az,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:Az.indexOf(n)+1,body:a}},"handler"),htmlBuilder:M4e,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),n=ks(t.body,r),i=new dt.MathNode("mstyle",n);return i.setAttribute("mathsize",kt(r.sizeMultiplier)),i},"mathmlBuilder")});Nt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:n}=t,i=!1,a=!1,s=r[0]&&xr(r[0],"ordgroup");if(s)for(var l="",u=0;u<s.body.length;++u){var h=s.body[u];if(l=h.text,l==="t")i=!0;else if(l==="b")a=!0;else{i=!1,a=!1;break}}else i=!0,a=!0;var f=e[0];return{type:"smash",mode:n.mode,body:f,smashHeight:i,smashDepth:a}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan([],[Fr(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var n=0;n<r.children.length;n++)r.children[n].height=0;if(t.smashDepth&&(r.depth=0,r.children))for(var i=0;i<r.children.length;i++)r.children[i].depth=0;var a=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e);return Be.makeSpan(["mord"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mpadded",[yn(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});Nt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n}=t,i=r[0],a=e[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(t,e){var r=Fr(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=Be.wrapFragment(r,e);var n=e.fontMetrics(),i=n.defaultRuleThickness,a=i;e.style.id<tr.TEXT.id&&(a=e.fontMetrics().xHeight);var s=i+a/4,l=r.height+r.depth+s+i,{span:u,ruleWidth:h,advanceWidth:f}=ou.sqrtImage(l,e),d=u.height-h;d>r.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=kt(f);var m=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(tr.SCRIPTSCRIPT),y=Fr(t.index,g,e),v=.6*(m.height-m.depth),x=Be.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=Be.makeSpan(["root"],[x]);return Be.makeSpan(["mord","sqrt"],[b,m],e)}else return Be.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:n}=t;return n?new dt.MathNode("mroot",[yn(r,e),yn(n,e)]):new dt.MathNode("msqrt",[yn(r,e)])}});_z={display:tr.DISPLAY,text:tr.TEXT,script:tr.SCRIPT,scriptscript:tr.SCRIPTSCRIPT};Nt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!0,r),s=n.slice(1,n.length-5);return{type:"styling",mode:i.mode,style:s,body:a}},htmlBuilder(t,e){var r=_z[t.style],n=e.havingStyle(r).withFont("");return SG(t.body,n,e)},mathmlBuilder(t,e){var r=_z[t.style],n=e.havingStyle(r),i=ks(t.body,n),a=new dt.MathNode("mstyle",i),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});I4e=o(function(e,r){var n=e.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===tr.DISPLAY.size||n.alwaysHandleSupSub);return i?m0:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===tr.DISPLAY.size||n.limits);return a?EG:null}else{if(n.type==="accent")return Jt.isCharacterBox(n.base)?G7:null;if(n.type==="horizBrace"){var s=!e.sub;return s===n.isOver?wG:null}else return null}else return null},"htmlBuilderDelegate");rd({type:"supsub",htmlBuilder(t,e){var r=I4e(t,e);if(r)return r(t,e);var{base:n,sup:i,sub:a}=t,s=Fr(n,e),l,u,h=e.fontMetrics(),f=0,d=0,p=n&&Jt.isCharacterBox(n);if(i){var m=e.havingStyle(e.style.sup());l=Fr(i,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=Fr(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===tr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=kt(.5/h.ptPerEm/v),b=null;if(u){var w=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof Ts||w)&&(b=kt(-s.italic))}var C;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var T=h.defaultRuleThickness,E=4*T;if(f-l.depth-(u.height-d)<E){d=E-(f-l.depth)+u.height;var A=.8*h.xHeight-(f-l.depth);A>0&&(f+=A,d-=A)}var S=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];C=Be.makeVList({positionType:"individualShift",children:S},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var _=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];C=Be.makeVList({positionType:"shift",positionData:d,children:_},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),C=Be.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var I=A7(s,"right")||"mord";return Be.makeSpan([I],[s,Be.makeSpan(["msupsub"],[C])],e)},mathmlBuilder(t,e){var r=!1,n,i;t.base&&t.base.type==="horizBrace"&&(i=!!t.sup,i===t.base.isOver&&(r=!0,n=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[yn(t.base,e)];t.sub&&a.push(yn(t.sub,e)),t.sup&&a.push(yn(t.sup,e));var s;if(r)s=n?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===tr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===tr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===tr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===tr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===tr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===tr.DISPLAY)?s="mover":s="msup"}return new dt.MathNode(s,a)}});rd({type:"atom",htmlBuilder(t,e){return Be.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[Co(t.text,t.mode)]);if(t.family==="bin"){var n=$7(t,e);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});CG={mi:"italic",mn:"normal",mtext:"normal"};rd({type:"mathord",htmlBuilder(t,e){return Be.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new dt.MathNode("mi",[Co(t.text,t.mode,e)]),n=$7(t,e)||"italic";return n!==CG[r.type]&&r.setAttribute("mathvariant",n),r}});rd({type:"textord",htmlBuilder(t,e){return Be.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=Co(t.text,t.mode,e),n=$7(t,e)||"normal",i;return t.mode==="text"?i=new dt.MathNode("mtext",[r]):/[0-9]/.test(t.text)?i=new dt.MathNode("mn",[r]):t.text==="\\prime"?i=new dt.MathNode("mo",[r]):i=new dt.MathNode("mi",[r]),n!==CG[i.type]&&i.setAttribute("mathvariant",n),i}});b7={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},w7={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};rd({type:"spacing",htmlBuilder(t,e){if(w7.hasOwnProperty(t.text)){var r=w7[t.text].className||"";if(t.mode==="text"){var n=Be.makeOrd(t,e,"textord");return n.classes.push(r),n}else return Be.makeSpan(["mspace",r],[Be.mathsym(t.text,t.mode,e)],e)}else{if(b7.hasOwnProperty(t.text))return Be.makeSpan(["mspace",b7[t.text]],[],e);throw new gt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(w7.hasOwnProperty(t.text))r=new dt.MathNode("mtext",[new dt.TextNode("\xA0")]);else{if(b7.hasOwnProperty(t.text))return new dt.MathNode("mspace");throw new gt('Unknown type of space "'+t.text+'"')}return r}});Dz=o(()=>{var t=new dt.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");rd({type:"tag",mathmlBuilder(t,e){var r=new dt.MathNode("mtable",[new dt.MathNode("mtr",[Dz(),new dt.MathNode("mtd",[dh(t.body,e)]),Dz(),new dt.MathNode("mtd",[dh(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});Lz={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Rz={"\\textbf":"textbf","\\textmd":"textmd"},O4e={"\\textit":"textit","\\textup":"textup"},Nz=o((t,e)=>{var r=t.font;if(r){if(Lz[r])return e.withTextFontFamily(Lz[r]);if(Rz[r])return e.withTextFontWeight(Rz[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(O4e[r])},"optionsWithFont");Nt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"text",mode:r.mode,body:di(i),font:n}},htmlBuilder(t,e){var r=Nz(t,e),n=Pi(t.body,r,!0);return Be.makeSpan(["mord","text"],n,r)},mathmlBuilder(t,e){var r=Nz(t,e);return dh(t.body,r)}});Nt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Fr(t.body,e),n=Be.makeLineSpan("underline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Be.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]},e);return Be.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("munder",[yn(t.body,e),r]);return n.setAttribute("accentunder","true"),n}});Nt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Fr(t.body,e),n=e.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return Be.makeVList({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new dt.MathNode("mpadded",[yn(t.body,e)],["vcenter"])}});Nt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new gt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=Mz(t),n=[],i=e.havingStyle(e.style.text()),a=0;a<r.length;a++){var s=r[a];s==="~"&&(s="\\textasciitilde"),n.push(Be.makeSymbol(s,"Typewriter-Regular",t.mode,i,["mord","texttt"]))}return Be.makeSpan(["mord","text"].concat(i.sizingClasses(e)),Be.tryCombineChars(n),i)},mathmlBuilder(t,e){var r=new dt.TextNode(Mz(t)),n=new dt.MathNode("mtext",[r]);return n.setAttribute("mathvariant","monospace"),n}});Mz=o(t=>t.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),hh=jz,AG=`[ \r | |
| 271 | + ]`,P4e="\\\\[a-zA-Z@]+",B4e="\\\\[^\uD800-\uDFFF]",F4e="("+P4e+")"+AG+"*",$4e=`\\\\( | |
| 272 | +|[ \r ]+ | |
| 273 | +?)[ \r ]*`,N7="[\u0300-\u036F]",z4e=new RegExp(N7+"+$"),G4e="("+AG+"+)|"+($4e+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(N7+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(N7+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+F4e)+("|"+B4e+")"),y3=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp(G4e,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new So("EOF",new Xs(this,r,r));var n=this.tokenRegex.exec(e);if(n===null||n.index!==r)throw new gt("Unexpected character: '"+e[r]+"'",new So(e[r],new Xs(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=e.indexOf(` | |
| 274 | +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new So(i,new Xs(this,r,this.tokenRegex.lastIndex))}},M7=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new gt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i<this.undefStack.length;i++)delete this.undefStack[i][e];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},V4e=gG;fe("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});fe("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});fe("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});fe("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});fe("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});fe("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");fe("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});Iz={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};fe("\\char",function(t){var e=t.popToken(),r,n="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")n=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new gt("\\char` missing argument");n=e.text.charCodeAt(0)}else r=10;if(r){if(n=Iz[e.text],n==null||n>=r)throw new gt("Invalid base-"+r+" digit "+e.text);for(var i;(i=Iz[t.future().text])!=null&&i<r;)n*=r,n+=i,t.popToken()}return"\\@char{"+n+"}"});j7=o((t,e,r)=>{var n=t.consumeArg().tokens;if(n.length!==1)throw new gt("\\newcommand's first argument must be a macro name");var i=n[0].text,a=t.isDefined(i);if(a&&!e)throw new gt("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!a&&!r)throw new gt("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(n=t.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var l="",u=t.expandNextToken();u.text!=="]"&&u.text!=="EOF";)l+=u.text,u=t.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new gt("Invalid number of arguments: "+l);s=parseInt(l),n=t.consumeArg().tokens}return t.macros.set(i,{tokens:n,numArgs:s}),""},"newcommand");fe("\\newcommand",t=>j7(t,!1,!0));fe("\\renewcommand",t=>j7(t,!0,!1));fe("\\providecommand",t=>j7(t,!0,!0));fe("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});fe("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});fe("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),hh[r],An.math[r],An.text[r]),""});fe("\\bgroup","{");fe("\\egroup","}");fe("~","\\nobreakspace");fe("\\lq","`");fe("\\rq","'");fe("\\aa","\\r a");fe("\\AA","\\r A");fe("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");fe("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");fe("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");fe("\u212C","\\mathscr{B}");fe("\u2130","\\mathscr{E}");fe("\u2131","\\mathscr{F}");fe("\u210B","\\mathscr{H}");fe("\u2110","\\mathscr{I}");fe("\u2112","\\mathscr{L}");fe("\u2133","\\mathscr{M}");fe("\u211B","\\mathscr{R}");fe("\u212D","\\mathfrak{C}");fe("\u210C","\\mathfrak{H}");fe("\u2128","\\mathfrak{Z}");fe("\\Bbbk","\\Bbb{k}");fe("\xB7","\\cdotp");fe("\\llap","\\mathllap{\\textrm{#1}}");fe("\\rlap","\\mathrlap{\\textrm{#1}}");fe("\\clap","\\mathclap{\\textrm{#1}}");fe("\\mathstrut","\\vphantom{(}");fe("\\underbar","\\underline{\\text{#1}}");fe("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');fe("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");fe("\\ne","\\neq");fe("\u2260","\\neq");fe("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");fe("\u2209","\\notin");fe("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");fe("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");fe("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");fe("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");fe("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");fe("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");fe("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");fe("\u27C2","\\perp");fe("\u203C","\\mathclose{!\\mkern-0.8mu!}");fe("\u220C","\\notni");fe("\u231C","\\ulcorner");fe("\u231D","\\urcorner");fe("\u231E","\\llcorner");fe("\u231F","\\lrcorner");fe("\xA9","\\copyright");fe("\xAE","\\textregistered");fe("\uFE0F","\\textregistered");fe("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');fe("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');fe("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');fe("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');fe("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}");fe("\u22EE","\\vdots");fe("\\varGamma","\\mathit{\\Gamma}");fe("\\varDelta","\\mathit{\\Delta}");fe("\\varTheta","\\mathit{\\Theta}");fe("\\varLambda","\\mathit{\\Lambda}");fe("\\varXi","\\mathit{\\Xi}");fe("\\varPi","\\mathit{\\Pi}");fe("\\varSigma","\\mathit{\\Sigma}");fe("\\varUpsilon","\\mathit{\\Upsilon}");fe("\\varPhi","\\mathit{\\Phi}");fe("\\varPsi","\\mathit{\\Psi}");fe("\\varOmega","\\mathit{\\Omega}");fe("\\substack","\\begin{subarray}{c}#1\\end{subarray}");fe("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");fe("\\boxed","\\fbox{$\\displaystyle{#1}$}");fe("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");fe("\\implies","\\DOTSB\\;\\Longrightarrow\\;");fe("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");Oz={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};fe("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in Oz?e=Oz[r]:(r.slice(0,4)==="\\not"||r in An.math&&Jt.contains(["bin","rel"],An.math[r].group))&&(e="\\dotsb"),e});K7={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};fe("\\dotso",function(t){var e=t.future().text;return e in K7?"\\ldots\\,":"\\ldots"});fe("\\dotsc",function(t){var e=t.future().text;return e in K7&&e!==","?"\\ldots\\,":"\\ldots"});fe("\\cdots",function(t){var e=t.future().text;return e in K7?"\\@cdots\\,":"\\@cdots"});fe("\\dotsb","\\cdots");fe("\\dotsm","\\cdots");fe("\\dotsi","\\!\\cdots");fe("\\dotsx","\\ldots\\,");fe("\\DOTSI","\\relax");fe("\\DOTSB","\\relax");fe("\\DOTSX","\\relax");fe("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");fe("\\,","\\tmspace+{3mu}{.1667em}");fe("\\thinspace","\\,");fe("\\>","\\mskip{4mu}");fe("\\:","\\tmspace+{4mu}{.2222em}");fe("\\medspace","\\:");fe("\\;","\\tmspace+{5mu}{.2777em}");fe("\\thickspace","\\;");fe("\\!","\\tmspace-{3mu}{.1667em}");fe("\\negthinspace","\\!");fe("\\negmedspace","\\tmspace-{4mu}{.2222em}");fe("\\negthickspace","\\tmspace-{5mu}{.277em}");fe("\\enspace","\\kern.5em ");fe("\\enskip","\\hskip.5em\\relax");fe("\\quad","\\hskip1em\\relax");fe("\\qquad","\\hskip2em\\relax");fe("\\tag","\\@ifstar\\tag@literal\\tag@paren");fe("\\tag@paren","\\tag@literal{({#1})}");fe("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new gt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});fe("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");fe("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");fe("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");fe("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");fe("\\newline","\\\\\\relax");fe("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");_G=kt(jl["Main-Regular"][84][1]-.7*jl["Main-Regular"][65][1]);fe("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+_G+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");fe("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+_G+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");fe("\\hspace","\\@ifstar\\@hspacer\\@hspace");fe("\\@hspace","\\hskip #1\\relax");fe("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");fe("\\ordinarycolon",":");fe("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");fe("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');fe("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');fe("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');fe("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');fe("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');fe("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');fe("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');fe("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');fe("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');fe("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');fe("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');fe("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');fe("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');fe("\u2237","\\dblcolon");fe("\u2239","\\eqcolon");fe("\u2254","\\coloneqq");fe("\u2255","\\eqqcolon");fe("\u2A74","\\Coloneqq");fe("\\ratio","\\vcentcolon");fe("\\coloncolon","\\dblcolon");fe("\\colonequals","\\coloneqq");fe("\\coloncolonequals","\\Coloneqq");fe("\\equalscolon","\\eqqcolon");fe("\\equalscoloncolon","\\Eqqcolon");fe("\\colonminus","\\coloneq");fe("\\coloncolonminus","\\Coloneq");fe("\\minuscolon","\\eqcolon");fe("\\minuscoloncolon","\\Eqcolon");fe("\\coloncolonapprox","\\Colonapprox");fe("\\coloncolonsim","\\Colonsim");fe("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");fe("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");fe("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");fe("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");fe("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");fe("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");fe("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");fe("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");fe("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");fe("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");fe("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");fe("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");fe("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");fe("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");fe("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");fe("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");fe("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");fe("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");fe("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");fe("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");fe("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");fe("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");fe("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");fe("\\imath","\\html@mathml{\\@imath}{\u0131}");fe("\\jmath","\\html@mathml{\\@jmath}{\u0237}");fe("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");fe("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");fe("\u27E6","\\llbracket");fe("\u27E7","\\rrbracket");fe("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");fe("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");fe("\u2983","\\lBrace");fe("\u2984","\\rBrace");fe("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");fe("\u29B5","\\minuso");fe("\\darr","\\downarrow");fe("\\dArr","\\Downarrow");fe("\\Darr","\\Downarrow");fe("\\lang","\\langle");fe("\\rang","\\rangle");fe("\\uarr","\\uparrow");fe("\\uArr","\\Uparrow");fe("\\Uarr","\\Uparrow");fe("\\N","\\mathbb{N}");fe("\\R","\\mathbb{R}");fe("\\Z","\\mathbb{Z}");fe("\\alef","\\aleph");fe("\\alefsym","\\aleph");fe("\\Alpha","\\mathrm{A}");fe("\\Beta","\\mathrm{B}");fe("\\bull","\\bullet");fe("\\Chi","\\mathrm{X}");fe("\\clubs","\\clubsuit");fe("\\cnums","\\mathbb{C}");fe("\\Complex","\\mathbb{C}");fe("\\Dagger","\\ddagger");fe("\\diamonds","\\diamondsuit");fe("\\empty","\\emptyset");fe("\\Epsilon","\\mathrm{E}");fe("\\Eta","\\mathrm{H}");fe("\\exist","\\exists");fe("\\harr","\\leftrightarrow");fe("\\hArr","\\Leftrightarrow");fe("\\Harr","\\Leftrightarrow");fe("\\hearts","\\heartsuit");fe("\\image","\\Im");fe("\\infin","\\infty");fe("\\Iota","\\mathrm{I}");fe("\\isin","\\in");fe("\\Kappa","\\mathrm{K}");fe("\\larr","\\leftarrow");fe("\\lArr","\\Leftarrow");fe("\\Larr","\\Leftarrow");fe("\\lrarr","\\leftrightarrow");fe("\\lrArr","\\Leftrightarrow");fe("\\Lrarr","\\Leftrightarrow");fe("\\Mu","\\mathrm{M}");fe("\\natnums","\\mathbb{N}");fe("\\Nu","\\mathrm{N}");fe("\\Omicron","\\mathrm{O}");fe("\\plusmn","\\pm");fe("\\rarr","\\rightarrow");fe("\\rArr","\\Rightarrow");fe("\\Rarr","\\Rightarrow");fe("\\real","\\Re");fe("\\reals","\\mathbb{R}");fe("\\Reals","\\mathbb{R}");fe("\\Rho","\\mathrm{P}");fe("\\sdot","\\cdot");fe("\\sect","\\S");fe("\\spades","\\spadesuit");fe("\\sub","\\subset");fe("\\sube","\\subseteq");fe("\\supe","\\supseteq");fe("\\Tau","\\mathrm{T}");fe("\\thetasym","\\vartheta");fe("\\weierp","\\wp");fe("\\Zeta","\\mathrm{Z}");fe("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");fe("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");fe("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");fe("\\bra","\\mathinner{\\langle{#1}|}");fe("\\ket","\\mathinner{|{#1}\\rangle}");fe("\\braket","\\mathinner{\\langle{#1}\\rangle}");fe("\\Bra","\\left\\langle#1\\right|");fe("\\Ket","\\left|#1\\right\\rangle");DG=o(t=>e=>{var r=e.consumeArg().tokens,n=e.consumeArg().tokens,i=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),i.length&&p.macros.set("\\|",l));var m=d;if(!d&&i.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?i:n,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),i.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");fe("\\bra@ket",DG(!1));fe("\\bra@set",DG(!0));fe("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");fe("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");fe("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");fe("\\angln","{\\angl n}");fe("\\blue","\\textcolor{##6495ed}{#1}");fe("\\orange","\\textcolor{##ffa500}{#1}");fe("\\pink","\\textcolor{##ff00af}{#1}");fe("\\red","\\textcolor{##df0030}{#1}");fe("\\green","\\textcolor{##28ae7b}{#1}");fe("\\gray","\\textcolor{gray}{#1}");fe("\\purple","\\textcolor{##9d38bd}{#1}");fe("\\blueA","\\textcolor{##ccfaff}{#1}");fe("\\blueB","\\textcolor{##80f6ff}{#1}");fe("\\blueC","\\textcolor{##63d9ea}{#1}");fe("\\blueD","\\textcolor{##11accd}{#1}");fe("\\blueE","\\textcolor{##0c7f99}{#1}");fe("\\tealA","\\textcolor{##94fff5}{#1}");fe("\\tealB","\\textcolor{##26edd5}{#1}");fe("\\tealC","\\textcolor{##01d1c1}{#1}");fe("\\tealD","\\textcolor{##01a995}{#1}");fe("\\tealE","\\textcolor{##208170}{#1}");fe("\\greenA","\\textcolor{##b6ffb0}{#1}");fe("\\greenB","\\textcolor{##8af281}{#1}");fe("\\greenC","\\textcolor{##74cf70}{#1}");fe("\\greenD","\\textcolor{##1fab54}{#1}");fe("\\greenE","\\textcolor{##0d923f}{#1}");fe("\\goldA","\\textcolor{##ffd0a9}{#1}");fe("\\goldB","\\textcolor{##ffbb71}{#1}");fe("\\goldC","\\textcolor{##ff9c39}{#1}");fe("\\goldD","\\textcolor{##e07d10}{#1}");fe("\\goldE","\\textcolor{##a75a05}{#1}");fe("\\redA","\\textcolor{##fca9a9}{#1}");fe("\\redB","\\textcolor{##ff8482}{#1}");fe("\\redC","\\textcolor{##f9685d}{#1}");fe("\\redD","\\textcolor{##e84d39}{#1}");fe("\\redE","\\textcolor{##bc2612}{#1}");fe("\\maroonA","\\textcolor{##ffbde0}{#1}");fe("\\maroonB","\\textcolor{##ff92c6}{#1}");fe("\\maroonC","\\textcolor{##ed5fa6}{#1}");fe("\\maroonD","\\textcolor{##ca337c}{#1}");fe("\\maroonE","\\textcolor{##9e034e}{#1}");fe("\\purpleA","\\textcolor{##ddd7ff}{#1}");fe("\\purpleB","\\textcolor{##c6b9fc}{#1}");fe("\\purpleC","\\textcolor{##aa87ff}{#1}");fe("\\purpleD","\\textcolor{##7854ab}{#1}");fe("\\purpleE","\\textcolor{##543b78}{#1}");fe("\\mintA","\\textcolor{##f5f9e8}{#1}");fe("\\mintB","\\textcolor{##edf2df}{#1}");fe("\\mintC","\\textcolor{##e0e5cc}{#1}");fe("\\grayA","\\textcolor{##f6f7f7}{#1}");fe("\\grayB","\\textcolor{##f0f1f2}{#1}");fe("\\grayC","\\textcolor{##e3e5e6}{#1}");fe("\\grayD","\\textcolor{##d6d8da}{#1}");fe("\\grayE","\\textcolor{##babec2}{#1}");fe("\\grayF","\\textcolor{##888d93}{#1}");fe("\\grayG","\\textcolor{##626569}{#1}");fe("\\grayH","\\textcolor{##3b3e40}{#1}");fe("\\grayI","\\textcolor{##21242c}{#1}");fe("\\kaBlue","\\textcolor{##314453}{#1}");fe("\\kaGreen","\\textcolor{##71B307}{#1}");LG={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},I7=class{static{o(this,"MacroExpander")}constructor(e,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new M7(V4e,r.macros),this.mode=n,this.stack=[]}feed(e){this.lexer=new y3(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,n,i;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new So("EOF",n.loc)),this.pushTokens(i),r.range(n,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],n=e&&e.length>0;n||this.consumeSpaces();var i=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new gt("Extra }",a)}else if(a.text==="EOF")throw new gt("Unexpected end of input in a macro argument, expected '"+(e&&n?e[l]:"}")+"'",a);if(e&&n)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new gt("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;i<n.length;i++){var a=this.popToken();if(n[i]!==a.text)throw new gt("Use of the macro doesn't match its definition",a)}}for(var s=[],l=0;l<e;l++)s.push(this.consumeArg(r&&r[l+1]).tokens);return s}countExpansion(e){if(this.expansionCount+=e,this.expansionCount>this.settings.maxExpand)throw new gt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||e&&i.unexpandable){if(e&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new gt("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,s=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new gt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new gt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new So(e)]):void 0}expandTokens(e){var r=[],n=this.stack.length;for(this.pushTokens(e);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(n=>n.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var n=this.lexer.catcodes[e];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.indexOf("#")!==-1)for(var s=i.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new y3(i,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return i}isDefined(e){return this.macros.has(e)||hh.hasOwnProperty(e)||An.math.hasOwnProperty(e)||An.text.hasOwnProperty(e)||LG.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:hh.hasOwnProperty(e)&&!hh[e].primitive}},Pz=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,l3=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),T7={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},Bz={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},v3=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new I7(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new gt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new So("}")),this.gullet.pushTokens(e);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(e,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(t.endOfExpression.indexOf(i.text)!==-1||r&&i.text===r||e&&hh[i.text]&&hh[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(e){for(var r=-1,n,i=0;i<e.length;i++)if(e[i].type==="infix"){if(r!==-1)throw new gt("only one infix operator per group",e[i].token);r=i,n=e[i].replaceWith}if(r!==-1&&n){var a,s,l=e.slice(0,r),u=e.slice(r+1);l.length===1&&l[0].type==="ordgroup"?a=l[0]:a={type:"ordgroup",mode:this.mode,body:l},u.length===1&&u[0].type==="ordgroup"?s=u[0]:s={type:"ordgroup",mode:this.mode,body:u};var h;return n==="\\\\abovefrac"?h=this.callFunction(n,[a,e[r],s],[]):h=this.callFunction(n,[a,s],[]),[h]}else return e}handleSupSubscript(e){var r=this.fetch(),n=r.text;this.consume(),this.consumeSpaces();var i=this.parseGroup(e);if(!i)throw new gt("Expected group after '"+n+"'",r);return i}formatUnsupportedCmd(e){for(var r=[],n=0;n<e.length;n++)r.push({type:"textord",mode:"text",text:e[n]});var i={type:"text",mode:this.mode,body:r},a={type:"color",mode:this.mode,color:this.settings.errorColor,body:[i]};return a}parseAtom(e){var r=this.parseGroup("atom",e);if(this.mode==="text")return r;for(var n,i;;){this.consumeSpaces();var a=this.fetch();if(a.text==="\\limits"||a.text==="\\nolimits"){if(r&&r.type==="op"){var s=a.text==="\\limits";r.limits=s,r.alwaysHandleSupSub=!0}else if(r&&r.type==="operatorname")r.alwaysHandleSupSub&&(r.limits=a.text==="\\limits");else throw new gt("Limit controls must follow a math operator",a);this.consume()}else if(a.text==="^"){if(n)throw new gt("Double superscript",a);n=this.handleSupSubscript("superscript")}else if(a.text==="_"){if(i)throw new gt("Double subscript",a);i=this.handleSupSubscript("subscript")}else if(a.text==="'"){if(n)throw new gt("Double superscript",a);var l={type:"textord",mode:this.mode,text:"\\prime"},u=[l];for(this.consume();this.fetch().text==="'";)u.push(l),this.consume();this.fetch().text==="^"&&u.push(this.handleSupSubscript("superscript")),n={type:"ordgroup",mode:this.mode,body:u}}else if(l3[a.text]){var h=Pz.test(a.text),f=[];for(f.push(new So(l3[a.text])),this.consume();;){var d=this.fetch().text;if(!l3[d]||Pz.test(d)!==h)break;f.unshift(new So(l3[d])),this.consume()}var p=this.subparse(f);h?i={type:"ordgroup",mode:"math",body:p}:n={type:"ordgroup",mode:"math",body:p}}else break}return n||i?{type:"supsub",mode:this.mode,base:r,sup:n,sub:i}:r}parseFunction(e,r){var n=this.fetch(),i=n.text,a=hh[i];if(!a)return null;if(this.consume(),r&&r!=="atom"&&!a.allowedInArgument)throw new gt("Got function '"+i+"' with no arguments"+(r?" as "+r:""),n);if(this.mode==="text"&&!a.allowedInText)throw new gt("Can't use function '"+i+"' in text mode",n);if(this.mode==="math"&&a.allowedInMath===!1)throw new gt("Can't use function '"+i+"' in math mode",n);var{args:s,optArgs:l}=this.parseArguments(i,a);return this.callFunction(i,s,l,n,e)}callFunction(e,r,n,i,a){var s={funcName:e,parser:this,token:i,breakOnTokenText:a},l=hh[e];if(l&&l.handler)return l.handler(s,r,n);throw new gt("No function handler for "+e)}parseArguments(e,r){var n=r.numArgs+r.numOptionalArgs;if(n===0)return{args:[],optArgs:[]};for(var i=[],a=[],s=0;s<n;s++){var l=r.argTypes&&r.argTypes[s],u=s<r.numOptionalArgs;(r.primitive&&l==null||r.type==="sqrt"&&s===1&&a[0]==null)&&(l="primitive");var h=this.parseGroupOfType("argument to '"+e+"'",l,u);if(u)a.push(h);else if(h!=null)i.push(h);else throw new gt("Null argument, please report this as a bug")}return{args:i,optArgs:a}}parseGroupOfType(e,r,n){switch(r){case"color":return this.parseColorGroup(n);case"size":return this.parseSizeGroup(n);case"url":return this.parseUrlGroup(n);case"math":case"text":return this.parseArgumentGroup(n,r);case"hbox":{var i=this.parseArgumentGroup(n,"text");return i!=null?{type:"styling",mode:i.mode,body:[i],style:"text"}:null}case"raw":{var a=this.parseStringGroup("raw",n);return a!=null?{type:"raw",mode:"text",string:a.text}:null}case"primitive":{if(n)throw new gt("A primitive argument cannot be optional");var s=this.parseGroup(e);if(s==null)throw new gt("Expected group as "+e,this.fetch());return s}case"original":case null:case void 0:return this.parseArgumentGroup(n);default:throw new gt("Unknown group type as "+e,this.fetch())}}consumeSpaces(){for(;this.fetch().text===" ";)this.consume()}parseStringGroup(e,r){var n=this.gullet.scanArgument(r);if(n==null)return null;for(var i="",a;(a=this.fetch()).text!=="EOF";)i+=a.text,this.consume();return this.consume(),n.text=i,n}parseRegexGroup(e,r){for(var n=this.fetch(),i=n,a="",s;(s=this.fetch()).text!=="EOF"&&e.test(a+s.text);)i=s,a+=i.text,this.consume();if(a==="")throw new gt("Invalid "+r+": '"+n.text+"'",n);return n.range(i,a)}parseColorGroup(e){var r=this.parseStringGroup("color",e);if(r==null)return null;var n=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(r.text);if(!n)throw new gt("Invalid color: '"+r.text+"'",r);var i=n[0];return/^[0-9a-f]{6}$/i.test(i)&&(i="#"+i),{type:"color-token",mode:this.mode,color:i}}parseSizeGroup(e){var r,n=!1;if(this.gullet.consumeSpaces(),!e&&this.gullet.future().text!=="{"?r=this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size"):r=this.parseStringGroup("size",e),!r)return null;!e&&r.text.length===0&&(r.text="0pt",n=!0);var i=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(r.text);if(!i)throw new gt("Invalid size: '"+r.text+"'",r);var a={number:+(i[1]+i[2]),unit:i[3]};if(!zz(a))throw new gt("Invalid unit: '"+a.unit+"'",r);return{type:"size",mode:this.mode,value:a,isBlank:n}}parseUrlGroup(e){this.gullet.lexer.setCatcode("%",13),this.gullet.lexer.setCatcode("~",12);var r=this.parseStringGroup("url",e);if(this.gullet.lexer.setCatcode("%",14),this.gullet.lexer.setCatcode("~",13),r==null)return null;var n=r.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:n}}parseArgumentGroup(e,r){var n=this.gullet.scanArgument(e);if(n==null)return null;var i=this.mode;r&&this.switchMode(r),this.gullet.beginGroup();var a=this.parseExpression(!1,"EOF");this.expect("EOF"),this.gullet.endGroup();var s={type:"ordgroup",mode:this.mode,loc:n.loc,body:a};return r&&this.switchMode(i),s}parseGroup(e,r){var n=this.fetch(),i=n.text,a;if(i==="{"||i==="\\begingroup"){this.consume();var s=i==="{"?"}":"\\endgroup";this.gullet.beginGroup();var l=this.parseExpression(!1,s),u=this.fetch();this.expect(s),this.gullet.endGroup(),a={type:"ordgroup",mode:this.mode,loc:Xs.range(n,u),body:l,semisimple:i==="\\begingroup"||void 0}}else if(a=this.parseFunction(r,e)||this.parseSymbol(),a==null&&i[0]==="\\"&&!LG.hasOwnProperty(i)){if(this.settings.throwOnError)throw new gt("Undefined control sequence: "+i,n);a=this.formatUnsupportedCmd(i),this.consume()}return a}formLigatures(e){for(var r=e.length-1,n=0;n<r;++n){var i=e[n],a=i.text;a==="-"&&e[n+1].text==="-"&&(n+1<r&&e[n+2].text==="-"?(e.splice(n,3,{type:"textord",mode:"text",loc:Xs.range(i,e[n+2]),text:"---"}),r-=2):(e.splice(n,2,{type:"textord",mode:"text",loc:Xs.range(i,e[n+1]),text:"--"}),r-=1)),(a==="'"||a==="`")&&e[n+1].text===a&&(e.splice(n,2,{type:"textord",mode:"text",loc:Xs.range(i,e[n+1]),text:a+a}),r-=1)}}parseSymbol(){var e=this.fetch(),r=e.text;if(/^\\verb[^a-zA-Z]/.test(r)){this.consume();var n=r.slice(5),i=n.charAt(0)==="*";if(i&&(n=n.slice(1)),n.length<2||n.charAt(0)!==n.slice(-1))throw new gt(`\\verb assertion failed -- | |
| 275 | + please report what input caused this bug`);return n=n.slice(1,-1),{type:"verb",mode:"text",body:n,star:i}}Bz.hasOwnProperty(r[0])&&!An[this.mode][r[0]]&&(this.settings.strict&&this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+r[0]+'" used in math mode',e),r=Bz[r[0]]+r.slice(1));var a=z4e.exec(r);a&&(r=r.substring(0,a.index),r==="i"?r="\u0131":r==="j"&&(r="\u0237"));var s;if(An[this.mode][r]){this.settings.strict&&this.mode==="math"&&C7.indexOf(r)>=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=An[this.mode][r].group,u=Xs.range(e),h;if(Mbe.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&($z(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:Xs.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d<a[0].length;d++){var p=a[0][d];if(!T7[p])throw new gt("Unknown accent ' "+p+"'",e);var m=T7[p][this.mode]||T7[p].text;if(!m)throw new gt("Accent "+p+" unsupported in "+this.mode+" mode",e);s={type:"accent",mode:this.mode,loc:Xs.range(e),label:m,isStretchy:!1,isShifty:!0,base:s}}return s}};v3.endOfExpression=["}","\\endgroup","\\end","\\right","&"];Q7=o(function(e,r){if(!(typeof e=="string"||e instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var n=new v3(e,r);delete n.gullet.macros.current["\\df@tag"];var i=n.parse();if(delete n.gullet.macros.current["\\current@color"],delete n.gullet.macros.current["\\color"],n.gullet.macros.get("\\df@tag")){if(!r.displayMode)throw new gt("\\tag works only in display equations");i=[{type:"tag",mode:"text",body:i,tag:n.subparse([new So("\\df@tag")])}]}return i},"parseTree"),RG=o(function(e,r,n){r.textContent="";var i=Z7(e,n).toNode();r.appendChild(i)},"render");typeof document<"u"&&document.compatMode!=="CSS1Compat"&&(typeof console<"u"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),RG=o(function(){throw new gt("KaTeX doesn't work in quirks mode.")},"render"));U4e=o(function(e,r){var n=Z7(e,r).toMarkup();return n},"renderToString"),H4e=o(function(e,r){var n=new zy(r);return Q7(e,n)},"generateParseTree"),NG=o(function(e,r,n){if(n.throwOnError||!(e instanceof gt))throw e;var i=Be.makeSpan(["katex-error"],[new Ts(r)]);return i.setAttribute("title",e.toString()),i.setAttribute("style","color:"+n.errorColor),i},"renderError"),Z7=o(function(e,r){var n=new zy(r);try{var i=Q7(e,n);return t4e(i,e,n)}catch(a){return NG(a,e,n)}},"renderToDomTree"),W4e=o(function(e,r){var n=new zy(r);try{var i=Q7(e,n);return r4e(i,e,n)}catch(a){return NG(a,e,n)}},"renderToHTMLTree"),q4e={version:"0.16.11",render:RG,renderToString:U4e,ParseError:gt,SETTINGS_SCHEMA:c3,__parse:H4e,__renderToDomTree:Z7,__renderToHTMLTree:W4e,__setFontMetrics:Abe,__defineSymbol:G,__defineFunction:Nt,__defineMacro:fe,__domTree:{Span:td,Anchor:Vy,SymbolNode:Ts,SvgNode:ll,PathNode:Kl,LineNode:Uy}}});function j4e(){let t="data-temp-href-target";ch.addHook("beforeSanitizeAttributes",e=>{e instanceof Element&&e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),ch.addHook("afterSanitizeAttributes",e=>{e instanceof Element&&e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var nd,Y4e,X4e,BG,OG,Tr,K4e,Q4e,Z4e,J4e,FG,e3e,fr,t3e,r3e,ec,J7,n3e,i3e,PG,eA,pi,id,mh,Ze,gr=N(()=>{"use strict";u7();nd=/<br\s*\/?>/gi,Y4e=o(t=>t?FG(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),X4e=(()=>{let t=!1;return()=>{t||(j4e(),t=!0)}})();o(j4e,"setupDompurifyHooks");BG=o(t=>(X4e(),ch.sanitize(t)),"removeScript"),OG=o((t,e)=>{if(e.flowchart?.htmlLabels!==!1){let r=e.securityLevel;r==="antiscript"||r==="strict"?t=BG(t):r!=="loose"&&(t=FG(t),t=t.replace(/</g,"<").replace(/>/g,">"),t=t.replace(/=/g,"="),t=J4e(t))}return t},"sanitizeMore"),Tr=o((t,e)=>t&&(e.dompurifyConfig?t=ch.sanitize(OG(t,e),e.dompurifyConfig).toString():t=ch.sanitize(OG(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),K4e=o((t,e)=>typeof t=="string"?Tr(t,e):t.flat().map(r=>Tr(r,e)),"sanitizeTextOrArray"),Q4e=o(t=>nd.test(t),"hasBreaks"),Z4e=o(t=>t.split(nd),"splitBreaks"),J4e=o(t=>t.replace(/#br#/g,"<br/>"),"placeholderToBreak"),FG=o(t=>t.replace(nd,"#br#"),"breakToPlaceholder"),e3e=o(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},"getUrl"),fr=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),t3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),r3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),ec=o(function(t){let e=t.split(/(,)/),r=[];for(let n=0;n<e.length;n++){let i=e[n];if(i===","&&n>0&&n+1<e.length){let a=e[n-1],s=e[n+1];n3e(a,s)&&(i=a+","+s,n++,r.pop())}r.push(i3e(i))}return r.join("")},"parseGenericTypes"),J7=o((t,e)=>Math.max(0,t.split(e).length-1),"countOccurrence"),n3e=o((t,e)=>{let r=J7(t,"~"),n=J7(e,"~");return r===1&&n===1},"shouldCombineSets"),i3e=o(t=>{let e=J7(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let n=[...t],i=n.indexOf("~"),a=n.lastIndexOf("~");for(;i!==-1&&a!==-1&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),PG=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),eA=/\$\$(.*)\$\$/g,pi=o(t=>(t.match(eA)?.length??0)>0,"hasKatex"),id=o(async(t,e)=>{t=await mh(t,e);let r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),mh=o(async(t,e)=>{if(!pi(t))return t;if(!(PG()||e.legacyMathML||e.forceLegacyMathML))return t.replace(eA,"MathML is unsupported in this environment.");let{default:r}=await Promise.resolve().then(()=>(IG(),MG)),n=e.forceLegacyMathML||!PG()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(nd).map(i=>pi(i)?`<div style="display: flex; align-items: center; justify-content: center; white-space: nowrap;">${i}</div>`:`<div>${i}</div>`).join("").replace(eA,(i,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:n}).replace(/\n/g," ").replace(/<annotation.*<\/annotation>/g,""))},"renderKatex"),Ze={getRows:Y4e,sanitizeText:Tr,sanitizeTextOrArray:K4e,hasBreaks:Q4e,splitBreaks:Z4e,lineBreakRegex:nd,removeScript:BG,getUrl:e3e,evaluate:fr,getMax:t3e,getMin:r3e}});var a3e,s3e,vn,Ao,Ei=N(()=>{"use strict";vt();a3e=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),s3e=o(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),vn=o(function(t,e,r,n){let i=s3e(e,r,n);a3e(t,i)},"configureSvgSize"),Ao=o(function(t,e,r,n){let i=e.node().getBBox(),a=i.width,s=i.height;Y.info(`SVG bounds: ${a}x${s}`,i);let l=0,u=0;Y.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,Y.info(`Calculated bounds: ${l}x${u}`),vn(e,u,l,n);let h=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var S3,o3e,$G,zG,tA=N(()=>{"use strict";vt();S3={},o3e=o((t,e,r)=>{let n="";return t in S3&&S3[t]?n=S3[t](r):Y.warn(`No theme found for ${t}`),` & { | |
| 276 | + font-family: ${r.fontFamily}; | |
| 277 | + font-size: ${r.fontSize}; | |
| 278 | + fill: ${r.textColor} | |
| 279 | + } | |
| 280 | + @keyframes edge-animation-frame { | |
| 281 | + from { | |
| 282 | + stroke-dashoffset: 0; | |
| 283 | + } | |
| 284 | + } | |
| 285 | + @keyframes dash { | |
| 286 | + to { | |
| 287 | + stroke-dashoffset: 0; | |
| 288 | + } | |
| 289 | + } | |
| 290 | + & .edge-animation-slow { | |
| 291 | + stroke-dasharray: 9,5 !important; | |
| 292 | + stroke-dashoffset: 900; | |
| 293 | + animation: dash 50s linear infinite; | |
| 294 | + stroke-linecap: round; | |
| 295 | + } | |
| 296 | + & .edge-animation-fast { | |
| 297 | + stroke-dasharray: 9,5 !important; | |
| 298 | + stroke-dashoffset: 900; | |
| 299 | + animation: dash 20s linear infinite; | |
| 300 | + stroke-linecap: round; | |
| 301 | + } | |
| 302 | + /* Classes common for multiple diagrams */ | |
| 303 | + | |
| 304 | + & .error-icon { | |
| 305 | + fill: ${r.errorBkgColor}; | |
| 306 | + } | |
| 307 | + & .error-text { | |
| 308 | + fill: ${r.errorTextColor}; | |
| 309 | + stroke: ${r.errorTextColor}; | |
| 310 | + } | |
| 311 | + | |
| 312 | + & .edge-thickness-normal { | |
| 313 | + stroke-width: 1px; | |
| 314 | + } | |
| 315 | + & .edge-thickness-thick { | |
| 316 | + stroke-width: 3.5px | |
| 317 | + } | |
| 318 | + & .edge-pattern-solid { | |
| 319 | + stroke-dasharray: 0; | |
| 320 | + } | |
| 321 | + & .edge-thickness-invisible { | |
| 322 | + stroke-width: 0; | |
| 323 | + fill: none; | |
| 324 | + } | |
| 325 | + & .edge-pattern-dashed{ | |
| 326 | + stroke-dasharray: 3; | |
| 327 | + } | |
| 328 | + .edge-pattern-dotted { | |
| 329 | + stroke-dasharray: 2; | |
| 330 | + } | |
| 331 | + | |
| 332 | + & .marker { | |
| 333 | + fill: ${r.lineColor}; | |
| 334 | + stroke: ${r.lineColor}; | |
| 335 | + } | |
| 336 | + & .marker.cross { | |
| 337 | + stroke: ${r.lineColor}; | |
| 338 | + } | |
| 339 | + | |
| 340 | + & svg { | |
| 341 | + font-family: ${r.fontFamily}; | |
| 342 | + font-size: ${r.fontSize}; | |
| 343 | + } | |
| 344 | + & p { | |
| 345 | + margin: 0 | |
| 346 | + } | |
| 347 | + | |
| 348 | + ${n} | |
| 349 | + | |
| 350 | + ${e} | |
| 351 | +`},"getStyles"),$G=o((t,e)=>{e!==void 0&&(S3[t]=e)},"addStylesForDiagram"),zG=o3e});var qy={};hr(qy,{clear:()=>Ar,getAccDescription:()=>Mr,getAccTitle:()=>Rr,getDiagramTitle:()=>Ir,setAccDescription:()=>Nr,setAccTitle:()=>Lr,setDiagramTitle:()=>$r});var rA,nA,iA,aA,Ar,Lr,Rr,Nr,Mr,$r,Ir,mi=N(()=>{"use strict";gr();ji();rA="",nA="",iA="",aA=o(t=>Tr(t,cr()),"sanitizeText"),Ar=o(()=>{rA="",iA="",nA=""},"clear"),Lr=o(t=>{rA=aA(t).replace(/^\s+/g,"")},"setAccTitle"),Rr=o(()=>rA,"getAccTitle"),Nr=o(t=>{iA=aA(t).replace(/\n\s+/g,` | |
| 352 | +`)},"setAccDescription"),Mr=o(()=>iA,"getAccDescription"),$r=o(t=>{nA=aA(t)},"setDiagramTitle"),Ir=o(()=>nA,"getDiagramTitle")});var GG,l3e,me,Yy,A3,Xy,oA,c3e,C3,ad,jy,sA,zt=N(()=>{"use strict";Xf();vt();ji();gr();Ei();tA();mi();GG=Y,l3e=wy,me=cr,Yy=X4,A3=lh,Xy=o(t=>Tr(t,me()),"sanitizeText"),oA=Ao,c3e=o(()=>qy,"getCommonDb"),C3={},ad=o((t,e,r)=>{C3[t]&&GG.warn(`Diagram with id ${t} already registered. Overwriting.`),C3[t]=e,r&&FC(t,r),$G(t,e.styles),e.injectUtils?.(GG,l3e,me,Xy,oA,c3e(),()=>{})},"registerDiagram"),jy=o(t=>{if(t in C3)return C3[t];throw new sA(t)},"getDiagram"),sA=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var ul,gh,Ja,cl,tc,Ky,lA,cA,_3,D3,VG,u3e,h3e,f3e,d3e,p3e,m3e,g3e,y3e,v3e,x3e,b3e,w3e,T3e,k3e,E3e,S3e,C3e,UG,A3e,_3e,HG,D3e,L3e,R3e,N3e,yh,M3e,I3e,O3e,P3e,B3e,Qy,uA=N(()=>{"use strict";zt();gr();mi();ul=[],gh=[""],Ja="global",cl="",tc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Ky=[],lA="",cA=!1,_3=4,D3=2,u3e=o(function(){return VG},"getC4Type"),h3e=o(function(t){VG=Tr(t,me())},"setC4Type"),f3e=o(function(t,e,r,n,i,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let h={},f=Ky.find(d=>d.from===e&&d.to===r);if(f?h=f:Ky.push(h),h.type=t,h.from=e,h.to=r,h.label={text:n},i==null)h.techn={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.techn={text:i};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=yh()},"addRel"),d3e=o(function(t,e,r,n,i,a,s){if(e===null||r===null)return;let l={},u=ul.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,ul.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.descr={text:""};else if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]={text:f}}else l.descr={text:n};if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]=f}else l.sprite=i;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=Ja,l.wrap=yh()},"addPersonOrSystem"),p3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ul.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ul.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=yh(),u.typeC4Shape={text:t},u.parentBoundary=Ja},"addContainer"),m3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ul.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ul.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=yh(),u.typeC4Shape={text:t},u.parentBoundary=Ja},"addComponent"),g3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=tc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,tc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Ja,a.wrap=yh(),cl=Ja,Ja=t,gh.push(cl)},"addPersonOrSystemBoundary"),y3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=tc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,tc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Ja,a.wrap=yh(),cl=Ja,Ja=t,gh.push(cl)},"addContainerBoundary"),v3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=tc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,tc.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.type={text:"node"};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.type={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=Ja,u.wrap=yh(),cl=Ja,Ja=e,gh.push(cl)},"addDeploymentNode"),x3e=o(function(){Ja=cl,gh.pop(),cl=gh.pop(),gh.push(cl)},"popBoundaryParseStack"),b3e=o(function(t,e,r,n,i,a,s,l,u,h,f){let d=ul.find(p=>p.alias===e);if(!(d===void 0&&(d=tc.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),w3e=o(function(t,e,r,n,i,a,s){let l=Ky.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.textColor=n;if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.lineColor=i;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),T3e=o(function(t,e,r){let n=_3,i=D3;if(typeof e=="object"){let a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(_3=n),i>=1&&(D3=i)},"updateLayoutConfig"),k3e=o(function(){return _3},"getC4ShapeInRow"),E3e=o(function(){return D3},"getC4BoundaryInRow"),S3e=o(function(){return Ja},"getCurrentBoundaryParse"),C3e=o(function(){return cl},"getParentBoundaryParse"),UG=o(function(t){return t==null?ul:ul.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),A3e=o(function(t){return ul.find(e=>e.alias===t)},"getC4Shape"),_3e=o(function(t){return Object.keys(UG(t))},"getC4ShapeKeys"),HG=o(function(t){return t==null?tc:tc.filter(e=>e.parentBoundary===t)},"getBoundaries"),D3e=HG,L3e=o(function(){return Ky},"getRels"),R3e=o(function(){return lA},"getTitle"),N3e=o(function(t){cA=t},"setWrap"),yh=o(function(){return cA},"autoWrap"),M3e=o(function(){ul=[],tc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],cl="",Ja="global",gh=[""],Ky=[],gh=[""],lA="",cA=!1,_3=4,D3=2},"clear"),I3e={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},O3e={FILLED:0,OPEN:1},P3e={LEFTOF:0,RIGHTOF:1,OVER:2},B3e=o(function(t){lA=Tr(t,me())},"setTitle"),Qy={addPersonOrSystem:d3e,addPersonOrSystemBoundary:g3e,addContainer:p3e,addContainerBoundary:y3e,addComponent:m3e,addDeploymentNode:v3e,popBoundaryParseStack:x3e,addRel:f3e,updateElStyle:b3e,updateRelStyle:w3e,updateLayoutConfig:T3e,autoWrap:yh,setWrap:N3e,getC4ShapeArray:UG,getC4Shape:A3e,getC4ShapeKeys:_3e,getBoundaries:HG,getBoundarys:D3e,getCurrentBoundaryParse:S3e,getParentBoundaryParse:C3e,getRels:L3e,getTitle:R3e,getC4Type:u3e,getC4ShapeInRow:k3e,getC4BoundaryInRow:E3e,setAccTitle:Lr,getAccTitle:Rr,getAccDescription:Mr,setAccDescription:Nr,getConfig:o(()=>me().c4,"getConfig"),clear:M3e,LINETYPE:I3e,ARROWTYPE:O3e,PLACEMENT:P3e,setTitle:B3e,setC4Type:h3e}});function sd(t,e){return t==null||e==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}var hA=N(()=>{"use strict";o(sd,"ascending")});function fA(t,e){return t==null||e==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}var WG=N(()=>{"use strict";o(fA,"descending")});function od(t){let e,r,n;t.length!==2?(e=sd,r=o((l,u)=>sd(t(l),u),"compare2"),n=o((l,u)=>t(l)-u,"delta")):(e=t===sd||t===fA?t:F3e,r=t,n=t);function i(l,u,h=0,f=l.length){if(h<f){if(e(u,u)!==0)return f;do{let d=h+f>>>1;r(l[d],u)<0?h=d+1:f=d}while(h<f)}return h}o(i,"left");function a(l,u,h=0,f=l.length){if(h<f){if(e(u,u)!==0)return f;do{let d=h+f>>>1;r(l[d],u)<=0?h=d+1:f=d}while(h<f)}return h}o(a,"right");function s(l,u,h=0,f=l.length){let d=i(l,u,h,f-1);return d>h&&n(l[d-1],u)>-n(l[d],u)?d-1:d}return o(s,"center"),{left:i,center:s,right:a}}function F3e(){return 0}var dA=N(()=>{"use strict";hA();WG();o(od,"bisector");o(F3e,"zero")});function pA(t){return t===null?NaN:+t}var qG=N(()=>{"use strict";o(pA,"number")});var YG,XG,$3e,z3e,mA,jG=N(()=>{"use strict";hA();dA();qG();YG=od(sd),XG=YG.right,$3e=YG.left,z3e=od(pA).center,mA=XG});function KG({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function G3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function V3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function U3e(t){return t!==null&&typeof t=="object"?t.valueOf():t}var g0,QG=N(()=>{"use strict";g0=class extends Map{static{o(this,"InternMap")}constructor(e,r=U3e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[n,i]of e)this.set(n,i)}get(e){return super.get(KG(this,e))}has(e){return super.has(KG(this,e))}set(e,r){return super.set(G3e(this,e),r)}delete(e){return super.delete(V3e(this,e))}};o(KG,"intern_get");o(G3e,"intern_set");o(V3e,"intern_delete");o(U3e,"keyof")});function L3(t,e,r){let n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=H3e?10:a>=W3e?5:a>=q3e?2:1,l,u,h;return i<0?(h=Math.pow(10,-i)/s,l=Math.round(t*h),u=Math.round(e*h),l/h<t&&++l,u/h>e&&--u,h=-h):(h=Math.pow(10,i)*s,l=Math.round(t/h),u=Math.round(e/h),l*h<t&&++l,u*h>e&&--u),u<l&&.5<=r&&r<2?L3(t,e,r*2):[l,u,h]}function R3(t,e,r){if(e=+e,t=+t,r=+r,!(r>0))return[];if(t===e)return[t];let n=e<t,[i,a,s]=n?L3(e,t,r):L3(t,e,r);if(!(a>=i))return[];let l=a-i+1,u=new Array(l);if(n)if(s<0)for(let h=0;h<l;++h)u[h]=(a-h)/-s;else for(let h=0;h<l;++h)u[h]=(a-h)*s;else if(s<0)for(let h=0;h<l;++h)u[h]=(i+h)/-s;else for(let h=0;h<l;++h)u[h]=(i+h)*s;return u}function Zy(t,e,r){return e=+e,t=+t,r=+r,L3(t,e,r)[2]}function y0(t,e,r){e=+e,t=+t,r=+r;let n=e<t,i=n?Zy(e,t,r):Zy(t,e,r);return(n?-1:1)*(i<0?1/-i:i)}var H3e,W3e,q3e,ZG=N(()=>{"use strict";H3e=Math.sqrt(50),W3e=Math.sqrt(10),q3e=Math.sqrt(2);o(L3,"tickSpec");o(R3,"ticks");o(Zy,"tickIncrement");o(y0,"tickStep")});function N3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r<n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r<i||r===void 0&&i>=i)&&(r=i)}return r}var JG=N(()=>{"use strict";o(N3,"max")});function M3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var eV=N(()=>{"use strict";o(M3,"min")});function I3(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n<i;)a[n]=t+n*r;return a}var tV=N(()=>{"use strict";o(I3,"range")});var vh=N(()=>{"use strict";jG();dA();JG();eV();tV();ZG();QG()});function gA(t){return t}var rV=N(()=>{"use strict";o(gA,"default")});function Y3e(t){return"translate("+t+",0)"}function X3e(t){return"translate(0,"+t+")"}function j3e(t){return e=>+t(e)}function K3e(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function Q3e(){return!this.__axis}function iV(t,e){var r=[],n=null,i=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===P3||t===O3?-1:1,f=t===O3||t===yA?"x":"y",d=t===P3||t===vA?Y3e:X3e;function p(m){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),y=i??(e.tickFormat?e.tickFormat.apply(e,r):gA),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,w=+x[x.length-1]+u,C=(e.bandwidth?K3e:j3e)(e.copy(),u),T=m.selection?m.selection():m,E=T.selectAll(".domain").data([null]),A=T.selectAll(".tick").data(g,e).order(),S=A.exit(),_=A.enter().append("g").attr("class","tick"),I=A.select("line"),D=A.select("text");E=E.merge(E.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),A=A.merge(_),I=I.merge(_.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),D=D.merge(_.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===P3?"0em":t===vA?"0.71em":"0.32em")),m!==T&&(E=E.transition(m),A=A.transition(m),I=I.transition(m),D=D.transition(m),S=S.transition(m).attr("opacity",nV).attr("transform",function(k){return isFinite(k=C(k))?d(k+u):this.getAttribute("transform")}),_.attr("opacity",nV).attr("transform",function(k){var L=this.parentNode.__axis;return d((L&&isFinite(L=L(k))?L:C(k))+u)})),S.remove(),E.attr("d",t===O3||t===yA?s?"M"+h*s+","+b+"H"+u+"V"+w+"H"+h*s:"M"+u+","+b+"V"+w:s?"M"+b+","+h*s+"V"+u+"H"+w+"V"+h*s:"M"+b+","+u+"H"+w),A.attr("opacity",1).attr("transform",function(k){return d(C(k)+u)}),I.attr(f+"2",h*a),D.attr(f,h*v).text(y),T.filter(Q3e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===yA?"start":t===O3?"end":"middle"),T.each(function(){this.__axis=C})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(n=m==null?null:Array.from(m),p):n&&n.slice()},p.tickFormat=function(m){return arguments.length?(i=m,p):i},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function xA(t){return iV(P3,t)}function bA(t){return iV(vA,t)}var P3,yA,vA,O3,nV,aV=N(()=>{"use strict";rV();P3=1,yA=2,vA=3,O3=4,nV=1e-6;o(Y3e,"translateX");o(X3e,"translateY");o(j3e,"number");o(K3e,"center");o(Q3e,"entering");o(iV,"axis");o(xA,"axisTop");o(bA,"axisBottom")});var sV=N(()=>{"use strict";aV()});function lV(){for(var t=0,e=arguments.length,r={},n;t<e;++t){if(!(n=arguments[t]+"")||n in r||/[\s.]/.test(n))throw new Error("illegal type: "+n);r[n]=[]}return new B3(r)}function B3(t){this._=t}function J3e(t,e){return t.trim().split(/^|\s+/).map(function(r){var n="",i=r.indexOf(".");if(i>=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}function e5e(t,e){for(var r=0,n=t.length,i;r<n;++r)if((i=t[r]).name===e)return i.value}function oV(t,e,r){for(var n=0,i=t.length;n<i;++n)if(t[n].name===e){t[n]=Z3e,t=t.slice(0,n).concat(t.slice(n+1));break}return r!=null&&t.push({name:e,value:r}),t}var Z3e,wA,cV=N(()=>{"use strict";Z3e={value:o(()=>{},"value")};o(lV,"dispatch");o(B3,"Dispatch");o(J3e,"parseTypenames");B3.prototype=lV.prototype={constructor:B3,on:o(function(t,e){var r=this._,n=J3e(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a<s;)if((i=(t=n[a]).type)&&(i=e5e(r[i],t.name)))return i;return}if(e!=null&&typeof e!="function")throw new Error("invalid callback: "+e);for(;++a<s;)if(i=(t=n[a]).type)r[i]=oV(r[i],t.name,e);else if(e==null)for(i in r)r[i]=oV(r[i],t.name,null);return this},"on"),copy:o(function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new B3(t)},"copy"),call:o(function(t,e){if((i=arguments.length-2)>0)for(var r=new Array(i),n=0,i,a;n<i;++n)r[n]=arguments[n+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=this._[t],n=0,i=a.length;n<i;++n)a[n].value.apply(e,r)},"call"),apply:o(function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var n=this._[t],i=0,a=n.length;i<a;++i)n[i].value.apply(e,r)},"apply")};o(e5e,"get");o(oV,"set");wA=lV});var TA=N(()=>{"use strict";cV()});var F3,kA,EA=N(()=>{"use strict";F3="http://www.w3.org/1999/xhtml",kA={svg:"http://www.w3.org/2000/svg",xhtml:F3,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function rc(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),kA.hasOwnProperty(e)?{space:kA[e],local:t}:t}var $3=N(()=>{"use strict";EA();o(rc,"default")});function t5e(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===F3&&e.documentElement.namespaceURI===F3?e.createElement(t):e.createElementNS(r,t)}}function r5e(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Jy(t){var e=rc(t);return(e.local?r5e:t5e)(e)}var SA=N(()=>{"use strict";$3();EA();o(t5e,"creatorInherit");o(r5e,"creatorFixed");o(Jy,"default")});function n5e(){}function xh(t){return t==null?n5e:function(){return this.querySelector(t)}}var z3=N(()=>{"use strict";o(n5e,"none");o(xh,"default")});function CA(t){typeof t!="function"&&(t=xh(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=new Array(s),u,h,f=0;f<s;++f)(u=a[f])&&(h=t.call(u,u.__data__,f,a))&&("__data__"in u&&(h.__data__=u.__data__),l[f]=h);return new oi(n,this._parents)}var uV=N(()=>{"use strict";hl();z3();o(CA,"default")});function AA(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var hV=N(()=>{"use strict";o(AA,"array")});function i5e(){return[]}function v0(t){return t==null?i5e:function(){return this.querySelectorAll(t)}}var _A=N(()=>{"use strict";o(i5e,"empty");o(v0,"default")});function a5e(t){return function(){return AA(t.apply(this,arguments))}}function DA(t){typeof t=="function"?t=a5e(t):t=v0(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a<r;++a)for(var s=e[a],l=s.length,u,h=0;h<l;++h)(u=s[h])&&(n.push(t.call(u,u.__data__,h,s)),i.push(u));return new oi(n,i)}var fV=N(()=>{"use strict";hl();hV();_A();o(a5e,"arrayAll");o(DA,"default")});function x0(t){return function(){return this.matches(t)}}function G3(t){return function(e){return e.matches(t)}}var ev=N(()=>{"use strict";o(x0,"default");o(G3,"childMatcher")});function o5e(t){return function(){return s5e.call(this.children,t)}}function l5e(){return this.firstElementChild}function LA(t){return this.select(t==null?l5e:o5e(typeof t=="function"?t:G3(t)))}var s5e,dV=N(()=>{"use strict";ev();s5e=Array.prototype.find;o(o5e,"childFind");o(l5e,"childFirst");o(LA,"default")});function u5e(){return Array.from(this.children)}function h5e(t){return function(){return c5e.call(this.children,t)}}function RA(t){return this.selectAll(t==null?u5e:h5e(typeof t=="function"?t:G3(t)))}var c5e,pV=N(()=>{"use strict";ev();c5e=Array.prototype.filter;o(u5e,"children");o(h5e,"childrenFilter");o(RA,"default")});function NA(t){typeof t!="function"&&(t=x0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=[],u,h=0;h<s;++h)(u=a[h])&&t.call(u,u.__data__,h,a)&&l.push(u);return new oi(n,this._parents)}var mV=N(()=>{"use strict";hl();ev();o(NA,"default")});function tv(t){return new Array(t.length)}var MA=N(()=>{"use strict";o(tv,"default")});function IA(){return new oi(this._enter||this._groups.map(tv),this._parents)}function rv(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var OA=N(()=>{"use strict";MA();hl();o(IA,"default");o(rv,"EnterNode");rv.prototype={constructor:rv,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function PA(t){return function(){return t}}var gV=N(()=>{"use strict";o(PA,"default")});function f5e(t,e,r,n,i,a){for(var s=0,l,u=e.length,h=a.length;s<h;++s)(l=e[s])?(l.__data__=a[s],n[s]=l):r[s]=new rv(t,a[s]);for(;s<u;++s)(l=e[s])&&(i[s]=l)}function d5e(t,e,r,n,i,a,s){var l,u,h=new Map,f=e.length,d=a.length,p=new Array(f),m;for(l=0;l<f;++l)(u=e[l])&&(p[l]=m=s.call(u,u.__data__,l,e)+"",h.has(m)?i[l]=u:h.set(m,u));for(l=0;l<d;++l)m=s.call(t,a[l],l,a)+"",(u=h.get(m))?(n[l]=u,u.__data__=a[l],h.delete(m)):r[l]=new rv(t,a[l]);for(l=0;l<f;++l)(u=e[l])&&h.get(p[l])===u&&(i[l]=u)}function p5e(t){return t.__data__}function BA(t,e){if(!arguments.length)return Array.from(this,p5e);var r=e?d5e:f5e,n=this._parents,i=this._groups;typeof t!="function"&&(t=PA(t));for(var a=i.length,s=new Array(a),l=new Array(a),u=new Array(a),h=0;h<a;++h){var f=n[h],d=i[h],p=d.length,m=m5e(t.call(f,f&&f.__data__,h,n)),g=m.length,y=l[h]=new Array(g),v=s[h]=new Array(g),x=u[h]=new Array(p);r(f,d,y,v,x,m,e);for(var b=0,w=0,C,T;b<g;++b)if(C=y[b]){for(b>=w&&(w=b+1);!(T=v[w])&&++w<g;);C._next=T||null}}return s=new oi(s,n),s._enter=l,s._exit=u,s}function m5e(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var yV=N(()=>{"use strict";hl();OA();gV();o(f5e,"bindIndex");o(d5e,"bindKey");o(p5e,"datum");o(BA,"default");o(m5e,"arraylike")});function FA(){return new oi(this._exit||this._groups.map(tv),this._parents)}var vV=N(()=>{"use strict";MA();hl();o(FA,"default")});function $A(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}var xV=N(()=>{"use strict";o($A,"default")});function zA(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),l=new Array(i),u=0;u<s;++u)for(var h=r[u],f=n[u],d=h.length,p=l[u]=new Array(d),m,g=0;g<d;++g)(m=h[g]||f[g])&&(p[g]=m);for(;u<i;++u)l[u]=r[u];return new oi(l,this._parents)}var bV=N(()=>{"use strict";hl();o(zA,"default")});function GA(){for(var t=this._groups,e=-1,r=t.length;++e<r;)for(var n=t[e],i=n.length-1,a=n[i],s;--i>=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var wV=N(()=>{"use strict";o(GA,"default")});function VA(t){t||(t=g5e);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,n=r.length,i=new Array(n),a=0;a<n;++a){for(var s=r[a],l=s.length,u=i[a]=new Array(l),h,f=0;f<l;++f)(h=s[f])&&(u[f]=h);u.sort(e)}return new oi(i,this._parents).order()}function g5e(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}var TV=N(()=>{"use strict";hl();o(VA,"default");o(g5e,"ascending")});function UA(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var kV=N(()=>{"use strict";o(UA,"default")});function HA(){return Array.from(this)}var EV=N(()=>{"use strict";o(HA,"default")});function WA(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],i=0,a=n.length;i<a;++i){var s=n[i];if(s)return s}return null}var SV=N(()=>{"use strict";o(WA,"default")});function qA(){let t=0;for(let e of this)++t;return t}var CV=N(()=>{"use strict";o(qA,"default")});function YA(){return!this.node()}var AV=N(()=>{"use strict";o(YA,"default")});function XA(t){for(var e=this._groups,r=0,n=e.length;r<n;++r)for(var i=e[r],a=0,s=i.length,l;a<s;++a)(l=i[a])&&t.call(l,l.__data__,a,i);return this}var _V=N(()=>{"use strict";o(XA,"default")});function y5e(t){return function(){this.removeAttribute(t)}}function v5e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function x5e(t,e){return function(){this.setAttribute(t,e)}}function b5e(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function w5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function T5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function jA(t,e){var r=rc(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?v5e:y5e:typeof e=="function"?r.local?T5e:w5e:r.local?b5e:x5e)(r,e))}var DV=N(()=>{"use strict";$3();o(y5e,"attrRemove");o(v5e,"attrRemoveNS");o(x5e,"attrConstant");o(b5e,"attrConstantNS");o(w5e,"attrFunction");o(T5e,"attrFunctionNS");o(jA,"default")});function nv(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var KA=N(()=>{"use strict";o(nv,"default")});function k5e(t){return function(){this.style.removeProperty(t)}}function E5e(t,e,r){return function(){this.style.setProperty(t,e,r)}}function S5e(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function QA(t,e,r){return arguments.length>1?this.each((e==null?k5e:typeof e=="function"?S5e:E5e)(t,e,r??"")):bh(this.node(),t)}function bh(t,e){return t.style.getPropertyValue(e)||nv(t).getComputedStyle(t,null).getPropertyValue(e)}var ZA=N(()=>{"use strict";KA();o(k5e,"styleRemove");o(E5e,"styleConstant");o(S5e,"styleFunction");o(QA,"default");o(bh,"styleValue")});function C5e(t){return function(){delete this[t]}}function A5e(t,e){return function(){this[t]=e}}function _5e(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function JA(t,e){return arguments.length>1?this.each((e==null?C5e:typeof e=="function"?_5e:A5e)(t,e)):this.node()[t]}var LV=N(()=>{"use strict";o(C5e,"propertyRemove");o(A5e,"propertyConstant");o(_5e,"propertyFunction");o(JA,"default")});function RV(t){return t.trim().split(/^|\s+/)}function e8(t){return t.classList||new NV(t)}function NV(t){this._node=t,this._names=RV(t.getAttribute("class")||"")}function MV(t,e){for(var r=e8(t),n=-1,i=e.length;++n<i;)r.add(e[n])}function IV(t,e){for(var r=e8(t),n=-1,i=e.length;++n<i;)r.remove(e[n])}function D5e(t){return function(){MV(this,t)}}function L5e(t){return function(){IV(this,t)}}function R5e(t,e){return function(){(e.apply(this,arguments)?MV:IV)(this,t)}}function t8(t,e){var r=RV(t+"");if(arguments.length<2){for(var n=e8(this.node()),i=-1,a=r.length;++i<a;)if(!n.contains(r[i]))return!1;return!0}return this.each((typeof e=="function"?R5e:e?D5e:L5e)(r,e))}var OV=N(()=>{"use strict";o(RV,"classArray");o(e8,"classList");o(NV,"ClassList");NV.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(MV,"classedAdd");o(IV,"classedRemove");o(D5e,"classedTrue");o(L5e,"classedFalse");o(R5e,"classedFunction");o(t8,"default")});function N5e(){this.textContent=""}function M5e(t){return function(){this.textContent=t}}function I5e(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function r8(t){return arguments.length?this.each(t==null?N5e:(typeof t=="function"?I5e:M5e)(t)):this.node().textContent}var PV=N(()=>{"use strict";o(N5e,"textRemove");o(M5e,"textConstant");o(I5e,"textFunction");o(r8,"default")});function O5e(){this.innerHTML=""}function P5e(t){return function(){this.innerHTML=t}}function B5e(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function n8(t){return arguments.length?this.each(t==null?O5e:(typeof t=="function"?B5e:P5e)(t)):this.node().innerHTML}var BV=N(()=>{"use strict";o(O5e,"htmlRemove");o(P5e,"htmlConstant");o(B5e,"htmlFunction");o(n8,"default")});function F5e(){this.nextSibling&&this.parentNode.appendChild(this)}function i8(){return this.each(F5e)}var FV=N(()=>{"use strict";o(F5e,"raise");o(i8,"default")});function $5e(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function a8(){return this.each($5e)}var $V=N(()=>{"use strict";o($5e,"lower");o(a8,"default")});function s8(t){var e=typeof t=="function"?t:Jy(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var zV=N(()=>{"use strict";SA();o(s8,"default")});function z5e(){return null}function o8(t,e){var r=typeof t=="function"?t:Jy(t),n=e==null?z5e:typeof e=="function"?e:xh(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}var GV=N(()=>{"use strict";SA();z3();o(z5e,"constantNull");o(o8,"default")});function G5e(){var t=this.parentNode;t&&t.removeChild(this)}function l8(){return this.each(G5e)}var VV=N(()=>{"use strict";o(G5e,"remove");o(l8,"default")});function V5e(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function U5e(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function c8(t){return this.select(t?U5e:V5e)}var UV=N(()=>{"use strict";o(V5e,"selection_cloneShallow");o(U5e,"selection_cloneDeep");o(c8,"default")});function u8(t){return arguments.length?this.property("__data__",t):this.node().__data__}var HV=N(()=>{"use strict";o(u8,"default")});function H5e(t){return function(e){t.call(this,e,this.__data__)}}function W5e(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function q5e(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,i=e.length,a;r<i;++r)a=e[r],(!t.type||a.type===t.type)&&a.name===t.name?this.removeEventListener(a.type,a.listener,a.options):e[++n]=a;++n?e.length=n:delete this.__on}}}function Y5e(t,e,r){return function(){var n=this.__on,i,a=H5e(e);if(n){for(var s=0,l=n.length;s<l;++s)if((i=n[s]).type===t.type&&i.name===t.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=r),i.value=e;return}}this.addEventListener(t.type,a,r),i={type:t.type,name:t.name,value:e,listener:a,options:r},n?n.push(i):this.__on=[i]}}function h8(t,e,r){var n=W5e(t+""),i,a=n.length,s;if(arguments.length<2){var l=this.node().__on;if(l){for(var u=0,h=l.length,f;u<h;++u)for(i=0,f=l[u];i<a;++i)if((s=n[i]).type===f.type&&s.name===f.name)return f.value}return}for(l=e?Y5e:q5e,i=0;i<a;++i)this.each(l(n[i],e,r));return this}var WV=N(()=>{"use strict";o(H5e,"contextListener");o(W5e,"parseTypenames");o(q5e,"onRemove");o(Y5e,"onAdd");o(h8,"default")});function qV(t,e,r){var n=nv(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function X5e(t,e){return function(){return qV(this,t,e)}}function j5e(t,e){return function(){return qV(this,t,e.apply(this,arguments))}}function f8(t,e){return this.each((typeof e=="function"?j5e:X5e)(t,e))}var YV=N(()=>{"use strict";KA();o(qV,"dispatchEvent");o(X5e,"dispatchConstant");o(j5e,"dispatchFunction");o(f8,"default")});function*d8(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],i=0,a=n.length,s;i<a;++i)(s=n[i])&&(yield s)}var XV=N(()=>{"use strict";o(d8,"default")});function oi(t,e){this._groups=t,this._parents=e}function jV(){return new oi([[document.documentElement]],p8)}function K5e(){return this}var p8,hu,hl=N(()=>{"use strict";uV();fV();dV();pV();mV();yV();OA();vV();xV();bV();wV();TV();kV();EV();SV();CV();AV();_V();DV();ZA();LV();OV();PV();BV();FV();$V();zV();GV();VV();UV();HV();WV();YV();XV();p8=[null];o(oi,"Selection");o(jV,"selection");o(K5e,"selection_selection");oi.prototype=jV.prototype={constructor:oi,select:CA,selectAll:DA,selectChild:LA,selectChildren:RA,filter:NA,data:BA,enter:IA,exit:FA,join:$A,merge:zA,selection:K5e,order:GA,sort:VA,call:UA,nodes:HA,node:WA,size:qA,empty:YA,each:XA,attr:jA,style:QA,property:JA,classed:t8,text:r8,html:n8,raise:i8,lower:a8,append:s8,insert:o8,remove:l8,clone:c8,datum:u8,on:h8,dispatch:f8,[Symbol.iterator]:d8};hu=jV});function Ge(t){return typeof t=="string"?new oi([[document.querySelector(t)]],[document.documentElement]):new oi([[t]],p8)}var KV=N(()=>{"use strict";hl();o(Ge,"default")});var fl=N(()=>{"use strict";ev();$3();KV();hl();z3();_A();ZA()});var QV=N(()=>{"use strict"});function wh(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function b0(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}var m8=N(()=>{"use strict";o(wh,"default");o(b0,"extend")});function Th(){}function JV(){return this.rgb().formatHex()}function iwe(){return this.rgb().formatHex8()}function awe(){return sU(this).formatHsl()}function eU(){return this.rgb().formatRgb()}function pl(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=Q5e.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?tU(e):r===3?new ua(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?V3(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?V3(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Z5e.exec(t))?new ua(e[1],e[2],e[3],1):(e=J5e.exec(t))?new ua(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=ewe.exec(t))?V3(e[1],e[2],e[3],e[4]):(e=twe.exec(t))?V3(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=rwe.exec(t))?iU(e[1],e[2]/100,e[3]/100,1):(e=nwe.exec(t))?iU(e[1],e[2]/100,e[3]/100,e[4]):ZV.hasOwnProperty(t)?tU(ZV[t]):t==="transparent"?new ua(NaN,NaN,NaN,0):null}function tU(t){return new ua(t>>16&255,t>>8&255,t&255,1)}function V3(t,e,r,n){return n<=0&&(t=e=r=NaN),new ua(t,e,r,n)}function y8(t){return t instanceof Th||(t=pl(t)),t?(t=t.rgb(),new ua(t.r,t.g,t.b,t.opacity)):new ua}function T0(t,e,r,n){return arguments.length===1?y8(t):new ua(t,e,r,n??1)}function ua(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function rU(){return`#${ld(this.r)}${ld(this.g)}${ld(this.b)}`}function swe(){return`#${ld(this.r)}${ld(this.g)}${ld(this.b)}${ld((isNaN(this.opacity)?1:this.opacity)*255)}`}function nU(){let t=W3(this.opacity);return`${t===1?"rgb(":"rgba("}${cd(this.r)}, ${cd(this.g)}, ${cd(this.b)}${t===1?")":`, ${t})`}`}function W3(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function cd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ld(t){return t=cd(t),(t<16?"0":"")+t.toString(16)}function iU(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new dl(t,e,r,n)}function sU(t){if(t instanceof dl)return new dl(t.h,t.s,t.l,t.opacity);if(t instanceof Th||(t=pl(t)),!t)return new dl;if(t instanceof dl)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,l=a-i,u=(a+i)/2;return l?(e===a?s=(r-n)/l+(r<n)*6:r===a?s=(n-e)/l+2:s=(e-r)/l+4,l/=u<.5?a+i:2-a-i,s*=60):l=u>0&&u<1?0:s,new dl(s,l,u,t.opacity)}function oU(t,e,r,n){return arguments.length===1?sU(t):new dl(t,e,r,n??1)}function dl(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function aU(t){return t=(t||0)%360,t<0?t+360:t}function U3(t){return Math.max(0,Math.min(1,t||0))}function g8(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var iv,H3,w0,av,nc,Q5e,Z5e,J5e,ewe,twe,rwe,nwe,ZV,v8=N(()=>{"use strict";m8();o(Th,"Color");iv=.7,H3=1/iv,w0="\\s*([+-]?\\d+)\\s*",av="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",nc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Q5e=/^#([0-9a-f]{3,8})$/,Z5e=new RegExp(`^rgb\\(${w0},${w0},${w0}\\)$`),J5e=new RegExp(`^rgb\\(${nc},${nc},${nc}\\)$`),ewe=new RegExp(`^rgba\\(${w0},${w0},${w0},${av}\\)$`),twe=new RegExp(`^rgba\\(${nc},${nc},${nc},${av}\\)$`),rwe=new RegExp(`^hsl\\(${av},${nc},${nc}\\)$`),nwe=new RegExp(`^hsla\\(${av},${nc},${nc},${av}\\)$`),ZV={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};wh(Th,pl,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:JV,formatHex:JV,formatHex8:iwe,formatHsl:awe,formatRgb:eU,toString:eU});o(JV,"color_formatHex");o(iwe,"color_formatHex8");o(awe,"color_formatHsl");o(eU,"color_formatRgb");o(pl,"color");o(tU,"rgbn");o(V3,"rgba");o(y8,"rgbConvert");o(T0,"rgb");o(ua,"Rgb");wh(ua,T0,b0(Th,{brighter(t){return t=t==null?H3:Math.pow(H3,t),new ua(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?iv:Math.pow(iv,t),new ua(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new ua(cd(this.r),cd(this.g),cd(this.b),W3(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:rU,formatHex:rU,formatHex8:swe,formatRgb:nU,toString:nU}));o(rU,"rgb_formatHex");o(swe,"rgb_formatHex8");o(nU,"rgb_formatRgb");o(W3,"clampa");o(cd,"clampi");o(ld,"hex");o(iU,"hsla");o(sU,"hslConvert");o(oU,"hsl");o(dl,"Hsl");wh(dl,oU,b0(Th,{brighter(t){return t=t==null?H3:Math.pow(H3,t),new dl(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?iv:Math.pow(iv,t),new dl(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new ua(g8(t>=240?t-240:t+120,i,n),g8(t,i,n),g8(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new dl(aU(this.h),U3(this.s),U3(this.l),W3(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(){let t=W3(this.opacity);return`${t===1?"hsl(":"hsla("}${aU(this.h)}, ${U3(this.s)*100}%, ${U3(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(aU,"clamph");o(U3,"clampt");o(g8,"hsl2rgb")});var lU,cU,uU=N(()=>{"use strict";lU=Math.PI/180,cU=180/Math.PI});function gU(t){if(t instanceof ic)return new ic(t.l,t.a,t.b,t.opacity);if(t instanceof fu)return yU(t);t instanceof ua||(t=y8(t));var e=T8(t.r),r=T8(t.g),n=T8(t.b),i=x8((.2225045*e+.7168786*r+.0606169*n)/fU),a,s;return e===r&&r===n?a=s=i:(a=x8((.4360747*e+.3850649*r+.1430804*n)/hU),s=x8((.0139322*e+.0971045*r+.7141733*n)/dU)),new ic(116*i-16,500*(a-i),200*(i-s),t.opacity)}function k8(t,e,r,n){return arguments.length===1?gU(t):new ic(t,e,r,n??1)}function ic(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function x8(t){return t>owe?Math.pow(t,1/3):t/mU+pU}function b8(t){return t>k0?t*t*t:mU*(t-pU)}function w8(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function T8(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function lwe(t){if(t instanceof fu)return new fu(t.h,t.c,t.l,t.opacity);if(t instanceof ic||(t=gU(t)),t.a===0&&t.b===0)return new fu(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*cU;return new fu(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function sv(t,e,r,n){return arguments.length===1?lwe(t):new fu(t,e,r,n??1)}function fu(t,e,r,n){this.h=+t,this.c=+e,this.l=+r,this.opacity=+n}function yU(t){if(isNaN(t.h))return new ic(t.l,0,0,t.opacity);var e=t.h*lU;return new ic(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}var q3,hU,fU,dU,pU,k0,mU,owe,vU=N(()=>{"use strict";m8();v8();uU();q3=18,hU=.96422,fU=1,dU=.82521,pU=4/29,k0=6/29,mU=3*k0*k0,owe=k0*k0*k0;o(gU,"labConvert");o(k8,"lab");o(ic,"Lab");wh(ic,k8,b0(Th,{brighter(t){return new ic(this.l+q3*(t??1),this.a,this.b,this.opacity)},darker(t){return new ic(this.l-q3*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=hU*b8(e),t=fU*b8(t),r=dU*b8(r),new ua(w8(3.1338561*e-1.6168667*t-.4906146*r),w8(-.9787684*e+1.9161415*t+.033454*r),w8(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(x8,"xyz2lab");o(b8,"lab2xyz");o(w8,"lrgb2rgb");o(T8,"rgb2lrgb");o(lwe,"hclConvert");o(sv,"hcl");o(fu,"Hcl");o(yU,"hcl2lab");wh(fu,sv,b0(Th,{brighter(t){return new fu(this.h,this.c,this.l+q3*(t??1),this.opacity)},darker(t){return new fu(this.h,this.c,this.l-q3*(t??1),this.opacity)},rgb(){return yU(this).rgb()}}))});var E0=N(()=>{"use strict";v8();vU()});function E8(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function S8(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,l=n<e-1?t[n+2]:2*a-i;return E8((r-n/e)*e,s,i,a,l)}}var C8=N(()=>{"use strict";o(E8,"basis");o(S8,"default")});function A8(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],l=t[(n+2)%e];return E8((r-n/e)*e,i,a,s,l)}}var xU=N(()=>{"use strict";C8();o(A8,"default")});var S0,_8=N(()=>{"use strict";S0=o(t=>()=>t,"default")});function bU(t,e){return function(r){return t+r*e}}function cwe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function wU(t,e){var r=e-t;return r?bU(t,r>180||r<-180?r-360*Math.round(r/360):r):S0(isNaN(t)?e:t)}function TU(t){return(t=+t)==1?du:function(e,r){return r-e?cwe(e,r,t):S0(isNaN(e)?r:e)}}function du(t,e){var r=e-t;return r?bU(t,r):S0(isNaN(t)?e:t)}var D8=N(()=>{"use strict";_8();o(bU,"linear");o(cwe,"exponential");o(wU,"hue");o(TU,"gamma");o(du,"nogamma")});function kU(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,l;for(s=0;s<r;++s)l=T0(e[s]),n[s]=l.r||0,i[s]=l.g||0,a[s]=l.b||0;return n=t(n),i=t(i),a=t(a),l.opacity=1,function(u){return l.r=n(u),l.g=i(u),l.b=a(u),l+""}}}var ud,uwe,hwe,L8=N(()=>{"use strict";E0();C8();xU();D8();ud=o(function t(e){var r=TU(e);function n(i,a){var s=r((i=T0(i)).r,(a=T0(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),h=du(i.opacity,a.opacity);return function(f){return i.r=s(f),i.g=l(f),i.b=u(f),i.opacity=h(f),i+""}}return o(n,"rgb"),n.gamma=t,n},"rgbGamma")(1);o(kU,"rgbSpline");uwe=kU(S8),hwe=kU(A8)});function R8(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i<r;++i)n[i]=t[i]*(1-a)+e[i]*a;return n}}function EU(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}var SU=N(()=>{"use strict";o(R8,"default");o(EU,"isNumberArray")});function CU(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s<n;++s)i[s]=kh(t[s],e[s]);for(;s<r;++s)a[s]=e[s];return function(l){for(s=0;s<n;++s)a[s]=i[s](l);return a}}var AU=N(()=>{"use strict";Y3();o(CU,"genericArray")});function N8(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}var _U=N(()=>{"use strict";o(N8,"default")});function Ki(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var ov=N(()=>{"use strict";o(Ki,"default")});function M8(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=kh(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var DU=N(()=>{"use strict";Y3();o(M8,"default")});function fwe(t){return function(){return t}}function dwe(t){return function(e){return t(e)+""}}function C0(t,e){var r=O8.lastIndex=I8.lastIndex=0,n,i,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(n=O8.exec(t))&&(i=I8.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(n=n[0])===(i=i[0])?l[s]?l[s]+=i:l[++s]=i:(l[++s]=null,u.push({i:s,x:Ki(n,i)})),r=I8.lastIndex;return r<e.length&&(a=e.slice(r),l[s]?l[s]+=a:l[++s]=a),l.length<2?u[0]?dwe(u[0].x):fwe(e):(e=u.length,function(h){for(var f=0,d;f<e;++f)l[(d=u[f]).i]=d.x(h);return l.join("")})}var O8,I8,P8=N(()=>{"use strict";ov();O8=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,I8=new RegExp(O8.source,"g");o(fwe,"zero");o(dwe,"one");o(C0,"default")});function kh(t,e){var r=typeof e,n;return e==null||r==="boolean"?S0(e):(r==="number"?Ki:r==="string"?(n=pl(e))?(e=n,ud):C0:e instanceof pl?ud:e instanceof Date?N8:EU(e)?R8:Array.isArray(e)?CU:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?M8:Ki)(t,e)}var Y3=N(()=>{"use strict";E0();L8();AU();_U();ov();DU();P8();_8();SU();o(kh,"default")});function X3(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var LU=N(()=>{"use strict";o(X3,"default")});function K3(t,e,r,n,i,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*n)&&(r-=t*u,n-=e*u),(l=Math.sqrt(r*r+n*n))&&(r/=l,n/=l,u/=l),t*n<e*r&&(t=-t,e=-e,u=-u,s=-s),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*RU,skewX:Math.atan(u)*RU,scaleX:s,scaleY:l}}var RU,j3,NU=N(()=>{"use strict";RU=180/Math.PI,j3={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(K3,"default")});function MU(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?j3:K3(e.a,e.b,e.c,e.d,e.e,e.f)}function IU(t){return t==null?j3:(Q3||(Q3=document.createElementNS("http://www.w3.org/2000/svg","g")),Q3.setAttribute("transform",t),(t=Q3.transform.baseVal.consolidate())?(t=t.matrix,K3(t.a,t.b,t.c,t.d,t.e,t.f)):j3)}var Q3,OU=N(()=>{"use strict";NU();o(MU,"parseCss");o(IU,"parseSvg")});function PU(t,e,r,n){function i(h){return h.length?h.pop()+" ":""}o(i,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(i(d)+"rotate(",null,n)-2,x:Ki(h,f)})):f&&d.push(i(d)+"rotate("+f+n)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(i(d)+"skewX(",null,n)-2,x:Ki(h,f)}):f&&d.push(i(d)+"skewX("+f+n)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(i(m)+"scale(",null,",",null,")");g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d!==1||p!==1)&&m.push(i(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g<y;)d[(v=p[g]).i]=v.x(m);return d.join("")}}}var B8,F8,BU=N(()=>{"use strict";ov();OU();o(PU,"interpolateTransform");B8=PU(MU,"px, ","px)","deg)"),F8=PU(IU,", ",")",")")});function FU(t){return function(e,r){var n=t((e=sv(e)).h,(r=sv(r)).h),i=du(e.c,r.c),a=du(e.l,r.l),s=du(e.opacity,r.opacity);return function(l){return e.h=n(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}var $8,pwe,$U=N(()=>{"use strict";E0();D8();o(FU,"hcl");$8=FU(wU),pwe=FU(du)});var A0=N(()=>{"use strict";Y3();ov();LU();P8();BU();L8();$U()});function dv(){return hd||(VU(mwe),hd=hv.now()+e5)}function mwe(){hd=0}function fv(){this._call=this._time=this._next=null}function t5(t,e,r){var n=new fv;return n.restart(t,e,r),n}function UU(){dv(),++_0;for(var t=Z3,e;t;)(e=hd-t._time)>=0&&t._call.call(void 0,e),t=t._next;--_0}function zU(){hd=(J3=hv.now())+e5,_0=cv=0;try{UU()}finally{_0=0,ywe(),hd=0}}function gwe(){var t=hv.now(),e=t-J3;e>GU&&(e5-=e,J3=t)}function ywe(){for(var t,e=Z3,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:Z3=r);uv=t,z8(n)}function z8(t){if(!_0){cv&&(cv=clearTimeout(cv));var e=t-hd;e>24?(t<1/0&&(cv=setTimeout(zU,t-hv.now()-e5)),lv&&(lv=clearInterval(lv))):(lv||(J3=hv.now(),lv=setInterval(gwe,GU)),_0=1,VU(zU))}}var _0,cv,lv,GU,Z3,uv,J3,hd,e5,hv,VU,G8=N(()=>{"use strict";_0=0,cv=0,lv=0,GU=1e3,J3=0,hd=0,e5=0,hv=typeof performance=="object"&&performance.now?performance:Date,VU=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(dv,"now");o(mwe,"clearNow");o(fv,"Timer");fv.prototype=t5.prototype={constructor:fv,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?dv():+r)+(e==null?0:+e),!this._next&&uv!==this&&(uv?uv._next=this:Z3=this,uv=this),this._call=t,this._time=r,z8()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,z8())},"stop")};o(t5,"timer");o(UU,"timerFlush");o(zU,"wake");o(gwe,"poke");o(ywe,"nap");o(z8,"sleep")});function pv(t,e,r){var n=new fv;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var HU=N(()=>{"use strict";G8();o(pv,"default")});var r5=N(()=>{"use strict";G8();HU()});function pu(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;bwe(t,r,{name:e,index:n,group:i,on:vwe,tween:xwe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:YU})}function gv(t,e){var r=Bi(t,e);if(r.state>YU)throw new Error("too late; already scheduled");return r}function ha(t,e){var r=Bi(t,e);if(r.state>n5)throw new Error("too late; already running");return r}function Bi(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function bwe(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=t5(a,0,r.time);function a(h){r.state=WU,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==WU)return u();for(f in n)if(m=n[f],m.name===r.name){if(m.state===n5)return pv(s);m.state===qU?(m.state=mv,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete n[f]):+f<e&&(m.state=mv,m.timer.stop(),m.on.call("cancel",t,t.__data__,m.index,m.group),delete n[f])}if(pv(function(){r.state===n5&&(r.state=qU,r.timer.restart(l,r.delay,r.time),l(h))}),r.state=i5,r.on.call("start",t,t.__data__,r.index,r.group),r.state===i5){for(r.state=n5,i=new Array(p=r.tween.length),f=0,d=-1;f<p;++f)(m=r.tween[f].value.call(t,t.__data__,r.index,r.group))&&(i[++d]=m);i.length=d+1}}o(s,"start");function l(h){for(var f=h<r.duration?r.ease.call(null,h/r.duration):(r.timer.restart(u),r.state=a5,1),d=-1,p=i.length;++d<p;)i[d].call(t,f);r.state===a5&&(r.on.call("end",t,t.__data__,r.index,r.group),u())}o(l,"tick");function u(){r.state=mv,r.timer.stop(),delete n[e];for(var h in n)return;delete t.__transition}o(u,"stop")}var vwe,xwe,YU,WU,i5,n5,qU,a5,mv,Es=N(()=>{"use strict";TA();r5();vwe=wA("start","end","cancel","interrupt"),xwe=[],YU=0,WU=1,i5=2,n5=3,qU=4,a5=5,mv=6;o(pu,"default");o(gv,"init");o(ha,"set");o(Bi,"get");o(bwe,"create")});function yv(t,e){var r=t.__transition,n,i,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>i5&&n.state<a5,n.state=mv,n.timer.stop(),n.on.call(i?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete r[s]}a&&delete t.__transition}}var XU=N(()=>{"use strict";Es();o(yv,"default")});function V8(t){return this.each(function(){yv(this,t)})}var jU=N(()=>{"use strict";XU();o(V8,"default")});function wwe(t,e){var r,n;return function(){var i=ha(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,l=n.length;s<l;++s)if(n[s].name===e){n=n.slice(),n.splice(s,1);break}}i.tween=n}}function Twe(t,e,r){var n,i;if(typeof r!="function")throw new Error;return function(){var a=ha(this,t),s=a.tween;if(s!==n){i=(n=s).slice();for(var l={name:e,value:r},u=0,h=i.length;u<h;++u)if(i[u].name===e){i[u]=l;break}u===h&&i.push(l)}a.tween=i}}function U8(t,e){var r=this._id;if(t+="",arguments.length<2){for(var n=Bi(this.node(),r).tween,i=0,a=n.length,s;i<a;++i)if((s=n[i]).name===t)return s.value;return null}return this.each((e==null?wwe:Twe)(r,t,e))}function D0(t,e,r){var n=t._id;return t.each(function(){var i=ha(this,n);(i.value||(i.value={}))[e]=r.apply(this,arguments)}),function(i){return Bi(i,n).value[e]}}var vv=N(()=>{"use strict";Es();o(wwe,"tweenRemove");o(Twe,"tweenFunction");o(U8,"default");o(D0,"tweenValue")});function xv(t,e){var r;return(typeof e=="number"?Ki:e instanceof pl?ud:(r=pl(e))?(e=r,ud):C0)(t,e)}var H8=N(()=>{"use strict";E0();A0();o(xv,"default")});function kwe(t){return function(){this.removeAttribute(t)}}function Ewe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Swe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function Cwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function Awe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function _we(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function W8(t,e){var r=rc(t),n=r==="transform"?F8:xv;return this.attrTween(t,typeof e=="function"?(r.local?_we:Awe)(r,n,D0(this,"attr."+t,e)):e==null?(r.local?Ewe:kwe)(r):(r.local?Cwe:Swe)(r,n,e))}var KU=N(()=>{"use strict";A0();fl();vv();H8();o(kwe,"attrRemove");o(Ewe,"attrRemoveNS");o(Swe,"attrConstant");o(Cwe,"attrConstantNS");o(Awe,"attrFunction");o(_we,"attrFunctionNS");o(W8,"default")});function Dwe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function Lwe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function Rwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Lwe(t,a)),r}return o(i,"tween"),i._value=e,i}function Nwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Dwe(t,a)),r}return o(i,"tween"),i._value=e,i}function q8(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=rc(t);return this.tween(r,(n.local?Rwe:Nwe)(n,e))}var QU=N(()=>{"use strict";fl();o(Dwe,"attrInterpolate");o(Lwe,"attrInterpolateNS");o(Rwe,"attrTweenNS");o(Nwe,"attrTween");o(q8,"default")});function Mwe(t,e){return function(){gv(this,t).delay=+e.apply(this,arguments)}}function Iwe(t,e){return e=+e,function(){gv(this,t).delay=e}}function Y8(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Mwe:Iwe)(e,t)):Bi(this.node(),e).delay}var ZU=N(()=>{"use strict";Es();o(Mwe,"delayFunction");o(Iwe,"delayConstant");o(Y8,"default")});function Owe(t,e){return function(){ha(this,t).duration=+e.apply(this,arguments)}}function Pwe(t,e){return e=+e,function(){ha(this,t).duration=e}}function X8(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Owe:Pwe)(e,t)):Bi(this.node(),e).duration}var JU=N(()=>{"use strict";Es();o(Owe,"durationFunction");o(Pwe,"durationConstant");o(X8,"default")});function Bwe(t,e){if(typeof e!="function")throw new Error;return function(){ha(this,t).ease=e}}function j8(t){var e=this._id;return arguments.length?this.each(Bwe(e,t)):Bi(this.node(),e).ease}var eH=N(()=>{"use strict";Es();o(Bwe,"easeConstant");o(j8,"default")});function Fwe(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;ha(this,t).ease=r}}function K8(t){if(typeof t!="function")throw new Error;return this.each(Fwe(this._id,t))}var tH=N(()=>{"use strict";Es();o(Fwe,"easeVarying");o(K8,"default")});function Q8(t){typeof t!="function"&&(t=x0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=[],u,h=0;h<s;++h)(u=a[h])&&t.call(u,u.__data__,h,a)&&l.push(u);return new es(n,this._parents,this._name,this._id)}var rH=N(()=>{"use strict";fl();fd();o(Q8,"default")});function Z8(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),l=0;l<a;++l)for(var u=e[l],h=r[l],f=u.length,d=s[l]=new Array(f),p,m=0;m<f;++m)(p=u[m]||h[m])&&(d[m]=p);for(;l<n;++l)s[l]=e[l];return new es(s,this._parents,this._name,this._id)}var nH=N(()=>{"use strict";fd();o(Z8,"default")});function $we(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function zwe(t,e,r){var n,i,a=$we(e)?gv:ha;return function(){var s=a(this,t),l=s.on;l!==n&&(i=(n=l).copy()).on(e,r),s.on=i}}function J8(t,e){var r=this._id;return arguments.length<2?Bi(this.node(),r).on.on(t):this.each(zwe(r,t,e))}var iH=N(()=>{"use strict";Es();o($we,"start");o(zwe,"onFunction");o(J8,"default")});function Gwe(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function e_(){return this.on("end.remove",Gwe(this._id))}var aH=N(()=>{"use strict";o(Gwe,"removeFunction");o(e_,"default")});function t_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=xh(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s<i;++s)for(var l=n[s],u=l.length,h=a[s]=new Array(u),f,d,p=0;p<u;++p)(f=l[p])&&(d=t.call(f,f.__data__,p,l))&&("__data__"in f&&(d.__data__=f.__data__),h[p]=d,pu(h[p],e,r,p,h,Bi(f,r)));return new es(a,this._parents,e,r)}var sH=N(()=>{"use strict";fl();fd();Es();o(t_,"default")});function r_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=v0(t));for(var n=this._groups,i=n.length,a=[],s=[],l=0;l<i;++l)for(var u=n[l],h=u.length,f,d=0;d<h;++d)if(f=u[d]){for(var p=t.call(f,f.__data__,d,u),m,g=Bi(f,r),y=0,v=p.length;y<v;++y)(m=p[y])&&pu(m,e,r,y,p,g);a.push(p),s.push(f)}return new es(a,s,e,r)}var oH=N(()=>{"use strict";fl();fd();Es();o(r_,"default")});function n_(){return new Vwe(this._groups,this._parents)}var Vwe,lH=N(()=>{"use strict";fl();Vwe=hu.prototype.constructor;o(n_,"default")});function Uwe(t,e){var r,n,i;return function(){var a=bh(this,t),s=(this.style.removeProperty(t),bh(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function cH(t){return function(){this.style.removeProperty(t)}}function Hwe(t,e,r){var n,i=r+"",a;return function(){var s=bh(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function Wwe(t,e,r){var n,i,a;return function(){var s=bh(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),bh(this,t))),s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l))}}function qwe(t,e){var r,n,i,a="style."+e,s="end."+a,l;return function(){var u=ha(this,t),h=u.on,f=u.value[a]==null?l||(l=cH(e)):void 0;(h!==r||i!==f)&&(n=(r=h).copy()).on(s,i=f),u.on=n}}function i_(t,e,r){var n=(t+="")=="transform"?B8:xv;return e==null?this.styleTween(t,Uwe(t,n)).on("end.style."+t,cH(t)):typeof e=="function"?this.styleTween(t,Wwe(t,n,D0(this,"style."+t,e))).each(qwe(this._id,t)):this.styleTween(t,Hwe(t,n,e),r).on("end.style."+t,null)}var uH=N(()=>{"use strict";A0();fl();Es();vv();H8();o(Uwe,"styleNull");o(cH,"styleRemove");o(Hwe,"styleConstant");o(Wwe,"styleFunction");o(qwe,"styleMaybeRemove");o(i_,"default")});function Ywe(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function Xwe(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&Ywe(t,s,r)),n}return o(a,"tween"),a._value=e,a}function a_(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,Xwe(t,e,r??""))}var hH=N(()=>{"use strict";o(Ywe,"styleInterpolate");o(Xwe,"styleTween");o(a_,"default")});function jwe(t){return function(){this.textContent=t}}function Kwe(t){return function(){var e=t(this);this.textContent=e??""}}function s_(t){return this.tween("text",typeof t=="function"?Kwe(D0(this,"text",t)):jwe(t==null?"":t+""))}var fH=N(()=>{"use strict";vv();o(jwe,"textConstant");o(Kwe,"textFunction");o(s_,"default")});function Qwe(t){return function(e){this.textContent=t.call(this,e)}}function Zwe(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&Qwe(i)),e}return o(n,"tween"),n._value=t,n}function o_(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,Zwe(t))}var dH=N(()=>{"use strict";o(Qwe,"textInterpolate");o(Zwe,"textTween");o(o_,"default")});function l_(){for(var t=this._name,e=this._id,r=s5(),n=this._groups,i=n.length,a=0;a<i;++a)for(var s=n[a],l=s.length,u,h=0;h<l;++h)if(u=s[h]){var f=Bi(u,e);pu(u,t,r,h,s,{time:f.time+f.delay+f.duration,delay:0,duration:f.duration,ease:f.ease})}return new es(n,this._parents,t,r)}var pH=N(()=>{"use strict";fd();Es();o(l_,"default")});function c_(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--i===0&&a()},"value")};r.each(function(){var h=ha(this,n),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),i===0&&a()})}var mH=N(()=>{"use strict";Es();o(c_,"default")});function es(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function gH(t){return hu().transition(t)}function s5(){return++Jwe}var Jwe,mu,fd=N(()=>{"use strict";fl();KU();QU();ZU();JU();eH();tH();rH();nH();iH();aH();sH();oH();lH();uH();hH();fH();dH();pH();vv();mH();Jwe=0;o(es,"Transition");o(gH,"transition");o(s5,"newId");mu=hu.prototype;es.prototype=gH.prototype={constructor:es,select:t_,selectAll:r_,selectChild:mu.selectChild,selectChildren:mu.selectChildren,filter:Q8,merge:Z8,selection:n_,transition:l_,call:mu.call,nodes:mu.nodes,node:mu.node,size:mu.size,empty:mu.empty,each:mu.each,on:J8,attr:W8,attrTween:q8,style:i_,styleTween:a_,text:s_,textTween:o_,remove:e_,tween:U8,delay:Y8,duration:X8,ease:j8,easeVarying:K8,end:c_,[Symbol.iterator]:mu[Symbol.iterator]}});function o5(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var yH=N(()=>{"use strict";o(o5,"cubicInOut")});var u_=N(()=>{"use strict";yH()});function tTe(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function h_(t){var e,r;t instanceof es?(e=t._id,t=t._name):(e=s5(),(r=eTe).time=dv(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a<i;++a)for(var s=n[a],l=s.length,u,h=0;h<l;++h)(u=s[h])&&pu(u,t,e,h,s,r||tTe(u,e));return new es(n,this._parents,t,e)}var eTe,vH=N(()=>{"use strict";fd();Es();u_();r5();eTe={time:null,delay:0,duration:250,ease:o5};o(tTe,"inherit");o(h_,"default")});var xH=N(()=>{"use strict";fl();jU();vH();hu.prototype.interrupt=V8;hu.prototype.transition=h_});var l5=N(()=>{"use strict";xH()});var bH=N(()=>{"use strict"});var wH=N(()=>{"use strict"});var TH=N(()=>{"use strict"});function kH(t){return[+t[0],+t[1]]}function rTe(t){return[kH(t[0]),kH(t[1])]}function f_(t){return{type:t}}var Z0t,J0t,emt,tmt,rmt,nmt,EH=N(()=>{"use strict";l5();bH();wH();TH();({abs:Z0t,max:J0t,min:emt}=Math);o(kH,"number1");o(rTe,"number2");tmt={name:"x",handles:["w","e"].map(f_),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},rmt={name:"y",handles:["n","s"].map(f_),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},nmt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(f_),input:o(function(t){return t==null?null:rTe(t)},"input"),output:o(function(t){return t},"output")};o(f_,"type")});var SH=N(()=>{"use strict";EH()});function CH(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=arguments[e]+t[e]}function iTe(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return CH;let r=10**e;return function(n){this._+=n[0];for(let i=1,a=n.length;i<a;++i)this._+=Math.round(arguments[i]*r)/r+n[i]}}function AH(){return new pd}var d_,p_,dd,nTe,pd,_H=N(()=>{"use strict";d_=Math.PI,p_=2*d_,dd=1e-6,nTe=p_-dd;o(CH,"append");o(iTe,"appendRound");pd=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?CH:iTe(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,i){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(e,r,n,i,a,s){this._append`C${+e},${+r},${+n},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,n,i,a){if(e=+e,r=+r,n=+n,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=n-e,h=i-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>dd)if(!(Math.abs(d*u-h*f)>dd)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=n-s,g=i-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),w=a*Math.tan((d_-Math.acos((y+p-v)/(2*x*b)))/2),C=w/b,T=w/x;Math.abs(C-1)>dd&&this._append`L${e+C*f},${r+C*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+T*u},${this._y1=r+T*h}`}}arc(e,r,n,i,a,s){if(e=+e,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),h=e+l,f=r+u,d=1^s,p=s?i-a:a-i;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>dd||Math.abs(this._y1-f)>dd)&&this._append`L${h},${f}`,n&&(p<0&&(p=p%p_+p_),p>nTe?this._append`A${n},${n},0,1,${d},${e-l},${r-u}A${n},${n},0,1,${d},${this._x1=h},${this._y1=f}`:p>dd&&this._append`A${n},${n},0,${+(p>=d_)},${d},${this._x1=e+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(e,r,n,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}};o(AH,"path");AH.prototype=pd.prototype});var m_=N(()=>{"use strict";_H()});var DH=N(()=>{"use strict"});var LH=N(()=>{"use strict"});var RH=N(()=>{"use strict"});var NH=N(()=>{"use strict"});var MH=N(()=>{"use strict"});var IH=N(()=>{"use strict"});var OH=N(()=>{"use strict"});function g_(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function md(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}var bv=N(()=>{"use strict";o(g_,"default");o(md,"formatDecimalParts")});function ml(t){return t=md(Math.abs(t)),t?t[1]:NaN}var wv=N(()=>{"use strict";bv();o(ml,"default")});function y_(t,e){return function(r,n){for(var i=r.length,a=[],s=0,l=t[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var PH=N(()=>{"use strict";o(y_,"default")});function v_(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var BH=N(()=>{"use strict";o(v_,"default")});function Eh(t){if(!(e=aTe.exec(t)))throw new Error("invalid format: "+t);var e;return new c5({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 c5(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var aTe,x_=N(()=>{"use strict";aTe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Eh,"formatSpecifier");Eh.prototype=c5.prototype;o(c5,"FormatSpecifier");c5.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function b_(t){e:for(var e=t.length,r=1,n=-1,i;r<e;++r)switch(t[r]){case".":n=i=r;break;case"0":n===0&&(n=r),i=r;break;default:if(!+t[r])break e;n>0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var FH=N(()=>{"use strict";o(b_,"default")});function T_(t,e){var r=md(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(w_=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+md(t,Math.max(0,e+a-1))[0]}var w_,k_=N(()=>{"use strict";bv();o(T_,"default")});function u5(t,e){var r=md(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}var $H=N(()=>{"use strict";bv();o(u5,"default")});var E_,zH=N(()=>{"use strict";bv();k_();$H();E_={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:g_,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>u5(t*100,e),"p"),r:u5,s:T_,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function h5(t){return t}var GH=N(()=>{"use strict";o(h5,"default")});function S_(t){var e=t.grouping===void 0||t.thousands===void 0?h5:y_(VH.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?h5:v_(VH.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=Eh(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,w=d.precision,C=d.trim,T=d.type;T==="n"?(b=!0,T="g"):E_[T]||(w===void 0&&(w=12),C=!0,T="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var E=y==="$"?r:y==="#"&&/[boxX]/.test(T)?"0"+T.toLowerCase():"",A=y==="$"?n:/[%p]/.test(T)?s:"",S=E_[T],_=/[defgprs%]/.test(T);w=w===void 0?6:/[gprs]/.test(T)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function I(D){var k=E,L=A,R,O,M;if(T==="c")L=S(D)+L,D="";else{D=+D;var B=D<0||1/D<0;if(D=isNaN(D)?u:S(Math.abs(D),w),C&&(D=b_(D)),B&&+D==0&&g!=="+"&&(B=!1),k=(B?g==="("?g:l:g==="-"||g==="("?"":g)+k,L=(T==="s"?UH[8+w_/3]:"")+L+(B&&g==="("?")":""),_){for(R=-1,O=D.length;++R<O;)if(M=D.charCodeAt(R),48>M||M>57){L=(M===46?i+D.slice(R+1):D.slice(R))+L,D=D.slice(0,R);break}}}b&&!v&&(D=e(D,1/0));var F=k.length+D.length+L.length,P=F<x?new Array(x-F+1).join(p):"";switch(b&&v&&(D=e(P+D,P.length?x-L.length:1/0),P=""),m){case"<":D=k+D+L+P;break;case"=":D=k+P+D+L;break;case"^":D=P.slice(0,F=P.length>>1)+k+D+L+P.slice(F);break;default:D=P+k+D+L;break}return a(D)}return o(I,"format"),I.toString=function(){return d+""},I}o(h,"newFormat");function f(d,p){var m=h((d=Eh(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(ml(p)/3)))*3,y=Math.pow(10,-g),v=UH[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var VH,UH,HH=N(()=>{"use strict";wv();PH();BH();x_();FH();zH();k_();GH();VH=Array.prototype.map,UH=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(S_,"default")});function C_(t){return f5=S_(t),d5=f5.format,p5=f5.formatPrefix,f5}var f5,d5,p5,WH=N(()=>{"use strict";HH();C_({thousands:",",grouping:[3],currency:["$",""]});o(C_,"defaultLocale")});function m5(t){return Math.max(0,-ml(Math.abs(t)))}var qH=N(()=>{"use strict";wv();o(m5,"default")});function g5(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(ml(e)/3)))*3-ml(Math.abs(t)))}var YH=N(()=>{"use strict";wv();o(g5,"default")});function y5(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,ml(e)-ml(t))+1}var XH=N(()=>{"use strict";wv();o(y5,"default")});var A_=N(()=>{"use strict";WH();x_();qH();YH();XH()});var jH=N(()=>{"use strict"});var KH=N(()=>{"use strict"});var QH=N(()=>{"use strict"});var ZH=N(()=>{"use strict"});function Sh(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var Tv=N(()=>{"use strict";o(Sh,"initRange")});function gu(){var t=new g0,e=[],r=[],n=__;function i(a){let s=t.get(a);if(s===void 0){if(n!==__)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(i,"scale"),i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new g0;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return gu(e,r).unknown(n)},Sh.apply(i,arguments),i}var __,D_=N(()=>{"use strict";vh();Tv();__=Symbol("implicit");o(gu,"ordinal")});function L0(){var t=gu().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=i<n,g=m?i:n,y=m?n:i;a=(y-g)/Math.max(1,p-u+h*2),l&&(a=Math.floor(a)),g+=(y-g-a*(p-u))*f,s=a*(1-u),l&&(g=Math.round(g),s=Math.round(s));var v=I3(p).map(function(x){return g+a*x});return r(m?v.reverse():v)}return o(d,"rescale"),t.domain=function(p){return arguments.length?(e(p),d()):e()},t.range=function(p){return arguments.length?([n,i]=p,n=+n,i=+i,d()):[n,i]},t.rangeRound=function(p){return[n,i]=p,n=+n,i=+i,l=!0,d()},t.bandwidth=function(){return s},t.step=function(){return a},t.round=function(p){return arguments.length?(l=!!p,d()):l},t.padding=function(p){return arguments.length?(u=Math.min(1,h=+p),d()):u},t.paddingInner=function(p){return arguments.length?(u=Math.min(1,p),d()):u},t.paddingOuter=function(p){return arguments.length?(h=+p,d()):h},t.align=function(p){return arguments.length?(f=Math.max(0,Math.min(1,p)),d()):f},t.copy=function(){return L0(e(),[n,i]).round(l).paddingInner(u).paddingOuter(h).align(f)},Sh.apply(d(),arguments)}var JH=N(()=>{"use strict";vh();Tv();D_();o(L0,"band")});function L_(t){return function(){return t}}var eW=N(()=>{"use strict";o(L_,"constants")});function R_(t){return+t}var tW=N(()=>{"use strict";o(R_,"number")});function R0(t){return t}function N_(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:L_(isNaN(e)?NaN:.5)}function sTe(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function oTe(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i<n?(n=N_(i,n),a=r(s,a)):(n=N_(n,i),a=r(a,s)),function(l){return a(n(l))}}function lTe(t,e,r){var n=Math.min(t.length,e.length)-1,i=new Array(n),a=new Array(n),s=-1;for(t[n]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<n;)i[s]=N_(t[s],t[s+1]),a[s]=r(e[s],e[s+1]);return function(l){var u=mA(t,l,1,n)-1;return a[u](i[u](l))}}function v5(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function cTe(){var t=rW,e=rW,r=kh,n,i,a,s=R0,l,u,h;function f(){var p=Math.min(t.length,e.length);return s!==R0&&(s=sTe(t[0],t[p-1])),l=p>2?lTe:oTe,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(n),e,r)))(n(s(p)))}return o(d,"scale"),d.invert=function(p){return s(i((h||(h=l(e,t.map(n),Ki)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,R_),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=X3,f()},d.clamp=function(p){return arguments.length?(s=p?!0:R0,f()):s!==R0},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return n=p,i=m,f()}}function kv(){return cTe()(R0,R0)}var rW,M_=N(()=>{"use strict";vh();A0();eW();tW();rW=[0,1];o(R0,"identity");o(N_,"normalize");o(sTe,"clamper");o(oTe,"bimap");o(lTe,"polymap");o(v5,"copy");o(cTe,"transformer");o(kv,"continuous")});function I_(t,e,r,n){var i=y0(t,e,r),a;switch(n=Eh(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=g5(i,s))&&(n.precision=a),p5(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=y5(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=m5(i))&&(n.precision=a-(n.type==="%")*2);break}}return d5(n)}var nW=N(()=>{"use strict";vh();A_();o(I_,"tickFormat")});function uTe(t){var e=t.domain;return t.ticks=function(r){var n=e();return R3(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return I_(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],l=n[a],u,h,f=10;for(l<s&&(h=s,s=l,l=h,h=i,i=a,a=h);f-- >0;){if(h=Zy(s,l,r),h===u)return n[i]=s,n[a]=l,e(n);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function gl(){var t=kv();return t.copy=function(){return v5(t,gl())},Sh.apply(t,arguments),uTe(t)}var iW=N(()=>{"use strict";vh();M_();Tv();nW();o(uTe,"linearish");o(gl,"linear")});function O_(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a<i&&(s=r,r=n,n=s,s=i,i=a,a=s),t[r]=e.floor(i),t[n]=e.ceil(a),t}var aW=N(()=>{"use strict";o(O_,"nice")});function xn(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(i,"interval"),i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{let s=i(a),l=i.ceil(a);return a-s<l-a?s:l},i.offset=(a,s)=>(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{let u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a<s)||!(l>0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(h<a&&a<s);return u},i.filter=a=>xn(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(i.count=(a,s)=>(P_.setTime(+a),B_.setTime(+s),t(P_),t(B_),Math.floor(r(P_,B_))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}var P_,B_,yu=N(()=>{"use strict";P_=new Date,B_=new Date;o(xn,"timeInterval")});var ac,sW,F_=N(()=>{"use strict";yu();ac=xn(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);ac.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?xn(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):ac);sW=ac.range});var Ks,oW,$_=N(()=>{"use strict";yu();Ks=xn(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),oW=Ks.range});var vu,hTe,x5,fTe,z_=N(()=>{"use strict";yu();vu=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),hTe=vu.range,x5=xn(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),fTe=x5.range});var xu,dTe,b5,pTe,G_=N(()=>{"use strict";yu();xu=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),dTe=xu.range,b5=xn(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),pTe=b5.range});var _o,mTe,Sv,gTe,w5,yTe,V_=N(()=>{"use strict";yu();_o=xn(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),mTe=_o.range,Sv=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),gTe=Sv.range,w5=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),yTe=w5.range});function vd(t){return xn(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function xd(t){return xn(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var yl,Ch,T5,k5,oc,E5,S5,cW,vTe,xTe,bTe,wTe,TTe,kTe,bd,N0,uW,hW,Ah,fW,dW,pW,ETe,STe,CTe,ATe,_Te,DTe,U_=N(()=>{"use strict";yu();o(vd,"timeWeekday");yl=vd(0),Ch=vd(1),T5=vd(2),k5=vd(3),oc=vd(4),E5=vd(5),S5=vd(6),cW=yl.range,vTe=Ch.range,xTe=T5.range,bTe=k5.range,wTe=oc.range,TTe=E5.range,kTe=S5.range;o(xd,"utcWeekday");bd=xd(0),N0=xd(1),uW=xd(2),hW=xd(3),Ah=xd(4),fW=xd(5),dW=xd(6),pW=bd.range,ETe=N0.range,STe=uW.range,CTe=hW.range,ATe=Ah.range,_Te=fW.range,DTe=dW.range});var bu,LTe,C5,RTe,H_=N(()=>{"use strict";yu();bu=xn(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),LTe=bu.range,C5=xn(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),RTe=C5.range});var Qs,NTe,vl,MTe,W_=N(()=>{"use strict";yu();Qs=xn(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());Qs.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});NTe=Qs.range,vl=xn(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());vl.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});MTe=vl.range});function gW(t,e,r,n,i,a){let s=[[Ks,1,1e3],[Ks,5,5*1e3],[Ks,15,15*1e3],[Ks,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[i,1,36e5],[i,3,3*36e5],[i,6,6*36e5],[i,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=f<h;p&&([h,f]=[f,h]);let m=d&&typeof d.range=="function"?d:u(h,f,d),g=m?m.range(h,+f+1):[];return p?g.reverse():g}o(l,"ticks");function u(h,f,d){let p=Math.abs(f-h)/d,m=od(([,,v])=>v).right(s,p);if(m===s.length)return t.every(y0(h/31536e6,f/31536e6,d));if(m===0)return ac.every(Math.max(y0(h,f,d),1));let[g,y]=s[p/s[m-1][2]<s[m][2]/p?m-1:m];return g.every(y)}return o(u,"tickInterval"),[l,u]}var OTe,PTe,q_,Y_,yW=N(()=>{"use strict";vh();F_();$_();z_();G_();V_();U_();H_();W_();o(gW,"ticker");[OTe,PTe]=gW(vl,C5,bd,w5,b5,x5),[q_,Y_]=gW(Qs,bu,yl,_o,xu,vu)});var A5=N(()=>{"use strict";F_();$_();z_();G_();V_();U_();H_();W_();yW()});function X_(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 j_(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 Cv(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function K_(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=Av(i),f=_v(i),d=Av(a),p=_v(a),m=Av(s),g=_v(s),y=Av(l),v=_v(l),x=Av(u),b=_v(u),w={a:B,A:F,b:P,B:z,c:null,d:kW,e:kW,f:ake,g:mke,G:yke,H:rke,I:nke,j:ike,L:_W,m:ske,M:oke,p:$,q:H,Q:CW,s:AW,S:lke,u:cke,U:uke,V:hke,w:fke,W:dke,x:null,X:null,y:pke,Y:gke,Z:vke,"%":SW},C={a:Q,A:j,b:ie,B:ne,c:null,d:EW,e:EW,f:Tke,g:Nke,G:Ike,H:xke,I:bke,j:wke,L:LW,m:kke,M:Eke,p:le,q:he,Q:CW,s:AW,S:Ske,u:Cke,U:Ake,V:_ke,w:Dke,W:Lke,x:null,X:null,y:Rke,Y:Mke,Z:Oke,"%":SW},T={a:I,A:D,b:k,B:L,c:R,d:wW,e:wW,f:ZTe,g:bW,G:xW,H:TW,I:TW,j:XTe,L:QTe,m:YTe,M:jTe,p:_,q:qTe,Q:eke,s:tke,S:KTe,u:GTe,U:VTe,V:UTe,w:zTe,W:HTe,x:O,X:M,y:bW,Y:xW,Z:WTe,"%":JTe};w.x=E(r,w),w.X=E(n,w),w.c=E(e,w),C.x=E(r,C),C.X=E(n,C),C.c=E(e,C);function E(K,X){return function(te){var J=[],se=-1,ue=0,Z=K.length,Se,ce,ae;for(te instanceof Date||(te=new Date(+te));++se<Z;)K.charCodeAt(se)===37&&(J.push(K.slice(ue,se)),(ce=vW[Se=K.charAt(++se)])!=null?Se=K.charAt(++se):ce=Se==="e"?" ":"0",(ae=X[Se])&&(Se=ae(te,ce)),J.push(Se),ue=se+1);return J.push(K.slice(ue,se)),J.join("")}}o(E,"newFormat");function A(K,X){return function(te){var J=Cv(1900,void 0,1),se=S(J,K,te+="",0),ue,Z;if(se!=te.length)return null;if("Q"in J)return new Date(J.Q);if("s"in J)return new Date(J.s*1e3+("L"in J?J.L:0));if(X&&!("Z"in J)&&(J.Z=0),"p"in J&&(J.H=J.H%12+J.p*12),J.m===void 0&&(J.m="q"in J?J.q:0),"V"in J){if(J.V<1||J.V>53)return null;"w"in J||(J.w=1),"Z"in J?(ue=j_(Cv(J.y,0,1)),Z=ue.getUTCDay(),ue=Z>4||Z===0?N0.ceil(ue):N0(ue),ue=Sv.offset(ue,(J.V-1)*7),J.y=ue.getUTCFullYear(),J.m=ue.getUTCMonth(),J.d=ue.getUTCDate()+(J.w+6)%7):(ue=X_(Cv(J.y,0,1)),Z=ue.getDay(),ue=Z>4||Z===0?Ch.ceil(ue):Ch(ue),ue=_o.offset(ue,(J.V-1)*7),J.y=ue.getFullYear(),J.m=ue.getMonth(),J.d=ue.getDate()+(J.w+6)%7)}else("W"in J||"U"in J)&&("w"in J||(J.w="u"in J?J.u%7:"W"in J?1:0),Z="Z"in J?j_(Cv(J.y,0,1)).getUTCDay():X_(Cv(J.y,0,1)).getDay(),J.m=0,J.d="W"in J?(J.w+6)%7+J.W*7-(Z+5)%7:J.w+J.U*7-(Z+6)%7);return"Z"in J?(J.H+=J.Z/100|0,J.M+=J.Z%100,j_(J)):X_(J)}}o(A,"newParse");function S(K,X,te,J){for(var se=0,ue=X.length,Z=te.length,Se,ce;se<ue;){if(J>=Z)return-1;if(Se=X.charCodeAt(se++),Se===37){if(Se=X.charAt(se++),ce=T[Se in vW?X.charAt(se++):Se],!ce||(J=ce(K,te,J))<0)return-1}else if(Se!=te.charCodeAt(J++))return-1}return J}o(S,"parseSpecifier");function _(K,X,te){var J=h.exec(X.slice(te));return J?(K.p=f.get(J[0].toLowerCase()),te+J[0].length):-1}o(_,"parsePeriod");function I(K,X,te){var J=m.exec(X.slice(te));return J?(K.w=g.get(J[0].toLowerCase()),te+J[0].length):-1}o(I,"parseShortWeekday");function D(K,X,te){var J=d.exec(X.slice(te));return J?(K.w=p.get(J[0].toLowerCase()),te+J[0].length):-1}o(D,"parseWeekday");function k(K,X,te){var J=x.exec(X.slice(te));return J?(K.m=b.get(J[0].toLowerCase()),te+J[0].length):-1}o(k,"parseShortMonth");function L(K,X,te){var J=y.exec(X.slice(te));return J?(K.m=v.get(J[0].toLowerCase()),te+J[0].length):-1}o(L,"parseMonth");function R(K,X,te){return S(K,e,X,te)}o(R,"parseLocaleDateTime");function O(K,X,te){return S(K,r,X,te)}o(O,"parseLocaleDate");function M(K,X,te){return S(K,n,X,te)}o(M,"parseLocaleTime");function B(K){return s[K.getDay()]}o(B,"formatShortWeekday");function F(K){return a[K.getDay()]}o(F,"formatWeekday");function P(K){return u[K.getMonth()]}o(P,"formatShortMonth");function z(K){return l[K.getMonth()]}o(z,"formatMonth");function $(K){return i[+(K.getHours()>=12)]}o($,"formatPeriod");function H(K){return 1+~~(K.getMonth()/3)}o(H,"formatQuarter");function Q(K){return s[K.getUTCDay()]}o(Q,"formatUTCShortWeekday");function j(K){return a[K.getUTCDay()]}o(j,"formatUTCWeekday");function ie(K){return u[K.getUTCMonth()]}o(ie,"formatUTCShortMonth");function ne(K){return l[K.getUTCMonth()]}o(ne,"formatUTCMonth");function le(K){return i[+(K.getUTCHours()>=12)]}o(le,"formatUTCPeriod");function he(K){return 1+~~(K.getUTCMonth()/3)}return o(he,"formatUTCQuarter"),{format:o(function(K){var X=E(K+="",w);return X.toString=function(){return K},X},"format"),parse:o(function(K){var X=A(K+="",!1);return X.toString=function(){return K},X},"parse"),utcFormat:o(function(K){var X=E(K+="",C);return X.toString=function(){return K},X},"utcFormat"),utcParse:o(function(K){var X=A(K+="",!0);return X.toString=function(){return K},X},"utcParse")}}function Wr(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a<r?new Array(r-a+1).join(e)+i:i)}function $Te(t){return t.replace(FTe,"\\$&")}function Av(t){return new RegExp("^(?:"+t.map($Te).join("|")+")","i")}function _v(t){return new Map(t.map((e,r)=>[e.toLowerCase(),r]))}function zTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function GTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function VTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function UTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function HTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function xW(t,e,r){var n=Qi.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function bW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function WTe(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function qTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function YTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function wW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function XTe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function TW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function jTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function KTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function QTe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function ZTe(t,e,r){var n=Qi.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function JTe(t,e,r){var n=BTe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function eke(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function tke(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function kW(t,e){return Wr(t.getDate(),e,2)}function rke(t,e){return Wr(t.getHours(),e,2)}function nke(t,e){return Wr(t.getHours()%12||12,e,2)}function ike(t,e){return Wr(1+_o.count(Qs(t),t),e,3)}function _W(t,e){return Wr(t.getMilliseconds(),e,3)}function ake(t,e){return _W(t,e)+"000"}function ske(t,e){return Wr(t.getMonth()+1,e,2)}function oke(t,e){return Wr(t.getMinutes(),e,2)}function lke(t,e){return Wr(t.getSeconds(),e,2)}function cke(t){var e=t.getDay();return e===0?7:e}function uke(t,e){return Wr(yl.count(Qs(t)-1,t),e,2)}function DW(t){var e=t.getDay();return e>=4||e===0?oc(t):oc.ceil(t)}function hke(t,e){return t=DW(t),Wr(oc.count(Qs(t),t)+(Qs(t).getDay()===4),e,2)}function fke(t){return t.getDay()}function dke(t,e){return Wr(Ch.count(Qs(t)-1,t),e,2)}function pke(t,e){return Wr(t.getFullYear()%100,e,2)}function mke(t,e){return t=DW(t),Wr(t.getFullYear()%100,e,2)}function gke(t,e){return Wr(t.getFullYear()%1e4,e,4)}function yke(t,e){var r=t.getDay();return t=r>=4||r===0?oc(t):oc.ceil(t),Wr(t.getFullYear()%1e4,e,4)}function vke(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Wr(e/60|0,"0",2)+Wr(e%60,"0",2)}function EW(t,e){return Wr(t.getUTCDate(),e,2)}function xke(t,e){return Wr(t.getUTCHours(),e,2)}function bke(t,e){return Wr(t.getUTCHours()%12||12,e,2)}function wke(t,e){return Wr(1+Sv.count(vl(t),t),e,3)}function LW(t,e){return Wr(t.getUTCMilliseconds(),e,3)}function Tke(t,e){return LW(t,e)+"000"}function kke(t,e){return Wr(t.getUTCMonth()+1,e,2)}function Eke(t,e){return Wr(t.getUTCMinutes(),e,2)}function Ske(t,e){return Wr(t.getUTCSeconds(),e,2)}function Cke(t){var e=t.getUTCDay();return e===0?7:e}function Ake(t,e){return Wr(bd.count(vl(t)-1,t),e,2)}function RW(t){var e=t.getUTCDay();return e>=4||e===0?Ah(t):Ah.ceil(t)}function _ke(t,e){return t=RW(t),Wr(Ah.count(vl(t),t)+(vl(t).getUTCDay()===4),e,2)}function Dke(t){return t.getUTCDay()}function Lke(t,e){return Wr(N0.count(vl(t)-1,t),e,2)}function Rke(t,e){return Wr(t.getUTCFullYear()%100,e,2)}function Nke(t,e){return t=RW(t),Wr(t.getUTCFullYear()%100,e,2)}function Mke(t,e){return Wr(t.getUTCFullYear()%1e4,e,4)}function Ike(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Ah(t):Ah.ceil(t),Wr(t.getUTCFullYear()%1e4,e,4)}function Oke(){return"+0000"}function SW(){return"%"}function CW(t){return+t}function AW(t){return Math.floor(+t/1e3)}var vW,Qi,BTe,FTe,NW=N(()=>{"use strict";A5();o(X_,"localDate");o(j_,"utcDate");o(Cv,"newDate");o(K_,"formatLocale");vW={"-":"",_:" ",0:"0"},Qi=/^\s*\d+/,BTe=/^%/,FTe=/[\\^$*+?|[\]().{}]/g;o(Wr,"pad");o($Te,"requote");o(Av,"formatRe");o(_v,"formatLookup");o(zTe,"parseWeekdayNumberSunday");o(GTe,"parseWeekdayNumberMonday");o(VTe,"parseWeekNumberSunday");o(UTe,"parseWeekNumberISO");o(HTe,"parseWeekNumberMonday");o(xW,"parseFullYear");o(bW,"parseYear");o(WTe,"parseZone");o(qTe,"parseQuarter");o(YTe,"parseMonthNumber");o(wW,"parseDayOfMonth");o(XTe,"parseDayOfYear");o(TW,"parseHour24");o(jTe,"parseMinutes");o(KTe,"parseSeconds");o(QTe,"parseMilliseconds");o(ZTe,"parseMicroseconds");o(JTe,"parseLiteralPercent");o(eke,"parseUnixTimestamp");o(tke,"parseUnixTimestampSeconds");o(kW,"formatDayOfMonth");o(rke,"formatHour24");o(nke,"formatHour12");o(ike,"formatDayOfYear");o(_W,"formatMilliseconds");o(ake,"formatMicroseconds");o(ske,"formatMonthNumber");o(oke,"formatMinutes");o(lke,"formatSeconds");o(cke,"formatWeekdayNumberMonday");o(uke,"formatWeekNumberSunday");o(DW,"dISO");o(hke,"formatWeekNumberISO");o(fke,"formatWeekdayNumberSunday");o(dke,"formatWeekNumberMonday");o(pke,"formatYear");o(mke,"formatYearISO");o(gke,"formatFullYear");o(yke,"formatFullYearISO");o(vke,"formatZone");o(EW,"formatUTCDayOfMonth");o(xke,"formatUTCHour24");o(bke,"formatUTCHour12");o(wke,"formatUTCDayOfYear");o(LW,"formatUTCMilliseconds");o(Tke,"formatUTCMicroseconds");o(kke,"formatUTCMonthNumber");o(Eke,"formatUTCMinutes");o(Ske,"formatUTCSeconds");o(Cke,"formatUTCWeekdayNumberMonday");o(Ake,"formatUTCWeekNumberSunday");o(RW,"UTCdISO");o(_ke,"formatUTCWeekNumberISO");o(Dke,"formatUTCWeekdayNumberSunday");o(Lke,"formatUTCWeekNumberMonday");o(Rke,"formatUTCYear");o(Nke,"formatUTCYearISO");o(Mke,"formatUTCFullYear");o(Ike,"formatUTCFullYearISO");o(Oke,"formatUTCZone");o(SW,"formatLiteralPercent");o(CW,"formatUnixTimestamp");o(AW,"formatUnixTimestampSeconds")});function Q_(t){return M0=K_(t),wd=M0.format,MW=M0.parse,IW=M0.utcFormat,OW=M0.utcParse,M0}var M0,wd,MW,IW,OW,PW=N(()=>{"use strict";NW();Q_({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"]});o(Q_,"defaultLocale")});var Z_=N(()=>{"use strict";PW()});function Pke(t){return new Date(t)}function Bke(t){return t instanceof Date?+t:+new Date(+t)}function BW(t,e,r,n,i,a,s,l,u,h){var f=kv(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),w=h("%B"),C=h("%Y");function T(E){return(u(E)<E?m:l(E)<E?g:s(E)<E?y:a(E)<E?v:n(E)<E?i(E)<E?x:b:r(E)<E?w:C)(E)}return o(T,"tickFormat"),f.invert=function(E){return new Date(d(E))},f.domain=function(E){return arguments.length?p(Array.from(E,Bke)):p().map(Pke)},f.ticks=function(E){var A=p();return t(A[0],A[A.length-1],E??10)},f.tickFormat=function(E,A){return A==null?T:h(A)},f.nice=function(E){var A=p();return(!E||typeof E.range!="function")&&(E=e(A[0],A[A.length-1],E??10)),E?p(O_(A,E)):f},f.copy=function(){return v5(f,BW(t,e,r,n,i,a,s,l,u,h))},f}function _5(){return Sh.apply(BW(q_,Y_,Qs,bu,yl,_o,xu,vu,Ks,wd).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}var FW=N(()=>{"use strict";A5();Z_();M_();Tv();aW();o(Pke,"date");o(Bke,"number");o(BW,"calendar");o(_5,"time")});var $W=N(()=>{"use strict";JH();iW();D_();FW()});function J_(t){for(var e=t.length/6|0,r=new Array(e),n=0;n<e;)r[n]="#"+t.slice(n*6,++n*6);return r}var zW=N(()=>{"use strict";o(J_,"default")});var e9,GW=N(()=>{"use strict";zW();e9=J_("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var VW=N(()=>{"use strict";GW()});function Bn(t){return o(function(){return t},"constant")}var D5=N(()=>{"use strict";o(Bn,"default")});function HW(t){return t>1?0:t<-1?I0:Math.acos(t)}function r9(t){return t>=1?Dv:t<=-1?-Dv:Math.asin(t)}var t9,fa,_h,UW,L5,xl,Td,Zi,I0,Dv,O0,R5=N(()=>{"use strict";t9=Math.abs,fa=Math.atan2,_h=Math.cos,UW=Math.max,L5=Math.min,xl=Math.sin,Td=Math.sqrt,Zi=1e-12,I0=Math.PI,Dv=I0/2,O0=2*I0;o(HW,"acos");o(r9,"asin")});function N5(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new pd(e)}var n9=N(()=>{"use strict";m_();o(N5,"withPath")});function Fke(t){return t.innerRadius}function $ke(t){return t.outerRadius}function zke(t){return t.startAngle}function Gke(t){return t.endAngle}function Vke(t){return t&&t.padAngle}function Uke(t,e,r,n,i,a,s,l){var u=r-t,h=n-e,f=s-i,d=l-a,p=d*u-f*h;if(!(p*p<Zi))return p=(f*(e-a)-d*(t-i))/p,[t+p*u,e+p*h]}function M5(t,e,r,n,i,a,s){var l=t-r,u=e-n,h=(s?a:-a)/Td(l*l+u*u),f=h*u,d=-h*l,p=t+f,m=e+d,g=r+f,y=n+d,v=(p+g)/2,x=(m+y)/2,b=g-p,w=y-m,C=b*b+w*w,T=i-a,E=p*y-g*m,A=(w<0?-1:1)*Td(UW(0,T*T*C-E*E)),S=(E*w-b*A)/C,_=(-E*b-w*A)/C,I=(E*w+b*A)/C,D=(-E*b+w*A)/C,k=S-v,L=_-x,R=I-v,O=D-x;return k*k+L*L>R*R+O*O&&(S=I,_=D),{cx:S,cy:_,x01:-f,y01:-d,x11:S*(i/T-1),y11:_*(i/T-1)}}function bl(){var t=Fke,e=$ke,r=Bn(0),n=null,i=zke,a=Gke,s=Vke,l=null,u=N5(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=i.apply(this,arguments)-Dv,y=a.apply(this,arguments)-Dv,v=t9(y-g),x=y>g;if(l||(l=f=u()),m<p&&(d=m,m=p,p=d),!(m>Zi))l.moveTo(0,0);else if(v>O0-Zi)l.moveTo(m*_h(g),m*xl(g)),l.arc(0,0,m,g,y,!x),p>Zi&&(l.moveTo(p*_h(y),p*xl(y)),l.arc(0,0,p,y,g,x));else{var b=g,w=y,C=g,T=y,E=v,A=v,S=s.apply(this,arguments)/2,_=S>Zi&&(n?+n.apply(this,arguments):Td(p*p+m*m)),I=L5(t9(m-p)/2,+r.apply(this,arguments)),D=I,k=I,L,R;if(_>Zi){var O=r9(_/p*xl(S)),M=r9(_/m*xl(S));(E-=O*2)>Zi?(O*=x?1:-1,C+=O,T-=O):(E=0,C=T=(g+y)/2),(A-=M*2)>Zi?(M*=x?1:-1,b+=M,w-=M):(A=0,b=w=(g+y)/2)}var B=m*_h(b),F=m*xl(b),P=p*_h(T),z=p*xl(T);if(I>Zi){var $=m*_h(w),H=m*xl(w),Q=p*_h(C),j=p*xl(C),ie;if(v<I0)if(ie=Uke(B,F,Q,j,$,H,P,z)){var ne=B-ie[0],le=F-ie[1],he=$-ie[0],K=H-ie[1],X=1/xl(HW((ne*he+le*K)/(Td(ne*ne+le*le)*Td(he*he+K*K)))/2),te=Td(ie[0]*ie[0]+ie[1]*ie[1]);D=L5(I,(p-te)/(X-1)),k=L5(I,(m-te)/(X+1))}else D=k=0}A>Zi?k>Zi?(L=M5(Q,j,B,F,m,k,x),R=M5($,H,P,z,m,k,x),l.moveTo(L.cx+L.x01,L.cy+L.y01),k<I?l.arc(L.cx,L.cy,k,fa(L.y01,L.x01),fa(R.y01,R.x01),!x):(l.arc(L.cx,L.cy,k,fa(L.y01,L.x01),fa(L.y11,L.x11),!x),l.arc(0,0,m,fa(L.cy+L.y11,L.cx+L.x11),fa(R.cy+R.y11,R.cx+R.x11),!x),l.arc(R.cx,R.cy,k,fa(R.y11,R.x11),fa(R.y01,R.x01),!x))):(l.moveTo(B,F),l.arc(0,0,m,b,w,!x)):l.moveTo(B,F),!(p>Zi)||!(E>Zi)?l.lineTo(P,z):D>Zi?(L=M5(P,z,$,H,p,-D,x),R=M5(B,F,Q,j,p,-D,x),l.lineTo(L.cx+L.x01,L.cy+L.y01),D<I?l.arc(L.cx,L.cy,D,fa(L.y01,L.x01),fa(R.y01,R.x01),!x):(l.arc(L.cx,L.cy,D,fa(L.y01,L.x01),fa(L.y11,L.x11),!x),l.arc(0,0,p,fa(L.cy+L.y11,L.cx+L.x11),fa(R.cy+R.y11,R.cx+R.x11),x),l.arc(R.cx,R.cy,D,fa(R.y11,R.x11),fa(R.y01,R.x01),!x))):l.arc(0,0,p,T,C,x)}if(l.closePath(),f)return l=null,f+""||null}return o(h,"arc"),h.centroid=function(){var f=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,d=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-I0/2;return[_h(d)*f,xl(d)*f]},h.innerRadius=function(f){return arguments.length?(t=typeof f=="function"?f:Bn(+f),h):t},h.outerRadius=function(f){return arguments.length?(e=typeof f=="function"?f:Bn(+f),h):e},h.cornerRadius=function(f){return arguments.length?(r=typeof f=="function"?f:Bn(+f),h):r},h.padRadius=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:Bn(+f),h):n},h.startAngle=function(f){return arguments.length?(i=typeof f=="function"?f:Bn(+f),h):i},h.endAngle=function(f){return arguments.length?(a=typeof f=="function"?f:Bn(+f),h):a},h.padAngle=function(f){return arguments.length?(s=typeof f=="function"?f:Bn(+f),h):s},h.context=function(f){return arguments.length?(l=f??null,h):l},h}var WW=N(()=>{"use strict";D5();R5();n9();o(Fke,"arcInnerRadius");o($ke,"arcOuterRadius");o(zke,"arcStartAngle");o(Gke,"arcEndAngle");o(Vke,"arcPadAngle");o(Uke,"intersect");o(M5,"cornerTangents");o(bl,"default")});function Lv(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var Nyt,i9=N(()=>{"use strict";Nyt=Array.prototype.slice;o(Lv,"default")});function qW(t){this._context=t}function wu(t){return new qW(t)}var a9=N(()=>{"use strict";o(qW,"Linear");qW.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(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);break}},"point")};o(wu,"default")});function YW(t){return t[0]}function XW(t){return t[1]}var jW=N(()=>{"use strict";o(YW,"x");o(XW,"y")});function wl(t,e){var r=Bn(!0),n=null,i=wu,a=null,s=N5(l);t=typeof t=="function"?t:t===void 0?YW:Bn(t),e=typeof e=="function"?e:e===void 0?XW:Bn(e);function l(u){var h,f=(u=Lv(u)).length,d,p=!1,m;for(n==null&&(a=i(m=s())),h=0;h<=f;++h)!(h<f&&r(d=u[h],h,u))===p&&((p=!p)?a.lineStart():a.lineEnd()),p&&a.point(+t(d,h,u),+e(d,h,u));if(m)return a=null,m+""||null}return o(l,"line"),l.x=function(u){return arguments.length?(t=typeof u=="function"?u:Bn(+u),l):t},l.y=function(u){return arguments.length?(e=typeof u=="function"?u:Bn(+u),l):e},l.defined=function(u){return arguments.length?(r=typeof u=="function"?u:Bn(!!u),l):r},l.curve=function(u){return arguments.length?(i=u,n!=null&&(a=i(n)),l):i},l.context=function(u){return arguments.length?(u==null?n=a=null:a=i(n=u),l):n},l}var KW=N(()=>{"use strict";i9();D5();a9();n9();jW();o(wl,"default")});function s9(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}var QW=N(()=>{"use strict";o(s9,"default")});function o9(t){return t}var ZW=N(()=>{"use strict";o(o9,"default")});function I5(){var t=o9,e=s9,r=null,n=Bn(0),i=Bn(O0),a=Bn(0);function s(l){var u,h=(l=Lv(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+n.apply(this,arguments),v=Math.min(O0,Math.max(-O0,i.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),w=b*(v<0?-1:1),C;for(u=0;u<h;++u)(C=g[m[u]=u]=+t(l[u],u,l))>0&&(p+=C);for(e!=null?m.sort(function(T,E){return e(g[T],g[E])}):r!=null&&m.sort(function(T,E){return r(l[T],l[E])}),u=0,d=p?(v-h*w)/p:0;u<h;++u,y=x)f=m[u],C=g[f],x=y+(C>0?C*d:0)+w,g[f]={data:l[f],index:u,value:C,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:Bn(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(n=typeof l=="function"?l:Bn(+l),s):n},s.endAngle=function(l){return arguments.length?(i=typeof l=="function"?l:Bn(+l),s):i},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:Bn(+l),s):a},s}var JW=N(()=>{"use strict";i9();D5();QW();ZW();R5();o(I5,"default")});function Rv(t){return new O5(t,!0)}function Nv(t){return new O5(t,!1)}var O5,eq=N(()=>{"use strict";O5=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(Rv,"bumpX");o(Nv,"bumpY")});function Zs(){}var Mv=N(()=>{"use strict";o(Zs,"default")});function P0(t,e,r){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+r)/6)}function Iv(t){this._context=t}function Do(t){return new Iv(t)}var Ov=N(()=>{"use strict";o(P0,"point");o(Iv,"Basis");Iv.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:P0(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(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:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Do,"default")});function tq(t){this._context=t}function P5(t){return new tq(t)}var rq=N(()=>{"use strict";Mv();Ov();o(tq,"BasisClosed");tq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(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},"lineStart"),lineEnd:o(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);break}}},"lineEnd"),point:o(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:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(P5,"default")});function nq(t){this._context=t}function B5(t){return new nq(t)}var iq=N(()=>{"use strict";Ov();o(nq,"BasisOpen");nq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(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 r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(B5,"default")});function aq(t,e){this._basis=new Iv(t),this._beta=e}var l9,sq=N(()=>{"use strict";Ov();o(aq,"Bundle");aq.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+u*a),this._beta*e[l]+(1-this._beta)*(i+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};l9=o(function t(e){function r(n){return e===1?new Iv(n):new aq(n,e)}return o(r,"bundle"),r.beta=function(n){return t(+n)},r},"custom")(.85)});function B0(t,e,r){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-r),t._x2,t._y2)}function F5(t,e){this._context=t,this._k=(1-e)/6}var Pv,Bv=N(()=>{"use strict";o(B0,"point");o(F5,"Cardinal");F5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:B0(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(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:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};Pv=o(function t(e){function r(n){return new F5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function $5(t,e){this._context=t,this._k=(1-e)/6}var c9,u9=N(()=>{"use strict";Mv();Bv();o($5,"CardinalClosed");$5.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(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},"lineStart"),lineEnd:o(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);break}}},"lineEnd"),point:o(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:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};c9=o(function t(e){function r(n){return new $5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function z5(t,e){this._context=t,this._k=(1-e)/6}var h9,f9=N(()=>{"use strict";Bv();o(z5,"CardinalOpen");z5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(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:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};h9=o(function t(e){function r(n){return new z5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function Fv(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Zi){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Zi){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function oq(t,e){this._context=t,this._alpha=e}var $v,G5=N(()=>{"use strict";R5();Bv();o(Fv,"point");o(oq,"CatmullRom");oq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(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},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,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:Fv(this,t,e);break}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},"point")};$v=o(function t(e){function r(n){return e?new oq(n,e):new F5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function lq(t,e){this._context=t,this._alpha=e}var d9,cq=N(()=>{"use strict";u9();Mv();G5();o(lq,"CatmullRomClosed");lq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(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},"lineStart"),lineEnd:o(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);break}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,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:Fv(this,t,e);break}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},"point")};d9=o(function t(e){function r(n){return e?new lq(n,e):new $5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function uq(t,e){this._context=t,this._alpha=e}var p9,hq=N(()=>{"use strict";f9();G5();o(uq,"CatmullRomOpen");uq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(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},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,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:Fv(this,t,e);break}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},"point")};p9=o(function t(e){function r(n){return e?new uq(n,e):new z5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function fq(t){this._context=t}function V5(t){return new fq(t)}var dq=N(()=>{"use strict";Mv();o(fq,"LinearClosed");fq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(V5,"default")});function pq(t){return t<0?-1:1}function mq(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),l=(a*i+s*n)/(n+i);return(pq(a)+pq(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function gq(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function m9(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,l=(a-n)/3;t._context.bezierCurveTo(n+l,i+l*e,a-l,s-l*r,a,s)}function U5(t){this._context=t}function yq(t){this._context=new vq(t)}function vq(t){this._context=t}function zv(t){return new U5(t)}function Gv(t){return new yq(t)}var xq=N(()=>{"use strict";o(pq,"sign");o(mq,"slope3");o(gq,"slope2");o(m9,"point");o(U5,"MonotoneX");U5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:m9(this,this._t0,gq(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(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,m9(this,gq(this,r=mq(this,t,e)),r);break;default:m9(this,this._t0,r=mq(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(yq,"MonotoneY");(yq.prototype=Object.create(U5.prototype)).point=function(t,e){U5.prototype.point.call(this,e,t)};o(vq,"ReflectContext");vq.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)},"bezierCurveTo")};o(zv,"monotoneX");o(Gv,"monotoneY")});function wq(t){this._context=t}function bq(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e<r-1;++e)i[e]=1,a[e]=4,s[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,a[r-1]=7,s[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)n=i[e]/a[e-1],a[e]-=n,s[e]-=n*s[e-1];for(i[r-1]=s[r-1]/a[r-1],e=r-2;e>=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e<r-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}function F0(t){return new wq(t)}var Tq=N(()=>{"use strict";o(wq,"Natural");wq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=bq(t),i=bq(e),a=0,s=1;s<r;++a,++s)this._context.bezierCurveTo(n[0][a],i[0][a],n[1][a],i[1][a],t[s],e[s]);(this._line||this._line!==0&&r===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};o(bq,"controlPoints");o(F0,"default")});function H5(t,e){this._context=t,this._t=e}function $0(t){return new H5(t,.5)}function Vv(t){return new H5(t,0)}function Uv(t){return new H5(t,1)}var kq=N(()=>{"use strict";o(H5,"Step");H5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(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 r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o($0,"default");o(Vv,"stepBefore");o(Uv,"stepAfter")});var Eq=N(()=>{"use strict";WW();KW();JW();rq();iq();Ov();eq();sq();u9();f9();Bv();cq();hq();G5();dq();a9();xq();Tq();kq()});var Sq=N(()=>{"use strict"});var Cq=N(()=>{"use strict"});function Dh(t,e,r){this.k=t,this.x=e,this.y=r}function y9(t){for(;!t.__zoom;)if(!(t=t.parentNode))return g9;return t.__zoom}var g9,v9=N(()=>{"use strict";o(Dh,"Transform");Dh.prototype={constructor:Dh,scale:o(function(t){return t===1?this:new Dh(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Dh(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};g9=new Dh(1,0,0);y9.prototype=Dh.prototype;o(y9,"transform")});var Aq=N(()=>{"use strict"});var _q=N(()=>{"use strict";l5();Sq();Cq();v9();Aq()});var Dq=N(()=>{"use strict";_q();v9()});var dr=N(()=>{"use strict";vh();sV();SH();DH();E0();LH();RH();TA();QV();NH();u_();MH();OH();A_();jH();KH();A0();m_();QH();IH();ZH();$W();VW();fl();Eq();A5();Z_();r5();l5();Dq()});var Lq=Mi(Ji=>{"use strict";Object.defineProperty(Ji,"__esModule",{value:!0});Ji.BLANK_URL=Ji.relativeFirstCharacters=Ji.whitespaceEscapeCharsRegex=Ji.urlSchemeRegex=Ji.ctrlCharactersRegex=Ji.htmlCtrlEntityRegex=Ji.htmlEntitiesRegex=Ji.invalidProtocolRegex=void 0;Ji.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;Ji.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;Ji.htmlCtrlEntityRegex=/&(newline|tab);/gi;Ji.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;Ji.urlSchemeRegex=/^.+(:|:)/gim;Ji.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;Ji.relativeFirstCharacters=[".","/"];Ji.BLANK_URL="about:blank"});var z0=Mi(W5=>{"use strict";Object.defineProperty(W5,"__esModule",{value:!0});W5.sanitizeUrl=void 0;var Aa=Lq();function Hke(t){return Aa.relativeFirstCharacters.indexOf(t[0])>-1}o(Hke,"isRelativeUrlWithoutProtocol");function Wke(t){var e=t.replace(Aa.ctrlCharactersRegex,"");return e.replace(Aa.htmlEntitiesRegex,function(r,n){return String.fromCharCode(n)})}o(Wke,"decodeHtmlCharacters");function qke(t){return URL.canParse(t)}o(qke,"isValidUrl");function Rq(t){try{return decodeURIComponent(t)}catch{return t}}o(Rq,"decodeURI");function Yke(t){if(!t)return Aa.BLANK_URL;var e,r=Rq(t.trim());do r=Wke(r).replace(Aa.htmlCtrlEntityRegex,"").replace(Aa.ctrlCharactersRegex,"").replace(Aa.whitespaceEscapeCharsRegex,"").trim(),r=Rq(r),e=r.match(Aa.ctrlCharactersRegex)||r.match(Aa.htmlEntitiesRegex)||r.match(Aa.htmlCtrlEntityRegex)||r.match(Aa.whitespaceEscapeCharsRegex);while(e&&e.length>0);var n=r;if(!n)return Aa.BLANK_URL;if(Hke(n))return n;var i=n.trimStart(),a=i.match(Aa.urlSchemeRegex);if(!a)return n;var s=a[0].toLowerCase().trim();if(Aa.invalidProtocolRegex.test(s))return Aa.BLANK_URL;var l=i.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!qke(l))return Aa.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(Yke,"sanitizeUrl");W5.sanitizeUrl=Yke});var x9,kd,q5,Nq,Mq,Iq,Tl,Hv,Wv=N(()=>{"use strict";x9=Sa(z0(),1);gr();kd=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class&&r.attr("class",e.class),r},"drawRect"),q5=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};kd(t,r).lower()},"drawBackgroundRect"),Nq=o((t,e)=>{let r=e.text.replace(nd," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),Mq=o((t,e,r,n)=>{let i=t.append("image");i.attr("x",e),i.attr("y",r);let a=(0,x9.sanitizeUrl)(n);i.attr("xlink:href",a)},"drawImage"),Iq=o((t,e,r,n)=>{let i=t.append("use");i.attr("x",e),i.attr("y",r);let a=(0,x9.sanitizeUrl)(n);i.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),Tl=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),Hv=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")});var Oq,b9,Pq,Xke,jke,Kke,Qke,Zke,Jke,eEe,tEe,rEe,nEe,iEe,aEe,Tu,kl,Bq=N(()=>{"use strict";gr();Wv();Oq=Sa(z0(),1),b9=o(function(t,e){return kd(t,e)},"drawRect"),Pq=o(function(t,e,r,n,i,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,Oq.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),Xke=o((t,e,r)=>{let n=t.append("g"),i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",l=a.lineColor?a.lineColor:"#444444",u=a.offsetX?parseInt(a.offsetX):0,h=a.offsetY?parseInt(a.offsetY):0,f="";if(i===0){let p=n.append("line");p.attr("x1",a.startPoint.x),p.attr("y1",a.startPoint.y),p.attr("x2",a.endPoint.x),p.attr("y2",a.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",l),p.style("fill","none"),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),i=-1}else{let p=n.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=r.messageFont();Tu(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+h,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),Tu(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+h,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},"drawRels"),jke=o(function(t,e,r){let n=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};b9(n,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,Tu(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,Tu(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,Tu(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),Kke=o(function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=Tl();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=n,u.width=e.width,u.height=e.height,u.stroke=i,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},b9(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=aEe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":Pq(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,Tu(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?Tu(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&Tu(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,Tu(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),Qke=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),Zke=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),Jke=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),eEe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),tEe=o(function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),rEe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),nEe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertDynamicNumber"),iEe=o(function(t){let r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),aEe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),Tu=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=i.split(Ze.lineBreakRegex);for(let v=0;v<y.length;v++){let x=v*p-p*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",p).style("font-weight",g).style("font-family",m);b.append("tspan").attr("dy",x).text(y[v]).attr("alignment-baseline","mathematical"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)a.hasOwnProperty(s)&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),kl={drawRect:b9,drawBoundary:jke,drawC4Shape:Kke,drawRels:Xke,drawImage:Pq,insertArrowHead:eEe,insertArrowEnd:tEe,insertArrowFilledHead:rEe,insertDynamicNumber:nEe,insertArrowCrossHead:iEe,insertDatabaseIcon:Qke,insertComputerIcon:Zke,insertClockIcon:Jke}});var sEe,X5,w9=N(()=>{"use strict";sEe=typeof global=="object"&&global&&global.Object===Object&&global,X5=sEe});var oEe,lEe,li,Lo=N(()=>{"use strict";w9();oEe=typeof self=="object"&&self&&self.Object===Object&&self,lEe=X5||oEe||Function("return this")(),li=lEe});var cEe,ea,Ed=N(()=>{"use strict";Lo();cEe=li.Symbol,ea=cEe});function fEe(t){var e=uEe.call(t,qv),r=t[qv];try{t[qv]=void 0;var n=!0}catch{}var i=hEe.call(t);return n&&(e?t[qv]=r:delete t[qv]),i}var Fq,uEe,hEe,qv,$q,zq=N(()=>{"use strict";Ed();Fq=Object.prototype,uEe=Fq.hasOwnProperty,hEe=Fq.toString,qv=ea?ea.toStringTag:void 0;o(fEe,"getRawTag");$q=fEe});function mEe(t){return pEe.call(t)}var dEe,pEe,Gq,Vq=N(()=>{"use strict";dEe=Object.prototype,pEe=dEe.toString;o(mEe,"objectToString");Gq=mEe});function vEe(t){return t==null?t===void 0?yEe:gEe:Uq&&Uq in Object(t)?$q(t):Gq(t)}var gEe,yEe,Uq,da,ku=N(()=>{"use strict";Ed();zq();Vq();gEe="[object Null]",yEe="[object Undefined]",Uq=ea?ea.toStringTag:void 0;o(vEe,"baseGetTag");da=vEe});function xEe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var bn,Js=N(()=>{"use strict";o(xEe,"isObject");bn=xEe});function EEe(t){if(!bn(t))return!1;var e=da(t);return e==wEe||e==TEe||e==bEe||e==kEe}var bEe,wEe,TEe,kEe,Si,Yv=N(()=>{"use strict";ku();Js();bEe="[object AsyncFunction]",wEe="[object Function]",TEe="[object GeneratorFunction]",kEe="[object Proxy]";o(EEe,"isFunction");Si=EEe});var SEe,j5,Hq=N(()=>{"use strict";Lo();SEe=li["__core-js_shared__"],j5=SEe});function CEe(t){return!!Wq&&Wq in t}var Wq,qq,Yq=N(()=>{"use strict";Hq();Wq=function(){var t=/[^.]+$/.exec(j5&&j5.keys&&j5.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(CEe,"isMasked");qq=CEe});function DEe(t){if(t!=null){try{return _Ee.call(t)}catch{}try{return t+""}catch{}}return""}var AEe,_Ee,Eu,T9=N(()=>{"use strict";AEe=Function.prototype,_Ee=AEe.toString;o(DEe,"toSource");Eu=DEe});function BEe(t){if(!bn(t)||qq(t))return!1;var e=Si(t)?PEe:REe;return e.test(Eu(t))}var LEe,REe,NEe,MEe,IEe,OEe,PEe,Xq,jq=N(()=>{"use strict";Yv();Yq();Js();T9();LEe=/[\\^$.*+?()[\]{}|]/g,REe=/^\[object .+?Constructor\]$/,NEe=Function.prototype,MEe=Object.prototype,IEe=NEe.toString,OEe=MEe.hasOwnProperty,PEe=RegExp("^"+IEe.call(OEe).replace(LEe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(BEe,"baseIsNative");Xq=BEe});function FEe(t,e){return t?.[e]}var Kq,Qq=N(()=>{"use strict";o(FEe,"getValue");Kq=FEe});function $Ee(t,e){var r=Kq(t,e);return Xq(r)?r:void 0}var Ss,Lh=N(()=>{"use strict";jq();Qq();o($Ee,"getNative");Ss=$Ee});var zEe,Su,Xv=N(()=>{"use strict";Lh();zEe=Ss(Object,"create"),Su=zEe});function GEe(){this.__data__=Su?Su(null):{},this.size=0}var Zq,Jq=N(()=>{"use strict";Xv();o(GEe,"hashClear");Zq=GEe});function VEe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var eY,tY=N(()=>{"use strict";o(VEe,"hashDelete");eY=VEe});function qEe(t){var e=this.__data__;if(Su){var r=e[t];return r===UEe?void 0:r}return WEe.call(e,t)?e[t]:void 0}var UEe,HEe,WEe,rY,nY=N(()=>{"use strict";Xv();UEe="__lodash_hash_undefined__",HEe=Object.prototype,WEe=HEe.hasOwnProperty;o(qEe,"hashGet");rY=qEe});function jEe(t){var e=this.__data__;return Su?e[t]!==void 0:XEe.call(e,t)}var YEe,XEe,iY,aY=N(()=>{"use strict";Xv();YEe=Object.prototype,XEe=YEe.hasOwnProperty;o(jEe,"hashHas");iY=jEe});function QEe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Su&&e===void 0?KEe:e,this}var KEe,sY,oY=N(()=>{"use strict";Xv();KEe="__lodash_hash_undefined__";o(QEe,"hashSet");sY=QEe});function G0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var k9,lY=N(()=>{"use strict";Jq();tY();nY();aY();oY();o(G0,"Hash");G0.prototype.clear=Zq;G0.prototype.delete=eY;G0.prototype.get=rY;G0.prototype.has=iY;G0.prototype.set=sY;k9=G0});function ZEe(){this.__data__=[],this.size=0}var cY,uY=N(()=>{"use strict";o(ZEe,"listCacheClear");cY=ZEe});function JEe(t,e){return t===e||t!==t&&e!==e}var Ro,Sd=N(()=>{"use strict";o(JEe,"eq");Ro=JEe});function e6e(t,e){for(var r=t.length;r--;)if(Ro(t[r][0],e))return r;return-1}var Rh,jv=N(()=>{"use strict";Sd();o(e6e,"assocIndexOf");Rh=e6e});function n6e(t){var e=this.__data__,r=Rh(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():r6e.call(e,r,1),--this.size,!0}var t6e,r6e,hY,fY=N(()=>{"use strict";jv();t6e=Array.prototype,r6e=t6e.splice;o(n6e,"listCacheDelete");hY=n6e});function i6e(t){var e=this.__data__,r=Rh(e,t);return r<0?void 0:e[r][1]}var dY,pY=N(()=>{"use strict";jv();o(i6e,"listCacheGet");dY=i6e});function a6e(t){return Rh(this.__data__,t)>-1}var mY,gY=N(()=>{"use strict";jv();o(a6e,"listCacheHas");mY=a6e});function s6e(t,e){var r=this.__data__,n=Rh(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var yY,vY=N(()=>{"use strict";jv();o(s6e,"listCacheSet");yY=s6e});function V0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var Nh,Kv=N(()=>{"use strict";uY();fY();pY();gY();vY();o(V0,"ListCache");V0.prototype.clear=cY;V0.prototype.delete=hY;V0.prototype.get=dY;V0.prototype.has=mY;V0.prototype.set=yY;Nh=V0});var o6e,Mh,K5=N(()=>{"use strict";Lh();Lo();o6e=Ss(li,"Map"),Mh=o6e});function l6e(){this.size=0,this.__data__={hash:new k9,map:new(Mh||Nh),string:new k9}}var xY,bY=N(()=>{"use strict";lY();Kv();K5();o(l6e,"mapCacheClear");xY=l6e});function c6e(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var wY,TY=N(()=>{"use strict";o(c6e,"isKeyable");wY=c6e});function u6e(t,e){var r=t.__data__;return wY(e)?r[typeof e=="string"?"string":"hash"]:r.map}var Ih,Qv=N(()=>{"use strict";TY();o(u6e,"getMapData");Ih=u6e});function h6e(t){var e=Ih(this,t).delete(t);return this.size-=e?1:0,e}var kY,EY=N(()=>{"use strict";Qv();o(h6e,"mapCacheDelete");kY=h6e});function f6e(t){return Ih(this,t).get(t)}var SY,CY=N(()=>{"use strict";Qv();o(f6e,"mapCacheGet");SY=f6e});function d6e(t){return Ih(this,t).has(t)}var AY,_Y=N(()=>{"use strict";Qv();o(d6e,"mapCacheHas");AY=d6e});function p6e(t,e){var r=Ih(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var DY,LY=N(()=>{"use strict";Qv();o(p6e,"mapCacheSet");DY=p6e});function U0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var Cd,Q5=N(()=>{"use strict";bY();EY();CY();_Y();LY();o(U0,"MapCache");U0.prototype.clear=xY;U0.prototype.delete=kY;U0.prototype.get=SY;U0.prototype.has=AY;U0.prototype.set=DY;Cd=U0});function E9(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(m6e);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(E9.Cache||Cd),r}var m6e,H0,S9=N(()=>{"use strict";Q5();m6e="Expected a function";o(E9,"memoize");E9.Cache=Cd;H0=E9});function g6e(){this.__data__=new Nh,this.size=0}var RY,NY=N(()=>{"use strict";Kv();o(g6e,"stackClear");RY=g6e});function y6e(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var MY,IY=N(()=>{"use strict";o(y6e,"stackDelete");MY=y6e});function v6e(t){return this.__data__.get(t)}var OY,PY=N(()=>{"use strict";o(v6e,"stackGet");OY=v6e});function x6e(t){return this.__data__.has(t)}var BY,FY=N(()=>{"use strict";o(x6e,"stackHas");BY=x6e});function w6e(t,e){var r=this.__data__;if(r instanceof Nh){var n=r.__data__;if(!Mh||n.length<b6e-1)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Cd(n)}return r.set(t,e),this.size=r.size,this}var b6e,$Y,zY=N(()=>{"use strict";Kv();K5();Q5();b6e=200;o(w6e,"stackSet");$Y=w6e});function W0(t){var e=this.__data__=new Nh(t);this.size=e.size}var lc,Zv=N(()=>{"use strict";Kv();NY();IY();PY();FY();zY();o(W0,"Stack");W0.prototype.clear=RY;W0.prototype.delete=MY;W0.prototype.get=OY;W0.prototype.has=BY;W0.prototype.set=$Y;lc=W0});var T6e,q0,C9=N(()=>{"use strict";Lh();T6e=function(){try{var t=Ss(Object,"defineProperty");return t({},"",{}),t}catch{}}(),q0=T6e});function k6e(t,e,r){e=="__proto__"&&q0?q0(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var cc,Y0=N(()=>{"use strict";C9();o(k6e,"baseAssignValue");cc=k6e});function E6e(t,e,r){(r!==void 0&&!Ro(t[e],r)||r===void 0&&!(e in t))&&cc(t,e,r)}var Jv,A9=N(()=>{"use strict";Y0();Sd();o(E6e,"assignMergeValue");Jv=E6e});function S6e(t){return function(e,r,n){for(var i=-1,a=Object(e),s=n(e),l=s.length;l--;){var u=s[t?l:++i];if(r(a[u],u,a)===!1)break}return e}}var GY,VY=N(()=>{"use strict";o(S6e,"createBaseFor");GY=S6e});var C6e,X0,Z5=N(()=>{"use strict";VY();C6e=GY(),X0=C6e});function _6e(t,e){if(e)return t.slice();var r=t.length,n=WY?WY(r):new t.constructor(r);return t.copy(n),n}var qY,UY,A6e,HY,WY,J5,_9=N(()=>{"use strict";Lo();qY=typeof exports=="object"&&exports&&!exports.nodeType&&exports,UY=qY&&typeof module=="object"&&module&&!module.nodeType&&module,A6e=UY&&UY.exports===qY,HY=A6e?li.Buffer:void 0,WY=HY?HY.allocUnsafe:void 0;o(_6e,"cloneBuffer");J5=_6e});var D6e,j0,D9=N(()=>{"use strict";Lo();D6e=li.Uint8Array,j0=D6e});function L6e(t){var e=new t.constructor(t.byteLength);return new j0(e).set(new j0(t)),e}var K0,ew=N(()=>{"use strict";D9();o(L6e,"cloneArrayBuffer");K0=L6e});function R6e(t,e){var r=e?K0(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var tw,L9=N(()=>{"use strict";ew();o(R6e,"cloneTypedArray");tw=R6e});function N6e(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}var rw,R9=N(()=>{"use strict";o(N6e,"copyArray");rw=N6e});var YY,M6e,XY,jY=N(()=>{"use strict";Js();YY=Object.create,M6e=function(){function t(){}return o(t,"object"),function(e){if(!bn(e))return{};if(YY)return YY(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),XY=M6e});function I6e(t,e){return function(r){return t(e(r))}}var nw,N9=N(()=>{"use strict";o(I6e,"overArg");nw=I6e});var O6e,Q0,iw=N(()=>{"use strict";N9();O6e=nw(Object.getPrototypeOf,Object),Q0=O6e});function B6e(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||P6e;return t===r}var P6e,uc,Z0=N(()=>{"use strict";P6e=Object.prototype;o(B6e,"isPrototype");uc=B6e});function F6e(t){return typeof t.constructor=="function"&&!uc(t)?XY(Q0(t)):{}}var aw,M9=N(()=>{"use strict";jY();iw();Z0();o(F6e,"initCloneObject");aw=F6e});function $6e(t){return t!=null&&typeof t=="object"}var ri,No=N(()=>{"use strict";o($6e,"isObjectLike");ri=$6e});function G6e(t){return ri(t)&&da(t)==z6e}var z6e,I9,KY=N(()=>{"use strict";ku();No();z6e="[object Arguments]";o(G6e,"baseIsArguments");I9=G6e});var QY,V6e,U6e,H6e,El,J0=N(()=>{"use strict";KY();No();QY=Object.prototype,V6e=QY.hasOwnProperty,U6e=QY.propertyIsEnumerable,H6e=I9(function(){return arguments}())?I9:function(t){return ri(t)&&V6e.call(t,"callee")&&!U6e.call(t,"callee")},El=H6e});var W6e,Pt,Un=N(()=>{"use strict";W6e=Array.isArray,Pt=W6e});function Y6e(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=q6e}var q6e,em,sw=N(()=>{"use strict";q6e=9007199254740991;o(Y6e,"isLength");em=Y6e});function X6e(t){return t!=null&&em(t.length)&&!Si(t)}var ci,Mo=N(()=>{"use strict";Yv();sw();o(X6e,"isArrayLike");ci=X6e});function j6e(t){return ri(t)&&ci(t)}var Ad,ow=N(()=>{"use strict";Mo();No();o(j6e,"isArrayLikeObject");Ad=j6e});function K6e(){return!1}var ZY,JY=N(()=>{"use strict";o(K6e,"stubFalse");ZY=K6e});var rX,eX,Q6e,tX,Z6e,J6e,Sl,tm=N(()=>{"use strict";Lo();JY();rX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,eX=rX&&typeof module=="object"&&module&&!module.nodeType&&module,Q6e=eX&&eX.exports===rX,tX=Q6e?li.Buffer:void 0,Z6e=tX?tX.isBuffer:void 0,J6e=Z6e||ZY,Sl=J6e});function aSe(t){if(!ri(t)||da(t)!=eSe)return!1;var e=Q0(t);if(e===null)return!0;var r=nSe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&nX.call(r)==iSe}var eSe,tSe,rSe,nX,nSe,iSe,iX,aX=N(()=>{"use strict";ku();iw();No();eSe="[object Object]",tSe=Function.prototype,rSe=Object.prototype,nX=tSe.toString,nSe=rSe.hasOwnProperty,iSe=nX.call(Object);o(aSe,"isPlainObject");iX=aSe});function LSe(t){return ri(t)&&em(t.length)&&!!Fn[da(t)]}var sSe,oSe,lSe,cSe,uSe,hSe,fSe,dSe,pSe,mSe,gSe,ySe,vSe,xSe,bSe,wSe,TSe,kSe,ESe,SSe,CSe,ASe,_Se,DSe,Fn,sX,oX=N(()=>{"use strict";ku();sw();No();sSe="[object Arguments]",oSe="[object Array]",lSe="[object Boolean]",cSe="[object Date]",uSe="[object Error]",hSe="[object Function]",fSe="[object Map]",dSe="[object Number]",pSe="[object Object]",mSe="[object RegExp]",gSe="[object Set]",ySe="[object String]",vSe="[object WeakMap]",xSe="[object ArrayBuffer]",bSe="[object DataView]",wSe="[object Float32Array]",TSe="[object Float64Array]",kSe="[object Int8Array]",ESe="[object Int16Array]",SSe="[object Int32Array]",CSe="[object Uint8Array]",ASe="[object Uint8ClampedArray]",_Se="[object Uint16Array]",DSe="[object Uint32Array]",Fn={};Fn[wSe]=Fn[TSe]=Fn[kSe]=Fn[ESe]=Fn[SSe]=Fn[CSe]=Fn[ASe]=Fn[_Se]=Fn[DSe]=!0;Fn[sSe]=Fn[oSe]=Fn[xSe]=Fn[lSe]=Fn[bSe]=Fn[cSe]=Fn[uSe]=Fn[hSe]=Fn[fSe]=Fn[dSe]=Fn[pSe]=Fn[mSe]=Fn[gSe]=Fn[ySe]=Fn[vSe]=!1;o(LSe,"baseIsTypedArray");sX=LSe});function RSe(t){return function(e){return t(e)}}var Io,_d=N(()=>{"use strict";o(RSe,"baseUnary");Io=RSe});var lX,e2,NSe,O9,MSe,Oo,t2=N(()=>{"use strict";w9();lX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,e2=lX&&typeof module=="object"&&module&&!module.nodeType&&module,NSe=e2&&e2.exports===lX,O9=NSe&&X5.process,MSe=function(){try{var t=e2&&e2.require&&e2.require("util").types;return t||O9&&O9.binding&&O9.binding("util")}catch{}}(),Oo=MSe});var cX,ISe,Oh,r2=N(()=>{"use strict";oX();_d();t2();cX=Oo&&Oo.isTypedArray,ISe=cX?Io(cX):sX,Oh=ISe});function OSe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var n2,P9=N(()=>{"use strict";o(OSe,"safeGet");n2=OSe});function FSe(t,e,r){var n=t[e];(!(BSe.call(t,e)&&Ro(n,r))||r===void 0&&!(e in t))&&cc(t,e,r)}var PSe,BSe,hc,rm=N(()=>{"use strict";Y0();Sd();PSe=Object.prototype,BSe=PSe.hasOwnProperty;o(FSe,"assignValue");hc=FSe});function $Se(t,e,r,n){var i=!r;r||(r={});for(var a=-1,s=e.length;++a<s;){var l=e[a],u=n?n(r[l],t[l],l,r,t):void 0;u===void 0&&(u=t[l]),i?cc(r,l,u):hc(r,l,u)}return r}var Po,Dd=N(()=>{"use strict";rm();Y0();o($Se,"copyObject");Po=$Se});function zSe(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}var uX,hX=N(()=>{"use strict";o(zSe,"baseTimes");uX=zSe});function USe(t,e){var r=typeof t;return e=e??GSe,!!e&&(r=="number"||r!="symbol"&&VSe.test(t))&&t>-1&&t%1==0&&t<e}var GSe,VSe,Ph,i2=N(()=>{"use strict";GSe=9007199254740991,VSe=/^(?:0|[1-9]\d*)$/;o(USe,"isIndex");Ph=USe});function qSe(t,e){var r=Pt(t),n=!r&&El(t),i=!r&&!n&&Sl(t),a=!r&&!n&&!i&&Oh(t),s=r||n||i||a,l=s?uX(t.length,String):[],u=l.length;for(var h in t)(e||WSe.call(t,h))&&!(s&&(h=="length"||i&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||Ph(h,u)))&&l.push(h);return l}var HSe,WSe,lw,B9=N(()=>{"use strict";hX();J0();Un();tm();i2();r2();HSe=Object.prototype,WSe=HSe.hasOwnProperty;o(qSe,"arrayLikeKeys");lw=qSe});function YSe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var fX,dX=N(()=>{"use strict";o(YSe,"nativeKeysIn");fX=YSe});function KSe(t){if(!bn(t))return fX(t);var e=uc(t),r=[];for(var n in t)n=="constructor"&&(e||!jSe.call(t,n))||r.push(n);return r}var XSe,jSe,pX,mX=N(()=>{"use strict";Js();Z0();dX();XSe=Object.prototype,jSe=XSe.hasOwnProperty;o(KSe,"baseKeysIn");pX=KSe});function QSe(t){return ci(t)?lw(t,!0):pX(t)}var Cs,Bh=N(()=>{"use strict";B9();mX();Mo();o(QSe,"keysIn");Cs=QSe});function ZSe(t){return Po(t,Cs(t))}var gX,yX=N(()=>{"use strict";Dd();Bh();o(ZSe,"toPlainObject");gX=ZSe});function JSe(t,e,r,n,i,a,s){var l=n2(t,r),u=n2(e,r),h=s.get(u);if(h){Jv(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Pt(u),m=!p&&Sl(u),g=!p&&!m&&Oh(u);f=u,p||m||g?Pt(l)?f=l:Ad(l)?f=rw(l):m?(d=!1,f=J5(u,!0)):g?(d=!1,f=tw(u,!0)):f=[]:iX(u)||El(u)?(f=l,El(l)?f=gX(l):(!bn(l)||Si(l))&&(f=aw(u))):d=!1}d&&(s.set(u,f),i(f,u,n,a,s),s.delete(u)),Jv(t,r,f)}var vX,xX=N(()=>{"use strict";A9();_9();L9();R9();M9();J0();Un();ow();tm();Yv();Js();aX();r2();P9();yX();o(JSe,"baseMergeDeep");vX=JSe});function bX(t,e,r,n,i){t!==e&&X0(e,function(a,s){if(i||(i=new lc),bn(a))vX(t,e,s,r,bX,n,i);else{var l=n?n(n2(t,s),a,s+"",t,e,i):void 0;l===void 0&&(l=a),Jv(t,s,l)}},Cs)}var wX,TX=N(()=>{"use strict";Zv();A9();Z5();xX();Js();Bh();P9();o(bX,"baseMerge");wX=bX});function eCe(t){return t}var ta,Cu=N(()=>{"use strict";o(eCe,"identity");ta=eCe});function tCe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var kX,EX=N(()=>{"use strict";o(tCe,"apply");kX=tCe});function rCe(t,e,r){return e=SX(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,a=SX(n.length-e,0),s=Array(a);++i<a;)s[i]=n[e+i];i=-1;for(var l=Array(e+1);++i<e;)l[i]=n[i];return l[e]=r(s),kX(t,this,l)}}var SX,cw,F9=N(()=>{"use strict";EX();SX=Math.max;o(rCe,"overRest");cw=rCe});function nCe(t){return function(){return t}}var As,$9=N(()=>{"use strict";o(nCe,"constant");As=nCe});var iCe,CX,AX=N(()=>{"use strict";$9();C9();Cu();iCe=q0?function(t,e){return q0(t,"toString",{configurable:!0,enumerable:!1,value:As(e),writable:!0})}:ta,CX=iCe});function lCe(t){var e=0,r=0;return function(){var n=oCe(),i=sCe-(n-r);if(r=n,i>0){if(++e>=aCe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var aCe,sCe,oCe,_X,DX=N(()=>{"use strict";aCe=800,sCe=16,oCe=Date.now;o(lCe,"shortOut");_X=lCe});var cCe,uw,z9=N(()=>{"use strict";AX();DX();cCe=_X(CX),uw=cCe});function uCe(t,e){return uw(cw(t,e,ta),t+"")}var fc,nm=N(()=>{"use strict";Cu();F9();z9();o(uCe,"baseRest");fc=uCe});function hCe(t,e,r){if(!bn(r))return!1;var n=typeof e;return(n=="number"?ci(r)&&Ph(e,r.length):n=="string"&&e in r)?Ro(r[e],t):!1}var eo,Ld=N(()=>{"use strict";Sd();Mo();i2();Js();o(hCe,"isIterateeCall");eo=hCe});function fCe(t){return fc(function(e,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,s=i>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(i--,a):void 0,s&&eo(r[0],r[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++n<i;){var l=r[n];l&&t(e,l,n,a)}return e})}var hw,G9=N(()=>{"use strict";nm();Ld();o(fCe,"createAssigner");hw=fCe});var dCe,Fh,V9=N(()=>{"use strict";TX();G9();dCe=hw(function(t,e,r){wX(t,e,r)}),Fh=dCe});function W9(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return pCe[r]??e}function vCe(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,NX.sanitizeUrl)(r):r}function OX(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function bCe(t){let e,r=0;t.forEach(i=>{r+=OX(i,e),e=i});let n=r/2;return q9(t,n)}function wCe(t){return t.length===1?t[0]:bCe(t)}function kCe(t,e,r){let n=structuredClone(r);Y.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();let i=25+t,a=q9(n,i),s=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(n[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(n[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2),u}function Y9(t){let e="",r="";for(let n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}function ECe(t){let e="",r="0123456789abcdef",n=r.length;for(let i=0;i<t;i++)e+=r.charAt(Math.floor(Math.random()*n));return e}function dw(t,e){return Q9(t,e).height}function ra(t,e){return Q9(t,e).width}function Z9(t){return"str"in t}function Fi(t,e){return Fh({},t,e)}function $n(t){return t??null}var NX,H9,pCe,mCe,gCe,MX,IX,yCe,xCe,LX,q9,TCe,RX,X9,j9,SCe,CCe,K9,ACe,Q9,U9,fw,_Ce,DCe,Bo,Gt,PX,na,$h,ir=N(()=>{"use strict";NX=Sa(z0(),1);dr();gr();e7();vt();Xf();s0();S9();V9();$4();H9="\u200B",pCe={curveBasis:Do,curveBasisClosed:P5,curveBasisOpen:B5,curveBumpX:Rv,curveBumpY:Nv,curveBundle:l9,curveCardinalClosed:c9,curveCardinalOpen:h9,curveCardinal:Pv,curveCatmullRomClosed:d9,curveCatmullRomOpen:p9,curveCatmullRom:$v,curveLinear:wu,curveLinearClosed:V5,curveMonotoneX:zv,curveMonotoneY:Gv,curveNatural:F0,curveStep:$0,curveStepAfter:Uv,curveStepBefore:Vv},mCe=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,gCe=o(function(t,e){let r=MX(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(r)){let s=r.map(l=>l.args);l0(s),n=Gn(n,[...s])}else n=r.args;if(!n)return;let i=a0(t,e),a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),MX=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${mCe.source})(?=[}][%]{2}).* | |
| 353 | +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),Y.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=qf.exec(t))!==null;)if(n.index===qf.lastIndex&&qf.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){let a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return Y.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),IX=o(function(t){return t.replace(qf,"")},"removeDirectives"),yCe=o(function(t,e){for(let[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");o(W9,"interpolateToCurve");o(vCe,"formatUrl");xCe=o((t,...e)=>{let r=t.split("."),n=r.length-1,i=r[n],a=window;for(let s=0;s<n;s++)if(a=a[r[s]],!a){Y.error(`Function name: ${t} not found in window`);return}a[i](...e)},"runFunc");o(OX,"distance");o(bCe,"traverseEdge");o(wCe,"calcLabelPosition");LX=o((t,e=2)=>{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),q9=o((t,e)=>{let r,n=e;for(let i of t){if(r){let a=OX(i,r);if(a===0)return r;if(a<n)n-=a;else{let s=n/a;if(s<=0)return r;if(s>=1)return{x:i.x,y:i.y};if(s>0&&s<1)return{x:LX((1-s)*r.x+s*i.x,5),y:LX((1-s)*r.y+s*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),TCe=o((t,e,r)=>{Y.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let i=q9(e,25),a=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+i.x)/2,l.y=-Math.cos(s)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");o(kCe,"calcTerminalLabelPosition");o(Y9,"getStylesFromArray");RX=0,X9=o(()=>(RX++,"id-"+Math.random().toString(36).substr(2,12)+"-"+RX),"generateId");o(ECe,"makeRandomHex");j9=o(t=>ECe(t.length),"random"),SCe=o(function(){return{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:""}},"getTextObj"),CCe=o(function(t,e){let r=e.text.replace(Ze.lineBreakRegex," "),[,n]=Bo(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);let a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),K9=H0((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},r),Ze.lineBreakRegex.test(t)))return t;let n=t.split(" ").filter(Boolean),i=[],a="";return n.forEach((s,l)=>{let u=ra(`${s} `,r),h=ra(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=ACe(s,e,"-",r);i.push(a,...p),a=m}else h+u>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),ACe=H0((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);let i=[...t],a=[],s="";return i.forEach((l,u)=>{let h=`${s}${l}`;if(ra(h,n)>=e){let d=u+1,p=i.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);o(dw,"calculateTextHeight");o(ra,"calculateTextWidth");Q9=H0((t,e)=>{let{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};let[,a]=Bo(r),s=["sans-serif",n],l=t.split(Ze.lineBreakRegex),u=[],h=Ge("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=SCe();v.text=y||H9;let x=CCe(f,v).style("font-size",a).style("font-weight",i).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),U9=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},_Ce=o(function(t){return fw=fw||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),fw.innerHTML=t,unescape(fw.textContent)},"entityDecode");o(Z9,"isDetailedError");DCe=o((t,e,r,n)=>{if(!n)return;let i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),Bo=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(Fi,"cleanAndMerge");Gt={assignWithDepth:Gn,wrapLabel:K9,calculateTextHeight:dw,calculateTextWidth:ra,calculateTextDimensions:Q9,cleanAndMerge:Fi,detectInit:gCe,detectDirective:MX,isSubstringInArray:yCe,interpolateToCurve:W9,calcLabelPosition:wCe,calcCardinalityPosition:TCe,calcTerminalLabelPosition:kCe,formatUrl:vCe,getStylesFromArray:Y9,generateId:X9,random:j9,runFunc:xCe,entityDecode:_Ce,insertTitle:DCe,parseFontSize:Bo,InitIDGenerator:U9},PX=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},"encodeEntities"),na=o(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),$h=o((t,e,{counter:r=0,prefix:n,suffix:i},a)=>a||`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");o($n,"handleUndefinedAttr")});function Cl(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=K9(e[t].text,i,n),e[t].textLines=e[t].text.split(Ze.lineBreakRegex).length,e[t].width=i,e[t].height=dw(e[t].text,n);else{let a=e[t].text.split(Ze.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(ra(l,n),e[t].width),s=dw(l,n),e[t].height=e[t].height+s}}function GX(t,e,r,n,i){let a=new yw(i);a.data.widthLimit=r.data.widthLimit/Math.min(J9,n.length);for(let[s,l]of n.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&Vt.wrap,f=pw(Vt);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Cl("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=pw(Vt);Cl("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=pw(Vt);g.fontSize=g.fontSize-2,Cl("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%J9===0){let g=r.data.startx+Vt.diagramMarginX,y=r.data.stopy+Vt.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+Vt.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=i.db.getC4ShapeArray(l.alias),p=i.db.getC4ShapeKeys(l.alias);p.length>0&&zX(a,t,d,p),e=l.alias;let m=i.db.getBoundarys(e);m.length>0&&GX(t,e,a,m,i),l.alias!=="global"&&$X(t,l,a),r.data.stopy=Math.max(a.data.stopy+Vt.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Vt.c4ShapeMargin,r.data.stopx),mw=Math.max(mw,r.data.stopx),gw=Math.max(gw,r.data.stopy)}}var mw,gw,FX,J9,Vt,yw,eD,a2,pw,LCe,$X,zX,_s,BX,RCe,NCe,MCe,tD,VX=N(()=>{"use strict";dr();Bq();vt();$C();gr();uA();zt();s0();ir();Ei();mw=0,gw=0,FX=4,J9=2;Ty.yy=Qy;Vt={},yw=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,eD(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){e[r]===void 0?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>FX)&&(r=this.nextData.startx+e.margin+Vt.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},eD(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},eD=o(function(t){Gn(Vt,t),t.fontFamily&&(Vt.personFontFamily=Vt.systemFontFamily=Vt.messageFontFamily=t.fontFamily),t.fontSize&&(Vt.personFontSize=Vt.systemFontSize=Vt.messageFontSize=t.fontSize),t.fontWeight&&(Vt.personFontWeight=Vt.systemFontWeight=Vt.messageFontWeight=t.fontWeight)},"setConf"),a2=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),pw=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),LCe=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(Cl,"calcC4ShapeTextWH");$X=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Vt.c4ShapeMargin-35;let n=e.wrap&&Vt.wrap,i=pw(Vt);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=ra(e.label.text,i);Cl("label",e,n,i,a),kl.drawBoundary(t,e,Vt)},"drawBoundary"),zX=o(function(t,e,r,n){let i=0;for(let a of n){i=0;let s=r[a],l=a2(Vt,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=ra("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=Vt.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let u=s.wrap&&Vt.wrap,h=Vt.width-Vt.c4ShapePadding*2,f=a2(Vt,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Cl("label",s,u,f,h),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=a2(Vt,s.typeC4Shape.text);Cl("type",s,u,m,h),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=a2(Vt,s.techn.text);Cl("techn",s,u,m,h),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=a2(Vt,s.typeC4Shape.text);Cl("descr",s,u,m,h),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}p=p+Vt.c4ShapePadding,s.width=Math.max(s.width||Vt.width,p,Vt.width),s.height=Math.max(s.height||Vt.height,d,Vt.height),s.margin=s.margin||Vt.c4ShapeMargin,t.insert(s),kl.drawC4Shape(e,s,Vt)}t.bumpLastMargin(Vt.c4ShapeMargin)},"drawC4ShapeArray"),_s=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},BX=o(function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,l=n+t.height/2,u=Math.abs(r-i),h=Math.abs(n-a),f=h/u,d=t.height/t.width,p=null;return n==a&&r<i?p=new _s(r+t.width,l):n==a&&r>i?p=new _s(r,l):r==i&&n<a?p=new _s(s,n+t.height):r==i&&n>a&&(p=new _s(s,n)),r>i&&n<a?d>=f?p=new _s(r,l+f*t.width/2):p=new _s(s-u/h*t.height/2,n+t.height):r<i&&n<a?d>=f?p=new _s(r+t.width,l+f*t.width/2):p=new _s(s+u/h*t.height/2,n+t.height):r<i&&n>a?d>=f?p=new _s(r+t.width,l-f*t.width/2):p=new _s(s+t.height/2*u/h,n):r>i&&n>a&&(d>=f?p=new _s(r,l-t.width/2*f):p=new _s(s-t.height/2*u/h,n)),p},"getIntersectPoint"),RCe=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=BX(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=BX(e,r);return{startPoint:n,endPoint:i}},"getIntersectPoints"),NCe=o(function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Vt.wrap,l=LCe(Vt);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let h=ra(a.label.text,l);Cl("label",a,s,l,h),a.techn&&a.techn.text!==""&&(h=ra(a.techn.text,l),Cl("techn",a,s,l,h)),a.descr&&a.descr.text!==""&&(h=ra(a.descr.text,l),Cl("descr",a,s,l,h));let f=r(a.from),d=r(a.to),p=RCe(f,d);a.startPoint=p.startPoint,a.endPoint=p.endPoint}kl.drawRels(t,e,Vt)},"drawRels");o(GX,"drawInsideBoundary");MCe=o(function(t,e,r,n){Vt=me().c4;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=n.db;n.db.setWrap(Vt.wrap),FX=l.getC4ShapeInRow(),J9=l.getC4BoundaryInRow(),Y.debug(`C:${JSON.stringify(Vt,null,2)}`);let u=i==="sandbox"?s.select(`[id="${e}"]`):Ge(`[id="${e}"]`);kl.insertComputerIcon(u),kl.insertDatabaseIcon(u),kl.insertClockIcon(u);let h=new yw(n);h.setData(Vt.diagramMarginX,Vt.diagramMarginX,Vt.diagramMarginY,Vt.diagramMarginY),h.data.widthLimit=screen.availWidth,mw=Vt.diagramMarginX,gw=Vt.diagramMarginY;let f=n.db.getTitle(),d=n.db.getBoundarys("");GX(u,"",h,d,n),kl.insertArrowHead(u),kl.insertArrowEnd(u),kl.insertArrowCrossHead(u),kl.insertArrowFilledHead(u),NCe(u,n.db.getRels(),n.db.getC4Shape,n),h.data.stopx=mw,h.data.stopy=gw;let p=h.data,g=p.stopy-p.starty+2*Vt.diagramMarginY,v=p.stopx-p.startx+2*Vt.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*Vt.diagramMarginX).attr("y",p.starty+Vt.diagramMarginY),vn(u,g,v,Vt.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-Vt.diagramMarginX+" -"+(Vt.diagramMarginY+x)+" "+v+" "+(g+x)),Y.debug("models:",p)},"draw"),tD={drawPersonOrSystemArray:zX,drawBoundary:$X,setConf:eD,draw:MCe}});var ICe,UX,HX=N(()=>{"use strict";ICe=o(t=>`.person { | |
| 354 | + stroke: ${t.personBorder}; | |
| 355 | + fill: ${t.personBkg}; | |
| 356 | + } | |
| 357 | +`,"getStyles"),UX=ICe});var WX={};hr(WX,{diagram:()=>OCe});var OCe,qX=N(()=>{"use strict";$C();uA();VX();HX();OCe={parser:JF,db:Qy,renderer:tD,styles:UX,init:o(({c4:t,wrap:e})=>{tD.setConf(t),Qy.setWrap(e)},"init")}});function uj(t){return typeof t>"u"||t===null}function $Ce(t){return typeof t=="object"&&t!==null}function zCe(t){return Array.isArray(t)?t:uj(t)?[]:[t]}function GCe(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;r<n;r+=1)i=a[r],t[i]=e[i];return t}function VCe(t,e){var r="",n;for(n=0;n<e;n+=1)r+=t;return r}function UCe(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}function hj(t,e){var r="",n=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(r+='in "'+t.mark.name+'" '),r+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(r+=` | |
| 358 | + | |
| 359 | +`+t.mark.snippet),n+" "+r):n}function o2(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=hj(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}function rD(t,e,r,n,i){var a="",s="",l=Math.floor(i/2)-1;return n-e>l&&(a=" ... ",e=n-l+a.length),r-n>l&&(s=" ...",r=n+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:n-e+a.length}}function nD(t,e){return $i.repeat(" ",e-t.length)+t}function KCe(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],i=[],a,s=-1;a=r.exec(t.buffer);)i.push(a.index),n.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,i.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=rD(t.buffer,n[s-u],i[s-u],t.position-(n[s]-n[s-u]),d),l=$i.repeat(" ",e.indent)+nD((t.line-u+1).toString(),f)+" | "+h.str+` | |
| 360 | +`+l;for(h=rD(t.buffer,n[s],i[s],t.position,d),l+=$i.repeat(" ",e.indent)+nD((t.line+1).toString(),f)+" | "+h.str+` | |
| 361 | +`,l+=$i.repeat("-",e.indent+f+3+h.pos)+`^ | |
| 362 | +`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=rD(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=$i.repeat(" ",e.indent)+nD((t.line+u+1).toString(),f)+" | "+h.str+` | |
| 363 | +`;return l.replace(/\n$/,"")}function e7e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}function t7e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(ZCe.indexOf(r)===-1)throw new Ds('Unknown option "'+r+'" 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(r){return r},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=e7e(e.styleAliases||null),JCe.indexOf(this.kind)===-1)throw new Ds('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function jX(t,e){var r=[];return t[e].forEach(function(n){var i=r.length;r.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=s)}),r[i]=n}),r}function r7e(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function n(i){i.multi?(t.multi[i.kind].push(i),t.multi.fallback.push(i)):t[i.kind][i.tag]=t.fallback[i.tag]=i}for(o(n,"collectType"),e=0,r=arguments.length;e<r;e+=1)arguments[e].forEach(n);return t}function aD(t){return this.extend(t)}function l7e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function c7e(){return null}function u7e(t){return t===null}function f7e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function d7e(t){return t==="true"||t==="True"||t==="TRUE"}function p7e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}function g7e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function y7e(t){return 48<=t&&t<=55}function v7e(t){return 48<=t&&t<=57}function x7e(t){if(t===null)return!1;var e=t.length,r=0,n=!1,i;if(!e)return!1;if(i=t[r],(i==="-"||i==="+")&&(i=t[++r]),i==="0"){if(r+1===e)return!0;if(i=t[++r],i==="b"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(i!=="0"&&i!=="1")return!1;n=!0}return n&&i!=="_"}if(i==="x"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(!g7e(t.charCodeAt(r)))return!1;n=!0}return n&&i!=="_"}if(i==="o"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(!y7e(t.charCodeAt(r)))return!1;n=!0}return n&&i!=="_"}}if(i==="_")return!1;for(;r<e;r++)if(i=t[r],i!=="_"){if(!v7e(t.charCodeAt(r)))return!1;n=!0}return!(!n||i==="_")}function b7e(t){var e=t,r=1,n;if(e.indexOf("_")!==-1&&(e=e.replace(/_/g,"")),n=e[0],(n==="-"||n==="+")&&(n==="-"&&(r=-1),e=e.slice(1),n=e[0]),e==="0")return 0;if(n==="0"){if(e[1]==="b")return r*parseInt(e.slice(2),2);if(e[1]==="x")return r*parseInt(e.slice(2),16);if(e[1]==="o")return r*parseInt(e.slice(2),8)}return r*parseInt(e,10)}function w7e(t){return Object.prototype.toString.call(t)==="[object Number]"&&t%1===0&&!$i.isNegativeZero(t)}function E7e(t){return!(t===null||!k7e.test(t)||t[t.length-1]==="_")}function S7e(t){var e,r;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function A7e(t,e){var r;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($i.isNegativeZero(t))return"-0.0";return r=t.toString(10),C7e.test(r)?r.replace("e",".e"):r}function _7e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||$i.isNegativeZero(t))}function R7e(t){return t===null?!1:dj.exec(t)!==null||pj.exec(t)!==null}function N7e(t){var e,r,n,i,a,s,l,u=0,h=null,f,d,p;if(e=dj.exec(t),e===null&&(e=pj.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,n,i,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function M7e(t){return t.toISOString()}function O7e(t){return t==="<<"||t===null}function B7e(t){if(t===null)return!1;var e,r,n=0,i=t.length,a=uD;for(r=0;r<i;r++)if(e=a.indexOf(t.charAt(r)),!(e>64)){if(e<0)return!1;n+=6}return n%8===0}function F7e(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=uD,s=0,l=[];for(e=0;e<i;e++)e%4===0&&e&&(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function $7e(t){var e="",r=0,n,i,a=t.length,s=uD;for(n=0;n<a;n++)n%3===0&&n&&(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[n];return i=a%3,i===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):i===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):i===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function z7e(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function H7e(t){if(t===null)return!0;var e=[],r,n,i,a,s,l=t;for(r=0,n=l.length;r<n;r+=1){if(i=l[r],s=!1,U7e.call(i)!=="[object Object]")return!1;for(a in i)if(V7e.call(i,a))if(!s)s=!0;else return!1;if(!s)return!1;if(e.indexOf(a)===-1)e.push(a);else return!1}return!0}function W7e(t){return t!==null?t:[]}function X7e(t){if(t===null)return!0;var e,r,n,i,a,s=t;for(a=new Array(s.length),e=0,r=s.length;e<r;e+=1){if(n=s[e],Y7e.call(n)!=="[object Object]"||(i=Object.keys(n),i.length!==1))return!1;a[e]=[i[0],n[i[0]]]}return!0}function j7e(t){if(t===null)return[];var e,r,n,i,a,s=t;for(a=new Array(s.length),e=0,r=s.length;e<r;e+=1)n=s[e],i=Object.keys(n),a[e]=[i[0],n[i[0]]];return a}function Z7e(t){if(t===null)return!0;var e,r=t;for(e in r)if(Q7e.call(r,e)&&r[e]!==null)return!1;return!0}function J7e(t){return t!==null?t:{}}function QX(t){return Object.prototype.toString.call(t)}function dc(t){return t===10||t===13}function Nd(t){return t===9||t===32}function Ls(t){return t===9||t===32||t===10||t===13}function am(t){return t===44||t===91||t===93||t===123||t===125}function aAe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function sAe(t){return t===120?2:t===117?4:t===85?8:0}function oAe(t){return 48<=t&&t<=57?t-48:-1}function ZX(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` | |
| 364 | +`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function lAe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}function cAe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||mj,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 Tj(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=QCe(r),new Ds(e,r)}function Qt(t,e){throw Tj(t,e)}function bw(t,e){t.onWarning&&t.onWarning.call(null,Tj(t,e))}function zh(t,e,r,n){var i,a,s,l;if(e<r){if(l=t.input.slice(e,r),n)for(i=0,a=l.length;i<a;i+=1)s=l.charCodeAt(i),s===9||32<=s&&s<=1114111||Qt(t,"expected valid JSON character");else rAe.test(l)&&Qt(t,"the stream contains non-printable characters");t.result+=l}}function ej(t,e,r,n){var i,a,s,l;for($i.isObject(r)||Qt(t,"cannot merge mappings; the provided source object is unacceptable"),i=Object.keys(r),s=0,l=i.length;s<l;s+=1)a=i[s],Gh.call(e,a)||(e[a]=r[a],n[a]=!0)}function sm(t,e,r,n,i,a,s,l,u){var h,f;if(Array.isArray(i))for(i=Array.prototype.slice.call(i),h=0,f=i.length;h<f;h+=1)Array.isArray(i[h])&&Qt(t,"nested arrays are not supported inside keys"),typeof i=="object"&&QX(i[h])==="[object Object]"&&(i[h]="[object Object]");if(typeof i=="object"&&QX(i)==="[object Object]"&&(i="[object Object]"),i=String(i),e===null&&(e={}),n==="tag:yaml.org,2002:merge")if(Array.isArray(a))for(h=0,f=a.length;h<f;h+=1)ej(t,e,a[h],r);else ej(t,e,a,r);else!t.json&&!Gh.call(r,i)&&Gh.call(e,i)&&(t.line=s||t.line,t.lineStart=l||t.lineStart,t.position=u||t.position,Qt(t,"duplicated mapping key")),i==="__proto__"?Object.defineProperty(e,i,{configurable:!0,enumerable:!0,writable:!0,value:a}):e[i]=a,delete r[i];return e}function hD(t){var e;e=t.input.charCodeAt(t.position),e===10?t.position++:e===13?(t.position++,t.input.charCodeAt(t.position)===10&&t.position++):Qt(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function Ci(t,e,r){for(var n=0,i=t.input.charCodeAt(t.position);i!==0;){for(;Nd(i);)i===9&&t.firstTabInLine===-1&&(t.firstTabInLine=t.position),i=t.input.charCodeAt(++t.position);if(e&&i===35)do i=t.input.charCodeAt(++t.position);while(i!==10&&i!==13&&i!==0);if(dc(i))for(hD(t),i=t.input.charCodeAt(t.position),n++,t.lineIndent=0;i===32;)t.lineIndent++,i=t.input.charCodeAt(++t.position);else break}return r!==-1&&n!==0&&t.lineIndent<r&&bw(t,"deficient indentation"),n}function kw(t){var e=t.position,r;return r=t.input.charCodeAt(e),!!((r===45||r===46)&&r===t.input.charCodeAt(e+1)&&r===t.input.charCodeAt(e+2)&&(e+=3,r=t.input.charCodeAt(e),r===0||Ls(r)))}function fD(t,e){e===1?t.result+=" ":e>1&&(t.result+=$i.repeat(` | |
| 365 | +`,e-1))}function uAe(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Ls(m)||am(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.charCodeAt(t.position+1),Ls(i)||r&&am(i)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(i=t.input.charCodeAt(t.position+1),Ls(i)||r&&am(i))break}else if(m===35){if(n=t.input.charCodeAt(t.position-1),Ls(n))break}else{if(t.position===t.lineStart&&kw(t)||r&&am(m))break;if(dc(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Ci(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(zh(t,a,s,!1),fD(t,t.line-u),a=s=t.position,l=!1),Nd(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return zh(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function hAe(t,e){var r,n,i;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(zh(t,n,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)n=t.position,t.position++,i=t.position;else return!0;else dc(r)?(zh(t,n,i,!0),fD(t,Ci(t,!1,e)),n=i=t.position):t.position===t.lineStart&&kw(t)?Qt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Qt(t,"unexpected end of the stream within a single quoted scalar")}function fAe(t,e){var r,n,i,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return zh(t,r,t.position,!0),t.position++,!0;if(l===92){if(zh(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),dc(l))Ci(t,!1,e);else if(l<256&&bj[l])t.result+=wj[l],t.position++;else if((s=sAe(l))>0){for(i=s,a=0;i>0;i--)l=t.input.charCodeAt(++t.position),(s=aAe(l))>=0?a=(a<<4)+s:Qt(t,"expected hexadecimal character");t.result+=lAe(a),t.position++}else Qt(t,"unknown escape sequence");r=n=t.position}else dc(l)?(zh(t,r,n,!0),fD(t,Ci(t,!1,e)),r=n=t.position):t.position===t.lineStart&&kw(t)?Qt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Qt(t,"unexpected end of the stream within a double quoted scalar")}function dAe(t,e){var r=!0,n,i,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&Qt(t,"expected the node content, but found ','"):Qt(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),Ls(h)&&(d=p=!0,t.position++,Ci(t,!0,e))),n=t.line,i=t.lineStart,a=t.position,om(t,e,vw,!1,!0),v=t.tag,y=t.result,Ci(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===n)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Ci(t,!0,e),om(t,e,vw,!1,!0),x=t.result),m?sm(t,l,g,v,y,x,n,i,a):d?l.push(sm(t,null,g,v,y,x,n,i,a)):l.push(y),Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}Qt(t,"unexpected end of the stream within a flow collection")}function pAe(t,e){var r,n,i=iD,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)n=!1;else if(d===62)n=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)iD===i?i=d===43?KX:tAe:Qt(t,"repeat of a chomping mode identifier");else if((f=oAe(d))>=0)f===0?Qt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Qt(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(Nd(d)){do d=t.input.charCodeAt(++t.position);while(Nd(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!dc(d)&&d!==0)}for(;d!==0;){for(hD(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndent<l)&&d===32;)t.lineIndent++,d=t.input.charCodeAt(++t.position);if(!s&&t.lineIndent>l&&(l=t.lineIndent),dc(d)){u++;continue}if(t.lineIndent<l){i===KX?t.result+=$i.repeat(` | |
| 366 | +`,a?1+u:u):i===iD&&a&&(t.result+=` | |
| 367 | +`);break}for(n?Nd(d)?(h=!0,t.result+=$i.repeat(` | |
| 368 | +`,a?1+u:u)):h?(h=!1,t.result+=$i.repeat(` | |
| 369 | +`,u+1)):u===0?a&&(t.result+=" "):t.result+=$i.repeat(` | |
| 370 | +`,u):t.result+=$i.repeat(` | |
| 371 | +`,a?1+u:u),a=!0,s=!0,u=0,r=t.position;!dc(d)&&d!==0;)d=t.input.charCodeAt(++t.position);zh(t,r,t.position,!1)}return!0}function tj(t,e){var r,n=t.tag,i=t.anchor,a=[],s,l=!1,u;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=a),u=t.input.charCodeAt(t.position);u!==0&&(t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Qt(t,"tab characters must not be used in indentation")),!(u!==45||(s=t.input.charCodeAt(t.position+1),!Ls(s))));){if(l=!0,t.position++,Ci(t,!0,-1)&&t.lineIndent<=e){a.push(null),u=t.input.charCodeAt(t.position);continue}if(r=t.line,om(t,e,yj,!1,!0),a.push(t.result),Ci(t,!0,-1),u=t.input.charCodeAt(t.position),(t.line===r||t.lineIndent>e)&&u!==0)Qt(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break}return l?(t.tag=n,t.anchor=i,t.kind="sequence",t.result=a,!0):!1}function mAe(t,e,r){var n,i,a,s,l,u,h=t.tag,f=t.anchor,d={},p=Object.create(null),m=null,g=null,y=null,v=!1,x=!1,b;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=d),b=t.input.charCodeAt(t.position);b!==0;){if(!v&&t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Qt(t,"tab characters must not be used in indentation")),n=t.input.charCodeAt(t.position+1),a=t.line,(b===63||b===58)&&Ls(n))b===63?(v&&(sm(t,d,p,m,g,null,s,l,u),m=g=y=null),x=!0,v=!0,i=!0):v?(v=!1,i=!0):Qt(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,b=n;else{if(s=t.line,l=t.lineStart,u=t.position,!om(t,r,gj,!1,!0))break;if(t.line===a){for(b=t.input.charCodeAt(t.position);Nd(b);)b=t.input.charCodeAt(++t.position);if(b===58)b=t.input.charCodeAt(++t.position),Ls(b)||Qt(t,"a whitespace character is expected after the key-value separator within a block mapping"),v&&(sm(t,d,p,m,g,null,s,l,u),m=g=y=null),x=!0,v=!1,i=!1,m=t.tag,g=t.result;else if(x)Qt(t,"can not read an implicit mapping pair; a colon is missed");else return t.tag=h,t.anchor=f,!0}else if(x)Qt(t,"can not read a block mapping entry; a multiline key may not be an implicit key");else return t.tag=h,t.anchor=f,!0}if((t.line===a||t.lineIndent>e)&&(v&&(s=t.line,l=t.lineStart,u=t.position),om(t,e,xw,!0,i)&&(v?g=t.result:y=t.result),v||(sm(t,d,p,m,g,y,s,l,u),m=g=y=null),Ci(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)Qt(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return v&&sm(t,d,p,m,g,null,s,l,u),x&&(t.tag=h,t.anchor=f,t.kind="mapping",t.result=d),x}function gAe(t){var e,r=!1,n=!1,i,a,s;if(s=t.input.charCodeAt(t.position),s!==33)return!1;if(t.tag!==null&&Qt(t,"duplication of a tag property"),s=t.input.charCodeAt(++t.position),s===60?(r=!0,s=t.input.charCodeAt(++t.position)):s===33?(n=!0,i="!!",s=t.input.charCodeAt(++t.position)):i="!",e=t.position,r){do s=t.input.charCodeAt(++t.position);while(s!==0&&s!==62);t.position<t.length?(a=t.input.slice(e,t.position),s=t.input.charCodeAt(++t.position)):Qt(t,"unexpected end of the stream within a verbatim tag")}else{for(;s!==0&&!Ls(s);)s===33&&(n?Qt(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(e-1,t.position+1),vj.test(i)||Qt(t,"named tag handle cannot contain such characters"),n=!0,e=t.position+1)),s=t.input.charCodeAt(++t.position);a=t.input.slice(e,t.position),iAe.test(a)&&Qt(t,"tag suffix cannot contain flow indicator characters")}a&&!xj.test(a)&&Qt(t,"tag name cannot contain such characters: "+a);try{a=decodeURIComponent(a)}catch{Qt(t,"tag name is malformed: "+a)}return r?t.tag=a:Gh.call(t.tagMap,i)?t.tag=t.tagMap[i]+a:i==="!"?t.tag="!"+a:i==="!!"?t.tag="tag:yaml.org,2002:"+a:Qt(t,'undeclared tag handle "'+i+'"'),!0}function yAe(t){var e,r;if(r=t.input.charCodeAt(t.position),r!==38)return!1;for(t.anchor!==null&&Qt(t,"duplication of an anchor property"),r=t.input.charCodeAt(++t.position),e=t.position;r!==0&&!Ls(r)&&!am(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&Qt(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function vAe(t){var e,r,n;if(n=t.input.charCodeAt(t.position),n!==42)return!1;for(n=t.input.charCodeAt(++t.position),e=t.position;n!==0&&!Ls(n)&&!am(n);)n=t.input.charCodeAt(++t.position);return t.position===e&&Qt(t,"name of an alias node must contain at least one character"),r=t.input.slice(e,t.position),Gh.call(t.anchorMap,r)||Qt(t,'unidentified alias "'+r+'"'),t.result=t.anchorMap[r],Ci(t,!0,-1),!0}function om(t,e,r,n,i){var a,s,l,u=1,h=!1,f=!1,d,p,m,g,y,v;if(t.listener!==null&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,a=s=l=xw===r||yj===r,n&&Ci(t,!0,-1)&&(h=!0,t.lineIndent>e?u=1:t.lineIndent===e?u=0:t.lineIndent<e&&(u=-1)),u===1)for(;gAe(t)||yAe(t);)Ci(t,!0,-1)?(h=!0,l=a,t.lineIndent>e?u=1:t.lineIndent===e?u=0:t.lineIndent<e&&(u=-1)):l=!1;if(l&&(l=h||i),(u===1||xw===r)&&(vw===r||gj===r?y=e:y=e+1,v=t.position-t.lineStart,u===1?l&&(tj(t,v)||mAe(t,v,y))||dAe(t,y)?f=!0:(s&&pAe(t,y)||hAe(t,y)||fAe(t,y)?f=!0:vAe(t)?(f=!0,(t.tag!==null||t.anchor!==null)&&Qt(t,"alias node should not have any properties")):uAe(t,y,vw===r)&&(f=!0,t.tag===null&&(t.tag="?")),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):u===0&&(f=l&&tj(t,v))),t.tag===null)t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);else if(t.tag==="?"){for(t.result!==null&&t.kind!=="scalar"&&Qt(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d<p;d+=1)if(g=t.implicitTypes[d],g.resolve(t.result)){t.result=g.construct(t.result),t.tag=g.tag,t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);break}}else if(t.tag!=="!"){if(Gh.call(t.typeMap[t.kind||"fallback"],t.tag))g=t.typeMap[t.kind||"fallback"][t.tag];else for(g=null,m=t.typeMap.multi[t.kind||"fallback"],d=0,p=m.length;d<p;d+=1)if(t.tag.slice(0,m[d].tag.length)===m[d].tag){g=m[d];break}g||Qt(t,"unknown tag !<"+t.tag+">"),t.result!==null&&g.kind!==t.kind&&Qt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Qt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function xAe(t){var e=t.position,r,n,i,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Ci(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!Ls(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(r,t.position),i=[],n.length<1&&Qt(t,"directive name must not be less than one character in length");s!==0;){for(;Nd(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!dc(s));break}if(dc(s))break;for(r=t.position;s!==0&&!Ls(s);)s=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}s!==0&&hD(t),Gh.call(JX,n)?JX[n](t,n,i):bw(t,'unknown document directive "'+n+'"')}if(Ci(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Ci(t,!0,-1)):a&&Qt(t,"directives end mark is expected"),om(t,t.lineIndent-1,xw,!1,!0),Ci(t,!0,-1),t.checkLineBreaks&&nAe.test(t.input.slice(e,t.position))&&bw(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&kw(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Ci(t,!0,-1));return}if(t.position<t.length-1)Qt(t,"end of the stream or a document separator is expected");else return}function kj(t,e){t=String(t),e=e||{},t.length!==0&&(t.charCodeAt(t.length-1)!==10&&t.charCodeAt(t.length-1)!==13&&(t+=` | |
| 372 | +`),t.charCodeAt(0)===65279&&(t=t.slice(1)));var r=new cAe(t,e),n=t.indexOf("\0");for(n!==-1&&(r.position=n,Qt(r,"null byte is not allowed in input")),r.input+="\0";r.input.charCodeAt(r.position)===32;)r.lineIndent+=1,r.position+=1;for(;r.position<r.length-1;)xAe(r);return r.documents}function bAe(t,e,r){e!==null&&typeof e=="object"&&typeof r>"u"&&(r=e,e=null);var n=kj(t,r);if(typeof e!="function")return n;for(var i=0,a=n.length;i<a;i+=1)e(n[i])}function wAe(t,e){var r=kj(t,e);if(r.length!==0){if(r.length===1)return r[0];throw new Ds("expected a single document in the stream, but found more")}}function VAe(t,e){var r,n,i,a,s,l,u;if(e===null)return{};for(r={},n=Object.keys(e),i=0,a=n.length;i<a;i+=1)s=n[i],l=String(e[s]),s.slice(0,2)==="!!"&&(s="tag:yaml.org,2002:"+s.slice(2)),u=t.compiledTypeMap.fallback[s],u&&Cj.call(u.styleAliases,l)&&(l=u.styleAliases[l]),r[s]=l;return r}function UAe(t){var e,r,n;if(e=t.toString(16).toUpperCase(),t<=255)r="x",n=2;else if(t<=65535)r="u",n=4;else if(t<=4294967295)r="U",n=8;else throw new Ds("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+r+$i.repeat("0",n-e.length)+e}function WAe(t){this.schema=t.schema||mj,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=$i.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=VAe(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType=t.quotingType==='"'?c2:HAe,this.forceQuotes=t.forceQuotes||!1,this.replacer=typeof t.replacer=="function"?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function rj(t,e){for(var r=$i.repeat(" ",e),n=0,i=-1,a="",s,l=t.length;n<l;)i=t.indexOf(` | |
| 373 | +`,n),i===-1?(s=t.slice(n),n=l):(s=t.slice(n,i+1),n=i+1),s.length&&s!==` | |
| 374 | +`&&(a+=r),a+=s;return a}function oD(t,e){return` | |
| 375 | +`+$i.repeat(" ",t.indent*e)}function qAe(t,e){var r,n,i;for(r=0,n=t.implicitTypes.length;r<n;r+=1)if(i=t.implicitTypes[r],i.resolve(e))return!0;return!1}function Tw(t){return t===CAe||t===EAe}function u2(t){return 32<=t&&t<=126||161<=t&&t<=55295&&t!==8232&&t!==8233||57344<=t&&t<=65533&&t!==dD||65536<=t&&t<=1114111}function nj(t){return u2(t)&&t!==dD&&t!==SAe&&t!==l2}function ij(t,e,r){var n=nj(t),i=n&&!Tw(t);return(r?n:n&&t!==Aj&&t!==_j&&t!==Dj&&t!==Lj&&t!==Rj)&&t!==sD&&!(e===ww&&!i)||nj(e)&&!Tw(e)&&t===sD||e===ww&&i}function YAe(t){return u2(t)&&t!==dD&&!Tw(t)&&t!==MAe&&t!==PAe&&t!==ww&&t!==Aj&&t!==_j&&t!==Dj&&t!==Lj&&t!==Rj&&t!==sD&&t!==LAe&&t!==NAe&&t!==AAe&&t!==$Ae&&t!==IAe&&t!==OAe&&t!==RAe&&t!==_Ae&&t!==DAe&&t!==BAe&&t!==FAe}function XAe(t){return!Tw(t)&&t!==ww}function s2(t,e){var r=t.charCodeAt(e),n;return r>=55296&&r<=56319&&e+1<t.length&&(n=t.charCodeAt(e+1),n>=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}function Nj(t){var e=/^\n* /;return e.test(t)}function jAe(t,e,r,n,i,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=n!==-1,g=-1,y=YAe(s2(t,0))&&XAe(s2(t,t.length-1));if(e||s)for(u=0;u<t.length;h>=65536?u+=2:u++){if(h=s2(t,u),!u2(h))return im;y=y&&ij(h,f,l),f=h}else{for(u=0;u<t.length;h>=65536?u+=2:u++){if(h=s2(t,u),h===l2)d=!0,m&&(p=p||u-g-1>n&&t[g+1]!==" ",g=u);else if(!u2(h))return im;y=y&&ij(h,f,l),f=h}p=p||m&&u-g-1>n&&t[g+1]!==" "}return!d&&!p?y&&!s&&!i(t)?Mj:a===c2?im:lD:r>9&&Nj(t)?im:s?a===c2?im:lD:p?Oj:Ij}function KAe(t,e,r,n,i){t.dump=function(){if(e.length===0)return t.quotingType===c2?'""':"''";if(!t.noCompatMode&&(zAe.indexOf(e)!==-1||GAe.test(e)))return t.quotingType===c2?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return qAe(t,h)}switch(o(u,"testAmbiguity"),jAe(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!n,i)){case Mj:return e;case lD:return"'"+e.replace(/'/g,"''")+"'";case Ij:return"|"+aj(e,t.indent)+sj(rj(e,a));case Oj:return">"+aj(e,t.indent)+sj(rj(QAe(e,s),a));case im:return'"'+ZAe(e)+'"';default:throw new Ds("impossible error: invalid scalar style")}}()}function aj(t,e){var r=Nj(t)?String(e):"",n=t[t.length-1]===` | |
| 376 | +`,i=n&&(t[t.length-2]===` | |
| 377 | +`||t===` | |
| 378 | +`),a=i?"+":n?"":"-";return r+a+` | |
| 379 | +`}function sj(t){return t[t.length-1]===` | |
| 380 | +`?t.slice(0,-1):t}function QAe(t,e){for(var r=/(\n+)([^\n]*)/g,n=function(){var h=t.indexOf(` | |
| 381 | +`);return h=h!==-1?h:t.length,r.lastIndex=h,oj(t.slice(0,h),e)}(),i=t[0]===` | |
| 382 | +`||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",n+=l+(!i&&!a&&u!==""?` | |
| 383 | +`:"")+oj(u,e),i=a}return n}function oj(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,n,i=0,a,s=0,l=0,u="";n=r.exec(t);)l=n.index,l-i>e&&(a=s>i?s:l,u+=` | |
| 384 | +`+t.slice(i,a),i=a+1),s=l;return u+=` | |
| 385 | +`,t.length-i>e&&s>i?u+=t.slice(i,s)+` | |
| 386 | +`+t.slice(s+1):u+=t.slice(i),u.slice(1)}function ZAe(t){for(var e="",r=0,n,i=0;i<t.length;r>=65536?i+=2:i++)r=s2(t,i),n=Da[r],!n&&u2(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||UAe(r);return e}function JAe(t,e,r){var n="",i=t.tag,a,s,l;for(a=0,s=r.length;a<s;a+=1)l=r[a],t.replacer&&(l=t.replacer.call(r,String(a),l)),(Au(t,e,l,!1,!1)||typeof l>"u"&&Au(t,e,null,!1,!1))&&(n!==""&&(n+=","+(t.condenseFlow?"":" ")),n+=t.dump);t.tag=i,t.dump="["+n+"]"}function lj(t,e,r,n){var i="",a=t.tag,s,l,u;for(s=0,l=r.length;s<l;s+=1)u=r[s],t.replacer&&(u=t.replacer.call(r,String(s),u)),(Au(t,e+1,u,!0,!0,!1,!0)||typeof u>"u"&&Au(t,e+1,null,!0,!0,!1,!0))&&((!n||i!=="")&&(i+=oD(t,e)),t.dump&&l2===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=a,t.dump=i||"[]"}function e8e(t,e,r){var n="",i=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s<l;s+=1)f="",n!==""&&(f+=", "),t.condenseFlow&&(f+='"'),u=a[s],h=r[u],t.replacer&&(h=t.replacer.call(r,u,h)),Au(t,e,u,!1,!1)&&(t.dump.length>1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Au(t,e,h,!1,!1)&&(f+=t.dump,n+=f));t.tag=i,t.dump="{"+n+"}"}function t8e(t,e,r,n){var i="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new Ds("sortKeys must be a boolean or a function");for(l=0,u=s.length;l<u;l+=1)p="",(!n||i!=="")&&(p+=oD(t,e)),h=s[l],f=r[h],t.replacer&&(f=t.replacer.call(r,h,f)),Au(t,e+1,h,!0,!0,!0)&&(d=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,d&&(t.dump&&l2===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=oD(t,e)),Au(t,e+1,f,!0,d)&&(t.dump&&l2===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,i+=p));t.tag=a,t.dump=i||"{}"}function cj(t,e,r){var n,i,a,s,l,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;a<s;a+=1)if(l=i[a],(l.instanceOf||l.predicate)&&(!l.instanceOf||typeof e=="object"&&e instanceof l.instanceOf)&&(!l.predicate||l.predicate(e))){if(r?l.multi&&l.representName?t.tag=l.representName(e):t.tag=l.tag:t.tag="?",l.represent){if(u=t.styleMap[l.tag]||l.defaultStyle,Sj.call(l.represent)==="[object Function]")n=l.represent(e,u);else if(Cj.call(l.represent,u))n=l.represent[u](e,u);else throw new Ds("!<"+l.tag+'> tag resolver accepts not "'+u+'" style');t.dump=n}return!0}return!1}function Au(t,e,r,n,i,a,s){t.tag=null,t.dump=r,cj(t,r,!1)||cj(t,r,!0);var l=Sj.call(t.dump),u=n,h;n&&(n=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(i=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")n&&Object.keys(t.dump).length!==0?(t8e(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(e8e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")n&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?lj(t,e-1,t.dump,i):lj(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(JAe(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&KAe(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Ds("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function r8e(t,e){var r=[],n=[],i,a;for(cD(t,r,n),i=0,a=n.length;i<a;i+=1)e.duplicates.push(r[n[i]]);e.usedDuplicates=new Array(a)}function cD(t,e,r){var n,i,a;if(t!==null&&typeof t=="object")if(i=e.indexOf(t),i!==-1)r.indexOf(i)===-1&&r.push(i);else if(e.push(t),Array.isArray(t))for(i=0,a=t.length;i<a;i+=1)cD(t[i],e,r);else for(n=Object.keys(t),i=0,a=n.length;i<a;i+=1)cD(t[n[i]],e,r)}function n8e(t,e){e=e||{};var r=new WAe(e);r.noRefs||r8e(t,r);var n=t;return r.replacer&&(n=r.replacer.call({"":n},"",n)),Au(r,0,n,!0,!0)?r.dump+` | |
| 387 | +`:""}function pD(t,e){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+e+" instead, which is now safe by default.")}}var HCe,WCe,qCe,YCe,XCe,jCe,$i,Ds,QCe,ZCe,JCe,_a,n7e,i7e,a7e,s7e,o7e,h7e,m7e,T7e,k7e,C7e,D7e,fj,L7e,dj,pj,I7e,P7e,uD,G7e,V7e,U7e,q7e,Y7e,K7e,Q7e,eAe,mj,Gh,vw,gj,yj,xw,iD,tAe,KX,rAe,nAe,iAe,vj,xj,bj,wj,Rd,JX,TAe,kAe,Ej,Sj,Cj,dD,EAe,l2,SAe,CAe,AAe,_Ae,sD,DAe,LAe,RAe,NAe,Aj,MAe,ww,IAe,OAe,PAe,BAe,_j,Dj,FAe,Lj,$Ae,Rj,Da,zAe,GAe,HAe,c2,Mj,lD,Ij,Oj,im,i8e,a8e,lm,cm,okt,lkt,ckt,ukt,hkt,Ew=N(()=>{"use strict";o(uj,"isNothing");o($Ce,"isObject");o(zCe,"toArray");o(GCe,"extend");o(VCe,"repeat");o(UCe,"isNegativeZero");HCe=uj,WCe=$Ce,qCe=zCe,YCe=VCe,XCe=UCe,jCe=GCe,$i={isNothing:HCe,isObject:WCe,toArray:qCe,repeat:YCe,isNegativeZero:XCe,extend:jCe};o(hj,"formatError");o(o2,"YAMLException$1");o2.prototype=Object.create(Error.prototype);o2.prototype.constructor=o2;o2.prototype.toString=o(function(e){return this.name+": "+hj(this,e)},"toString");Ds=o2;o(rD,"getLine");o(nD,"padStart");o(KCe,"makeSnippet");QCe=KCe,ZCe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],JCe=["scalar","sequence","mapping"];o(e7e,"compileStyleAliases");o(t7e,"Type$1");_a=t7e;o(jX,"compileList");o(r7e,"compileMap");o(aD,"Schema$1");aD.prototype.extend=o(function(e){var r=[],n=[];if(e instanceof _a)n.push(e);else if(Array.isArray(e))n=n.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit));else throw new Ds("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof _a))throw new Ds("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Ds("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Ds("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(a){if(!(a instanceof _a))throw new Ds("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(aD.prototype);return i.implicit=(this.implicit||[]).concat(r),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=jX(i,"implicit"),i.compiledExplicit=jX(i,"explicit"),i.compiledTypeMap=r7e(i.compiledImplicit,i.compiledExplicit),i},"extend");n7e=aD,i7e=new _a("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),a7e=new _a("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),s7e=new _a("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),o7e=new n7e({explicit:[i7e,a7e,s7e]});o(l7e,"resolveYamlNull");o(c7e,"constructYamlNull");o(u7e,"isNull");h7e=new _a("tag:yaml.org,2002:null",{kind:"scalar",resolve:l7e,construct:c7e,predicate:u7e,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(f7e,"resolveYamlBoolean");o(d7e,"constructYamlBoolean");o(p7e,"isBoolean");m7e=new _a("tag:yaml.org,2002:bool",{kind:"scalar",resolve:f7e,construct:d7e,predicate:p7e,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(g7e,"isHexCode");o(y7e,"isOctCode");o(v7e,"isDecCode");o(x7e,"resolveYamlInteger");o(b7e,"constructYamlInteger");o(w7e,"isInteger");T7e=new _a("tag:yaml.org,2002:int",{kind:"scalar",resolve:x7e,construct:b7e,predicate:w7e,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),k7e=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(E7e,"resolveYamlFloat");o(S7e,"constructYamlFloat");C7e=/^[-+]?[0-9]+e/;o(A7e,"representYamlFloat");o(_7e,"isFloat");D7e=new _a("tag:yaml.org,2002:float",{kind:"scalar",resolve:E7e,construct:S7e,predicate:_7e,represent:A7e,defaultStyle:"lowercase"}),fj=o7e.extend({implicit:[h7e,m7e,T7e,D7e]}),L7e=fj,dj=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),pj=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]))?))?$");o(R7e,"resolveYamlTimestamp");o(N7e,"constructYamlTimestamp");o(M7e,"representYamlTimestamp");I7e=new _a("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:R7e,construct:N7e,instanceOf:Date,represent:M7e});o(O7e,"resolveYamlMerge");P7e=new _a("tag:yaml.org,2002:merge",{kind:"scalar",resolve:O7e}),uD=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= | |
| 388 | +\r`;o(B7e,"resolveYamlBinary");o(F7e,"constructYamlBinary");o($7e,"representYamlBinary");o(z7e,"isBinary");G7e=new _a("tag:yaml.org,2002:binary",{kind:"scalar",resolve:B7e,construct:F7e,predicate:z7e,represent:$7e}),V7e=Object.prototype.hasOwnProperty,U7e=Object.prototype.toString;o(H7e,"resolveYamlOmap");o(W7e,"constructYamlOmap");q7e=new _a("tag:yaml.org,2002:omap",{kind:"sequence",resolve:H7e,construct:W7e}),Y7e=Object.prototype.toString;o(X7e,"resolveYamlPairs");o(j7e,"constructYamlPairs");K7e=new _a("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:X7e,construct:j7e}),Q7e=Object.prototype.hasOwnProperty;o(Z7e,"resolveYamlSet");o(J7e,"constructYamlSet");eAe=new _a("tag:yaml.org,2002:set",{kind:"mapping",resolve:Z7e,construct:J7e}),mj=L7e.extend({implicit:[I7e,P7e],explicit:[G7e,q7e,K7e,eAe]}),Gh=Object.prototype.hasOwnProperty,vw=1,gj=2,yj=3,xw=4,iD=1,tAe=2,KX=3,rAe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,nAe=/[\x85\u2028\u2029]/,iAe=/[,\[\]\{\}]/,vj=/^(?:!|!!|![a-z\-]+!)$/i,xj=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(QX,"_class");o(dc,"is_EOL");o(Nd,"is_WHITE_SPACE");o(Ls,"is_WS_OR_EOL");o(am,"is_FLOW_INDICATOR");o(aAe,"fromHexCode");o(sAe,"escapedHexLen");o(oAe,"fromDecimalCode");o(ZX,"simpleEscapeSequence");o(lAe,"charFromCodepoint");bj=new Array(256),wj=new Array(256);for(Rd=0;Rd<256;Rd++)bj[Rd]=ZX(Rd)?1:0,wj[Rd]=ZX(Rd);o(cAe,"State$1");o(Tj,"generateError");o(Qt,"throwError");o(bw,"throwWarning");JX={YAML:o(function(e,r,n){var i,a,s;e.version!==null&&Qt(e,"duplication of %YAML directive"),n.length!==1&&Qt(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Qt(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),s=parseInt(i[2],10),a!==1&&Qt(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&bw(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,n){var i,a;n.length!==2&&Qt(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],vj.test(i)||Qt(e,"ill-formed tag handle (first argument) of the TAG directive"),Gh.call(e.tagMap,i)&&Qt(e,'there is a previously declared suffix for "'+i+'" tag handle'),xj.test(a)||Qt(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{Qt(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a},"handleTagDirective")};o(zh,"captureSegment");o(ej,"mergeMappings");o(sm,"storeMappingPair");o(hD,"readLineBreak");o(Ci,"skipSeparationSpace");o(kw,"testDocumentSeparator");o(fD,"writeFoldedLines");o(uAe,"readPlainScalar");o(hAe,"readSingleQuotedScalar");o(fAe,"readDoubleQuotedScalar");o(dAe,"readFlowCollection");o(pAe,"readBlockScalar");o(tj,"readBlockSequence");o(mAe,"readBlockMapping");o(gAe,"readTagProperty");o(yAe,"readAnchorProperty");o(vAe,"readAlias");o(om,"composeNode");o(xAe,"readDocument");o(kj,"loadDocuments");o(bAe,"loadAll$1");o(wAe,"load$1");TAe=bAe,kAe=wAe,Ej={loadAll:TAe,load:kAe},Sj=Object.prototype.toString,Cj=Object.prototype.hasOwnProperty,dD=65279,EAe=9,l2=10,SAe=13,CAe=32,AAe=33,_Ae=34,sD=35,DAe=37,LAe=38,RAe=39,NAe=42,Aj=44,MAe=45,ww=58,IAe=61,OAe=62,PAe=63,BAe=64,_j=91,Dj=93,FAe=96,Lj=123,$Ae=124,Rj=125,Da={};Da[0]="\\0";Da[7]="\\a";Da[8]="\\b";Da[9]="\\t";Da[10]="\\n";Da[11]="\\v";Da[12]="\\f";Da[13]="\\r";Da[27]="\\e";Da[34]='\\"';Da[92]="\\\\";Da[133]="\\N";Da[160]="\\_";Da[8232]="\\L";Da[8233]="\\P";zAe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],GAe=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(VAe,"compileStyleMap");o(UAe,"encodeHex");HAe=1,c2=2;o(WAe,"State");o(rj,"indentString");o(oD,"generateNextLine");o(qAe,"testImplicitResolving");o(Tw,"isWhitespace");o(u2,"isPrintable");o(nj,"isNsCharOrWhitespace");o(ij,"isPlainSafe");o(YAe,"isPlainSafeFirst");o(XAe,"isPlainSafeLast");o(s2,"codePointAt");o(Nj,"needIndentIndicator");Mj=1,lD=2,Ij=3,Oj=4,im=5;o(jAe,"chooseScalarStyle");o(KAe,"writeScalar");o(aj,"blockHeader");o(sj,"dropEndingNewline");o(QAe,"foldString");o(oj,"foldLine");o(ZAe,"escapeString");o(JAe,"writeFlowSequence");o(lj,"writeBlockSequence");o(e8e,"writeFlowMapping");o(t8e,"writeBlockMapping");o(cj,"detectType");o(Au,"writeNode");o(r8e,"getDuplicateReferences");o(cD,"inspectNode");o(n8e,"dump$1");i8e=n8e,a8e={dump:i8e};o(pD,"renamed");lm=fj,cm=Ej.load,okt=Ej.loadAll,lkt=a8e.dump,ckt=pD("safeLoad","load"),ukt=pD("safeLoadAll","loadAll"),hkt=pD("safeDump","dump")});function vD(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function Gj(t){Id=t}function nn(t,e=""){let r=typeof t=="string"?t:t.source,n={replace:o((i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(ts.caret,"$1"),r=r.replace(i,s),n},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return n}function pc(t,e){if(e){if(ts.escapeTest.test(t))return t.replace(ts.escapeReplace,Bj)}else if(ts.escapeTestNoEncode.test(t))return t.replace(ts.escapeReplaceNoEncode,Bj);return t}function Fj(t){try{t=encodeURI(t).replace(ts.percentDecode,"%")}catch{return null}return t}function $j(t,e){let r=t.replace(ts.findPipe,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),n=r.split(ts.splitPipe),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push("");for(;i<n.length;i++)n[i]=n[i].trim().replace(ts.slashPipe,"|");return n}function f2(t,e,r){let n=t.length;if(n===0)return"";let i=0;for(;i<n&&t.charAt(n-i-1)===e;)i++;return t.slice(0,n-i)}function $8e(t,e){if(t.indexOf(e[1])===-1)return-1;let r=0;for(let n=0;n<t.length;n++)if(t[n]==="\\")n++;else if(t[n]===e[0])r++;else if(t[n]===e[1]&&(r--,r<0))return n;return-1}function zj(t,e,r,n,i){let a=e.href,s=e.title||null,l=t[1].replace(i.other.outputLinkReplace,"$1");if(t[0].charAt(0)!=="!"){n.state.inLink=!0;let u={type:"link",raw:r,href:a,title:s,text:l,tokens:n.inlineTokens(l)};return n.state.inLink=!1,u}return{type:"image",raw:r,href:a,title:s,text:l}}function z8e(t,e,r){let n=t.match(r.other.indentCodeCompensation);if(n===null)return e;let i=n[1];return e.split(` | |
| 389 | +`).map(a=>{let s=a.match(r.other.beginningSpace);if(s===null)return a;let[l]=s;return l.length>=i.length?a.slice(i.length):a}).join(` | |
| 390 | +`)}function Jr(t,e){return Md.parse(t,e)}var Id,d2,ts,s8e,o8e,l8e,m2,c8e,xD,Vj,Uj,u8e,bD,h8e,wD,f8e,d8e,Aw,TD,p8e,Hj,m8e,kD,Pj,g8e,y8e,v8e,x8e,Wj,b8e,_w,ED,qj,w8e,Yj,T8e,k8e,E8e,Xj,S8e,C8e,jj,A8e,_8e,D8e,L8e,R8e,N8e,M8e,Cw,I8e,Kj,Qj,O8e,SD,P8e,gD,B8e,Sw,h2,F8e,Bj,hm,Al,fm,p2,_l,um,yD,Md,dkt,pkt,mkt,gkt,ykt,vkt,xkt,Zj=N(()=>{"use strict";o(vD,"_getDefaults");Id=vD();o(Gj,"changeDefaults");d2={exec:o(()=>null,"exec")};o(nn,"edit");ts={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:o(t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),"listItemRegex"),nextBulletRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),"nextBulletRegex"),hrRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),"hrRegex"),fencesBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),"fencesBeginRegex"),headingBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),"headingBeginRegex"),htmlBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),"htmlBeginRegex")},s8e=/^(?:[ \t]*(?:\n|$))+/,o8e=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,l8e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,m2=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,c8e=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,xD=/(?:[*+-]|\d{1,9}[.)])/,Vj=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Uj=nn(Vj).replace(/bull/g,xD).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),u8e=nn(Vj).replace(/bull/g,xD).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),bD=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,h8e=/^[^\n]+/,wD=/(?!\s*\])(?:\\.|[^\[\]\\])+/,f8e=nn(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",wD).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),d8e=nn(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,xD).getRegex(),Aw="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",TD=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,p8e=nn("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",TD).replace("tag",Aw).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Hj=nn(bD).replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex(),m8e=nn(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Hj).getRegex(),kD={blockquote:m8e,code:o8e,def:f8e,fences:l8e,heading:c8e,hr:m2,html:p8e,lheading:Uj,list:d8e,newline:s8e,paragraph:Hj,table:d2,text:h8e},Pj=nn("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex(),g8e={...kD,lheading:u8e,table:Pj,paragraph:nn(bD).replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Pj).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex()},y8e={...kD,html:nn(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",TD).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:d2,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:nn(bD).replace("hr",m2).replace("heading",` *#{1,6} *[^ | |
| 391 | +]`).replace("lheading",Uj).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},v8e=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,x8e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Wj=/^( {2,}|\\)\n(?!\s*$)/,b8e=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,_w=/[\p{P}\p{S}]/u,ED=/[\s\p{P}\p{S}]/u,qj=/[^\s\p{P}\p{S}]/u,w8e=nn(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,ED).getRegex(),Yj=/(?!~)[\p{P}\p{S}]/u,T8e=/(?!~)[\s\p{P}\p{S}]/u,k8e=/(?:[^\s\p{P}\p{S}]|~)/u,E8e=/\[[^[\]]*?\]\((?:\\.|[^\\\(\)]|\((?:\\.|[^\\\(\)])*\))*\)|`[^`]*?`|<[^<>]*?>/g,Xj=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,S8e=nn(Xj,"u").replace(/punct/g,_w).getRegex(),C8e=nn(Xj,"u").replace(/punct/g,Yj).getRegex(),jj="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",A8e=nn(jj,"gu").replace(/notPunctSpace/g,qj).replace(/punctSpace/g,ED).replace(/punct/g,_w).getRegex(),_8e=nn(jj,"gu").replace(/notPunctSpace/g,k8e).replace(/punctSpace/g,T8e).replace(/punct/g,Yj).getRegex(),D8e=nn("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,qj).replace(/punctSpace/g,ED).replace(/punct/g,_w).getRegex(),L8e=nn(/\\(punct)/,"gu").replace(/punct/g,_w).getRegex(),R8e=nn(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),N8e=nn(TD).replace("(?:-->|$)","-->").getRegex(),M8e=nn("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",N8e).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Cw=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,I8e=nn(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",Cw).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Kj=nn(/^!?\[(label)\]\[(ref)\]/).replace("label",Cw).replace("ref",wD).getRegex(),Qj=nn(/^!?\[(ref)\](?:\[\])?/).replace("ref",wD).getRegex(),O8e=nn("reflink|nolink(?!\\()","g").replace("reflink",Kj).replace("nolink",Qj).getRegex(),SD={_backpedal:d2,anyPunctuation:L8e,autolink:R8e,blockSkip:E8e,br:Wj,code:x8e,del:d2,emStrongLDelim:S8e,emStrongRDelimAst:A8e,emStrongRDelimUnd:D8e,escape:v8e,link:I8e,nolink:Qj,punctuation:w8e,reflink:Kj,reflinkSearch:O8e,tag:M8e,text:b8e,url:d2},P8e={...SD,link:nn(/^!?\[(label)\]\((.*?)\)/).replace("label",Cw).getRegex(),reflink:nn(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Cw).getRegex()},gD={...SD,emStrongRDelimAst:_8e,emStrongLDelim:C8e,url:nn(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},B8e={...gD,br:nn(Wj).replace("{2,}","*").getRegex(),text:nn(gD.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},Sw={normal:kD,gfm:g8e,pedantic:y8e},h2={normal:SD,gfm:gD,breaks:B8e,pedantic:P8e},F8e={"&":"&","<":"<",">":">",'"':""","'":"'"},Bj=o(t=>F8e[t],"getEscapeReplacement");o(pc,"escape");o(Fj,"cleanUrl");o($j,"splitCells");o(f2,"rtrim");o($8e,"findClosingBracket");o(zj,"outputLink");o(z8e,"indentCodeCompensation");hm=class{static{o(this,"_Tokenizer")}options;rules;lexer;constructor(e){this.options=e||Id}space(e){let r=this.rules.block.newline.exec(e);if(r&&r[0].length>0)return{type:"space",raw:r[0]}}code(e){let r=this.rules.block.code.exec(e);if(r){let n=r[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:r[0],codeBlockStyle:"indented",text:this.options.pedantic?n:f2(n,` | |
| 392 | +`)}}}fences(e){let r=this.rules.block.fences.exec(e);if(r){let n=r[0],i=z8e(n,r[3]||"",this.rules);return{type:"code",raw:n,lang:r[2]?r[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):r[2],text:i}}}heading(e){let r=this.rules.block.heading.exec(e);if(r){let n=r[2].trim();if(this.rules.other.endingHash.test(n)){let i=f2(n,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(n=i.trim())}return{type:"heading",raw:r[0],depth:r[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let r=this.rules.block.hr.exec(e);if(r)return{type:"hr",raw:f2(r[0],` | |
| 393 | +`)}}blockquote(e){let r=this.rules.block.blockquote.exec(e);if(r){let n=f2(r[0],` | |
| 394 | +`).split(` | |
| 395 | +`),i="",a="",s=[];for(;n.length>0;){let l=!1,u=[],h;for(h=0;h<n.length;h++)if(this.rules.other.blockquoteStart.test(n[h]))u.push(n[h]),l=!0;else if(!l)u.push(n[h]);else break;n=n.slice(h);let f=u.join(` | |
| 396 | +`),d=f.replace(this.rules.other.blockquoteSetextReplace,` | |
| 397 | + $1`).replace(this.rules.other.blockquoteSetextReplace2,"");i=i?`${i} | |
| 398 | +${f}`:f,a=a?`${a} | |
| 399 | +${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,s,!0),this.lexer.state.top=p,n.length===0)break;let m=s.at(-1);if(m?.type==="code")break;if(m?.type==="blockquote"){let g=m,y=g.raw+` | |
| 400 | +`+n.join(` | |
| 401 | +`),v=this.blockquote(y);s[s.length-1]=v,i=i.substring(0,i.length-g.raw.length)+v.raw,a=a.substring(0,a.length-g.text.length)+v.text;break}else if(m?.type==="list"){let g=m,y=g.raw+` | |
| 402 | +`+n.join(` | |
| 403 | +`),v=this.list(y);s[s.length-1]=v,i=i.substring(0,i.length-m.raw.length)+v.raw,a=a.substring(0,a.length-g.raw.length)+v.raw,n=y.substring(s.at(-1).raw.length).split(` | |
| 404 | +`);continue}}return{type:"blockquote",raw:i,tokens:s,text:a}}}list(e){let r=this.rules.block.list.exec(e);if(r){let n=r[1].trim(),i=n.length>1,a={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let s=this.rules.other.listItemRegex(n),l=!1;for(;e;){let h=!1,f="",d="";if(!(r=s.exec(e))||this.rules.block.hr.test(e))break;f=r[0],e=e.substring(f.length);let p=r[2].split(` | |
| 405 | +`,1)[0].replace(this.rules.other.listReplaceTabs,b=>" ".repeat(3*b.length)),m=e.split(` | |
| 406 | +`,1)[0],g=!p.trim(),y=0;if(this.options.pedantic?(y=2,d=p.trimStart()):g?y=r[1].length+1:(y=r[2].search(this.rules.other.nonSpaceChar),y=y>4?1:y,d=p.slice(y),y+=r[1].length),g&&this.rules.other.blankLine.test(m)&&(f+=m+` | |
| 407 | +`,e=e.substring(m.length+1),h=!0),!h){let b=this.rules.other.nextBulletRegex(y),w=this.rules.other.hrRegex(y),C=this.rules.other.fencesBeginRegex(y),T=this.rules.other.headingBeginRegex(y),E=this.rules.other.htmlBeginRegex(y);for(;e;){let A=e.split(` | |
| 408 | +`,1)[0],S;if(m=A,this.options.pedantic?(m=m.replace(this.rules.other.listReplaceNesting," "),S=m):S=m.replace(this.rules.other.tabCharGlobal," "),C.test(m)||T.test(m)||E.test(m)||b.test(m)||w.test(m))break;if(S.search(this.rules.other.nonSpaceChar)>=y||!m.trim())d+=` | |
| 409 | +`+S.slice(y);else{if(g||p.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||C.test(p)||T.test(p)||w.test(p))break;d+=` | |
| 410 | +`+m}!g&&!m.trim()&&(g=!0),f+=A+` | |
| 411 | +`,e=e.substring(A.length+1),p=S.slice(y)}}a.loose||(l?a.loose=!0:this.rules.other.doubleBlankLine.test(f)&&(l=!0));let v=null,x;this.options.gfm&&(v=this.rules.other.listIsTask.exec(d),v&&(x=v[0]!=="[ ] ",d=d.replace(this.rules.other.listReplaceTask,""))),a.items.push({type:"list_item",raw:f,task:!!v,checked:x,loose:!1,text:d,tokens:[]}),a.raw+=f}let u=a.items.at(-1);if(u)u.raw=u.raw.trimEnd(),u.text=u.text.trimEnd();else return;a.raw=a.raw.trimEnd();for(let h=0;h<a.items.length;h++)if(this.lexer.state.top=!1,a.items[h].tokens=this.lexer.blockTokens(a.items[h].text,[]),!a.loose){let f=a.items[h].tokens.filter(p=>p.type==="space"),d=f.length>0&&f.some(p=>this.rules.other.anyLine.test(p.raw));a.loose=d}if(a.loose)for(let h=0;h<a.items.length;h++)a.items[h].loose=!0;return a}}html(e){let r=this.rules.block.html.exec(e);if(r)return{type:"html",block:!0,raw:r[0],pre:r[1]==="pre"||r[1]==="script"||r[1]==="style",text:r[0]}}def(e){let r=this.rules.block.def.exec(e);if(r){let n=r[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),i=r[2]?r[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",a=r[3]?r[3].substring(1,r[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):r[3];return{type:"def",tag:n,raw:r[0],href:i,title:a}}}table(e){let r=this.rules.block.table.exec(e);if(!r||!this.rules.other.tableDelimiter.test(r[2]))return;let n=$j(r[1]),i=r[2].replace(this.rules.other.tableAlignChars,"").split("|"),a=r[3]?.trim()?r[3].replace(this.rules.other.tableRowBlankLine,"").split(` | |
| 412 | +`):[],s={type:"table",raw:r[0],header:[],align:[],rows:[]};if(n.length===i.length){for(let l of i)this.rules.other.tableAlignRight.test(l)?s.align.push("right"):this.rules.other.tableAlignCenter.test(l)?s.align.push("center"):this.rules.other.tableAlignLeft.test(l)?s.align.push("left"):s.align.push(null);for(let l=0;l<n.length;l++)s.header.push({text:n[l],tokens:this.lexer.inline(n[l]),header:!0,align:s.align[l]});for(let l of a)s.rows.push($j(l,s.header.length).map((u,h)=>({text:u,tokens:this.lexer.inline(u),header:!1,align:s.align[h]})));return s}}lheading(e){let r=this.rules.block.lheading.exec(e);if(r)return{type:"heading",raw:r[0],depth:r[2].charAt(0)==="="?1:2,text:r[1],tokens:this.lexer.inline(r[1])}}paragraph(e){let r=this.rules.block.paragraph.exec(e);if(r){let n=r[1].charAt(r[1].length-1)===` | |
| 413 | +`?r[1].slice(0,-1):r[1];return{type:"paragraph",raw:r[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let r=this.rules.block.text.exec(e);if(r)return{type:"text",raw:r[0],text:r[0],tokens:this.lexer.inline(r[0])}}escape(e){let r=this.rules.inline.escape.exec(e);if(r)return{type:"escape",raw:r[0],text:r[1]}}tag(e){let r=this.rules.inline.tag.exec(e);if(r)return!this.lexer.state.inLink&&this.rules.other.startATag.test(r[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(r[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(r[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(r[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:r[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:r[0]}}link(e){let r=this.rules.inline.link.exec(e);if(r){let n=r[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=f2(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=$8e(r[2],"()");if(s>-1){let u=(r[0].indexOf("!")===0?5:4)+r[1].length+s;r[2]=r[2].substring(0,s),r[0]=r[0].substring(0,u).trim(),r[3]=""}}let i=r[2],a="";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(i);s&&(i=s[1],a=s[3])}else a=r[3]?r[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?i=i.slice(1):i=i.slice(1,-1)),zj(r,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},r[0],this.lexer,this.rules)}}reflink(e,r){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),a=r[i.toLowerCase()];if(!a){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return zj(n,a,n[0],this.lexer,this.rules)}}emStrong(e,r,n=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!i||i[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(i[1]||i[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...i[0]].length-1,l,u,h=s,f=0,d=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,r=r.slice(-1*e.length+s);(i=d.exec(r))!=null;){if(l=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!l)continue;if(u=[...l].length,i[3]||i[4]){h+=u;continue}else if((i[5]||i[6])&&s%3&&!((s+u)%3)){f+=u;continue}if(h-=u,h>0)continue;u=Math.min(u,u+h+f);let p=[...i[0]][0].length,m=e.slice(0,s+i.index+p+u);if(Math.min(s,u)%2){let y=m.slice(1,-1);return{type:"em",raw:m,text:y,tokens:this.lexer.inlineTokens(y)}}let g=m.slice(2,-2);return{type:"strong",raw:m,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(e){let r=this.rules.inline.code.exec(e);if(r){let n=r[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(n),a=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return i&&a&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:r[0],text:n}}}br(e){let r=this.rules.inline.br.exec(e);if(r)return{type:"br",raw:r[0]}}del(e){let r=this.rules.inline.del.exec(e);if(r)return{type:"del",raw:r[0],text:r[2],tokens:this.lexer.inlineTokens(r[2])}}autolink(e){let r=this.rules.inline.autolink.exec(e);if(r){let n,i;return r[2]==="@"?(n=r[1],i="mailto:"+n):(n=r[1],i=n),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let r;if(r=this.rules.inline.url.exec(e)){let n,i;if(r[2]==="@")n=r[0],i="mailto:"+n;else{let a;do a=r[0],r[0]=this.rules.inline._backpedal.exec(r[0])?.[0]??"";while(a!==r[0]);n=r[0],r[1]==="www."?i="http://"+r[0]:i=r[0]}return{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let r=this.rules.inline.text.exec(e);if(r){let n=this.lexer.state.inRawBlock;return{type:"text",raw:r[0],text:r[0],escaped:n}}}},Al=class t{static{o(this,"_Lexer")}tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Id,this.options.tokenizer=this.options.tokenizer||new hm,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let r={other:ts,block:Sw.normal,inline:h2.normal};this.options.pedantic?(r.block=Sw.pedantic,r.inline=h2.pedantic):this.options.gfm&&(r.block=Sw.gfm,this.options.breaks?r.inline=h2.breaks:r.inline=h2.gfm),this.tokenizer.rules=r}static get rules(){return{block:Sw,inline:h2}}static lex(e,r){return new t(r).lex(e)}static lexInline(e,r){return new t(r).inlineTokens(e)}lex(e){e=e.replace(ts.carriageReturn,` | |
| 414 | +`),this.blockTokens(e,this.tokens);for(let r=0;r<this.inlineQueue.length;r++){let n=this.inlineQueue[r];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,r=[],n=!1){for(this.options.pedantic&&(e=e.replace(ts.tabCharGlobal," ").replace(ts.spaceLine,""));e;){let i;if(this.options.extensions?.block?.some(s=>(i=s.call({lexer:this},e,r))?(e=e.substring(i.raw.length),r.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let s=r.at(-1);i.raw.length===1&&s!==void 0?s.raw+=` | |
| 415 | +`:r.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=` | |
| 416 | +`+i.raw,s.text+=` | |
| 417 | +`+i.text,this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=` | |
| 418 | +`+i.raw,s.text+=` | |
| 419 | +`+i.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title});continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),r.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let s=1/0,l=e.slice(1),u;this.options.extensions.startBlock.forEach(h=>{u=h.call({lexer:this},l),typeof u=="number"&&u>=0&&(s=Math.min(s,u))}),s<1/0&&s>=0&&(a=e.substring(0,s+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let s=r.at(-1);n&&s?.type==="paragraph"?(s.raw+=` | |
| 420 | +`+i.raw,s.text+=` | |
| 421 | +`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i),n=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="text"?(s.raw+=` | |
| 422 | +`+i.raw,s.text+=` | |
| 423 | +`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let n=e,i=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(i=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)l.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(i=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(i=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,i.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let a=!1,s="";for(;e;){a||(s=""),a=!1;let l;if(this.options.extensions?.inline?.some(h=>(l=h.call({lexer:this},e,r))?(e=e.substring(l.raw.length),r.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let h=r.at(-1);l.type==="text"&&h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(l=this.tokenizer.emStrong(e,n,s)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.del(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),r.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),r.push(l);continue}let u=e;if(this.options.extensions?.startInline){let h=1/0,f=e.slice(1),d;this.options.extensions.startInline.forEach(p=>{d=p.call({lexer:this},f),typeof d=="number"&&d>=0&&(h=Math.min(h,d))}),h<1/0&&h>=0&&(u=e.substring(0,h+1))}if(l=this.tokenizer.inlineText(u)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(s=l.raw.slice(-1)),a=!0;let h=r.at(-1);h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(e){let h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return r}},fm=class{static{o(this,"_Renderer")}options;parser;constructor(e){this.options=e||Id}space(e){return""}code({text:e,lang:r,escaped:n}){let i=(r||"").match(ts.notSpaceStart)?.[0],a=e.replace(ts.endingNewline,"")+` | |
| 424 | +`;return i?'<pre><code class="language-'+pc(i)+'">'+(n?a:pc(a,!0))+`</code></pre> | |
| 425 | +`:"<pre><code>"+(n?a:pc(a,!0))+`</code></pre> | |
| 426 | +`}blockquote({tokens:e}){return`<blockquote> | |
| 427 | +${this.parser.parse(e)}</blockquote> | |
| 428 | +`}html({text:e}){return e}heading({tokens:e,depth:r}){return`<h${r}>${this.parser.parseInline(e)}</h${r}> | |
| 429 | +`}hr(e){return`<hr> | |
| 430 | +`}list(e){let r=e.ordered,n=e.start,i="";for(let l=0;l<e.items.length;l++){let u=e.items[l];i+=this.listitem(u)}let a=r?"ol":"ul",s=r&&n!==1?' start="'+n+'"':"";return"<"+a+s+`> | |
| 431 | +`+i+"</"+a+`> | |
| 432 | +`}listitem(e){let r="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+pc(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:!0}):r+=n+" "}return r+=this.parser.parse(e.tokens,!!e.loose),`<li>${r}</li> | |
| 433 | +`}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p> | |
| 434 | +`}table(e){let r="",n="";for(let a=0;a<e.header.length;a++)n+=this.tablecell(e.header[a]);r+=this.tablerow({text:n});let i="";for(let a=0;a<e.rows.length;a++){let s=e.rows[a];n="";for(let l=0;l<s.length;l++)n+=this.tablecell(s[l]);i+=this.tablerow({text:n})}return i&&(i=`<tbody>${i}</tbody>`),`<table> | |
| 435 | +<thead> | |
| 436 | +`+r+`</thead> | |
| 437 | +`+i+`</table> | |
| 438 | +`}tablerow({text:e}){return`<tr> | |
| 439 | +${e}</tr> | |
| 440 | +`}tablecell(e){let r=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+r+`</${n}> | |
| 441 | +`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${pc(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:r,tokens:n}){let i=this.parser.parseInline(n),a=Fj(e);if(a===null)return i;e=a;let s='<a href="'+e+'"';return r&&(s+=' title="'+pc(r)+'"'),s+=">"+i+"</a>",s}image({href:e,title:r,text:n}){let i=Fj(e);if(i===null)return pc(n);e=i;let a=`<img src="${e}" alt="${n}"`;return r&&(a+=` title="${pc(r)}"`),a+=">",a}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:pc(e.text)}},p2=class{static{o(this,"_TextRenderer")}strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}},_l=class t{static{o(this,"_Parser")}options;renderer;textRenderer;constructor(e){this.options=e||Id,this.options.renderer=this.options.renderer||new fm,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new p2}static parse(e,r){return new t(r).parse(e)}static parseInline(e,r){return new t(r).parseInline(e)}parse(e,r=!0){let n="";for(let i=0;i<e.length;i++){let a=e[i];if(this.options.extensions?.renderers?.[a.type]){let l=a,u=this.options.extensions.renderers[l.type].call({parser:this},l);if(u!==!1||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(l.type)){n+=u||"";continue}}let s=a;switch(s.type){case"space":{n+=this.renderer.space(s);continue}case"hr":{n+=this.renderer.hr(s);continue}case"heading":{n+=this.renderer.heading(s);continue}case"code":{n+=this.renderer.code(s);continue}case"table":{n+=this.renderer.table(s);continue}case"blockquote":{n+=this.renderer.blockquote(s);continue}case"list":{n+=this.renderer.list(s);continue}case"html":{n+=this.renderer.html(s);continue}case"paragraph":{n+=this.renderer.paragraph(s);continue}case"text":{let l=s,u=this.renderer.text(l);for(;i+1<e.length&&e[i+1].type==="text";)l=e[++i],u+=` | |
| 442 | +`+this.renderer.text(l);r?n+=this.renderer.paragraph({type:"paragraph",raw:u,text:u,tokens:[{type:"text",raw:u,text:u,escaped:!0}]}):n+=u;continue}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return n}parseInline(e,r=this.renderer){let n="";for(let i=0;i<e.length;i++){let a=e[i];if(this.options.extensions?.renderers?.[a.type]){let l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(a.type)){n+=l||"";continue}}let s=a;switch(s.type){case"escape":{n+=r.text(s);break}case"html":{n+=r.html(s);break}case"link":{n+=r.link(s);break}case"image":{n+=r.image(s);break}case"strong":{n+=r.strong(s);break}case"em":{n+=r.em(s);break}case"codespan":{n+=r.codespan(s);break}case"br":{n+=r.br(s);break}case"del":{n+=r.del(s);break}case"text":{n+=r.text(s);break}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return n}},um=class{static{o(this,"_Hooks")}options;block;constructor(e){this.options=e||Id}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}provideLexer(){return this.block?Al.lex:Al.lexInline}provideParser(){return this.block?_l.parse:_l.parseInline}},yD=class{static{o(this,"Marked")}defaults=vD();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=_l;Renderer=fm;TextRenderer=p2;Lexer=Al;Tokenizer=hm;Hooks=um;constructor(...e){this.use(...e)}walkTokens(e,r){let n=[];for(let i of e)switch(n=n.concat(r.call(this,i)),i.type){case"table":{let a=i;for(let s of a.header)n=n.concat(this.walkTokens(s.tokens,r));for(let s of a.rows)for(let l of s)n=n.concat(this.walkTokens(l.tokens,r));break}case"list":{let a=i;n=n.concat(this.walkTokens(a.items,r));break}default:{let a=i;this.defaults.extensions?.childTokens?.[a.type]?this.defaults.extensions.childTokens[a.type].forEach(s=>{let l=a[s].flat(1/0);n=n.concat(this.walkTokens(l,r))}):a.tokens&&(n=n.concat(this.walkTokens(a.tokens,r)))}}return n}use(...e){let r=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){let s=r.renderers[a.name];s?r.renderers[a.name]=function(...l){let u=a.renderer.apply(this,l);return u===!1&&(u=s.apply(this,l)),u}:r.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=r[a.level];s?s.unshift(a.tokenizer):r[a.level]=[a.tokenizer],a.start&&(a.level==="block"?r.startBlock?r.startBlock.push(a.start):r.startBlock=[a.start]:a.level==="inline"&&(r.startInline?r.startInline.push(a.start):r.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(r.childTokens[a.name]=a.childTokens)}),i.extensions=r),n.renderer){let a=this.defaults.renderer||new fm(this.defaults);for(let s in n.renderer){if(!(s in a))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let l=s,u=n.renderer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d||""}}i.renderer=a}if(n.tokenizer){let a=this.defaults.tokenizer||new hm(this.defaults);for(let s in n.tokenizer){if(!(s in a))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let l=s,u=n.tokenizer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.tokenizer=a}if(n.hooks){let a=this.defaults.hooks||new um;for(let s in n.hooks){if(!(s in a))throw new Error(`hook '${s}' does not exist`);if(["options","block"].includes(s))continue;let l=s,u=n.hooks[l],h=a[l];um.passThroughHooks.has(s)?a[l]=f=>{if(this.defaults.async)return Promise.resolve(u.call(a,f)).then(p=>h.call(a,p));let d=u.call(a,f);return h.call(a,d)}:a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.hooks=a}if(n.walkTokens){let a=this.defaults.walkTokens,s=n.walkTokens;i.walkTokens=function(l){let u=[];return u.push(s.call(this,l)),a&&(u=u.concat(a.call(this,l))),u}}this.defaults={...this.defaults,...i}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,r){return Al.lex(e,r??this.defaults)}parser(e,r){return _l.parse(e,r??this.defaults)}parseMarkdown(e){return o((n,i)=>{let a={...i},s={...this.defaults,...a},l=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&a.async===!1)return l(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let u=s.hooks?s.hooks.provideLexer():e?Al.lex:Al.lexInline,h=s.hooks?s.hooks.provideParser():e?_l.parse:_l.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(f=>u(f,s)).then(f=>s.hooks?s.hooks.processAllTokens(f):f).then(f=>s.walkTokens?Promise.all(this.walkTokens(f,s.walkTokens)).then(()=>f):f).then(f=>h(f,s)).then(f=>s.hooks?s.hooks.postprocess(f):f).catch(l);try{s.hooks&&(n=s.hooks.preprocess(n));let f=u(n,s);s.hooks&&(f=s.hooks.processAllTokens(f)),s.walkTokens&&this.walkTokens(f,s.walkTokens);let d=h(f,s);return s.hooks&&(d=s.hooks.postprocess(d)),d}catch(f){return l(f)}},"parse")}onError(e,r){return n=>{if(n.message+=` | |
| 443 | +Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+pc(n.message+"",!0)+"</pre>";return r?Promise.resolve(i):i}if(r)return Promise.reject(n);throw n}}},Md=new yD;o(Jr,"marked");Jr.options=Jr.setOptions=function(t){return Md.setOptions(t),Jr.defaults=Md.defaults,Gj(Jr.defaults),Jr};Jr.getDefaults=vD;Jr.defaults=Id;Jr.use=function(...t){return Md.use(...t),Jr.defaults=Md.defaults,Gj(Jr.defaults),Jr};Jr.walkTokens=function(t,e){return Md.walkTokens(t,e)};Jr.parseInline=Md.parseInline;Jr.Parser=_l;Jr.parser=_l.parse;Jr.Renderer=fm;Jr.TextRenderer=p2;Jr.Lexer=Al;Jr.lexer=Al.lex;Jr.Tokenizer=hm;Jr.Hooks=um;Jr.parse=Jr;dkt=Jr.options,pkt=Jr.setOptions,mkt=Jr.use,gkt=Jr.walkTokens,ykt=Jr.parseInline,vkt=_l.parse,xkt=Al.lex});function G8e(t,{markdownAutoWrap:e}){let n=t.replace(/<br\/>/g,` | |
| 444 | +`).replace(/\n{2,}/g,` | |
| 445 | +`),i=B4(n);return e===!1?i.replace(/ /g," "):i}function Jj(t,e={}){let r=G8e(t,e),n=Jr.lexer(r),i=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` | |
| 446 | +`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),n.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}),i}function eK(t,{markdownAutoWrap:e}={}){let r=Jr.lexer(t);function n(i){return i.type==="text"?e===!1?i.text.replace(/\n */g,"<br/>").replace(/ /g," "):i.text.replace(/\n */g,"<br/>"):i.type==="strong"?`<strong>${i.tokens?.map(n).join("")}</strong>`:i.type==="em"?`<em>${i.tokens?.map(n).join("")}</em>`:i.type==="paragraph"?`<p>${i.tokens?.map(n).join("")}</p>`:i.type==="space"?"":i.type==="html"?`${i.text}`:i.type==="escape"?i.text:`Unsupported markdown: ${i.type}`}return o(n,"output"),r.map(n).join("")}var tK=N(()=>{"use strict";Zj();PC();o(G8e,"preprocessMarkdown");o(Jj,"markdownToLines");o(eK,"markdownToHTML")});function V8e(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function U8e(t,e){let r=V8e(e.content);return rK(t,[],r,e.type)}function rK(t,e,r,n){if(r.length===0)return[{content:e.join(""),type:n},{content:"",type:n}];let[i,...a]=r,s=[...e,i];return t([{content:s.join(""),type:n}])?rK(t,s,a,n):(e.length===0&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function nK(t,e){if(t.some(({content:r})=>r.includes(` | |
| 447 | +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return CD(t,e)}function CD(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...n];if(i!==""&&s.push({content:i,type:"normal"}),s.push(a),e(s))return CD(t,e,r,s);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){let[l,u]=U8e(e,a);r.push([l]),u.content&&t.unshift(u)}return CD(t,e,r)}var iK=N(()=>{"use strict";o(V8e,"splitTextToChars");o(U8e,"splitWordToFitWidth");o(rK,"splitWordToFitWidthRecursion");o(nK,"splitLineToFitWidth");o(CD,"splitLineToFitWidthRecursion")});function aK(t,e){e&&t.attr("style",e)}async function H8e(t,e,r,n,i=!1){let a=t.append("foreignObject");a.attr("width",`${10*r}px`),a.attr("height",`${10*r}px`);let s=a.append("xhtml:div"),l=e.label;e.label&&pi(e.label)&&(l=await mh(e.label.replace(Ze.lineBreakRegex,` | |
| 448 | +`),me()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),aK(h,e.labelStyle),h.attr("class",`${u} ${n}`),aK(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.style("max-width",r+"px"),s.style("text-align","center"),s.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&s.attr("class","labelBkg");let f=s.node().getBoundingClientRect();return f.width===r&&(s.style("display","table"),s.style("white-space","break-spaces"),s.style("width",r+"px"),f=s.node().getBoundingClientRect()),a.node()}function AD(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function W8e(t,e,r){let n=t.append("text"),i=AD(n,1,e);_D(i,r);let a=i.node().getComputedTextLength();return n.remove(),a}function sK(t,e,r){let n=t.append("text"),i=AD(n,1,e);_D(i,[{content:r,type:"normal"}]);let a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function q8e(t,e,r,n=!1){let a=e.append("g"),s=a.insert("rect").attr("class","background").attr("style","stroke: none"),l=a.append("text").attr("y","-10.1"),u=0;for(let h of r){let f=o(p=>W8e(a,1.1,p)<=t,"checkWidth"),d=f(h)?[h]:nK(h,f);for(let p of d){let m=AD(l,u,1.1);_D(m,p),u++}}if(n){let h=l.node().getBBox(),f=2;return s.attr("x",h.x-f).attr("y",h.y-f).attr("width",h.width+2*f).attr("height",h.height+2*f),a.node()}else return l.node()}function _D(t,e){t.text(""),e.forEach((r,n)=>{let i=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");n===0?i.text(r.content):i.text(" "+r.content)})}function DD(t){return t.replace(/fa[bklrs]?:fa-[\w-]+/g,e=>`<i class='${e.replace(":"," ")}'></i>`)}var Hn,to=N(()=>{"use strict";zt();gr();dr();vt();tK();ir();iK();o(aK,"applyStyle");o(H8e,"addHtmlSpan");o(AD,"createTspan");o(W8e,"computeWidthOfText");o(sK,"computeDimensionOfText");o(q8e,"createFormattedText");o(_D,"updateTextContentAndStyles");o(DD,"replaceIconSubstring");Hn=o(async(t,e="",{style:r="",isTitle:n=!1,classes:i="",useHtmlLabels:a=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},h)=>{if(Y.debug("XYZ createText",e,r,n,i,a,s,"addSvgBackground: ",u),a){let f=eK(e,h),d=DD(na(f)),p=e.replace(/\\\\/g,"\\"),m={isNode:s,label:pi(e)?p:d,labelStyle:r.replace("fill:","color:")};return await H8e(t,m,l,i,u)}else{let f=e.replace(/<br\s*\/?>/g,"<br/>"),d=Jj(f.replace("<br>","<br/>"),h),p=q8e(l,t,d,e?u:!1);if(s){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).attr("style",m)}else{let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Ge(p).select("rect").attr("style",m.replace(/background:/g,"fill:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).select("text").attr("style",g)}return p}},"createText")});function Xt(t){let e=t.map((r,n)=>`${n===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function Fo(t,e,r,n,i,a){let s=[],u=r-t,h=n-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+i*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function Lw(t,e,r,n,i,a){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}var pt,Dw,je,ht,Ft=N(()=>{"use strict";to();zt();dr();Ya();gr();ir();pt=o(async(t,e,r)=>{let n,i=e.useHtmlLabels||fr(me()?.htmlLabels);r?n=r:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",$n(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=await Hn(s,Tr(na(l),me()),{useHtmlLabels:i,width:e.width||me().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img}),h=u.getBBox(),f=(e?.padding??0)/2;if(i){let d=u.children[0],p=Ge(u),m=d.getElementsByTagName("img");if(m){let g=l.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=me().fontSize?me().fontSize:window.getComputedStyle(document.body).fontSize,w=5,[C=or.fontSize]=Bo(b),T=C*w+"px";y.style.minWidth=T,y.style.maxWidth=T}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}return i?s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):s.attr("transform","translate(0, "+-h.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:h,halfPadding:f,label:s}},"labelHelper"),Dw=o(async(t,e,r)=>{let n=r.useHtmlLabels||fr(me()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await Hn(i,Tr(na(e),me()),{useHtmlLabels:n,width:r.width||me()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(fr(me()?.flowchart?.htmlLabels)){let u=a.children[0],h=Ge(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return n?i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):i.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:i}},"insertLabel"),je=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),ht=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(Xt,"createPathFromPoints");o(Fo,"generateFullSineWavePoints");o(Lw,"generateCirclePoints")});function Y8e(t,e){return t.intersect(e)}var oK,lK=N(()=>{"use strict";o(Y8e,"intersectNode");oK=Y8e});function X8e(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x<i&&(h=-h);var f=Math.abs(e*r*l/u);return n.y<a&&(f=-f),{x:i+h,y:a+f}}var Rw,LD=N(()=>{"use strict";o(X8e,"intersectEllipse");Rw=X8e});function j8e(t,e,r){return Rw(t,e,e,r)}var cK,uK=N(()=>{"use strict";LD();o(j8e,"intersectCircle");cK=j8e});function K8e(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&hK(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&hK(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function hK(t,e){return t*e>0}var fK,dK=N(()=>{"use strict";o(K8e,"intersectLine");o(hK,"sameSign");fK=K8e});function Q8e(t,e,r){let n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=n-t.width/2-s,h=i-t.height/2-l;for(let f=0;f<e.length;f++){let d=e[f],p=e[f<e.length-1?f+1:0],m=fK(t,r,{x:u+d.x,y:h+d.y},{x:u+p.x,y:h+p.y});m&&a.push(m)}return a.length?(a.length>1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g<x?-1:g===x?0:1}),a[0]):t}var pK,mK=N(()=>{"use strict";dK();o(Q8e,"intersectPolygon");pK=Q8e});var Z8e,Vh,RD=N(()=>{"use strict";Z8e=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Vh=Z8e});var Ye,Ht=N(()=>{"use strict";lK();uK();LD();mK();RD();Ye={node:oK,circle:cK,ellipse:Rw,polygon:pK,rect:Vh}});var gK,mc,J8e,ND,Qe,Ke,Ut=N(()=>{"use strict";zt();gK=o(t=>{let{handDrawnSeed:e}=me();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),mc=o(t=>{let e=J8e([...t.cssCompiledStyles||[],...t.cssStyles||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),J8e=o(t=>{let e=new Map;return t.forEach(r=>{let[n,i]=r.split(":");e.set(n.trim(),i?.trim())}),e},"styles2Map"),ND=o(t=>t==="color"||t==="font-size"||t==="font-family"||t==="font-weight"||t==="font-style"||t==="text-decoration"||t==="text-align"||t==="text-transform"||t==="line-height"||t==="letter-spacing"||t==="word-spacing"||t==="text-shadow"||t==="text-overflow"||t==="white-space"||t==="word-wrap"||t==="word-break"||t==="overflow-wrap"||t==="hyphens","isLabelStyle"),Qe=o(t=>{let{stylesArray:e}=mc(t),r=[],n=[],i=[],a=[];return e.forEach(s=>{let l=s[0];ND(l)?r.push(s.join(":")+" !important"):(n.push(s.join(":")+" !important"),l.includes("stroke")&&i.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),Ke=o((t,e)=>{let{themeVariables:r,handDrawnSeed:n}=me(),{nodeBorder:i,mainBkg:a}=r,{stylesMap:s}=mc(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||i,seed:n,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0]},e)},"userNodeOverrides")});function MD(t,e,r){if(t&&t.length){let[n,i]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-n)*s-(f-i)*l+n,u[1]=(h-n)*l+(f-i)*s+i}}}function e_e(t,e){return t[0]===e[0]&&t[1]===e[1]}function t_e(t,e,r,n=1){let i=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(i)for(let h of s)MD(h,l,i);let u=function(h,f,d){let p=[];for(let b of h){let w=[...b];e_e(w[0],w[w.length-1])||w.push([w[0][0],w[0][1]]),w.length>2&&p.push(w)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let w=0;w<b.length-1;w++){let C=b[w],T=b[w+1];if(C[1]!==T[1]){let E=Math.min(C[1],T[1]);g.push({ymin:E,ymax:Math.max(C[1],T[1]),x:E===C[1]?C[0]:T[0],islope:(T[0]-C[0])/(T[1]-C[1])})}}if(g.sort((b,w)=>b.ymin<w.ymin?-1:b.ymin>w.ymin?1:b.x<w.x?-1:b.x>w.x?1:b.ymax===w.ymax?0:(b.ymax-w.ymax)/Math.abs(b.ymax-w.ymax)),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let w=0;w<g.length&&!(g[w].ymin>v);w++)b=w;g.splice(0,b+1).forEach(w=>{y.push({s:v,edge:w})})}if(y=y.filter(b=>!(b.edge.ymax<=v)),y.sort((b,w)=>b.edge.x===w.edge.x?0:(b.edge.x-w.edge.x)/Math.abs(b.edge.x-w.edge.x)),(d!==1||x%f==0)&&y.length>1)for(let b=0;b<y.length;b+=2){let w=b+1;if(w>=y.length)break;let C=y[b].edge,T=y[w].edge;m.push([[Math.round(C.x),v],[Math.round(T.x),v]])}v+=d,y.forEach(b=>{b.edge.x=b.edge.x+d*b.edge.islope}),x++}return m}(s,a,n);if(i){for(let h of s)MD(h,l,-i);(function(h,f,d){let p=[];h.forEach(m=>p.push(...m)),MD(p,f,d)})(u,l,-i)}return u}function x2(t,e){var r;let n=e.hachureAngle+90,i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=i),t_e(t,i,n,a||1)}function zw(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function OD(t,e){return t.type===e}function jD(t){let e=[],r=function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:r_e,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:ID,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:yK,text:""},l}(t),n="BOD",i=0,a=r[i];for(;!OD(a,yK);){let s=0,l=[];if(n==="BOD"){if(a.text!=="M"&&a.text!=="m")return jD("M0,0"+t);i++,s=Nw[a.text],n=a.text}else OD(a,ID)?s=Nw[n]:(i++,s=Nw[a.text],n=a.text);if(!(i+s<r.length))throw new Error("Path data ended short");for(let u=i;u<i+s;u++){let h=r[u];if(!OD(h,ID))throw new Error("Param not a number: "+n+","+h.text);l[l.length]=+h.text}if(typeof Nw[n]!="number")throw new Error("Bad segment: "+n);{let u={key:n,data:l};e.push(u),i+=s,a=r[i],n==="M"&&(n="L"),n==="m"&&(n="l")}}return e}function SK(t){let e=0,r=0,n=0,i=0,a=[];for(let{key:s,data:l}of t)switch(s){case"M":a.push({key:"M",data:[...l]}),[e,r]=l,[n,i]=l;break;case"m":e+=l[0],r+=l[1],a.push({key:"M",data:[e,r]}),n=e,i=r;break;case"L":a.push({key:"L",data:[...l]}),[e,r]=l;break;case"l":e+=l[0],r+=l[1],a.push({key:"L",data:[e,r]});break;case"C":a.push({key:"C",data:[...l]}),e=l[4],r=l[5];break;case"c":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function CK(t){let e=[],r="",n=0,i=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[n,i]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),n=f[4],i=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[n,i]=f;break;case"H":n=f[0],e.push({key:"L",data:[n,i]});break;case"V":i=f[0],e.push({key:"L",data:[n,i]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=n+(n-l),p=i+(i-u)):(d=n,p=i),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],n=f[2],i=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=n+(n-l),g=i+(i-u)):(m=n,g=i);let y=n+2*(m-n)/3,v=i+2*(g-i)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,n=d,i=p;break}case"Q":{let[d,p,m,g]=f,y=n+2*(d-n)/3,v=i+2*(p-i)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,n=m,i=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[n,i,v,x,v,x]}),n=v,i=x):(n!==v||i!==x)&&(AK(n,i,v,x,d,p,m,g,y).forEach(function(b){e.push({key:"C",data:b})}),n=v,i=x);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=s}r=h}return e}function g2(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function AK(t,e,r,n,i,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=g2(t,e,-f),[r,n]=g2(r,n,-f);let L=(t-r)/2,R=(e-n)/2,O=L*L/(i*i)+R*R/(a*a);O>1&&(O=Math.sqrt(O),i*=O,a*=O);let M=i*i,B=a*a,F=M*B-M*R*R-B*L*L,P=M*R*R+B*L*L,z=(l===u?-1:1)*Math.sqrt(Math.abs(F/P));y=z*i*R/a+(t+r)/2,v=z*-a*L/i+(e+n)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((n-v)/a).toFixed(9))),t<y&&(m=Math.PI-m),r<y&&(g=Math.PI-g),m<0&&(m=2*Math.PI+m),g<0&&(g=2*Math.PI+g),u&&m>g&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let L=g,R=r,O=n;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=AK(r=y+i*Math.cos(g),n=v+a*Math.sin(g),R,O,i,a,s,0,u,[g,L,y,v])}x=g-m;let b=Math.cos(m),w=Math.sin(m),C=Math.cos(g),T=Math.sin(g),E=Math.tan(x/4),A=4/3*i*E,S=4/3*a*E,_=[t,e],I=[t+A*w,e-S*b],D=[r+A*T,n-S*C],k=[r,n];if(I[0]=2*_[0]-I[0],I[1]=2*_[1]-I[1],h)return[I,D,k].concat(p);{p=[I,D,k].concat(p);let L=[];for(let R=0;R<p.length;R+=3){let O=g2(p[R][0],p[R][1],f),M=g2(p[R+1][0],p[R+1][1],f),B=g2(p[R+2][0],p[R+2][1],f);L.push([O[0],O[1],M[0],M[1],B[0],B[1]])}return L}}function _K(t,e,r,n,i){return{type:"path",ops:Uh(t,e,r,n,i)}}function Ow(t,e,r){let n=(t||[]).length;if(n>2){let i=[];for(let a=0;a<n-1;a++)i.push(...Uh(t[a][0],t[a][1],t[a+1][0],t[a+1][1],r));return e&&i.push(...Uh(t[n-1][0],t[n-1][1],t[0][0],t[0][1],r)),{type:"path",ops:i}}return n===2?_K(t[0][0],t[0][1],t[1][0],t[1][1],r):{type:"path",ops:[]}}function i_e(t,e,r,n,i){return function(a,s){return Ow(a,!0,s)}([[t,e],[t+r,e],[t+r,e+n],[t,e+n]],i)}function vK(t,e){if(t.length){let r=typeof t[0][0]=="number"?[t]:t,n=Mw(r[0],1*(1+.2*e.roughness),e),i=e.disableMultiStroke?[]:Mw(r[0],1.5*(1+.22*e.roughness),wK(e));for(let a=1;a<r.length;a++){let s=r[a];if(s.length){let l=Mw(s,1*(1+.2*e.roughness),e),u=e.disableMultiStroke?[]:Mw(s,1.5*(1+.22*e.roughness),wK(e));for(let h of l)h.op!=="move"&&n.push(h);for(let h of u)h.op!=="move"&&i.push(h)}}return{type:"path",ops:n.concat(i)}}return{type:"path",ops:[]}}function DK(t,e,r){let n=Math.sqrt(2*Math.PI*Math.sqrt((Math.pow(t/2,2)+Math.pow(e/2,2))/2)),i=Math.ceil(Math.max(r.curveStepCount,r.curveStepCount/Math.sqrt(200)*n)),a=2*Math.PI/i,s=Math.abs(t/2),l=Math.abs(e/2),u=1-r.curveFitting;return s+=nr(s*u,r),l+=nr(l*u,r),{increment:a,rx:s,ry:l}}function HD(t,e,r,n){let[i,a]=TK(n.increment,t,e,n.rx,n.ry,1,n.increment*Bw(.1,Bw(.4,1,r),r),r),s=Fw(i,null,r);if(!r.disableMultiStroke&&r.roughness!==0){let[l]=TK(n.increment,t,e,n.rx,n.ry,1.5,0,r),u=Fw(l,null,r);s=s.concat(u)}return{estimatedPoints:a,opset:{type:"path",ops:s}}}function xK(t,e,r,n,i,a,s,l,u){let h=t,f=e,d=Math.abs(r/2),p=Math.abs(n/2);d+=nr(.01*d,u),p+=nr(.01*p,u);let m=i,g=a;for(;m<0;)m+=2*Math.PI,g+=2*Math.PI;g-m>2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=kK(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=kK(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...Uh(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...Uh(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function bK(t,e){let r=CK(SK(jD(t))),n=[],i=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],i=[l[0],l[1]];break;case"L":n.push(...Uh(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;n.push(...a_e(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":n.push(...Uh(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function PD(t,e){let r=[];for(let n of t)if(n.length){let i=e.maxRandomnessOffset||0,a=n.length;if(a>2){r.push({op:"move",data:[n[0][0]+nr(i,e),n[0][1]+nr(i,e)]});for(let s=1;s<a;s++)r.push({op:"lineTo",data:[n[s][0]+nr(i,e),n[s][1]+nr(i,e)]})}}return{type:"fillPath",ops:r}}function dm(t,e){return function(r,n){let i=r.fillStyle||"hachure";if(!Rs[i])switch(i){case"zigzag":Rs[i]||(Rs[i]=new FD(n));break;case"cross-hatch":Rs[i]||(Rs[i]=new $D(n));break;case"dots":Rs[i]||(Rs[i]=new zD(n));break;case"dashed":Rs[i]||(Rs[i]=new GD(n));break;case"zigzag-line":Rs[i]||(Rs[i]=new VD(n));break;default:i="hachure",Rs[i]||(Rs[i]=new v2(n))}return Rs[i]}(e,n_e).fillPolygons(t,e)}function wK(t){let e=Object.assign({},t);return e.randomizer=void 0,t.seed&&(e.seed=t.seed+1),e}function LK(t){return t.randomizer||(t.randomizer=new UD(t.seed||0)),t.randomizer.next()}function Bw(t,e,r,n=1){return r.roughness*n*(LK(r)*(e-t)+t)}function nr(t,e,r=1){return Bw(-t,t,e,r)}function Uh(t,e,r,n,i,a=!1){let s=a?i.disableMultiStrokeFill:i.disableMultiStroke,l=WD(t,e,r,n,i,!0,!1);if(s)return l;let u=WD(t,e,r,n,i,!0,!0);return l.concat(u)}function WD(t,e,r,n,i,a,s){let l=Math.pow(t-r,2)+Math.pow(e-n,2),u=Math.sqrt(l),h=1;h=u<200?1:u>500?.4:-.0016668*u+1.233334;let f=i.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*LK(i),m=i.bowing*i.maxRandomnessOffset*(n-e)/200,g=i.bowing*i.maxRandomnessOffset*(t-r)/200;m=nr(m,i,h),g=nr(g,i,h);let y=[],v=o(()=>nr(d,i,h),"M"),x=o(()=>nr(f,i,h),"k"),b=i.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:nr(f,i,h)),e+(b?0:nr(f,i,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(n-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(n-e)*p+v(),r+(b?0:v()),n+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(n-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(n-e)*p+x(),r+(b?0:x()),n+(b?0:x())]}),y}function Mw(t,e,r){if(!t.length)return[];let n=[];n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]),n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]);for(let i=1;i<t.length;i++)n.push([t[i][0]+nr(e,r),t[i][1]+nr(e,r)]),i===t.length-1&&n.push([t[i][0]+nr(e,r),t[i][1]+nr(e,r)]);return Fw(n,null,r)}function Fw(t,e,r){let n=t.length,i=[];if(n>3){let a=[],s=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+2<n;l++){let u=t[l];a[0]=[u[0],u[1]],a[1]=[u[0]+(s*t[l+1][0]-s*t[l-1][0])/6,u[1]+(s*t[l+1][1]-s*t[l-1][1])/6],a[2]=[t[l+1][0]+(s*t[l][0]-s*t[l+2][0])/6,t[l+1][1]+(s*t[l][1]-s*t[l+2][1])/6],a[3]=[t[l+1][0],t[l+1][1]],i.push({op:"bcurveTo",data:[a[1][0],a[1][1],a[2][0],a[2][1],a[3][0],a[3][1]]})}if(e&&e.length===2){let l=r.maxRandomnessOffset;i.push({op:"lineTo",data:[e[0]+nr(l,r),e[1]+nr(l,r)]})}}else n===3?(i.push({op:"move",data:[t[1][0],t[1][1]]}),i.push({op:"bcurveTo",data:[t[1][0],t[1][1],t[2][0],t[2][1],t[2][0],t[2][1]]})):n===2&&i.push(...WD(t[0][0],t[0][1],t[1][0],t[1][1],r,!0,!0));return i}function TK(t,e,r,n,i,a,s,l){let u=[],h=[];if(l.roughness===0){t/=4,h.push([e+n*Math.cos(-t),r+i*Math.sin(-t)]);for(let f=0;f<=2*Math.PI;f+=t){let d=[e+n*Math.cos(f),r+i*Math.sin(f)];u.push(d),h.push(d)}h.push([e+n*Math.cos(0),r+i*Math.sin(0)]),h.push([e+n*Math.cos(t),r+i*Math.sin(t)])}else{let f=nr(.5,l)-Math.PI/2;h.push([nr(a,l)+e+.9*n*Math.cos(f-t),nr(a,l)+r+.9*i*Math.sin(f-t)]);let d=2*Math.PI+f-.01;for(let p=f;p<d;p+=t){let m=[nr(a,l)+e+n*Math.cos(p),nr(a,l)+r+i*Math.sin(p)];u.push(m),h.push(m)}h.push([nr(a,l)+e+n*Math.cos(f+2*Math.PI+.5*s),nr(a,l)+r+i*Math.sin(f+2*Math.PI+.5*s)]),h.push([nr(a,l)+e+.98*n*Math.cos(f+s),nr(a,l)+r+.98*i*Math.sin(f+s)]),h.push([nr(a,l)+e+.9*n*Math.cos(f+.5*s),nr(a,l)+r+.9*i*Math.sin(f+.5*s)])}return[h,u]}function kK(t,e,r,n,i,a,s,l,u){let h=a+nr(.1,u),f=[];f.push([nr(l,u)+e+.9*n*Math.cos(h-t),nr(l,u)+r+.9*i*Math.sin(h-t)]);for(let d=h;d<=s;d+=t)f.push([nr(l,u)+e+n*Math.cos(d),nr(l,u)+r+i*Math.sin(d)]);return f.push([e+n*Math.cos(s),r+i*Math.sin(s)]),f.push([e+n*Math.cos(s),r+i*Math.sin(s)]),Fw(f,null,u)}function a_e(t,e,r,n,i,a,s,l){let u=[],h=[l.maxRandomnessOffset||1,(l.maxRandomnessOffset||1)+.3],f=[0,0],d=l.disableMultiStroke?1:2,p=l.preserveVertices;for(let m=0;m<d;m++)m===0?u.push({op:"move",data:[s[0],s[1]]}):u.push({op:"move",data:[s[0]+(p?0:nr(h[0],l)),s[1]+(p?0:nr(h[0],l))]}),f=p?[i,a]:[i+nr(h[m],l),a+nr(h[m],l)],u.push({op:"bcurveTo",data:[t+nr(h[m],l),e+nr(h[m],l),r+nr(h[m],l),n+nr(h[m],l),f[0],f[1]]});return u}function y2(t){return[...t]}function EK(t,e=0){let r=t.length;if(r<3)throw new Error("A curve must have at least three points.");let n=[];if(r===3)n.push(y2(t[0]),y2(t[1]),y2(t[2]),y2(t[2]));else{let i=[];i.push(t[0],t[0]);for(let l=1;l<t.length;l++)i.push(t[l]),l===t.length-1&&i.push(t[l]);let a=[],s=1-e;n.push(y2(i[0]));for(let l=1;l+2<i.length;l++){let u=i[l];a[0]=[u[0],u[1]],a[1]=[u[0]+(s*i[l+1][0]-s*i[l-1][0])/6,u[1]+(s*i[l+1][1]-s*i[l-1][1])/6],a[2]=[i[l+1][0]+(s*i[l][0]-s*i[l+2][0])/6,i[l+1][1]+(s*i[l][1]-s*i[l+2][1])/6],a[3]=[i[l+1][0],i[l+1][1]],n.push(a[1],a[2],a[3])}}return n}function Pw(t,e){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)}function s_e(t,e,r){let n=Pw(e,r);if(n===0)return Pw(t,e);let i=((t[0]-e[0])*(r[0]-e[0])+(t[1]-e[1])*(r[1]-e[1]))/n;return i=Math.max(0,Math.min(1,i)),Pw(t,Od(e,r,i))}function Od(t,e,r){return[t[0]+(e[0]-t[0])*r,t[1]+(e[1]-t[1])*r]}function qD(t,e,r,n){let i=n||[];if(function(l,u){let h=l[u+0],f=l[u+1],d=l[u+2],p=l[u+3],m=3*f[0]-2*h[0]-p[0];m*=m;let g=3*f[1]-2*h[1]-p[1];g*=g;let y=3*d[0]-2*p[0]-h[0];y*=y;let v=3*d[1]-2*p[1]-h[1];return v*=v,m<y&&(m=y),g<v&&(g=v),m+g}(t,e)<r){let l=t[e+0];i.length?(a=i[i.length-1],s=l,Math.sqrt(Pw(a,s))>1&&i.push(l)):i.push(l),i.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=Od(u,h,.5),m=Od(h,f,.5),g=Od(f,d,.5),y=Od(p,m,.5),v=Od(m,g,.5),x=Od(y,v,.5);qD([u,p,y,x],0,r,i),qD([x,v,g,d],0,r,i)}var a,s;return i}function o_e(t,e){return $w(t,0,t.length,e)}function $w(t,e,r,n,i){let a=i||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;f<r-1;++f){let d=s_e(t[f],s,l);d>u&&(u=d,h=f)}return Math.sqrt(u)>n?($w(t,e,h+1,n,a),$w(t,h,r,n,a)):(a.length||a.push(s),a.push(l)),a}function BD(t,e=.15,r){let n=[],i=(t.length-1)/3;for(let a=0;a<i;a++)qD(t,3*a,e,n);return r&&r>0?$w(n,0,n.length,r):n}var v2,FD,$D,zD,GD,VD,Rs,UD,r_e,ID,yK,Nw,n_e,ro,pm,YD,Iw,XD,Xe,Wt=N(()=>{"use strict";o(MD,"t");o(e_e,"e");o(t_e,"s");o(x2,"n");v2=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let n=x2(e,r);return{type:"fillSketch",ops:this.renderLines(n,r)}}renderLines(e,r){let n=[];for(let i of e)n.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],r));return n}};o(zw,"a");FD=class extends v2{static{o(this,"h")}fillPolygons(e,r){let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let i=x2(e,Object.assign({},r,{hachureGap:n})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*n*Math.cos(a),u=.5*n*Math.sin(a);for(let[h,f]of i)zw([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},$D=class extends v2{static{o(this,"r")}fillPolygons(e,r){let n=this._fillPolygons(e,r),i=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,i);return n.ops=n.ops.concat(a.ops),n}},zD=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let n=x2(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(n,r)}dotsOnLines(e,r){let n=[],i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=i/4;for(let l of e){let u=zw(l),h=u/i,f=Math.ceil(h)-1,d=u-f*i,p=(l[0][0]+l[1][0])/2-i/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g<f;g++){let y=m+d+g*i,v=p-s+2*Math.random()*s,x=y-s+2*Math.random()*s,b=this.helper.ellipse(v,x,a,a,r);n.push(...b.ops)}}return{type:"fillSketch",ops:n}}},GD=class{static{o(this,"c")}constructor(e){this.helper=e}fillPolygons(e,r){let n=x2(e,r);return{type:"fillSketch",ops:this.dashedLine(n,r)}}dashedLine(e,r){let n=r.dashOffset<0?r.hachureGap<0?4*r.strokeWidth:r.hachureGap:r.dashOffset,i=r.dashGap<0?r.hachureGap<0?4*r.strokeWidth:r.hachureGap:r.dashGap,a=[];return e.forEach(s=>{let l=zw(s),u=Math.floor(l/(n+i)),h=(l+i-u*(n+i))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m<u;m++){let g=m*(n+i),y=g+n,v=[f[0]+g*Math.cos(p)+h*Math.cos(p),f[1]+g*Math.sin(p)+h*Math.sin(p)],x=[f[0]+y*Math.cos(p)+h*Math.cos(p),f[1]+y*Math.sin(p)+h*Math.sin(p)];a.push(...this.helper.doubleLineOps(v[0],v[1],x[0],x[1],r))}}),a}},VD=class{static{o(this,"l")}constructor(e){this.helper=e}fillPolygons(e,r){let n=r.hachureGap<0?4*r.strokeWidth:r.hachureGap,i=r.zigzagOffset<0?n:r.zigzagOffset,a=x2(e,r=Object.assign({},r,{hachureGap:n+i}));return{type:"fillSketch",ops:this.zigzagLines(a,i,r)}}zigzagLines(e,r,n){let i=[];return e.forEach(a=>{let s=zw(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d<l;d++){let p=2*d*r,m=2*(d+1)*r,g=Math.sqrt(2*Math.pow(r,2)),y=[u[0]+p*Math.cos(f),u[1]+p*Math.sin(f)],v=[u[0]+m*Math.cos(f),u[1]+m*Math.sin(f)],x=[y[0]+g*Math.cos(f+Math.PI/4),y[1]+g*Math.sin(f+Math.PI/4)];i.push(...this.helper.doubleLineOps(y[0],y[1],x[0],x[1],n),...this.helper.doubleLineOps(x[0],x[1],v[0],v[1],n))}}),i}},Rs={},UD=class{static{o(this,"p")}constructor(e){this.seed=e}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}},r_e=0,ID=1,yK=2,Nw={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};o(OD,"k");o(jD,"b");o(SK,"y");o(CK,"m");o(g2,"w");o(AK,"x");n_e={randOffset:o(function(t,e){return nr(t,e)},"randOffset"),randOffsetWithRange:o(function(t,e,r){return Bw(t,e,r)},"randOffsetWithRange"),ellipse:o(function(t,e,r,n,i){let a=DK(r,n,i);return HD(t,e,i,a).opset},"ellipse"),doubleLineOps:o(function(t,e,r,n,i){return Uh(t,e,r,n,i,!0)},"doubleLineOps")};o(_K,"v");o(Ow,"S");o(i_e,"O");o(vK,"L");o(DK,"T");o(HD,"D");o(xK,"A");o(bK,"_");o(PD,"I");o(dm,"C");o(wK,"z");o(LK,"W");o(Bw,"E");o(nr,"G");o(Uh,"$");o(WD,"R");o(Mw,"j");o(Fw,"q");o(TK,"F");o(kK,"V");o(a_e,"Z");o(y2,"Q");o(EK,"H");o(Pw,"N");o(s_e,"B");o(Od,"J");o(qD,"K");o(o_e,"U");o($w,"X");o(BD,"Y");ro="none",pm=class{static{o(this,"et")}constructor(e){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=e||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(e){return e?Object.assign({},this.defaultOptions,e):this.defaultOptions}_d(e,r,n){return{shape:e,sets:r||[],options:n||this.defaultOptions}}line(e,r,n,i,a){let s=this._o(a);return this._d("line",[_K(e,r,n,i,s)],s)}rectangle(e,r,n,i,a){let s=this._o(a),l=[],u=i_e(e,r,n,i,s);if(s.fill){let h=[[e,r],[e+n,r],[e+n,r+i],[e,r+i]];s.fillStyle==="solid"?l.push(PD([h],s)):l.push(dm([h],s))}return s.stroke!==ro&&l.push(u),this._d("rectangle",l,s)}ellipse(e,r,n,i,a){let s=this._o(a),l=[],u=DK(n,i,s),h=HD(e,r,s,u);if(s.fill)if(s.fillStyle==="solid"){let f=HD(e,r,s,u).opset;f.type="fillPath",l.push(f)}else l.push(dm([h.estimatedPoints],s));return s.stroke!==ro&&l.push(h.opset),this._d("ellipse",l,s)}circle(e,r,n,i){let a=this.ellipse(e,r,n,n,i);return a.shape="circle",a}linearPath(e,r){let n=this._o(r);return this._d("linearPath",[Ow(e,!1,n)],n)}arc(e,r,n,i,a,s,l=!1,u){let h=this._o(u),f=[],d=xK(e,r,n,i,a,s,l,!0,h);if(l&&h.fill)if(h.fillStyle==="solid"){let p=Object.assign({},h);p.disableMultiStroke=!0;let m=xK(e,r,n,i,a,s,!0,!1,p);m.type="fillPath",f.push(m)}else f.push(function(p,m,g,y,v,x,b){let w=p,C=m,T=Math.abs(g/2),E=Math.abs(y/2);T+=nr(.01*T,b),E+=nr(.01*E,b);let A=v,S=x;for(;A<0;)A+=2*Math.PI,S+=2*Math.PI;S-A>2*Math.PI&&(A=0,S=2*Math.PI);let _=(S-A)/b.curveStepCount,I=[];for(let D=A;D<=S;D+=_)I.push([w+T*Math.cos(D),C+E*Math.sin(D)]);return I.push([w+T*Math.cos(S),C+E*Math.sin(S)]),I.push([w,C]),dm([I],b)}(e,r,n,i,a,s,h));return h.stroke!==ro&&f.push(d),this._d("arc",f,h)}curve(e,r){let n=this._o(r),i=[],a=vK(e,n);if(n.fill&&n.fill!==ro)if(n.fillStyle==="solid"){let s=vK(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...BD(EK([h[0],h[0],h[1],h[2]]),10,(1+n.roughness)/2)):s.push(...BD(EK(h),10,(1+n.roughness)/2))}s.length&&i.push(dm([s],n))}return n.stroke!==ro&&i.push(a),this._d("curve",i,n)}polygon(e,r){let n=this._o(r),i=[],a=Ow(e,!0,n);return n.fill&&(n.fillStyle==="solid"?i.push(PD([e],n)):i.push(dm([e],n))),n.stroke!==ro&&i.push(a),this._d("polygon",i,n)}path(e,r){let n=this._o(r),i=[];if(!e)return this._d("path",i,n);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=n.fill&&n.fill!=="transparent"&&n.fill!==ro,s=n.stroke!==ro,l=!!(n.simplification&&n.simplification<1),u=function(f,d,p){let m=CK(SK(jD(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...BD(x,d)),x=[]},"i"),w=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:T,data:E}of m)switch(T){case"M":w(),v=[E[0],E[1]],y.push(v);break;case"L":b(),y.push([E[0],E[1]]);break;case"C":if(!x.length){let A=y.length?y[y.length-1]:v;x.push([A[0],A[1]])}x.push([E[0],E[1]]),x.push([E[2],E[3]]),x.push([E[4],E[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(w(),!p)return g;let C=[];for(let T of g){let E=o_e(T,p);E.length&&C.push(E)}return C}(e,1,l?4-4*(n.simplification||1):(1+n.roughness)/2),h=bK(e,n);if(a)if(n.fillStyle==="solid")if(u.length===1){let f=bK(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else i.push(PD(u,n));else i.push(dm(u,n));return s&&(l?u.forEach(f=>{i.push(Ow(f,!1,n))}):i.push(h)),this._d("path",i,n)}opsToPath(e,r){let n="";for(let i of e.ops){let a=typeof r=="number"&&r>=0?i.data.map(s=>+s.toFixed(r)):i.data;switch(i.op){case"move":n+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":n+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":n+=`L${a[0]} ${a[1]} `}}return n.trim()}toPaths(e){let r=e.sets||[],n=e.options||this.defaultOptions,i=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:n.stroke,strokeWidth:n.strokeWidth,fill:ro};break;case"fillPath":s={d:this.opsToPath(a),stroke:ro,strokeWidth:0,fill:n.fill||ro};break;case"fillSketch":s=this.fillSketch(a,n)}s&&i.push(s)}return i}fillSketch(e,r){let n=r.fillWeight;return n<0&&(n=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||ro,strokeWidth:n,fill:ro}}_mergedShape(e){return e.filter((r,n)=>n===0||r.op!=="move")}},YD=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new pm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":i.save(),i.strokeStyle=n.stroke==="none"?"transparent":n.stroke,i.lineWidth=n.strokeWidth,n.strokeLineDash&&i.setLineDash(n.strokeLineDash),n.strokeLineDashOffset&&(i.lineDashOffset=n.strokeLineDashOffset),this._drawToContext(i,s,a),i.restore();break;case"fillPath":{i.save(),i.fillStyle=n.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,a,l),i.restore();break}case"fillSketch":this.fillSketch(i,s,n)}}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2),e.save(),n.fillLineDash&&e.setLineDash(n.fillLineDash),n.fillLineDashOffset&&(e.lineDashOffset=n.fillLineDashOffset),e.strokeStyle=n.fill||"",e.lineWidth=i,this._drawToContext(e,r,n.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,n,i="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof n=="number"&&n>=0?a.data.map(l=>+l.toFixed(n)):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(i):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s),s}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s),s}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s),s}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a),a}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n),n}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n),n}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h),h}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n),n}path(e,r){let n=this.gen.path(e,r);return this.draw(n),n}},Iw="http://www.w3.org/2000/svg",XD=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new pm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,a=i.createElementNS(Iw,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=i.createElementNS(Iw,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",n.stroke),u.setAttribute("stroke-width",n.strokeWidth+""),u.setAttribute("fill","none"),n.strokeLineDash&&u.setAttribute("stroke-dasharray",n.strokeLineDash.join(" ").trim()),n.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${n.strokeLineDashOffset}`);break;case"fillPath":u=i.createElementNS(Iw,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",n.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(i,l,n)}u&&a.appendChild(u)}return a}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2);let a=e.createElementNS(Iw,"path");return a.setAttribute("d",this.opsToPath(r,n.fixedDecimalPlaceDigits)),a.setAttribute("stroke",n.fill||""),a.setAttribute("stroke-width",i+""),a.setAttribute("fill","none"),n.fillLineDash&&a.setAttribute("stroke-dasharray",n.fillLineDash.join(" ").trim()),n.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${n.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s)}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s)}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s)}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a)}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n)}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n)}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h)}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n)}path(e,r){let n=this.gen.path(e,r);return this.draw(n)}},Xe={canvas:o((t,e)=>new YD(t,e),"canvas"),svg:o((t,e)=>new XD(t,e),"svg"),generator:o(t=>new pm(t),"generator"),newSeed:o(()=>pm.newSeed(),"newSeed")}});function RK(t,e){let{labelStyles:r}=Qe(e);e.labelStyle=r;let n=ht(e),i=n;n||(i="anchor");let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=Xe.svg(a),h=Ke(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",$n(l)),je(e,d),e.intersect=function(p){return Y.info("Circle intersect",e,s,p),Ye.circle(e,s,p)},a}var NK=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(RK,"anchor")});function MK(t,e,r,n,i,a,s){let u=(t+r)/2,h=(e+n)/2,f=Math.atan2(n-e,r-t),d=(r-t)/2,p=(n-e)/2,m=d/i,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*i*Math.cos(f)*(s?-1:1),w=Math.atan2((e-b)/a,(t-x)/i),T=Math.atan2((n-b)/a,(r-x)/i)-w;s&&T<0&&(T+=2*Math.PI),!s&&T>0&&(T-=2*Math.PI);let E=[];for(let A=0;A<20;A++){let S=A/19,_=w+S*T,I=x+i*Math.cos(_),D=b+a*Math.sin(_);E.push({x:I,y:D})}return E}async function IK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding+20,l=a.height+e.padding,u=l/2,h=u/(2.5+l/50),{cssStyles:f}=e,d=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...MK(-s/2,-l/2,-s/2,l/2,h,u,!1),{x:s/2,y:l/2},...MK(s/2,l/2,s/2,-l/2,h,u,!0)],p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(d),y=p.path(g,m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(${h/2}, 0)`),je(e,v),e.intersect=function(x){return Ye.polygon(e,d,x)},i}var OK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(MK,"generateArcPoints");o(IK,"bowTieRect")});function La(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var _u=N(()=>{"use strict";o(La,"insertPolygonShape")});async function PK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.height+e.padding,l=12,u=a.width+e.padding+l,h=0,f=u,d=-s,p=0,m=[{x:h+l,y:d},{x:f,y:d},{x:f,y:p},{x:h,y:p},{x:h,y:d+l},{x:h+l,y:d}],g,{cssStyles:y}=e;if(e.look==="handDrawn"){let v=Xe.svg(i),x=Ke(e,{}),b=Xt(m),w=v.path(b,x);g=i.insert(()=>w,":first-child").attr("transform",`translate(${-u/2}, ${s/2})`),y&&g.attr("style",y)}else g=La(i,u,s,m);return n&&g.attr("style",n),je(e,g),e.intersect=function(v){return Ye.polygon(e,m,v)},i}var BK=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();Ft();o(PK,"card")});function FK(t,e){let{nodeStyles:r}=Qe(e);e.label="";let n=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:i}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=Xe.svg(n),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=Xt(s),f=l.path(h,u),d=n.insert(()=>f,":first-child");return i&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",i),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return Ye.polygon(e,s,p)},n}var $K=N(()=>{"use strict";Ht();Wt();Ut();Ft();o(FK,"choice")});async function zK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await pt(t,e,ht(e)),l=a.width/2+s,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=f.circle(0,0,l*2,d);u=i.insert(()=>p,":first-child"),u.attr("class","basic label-container").attr("style",$n(h))}else u=i.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",l).attr("cx",0).attr("cy",0);return je(e,u),e.intersect=function(f){return Y.info("Circle intersect",e,l,f),Ye.circle(e,l,f)},i}var GK=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(zK,"circle")});function l_e(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=t*2,i={x:n/2*e,y:n/2*r},a={x:-(n/2)*e,y:n/2*r},s={x:-(n/2)*e,y:-(n/2)*r},l={x:n/2*e,y:-(n/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y} | |
| 449 | + M ${i.x},${i.y} L ${s.x},${s.y}`}function VK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r,e.label="";let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=Xe.svg(i),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=l_e(a),d=l.path(f,u),p=i.insert(()=>h,":first-child");return p.insert(()=>d),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),je(e,p),e.intersect=function(m){return Y.info("crossedCircle intersect",e,{radius:a,point:m}),Ye.circle(e,a,m)},i}var UK=N(()=>{"use strict";vt();Ft();Ut();Wt();Ht();o(l_e,"createLine");o(VK,"crossedCircle")});function Hh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}async function HK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Hh(l/2,-u/2,h,30,-90,0),{x:-l/2-h,y:h},...Hh(l/2+h*2,-h,h,20,-180,-270),...Hh(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:-u/2},...Hh(l/2,u/2,h,20,0,90)],p=[{x:l/2,y:-u/2-h},{x:-l/2,y:-u/2-h},...Hh(l/2,-u/2,h,20,-90,0),{x:-l/2-h,y:-h},...Hh(l/2+l*.1,-h,h,20,-180,-270),...Hh(l/2+l*.1,h,h,20,-90,-180),{x:-l/2-h,y:u/2},...Hh(l/2,u/2,h,20,0,90),{x:-l/2,y:u/2+h},{x:l/2,y:u/2+h}],m=Xe.svg(i),g=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let v=Xt(d).replace("Z",""),x=m.path(v,g),b=Xt(p),w=m.path(b,{...g}),C=i.insert("g",":first-child");return C.insert(()=>w,":first-child").attr("stroke-opacity",0),C.insert(()=>x,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${h}, 0)`),s.attr("transform",`translate(${-l/2+h-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var WK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Hh,"generateCirclePoints");o(HK,"curlyBraceLeft")});function Wh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:m,y:g})}return s}async function qK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Wh(l/2,-u/2,h,20,-90,0),{x:l/2+h,y:-h},...Wh(l/2+h*2,-h,h,20,-180,-270),...Wh(l/2+h*2,h,h,20,-90,-180),{x:l/2+h,y:u/2},...Wh(l/2,u/2,h,20,0,90)],p=[{x:-l/2,y:-u/2-h},{x:l/2,y:-u/2-h},...Wh(l/2,-u/2,h,20,-90,0),{x:l/2+h,y:-h},...Wh(l/2+h*2,-h,h,20,-180,-270),...Wh(l/2+h*2,h,h,20,-90,-180),{x:l/2+h,y:u/2},...Wh(l/2,u/2,h,20,0,90),{x:l/2,y:u/2+h},{x:-l/2,y:u/2+h}],m=Xe.svg(i),g=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let v=Xt(d).replace("Z",""),x=m.path(v,g),b=Xt(p),w=m.path(b,{...g}),C=i.insert("g",":first-child");return C.insert(()=>w,":first-child").attr("stroke-opacity",0),C.insert(()=>x,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${-h}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var YK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Wh,"generateCirclePoints");o(qK,"curlyBraceRight")});function Ra(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}async function XK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Ra(l/2,-u/2,h,30,-90,0),{x:-l/2-h,y:h},...Ra(l/2+h*2,-h,h,20,-180,-270),...Ra(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:-u/2},...Ra(l/2,u/2,h,20,0,90)],p=[...Ra(-l/2+h+h/2,-u/2,h,20,-90,-180),{x:l/2-h/2,y:h},...Ra(-l/2-h/2,-h,h,20,0,90),...Ra(-l/2-h/2,h,h,20,-90,0),{x:l/2-h/2,y:-h},...Ra(-l/2+h+h/2,u/2,h,30,-180,-270)],m=[{x:l/2,y:-u/2-h},{x:-l/2,y:-u/2-h},...Ra(l/2,-u/2,h,20,-90,0),{x:-l/2-h,y:-h},...Ra(l/2+h*2,-h,h,20,-180,-270),...Ra(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:u/2},...Ra(l/2,u/2,h,20,0,90),{x:-l/2,y:u/2+h},{x:l/2-h-h/2,y:u/2+h},...Ra(-l/2+h+h/2,-u/2,h,20,-90,-180),{x:l/2-h/2,y:h},...Ra(-l/2-h/2,-h,h,20,0,90),...Ra(-l/2-h/2,h,h,20,-90,0),{x:l/2-h/2,y:-h},...Ra(-l/2+h+h/2,u/2,h,30,-180,-270)],g=Xe.svg(i),y=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let x=Xt(d).replace("Z",""),b=g.path(x,y),C=Xt(p).replace("Z",""),T=g.path(C,y),E=Xt(m),A=g.path(E,{...y}),S=i.insert("g",":first-child");return S.insert(()=>A,":first-child").attr("stroke-opacity",0),S.insert(()=>b,":first-child"),S.insert(()=>T,":first-child"),S.attr("class","text"),f&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${h-h/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(_){return Ye.polygon(e,m,_)},i}var jK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Ra,"generateCirclePoints");o(XK,"curlyBraces")});async function KK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=80,l=20,u=Math.max(s,(a.width+(e.padding??0)*2)*1.25,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=u,y=h,v=g-f,x=y/4,b=[{x:v,y:0},{x,y:0},{x:0,y:y/2},{x,y},{x:v,y},...Lw(-v,-y/2,f,50,270,90)],w=Xt(b),C=p.path(w,m),T=i.insert(()=>C,":first-child");return T.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",n),T.attr("transform",`translate(${-u/2}, ${-h/2})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var QK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(KK,"curvedTrapezoid")});async function ZK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+e.padding,e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+e.padding,e.height??0),d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=u_e(0,0,l,f,u,h),y=h_e(0,h,l,f,u,h),v=m.path(g,Ke(e,{})),x=m.path(y,Ke(e,{fill:"none"}));d=i.insert(()=>x,":first-child"),d=i.insert(()=>v,":first-child"),d.attr("class","basic label-container"),p&&d.attr("style",p)}else{let m=c_e(0,0,l,f,u,h);d=i.insert("path",":first-child").attr("d",m).attr("class","basic label-container").attr("style",$n(p)).attr("style",n)}return d.attr("label-offset-y",h),d.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,d),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+(e.padding??0)/1.5-(a.y-(a.top??0))})`),e.intersect=function(m){let g=Ye.rect(e,m),y=g.x-(e.x??0);if(u!=0&&(Math.abs(y)<(e.width??0)/2||Math.abs(y)==(e.width??0)/2&&Math.abs(g.y-(e.y??0))>(e.height??0)/2-h)){let v=h*h*(1-y*y/(u*u));v>0&&(v=Math.sqrt(v)),v=h-v,m.y-(e.y??0)>0&&(v=-v),g.y+=v}return g},i}var c_e,u_e,h_e,JK=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();c_e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createCylinderPathD"),u_e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createOuterCylinderPathD"),h_e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(ZK,"cylinder")});async function eQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+e.padding,u=a.height+e.padding,h=u*.2,f=-l/2,d=-u/2-h/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d+h},{x:-f,y:d+h},{x:-f,y:-d},{x:f,y:-d},{x:f,y:d},{x:-f,y:d},{x:-f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${f+(e.padding??0)/2-(a.x-(a.left??0))}, ${d+h+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var tQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(eQ,"dividedRectangle")});async function rQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await pt(t,e,ht(e)),u=a.width/2+s+5,h=a.width/2+s,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{roughness:.2,strokeWidth:2.5}),g=Ke(e,{roughness:.2,strokeWidth:1.5}),y=p.circle(0,0,u*2,m),v=p.circle(0,0,h*2,g);f=i.insert("g",":first-child"),f.attr("class",$n(e.cssClasses)).attr("style",$n(d)),f.node()?.appendChild(y),f.node()?.appendChild(v)}else{f=i.insert("g",":first-child");let p=f.insert("circle",":first-child"),m=f.insert("circle");f.attr("class","basic label-container").attr("style",n),p.attr("class","outer-circle").attr("style",n).attr("r",u).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",n).attr("r",h).attr("cx",0).attr("cy",0)}return je(e,f),e.intersect=function(p){return Y.info("DoubleCircle intersect",e,u,p),Ye.circle(e,u,p)},i}var nQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(rQ,"doublecircle")});function iQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.label="",e.labelStyle=n;let a=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=Xe.svg(a),{nodeBorder:h}=r,f=Ke(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),je(e,p),e.intersect=function(m){return Y.info("filledCircle intersect",e,{radius:s,point:m}),Ye.circle(e,s,m)},a}var aQ=N(()=>{"use strict";Wt();vt();Ht();Ut();Ft();o(iQ,"filledCircle")});async function sQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=l+a.height,h=l+a.height,f=[{x:0,y:-u},{x:h,y:-u},{x:h/2,y:0}],{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(f),y=p.path(g,m),v=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`);return d&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),e.width=l,e.height=u,je(e,v),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${-u/2+(e.padding??0)/2+(a.y-(a.top??0))})`),e.intersect=function(x){return Y.info("Triangle intersect",e,f,x),Ye.polygon(e,f,x)},i}var oQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();Ft();o(sQ,"flippedTriangle")});function lQ(t,e,{dir:r,config:{state:n,themeVariables:i}}){let{nodeStyles:a}=Qe(e);e.label="";let s=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=Xe.svg(s),m=Ke(e,{stroke:i.lineColor,fill:i.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),je(e,y);let v=n?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return Ye.rect(e,x)},s}var cQ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(lQ,"forkJoin")});async function uQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i=80,a=50,{shapeSvg:s,bbox:l}=await pt(t,e,ht(e)),u=Math.max(i,l.width+(e.padding??0)*2,e?.width??0),h=Math.max(a,l.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(s),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-u/2,y:-h/2},{x:u/2-f,y:-h/2},...Lw(-u/2+f,0,f,50,90,270),{x:u/2-f,y:h/2},{x:-u/2,y:h/2}],y=Xt(g),v=p.path(y,m),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),je(e,x),e.intersect=function(b){return Y.info("Pill intersect",e,{radius:f,point:b}),Ye.polygon(e,g,b)},s}var hQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();o(uQ,"halfRoundedRectangle")});async function fQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=4,l=a.height+e.padding,u=l/s,h=a.width+2*u+e.padding,f=[{x:u,y:0},{x:h-u,y:0},{x:h,y:-l/2},{x:h-u,y:-l},{x:u,y:-l},{x:0,y:-l/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=Ke(e,{}),y=f_e(0,0,h,l,u),v=m.path(y,g);d=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${l/2})`),p&&d.attr("style",p)}else d=La(i,h,l,f);return n&&d.attr("style",n),e.width=h,e.height=l,je(e,d),e.intersect=function(m){return Ye.polygon(e,f,m)},i}var f_e,dQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();f_e=o((t,e,r,n,i)=>[`M${t+i},${e}`,`L${t+r-i},${e}`,`L${t+r},${e-n/2}`,`L${t+r-i},${e-n}`,`L${t+i},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createHexagonPathD");o(fQ,"hexagon")});async function pQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.label="",e.labelStyle=r;let{shapeSvg:i}=await pt(t,e,ht(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=Xe.svg(i),h=Ke(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=Xt(f),p=u.path(d,h),m=i.insert(()=>p,":first-child");return m.attr("class","basic label-container"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),n&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",n),m.attr("transform",`translate(${-a/2}, ${-s/2})`),je(e,m),e.intersect=function(g){return Y.info("Pill intersect",e,{points:f}),Ye.polygon(e,f,g)},i}var mQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();o(pQ,"hourglass")});async function gQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await pt(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=mc(e),x=-g/2,b=-m/2,w=e.label?8:0,C=Xe.svg(h),T=Ke(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let E=C.rectangle(x,b,g,m,T),A=Math.max(g,f.width),S=m+f.height+w,_=C.rectangle(-A/2,-S/2,A,S,{...T,fill:"transparent",stroke:"none"}),I=h.insert(()=>E,":first-child"),D=h.insert(()=>_);if(e.icon){let k=h.append("g");k.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let L=k.node().getBBox(),R=L.width,O=L.height,M=L.x,B=L.y;k.attr("transform",`translate(${-R/2-M},${p?f.height/2+w/2-O/2-B:-f.height/2-w/2-O/2-B})`),k.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-S/2:S/2-f.height})`),I.attr("transform",`translate(0,${p?f.height/2+w/2:-f.height/2-w/2})`),je(e,D),e.intersect=function(k){if(Y.info("iconSquare intersect",e,k),!e.label)return Ye.rect(e,k);let L=e.x??0,R=e.y??0,O=e.height??0,M=[];return p?M=[{x:L-f.width/2,y:R-O/2},{x:L+f.width/2,y:R-O/2},{x:L+f.width/2,y:R-O/2+f.height+w},{x:L+g/2,y:R-O/2+f.height+w},{x:L+g/2,y:R+O/2},{x:L-g/2,y:R+O/2},{x:L-g/2,y:R-O/2+f.height+w},{x:L-f.width/2,y:R-O/2+f.height+w}]:M=[{x:L-g/2,y:R-O/2},{x:L+g/2,y:R-O/2},{x:L+g/2,y:R-O/2+m},{x:L+f.width/2,y:R-O/2+m},{x:L+f.width/2/2,y:R+O/2},{x:L-f.width/2,y:R+O/2},{x:L-f.width/2,y:R-O/2+m},{x:L-g/2,y:R-O/2+m}],Ye.polygon(e,M,k)},h}var yQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();Ft();o(gQ,"icon")});async function vQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await pt(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=mc(e),b=Xe.svg(h),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=x.get("fill");w.stroke=C??v;let T=h.append("g");e.icon&&T.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let E=T.node().getBBox(),A=E.width,S=E.height,_=E.x,I=E.y,D=Math.max(A,S)*Math.SQRT2+p*2,k=b.circle(0,0,D,w),L=Math.max(D,f.width),R=D+f.height+m,O=b.rectangle(-L/2,-R/2,L,R,{...w,fill:"transparent",stroke:"none"}),M=h.insert(()=>k,":first-child"),B=h.insert(()=>O);return T.attr("transform",`translate(${-A/2-_},${g?f.height/2+m/2-S/2-I:-f.height/2-m/2-S/2-I})`),T.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-R/2:R/2-f.height})`),M.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),je(e,B),e.intersect=function(F){return Y.info("iconSquare intersect",e,F),Ye.rect(e,F)},h}var xQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();Ft();o(vQ,"iconCircle")});var Na,qh=N(()=>{"use strict";Na=o((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD")});async function bQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await pt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=mc(e),w=-y/2,C=-g/2,T=e.label?8:0,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=b.get("fill");A.stroke=S??x;let _=E.path(Na(w,C,y,g,5),A),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...A,fill:"transparent",stroke:"none"}),L=h.insert(()=>_,":first-child").attr("class","icon-shape2"),R=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let M=O.node().getBBox(),B=M.width,F=M.height,P=M.x,z=M.y;O.attr("transform",`translate(${-B/2-P},${m?f.height/2+T/2-F/2-z:-f.height/2-T/2-F/2-z})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),L.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,R),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let M=e.x??0,B=e.y??0,F=e.height??0,P=[];return m?P=[{x:M-f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2+f.height+T},{x:M+y/2,y:B-F/2+f.height+T},{x:M+y/2,y:B+F/2},{x:M-y/2,y:B+F/2},{x:M-y/2,y:B-F/2+f.height+T},{x:M-f.width/2,y:B-F/2+f.height+T}]:P=[{x:M-y/2,y:B-F/2},{x:M+y/2,y:B-F/2},{x:M+y/2,y:B-F/2+g},{x:M+f.width/2,y:B-F/2+g},{x:M+f.width/2/2,y:B+F/2},{x:M-f.width/2,y:B+F/2},{x:M-f.width/2,y:B-F/2+g},{x:M-y/2,y:B-F/2+g}],Ye.polygon(e,P,O)},h}var wQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();qh();Ft();o(bQ,"iconRounded")});async function TQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await pt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=mc(e),w=-y/2,C=-g/2,T=e.label?8:0,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=b.get("fill");A.stroke=S??x;let _=E.path(Na(w,C,y,g,.1),A),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...A,fill:"transparent",stroke:"none"}),L=h.insert(()=>_,":first-child"),R=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let M=O.node().getBBox(),B=M.width,F=M.height,P=M.x,z=M.y;O.attr("transform",`translate(${-B/2-P},${m?f.height/2+T/2-F/2-z:-f.height/2-T/2-F/2-z})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),L.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,R),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let M=e.x??0,B=e.y??0,F=e.height??0,P=[];return m?P=[{x:M-f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2+f.height+T},{x:M+y/2,y:B-F/2+f.height+T},{x:M+y/2,y:B+F/2},{x:M-y/2,y:B+F/2},{x:M-y/2,y:B-F/2+f.height+T},{x:M-f.width/2,y:B-F/2+f.height+T}]:P=[{x:M-y/2,y:B-F/2},{x:M+y/2,y:B-F/2},{x:M+y/2,y:B-F/2+g},{x:M+f.width/2,y:B-F/2+g},{x:M+f.width/2/2,y:B+F/2},{x:M-f.width/2,y:B+F/2},{x:M-f.width/2,y:B-F/2+g},{x:M-y/2,y:B-F/2+g}],Ye.polygon(e,P,O)},h}var kQ=N(()=>{"use strict";Wt();vt();tu();Ht();qh();Ut();Ft();o(TQ,"iconSquare")});async function EQ(t,e,{config:{flowchart:r}}){let n=new Image;n.src=e?.img??"",await n.decode();let i=Number(n.naturalWidth.toString().replace("px","")),a=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=i/a;let{labelStyles:s}=Qe(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??i),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await pt(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=Xe.svg(d),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=b.rectangle(y,v,h,f,w),T=Math.max(h,p.width),E=f+p.height+x,A=b.rectangle(-T/2,-E/2,T,E,{...w,fill:"none",stroke:"none"}),S=d.insert(()=>C,":first-child"),_=d.insert(()=>A);if(e.img){let I=d.append("image");I.attr("href",e.img),I.attr("width",h),I.attr("height",f),I.attr("preserveAspectRatio","none"),I.attr("transform",`translate(${-h/2},${g?E/2-f:-E/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),S.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),je(e,_),e.intersect=function(I){if(Y.info("iconSquare intersect",e,I),!e.label)return Ye.rect(e,I);let D=e.x??0,k=e.y??0,L=e.height??0,R=[];return g?R=[{x:D-p.width/2,y:k-L/2},{x:D+p.width/2,y:k-L/2},{x:D+p.width/2,y:k-L/2+p.height+x},{x:D+h/2,y:k-L/2+p.height+x},{x:D+h/2,y:k+L/2},{x:D-h/2,y:k+L/2},{x:D-h/2,y:k-L/2+p.height+x},{x:D-p.width/2,y:k-L/2+p.height+x}]:R=[{x:D-h/2,y:k-L/2},{x:D+h/2,y:k-L/2},{x:D+h/2,y:k-L/2+f},{x:D+p.width/2,y:k-L/2+f},{x:D+p.width/2/2,y:k+L/2},{x:D-p.width/2,y:k+L/2},{x:D-p.width/2,y:k-L/2+f},{x:D-h/2,y:k-L/2+f}],Ye.polygon(e,R,I)},d}var SQ=N(()=>{"use strict";Wt();vt();Ht();Ut();Ft();o(EQ,"imageSquare")});async function CQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var AQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(CQ,"inv_trapezoid")});async function Du(t,e,r){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n;let{shapeSvg:a,bbox:s}=await pt(t,e,ht(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=Xe.svg(a),v=Ke(e,{}),x=p||m?y.path(Na(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",$n(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",i).attr("rx",$n(p)).attr("ry",$n(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return je(e,d),e.intersect=function(y){return Ye.rect(e,y)},a}var mm=N(()=>{"use strict";Ft();Ht();qh();Ut();Wt();ir();o(Du,"drawRect")});async function _Q(t,e){let{shapeSvg:r,bbox:n,label:i}=await pt(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-(n.width/2)-(n.x-(n.left??0))}, ${-(n.height/2)-(n.y-(n.top??0))})`),je(e,a),e.intersect=function(u){return Ye.rect(e,u)},r}var DQ=N(()=>{"use strict";mm();Ft();Ht();o(_Q,"labelRect")});async function LQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-(3*l)/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var RQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(LQ,"lean_left")});async function NQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var MQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(NQ,"lean_right")});function IQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.label="",e.labelStyle=r;let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=Xe.svg(i),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=Xt(h),m=f.path(p,d),g=i.insert(()=>m,":first-child");return a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),n&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",n),g.attr("transform",`translate(-${s/2},${-l})`),je(e,g),e.intersect=function(y){return Y.info("lightningBolt intersect",e,y),Ye.polygon(e,h,y)},i}var OQ=N(()=>{"use strict";vt();Ft();Ut();Wt();Ht();Ft();o(IQ,"lightningBolt")});async function PQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+(e.padding??0),e.height??0),d=f*.1,p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=Xe.svg(i),y=p_e(0,0,l,f,u,h,d),v=m_e(0,h,l,f,u,h),x=Ke(e,{}),b=g.path(y,x),w=g.path(v,x);i.insert(()=>w,":first-child").attr("class","line"),p=i.insert(()=>b,":first-child"),p.attr("class","basic label-container"),m&&p.attr("style",m)}else{let g=d_e(0,0,l,f,u,h,d);p=i.insert("path",":first-child").attr("d",g).attr("class","basic label-container").attr("style",$n(m)).attr("style",n)}return p.attr("label-offset-y",h),p.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,p),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),e.intersect=function(g){let y=Ye.rect(e,g),v=y.x-(e.x??0);if(u!=0&&(Math.abs(v)<(e.width??0)/2||Math.abs(v)==(e.width??0)/2&&Math.abs(y.y-(e.y??0))>(e.height??0)/2-h)){let x=h*h*(1-v*v/(u*u));x>0&&(x=Math.sqrt(x)),x=h-x,g.y-(e.y??0)>0&&(x=-x),y.y+=x}return y},i}var d_e,p_e,m_e,BQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();d_e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),p_e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),m_e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(PQ,"linedCylinder")});async function FQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-l/2-l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:f/2},...Fo(-l/2-l/2*.1,f/2,l/2+l/2*.1,f/2,h,.8),{x:l/2+l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:-f/2},{x:-l/2,y:-f/2},{x:-l/2,y:f/2*1.1},{x:-l/2,y:-f/2}],y=p.polygon(g.map(x=>[x.x,x.y]),m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,v),e.intersect=function(x){return Ye.polygon(e,g,x)},i}var $Q=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(FQ,"linedWaveEdgedRect")});async function zQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d+h},{x:f-h,y:d+u+h},{x:f+l-h,y:d+u+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d+u-h},{x:f+l+h,y:d+u-h},{x:f+l+h,y:d-h},{x:f+h,y:d-h},{x:f+h,y:d},{x:f,y:d},{x:f,y:d+h}],v=[{x:f,y:d+h},{x:f+l-h,y:d+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d},{x:f,y:d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),w=Xt(v),C=m.path(w,{...g,fill:"none"}),T=i.insert(()=>C,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)-h-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var GQ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(zQ,"multiRect")});async function VQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,d=-l/2,p=-f/2,m=5,{cssStyles:g}=e,y=Fo(d-m,p+f+m,d+l-m,p+f+m,h,.8),v=y?.[y.length-1],x=[{x:d-m,y:p+m},{x:d-m,y:p+f+m},...y,{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:v.y-2*m},{x:d+l+m,y:v.y-2*m},{x:d+l+m,y:p-m},{x:d+m,y:p-m},{x:d+m,y:p},{x:d,y:p},{x:d,y:p+m}],b=[{x:d,y:p+m},{x:d+l-m,y:p+m},{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:p},{x:d,y:p}],w=Xe.svg(i),C=Ke(e,{});e.look!=="handDrawn"&&(C.roughness=0,C.fillStyle="solid");let T=Xt(x),E=w.path(T,C),A=Xt(b),S=w.path(A,C),_=i.insert(()=>E,":first-child");return _.insert(()=>S),_.attr("class","basic label-container"),g&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",g),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-(a.width/2)-m-(a.x-(a.left??0))}, ${-(a.height/2)+m-h/2-(a.y-(a.top??0))})`),je(e,_),e.intersect=function(I){return Ye.polygon(e,x,I)},i}var UQ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(VQ,"multiWaveEdgedRectangle")});async function HQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n,e.useHtmlLabels||cr().flowchart?.htmlLabels!==!1||(e.centerLabel=!0);let{shapeSvg:s,bbox:l}=await pt(t,e,ht(e)),u=Math.max(l.width+(e.padding??0)*2,e?.width??0),h=Math.max(l.height+(e.padding??0)*2,e?.height??0),f=-u/2,d=-h/2,{cssStyles:p}=e,m=Xe.svg(s),g=Ke(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=m.rectangle(f,d,u,h,g),v=s.insert(()=>y,":first-child");return v.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",i),je(e,v),e.intersect=function(x){return Ye.rect(e,x)},s}var WQ=N(()=>{"use strict";Wt();Ht();Ut();Ft();ji();o(HQ,"note")});async function qQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=s+l,h=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=g_e(0,0,u),y=p.path(g,m);f=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`),d&&f.attr("style",d)}else f=La(i,u,u,h);return n&&f.attr("style",n),je(e,f),e.intersect=function(p){return Y.debug(`APA12 Intersect called SPLIT | |
| 450 | +point:`,p,` | |
| 451 | +node: | |
| 452 | +`,e,` | |
| 453 | +res:`,Ye.polygon(e,h,p)),Ye.polygon(e,h,p)},i}var g_e,YQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();_u();g_e=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(qQ,"question")});async function XQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e?.width??0),u=Math.max(a.height+(e.padding??0),e?.height??0),h=-l/2,f=-u/2,d=f/2,p=[{x:h+d,y:f},{x:h,y:0},{x:h+d,y:-f},{x:-h,y:-f},{x:-h,y:f}],{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=Xt(p),x=g.path(v,y),b=i.insert(()=>x,":first-child");return b.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(${-d/2},0)`),s.attr("transform",`translate(${-d/2-a.width/2-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,p,w)},i}var jQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(XQ,"rect_left_inv_arrow")});function y_e(t,e){e&&t.attr("style",e)}async function v_e(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label;t.label&&pi(t.label)&&(n=await mh(t.label.replace(Ze.lineBreakRegex,` | |
| 454 | +`),me()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+n+"</span>"),y_e(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var x_e,gc,Gw=N(()=>{"use strict";dr();vt();zt();gr();ir();o(y_e,"applyStyle");o(v_e,"addHtmlLabel");x_e=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),fr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),Y.info("vertexText"+i);let a={isNode:n,label:na(i).replace(/fa[blrs]?:fa-[\w-]+/g,l=>`<i class='${l.replace(":"," ")}'></i>`),labelStyle:e&&e.replace("fill:","color:")};return await v_e(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),gc=x_e});async function KQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i;e.cssClasses?i="node "+e.cssClasses:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",n),u=e.description,h=e.label,f=l.node().appendChild(await gc(h,e.labelStyle,!0,!0)),d={width:0,height:0};if(fr(me()?.flowchart?.htmlLabels)){let S=f.children[0],_=Ge(f);d=S.getBoundingClientRect(),_.attr("width",d.width),_.attr("height",d.height)}Y.info("Text 2",u);let p=u||[],m=f.getBBox(),g=l.node().appendChild(await gc(p.join?p.join("<br/>"):p,e.labelStyle,!0,!0)),y=g.children[0],v=Ge(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;Ge(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),Ge(f).attr("transform","translate( "+(d.width<m.width?0:-(m.width-d.width)/2)+", 0)"),d=l.node().getBBox(),l.attr("transform","translate("+-d.width/2+", "+(-d.height/2-x+3)+")");let b=d.width+(e.padding||0),w=d.height+(e.padding||0),C=-d.width/2-x,T=-d.height/2-x,E,A;if(e.look==="handDrawn"){let S=Xe.svg(a),_=Ke(e,{}),I=S.path(Na(C,T,b,w,e.rx||0),_),D=S.line(-d.width/2-x,-d.height/2-x+m.height+x,d.width/2+x,-d.height/2-x+m.height+x,_);A=a.insert(()=>(Y.debug("Rough node insert CXC",I),D),":first-child"),E=a.insert(()=>(Y.debug("Rough node insert CXC",I),I),":first-child")}else E=s.insert("rect",":first-child"),A=s.insert("line"),E.attr("class","outer title-state").attr("style",n).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),A.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return je(e,E),e.intersect=function(S){return Ye.rect(e,S)},a}var QQ=N(()=>{"use strict";dr();gr();Ft();Gw();Ht();Ut();Wt();zt();qh();vt();o(KQ,"rectWithTitle")});async function ZQ(t,e){let r={rx:5,ry:5,classes:"",labelPaddingX:(e?.padding||0)*1,labelPaddingY:(e?.padding||0)*1};return Du(t,e,r)}var JQ=N(()=>{"use strict";mm();o(ZQ,"roundedRect")});async function eZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=e?.padding??0,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=-a.width/2-l,d=-a.height/2-l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d},{x:f+u+8,y:d},{x:f+u+8,y:d+h},{x:f-8,y:d+h},{x:f-8,y:d},{x:f,y:d},{x:f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container").attr("style",$n(p)),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${-u/2+4+(e.padding??0)-(a.x-(a.left??0))},${-h/2+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var tZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();o(eZ,"shadedProcess")});async function rZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=-l/2,f=-u/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:h,y:f},{x:h,y:f+u},{x:h+l,y:f+u},{x:h+l,y:f-u/2}],y=Xt(g),v=p.path(y,m),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),x.attr("transform",`translate(0, ${u/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))}, ${-u/4+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.polygon(e,g,b)},i}var nZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(rZ,"slopedRect")});async function iZ(t,e){let r={rx:0,ry:0,classes:"",labelPaddingX:(e?.padding||0)*2,labelPaddingY:(e?.padding||0)*1};return Du(t,e,r)}var aZ=N(()=>{"use strict";mm();o(iZ,"squareRect")});async function sZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.height+e.padding,l=a.width+s/4+e.padding,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=Na(-l/2,-s/2,l,s,s/2),m=f.path(p,d);u=i.insert(()=>m,":first-child"),u.attr("class","basic label-container").attr("style",$n(h))}else u=i.insert("rect",":first-child"),u.attr("class","basic label-container").attr("style",n).attr("rx",s/2).attr("ry",s/2).attr("x",-l/2).attr("y",-s/2).attr("width",l).attr("height",s);return je(e,u),e.intersect=function(f){return Ye.rect(e,f)},i}var oZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();qh();ir();o(sZ,"stadium")});async function lZ(t,e){return Du(t,e,{rx:5,ry:5,classes:"flowchart-node"})}var cZ=N(()=>{"use strict";mm();o(lZ,"state")});function uZ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u}=r,h=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),f=Xe.svg(h),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=f.circle(0,0,14,{...d,stroke:s,strokeWidth:2}),m=l??u,g=f.circle(0,0,5,{...d,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),y=h.insert(()=>p,":first-child");return y.insert(()=>g),a&&y.selectAll("path").attr("style",a),i&&y.selectAll("path").attr("style",i),je(e,y),e.intersect=function(v){return Ye.circle(e,7,v)},h}var hZ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(uZ,"stateEnd")});function fZ(t,e,{config:{themeVariables:r}}){let{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a;if(e.look==="handDrawn"){let l=Xe.svg(i).circle(0,0,14,gK(n));a=i.insert(()=>l),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else a=i.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return je(e,a),e.intersect=function(s){return Ye.circle(e,7,s)},i}var dZ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(fZ,"stateStart")});async function pZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=(e?.padding||0)/2,l=a.width+e.padding,u=a.height+e.padding,h=-a.width/2-s,f=-a.height/2-s,d=[{x:0,y:0},{x:l,y:0},{x:l,y:-u},{x:0,y:-u},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-u},{x:-8,y:-u},{x:-8,y:0}];if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=p.rectangle(h-8,f,l+16,u,m),y=p.line(h,f,h,f+u,m),v=p.line(h+l,f,h+l,f+u,m);i.insert(()=>y,":first-child"),i.insert(()=>v,":first-child");let x=i.insert(()=>g,":first-child"),{cssStyles:b}=e;x.attr("class","basic label-container").attr("style",$n(b)),je(e,x)}else{let p=La(i,l,u,d);n&&p.attr("style",n),je(e,p)}return e.intersect=function(p){return Ye.polygon(e,d,p)},i}var mZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();ir();o(pZ,"subroutine")});async function gZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=-s/2,h=-l/2,f=.2*l,d=.2*l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:u-f/2,y:h},{x:u+s+f/2,y:h},{x:u+s+f/2,y:h+l},{x:u-f/2,y:h+l}],v=[{x:u+s-f/2,y:h+l},{x:u+s+f/2,y:h+l},{x:u+s+f/2,y:h+l-d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),w=Xt(v),C=m.path(w,{...g,fillStyle:"solid"}),T=i.insert(()=>C,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var yZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(gZ,"taggedRect")});async function vZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...Fo(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,w=[{x:x+l-f,y:(b+u)*1.4},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...Fo(x+l,(b+u)*1.3,x+l-f,(b+u)*1.5,-u*.03,.5)],C=Xt(v),T=g.path(C,y),E=Xt(w),A=g.path(E,{...y,fillStyle:"solid"}),S=i.insert(()=>A,":first-child");return S.insert(()=>T,":first-child"),S.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(_){return Ye.polygon(e,v,_)},i}var xZ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(vZ,"taggedWaveEdgedRectangle")});async function bZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+e.padding,e?.width||0),l=Math.max(a.height+e.padding,e?.height||0),u=-s/2,h=-l/2,f=i.insert("rect",":first-child");return f.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),je(e,f),e.intersect=function(d){return Ye.rect(e,d)},i}var wZ=N(()=>{"use strict";Ft();Ht();Ut();o(bZ,"text")});async function TZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s,halfPadding:l}=await pt(t,e,ht(e)),u=e.look==="neo"?l*2:l,h=a.height+u,f=h/2,d=f/(2.5+h/50),p=a.width+d+u,{cssStyles:m}=e,g;if(e.look==="handDrawn"){let y=Xe.svg(i),v=w_e(0,0,p,h,d,f),x=T_e(0,0,p,h,d,f),b=y.path(v,Ke(e,{})),w=y.path(x,Ke(e,{fill:"none"}));g=i.insert(()=>w,":first-child"),g=i.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=b_e(0,0,p,h,d,f);g=i.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",$n(m)).attr("style",n),g.attr("class","basic label-container"),m&&g.selectAll("path").attr("style",m),n&&g.selectAll("path").attr("style",n)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),s.attr("transform",`translate(${-(a.width/2)-d-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,g),e.intersect=function(y){let v=Ye.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(Math.abs(b))),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},i}var b_e,w_e,T_e,kZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();ir();b_e=o((t,e,r,n,i,a)=>`M${t},${e} | |
| 455 | + a${i},${a} 0,0,1 0,${-n} | |
| 456 | + l${r},0 | |
| 457 | + a${i},${a} 0,0,1 0,${n} | |
| 458 | + M${r},${-n} | |
| 459 | + a${i},${a} 0,0,0 0,${n} | |
| 460 | + l${-r},0`,"createCylinderPathD"),w_e=o((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),T_e=o((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");o(TZ,"tiltedCylinder")});async function EZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var SZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(EZ,"trapezoid")});async function CZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=60,l=20,u=Math.max(s,a.width+(e.padding??0)*2,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),{cssStyles:f}=e,d=Xe.svg(i),p=Ke(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=[{x:-u/2*.8,y:-h/2},{x:u/2*.8,y:-h/2},{x:u/2,y:-h/2*.6},{x:u/2,y:h/2},{x:-u/2,y:h/2},{x:-u/2,y:-h/2*.6}],g=Xt(m),y=d.path(g,p),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),je(e,v),e.intersect=function(x){return Ye.polygon(e,m,x)},i}var AZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(CZ,"trapezoidalPentagon")});async function _Z(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=fr(me().flowchart?.htmlLabels),u=a.width+(e.padding??0),h=u+a.height,f=u+a.height,d=[{x:0,y:0},{x:f,y:0},{x:f/2,y:-h}],{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=Xt(d),v=m.path(y,g),x=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${h/2})`);return p&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),e.width=u,e.height=h,je(e,x),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${h/2-(a.height+(e.padding??0)/(l?2:1)-(a.y-(a.top??0)))})`),e.intersect=function(b){return Y.info("Triangle intersect",e,d,b),Ye.polygon(e,d,b)},i}var DZ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();Ft();gr();zt();o(_Z,"triangle")});async function LZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=u+h,{cssStyles:d}=e,m=70-l,g=m>0?m/2:0,y=Xe.svg(i),v=Ke(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-l/2-g,y:f/2},...Fo(-l/2-g,f/2,l/2+g,f/2,h,.8),{x:l/2+g,y:-f/2},{x:-l/2-g,y:-f/2}],b=Xt(x),w=y.path(b,v),C=i.insert(()=>w,":first-child");return C.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,x,T)},i}var RZ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(LZ,"waveEdgedRectangle")});async function NZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=100,l=50,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=u/h,d=u,p=h;d>p*f?p=d/f:d=p*f,d=Math.max(d,s),p=Math.max(p,l);let m=Math.min(p*.2,p/4),g=p+m*2,{cssStyles:y}=e,v=Xe.svg(i),x=Ke(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:-d/2,y:g/2},...Fo(-d/2,g/2,d/2,g/2,m,1),{x:d/2,y:-g/2},...Fo(d/2,-g/2,-d/2,-g/2,m,-1)],w=Xt(b),C=v.path(w,x),T=i.insert(()=>C,":first-child");return T.attr("class","basic label-container"),y&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",y),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var MZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(NZ,"waveRectangle")});async function IZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d-h},{x:f-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d-h}],v=`M${f-h},${d-h} L${f+l},${d-h} L${f+l},${d+u} L${f-h},${d+u} L${f-h},${d-h} | |
| 461 | + M${f-h},${d} L${f+l},${d} | |
| 462 | + M${f},${d-h} L${f},${d+u}`;e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("transform",`translate(${h/2}, ${h/2})`),b.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)+h/2-(a.x-(a.left??0))}, ${-(a.height/2)+h/2-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,y,w)},i}var OZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(IZ,"windowPane")});async function KD(t,e){let r=e;if(r.alias&&(e.label=r.alias),e.look==="handDrawn"){let{themeVariables:P}=cr(),{background:z}=P,$={...e,id:e.id+"-background",look:"default",cssStyles:["stroke: none",`fill: ${z}`]};await KD(t,$)}let n=cr();e.useHtmlLabels=n.htmlLabels;let i=n.er?.diagramPadding??10,a=n.er?.entityPadding??6,{cssStyles:s}=e,{labelStyles:l}=Qe(e);if(r.attributes.length===0&&e.label){let P={rx:0,ry:0,labelPaddingX:i,labelPaddingY:i*1.5,classes:""};ra(e.label,n)+P.labelPaddingX*2<n.er.minEntityWidth&&(e.width=n.er.minEntityWidth);let z=await Du(t,e,P);if(!fr(n.htmlLabels)){let $=z.select("text"),H=$.node()?.getBBox();$.attr("transform",`translate(${-H.width/2}, 0)`)}return z}n.htmlLabels||(i*=1.25,a*=1.25);let u=ht(e);u||(u="node default");let h=t.insert("g").attr("class",u).attr("id",e.domId||e.id),f=await b2(h,e.label??"",n,0,0,["name"],l);f.height+=a;let d=0,p=[],m=0,g=0,y=0,v=0,x=!0,b=!0;for(let P of r.attributes){let z=await b2(h,P.type,n,0,d,["attribute-type"],l);m=Math.max(m,z.width+i);let $=await b2(h,P.name,n,0,d,["attribute-name"],l);g=Math.max(g,$.width+i);let H=await b2(h,P.keys.join(),n,0,d,["attribute-keys"],l);y=Math.max(y,H.width+i);let Q=await b2(h,P.comment,n,0,d,["attribute-comment"],l);v=Math.max(v,Q.width+i),d+=Math.max(z.height,$.height,H.height,Q.height)+a,p.push(d)}p.pop();let w=4;y<=i&&(x=!1,y=0,w--),v<=i&&(b=!1,v=0,w--);let C=h.node().getBBox();if(f.width+i*2-(m+g+y+v)>0){let P=f.width+i*2-(m+g+y+v);m+=P/w,g+=P/w,y>0&&(y+=P/w),v>0&&(v+=P/w)}let T=m+g+y+v,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=Math.max(C.width+i*2,e?.width||0,T),_=Math.max(C.height+(p[0]||d)+a,e?.height||0),I=-S/2,D=-_/2;h.selectAll("g:not(:first-child)").each((P,z,$)=>{let H=Ge($[z]),Q=H.attr("transform"),j=0,ie=0;if(Q){let le=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(Q);le&&(j=parseFloat(le[1]),ie=parseFloat(le[2]),H.attr("class").includes("attribute-name")?j+=m:H.attr("class").includes("attribute-keys")?j+=m+g:H.attr("class").includes("attribute-comment")&&(j+=m+g+y))}H.attr("transform",`translate(${I+i/2+j}, ${ie+D+f.height+a/2})`)}),h.select(".name").attr("transform","translate("+-f.width/2+", "+(D+a/2)+")");let k=E.rectangle(I,D,S,_,A),L=h.insert(()=>k,":first-child").attr("style",s.join("")),{themeVariables:R}=cr(),{rowEven:O,rowOdd:M,nodeBorder:B}=R;p.push(0);for(let[P,z]of p.entries()){if(P===0&&p.length>1)continue;let $=P%2===0&&z!==0,H=E.rectangle(I,f.height+D+z,S,f.height,{...A,fill:$?O:M,stroke:B});h.insert(()=>H,"g.label").attr("style",s.join("")).attr("class",`row-rect-${P%2===0?"even":"odd"}`)}let F=E.line(I,f.height+D,S+I,f.height+D,A);h.insert(()=>F).attr("class","divider"),F=E.line(m+I,f.height+D,m+I,_+D,A),h.insert(()=>F).attr("class","divider"),x&&(F=E.line(m+g+I,f.height+D,m+g+I,_+D,A),h.insert(()=>F).attr("class","divider")),b&&(F=E.line(m+g+y+I,f.height+D,m+g+y+I,_+D,A),h.insert(()=>F).attr("class","divider"));for(let P of p)F=E.line(I,f.height+D+P,S+I,f.height+D+P,A),h.insert(()=>F).attr("class","divider");return je(e,L),e.intersect=function(P){return Ye.rect(e,P)},h}async function b2(t,e,r,n=0,i=0,a=[],s=""){let l=t.insert("g").attr("class",`label ${a.join(" ")}`).attr("transform",`translate(${n}, ${i})`).attr("style",s);e!==ec(e)&&(e=ec(e),e=e.replaceAll("<","<").replaceAll(">",">"));let u=l.node().appendChild(await Hn(l,e,{width:ra(e,r)+100,style:s,useHtmlLabels:r.htmlLabels},r));if(e.includes("<")||e.includes(">")){let f=u.children[0];for(f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">");f.childNodes[0];)f=f.childNodes[0],f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">")}let h=u.getBBox();if(fr(r.htmlLabels)){let f=u.children[0];f.style.textAlign="start";let d=Ge(u);h=f.getBoundingClientRect(),d.attr("width",h.width),d.attr("height",h.height)}return h}var PZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();mm();ji();to();gr();dr();ir();o(KD,"erBox");o(b2,"addText")});async function BZ(t,e,r,n,i=r.class.padding??12){let a=n?0:3,s=t.insert("g").attr("class",ht(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await Vw(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await Vw(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let w=await Vw(h,b,y,[b.parseClassifier()]);y+=w+a}m=h.node().getBBox().height,m<=0&&(m=i/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let w=await Vw(f,b,v,[b.parseClassifier()]);v+=w+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+i*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+i*4:i*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function Vw(t,e,r,n=[]){let i=t.insert("g").attr("class","label").attr("style",n.join("; ")),a=cr(),s="useHtmlLabels"in e?e.useHtmlLabels:fr(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),pi(l)&&(s=!0);let u=await Hn(i,Xy(na(l)),{width:ra(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=Ge(u);f=d.innerHTML.split("<br>").length,d.innerHTML.includes("</math>")&&(f+=d.innerHTML.split("<mrow>").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,C=parseInt(b,10)*5+"px";y.style.minWidth=C,y.style.maxWidth=C}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{n.includes("font-weight: bolder")&&Ge(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(d.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return i.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var FZ=N(()=>{"use strict";dr();ji();Ft();ir();zt();to();gr();o(BZ,"textHelper");o(Vw,"addText")});async function $Z(t,e){let r=me(),n=r.class.padding??12,i=n,a=e.useHtmlLabels??fr(r.htmlLabels)??!0,s=e;s.annotations=s.annotations??[],s.members=s.members??[],s.methods=s.methods??[];let{shapeSvg:l,bbox:u}=await BZ(t,e,r,a,i),{labelStyles:h,nodeStyles:f}=Qe(e);e.labelStyle=h,e.cssStyles=s.styles||"";let d=s.styles?.join(";")||f||"";e.cssStyles||(e.cssStyles=d.replaceAll("!important","").split(";"));let p=s.members.length===0&&s.methods.length===0&&!r.class?.hideEmptyMembersBox,m=Xe.svg(l),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=u.width,v=u.height;s.members.length===0&&s.methods.length===0?v+=i:s.members.length>0&&s.methods.length===0&&(v+=i*2);let x=-y/2,b=-v/2,w=m.rectangle(x-n,b-n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0),y+2*n,v+2*n+(p?n*2:s.members.length===0&&s.methods.length===0?-n:0),g),C=l.insert(()=>w,":first-child");C.attr("class","basic label-container");let T=C.node().getBBox();l.selectAll(".text").each((_,I,D)=>{let k=Ge(D[I]),L=k.attr("transform"),R=0;if(L){let F=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(L);F&&(R=parseFloat(F[2]))}let O=R+b+n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0);a||(O-=4);let M=x;(k.attr("class").includes("label-group")||k.attr("class").includes("annotation-group"))&&(M=-k.node()?.getBBox().width/2||0,l.selectAll("text").each(function(B,F,P){window.getComputedStyle(P[F]).textAnchor==="middle"&&(M=0)})),k.attr("transform",`translate(${M}, ${O})`)});let E=l.select(".annotation-group").node().getBBox().height-(p?n/2:0)||0,A=l.select(".label-group").node().getBBox().height-(p?n/2:0)||0,S=l.select(".members-group").node().getBBox().height-(p?n/2:0)||0;if(s.members.length>0||s.methods.length>0||p){let _=m.line(T.x,E+A+b+n,T.x+T.width,E+A+b+n,g);l.insert(()=>_).attr("class","divider").attr("style",d)}if(p||s.members.length>0||s.methods.length>0){let _=m.line(T.x,E+A+S+b+i*2+n,T.x+T.width,E+A+S+b+n+i*2,g);l.insert(()=>_).attr("class","divider").attr("style",d)}if(s.look!=="handDrawn"&&l.selectAll("path").attr("style",d),C.select(":nth-child(2)").attr("style",d),l.selectAll(".divider").select("path").attr("style",d),e.labelStyle?l.selectAll("span").attr("style",e.labelStyle):l.selectAll("span").attr("style",d),!a){let _=RegExp(/color\s*:\s*([^;]*)/),I=_.exec(d);if(I){let D=I[0].replace("color","fill");l.selectAll("tspan").attr("style",D)}else if(h){let D=_.exec(h);if(D){let k=D[0].replace("color","fill");l.selectAll("tspan").attr("style",k)}}}return je(e,C),e.intersect=function(_){return Ye.rect(e,_)},l}var zZ=N(()=>{"use strict";Ft();zt();dr();Wt();Ut();Ht();FZ();gr();o($Z,"classBox")});async function GZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i=e,a=e,s=20,l=20,u="verifyMethod"in e,h=ht(e),f=t.insert("g").attr("class",h).attr("id",e.domId??e.id),d;u?d=await Lu(f,`<<${i.type}>>`,0,e.labelStyle):d=await Lu(f,"<<Element>>",0,e.labelStyle);let p=d,m=await Lu(f,i.name,p,e.labelStyle+"; font-weight: bold;");if(p+=m+l,u){let E=await Lu(f,`${i.requirementId?`Id: ${i.requirementId}`:""}`,p,e.labelStyle);p+=E;let A=await Lu(f,`${i.text?`Text: ${i.text}`:""}`,p,e.labelStyle);p+=A;let S=await Lu(f,`${i.risk?`Risk: ${i.risk}`:""}`,p,e.labelStyle);p+=S,await Lu(f,`${i.verifyMethod?`Verification: ${i.verifyMethod}`:""}`,p,e.labelStyle)}else{let E=await Lu(f,`${a.type?`Type: ${a.type}`:""}`,p,e.labelStyle);p+=E,await Lu(f,`${a.docRef?`Doc Ref: ${a.docRef}`:""}`,p,e.labelStyle)}let g=(f.node()?.getBBox().width??200)+s,y=(f.node()?.getBBox().height??200)+s,v=-g/2,x=-y/2,b=Xe.svg(f),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=b.rectangle(v,x,g,y,w),T=f.insert(()=>C,":first-child");if(T.attr("class","basic label-container").attr("style",n),f.selectAll(".label").each((E,A,S)=>{let _=Ge(S[A]),I=_.attr("transform"),D=0,k=0;if(I){let M=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(I);M&&(D=parseFloat(M[1]),k=parseFloat(M[2]))}let L=k-y/2,R=v+s/2;(A===0||A===1)&&(R=D),_.attr("transform",`translate(${R}, ${L+s})`)}),p>d+m+l){let E=b.line(v,x+d+m+l,v+g,x+d+m+l,w);f.insert(()=>E).attr("style",n)}return je(e,T),e.intersect=function(E){return Ye.rect(e,E)},f}async function Lu(t,e,r,n=""){if(e==="")return 0;let i=t.insert("g").attr("class","label").attr("style",n),a=me(),s=a.htmlLabels??!0,l=await Hn(i,Xy(na(e)),{width:ra(e,a)+50,classes:"markdown-node-label",useHtmlLabels:s,style:n},a),u;if(s){let h=l.children[0],f=Ge(l);u=h.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}else{let h=l.children[0];for(let f of h.children)f.textContent=f.textContent.replaceAll(">",">").replaceAll("<","<"),n&&f.setAttribute("style",n);u=l.getBBox(),u.height+=6}return i.attr("transform",`translate(${-u.width/2},${-u.height/2+r})`),u.height}var VZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();zt();to();dr();o(GZ,"requirementBox");o(Lu,"addText")});async function UZ(t,e,{config:r}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await pt(t,e,ht(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await Dw(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await Dw(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await Dw(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,w=e?.width||0,C=Math.max(y.height,x.height)/2,T=Math.max(u.height+b*2,e?.height||0)+C,E=-w/2,A=-T/2;h.attr("transform","translate("+(f-w/2)+", "+(-C-u.height/2)+")"),g.attr("transform","translate("+(f-w/2)+", "+(-C+u.height/2)+")"),v.attr("transform","translate("+(f+w/2-x.width-2*a)+", "+(-C+u.height/2)+")");let S,{rx:_,ry:I}=e,{cssStyles:D}=e;if(e.look==="handDrawn"){let k=Xe.svg(l),L=Ke(e,{}),R=_||I?k.path(Na(E,A,w,T,_||0),L):k.rectangle(E,A,w,T,L);S=l.insert(()=>R,":first-child"),S.attr("class","basic label-container").attr("style",D||null)}else{S=l.insert("rect",":first-child"),S.attr("class","basic label-container __APA__").attr("style",i).attr("rx",_??5).attr("ry",I??5).attr("x",E).attr("y",A).attr("width",w).attr("height",T);let k="priority"in e&&e.priority;if(k){let L=l.append("line"),R=E+2,O=A+Math.floor((_??0)/2),M=A+T-Math.floor((_??0)/2);L.attr("x1",R).attr("y1",O).attr("x2",R).attr("y2",M).attr("stroke-width","4").attr("stroke",k_e(k))}}return je(e,S),e.height=T,e.intersect=function(k){return Ye.rect(e,k)},l}var k_e,HZ=N(()=>{"use strict";Ft();Ht();qh();Ut();Wt();k_e=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(UZ,"kanbanItem")});function WZ(t){return t in QD}var E_e,S_e,QD,ZD=N(()=>{"use strict";NK();OK();BK();$K();GK();UK();WK();YK();jK();QK();JK();tQ();nQ();aQ();oQ();cQ();hQ();dQ();mQ();yQ();xQ();wQ();kQ();SQ();AQ();DQ();RQ();MQ();OQ();BQ();$Q();GQ();UQ();WQ();YQ();jQ();QQ();JQ();tZ();nZ();aZ();oZ();cZ();hZ();dZ();mZ();yZ();xZ();wZ();kZ();SZ();AZ();DZ();RZ();MZ();OZ();PZ();zZ();VZ();HZ();E_e=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:iZ},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:ZQ},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:sZ},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:pZ},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:ZK},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:zK},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:qQ},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:fQ},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:NQ},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:LQ},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:EZ},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:CQ},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:rQ},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:bZ},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:PK},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:eZ},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:fZ},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:uZ},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:lQ},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:pQ},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:HK},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:qK},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:XK},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:IQ},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:LZ},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:uQ},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:TZ},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:PQ},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:KK},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:eQ},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:_Z},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:IZ},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:iQ},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:CZ},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:sQ},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:rZ},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:VQ},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:zQ},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:IK},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:VK},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:vZ},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:gZ},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:NZ},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:XQ},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:FQ}],S_e=o(()=>{let e=[...Object.entries({state:lZ,choice:FK,note:HQ,rectWithTitle:KQ,labelRect:_Q,iconSquare:TQ,iconCircle:vQ,icon:gQ,iconRounded:bQ,imageSquare:EQ,anchor:RK,kanbanItem:UZ,classBox:$Z,erBox:KD,requirementBox:GZ}),...E_e.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(i=>[i,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),QD=S_e();o(WZ,"isValidShape")});var C_e,Uw,qZ=N(()=>{"use strict";dr();Ew();zt();vt();ZD();ir();gr();mi();C_e="flowchart-",Uw=class{constructor(){this.vertexCounter=0;this.config=me();this.vertices=new Map;this.edges=[];this.classes=new Map;this.subGraphs=[];this.subGraphLookup=new Map;this.tooltips=new Map;this.subCount=0;this.firstGraphFlag=!0;this.secCount=-1;this.posCrossRef=[];this.funs=[];this.setAccTitle=Lr;this.setAccDescription=Nr;this.setDiagramTitle=$r;this.getAccTitle=Rr;this.getAccDescription=Mr;this.getDiagramTitle=Ir;this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{o(this,"FlowDB")}sanitizeText(e){return Ze.sanitizeText(e,this.config)}lookUpDomId(e){for(let r of this.vertices.values())if(r.id===e)return r.domId;return e}addVertex(e,r,n,i,a,s,l={},u){if(!e||e.trim().length===0)return;let h;if(u!==void 0){let m;u.includes(` | |
| 463 | +`)?m=u+` | |
| 464 | +`:m=`{ | |
| 465 | +`+u+` | |
| 466 | +}`,h=cm(m,{schema:lm})}let f=this.edges.find(m=>m.id===e);if(f){let m=h;m?.animate!==void 0&&(f.animate=m.animate),m?.animation!==void 0&&(f.animation=m.animation);return}let d,p=this.vertices.get(e);if(p===void 0&&(p={id:e,labelType:"text",domId:C_e+e+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(e,p)),this.vertexCounter++,r!==void 0?(this.config=me(),d=this.sanitizeText(r.text.trim()),p.labelType=r.type,d.startsWith('"')&&d.endsWith('"')&&(d=d.substring(1,d.length-1)),p.text=d):p.text===void 0&&(p.text=e),n!==void 0&&(p.type=n),i?.forEach(m=>{p.styles.push(m)}),a?.forEach(m=>{p.classes.push(m)}),s!==void 0&&(p.dir=s),p.props===void 0?p.props=l:l!==void 0&&Object.assign(p.props,l),h!==void 0){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!WZ(h.shape))throw new Error(`No such shape: ${h.shape}.`);p.type=h?.shape}h?.label&&(p.text=h?.label),h?.icon&&(p.icon=h?.icon,!h.label?.trim()&&p.text===e&&(p.text="")),h?.form&&(p.form=h?.form),h?.pos&&(p.pos=h?.pos),h?.img&&(p.img=h?.img,!h.label?.trim()&&p.text===e&&(p.text="")),h?.constraint&&(p.constraint=h.constraint),h.w&&(p.assetWidth=Number(h.w)),h.h&&(p.assetHeight=Number(h.h))}}addSingleLink(e,r,n,i){let l={start:e,end:r,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};Y.info("abc78 Got edge...",l);let u=n.text;if(u!==void 0&&(l.text=this.sanitizeText(u.text.trim()),l.text.startsWith('"')&&l.text.endsWith('"')&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=u.type),n!==void 0&&(l.type=n.type,l.stroke=n.stroke,l.length=n.length>10?10:n.length),i&&!this.edges.some(h=>h.id===i))l.id=i,l.isUserDefinedId=!0;else{let h=this.edges.filter(f=>f.start===l.start&&f.end===l.end);h.length===0?l.id=$h(l.start,l.end,{counter:0,prefix:"L"}):l.id=$h(l.start,l.end,{counter:h.length+1,prefix:"L"})}if(this.edges.length<(this.config.maxEdges??500))Y.info("Pushing edge..."),this.edges.push(l);else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}. | |
| 467 | + | |
| 468 | +Initialize mermaid with maxEdges set to a higher number to allow more edges. | |
| 469 | +You cannot set this config via configuration inside the diagram as it is a secure config. | |
| 470 | +You have to call mermaid.initialize.`)}isLinkData(e){return e!==null&&typeof e=="object"&&"id"in e&&typeof e.id=="string"}addLink(e,r,n){let i=this.isLinkData(n)?n.id.replace("@",""):void 0;Y.info("addLink",e,r,i);for(let a of e)for(let s of r){let l=a===e[e.length-1],u=s===r[0];l&&u?this.addSingleLink(a,s,n,i):this.addSingleLink(a,s,n,void 0)}}updateLinkInterpolate(e,r){e.forEach(n=>{n==="default"?this.edges.defaultInterpolate=r:this.edges[n].interpolate=r})}updateLink(e,r){e.forEach(n=>{if(typeof n=="number"&&n>=this.edges.length)throw new Error(`The index ${n} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);n==="default"?this.edges.defaultStyle=r:(this.edges[n].style=r,(this.edges[n]?.style?.length??0)>0&&!this.edges[n]?.style?.some(i=>i?.startsWith("fill"))&&this.edges[n]?.style?.push("fill:none"))})}addClass(e,r){let n=r.join().replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");e.split(",").forEach(i=>{let a=this.classes.get(i);a===void 0&&(a={id:i,styles:[],textStyles:[]},this.classes.set(i,a)),n?.forEach(s=>{if(/color/.exec(s)){let l=s.replace("fill","bgFill");a.textStyles.push(l)}a.styles.push(s)})})}setDirection(e){this.direction=e,/.*</.exec(this.direction)&&(this.direction="RL"),/.*\^/.exec(this.direction)&&(this.direction="BT"),/.*>/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),this.direction==="TD"&&(this.direction="TB")}setClass(e,r){for(let n of e.split(",")){let i=this.vertices.get(n);i&&i.classes.push(r);let a=this.edges.find(l=>l.id===n);a&&a.classes.push(r);let s=this.subGraphLookup.get(n);s&&s.classes.push(r)}}setTooltip(e,r){if(r!==void 0){r=this.sanitizeText(r);for(let n of e.split(","))this.tooltips.set(this.version==="gen-1"?this.lookUpDomId(n):n,r)}}setClickFun(e,r,n){let i=this.lookUpDomId(e);if(me().securityLevel!=="loose"||r===void 0)return;let a=[];if(typeof n=="string"){a=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let l=0;l<a.length;l++){let u=a[l].trim();u.startsWith('"')&&u.endsWith('"')&&(u=u.substr(1,u.length-2)),a[l]=u}}a.length===0&&a.push(e);let s=this.vertices.get(e);s&&(s.haveCallback=!0,this.funs.push(()=>{let l=document.querySelector(`[id="${i}"]`);l!==null&&l.addEventListener("click",()=>{Gt.runFunc(r,...a)},!1)}))}setLink(e,r,n){e.split(",").forEach(i=>{let a=this.vertices.get(i);a!==void 0&&(a.link=Gt.formatUrl(r,this.config),a.linkTarget=n)}),this.setClass(e,"clickable")}getTooltip(e){return this.tooltips.get(e)}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFun(i,r,n)}),this.setClass(e,"clickable")}bindFunctions(e){this.funs.forEach(r=>{r(e)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(e){let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=a.currentTarget?.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.bottom+"px"),r.html(r.html().replace(/<br\/>/g,"<br/>")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})}clear(e="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=e,this.config=me(),Ar()}setGen(e){this.version=e||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(e,r,n){let i=e.text.trim(),a=n.text;e===n&&/\s/.exec(n.text)&&(i=void 0);let s=o(f=>{let d={boolean:{},number:{},string:{}},p=[],m;return{nodeList:f.filter(function(y){let v=typeof y;return y.stmt&&y.stmt==="dir"?(m=y.value,!1):y.trim()===""?!1:v in d?d[v].hasOwnProperty(y)?!1:d[v][y]=!0:p.includes(y)?!1:p.push(y)}),dir:m}},"uniq"),{nodeList:l,dir:u}=s(r.flat());if(this.version==="gen-1")for(let f=0;f<l.length;f++)l[f]=this.lookUpDomId(l[f]);i=i??"subGraph"+this.subCount,a=a||"",a=this.sanitizeText(a),this.subCount=this.subCount+1;let h={id:i,nodes:l,title:a.trim(),classes:[],dir:u,labelType:n.type};return Y.info("Adding",h.id,h.nodes,h.dir),h.nodes=this.makeUniq(h,this.subGraphs).nodes,this.subGraphs.push(h),this.subGraphLookup.set(i,h),i}getPosForId(e){for(let[r,n]of this.subGraphs.entries())if(n.id===e)return r;return-1}indexNodes2(e,r){let n=this.subGraphs[r].nodes;if(this.secCount=this.secCount+1,this.secCount>2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=r,this.subGraphs[r].id===e)return{result:!0,count:0};let i=0,a=1;for(;i<n.length;){let s=this.getPosForId(n[i]);if(s>=0){let l=this.indexNodes2(e,s);if(l.result)return{result:!0,count:a+l.count};a=a+l.count}i=i+1}return{result:!1,count:a}}getDepthFirstPos(e){return this.posCrossRef[e]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return this.firstGraphFlag?(this.firstGraphFlag=!1,!0):!1}destructStartLink(e){let r=e.trim(),n="arrow_open";switch(r[0]){case"<":n="arrow_point",r=r.slice(1);break;case"x":n="arrow_cross",r=r.slice(1);break;case"o":n="arrow_circle",r=r.slice(1);break}let i="normal";return r.includes("=")&&(i="thick"),r.includes(".")&&(i="dotted"),{type:n,stroke:i}}countChar(e,r){let n=r.length,i=0;for(let a=0;a<n;++a)r[a]===e&&++i;return i}destructEndLink(e){let r=e.trim(),n=r.slice(0,-1),i="arrow_open";switch(r.slice(-1)){case"x":i="arrow_cross",r.startsWith("x")&&(i="double_"+i,n=n.slice(1));break;case">":i="arrow_point",r.startsWith("<")&&(i="double_"+i,n=n.slice(1));break;case"o":i="arrow_circle",r.startsWith("o")&&(i="double_"+i,n=n.slice(1));break}let a="normal",s=n.length-1;n.startsWith("=")&&(a="thick"),n.startsWith("~")&&(a="invisible");let l=this.countChar(".",n);return l&&(a="dotted",s=l),{type:i,stroke:a,length:s}}destructLink(e,r){let n=this.destructEndLink(e),i;if(r){if(i=this.destructStartLink(r),i.stroke!==n.stroke)return{type:"INVALID",stroke:"INVALID"};if(i.type==="arrow_open")i.type=n.type;else{if(i.type!==n.type)return{type:"INVALID",stroke:"INVALID"};i.type="double_"+i.type}return i.type==="double_arrow"&&(i.type="double_arrow_point"),i.length=n.length,i}return n}exists(e,r){for(let n of e)if(n.nodes.includes(r))return!0;return!1}makeUniq(e,r){let n=[];return e.nodes.forEach((i,a)=>{this.exists(r,i)||n.push(e.nodes[a])}),{nodes:n}}getTypeFromVertex(e){if(e.img)return"imageSquare";if(e.icon)return e.form==="circle"?"iconCircle":e.form==="square"?"iconSquare":e.form==="rounded"?"iconRounded":"icon";switch(e.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return e.type}}findNode(e,r){return e.find(n=>n.id===r)}destructEdgeType(e){let r="none",n="arrow_point";switch(e){case"arrow_point":case"arrow_circle":case"arrow_cross":n=e;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":r=e.replace("double_",""),n=r;break}return{arrowTypeStart:r,arrowTypeEnd:n}}addNodeFromVertex(e,r,n,i,a,s){let l=n.get(e.id),u=i.get(e.id)??!1,h=this.findNode(r,e.id);if(h)h.cssStyles=e.styles,h.cssCompiledStyles=this.getCompiledStyles(e.classes),h.cssClasses=e.classes.join(" ");else{let f={id:e.id,label:e.text,labelStyle:"",parentId:l,padding:a.flowchart?.padding||8,cssStyles:e.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...e.classes]),cssClasses:"default "+e.classes.join(" "),dir:e.dir,domId:e.domId,look:s,link:e.link,linkTarget:e.linkTarget,tooltip:this.getTooltip(e.id),icon:e.icon,pos:e.pos,img:e.img,assetWidth:e.assetWidth,assetHeight:e.assetHeight,constraint:e.constraint};u?r.push({...f,isGroup:!0,shape:"rect"}):r.push({...f,isGroup:!1,shape:this.getTypeFromVertex(e)})}}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}getData(){let e=me(),r=[],n=[],i=this.getSubGraphs(),a=new Map,s=new Map;for(let h=i.length-1;h>=0;h--){let f=i[h];f.nodes.length>0&&s.set(f.id,!0);for(let d of f.nodes)a.set(d,f.id)}for(let h=i.length-1;h>=0;h--){let f=i[h];r.push({id:f.id,label:f.title,labelStyle:"",parentId:a.get(f.id),padding:8,cssCompiledStyles:this.getCompiledStyles(f.classes),cssClasses:f.classes.join(" "),shape:"rect",dir:f.dir,isGroup:!0,look:e.look})}this.getVertices().forEach(h=>{this.addNodeFromVertex(h,r,a,s,e,e.look||"classic")});let u=this.getEdges();return u.forEach((h,f)=>{let{arrowTypeStart:d,arrowTypeEnd:p}=this.destructEdgeType(h.type),m=[...u.defaultStyle??[]];h.style&&m.push(...h.style);let g={id:$h(h.start,h.end,{counter:f,prefix:"L"},h.id),isUserDefinedId:h.isUserDefinedId,start:h.start,end:h.end,type:h.type??"normal",label:h.text,labelpos:"c",thickness:h.stroke,minlen:h.length,classes:h?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":d,arrowTypeEnd:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":p,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(h.classes),labelStyle:m,style:m,pattern:h.stroke,look:e.look,animate:h.animate,animation:h.animation,curve:h.interpolate||this.edges.defaultInterpolate||e.flowchart?.curve};n.push(g)}),{nodes:r,edges:n,other:{},config:e}}defaultConfig(){return A3.flowchart}}});var yc,gm=N(()=>{"use strict";dr();yc=o((t,e)=>{let r;return e==="sandbox"&&(r=Ge("#i"+t)),(e==="sandbox"?Ge(r.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${t}"]`)},"getDiagramElement")});var Ru,w2=N(()=>{"use strict";Ru=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,n=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:n}},"getSubGraphTitleMargins")});var YZ,A_e,__e,D_e,L_e,R_e,N_e,XZ,ym,jZ,Hw=N(()=>{"use strict";zt();gr();vt();w2();dr();Wt();to();RD();Gw();qh();Ut();YZ=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Qe(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=fr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Hn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0}),y=g.getBBox();if(fr(r.flowchart.htmlLabels)){let A=g.children[0],S=Ge(g);y=A.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let C;if(e.look==="handDrawn"){let A=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:i}),_=A.path(Na(b,w,v,x,0),S);C=d.insert(()=>(Y.debug("Rough node insert CXC",_),_),":first-child"),C.select("path:nth-child(2)").attr("style",h.join(";")),C.select("path").attr("style",f.join(";").replace("fill","stroke"))}else C=d.insert("rect",":first-child"),C.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Ru(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let A=m.select("span");A&&A.attr("style",l)}let E=C.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(A){return Vh(e,A)},{cluster:d,labelBBox:y}},"rect"),A_e=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return Vh(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),__e=o(async(t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=n,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=d.node().appendChild(await gc(e.label,e.labelStyle,void 0,!0)),g=m.getBBox();if(fr(r.flowchart.htmlLabels)){let _=m.children[0],I=Ge(m);g=_.getBoundingClientRect(),I.attr("width",g.width),I.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,w=e.height+y-g.height-6,C=e.x-x/2,T=e.y-b/2;e.width=x;let E=e.y-e.height/2-v+g.height+2,A;if(e.look==="handDrawn"){let _=e.cssClasses.includes("statediagram-cluster-alt"),I=Xe.svg(h),D=e.rx||e.ry?I.path(Na(C,T,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):I.rectangle(C,T,x,b,{seed:i});A=h.insert(()=>D,":first-child");let k=I.rectangle(C,E,x,w,{fill:_?a:s,fillStyle:_?"hachure":"solid",stroke:u,seed:i});A=h.insert(()=>D,":first-child"),p=h.insert(()=>k)}else A=f.insert("rect",":first-child"),A.attr("class","outer").attr("x",C).attr("y",T).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",C).attr("y",E).attr("width",x).attr("height",w);d.attr("transform",`translate(${e.x-g.width/2}, ${T+1-(fr(r.flowchart.htmlLabels)?0:3)})`);let S=A.node().getBBox();return e.height=S.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(_){return Vh(e,_)},{cluster:h,labelBBox:g}},"roundedWithTitle"),D_e=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Qe(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=fr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Hn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(fr(r.flowchart.htmlLabels)){let A=g.children[0],S=Ge(g);y=A.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let C;if(e.look==="handDrawn"){let A=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:i}),_=A.path(Na(b,w,v,x,e.rx),S);C=d.insert(()=>(Y.debug("Rough node insert CXC",_),_),":first-child"),C.select("path:nth-child(2)").attr("style",h.join(";")),C.select("path").attr("style",f.join(";").replace("fill","stroke"))}else C=d.insert("rect",":first-child"),C.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Ru(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let A=m.select("span");A&&A.attr("style",l)}let E=C.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(A){return Vh(e,A)},{cluster:d,labelBBox:y}},"kanbanSection"),L_e=o((t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=Xe.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});m=s.insert(()=>v,":first-child")}else m=l.insert("rect",":first-child"),m.attr("class","divider").attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look);let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return Vh(e,y)},{cluster:s,labelBBox:{}}},"divider"),R_e=YZ,N_e={rect:YZ,squareRect:R_e,roundedWithTitle:__e,noteGroup:A_e,divider:L_e,kanbanSection:D_e},XZ=new Map,ym=o(async(t,e)=>{let r=e.shape||"rect",n=await N_e[r](t,e);return XZ.set(e.id,n),n},"insertCluster"),jZ=o(()=>{XZ=new Map},"clear")});function Ww(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=Wn(t),e=Wn(e);let[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var $o,Wn,qw,JD=N(()=>{"use strict";$o={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};o(Ww,"calculateDeltaAndAngle");Wn=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),qw=o(t=>({x:o(function(e,r,n){let i=0,a=Wn(n[0]).x<Wn(n[n.length-1]).x?"left":"right";if(r===0&&Object.hasOwn($o,t.arrowTypeStart)){let{angle:m,deltaX:g}=Ww(n[0],n[1]);i=$o[t.arrowTypeStart]*Math.cos(m)*(g>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn($o,t.arrowTypeEnd)){let{angle:m,deltaX:g}=Ww(n[n.length-1],n[n.length-2]);i=$o[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),l=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),u=Math.abs(Wn(e).x-Wn(n[0]).x),h=Math.abs(Wn(e).y-Wn(n[0]).y),f=$o[t.arrowTypeStart],d=$o[t.arrowTypeEnd],p=1;if(s<d&&s>0&&l<d){let m=d+p-s;m*=a==="right"?-1:1,i-=m}if(u<f&&u>0&&h<f){let m=f+p-u;m*=a==="right"?-1:1,i+=m}return Wn(e).x+i},"x"),y:o(function(e,r,n){let i=0,a=Wn(n[0]).y<Wn(n[n.length-1]).y?"down":"up";if(r===0&&Object.hasOwn($o,t.arrowTypeStart)){let{angle:m,deltaY:g}=Ww(n[0],n[1]);i=$o[t.arrowTypeStart]*Math.abs(Math.sin(m))*(g>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn($o,t.arrowTypeEnd)){let{angle:m,deltaY:g}=Ww(n[n.length-1],n[n.length-2]);i=$o[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),l=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),u=Math.abs(Wn(e).y-Wn(n[0]).y),h=Math.abs(Wn(e).x-Wn(n[0]).x),f=$o[t.arrowTypeStart],d=$o[t.arrowTypeEnd],p=1;if(s<d&&s>0&&l<d){let m=d+p-s;m*=a==="up"?-1:1,i-=m}if(u<f&&u>0&&h<f){let m=f+p-u;m*=a==="up"?-1:1,i+=m}return Wn(e).y+i},"y")}),"getLineFunctionsWithOffset")});var QZ,M_e,KZ,ZZ=N(()=>{"use strict";vt();QZ=o((t,e,r,n,i,a)=>{e.arrowTypeStart&&KZ(t,"start",e.arrowTypeStart,r,n,i,a),e.arrowTypeEnd&&KZ(t,"end",e.arrowTypeEnd,r,n,i,a)},"addEdgeMarkers"),M_e={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},KZ=o((t,e,r,n,i,a,s)=>{let l=M_e[r];if(!l){Y.warn(`Unknown arrow type: ${r}`);return}let u=l.type,f=`${i}_${a}-${u}${e==="start"?"Start":"End"}`;if(s&&s.trim()!==""){let d=s.replace(/[^\dA-Za-z]/g,"_"),p=`${f}_${d}`;if(!document.getElementById(p)){let m=document.getElementById(f);if(m){let g=m.cloneNode(!0);g.id=p,g.querySelectorAll("path, circle, line").forEach(v=>{v.setAttribute("stroke",s),l.fill&&v.setAttribute("fill",s)}),m.parentNode?.appendChild(g)}}t.attr(`marker-${e}`,`url(${n}#${p})`)}else t.attr(`marker-${e}`,`url(${n}#${f})`)},"addEdgeMarker")});function Yw(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function P_e(t){let e=[],r=[];for(let n=1;n<t.length-1;n++){let i=t[n-1],a=t[n],s=t[n+1];(i.x===a.x&&a.y===s.y&&Math.abs(a.x-s.x)>5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===s.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}var Xw,pa,tJ,T2,jw,Kw,I_e,O_e,JZ,eJ,B_e,Qw,eL=N(()=>{"use strict";zt();gr();vt();to();ir();JD();w2();dr();Wt();Gw();ZZ();Ut();Xw=new Map,pa=new Map,tJ=o(()=>{Xw.clear(),pa.clear()},"clear"),T2=o(t=>t?t.reduce((r,n)=>r+";"+n,""):"","getLabelStyles"),jw=o(async(t,e)=>{let r=fr(me().flowchart.htmlLabels),n=await Hn(t,e.label,{style:T2(e.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});Y.info("abc82",e,e.labelType);let i=t.insert("g").attr("class","edgeLabel"),a=i.insert("g").attr("class","label");a.node().appendChild(n);let s=n.getBBox();if(r){let u=n.children[0],h=Ge(n);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}a.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Xw.set(e.id,i),e.width=s.width,e.height=s.height;let l;if(e.startLabelLeft){let u=await gc(e.startLabelLeft,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startLeft=h,Yw(l,e.startLabelLeft)}if(e.startLabelRight){let u=await gc(e.startLabelRight,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=h.node().appendChild(u),f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startRight=h,Yw(l,e.startLabelRight)}if(e.endLabelLeft){let u=await gc(e.endLabelLeft,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endLeft=h,Yw(l,e.endLabelLeft)}if(e.endLabelRight){let u=await gc(e.endLabelRight,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endRight=h,Yw(l,e.endLabelRight)}return n},"insertEdgeLabel");o(Yw,"setTerminalWidth");Kw=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,Xw.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Ru(n);if(t.label){let a=Xw.get(t.id),s=t.x,l=t.y;if(r){let u=Gt.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=pa.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=pa.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=pa.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=pa.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),I_e=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),O_e=o((t,e,r)=>{Y.debug(`intersection calc abc89: | |
| 471 | + outsidePoint: ${JSON.stringify(e)} | |
| 472 | + insidePoint : ${JSON.stringify(r)} | |
| 473 | + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.x<e.x?s-a:s+a,u=t.height/2,h=Math.abs(e.y-r.y),f=Math.abs(e.x-r.x);if(Math.abs(i-e.y)*s>Math.abs(n-e.x)*u){let d=r.y<e.y?e.y-u-i:i-u-e.y;l=f*d/h;let p={x:r.x<e.x?r.x+l:r.x-f+l,y:r.y<e.y?r.y+h-d:r.y-h+d};return l===0&&(p.x=e.x,p.y=e.y),f===0&&(p.x=e.x),h===0&&(p.y=e.y),Y.debug(`abc89 top/bottom calc, Q ${h}, q ${d}, R ${f}, r ${l}`,p),p}else{r.x<e.x?l=e.x-s-n:l=n-s-e.x;let d=h*l/f,p=r.x<e.x?r.x+f-l:r.x-f+l,m=r.y<e.y?r.y+d:r.y-d;return Y.debug(`sides calc abc89, Q ${h}, q ${d}, R ${f}, r ${l}`,{_x:p,_y:m}),l===0&&(p=e.x,m=e.y),f===0&&(p=e.x),h===0&&(m=e.y),{x:p,y:m}}},"intersection"),JZ=o((t,e)=>{Y.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(Y.info("abc88 checking point",a,e),!I_e(e,a)&&!i){let s=O_e(e,n,a);Y.debug("abc88 inside",a,n,s),Y.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?Y.warn("abc88 no intersect",s,r):r.push(s),i=!0}else Y.warn("abc88 outside",a,n),n=a,i||r.push(a)}),Y.debug("returning points",r),r},"cutPathAtIntersect");o(P_e,"extractCornerPoints");eJ=o(function(t,e,r){let n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),s=r/a;return{x:e.x-s*n,y:e.y-s*i}},"findAdjacentPoint"),B_e=o(function(t){let{cornerPointPositions:e}=P_e(t),r=[];for(let n=0;n<t.length;n++)if(e.includes(n)){let i=t[n-1],a=t[n+1],s=t[n],l=eJ(i,s,5),u=eJ(a,s,5),h=u.x-l.x,f=u.y-l.y;r.push(l);let d=Math.sqrt(2)*2,p={x:s.x,y:s.y};if(Math.abs(a.x-i.x)>10&&Math.abs(a.y-i.y)>=10){Y.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else Y.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(p,u)}else r.push(t[n]);return r},"fixCorners"),Qw=o(function(t,e,r,n,i,a,s){let{handDrawnSeed:l}=me(),u=e.points,h=!1,f=i;var d=a;let p=[];for(let _ in e.cssCompiledStyles)ND(_)||p.push(e.cssCompiledStyles[_]);d.intersect&&f.intersect&&(u=u.slice(1,e.points.length-1),u.unshift(f.intersect(u[0])),Y.debug("Last point APA12",e.start,"-->",e.end,u[u.length-1],d,d.intersect(u[u.length-1])),u.push(d.intersect(u[u.length-1]))),e.toCluster&&(Y.info("to cluster abc88",r.get(e.toCluster)),u=JZ(e.points,r.get(e.toCluster).node),h=!0),e.fromCluster&&(Y.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(u,null,2)),u=JZ(u.reverse(),r.get(e.fromCluster).node).reverse(),h=!0);let m=u.filter(_=>!Number.isNaN(_.y));m=B_e(m);let g=Do;switch(g=wu,e.curve){case"linear":g=wu;break;case"basis":g=Do;break;case"cardinal":g=Pv;break;case"bumpX":g=Rv;break;case"bumpY":g=Nv;break;case"catmullRom":g=$v;break;case"monotoneX":g=zv;break;case"monotoneY":g=Gv;break;case"natural":g=F0;break;case"step":g=$0;break;case"stepAfter":g=Uv;break;case"stepBefore":g=Vv;break;default:g=Do}let{x:y,y:v}=qw(e),x=wl().x(y).y(v).curve(g),b;switch(e.thickness){case"normal":b="edge-thickness-normal";break;case"thick":b="edge-thickness-thick";break;case"invisible":b="edge-thickness-invisible";break;default:b="edge-thickness-normal"}switch(e.pattern){case"solid":b+=" edge-pattern-solid";break;case"dotted":b+=" edge-pattern-dotted";break;case"dashed":b+=" edge-pattern-dashed";break;default:b+=" edge-pattern-solid"}let w,C=x(m),T=Array.isArray(e.style)?e.style:[e.style],E=T.find(_=>_?.startsWith("stroke:"));if(e.look==="handDrawn"){let _=Xe.svg(t);Object.assign([],m);let I=_.path(C,{roughness:.3,seed:l});b+=" transition",w=Ge(I).select("path").attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")).attr("style",T?T.reduce((k,L)=>k+";"+L,""):"");let D=w.attr("d");w.attr("d",D),t.node().appendChild(w.node())}else{let _=p.join(";"),I=T?T.reduce((L,R)=>L+R+";",""):"",D="";e.animate&&(D=" edge-animation-fast"),e.animation&&(D=" edge-animation-"+e.animation);let k=_?_+";"+I+";":I;w=t.append("path").attr("d",C).attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")+(D??"")).attr("style",k),E=k.match(/stroke:([^;]+)/)?.[1]}let A="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(A=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,A=A.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),Y.info("arrowTypeStart",e.arrowTypeStart),Y.info("arrowTypeEnd",e.arrowTypeEnd),QZ(w,e,A,s,n,E);let S={};return h&&(S.updatedPath=u),S.originalPath=e.points,S},"insertEdge")});var F_e,$_e,z_e,G_e,V_e,U_e,H_e,W_e,q_e,Y_e,X_e,j_e,K_e,Q_e,Z_e,J_e,e9e,Zw,tL=N(()=>{"use strict";vt();F_e=o((t,e,r,n)=>{e.forEach(i=>{e9e[i](t,r,n)})},"insertMarkers"),$_e=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),z_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),G_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),V_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),U_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),H_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),W_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),q_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),Y_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),X_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),j_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("d","M9,0 L9,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),i.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),K_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),Q_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),i.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),Z_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0 | |
| 474 | + L20,10 | |
| 475 | + M20,10 | |
| 476 | + L0,20`)},"requirement_arrow"),J_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),e9e={extension:$_e,composition:z_e,aggregation:G_e,dependency:V_e,lollipop:U_e,point:H_e,circle:W_e,cross:q_e,barb:Y_e,only_one:X_e,zero_or_one:j_e,one_or_more:K_e,zero_or_more:Q_e,requirement_arrow:Z_e,requirement_contains:J_e},Zw=F_e});async function vm(t,e,r){let n,i;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?QD[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),Jw.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}var Jw,rJ,nJ,k2,eT=N(()=>{"use strict";vt();ZD();Jw=new Map;o(vm,"insertNode");rJ=o((t,e)=>{Jw.set(e.id,t)},"setNodeElem"),nJ=o(()=>{Jw.clear()},"clear"),k2=o(t=>{let e=Jw.get(t.id);Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var iJ,aJ=N(()=>{"use strict";ji();gr();vt();Hw();eL();tL();eT();Ft();ir();iJ={common:Ze,getConfig:cr,insertCluster:ym,insertEdge:Qw,insertEdgeLabel:jw,insertMarkers:Zw,insertNode:vm,interpolateToCurve:W9,labelHelper:pt,log:Y,positionEdgeLabel:Kw}});function r9e(t){return typeof t=="symbol"||ri(t)&&da(t)==t9e}var t9e,no,Pd=N(()=>{"use strict";ku();No();t9e="[object Symbol]";o(r9e,"isSymbol");no=r9e});function n9e(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}var Ns,Bd=N(()=>{"use strict";o(n9e,"arrayMap");Ns=n9e});function lJ(t){if(typeof t=="string")return t;if(Pt(t))return Ns(t,lJ)+"";if(no(t))return oJ?oJ.call(t):"";var e=t+"";return e=="0"&&1/t==-i9e?"-0":e}var i9e,sJ,oJ,cJ,uJ=N(()=>{"use strict";Ed();Bd();Un();Pd();i9e=1/0,sJ=ea?ea.prototype:void 0,oJ=sJ?sJ.toString:void 0;o(lJ,"baseToString");cJ=lJ});function s9e(t){for(var e=t.length;e--&&a9e.test(t.charAt(e)););return e}var a9e,hJ,fJ=N(()=>{"use strict";a9e=/\s/;o(s9e,"trimmedEndIndex");hJ=s9e});function l9e(t){return t&&t.slice(0,hJ(t)+1).replace(o9e,"")}var o9e,dJ,pJ=N(()=>{"use strict";fJ();o9e=/^\s+/;o(l9e,"baseTrim");dJ=l9e});function d9e(t){if(typeof t=="number")return t;if(no(t))return mJ;if(bn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=bn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=dJ(t);var r=u9e.test(t);return r||h9e.test(t)?f9e(t.slice(2),r?2:8):c9e.test(t)?mJ:+t}var mJ,c9e,u9e,h9e,f9e,gJ,yJ=N(()=>{"use strict";pJ();Js();Pd();mJ=NaN,c9e=/^[-+]0x[0-9a-f]+$/i,u9e=/^0b[01]+$/i,h9e=/^0o[0-7]+$/i,f9e=parseInt;o(d9e,"toNumber");gJ=d9e});function m9e(t){if(!t)return t===0?t:0;if(t=gJ(t),t===vJ||t===-vJ){var e=t<0?-1:1;return e*p9e}return t===t?t:0}var vJ,p9e,xm,rL=N(()=>{"use strict";yJ();vJ=1/0,p9e=17976931348623157e292;o(m9e,"toFinite");xm=m9e});function g9e(t){var e=xm(t),r=e%1;return e===e?r?e-r:e:0}var vc,bm=N(()=>{"use strict";rL();o(g9e,"toInteger");vc=g9e});var y9e,tT,xJ=N(()=>{"use strict";Lh();Lo();y9e=Ss(li,"WeakMap"),tT=y9e});function v9e(){}var ni,nL=N(()=>{"use strict";o(v9e,"noop");ni=v9e});function x9e(t,e){for(var r=-1,n=t==null?0:t.length;++r<n&&e(t[r],r,t)!==!1;);return t}var rT,iL=N(()=>{"use strict";o(x9e,"arrayEach");rT=x9e});function b9e(t,e,r,n){for(var i=t.length,a=r+(n?1:-1);n?a--:++a<i;)if(e(t[a],a,t))return a;return-1}var nT,aL=N(()=>{"use strict";o(b9e,"baseFindIndex");nT=b9e});function w9e(t){return t!==t}var bJ,wJ=N(()=>{"use strict";o(w9e,"baseIsNaN");bJ=w9e});function T9e(t,e,r){for(var n=r-1,i=t.length;++n<i;)if(t[n]===e)return n;return-1}var TJ,kJ=N(()=>{"use strict";o(T9e,"strictIndexOf");TJ=T9e});function k9e(t,e,r){return e===e?TJ(t,e,r):nT(t,bJ,r)}var wm,iT=N(()=>{"use strict";aL();wJ();kJ();o(k9e,"baseIndexOf");wm=k9e});function E9e(t,e){var r=t==null?0:t.length;return!!r&&wm(t,e,0)>-1}var aT,sL=N(()=>{"use strict";iT();o(E9e,"arrayIncludes");aT=E9e});var S9e,EJ,SJ=N(()=>{"use strict";N9();S9e=nw(Object.keys,Object),EJ=S9e});function _9e(t){if(!uc(t))return EJ(t);var e=[];for(var r in Object(t))A9e.call(t,r)&&r!="constructor"&&e.push(r);return e}var C9e,A9e,Tm,sT=N(()=>{"use strict";Z0();SJ();C9e=Object.prototype,A9e=C9e.hasOwnProperty;o(_9e,"baseKeys");Tm=_9e});function D9e(t){return ci(t)?lw(t):Tm(t)}var zr,xc=N(()=>{"use strict";B9();sT();Mo();o(D9e,"keys");zr=D9e});var L9e,R9e,N9e,ma,CJ=N(()=>{"use strict";rm();Dd();G9();Mo();Z0();xc();L9e=Object.prototype,R9e=L9e.hasOwnProperty,N9e=hw(function(t,e){if(uc(e)||ci(e)){Po(e,zr(e),t);return}for(var r in e)R9e.call(e,r)&&hc(t,r,e[r])}),ma=N9e});function O9e(t,e){if(Pt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||no(t)?!0:I9e.test(t)||!M9e.test(t)||e!=null&&t in Object(e)}var M9e,I9e,km,oT=N(()=>{"use strict";Un();Pd();M9e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,I9e=/^\w*$/;o(O9e,"isKey");km=O9e});function B9e(t){var e=H0(t,function(n){return r.size===P9e&&r.clear(),n}),r=e.cache;return e}var P9e,AJ,_J=N(()=>{"use strict";S9();P9e=500;o(B9e,"memoizeCapped");AJ=B9e});var F9e,$9e,z9e,DJ,LJ=N(()=>{"use strict";_J();F9e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$9e=/\\(\\)?/g,z9e=AJ(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(F9e,function(r,n,i,a){e.push(i?a.replace($9e,"$1"):n||r)}),e}),DJ=z9e});function G9e(t){return t==null?"":cJ(t)}var lT,oL=N(()=>{"use strict";uJ();o(G9e,"toString");lT=G9e});function V9e(t,e){return Pt(t)?t:km(t,e)?[t]:DJ(lT(t))}var Yh,E2=N(()=>{"use strict";Un();oT();LJ();oL();o(V9e,"castPath");Yh=V9e});function H9e(t){if(typeof t=="string"||no(t))return t;var e=t+"";return e=="0"&&1/t==-U9e?"-0":e}var U9e,bc,Em=N(()=>{"use strict";Pd();U9e=1/0;o(H9e,"toKey");bc=H9e});function W9e(t,e){e=Yh(e,t);for(var r=0,n=e.length;t!=null&&r<n;)t=t[bc(e[r++])];return r&&r==n?t:void 0}var Xh,S2=N(()=>{"use strict";E2();Em();o(W9e,"baseGet");Xh=W9e});function q9e(t,e,r){var n=t==null?void 0:Xh(t,e);return n===void 0?r:n}var RJ,NJ=N(()=>{"use strict";S2();o(q9e,"get");RJ=q9e});function Y9e(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t}var Sm,cT=N(()=>{"use strict";o(Y9e,"arrayPush");Sm=Y9e});function X9e(t){return Pt(t)||El(t)||!!(MJ&&t&&t[MJ])}var MJ,IJ,OJ=N(()=>{"use strict";Ed();J0();Un();MJ=ea?ea.isConcatSpreadable:void 0;o(X9e,"isFlattenable");IJ=X9e});function PJ(t,e,r,n,i){var a=-1,s=t.length;for(r||(r=IJ),i||(i=[]);++a<s;){var l=t[a];e>0&&r(l)?e>1?PJ(l,e-1,r,n,i):Sm(i,l):n||(i[i.length]=l)}return i}var wc,Cm=N(()=>{"use strict";cT();OJ();o(PJ,"baseFlatten");wc=PJ});function j9e(t){var e=t==null?0:t.length;return e?wc(t,1):[]}var qr,uT=N(()=>{"use strict";Cm();o(j9e,"flatten");qr=j9e});function K9e(t){return uw(cw(t,void 0,qr),t+"")}var BJ,FJ=N(()=>{"use strict";uT();F9();z9();o(K9e,"flatRest");BJ=K9e});function Q9e(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(i);++n<i;)a[n]=t[n+e];return a}var hT,lL=N(()=>{"use strict";o(Q9e,"baseSlice");hT=Q9e});function sDe(t){return aDe.test(t)}var Z9e,J9e,eDe,tDe,rDe,nDe,iDe,aDe,$J,zJ=N(()=>{"use strict";Z9e="\\ud800-\\udfff",J9e="\\u0300-\\u036f",eDe="\\ufe20-\\ufe2f",tDe="\\u20d0-\\u20ff",rDe=J9e+eDe+tDe,nDe="\\ufe0e\\ufe0f",iDe="\\u200d",aDe=RegExp("["+iDe+Z9e+rDe+nDe+"]");o(sDe,"hasUnicode");$J=sDe});function oDe(t,e,r,n){var i=-1,a=t==null?0:t.length;for(n&&a&&(r=t[++i]);++i<a;)r=e(r,t[i],i,t);return r}var GJ,VJ=N(()=>{"use strict";o(oDe,"arrayReduce");GJ=oDe});function lDe(t,e){return t&&Po(e,zr(e),t)}var UJ,HJ=N(()=>{"use strict";Dd();xc();o(lDe,"baseAssign");UJ=lDe});function cDe(t,e){return t&&Po(e,Cs(e),t)}var WJ,qJ=N(()=>{"use strict";Dd();Bh();o(cDe,"baseAssignIn");WJ=cDe});function uDe(t,e){for(var r=-1,n=t==null?0:t.length,i=0,a=[];++r<n;){var s=t[r];e(s,r,t)&&(a[i++]=s)}return a}var Am,fT=N(()=>{"use strict";o(uDe,"arrayFilter");Am=uDe});function hDe(){return[]}var dT,cL=N(()=>{"use strict";o(hDe,"stubArray");dT=hDe});var fDe,dDe,YJ,pDe,_m,pT=N(()=>{"use strict";fT();cL();fDe=Object.prototype,dDe=fDe.propertyIsEnumerable,YJ=Object.getOwnPropertySymbols,pDe=YJ?function(t){return t==null?[]:(t=Object(t),Am(YJ(t),function(e){return dDe.call(t,e)}))}:dT,_m=pDe});function mDe(t,e){return Po(t,_m(t),e)}var XJ,jJ=N(()=>{"use strict";Dd();pT();o(mDe,"copySymbols");XJ=mDe});var gDe,yDe,mT,uL=N(()=>{"use strict";cT();iw();pT();cL();gDe=Object.getOwnPropertySymbols,yDe=gDe?function(t){for(var e=[];t;)Sm(e,_m(t)),t=Q0(t);return e}:dT,mT=yDe});function vDe(t,e){return Po(t,mT(t),e)}var KJ,QJ=N(()=>{"use strict";Dd();uL();o(vDe,"copySymbolsIn");KJ=vDe});function xDe(t,e,r){var n=e(t);return Pt(t)?n:Sm(n,r(t))}var gT,hL=N(()=>{"use strict";cT();Un();o(xDe,"baseGetAllKeys");gT=xDe});function bDe(t){return gT(t,zr,_m)}var C2,fL=N(()=>{"use strict";hL();pT();xc();o(bDe,"getAllKeys");C2=bDe});function wDe(t){return gT(t,Cs,mT)}var yT,dL=N(()=>{"use strict";hL();uL();Bh();o(wDe,"getAllKeysIn");yT=wDe});var TDe,vT,ZJ=N(()=>{"use strict";Lh();Lo();TDe=Ss(li,"DataView"),vT=TDe});var kDe,xT,JJ=N(()=>{"use strict";Lh();Lo();kDe=Ss(li,"Promise"),xT=kDe});var EDe,jh,pL=N(()=>{"use strict";Lh();Lo();EDe=Ss(li,"Set"),jh=EDe});var eee,SDe,tee,ree,nee,iee,CDe,ADe,_De,DDe,LDe,Fd,io,$d=N(()=>{"use strict";ZJ();K5();JJ();pL();xJ();ku();T9();eee="[object Map]",SDe="[object Object]",tee="[object Promise]",ree="[object Set]",nee="[object WeakMap]",iee="[object DataView]",CDe=Eu(vT),ADe=Eu(Mh),_De=Eu(xT),DDe=Eu(jh),LDe=Eu(tT),Fd=da;(vT&&Fd(new vT(new ArrayBuffer(1)))!=iee||Mh&&Fd(new Mh)!=eee||xT&&Fd(xT.resolve())!=tee||jh&&Fd(new jh)!=ree||tT&&Fd(new tT)!=nee)&&(Fd=o(function(t){var e=da(t),r=e==SDe?t.constructor:void 0,n=r?Eu(r):"";if(n)switch(n){case CDe:return iee;case ADe:return eee;case _De:return tee;case DDe:return ree;case LDe:return nee}return e},"getTag"));io=Fd});function MDe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&NDe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var RDe,NDe,aee,see=N(()=>{"use strict";RDe=Object.prototype,NDe=RDe.hasOwnProperty;o(MDe,"initCloneArray");aee=MDe});function IDe(t,e){var r=e?K0(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var oee,lee=N(()=>{"use strict";ew();o(IDe,"cloneDataView");oee=IDe});function PDe(t){var e=new t.constructor(t.source,ODe.exec(t));return e.lastIndex=t.lastIndex,e}var ODe,cee,uee=N(()=>{"use strict";ODe=/\w*$/;o(PDe,"cloneRegExp");cee=PDe});function BDe(t){return fee?Object(fee.call(t)):{}}var hee,fee,dee,pee=N(()=>{"use strict";Ed();hee=ea?ea.prototype:void 0,fee=hee?hee.valueOf:void 0;o(BDe,"cloneSymbol");dee=BDe});function nLe(t,e,r){var n=t.constructor;switch(e){case qDe:return K0(t);case FDe:case $De:return new n(+t);case YDe:return oee(t,r);case XDe:case jDe:case KDe:case QDe:case ZDe:case JDe:case eLe:case tLe:case rLe:return tw(t,r);case zDe:return new n;case GDe:case HDe:return new n(t);case VDe:return cee(t);case UDe:return new n;case WDe:return dee(t)}}var FDe,$De,zDe,GDe,VDe,UDe,HDe,WDe,qDe,YDe,XDe,jDe,KDe,QDe,ZDe,JDe,eLe,tLe,rLe,mee,gee=N(()=>{"use strict";ew();lee();uee();pee();L9();FDe="[object Boolean]",$De="[object Date]",zDe="[object Map]",GDe="[object Number]",VDe="[object RegExp]",UDe="[object Set]",HDe="[object String]",WDe="[object Symbol]",qDe="[object ArrayBuffer]",YDe="[object DataView]",XDe="[object Float32Array]",jDe="[object Float64Array]",KDe="[object Int8Array]",QDe="[object Int16Array]",ZDe="[object Int32Array]",JDe="[object Uint8Array]",eLe="[object Uint8ClampedArray]",tLe="[object Uint16Array]",rLe="[object Uint32Array]";o(nLe,"initCloneByTag");mee=nLe});function aLe(t){return ri(t)&&io(t)==iLe}var iLe,yee,vee=N(()=>{"use strict";$d();No();iLe="[object Map]";o(aLe,"baseIsMap");yee=aLe});var xee,sLe,bee,wee=N(()=>{"use strict";vee();_d();t2();xee=Oo&&Oo.isMap,sLe=xee?Io(xee):yee,bee=sLe});function lLe(t){return ri(t)&&io(t)==oLe}var oLe,Tee,kee=N(()=>{"use strict";$d();No();oLe="[object Set]";o(lLe,"baseIsSet");Tee=lLe});var Eee,cLe,See,Cee=N(()=>{"use strict";kee();_d();t2();Eee=Oo&&Oo.isSet,cLe=Eee?Io(Eee):Tee,See=cLe});function bT(t,e,r,n,i,a){var s,l=e&uLe,u=e&hLe,h=e&fLe;if(r&&(s=i?r(t,n,i,a):r(t)),s!==void 0)return s;if(!bn(t))return t;var f=Pt(t);if(f){if(s=aee(t),!l)return rw(t,s)}else{var d=io(t),p=d==_ee||d==yLe;if(Sl(t))return J5(t,l);if(d==Dee||d==Aee||p&&!i){if(s=u||p?{}:aw(t),!l)return u?KJ(t,WJ(s,t)):XJ(t,UJ(s,t))}else{if(!_n[d])return i?t:{};s=mee(t,d,l)}}a||(a=new lc);var m=a.get(t);if(m)return m;a.set(t,s),See(t)?t.forEach(function(v){s.add(bT(v,e,r,v,t,a))}):bee(t)&&t.forEach(function(v,x){s.set(x,bT(v,e,r,x,t,a))});var g=h?u?yT:C2:u?Cs:zr,y=f?void 0:g(t);return rT(y||t,function(v,x){y&&(x=v,v=t[x]),hc(s,x,bT(v,e,r,x,t,a))}),s}var uLe,hLe,fLe,Aee,dLe,pLe,mLe,gLe,_ee,yLe,vLe,xLe,Dee,bLe,wLe,TLe,kLe,ELe,SLe,CLe,ALe,_Le,DLe,LLe,RLe,NLe,MLe,ILe,OLe,_n,wT,mL=N(()=>{"use strict";Zv();iL();rm();HJ();qJ();_9();R9();jJ();QJ();fL();dL();$d();see();gee();M9();Un();tm();wee();Js();Cee();xc();Bh();uLe=1,hLe=2,fLe=4,Aee="[object Arguments]",dLe="[object Array]",pLe="[object Boolean]",mLe="[object Date]",gLe="[object Error]",_ee="[object Function]",yLe="[object GeneratorFunction]",vLe="[object Map]",xLe="[object Number]",Dee="[object Object]",bLe="[object RegExp]",wLe="[object Set]",TLe="[object String]",kLe="[object Symbol]",ELe="[object WeakMap]",SLe="[object ArrayBuffer]",CLe="[object DataView]",ALe="[object Float32Array]",_Le="[object Float64Array]",DLe="[object Int8Array]",LLe="[object Int16Array]",RLe="[object Int32Array]",NLe="[object Uint8Array]",MLe="[object Uint8ClampedArray]",ILe="[object Uint16Array]",OLe="[object Uint32Array]",_n={};_n[Aee]=_n[dLe]=_n[SLe]=_n[CLe]=_n[pLe]=_n[mLe]=_n[ALe]=_n[_Le]=_n[DLe]=_n[LLe]=_n[RLe]=_n[vLe]=_n[xLe]=_n[Dee]=_n[bLe]=_n[wLe]=_n[TLe]=_n[kLe]=_n[NLe]=_n[MLe]=_n[ILe]=_n[OLe]=!0;_n[gLe]=_n[_ee]=_n[ELe]=!1;o(bT,"baseClone");wT=bT});function BLe(t){return wT(t,PLe)}var PLe,an,gL=N(()=>{"use strict";mL();PLe=4;o(BLe,"clone");an=BLe});function zLe(t){return wT(t,FLe|$Le)}var FLe,$Le,yL,Lee=N(()=>{"use strict";mL();FLe=1,$Le=4;o(zLe,"cloneDeep");yL=zLe});function GLe(t){for(var e=-1,r=t==null?0:t.length,n=0,i=[];++e<r;){var a=t[e];a&&(i[n++]=a)}return i}var Tc,Ree=N(()=>{"use strict";o(GLe,"compact");Tc=GLe});function ULe(t){return this.__data__.set(t,VLe),this}var VLe,Nee,Mee=N(()=>{"use strict";VLe="__lodash_hash_undefined__";o(ULe,"setCacheAdd");Nee=ULe});function HLe(t){return this.__data__.has(t)}var Iee,Oee=N(()=>{"use strict";o(HLe,"setCacheHas");Iee=HLe});function TT(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new Cd;++e<r;)this.add(t[e])}var Dm,kT=N(()=>{"use strict";Q5();Mee();Oee();o(TT,"SetCache");TT.prototype.add=TT.prototype.push=Nee;TT.prototype.has=Iee;Dm=TT});function WLe(t,e){for(var r=-1,n=t==null?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}var ET,vL=N(()=>{"use strict";o(WLe,"arraySome");ET=WLe});function qLe(t,e){return t.has(e)}var Lm,ST=N(()=>{"use strict";o(qLe,"cacheHas");Lm=qLe});function jLe(t,e,r,n,i,a){var s=r&YLe,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&XLe?new Dm:void 0;for(a.set(t,e),a.set(e,t);++d<l;){var g=t[d],y=e[d];if(n)var v=s?n(y,g,d,e,t,a):n(g,y,d,t,e,a);if(v!==void 0){if(v)continue;p=!1;break}if(m){if(!ET(e,function(x,b){if(!Lm(m,b)&&(g===x||i(g,x,r,n,a)))return m.push(b)})){p=!1;break}}else if(!(g===y||i(g,y,r,n,a))){p=!1;break}}return a.delete(t),a.delete(e),p}var YLe,XLe,CT,xL=N(()=>{"use strict";kT();vL();ST();YLe=1,XLe=2;o(jLe,"equalArrays");CT=jLe});function KLe(t){var e=-1,r=Array(t.size);return t.forEach(function(n,i){r[++e]=[i,n]}),r}var Pee,Bee=N(()=>{"use strict";o(KLe,"mapToArray");Pee=KLe});function QLe(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var Rm,AT=N(()=>{"use strict";o(QLe,"setToArray");Rm=QLe});function hRe(t,e,r,n,i,a,s){switch(r){case uRe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case cRe:return!(t.byteLength!=e.byteLength||!a(new j0(t),new j0(e)));case eRe:case tRe:case iRe:return Ro(+t,+e);case rRe:return t.name==e.name&&t.message==e.message;case aRe:case oRe:return t==e+"";case nRe:var l=Pee;case sRe:var u=n&ZLe;if(l||(l=Rm),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;n|=JLe,s.set(t,e);var f=CT(l(t),l(e),n,i,a,s);return s.delete(t),f;case lRe:if(bL)return bL.call(t)==bL.call(e)}return!1}var ZLe,JLe,eRe,tRe,rRe,nRe,iRe,aRe,sRe,oRe,lRe,cRe,uRe,Fee,bL,$ee,zee=N(()=>{"use strict";Ed();D9();Sd();xL();Bee();AT();ZLe=1,JLe=2,eRe="[object Boolean]",tRe="[object Date]",rRe="[object Error]",nRe="[object Map]",iRe="[object Number]",aRe="[object RegExp]",sRe="[object Set]",oRe="[object String]",lRe="[object Symbol]",cRe="[object ArrayBuffer]",uRe="[object DataView]",Fee=ea?ea.prototype:void 0,bL=Fee?Fee.valueOf:void 0;o(hRe,"equalByTag");$ee=hRe});function mRe(t,e,r,n,i,a){var s=r&fRe,l=C2(t),u=l.length,h=C2(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:pRe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d<u;){p=l[d];var x=t[p],b=e[p];if(n)var w=s?n(b,x,p,e,t,a):n(x,b,p,t,e,a);if(!(w===void 0?x===b||i(x,b,r,n,a):w)){y=!1;break}v||(v=p=="constructor")}if(y&&!v){var C=t.constructor,T=e.constructor;C!=T&&"constructor"in t&&"constructor"in e&&!(typeof C=="function"&&C instanceof C&&typeof T=="function"&&T instanceof T)&&(y=!1)}return a.delete(t),a.delete(e),y}var fRe,dRe,pRe,Gee,Vee=N(()=>{"use strict";fL();fRe=1,dRe=Object.prototype,pRe=dRe.hasOwnProperty;o(mRe,"equalObjects");Gee=mRe});function vRe(t,e,r,n,i,a){var s=Pt(t),l=Pt(e),u=s?Hee:io(t),h=l?Hee:io(e);u=u==Uee?_T:u,h=h==Uee?_T:h;var f=u==_T,d=h==_T,p=u==h;if(p&&Sl(t)){if(!Sl(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new lc),s||Oh(t)?CT(t,e,r,n,i,a):$ee(t,e,u,r,n,i,a);if(!(r&gRe)){var m=f&&Wee.call(t,"__wrapped__"),g=d&&Wee.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new lc),i(y,v,r,n,a)}}return p?(a||(a=new lc),Gee(t,e,r,n,i,a)):!1}var gRe,Uee,Hee,_T,yRe,Wee,qee,Yee=N(()=>{"use strict";Zv();xL();zee();Vee();$d();Un();tm();r2();gRe=1,Uee="[object Arguments]",Hee="[object Array]",_T="[object Object]",yRe=Object.prototype,Wee=yRe.hasOwnProperty;o(vRe,"baseIsEqualDeep");qee=vRe});function Xee(t,e,r,n,i){return t===e?!0:t==null||e==null||!ri(t)&&!ri(e)?t!==t&&e!==e:qee(t,e,r,n,Xee,i)}var DT,wL=N(()=>{"use strict";Yee();No();o(Xee,"baseIsEqual");DT=Xee});function wRe(t,e,r,n){var i=r.length,a=i,s=!n;if(t==null)return!a;for(t=Object(t);i--;){var l=r[i];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++i<a;){l=r[i];var u=l[0],h=t[u],f=l[1];if(s&&l[2]){if(h===void 0&&!(u in t))return!1}else{var d=new lc;if(n)var p=n(h,f,u,t,e,d);if(!(p===void 0?DT(f,h,xRe|bRe,n,d):p))return!1}}return!0}var xRe,bRe,jee,Kee=N(()=>{"use strict";Zv();wL();xRe=1,bRe=2;o(wRe,"baseIsMatch");jee=wRe});function TRe(t){return t===t&&!bn(t)}var LT,TL=N(()=>{"use strict";Js();o(TRe,"isStrictComparable");LT=TRe});function kRe(t){for(var e=zr(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,LT(i)]}return e}var Qee,Zee=N(()=>{"use strict";TL();xc();o(kRe,"getMatchData");Qee=kRe});function ERe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var RT,kL=N(()=>{"use strict";o(ERe,"matchesStrictComparable");RT=ERe});function SRe(t){var e=Qee(t);return e.length==1&&e[0][2]?RT(e[0][0],e[0][1]):function(r){return r===t||jee(r,t,e)}}var Jee,ete=N(()=>{"use strict";Kee();Zee();kL();o(SRe,"baseMatches");Jee=SRe});function CRe(t,e){return t!=null&&e in Object(t)}var tte,rte=N(()=>{"use strict";o(CRe,"baseHasIn");tte=CRe});function ARe(t,e,r){e=Yh(e,t);for(var n=-1,i=e.length,a=!1;++n<i;){var s=bc(e[n]);if(!(a=t!=null&&r(t,s)))break;t=t[s]}return a||++n!=i?a:(i=t==null?0:t.length,!!i&&em(i)&&Ph(s,i)&&(Pt(t)||El(t)))}var NT,EL=N(()=>{"use strict";E2();J0();Un();i2();sw();Em();o(ARe,"hasPath");NT=ARe});function _Re(t,e){return t!=null&&NT(t,e,tte)}var MT,SL=N(()=>{"use strict";rte();EL();o(_Re,"hasIn");MT=_Re});function RRe(t,e){return km(t)&<(e)?RT(bc(t),e):function(r){var n=RJ(r,t);return n===void 0&&n===e?MT(r,t):DT(e,n,DRe|LRe)}}var DRe,LRe,nte,ite=N(()=>{"use strict";wL();NJ();SL();oT();TL();kL();Em();DRe=1,LRe=2;o(RRe,"baseMatchesProperty");nte=RRe});function NRe(t){return function(e){return e?.[t]}}var IT,CL=N(()=>{"use strict";o(NRe,"baseProperty");IT=NRe});function MRe(t){return function(e){return Xh(e,t)}}var ate,ste=N(()=>{"use strict";S2();o(MRe,"basePropertyDeep");ate=MRe});function IRe(t){return km(t)?IT(bc(t)):ate(t)}var ote,lte=N(()=>{"use strict";CL();ste();oT();Em();o(IRe,"property");ote=IRe});function ORe(t){return typeof t=="function"?t:t==null?ta:typeof t=="object"?Pt(t)?nte(t[0],t[1]):Jee(t):ote(t)}var pn,rs=N(()=>{"use strict";ete();ite();Cu();Un();lte();o(ORe,"baseIteratee");pn=ORe});function PRe(t,e,r,n){for(var i=-1,a=t==null?0:t.length;++i<a;){var s=t[i];e(n,s,r(s),t)}return n}var cte,ute=N(()=>{"use strict";o(PRe,"arrayAggregator");cte=PRe});function BRe(t,e){return t&&X0(t,e,zr)}var Nm,OT=N(()=>{"use strict";Z5();xc();o(BRe,"baseForOwn");Nm=BRe});function FRe(t,e){return function(r,n){if(r==null)return r;if(!ci(r))return t(r,n);for(var i=r.length,a=e?i:-1,s=Object(r);(e?a--:++a<i)&&n(s[a],a,s)!==!1;);return r}}var hte,fte=N(()=>{"use strict";Mo();o(FRe,"createBaseEach");hte=FRe});var $Re,Ms,Kh=N(()=>{"use strict";OT();fte();$Re=hte(Nm),Ms=$Re});function zRe(t,e,r,n){return Ms(t,function(i,a,s){e(n,i,r(i),s)}),n}var dte,pte=N(()=>{"use strict";Kh();o(zRe,"baseAggregator");dte=zRe});function GRe(t,e){return function(r,n){var i=Pt(r)?cte:dte,a=e?e():{};return i(r,t,pn(n,2),a)}}var mte,gte=N(()=>{"use strict";ute();pte();rs();Un();o(GRe,"createAggregator");mte=GRe});var VRe,PT,yte=N(()=>{"use strict";Lo();VRe=o(function(){return li.Date.now()},"now"),PT=VRe});var vte,URe,HRe,Qh,xte=N(()=>{"use strict";nm();Sd();Ld();Bh();vte=Object.prototype,URe=vte.hasOwnProperty,HRe=fc(function(t,e){t=Object(t);var r=-1,n=e.length,i=n>2?e[2]:void 0;for(i&&eo(e[0],e[1],i)&&(n=1);++r<n;)for(var a=e[r],s=Cs(a),l=-1,u=s.length;++l<u;){var h=s[l],f=t[h];(f===void 0||Ro(f,vte[h])&&!URe.call(t,h))&&(t[h]=a[h])}return t}),Qh=HRe});function WRe(t,e,r){for(var n=-1,i=t==null?0:t.length;++n<i;)if(r(e,t[n]))return!0;return!1}var BT,AL=N(()=>{"use strict";o(WRe,"arrayIncludesWith");BT=WRe});function YRe(t,e,r,n){var i=-1,a=aT,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=Ns(e,Io(r))),n?(a=BT,s=!1):e.length>=qRe&&(a=Lm,s=!1,e=new Dm(e));e:for(;++i<l;){var f=t[i],d=r==null?f:r(f);if(f=n||f!==0?f:0,s&&d===d){for(var p=h;p--;)if(e[p]===d)continue e;u.push(f)}else a(e,d,n)||u.push(f)}return u}var qRe,bte,wte=N(()=>{"use strict";kT();sL();AL();Bd();_d();ST();qRe=200;o(YRe,"baseDifference");bte=YRe});var XRe,Zh,Tte=N(()=>{"use strict";wte();Cm();nm();ow();XRe=fc(function(t,e){return Ad(t)?bte(t,wc(e,1,Ad,!0)):[]}),Zh=XRe});function jRe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var ga,kte=N(()=>{"use strict";o(jRe,"last");ga=jRe});function KRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:vc(e),hT(t,e<0?0:e,n)):[]}var gi,Ete=N(()=>{"use strict";lL();bm();o(KRe,"drop");gi=KRe});function QRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:vc(e),e=n-e,hT(t,0,e<0?0:e)):[]}var Nu,Ste=N(()=>{"use strict";lL();bm();o(QRe,"dropRight");Nu=QRe});function ZRe(t){return typeof t=="function"?t:ta}var Mm,FT=N(()=>{"use strict";Cu();o(ZRe,"castFunction");Mm=ZRe});function JRe(t,e){var r=Pt(t)?rT:Ms;return r(t,Mm(e))}var Ae,$T=N(()=>{"use strict";iL();Kh();FT();Un();o(JRe,"forEach");Ae=JRe});var Cte=N(()=>{"use strict";$T()});function eNe(t,e){for(var r=-1,n=t==null?0:t.length;++r<n;)if(!e(t[r],r,t))return!1;return!0}var Ate,_te=N(()=>{"use strict";o(eNe,"arrayEvery");Ate=eNe});function tNe(t,e){var r=!0;return Ms(t,function(n,i,a){return r=!!e(n,i,a),r}),r}var Dte,Lte=N(()=>{"use strict";Kh();o(tNe,"baseEvery");Dte=tNe});function rNe(t,e,r){var n=Pt(t)?Ate:Dte;return r&&eo(t,e,r)&&(e=void 0),n(t,pn(e,3))}var Ma,Rte=N(()=>{"use strict";_te();Lte();rs();Un();Ld();o(rNe,"every");Ma=rNe});function nNe(t,e){var r=[];return Ms(t,function(n,i,a){e(n,i,a)&&r.push(n)}),r}var zT,_L=N(()=>{"use strict";Kh();o(nNe,"baseFilter");zT=nNe});function iNe(t,e){var r=Pt(t)?Am:zT;return r(t,pn(e,3))}var Yr,DL=N(()=>{"use strict";fT();_L();rs();Un();o(iNe,"filter");Yr=iNe});function aNe(t){return function(e,r,n){var i=Object(e);if(!ci(e)){var a=pn(r,3);e=zr(e),r=o(function(l){return a(i[l],l,i)},"predicate")}var s=t(e,r,n);return s>-1?i[a?e[s]:s]:void 0}}var Nte,Mte=N(()=>{"use strict";rs();Mo();xc();o(aNe,"createFind");Nte=aNe});function oNe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:vc(r);return i<0&&(i=sNe(n+i,0)),nT(t,pn(e,3),i)}var sNe,Ite,Ote=N(()=>{"use strict";aL();rs();bm();sNe=Math.max;o(oNe,"findIndex");Ite=oNe});var lNe,ns,Pte=N(()=>{"use strict";Mte();Ote();lNe=Nte(Ite),ns=lNe});function cNe(t){return t&&t.length?t[0]:void 0}var ia,Bte=N(()=>{"use strict";o(cNe,"head");ia=cNe});var Fte=N(()=>{"use strict";Bte()});function uNe(t,e){var r=-1,n=ci(t)?Array(t.length):[];return Ms(t,function(i,a,s){n[++r]=e(i,a,s)}),n}var GT,LL=N(()=>{"use strict";Kh();Mo();o(uNe,"baseMap");GT=uNe});function hNe(t,e){var r=Pt(t)?Ns:GT;return r(t,pn(e,3))}var Je,Im=N(()=>{"use strict";Bd();rs();LL();Un();o(hNe,"map");Je=hNe});function fNe(t,e){return wc(Je(t,e),1)}var ya,RL=N(()=>{"use strict";Cm();Im();o(fNe,"flatMap");ya=fNe});function dNe(t,e){return t==null?t:X0(t,Mm(e),Cs)}var NL,$te=N(()=>{"use strict";Z5();FT();Bh();o(dNe,"forIn");NL=dNe});function pNe(t,e){return t&&Nm(t,Mm(e))}var ML,zte=N(()=>{"use strict";OT();FT();o(pNe,"forOwn");ML=pNe});var mNe,gNe,yNe,IL,Gte=N(()=>{"use strict";Y0();gte();mNe=Object.prototype,gNe=mNe.hasOwnProperty,yNe=mte(function(t,e,r){gNe.call(t,r)?t[r].push(e):cc(t,r,[e])}),IL=yNe});function vNe(t,e){return t>e}var Vte,Ute=N(()=>{"use strict";o(vNe,"baseGt");Vte=vNe});function wNe(t,e){return t!=null&&bNe.call(t,e)}var xNe,bNe,Hte,Wte=N(()=>{"use strict";xNe=Object.prototype,bNe=xNe.hasOwnProperty;o(wNe,"baseHas");Hte=wNe});function TNe(t,e){return t!=null&&NT(t,e,Hte)}var Bt,qte=N(()=>{"use strict";Wte();EL();o(TNe,"has");Bt=TNe});function ENe(t){return typeof t=="string"||!Pt(t)&&ri(t)&&da(t)==kNe}var kNe,yi,VT=N(()=>{"use strict";ku();Un();No();kNe="[object String]";o(ENe,"isString");yi=ENe});function SNe(t,e){return Ns(e,function(r){return t[r]})}var Yte,Xte=N(()=>{"use strict";Bd();o(SNe,"baseValues");Yte=SNe});function CNe(t){return t==null?[]:Yte(t,zr(t))}var br,OL=N(()=>{"use strict";Xte();xc();o(CNe,"values");br=CNe});function _Ne(t,e,r,n){t=ci(t)?t:br(t),r=r&&!n?vc(r):0;var i=t.length;return r<0&&(r=ANe(i+r,0)),yi(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&wm(t,e,r)>-1}var ANe,qn,jte=N(()=>{"use strict";iT();Mo();VT();bm();OL();ANe=Math.max;o(_Ne,"includes");qn=_Ne});function LNe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:vc(r);return i<0&&(i=DNe(n+i,0)),wm(t,e,i)}var DNe,UT,Kte=N(()=>{"use strict";iT();bm();DNe=Math.max;o(LNe,"indexOf");UT=LNe});function ONe(t){if(t==null)return!0;if(ci(t)&&(Pt(t)||typeof t=="string"||typeof t.splice=="function"||Sl(t)||Oh(t)||El(t)))return!t.length;var e=io(t);if(e==RNe||e==NNe)return!t.size;if(uc(t))return!Tm(t).length;for(var r in t)if(INe.call(t,r))return!1;return!0}var RNe,NNe,MNe,INe,ur,HT=N(()=>{"use strict";sT();$d();J0();Un();Mo();tm();Z0();r2();RNe="[object Map]",NNe="[object Set]",MNe=Object.prototype,INe=MNe.hasOwnProperty;o(ONe,"isEmpty");ur=ONe});function BNe(t){return ri(t)&&da(t)==PNe}var PNe,Qte,Zte=N(()=>{"use strict";ku();No();PNe="[object RegExp]";o(BNe,"baseIsRegExp");Qte=BNe});var Jte,FNe,zo,ere=N(()=>{"use strict";Zte();_d();t2();Jte=Oo&&Oo.isRegExp,FNe=Jte?Io(Jte):Qte,zo=FNe});function $Ne(t){return t===void 0}var pr,tre=N(()=>{"use strict";o($Ne,"isUndefined");pr=$Ne});function zNe(t,e){return t<e}var WT,PL=N(()=>{"use strict";o(zNe,"baseLt");WT=zNe});function GNe(t,e){var r={};return e=pn(e,3),Nm(t,function(n,i,a){cc(r,i,e(n,i,a))}),r}var zd,rre=N(()=>{"use strict";Y0();OT();rs();o(GNe,"mapValues");zd=GNe});function VNe(t,e,r){for(var n=-1,i=t.length;++n<i;){var a=t[n],s=e(a);if(s!=null&&(l===void 0?s===s&&!no(s):r(s,l)))var l=s,u=a}return u}var Om,qT=N(()=>{"use strict";Pd();o(VNe,"baseExtremum");Om=VNe});function UNe(t){return t&&t.length?Om(t,ta,Vte):void 0}var Is,nre=N(()=>{"use strict";qT();Ute();Cu();o(UNe,"max");Is=UNe});function HNe(t){return t&&t.length?Om(t,ta,WT):void 0}var Dl,BL=N(()=>{"use strict";qT();PL();Cu();o(HNe,"min");Dl=HNe});function WNe(t,e){return t&&t.length?Om(t,pn(e,2),WT):void 0}var Gd,ire=N(()=>{"use strict";qT();rs();PL();o(WNe,"minBy");Gd=WNe});function YNe(t){if(typeof t!="function")throw new TypeError(qNe);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var qNe,are,sre=N(()=>{"use strict";qNe="Expected a function";o(YNe,"negate");are=YNe});function XNe(t,e,r,n){if(!bn(t))return t;e=Yh(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i<a;){var u=bc(e[i]),h=r;if(u==="__proto__"||u==="constructor"||u==="prototype")return t;if(i!=s){var f=l[u];h=n?n(f,u,l):void 0,h===void 0&&(h=bn(f)?f:Ph(e[i+1])?[]:{})}hc(l,u,h),l=l[u]}return t}var ore,lre=N(()=>{"use strict";rm();E2();i2();Js();Em();o(XNe,"baseSet");ore=XNe});function jNe(t,e,r){for(var n=-1,i=e.length,a={};++n<i;){var s=e[n],l=Xh(t,s);r(l,s)&&ore(a,Yh(s,t),l)}return a}var YT,FL=N(()=>{"use strict";S2();lre();E2();o(jNe,"basePickBy");YT=jNe});function KNe(t,e){if(t==null)return{};var r=Ns(yT(t),function(n){return[n]});return e=pn(e),YT(t,r,function(n,i){return e(n,i[0])})}var Os,cre=N(()=>{"use strict";Bd();rs();FL();dL();o(KNe,"pickBy");Os=KNe});function QNe(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var ure,hre=N(()=>{"use strict";o(QNe,"baseSortBy");ure=QNe});function ZNe(t,e){if(t!==e){var r=t!==void 0,n=t===null,i=t===t,a=no(t),s=e!==void 0,l=e===null,u=e===e,h=no(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||n&&s&&u||!r&&u||!i)return 1;if(!n&&!a&&!h&&t<e||h&&r&&i&&!n&&!a||l&&r&&i||!s&&i||!u)return-1}return 0}var fre,dre=N(()=>{"use strict";Pd();o(ZNe,"compareAscending");fre=ZNe});function JNe(t,e,r){for(var n=-1,i=t.criteria,a=e.criteria,s=i.length,l=r.length;++n<s;){var u=fre(i[n],a[n]);if(u){if(n>=l)return u;var h=r[n];return u*(h=="desc"?-1:1)}}return t.index-e.index}var pre,mre=N(()=>{"use strict";dre();o(JNe,"compareMultiple");pre=JNe});function eMe(t,e,r){e.length?e=Ns(e,function(a){return Pt(a)?function(s){return Xh(s,a.length===1?a[0]:a)}:a}):e=[ta];var n=-1;e=Ns(e,Io(pn));var i=GT(t,function(a,s,l){var u=Ns(e,function(h){return h(a)});return{criteria:u,index:++n,value:a}});return ure(i,function(a,s){return pre(a,s,r)})}var gre,yre=N(()=>{"use strict";Bd();S2();rs();LL();hre();_d();mre();Cu();Un();o(eMe,"baseOrderBy");gre=eMe});var tMe,vre,xre=N(()=>{"use strict";CL();tMe=IT("length"),vre=tMe});function dMe(t){for(var e=bre.lastIndex=0;bre.test(t);)++e;return e}var wre,rMe,nMe,iMe,aMe,sMe,oMe,$L,zL,lMe,Tre,kre,Ere,cMe,Sre,Cre,uMe,hMe,fMe,bre,Are,_re=N(()=>{"use strict";wre="\\ud800-\\udfff",rMe="\\u0300-\\u036f",nMe="\\ufe20-\\ufe2f",iMe="\\u20d0-\\u20ff",aMe=rMe+nMe+iMe,sMe="\\ufe0e\\ufe0f",oMe="["+wre+"]",$L="["+aMe+"]",zL="\\ud83c[\\udffb-\\udfff]",lMe="(?:"+$L+"|"+zL+")",Tre="[^"+wre+"]",kre="(?:\\ud83c[\\udde6-\\uddff]){2}",Ere="[\\ud800-\\udbff][\\udc00-\\udfff]",cMe="\\u200d",Sre=lMe+"?",Cre="["+sMe+"]?",uMe="(?:"+cMe+"(?:"+[Tre,kre,Ere].join("|")+")"+Cre+Sre+")*",hMe=Cre+Sre+uMe,fMe="(?:"+[Tre+$L+"?",$L,kre,Ere,oMe].join("|")+")",bre=RegExp(zL+"(?="+zL+")|"+fMe+hMe,"g");o(dMe,"unicodeSize");Are=dMe});function pMe(t){return $J(t)?Are(t):vre(t)}var Dre,Lre=N(()=>{"use strict";xre();zJ();_re();o(pMe,"stringSize");Dre=pMe});function mMe(t,e){return YT(t,e,function(r,n){return MT(t,n)})}var Rre,Nre=N(()=>{"use strict";FL();SL();o(mMe,"basePick");Rre=mMe});var gMe,Vd,Mre=N(()=>{"use strict";Nre();FJ();gMe=BJ(function(t,e){return t==null?{}:Rre(t,e)}),Vd=gMe});function xMe(t,e,r,n){for(var i=-1,a=vMe(yMe((e-t)/(r||1)),0),s=Array(a);a--;)s[n?a:++i]=t,t+=r;return s}var yMe,vMe,Ire,Ore=N(()=>{"use strict";yMe=Math.ceil,vMe=Math.max;o(xMe,"baseRange");Ire=xMe});function bMe(t){return function(e,r,n){return n&&typeof n!="number"&&eo(e,r,n)&&(r=n=void 0),e=xm(e),r===void 0?(r=e,e=0):r=xm(r),n=n===void 0?e<r?1:-1:xm(n),Ire(e,r,n,t)}}var Pre,Bre=N(()=>{"use strict";Ore();Ld();rL();o(bMe,"createRange");Pre=bMe});var wMe,Go,Fre=N(()=>{"use strict";Bre();wMe=Pre(),Go=wMe});function TMe(t,e,r,n,i){return i(t,function(a,s,l){r=n?(n=!1,a):e(r,a,s,l)}),r}var $re,zre=N(()=>{"use strict";o(TMe,"baseReduce");$re=TMe});function kMe(t,e,r){var n=Pt(t)?GJ:$re,i=arguments.length<3;return n(t,pn(e,4),r,i,Ms)}var Xr,GL=N(()=>{"use strict";VJ();Kh();rs();zre();Un();o(kMe,"reduce");Xr=kMe});function EMe(t,e){var r=Pt(t)?Am:zT;return r(t,are(pn(e,3)))}var Jh,Gre=N(()=>{"use strict";fT();_L();rs();Un();sre();o(EMe,"reject");Jh=EMe});function AMe(t){if(t==null)return 0;if(ci(t))return yi(t)?Dre(t):t.length;var e=io(t);return e==SMe||e==CMe?t.size:Tm(t).length}var SMe,CMe,VL,Vre=N(()=>{"use strict";sT();$d();Mo();VT();Lre();SMe="[object Map]",CMe="[object Set]";o(AMe,"size");VL=AMe});function _Me(t,e){var r;return Ms(t,function(n,i,a){return r=e(n,i,a),!r}),!!r}var Ure,Hre=N(()=>{"use strict";Kh();o(_Me,"baseSome");Ure=_Me});function DMe(t,e,r){var n=Pt(t)?ET:Ure;return r&&eo(t,e,r)&&(e=void 0),n(t,pn(e,3))}var A2,Wre=N(()=>{"use strict";vL();rs();Hre();Un();Ld();o(DMe,"some");A2=DMe});var LMe,kc,qre=N(()=>{"use strict";Cm();yre();nm();Ld();LMe=fc(function(t,e){if(t==null)return[];var r=e.length;return r>1&&eo(t,e[0],e[1])?e=[]:r>2&&eo(e[0],e[1],e[2])&&(e=[e[0]]),gre(t,wc(e,1),[])}),kc=LMe});var RMe,NMe,Yre,Xre=N(()=>{"use strict";pL();nL();AT();RMe=1/0,NMe=jh&&1/Rm(new jh([,-0]))[1]==RMe?function(t){return new jh(t)}:ni,Yre=NMe});function IMe(t,e,r){var n=-1,i=aT,a=t.length,s=!0,l=[],u=l;if(r)s=!1,i=BT;else if(a>=MMe){var h=e?null:Yre(t);if(h)return Rm(h);s=!1,i=Lm,u=new Dm}else u=e?[]:l;e:for(;++n<a;){var f=t[n],d=e?e(f):f;if(f=r||f!==0?f:0,s&&d===d){for(var p=u.length;p--;)if(u[p]===d)continue e;e&&u.push(d),l.push(f)}else i(u,d,r)||(u!==l&&u.push(d),l.push(f))}return l}var MMe,Pm,XT=N(()=>{"use strict";kT();sL();AL();ST();Xre();AT();MMe=200;o(IMe,"baseUniq");Pm=IMe});var OMe,UL,jre=N(()=>{"use strict";Cm();nm();XT();ow();OMe=fc(function(t){return Pm(wc(t,1,Ad,!0))}),UL=OMe});function PMe(t){return t&&t.length?Pm(t):[]}var Bm,Kre=N(()=>{"use strict";XT();o(PMe,"uniq");Bm=PMe});function BMe(t,e){return t&&t.length?Pm(t,pn(e,2)):[]}var Qre,Zre=N(()=>{"use strict";rs();XT();o(BMe,"uniqBy");Qre=BMe});function $Me(t){var e=++FMe;return lT(t)+e}var FMe,Ud,Jre=N(()=>{"use strict";oL();FMe=0;o($Me,"uniqueId");Ud=$Me});function zMe(t,e,r){for(var n=-1,i=t.length,a=e.length,s={};++n<i;){var l=n<a?e[n]:void 0;r(s,t[n],l)}return s}var ene,tne=N(()=>{"use strict";o(zMe,"baseZipObject");ene=zMe});function GMe(t,e){return ene(t||[],e||[],hc)}var jT,rne=N(()=>{"use strict";rm();tne();o(GMe,"zipObject");jT=GMe});var qt=N(()=>{"use strict";CJ();gL();Lee();Ree();$9();xte();Tte();Ete();Ste();Cte();Rte();DL();Pte();Fte();RL();uT();$T();$te();zte();Gte();qte();Cu();jte();Kte();Un();HT();Yv();Js();ere();VT();tre();xc();kte();Im();rre();nre();V9();BL();ire();nL();yte();Mre();cre();Fre();GL();Gre();Vre();Wre();qre();jre();Kre();Jre();OL();rne();});function ine(t,e){t[e]?t[e]++:t[e]=1}function ane(t,e){--t[e]||delete t[e]}function _2(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+nne+a+nne+(pr(n)?VMe:n)}function UMe(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var l={v:i,w:a};return n&&(l.name=n),l}function HL(t,e){return _2(t,e.v,e.w,e.name)}var VMe,Hd,nne,sn,KT=N(()=>{"use strict";qt();VMe="\0",Hd="\0",nne="",sn=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=As(void 0),this._defaultEdgeLabelFn=As(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[Hd]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return Si(e)||(e=As(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return zr(this._nodes)}sources(){var e=this;return Yr(this.nodes(),function(r){return ur(e._in[r])})}sinks(){var e=this;return Yr(this.nodes(),function(r){return ur(e._out[r])})}setNodes(e,r){var n=arguments,i=this;return Ae(e,function(a){n.length>1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=Hd,this._children[e]={},this._children[Hd][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(n=>this.removeEdge(this._edgeObjs[n]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Ae(this.children(e),n=>{this.setParent(n)}),delete this._children[e]),Ae(zr(this._in[e]),r),delete this._in[e],delete this._preds[e],Ae(zr(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(pr(r))r=Hd;else{r+="";for(var n=r;!pr(n);n=this.parent(n))if(n===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==Hd)return r}}children(e){if(pr(e)&&(e=Hd),this._isCompound){var r=this._children[e];if(r)return zr(r)}else{if(e===Hd)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return zr(r)}successors(e){var r=this._sucs[e];if(r)return zr(r)}neighbors(e){var r=this.predecessors(e);if(r)return UL(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;Ae(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Ae(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,n.edge(s))});var i={};function a(s){var l=n.parent(s);return l===void 0||r.hasNode(l)?(i[s]=l,l):l in i?i[l]:a(l)}return o(a,"findParent"),this._isCompound&&Ae(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return Si(e)||(e=As(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return br(this._edgeObjs)}setPath(e,r){var n=this,i=arguments;return Xr(e,function(a,s){return i.length>1?n.setEdge(a,s,r):n.setEdge(a,s),s}),this}setEdge(){var e,r,n,i,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,n=s.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=s,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,pr(n)||(n=""+n);var l=_2(this._isDirected,e,r,n);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=i),this;if(!pr(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?i:this._defaultEdgeLabelFn(e,r,n);var u=UMe(this._isDirected,e,r,n);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,ine(this._preds[r],e),ine(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n);return this._edgeLabels[i]}hasEdge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],ane(this._preds[r],e),ane(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var n=this._in[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.v===r}):i}}outEdges(e,r){var n=this._out[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var n=this.inEdges(e,r);if(n)return n.concat(this.outEdges(e,r))}};sn.prototype._nodeCount=0;sn.prototype._edgeCount=0;o(ine,"incrementOrInitEntry");o(ane,"decrementOrRemoveEntry");o(_2,"edgeArgsToId");o(UMe,"edgeArgsToObj");o(HL,"edgeObjToId")});var Vo=N(()=>{"use strict";KT()});function sne(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function HMe(t,e){if(t!=="_next"&&t!=="_prev")return e}var ZT,one=N(()=>{"use strict";ZT=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return sne(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&sne(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,n=r._prev;n!==r;)e.push(JSON.stringify(n,HMe)),n=n._prev;return"["+e.join(", ")+"]"}};o(sne,"unlink");o(HMe,"filterOutLinks")});function lne(t,e){if(t.nodeCount()<=1)return[];var r=YMe(t,e||WMe),n=qMe(r.graph,r.buckets,r.zeroIdx);return qr(Je(n,function(i){return t.outEdges(i.v,i.w)}))}function qMe(t,e,r){for(var n=[],i=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)WL(t,e,r,s);for(;s=i.dequeue();)WL(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){n=n.concat(WL(t,e,r,s,!0));break}}}return n}function WL(t,e,r,n,i){var a=i?[]:void 0;return Ae(t.inEdges(n.v),function(s){var l=t.edge(s),u=t.node(s.v);i&&a.push({v:s.v,w:s.w}),u.out-=l,qL(e,r,u)}),Ae(t.outEdges(n.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,qL(e,r,h)}),t.removeNode(n.v),a}function YMe(t,e){var r=new sn,n=0,i=0;Ae(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Ae(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),i=Math.max(i,r.node(l.v).out+=h),n=Math.max(n,r.node(l.w).in+=h)});var a=Go(i+n+3).map(function(){return new ZT}),s=n+1;return Ae(r.nodes(),function(l){qL(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function qL(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var WMe,cne=N(()=>{"use strict";qt();Vo();one();WMe=As(1);o(lne,"greedyFAS");o(qMe,"doGreedyFAS");o(WL,"removeNode");o(YMe,"buildState");o(qL,"assignBucket")});function une(t){var e=t.graph().acyclicer==="greedy"?lne(t,r(t)):XMe(t);Ae(e,function(n){var i=t.edge(n);t.removeEdge(n),i.forwardName=n.name,i.reversed=!0,t.setEdge(n.w,n.v,i,Ud("rev"))});function r(n){return function(i){return n.edge(i).weight}}o(r,"weightFn")}function XMe(t){var e=[],r={},n={};function i(a){Object.prototype.hasOwnProperty.call(n,a)||(n[a]=!0,r[a]=!0,Ae(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):i(s.w)}),delete r[a])}return o(i,"dfs"),Ae(t.nodes(),i),e}function hne(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var n=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,n)}})}var YL=N(()=>{"use strict";qt();cne();o(une,"run");o(XMe,"dfsFAS");o(hne,"undo")});function Ec(t,e,r,n){var i;do i=Ud(n);while(t.hasNode(i));return r.dummy=e,t.setNode(i,r),i}function dne(t){var e=new sn().setGraph(t.graph());return Ae(t.nodes(),function(r){e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){var n=e.edge(r.v,r.w)||{weight:0,minlen:1},i=t.edge(r);e.setEdge(r.v,r.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e}function JT(t){var e=new sn({multigraph:t.isMultigraph()}).setGraph(t.graph());return Ae(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function XL(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=l*i/a,h=l):(i<0&&(s=-s),u=s,h=s*a/i),{x:r+u,y:n+h}}function ef(t){var e=Je(Go(KL(t)+1),function(){return[]});return Ae(t.nodes(),function(r){var n=t.node(r),i=n.rank;pr(i)||(e[i][n.order]=r)}),e}function pne(t){var e=Dl(Je(t.nodes(),function(r){return t.node(r).rank}));Ae(t.nodes(),function(r){var n=t.node(r);Bt(n,"rank")&&(n.rank-=e)})}function mne(t){var e=Dl(Je(t.nodes(),function(a){return t.node(a).rank})),r=[];Ae(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var n=0,i=t.graph().nodeRankFactor;Ae(r,function(a,s){pr(a)&&s%i!==0?--n:n&&Ae(a,function(l){t.node(l).rank+=n})})}function jL(t,e,r,n){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=n),Ec(t,"border",i,e)}function KL(t){return Is(Je(t.nodes(),function(e){var r=t.node(e).rank;if(!pr(r))return r}))}function gne(t,e){var r={lhs:[],rhs:[]};return Ae(t,function(n){e(n)?r.lhs.push(n):r.rhs.push(n)}),r}function yne(t,e){var r=PT();try{return e()}finally{console.log(t+" time: "+(PT()-r)+"ms")}}function vne(t,e){return e()}var Sc=N(()=>{"use strict";qt();Vo();o(Ec,"addDummyNode");o(dne,"simplify");o(JT,"asNonCompoundGraph");o(XL,"intersectRect");o(ef,"buildLayerMatrix");o(pne,"normalizeRanks");o(mne,"removeEmptyRanks");o(jL,"addBorderNode");o(KL,"maxRank");o(gne,"partition");o(yne,"time");o(vne,"notime")});function bne(t){function e(r){var n=t.children(r),i=t.node(r);if(n.length&&Ae(n,e),Object.prototype.hasOwnProperty.call(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,s=i.maxRank+1;a<s;++a)xne(t,"borderLeft","_bl",r,i,a),xne(t,"borderRight","_br",r,i,a)}}o(e,"dfs"),Ae(t.children(),e)}function xne(t,e,r,n,i,a){var s={width:0,height:0,rank:a,borderType:e},l=i[e][a-1],u=Ec(t,"border",s,r);i[e][a]=u,t.setParent(u,n),l&&t.setEdge(l,u,{weight:1})}var wne=N(()=>{"use strict";qt();Sc();o(bne,"addBorderSegments");o(xne,"addBorderNode")});function kne(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&Sne(t)}function Ene(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&jMe(t),(e==="lr"||e==="rl")&&(KMe(t),Sne(t))}function Sne(t){Ae(t.nodes(),function(e){Tne(t.node(e))}),Ae(t.edges(),function(e){Tne(t.edge(e))})}function Tne(t){var e=t.width;t.width=t.height,t.height=e}function jMe(t){Ae(t.nodes(),function(e){QL(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,QL),Object.prototype.hasOwnProperty.call(r,"y")&&QL(r)})}function QL(t){t.y=-t.y}function KMe(t){Ae(t.nodes(),function(e){ZL(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,ZL),Object.prototype.hasOwnProperty.call(r,"x")&&ZL(r)})}function ZL(t){var e=t.x;t.x=t.y,t.y=e}var Cne=N(()=>{"use strict";qt();o(kne,"adjust");o(Ene,"undo");o(Sne,"swapWidthHeight");o(Tne,"swapWidthHeightOne");o(jMe,"reverseY");o(QL,"reverseYOne");o(KMe,"swapXY");o(ZL,"swapXYOne")});function Ane(t){t.graph().dummyChains=[],Ae(t.edges(),function(e){ZMe(t,e)})}function ZMe(t,e){var r=e.v,n=t.node(r).rank,i=e.w,a=t.node(i).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==n+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++n;n<a;++d,++n)l.points=[],h={width:0,height:0,edgeLabel:l,edgeObj:e,rank:n},f=Ec(t,"edge",h,"_d"),n===u&&(h.width=l.width,h.height=l.height,h.dummy="edge-label",h.labelpos=l.labelpos),t.setEdge(r,f,{weight:l.weight},s),d===0&&t.graph().dummyChains.push(f),r=f;t.setEdge(r,i,{weight:l.weight},s)}}function _ne(t){Ae(t.graph().dummyChains,function(e){var r=t.node(e),n=r.edgeLabel,i;for(t.setEdge(r.edgeObj,n);r.dummy;)i=t.successors(e)[0],t.removeNode(e),n.points.push({x:r.x,y:r.y}),r.dummy==="edge-label"&&(n.x=r.x,n.y=r.y,n.width=r.width,n.height=r.height),e=i,r=t.node(e)})}var JL=N(()=>{"use strict";qt();Sc();o(Ane,"run");o(ZMe,"normalizeEdge");o(_ne,"undo")});function D2(t){var e={};function r(n){var i=t.node(n);if(Object.prototype.hasOwnProperty.call(e,n))return i.rank;e[n]=!0;var a=Dl(Je(t.outEdges(n),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),i.rank=a}o(r,"dfs"),Ae(t.sources(),r)}function Wd(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var ek=N(()=>{"use strict";qt();o(D2,"longestPath");o(Wd,"slack")});function tk(t){var e=new sn({directed:!1}),r=t.nodes()[0],n=t.nodeCount();e.setNode(r,{});for(var i,a;JMe(e,t)<n;)i=eIe(e,t),a=e.hasNode(i.v)?Wd(t,i):-Wd(t,i),tIe(e,t,a);return e}function JMe(t,e){function r(n){Ae(e.nodeEdges(n),function(i){var a=i.v,s=n===a?i.w:a;!t.hasNode(s)&&!Wd(e,i)&&(t.setNode(s,{}),t.setEdge(n,s,{}),r(s))})}return o(r,"dfs"),Ae(t.nodes(),r),t.nodeCount()}function eIe(t,e){return Gd(e.edges(),function(r){if(t.hasNode(r.v)!==t.hasNode(r.w))return Wd(e,r)})}function tIe(t,e,r){Ae(t.nodes(),function(n){e.node(n).rank+=r})}var eR=N(()=>{"use strict";qt();Vo();ek();o(tk,"feasibleTree");o(JMe,"tightTree");o(eIe,"findMinSlackEdge");o(tIe,"shiftRanks")});var Lne=N(()=>{"use strict"});var tR=N(()=>{"use strict"});var cWt,rR=N(()=>{"use strict";qt();tR();cWt=As(1)});var Rne=N(()=>{"use strict";rR()});var nR=N(()=>{"use strict"});var Nne=N(()=>{"use strict";nR()});var bWt,Mne=N(()=>{"use strict";qt();bWt=As(1)});function iR(t){var e={},r={},n=[];function i(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new L2;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Ae(t.predecessors(a),i),delete r[a],n.push(a))}if(o(i,"visit"),Ae(t.sinks(),i),VL(e)!==t.nodeCount())throw new L2;return n}function L2(){}var aR=N(()=>{"use strict";qt();iR.CycleException=L2;o(iR,"topsort");o(L2,"CycleException");L2.prototype=new Error});var Ine=N(()=>{"use strict";aR()});function rk(t,e,r){Pt(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return Ae(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);One(t,s,r==="post",a,n,i)}),i}function One(t,e,r,n,i,a){Object.prototype.hasOwnProperty.call(n,e)||(n[e]=!0,r||a.push(e),Ae(i(e),function(s){One(t,s,r,n,i,a)}),r&&a.push(e))}var sR=N(()=>{"use strict";qt();o(rk,"dfs");o(One,"doDfs")});function oR(t,e){return rk(t,e,"post")}var Pne=N(()=>{"use strict";sR();o(oR,"postorder")});function lR(t,e){return rk(t,e,"pre")}var Bne=N(()=>{"use strict";sR();o(lR,"preorder")});var Fne=N(()=>{"use strict";tR();KT()});var $ne=N(()=>{"use strict";Lne();rR();Rne();Nne();Mne();Ine();Pne();Bne();Fne();nR();aR()});function rf(t){t=dne(t),D2(t);var e=tk(t);uR(e),cR(e,t);for(var r,n;r=Une(e);)n=Hne(e,t,r),Wne(e,t,r,n)}function cR(t,e){var r=oR(t,t.nodes());r=r.slice(0,r.length-1),Ae(r,function(n){sIe(t,e,n)})}function sIe(t,e,r){var n=t.node(r),i=n.parent;t.edge(r,i).cutvalue=Gne(t,e,r)}function Gne(t,e,r){var n=t.node(r),i=n.parent,a=!0,s=e.edge(r,i),l=0;return s||(a=!1,s=e.edge(i,r)),l=s.weight,Ae(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==i){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,lIe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function uR(t,e){arguments.length<2&&(e=t.nodes()[0]),Vne(t,{},1,e)}function Vne(t,e,r,n,i){var a=r,s=t.node(n);return e[n]=!0,Ae(t.neighbors(n),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=Vne(t,e,r,l,n))}),s.low=a,s.lim=r++,i?s.parent=i:delete s.parent,r}function Une(t){return ns(t.edges(),function(e){return t.edge(e).cutvalue<0})}function Hne(t,e,r){var n=r.v,i=r.w;e.hasEdge(n,i)||(n=r.w,i=r.v);var a=t.node(n),s=t.node(i),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=Yr(e.edges(),function(f){return u===zne(t,t.node(f.v),l)&&u!==zne(t,t.node(f.w),l)});return Gd(h,function(f){return Wd(e,f)})}function Wne(t,e,r,n){var i=r.v,a=r.w;t.removeEdge(i,a),t.setEdge(n.v,n.w,{}),uR(t),cR(t,e),oIe(t,e)}function oIe(t,e){var r=ns(t.nodes(),function(i){return!e.node(i).parent}),n=lR(t,r);n=n.slice(1),Ae(n,function(i){var a=t.node(i).parent,s=e.edge(i,a),l=!1;s||(s=e.edge(a,i),l=!0),e.node(i).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function lIe(t,e,r){return t.hasEdge(e,r)}function zne(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var qne=N(()=>{"use strict";qt();$ne();Sc();eR();ek();rf.initLowLimValues=uR;rf.initCutValues=cR;rf.calcCutValue=Gne;rf.leaveEdge=Une;rf.enterEdge=Hne;rf.exchangeEdges=Wne;o(rf,"networkSimplex");o(cR,"initCutValues");o(sIe,"assignCutValue");o(Gne,"calcCutValue");o(uR,"initLowLimValues");o(Vne,"dfsAssignLowLim");o(Une,"leaveEdge");o(Hne,"enterEdge");o(Wne,"exchangeEdges");o(oIe,"updateRanks");o(lIe,"isTreeEdge");o(zne,"isDescendant")});function hR(t){switch(t.graph().ranker){case"network-simplex":Yne(t);break;case"tight-tree":uIe(t);break;case"longest-path":cIe(t);break;default:Yne(t)}}function uIe(t){D2(t),tk(t)}function Yne(t){rf(t)}var cIe,fR=N(()=>{"use strict";eR();qne();ek();o(hR,"rank");cIe=D2;o(uIe,"tightTreeRanker");o(Yne,"networkSimplexRanker")});function Xne(t){var e=Ec(t,"root",{},"_root"),r=hIe(t),n=Is(br(r))-1,i=2*n+1;t.graph().nestingRoot=e,Ae(t.edges(),function(s){t.edge(s).minlen*=i});var a=fIe(t)+1;Ae(t.children(),function(s){jne(t,e,i,a,n,r,s)}),t.graph().nodeRankFactor=i}function jne(t,e,r,n,i,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=jL(t,"_bt"),h=jL(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Ae(l,function(d){jne(t,e,r,n,i,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?n:2*n,v=m!==g?1:i-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:i+a[s]})}function hIe(t){var e={};function r(n,i){var a=t.children(n);a&&a.length&&Ae(a,function(s){r(s,i+1)}),e[n]=i}return o(r,"dfs"),Ae(t.children(),function(n){r(n,1)}),e}function fIe(t){return Xr(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function Kne(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Ae(t.edges(),function(r){var n=t.edge(r);n.nestingEdge&&t.removeEdge(r)})}var Qne=N(()=>{"use strict";qt();Sc();o(Xne,"run");o(jne,"dfs");o(hIe,"treeDepths");o(fIe,"sumWeights");o(Kne,"cleanup")});function Zne(t,e,r){var n={},i;Ae(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=n[l],n[l]=s):(u=i,i=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var Jne=N(()=>{"use strict";qt();o(Zne,"addSubgraphConstraints")});function eie(t,e,r){var n=pIe(t),i=new sn({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(a){return t.node(a)});return Ae(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,l||n),Ae(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=i.edge(h,a),d=pr(f)?0:f.weight;i.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function pIe(t){for(var e;t.hasNode(e=Ud("_root")););return e}var tie=N(()=>{"use strict";qt();Vo();o(eie,"buildLayerGraph");o(pIe,"createRootNode")});function rie(t,e){for(var r=0,n=1;n<e.length;++n)r+=mIe(t,e[n-1],e[n]);return r}function mIe(t,e,r){for(var n=jT(r,Je(r,function(h,f){return f})),i=qr(Je(e,function(h){return kc(Je(t.outEdges(h),function(f){return{pos:n[f.w],weight:t.edge(f).weight}}),"pos")})),a=1;a<r.length;)a<<=1;var s=2*a-1;a-=1;var l=Je(new Array(s),function(){return 0}),u=0;return Ae(i.forEach(function(h){var f=h.pos+a;l[f]+=h.weight;for(var d=0;f>0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var nie=N(()=>{"use strict";qt();o(rie,"crossCount");o(mIe,"twoLayerCrossCount")});function iie(t){var e={},r=Yr(t.nodes(),function(l){return!t.children(l).length}),n=Is(Je(r,function(l){return t.node(l).rank})),i=Je(Go(n+1),function(){return[]});function a(l){if(!Bt(e,l)){e[l]=!0;var u=t.node(l);i[u.rank].push(l),Ae(t.successors(l),a)}}o(a,"dfs");var s=kc(r,function(l){return t.node(l).rank});return Ae(s,a),i}var aie=N(()=>{"use strict";qt();o(iie,"initOrder")});function sie(t,e){return Je(e,function(r){var n=t.inEdges(r);if(n.length){var i=Xr(n,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}var oie=N(()=>{"use strict";qt();o(sie,"barycenter")});function lie(t,e){var r={};Ae(t,function(i,a){var s=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};pr(i.barycenter)||(s.barycenter=i.barycenter,s.weight=i.weight)}),Ae(e.edges(),function(i){var a=r[i.v],s=r[i.w];!pr(a)&&!pr(s)&&(s.indegree++,a.out.push(r[i.w]))});var n=Yr(r,function(i){return!i.indegree});return gIe(n)}function gIe(t){var e=[];function r(a){return function(s){s.merged||(pr(s.barycenter)||pr(a.barycenter)||s.barycenter>=a.barycenter)&&yIe(a,s)}}o(r,"handleIn");function n(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(n,"handleOut");t.length;){var i=t.pop();e.push(i),Ae(i.in.reverse(),r(i)),Ae(i.out,n(i))}return Je(Yr(e,function(a){return!a.merged}),function(a){return Vd(a,["vs","i","barycenter","weight"])})}function yIe(t,e){var r=0,n=0;t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/n,t.weight=n,t.i=Math.min(e.i,t.i),e.merged=!0}var cie=N(()=>{"use strict";qt();o(lie,"resolveConflicts");o(gIe,"doResolveConflicts");o(yIe,"mergeEntries")});function hie(t,e){var r=gne(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=r.lhs,i=kc(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;n.sort(vIe(!!e)),u=uie(a,i,u),Ae(n,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=uie(a,i,u)});var h={vs:qr(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function uie(t,e,r){for(var n;e.length&&(n=ga(e)).i<=r;)e.pop(),t.push(n.vs),r++;return r}function vIe(t){return function(e,r){return e.barycenter<r.barycenter?-1:e.barycenter>r.barycenter?1:t?r.i-e.i:e.i-r.i}}var fie=N(()=>{"use strict";qt();Sc();o(hie,"sort");o(uie,"consumeUnsortable");o(vIe,"compareWithBias")});function dR(t,e,r,n){var i=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(i=Yr(i,function(g){return g!==s&&g!==l}));var h=sie(t,i);Ae(h,function(g){if(t.children(g.v).length){var y=dR(t,g.v,r,n);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&bIe(g,y)}});var f=lie(h,r);xIe(f,u);var d=hie(f,n);if(s&&(d.vs=qr([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function xIe(t,e){Ae(t,function(r){r.vs=qr(r.vs.map(function(n){return e[n]?e[n].vs:n}))})}function bIe(t,e){pr(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var die=N(()=>{"use strict";qt();oie();cie();fie();o(dR,"sortSubgraph");o(xIe,"expandSubgraphs");o(bIe,"mergeBarycenters")});function gie(t){var e=KL(t),r=pie(t,Go(1,e+1),"inEdges"),n=pie(t,Go(e-1,-1,-1),"outEdges"),i=iie(t);mie(t,i);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){wIe(l%2?r:n,l%4>=2),i=ef(t);var h=rie(t,i);h<a&&(u=0,s=yL(i),a=h)}mie(t,s)}function pie(t,e,r){return Je(e,function(n){return eie(t,n,r)})}function wIe(t,e){var r=new sn;Ae(t,function(n){var i=n.graph().root,a=dR(n,i,r,e);Ae(a.vs,function(s,l){n.node(s).order=l}),Zne(n,r,a.vs)})}function mie(t,e){Ae(e,function(r){Ae(r,function(n,i){t.node(n).order=i})})}var yie=N(()=>{"use strict";qt();Vo();Sc();Jne();tie();nie();aie();die();o(gie,"order");o(pie,"buildLayerGraphs");o(wIe,"sweepLayerGraphs");o(mie,"assignOrder")});function vie(t){var e=kIe(t);Ae(t.graph().dummyChains,function(r){for(var n=t.node(r),i=n.edgeObj,a=TIe(t,e,i.v,i.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==i.w;){if(n=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRank<n.rank;)u++;h===l&&(f=!1)}if(!f){for(;u<s.length-1&&t.node(h=s[u+1]).minRank<=n.rank;)u++;h=s[u]}t.setParent(r,h),r=t.successors(r)[0]}})}function TIe(t,e,r,n){var i=[],a=[],s=Math.min(e[r].low,e[n].low),l=Math.max(e[r].lim,e[n].lim),u,h;u=r;do u=t.parent(u),i.push(u);while(u&&(e[u].low>s||l>e[u].lim));for(h=u,u=n;(u=t.parent(u))!==h;)a.push(u);return{path:i.concat(a.reverse()),lca:h}}function kIe(t){var e={},r=0;function n(i){var a=r;Ae(t.children(i),n),e[i]={low:a,lim:r++}}return o(n,"dfs"),Ae(t.children(),n),e}var xie=N(()=>{"use strict";qt();o(vie,"parentDummyChains");o(TIe,"findPath");o(kIe,"postorder")});function EIe(t,e){var r={};function n(i,a){var s=0,l=0,u=i.length,h=ga(a);return Ae(a,function(f,d){var p=CIe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Ae(a.slice(l,d+1),function(g){Ae(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(x<s||m<x)&&!(v.dummy&&t.node(g).dummy)&&bie(r,y,g)})}),l=d+1,s=m)}),a}return o(n,"visitLayer"),Xr(e,n),r}function SIe(t,e){var r={};function n(a,s,l,u,h){var f;Ae(Go(s,l),function(d){f=a[d],t.node(f).dummy&&Ae(t.predecessors(f),function(p){var m=t.node(p);m.dummy&&(m.order<u||m.order>h)&&bie(r,p,f)})})}o(n,"scan");function i(a,s){var l=-1,u,h=0;return Ae(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,n(s,h,d,l,u),h=d,l=u)}n(s,h,s.length,u,a.length)}),s}return o(i,"visitLayer"),Xr(e,i),r}function CIe(t,e){if(t.node(e).dummy)return ns(t.predecessors(e),function(r){return t.node(r).dummy})}function bie(t,e,r){if(e>r){var n=e;e=r,r=n}var i=t[e];i||(t[e]=i={}),i[r]=!0}function AIe(t,e,r){if(e>r){var n=e;e=r,r=n}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function _Ie(t,e,r,n){var i={},a={},s={};return Ae(e,function(l){Ae(l,function(u,h){i[u]=u,a[u]=u,s[u]=h})}),Ae(e,function(l){var u=-1;Ae(l,function(h){var f=n(h);if(f.length){f=kc(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u<s[g]&&!AIe(r,h,g)&&(a[g]=h,a[h]=i[h]=i[g],u=s[g])}}})}),{root:i,align:a}}function DIe(t,e,r,n,i){var a={},s=LIe(t,e,r,i),l=i?"borderLeft":"borderRight";function u(d,p){for(var m=s.nodes(),g=m.pop(),y={};g;)y[g]?d(g):(y[g]=!0,m.push(g),m=m.concat(p(g))),g=m.pop()}o(u,"iterate");function h(d){a[d]=s.inEdges(d).reduce(function(p,m){return Math.max(p,a[m.v]+s.edge(m))},0)}o(h,"pass1");function f(d){var p=s.outEdges(d).reduce(function(g,y){return Math.min(g,a[y.w]-s.edge(y))},Number.POSITIVE_INFINITY),m=t.node(d);p!==Number.POSITIVE_INFINITY&&m.borderType!==l&&(a[d]=Math.max(a[d],p))}return o(f,"pass2"),u(h,s.predecessors.bind(s)),u(f,s.successors.bind(s)),Ae(n,function(d){a[d]=a[r[d]]}),a}function LIe(t,e,r,n){var i=new sn,a=t.graph(),s=IIe(a.nodesep,a.edgesep,n);return Ae(e,function(l){var u;Ae(l,function(h){var f=r[h];if(i.setNode(f),u){var d=r[u],p=i.edge(d,f);i.setEdge(d,f,Math.max(s(t,h,u),p||0))}u=h})}),i}function RIe(t,e){return Gd(br(e),function(r){var n=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;return NL(r,function(a,s){var l=OIe(t,s)/2;n=Math.max(a+l,n),i=Math.min(a-l,i)}),n-i})}function NIe(t,e){var r=br(e),n=Dl(r),i=Is(r);Ae(["u","d"],function(a){Ae(["l","r"],function(s){var l=a+s,u=t[l],h;if(u!==e){var f=br(u);h=s==="l"?n-Dl(f):i-Is(f),h&&(t[l]=zd(u,function(d){return d+h}))}})})}function MIe(t,e){return zd(t.ul,function(r,n){if(e)return t[e.toLowerCase()][n];var i=kc(Je(t,n));return(i[1]+i[2])/2})}function wie(t){var e=ef(t),r=Fh(EIe(t,e),SIe(t,e)),n={},i;Ae(["u","d"],function(s){i=s==="u"?e:br(e).reverse(),Ae(["l","r"],function(l){l==="r"&&(i=Je(i,function(d){return br(d).reverse()}));var u=(s==="u"?t.predecessors:t.successors).bind(t),h=_Ie(t,i,r,u),f=DIe(t,i,h.root,h.align,l==="r");l==="r"&&(f=zd(f,function(d){return-d})),n[s+l]=f})});var a=RIe(t,n);return NIe(n,a),MIe(n,t.graph().align)}function IIe(t,e,r){return function(n,i,a){var s=n.node(i),l=n.node(a),u=0,h;if(u+=s.width/2,Object.prototype.hasOwnProperty.call(s,"labelpos"))switch(s.labelpos.toLowerCase()){case"l":h=-s.width/2;break;case"r":h=s.width/2;break}if(h&&(u+=r?h:-h),h=0,u+=(s.dummy?e:t)/2,u+=(l.dummy?e:t)/2,u+=l.width/2,Object.prototype.hasOwnProperty.call(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":h=l.width/2;break;case"r":h=-l.width/2;break}return h&&(u+=r?h:-h),h=0,u}}function OIe(t,e){return t.node(e).width}var Tie=N(()=>{"use strict";qt();Vo();Sc();o(EIe,"findType1Conflicts");o(SIe,"findType2Conflicts");o(CIe,"findOtherInnerSegmentNode");o(bie,"addConflict");o(AIe,"hasConflict");o(_Ie,"verticalAlignment");o(DIe,"horizontalCompaction");o(LIe,"buildBlockGraph");o(RIe,"findSmallestWidthAlignment");o(NIe,"alignCoordinates");o(MIe,"balance");o(wie,"positionX");o(IIe,"sep");o(OIe,"width")});function kie(t){t=JT(t),PIe(t),ML(wie(t),function(e,r){t.node(r).x=e})}function PIe(t){var e=ef(t),r=t.graph().ranksep,n=0;Ae(e,function(i){var a=Is(Je(i,function(s){return t.node(s).height}));Ae(i,function(s){t.node(s).y=n+a/2}),n+=a+r})}var Eie=N(()=>{"use strict";qt();Sc();Tie();o(kie,"position");o(PIe,"positionY")});function R2(t,e){var r=e&&e.debugTiming?yne:vne;r("layout",()=>{var n=r(" buildLayoutGraph",()=>YIe(t));r(" runLayout",()=>BIe(n,r)),r(" updateInputGraph",()=>FIe(t,n))})}function BIe(t,e){e(" makeSpaceForEdgeLabels",()=>XIe(t)),e(" removeSelfEdges",()=>nOe(t)),e(" acyclic",()=>une(t)),e(" nestingGraph.run",()=>Xne(t)),e(" rank",()=>hR(JT(t))),e(" injectEdgeLabelProxies",()=>jIe(t)),e(" removeEmptyRanks",()=>mne(t)),e(" nestingGraph.cleanup",()=>Kne(t)),e(" normalizeRanks",()=>pne(t)),e(" assignRankMinMax",()=>KIe(t)),e(" removeEdgeLabelProxies",()=>QIe(t)),e(" normalize.run",()=>Ane(t)),e(" parentDummyChains",()=>vie(t)),e(" addBorderSegments",()=>bne(t)),e(" order",()=>gie(t)),e(" insertSelfEdges",()=>iOe(t)),e(" adjustCoordinateSystem",()=>kne(t)),e(" position",()=>kie(t)),e(" positionSelfEdges",()=>aOe(t)),e(" removeBorderNodes",()=>rOe(t)),e(" normalize.undo",()=>_ne(t)),e(" fixupEdgeLabelCoords",()=>eOe(t)),e(" undoCoordinateSystem",()=>Ene(t)),e(" translateGraph",()=>ZIe(t)),e(" assignNodeIntersects",()=>JIe(t)),e(" reversePoints",()=>tOe(t)),e(" acyclic.undo",()=>hne(t))}function FIe(t,e){Ae(t.nodes(),function(r){var n=t.node(r),i=e.node(r);n&&(n.x=i.x,n.y=i.y,e.children(r).length&&(n.width=i.width,n.height=i.height))}),Ae(t.edges(),function(r){var n=t.edge(r),i=e.edge(r);n.points=i.points,Object.prototype.hasOwnProperty.call(i,"x")&&(n.x=i.x,n.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function YIe(t){var e=new sn({multigraph:!0,compound:!0}),r=mR(t.graph());return e.setGraph(Fh({},zIe,pR(r,$Ie),Vd(r,GIe))),Ae(t.nodes(),function(n){var i=mR(t.node(n));e.setNode(n,Qh(pR(i,VIe),UIe)),e.setParent(n,t.parent(n))}),Ae(t.edges(),function(n){var i=mR(t.edge(n));e.setEdge(n,Fh({},WIe,pR(i,HIe),Vd(i,qIe)))}),e}function XIe(t){var e=t.graph();e.ranksep/=2,Ae(t.edges(),function(r){var n=t.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function jIe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var n=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-n.rank)/2+n.rank,e};Ec(t,"edge-proxy",a,"_ep")}})}function KIe(t){var e=0;Ae(t.nodes(),function(r){var n=t.node(r);n.borderTop&&(n.minRank=t.node(n.borderTop).rank,n.maxRank=t.node(n.borderBottom).rank,e=Is(e,n.maxRank))}),t.graph().maxRank=e}function QIe(t){Ae(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function ZIe(t){var e=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,i=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),n=Math.min(n,d-m/2),i=Math.max(i,d+m/2)}o(u,"getExtremes"),Ae(t.nodes(),function(h){u(t.node(h))}),Ae(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,n-=l,Ae(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=n}),Ae(t.edges(),function(h){var f=t.edge(h);Ae(f.points,function(d){d.x-=e,d.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),a.width=r-e+s,a.height=i-n+l}function JIe(t){Ae(t.edges(),function(e){var r=t.edge(e),n=t.node(e.v),i=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=i,s=n),r.points.unshift(XL(n,a)),r.points.push(XL(i,s))})}function eOe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function tOe(t){Ae(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function rOe(t){Ae(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),n=t.node(r.borderTop),i=t.node(r.borderBottom),a=t.node(ga(r.borderLeft)),s=t.node(ga(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(i.y-n.y),r.x=a.x+r.width/2,r.y=n.y+r.height/2}}),Ae(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function nOe(t){Ae(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function iOe(t){var e=ef(t);Ae(e,function(r){var n=0;Ae(r,function(i,a){var s=t.node(i);s.order=a+n,Ae(s.selfEdges,function(l){Ec(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function aOe(t){Ae(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var n=t.node(r.e.v),i=n.x+n.width/2,a=n.y,s=r.x-i,l=n.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:i+2*s/3,y:a-l},{x:i+5*s/6,y:a-l},{x:i+s,y:a},{x:i+5*s/6,y:a+l},{x:i+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function pR(t,e){return zd(Vd(t,e),Number)}function mR(t){var e={};return Ae(t,function(r,n){e[n.toLowerCase()]=r}),e}var $Ie,zIe,GIe,VIe,UIe,HIe,WIe,qIe,Sie=N(()=>{"use strict";qt();Vo();wne();Cne();YL();JL();fR();Qne();yie();xie();Eie();Sc();o(R2,"layout");o(BIe,"runLayout");o(FIe,"updateInputGraph");$Ie=["nodesep","edgesep","ranksep","marginx","marginy"],zIe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},GIe=["acyclicer","ranker","rankdir","align"],VIe=["width","height"],UIe={width:0,height:0},HIe=["minlen","weight","width","height","labeloffset"],WIe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},qIe=["labelpos"];o(YIe,"buildLayoutGraph");o(XIe,"makeSpaceForEdgeLabels");o(jIe,"injectEdgeLabelProxies");o(KIe,"assignRankMinMax");o(QIe,"removeEdgeLabelProxies");o(ZIe,"translateGraph");o(JIe,"assignNodeIntersects");o(eOe,"fixupEdgeLabelCoords");o(tOe,"reversePointsForReversedEdges");o(rOe,"removeBorderNodes");o(nOe,"removeSelfEdges");o(iOe,"insertSelfEdges");o(aOe,"positionSelfEdges");o(pR,"selectNumberAttrs");o(mR,"canonicalize")});var gR=N(()=>{"use strict";YL();Sie();JL();fR()});function Uo(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:sOe(t),edges:oOe(t)};return pr(t.graph())||(e.value=an(t.graph())),e}function sOe(t){return Je(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return pr(r)||(i.value=r),pr(n)||(i.parent=n),i})}function oOe(t){return Je(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return pr(e.name)||(n.name=e.name),pr(r)||(n.value=r),n})}var yR=N(()=>{"use strict";qt();KT();o(Uo,"write");o(sOe,"writeNodes");o(oOe,"writeEdges")});var wr,qd,_ie,Die,nk,lOe,Lie,Rie,cOe,Fm,Aie,Nie,Mie,Iie,Oie,Pie=N(()=>{"use strict";vt();Vo();yR();wr=new Map,qd=new Map,_ie=new Map,Die=o(()=>{qd.clear(),_ie.clear(),wr.clear()},"clear"),nk=o((t,e)=>{let r=qd.get(e)||[];return Y.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),lOe=o((t,e)=>{let r=qd.get(e)||[];return Y.info("Descendants of ",e," is ",r),Y.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||nk(t.v,e)||nk(t.w,e)||r.includes(t.w):(Y.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),Lie=o((t,e,r,n)=>{Y.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),Y.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)Lie(a,e,r,n);else{let s=e.node(a);Y.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(Y.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(Y.debug("Setting parent",a,t),r.setParent(a,t)):(Y.info("In copy ",t,"root",n,"data",e.node(t),n),Y.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);Y.debug("Copying Edges",l),l.forEach(u=>{Y.info("Edge",u);let h=e.edge(u.v,u.w,u.name);Y.info("Edge data",h,n);try{lOe(u,n)?(Y.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),Y.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):Y.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){Y.error(f)}})}Y.debug("Removing node",a),e.removeNode(a)})},"copy"),Rie=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)_ie.set(i,t),n=[...n,...Rie(i,e)];return n},"extractDescendants"),cOe=o((t,e,r)=>{let n=t.edges().filter(u=>u.v===e||u.w===e),i=t.edges().filter(u=>u.v===r||u.w===r),a=n.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=i.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Fm=o((t,e,r)=>{let n=e.children(t);if(Y.trace("Searching children of id ",t,n),n.length<1)return t;let i;for(let a of n){let s=Fm(a,e,r),l=cOe(e,r,s);if(s)if(l.length>0)i=s;else return s}return i},"findNonClusterChild"),Aie=o(t=>!wr.has(t)||!wr.get(t).externalConnections?t:wr.has(t)?wr.get(t).id:t,"getAnchorId"),Nie=o((t,e)=>{if(!t||e>10){Y.debug("Opting out, no graph ");return}else Y.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(Y.warn("Cluster identified",r," Replacement id in edges: ",Fm(r,t,r)),qd.set(r,Rie(r,t)),wr.set(r,{id:Fm(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(Y.debug("Cluster identified",r,qd),i.forEach(a=>{let s=nk(a.v,r),l=nk(a.w,r);s^l&&(Y.warn("Edge: ",a," leaves cluster ",r),Y.warn("Descendants of XXX ",r,": ",qd.get(r)),wr.get(r).externalConnections=!0)})):Y.debug("Not a cluster ",r,qd)});for(let r of wr.keys()){let n=wr.get(r).id,i=t.parent(n);i!==r&&wr.has(i)&&!wr.get(i).externalConnections&&(wr.get(r).id=i)}t.edges().forEach(function(r){let n=t.edge(r);Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(Y.warn("Fix XXX",wr,"ids:",r.v,r.w,"Translating: ",wr.get(r.v)," --- ",wr.get(r.w)),wr.get(r.v)||wr.get(r.w)){if(Y.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),i=Aie(r.v),a=Aie(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);wr.get(s).externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);wr.get(s).externalConnections=!0,n.toCluster=r.w}Y.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),Y.warn("Adjusted Graph",Uo(t)),Mie(t,0),Y.trace(wr)},"adjustClustersAndEdges"),Mie=o((t,e)=>{if(Y.warn("extractor - ",e,Uo(t),t.children("D")),e>10){Y.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){Y.debug("Done, no node has children",t.nodes());return}Y.debug("Nodes = ",r,e);for(let i of r)if(Y.debug("Extracting node",i,wr,wr.has(i)&&!wr.get(i).externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!wr.has(i))Y.debug("Not a cluster",i,e);else if(!wr.get(i).externalConnections&&t.children(i)&&t.children(i).length>0){Y.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";wr.get(i)?.clusterData?.dir&&(s=wr.get(i).clusterData.dir,Y.warn("Fixing dir",wr.get(i).clusterData.dir,s));let l=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Y.warn("Old graph before copy",Uo(t)),Lie(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:wr.get(i).clusterData,label:wr.get(i).label,graph:l}),Y.warn("New graph after copy node: (",i,")",Uo(l)),Y.debug("Old graph after copy",Uo(t))}else Y.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!wr.get(i).externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),Y.debug(wr);r=t.nodes(),Y.warn("New list of nodes",r);for(let i of r){let a=t.node(i);Y.warn(" Now next level",i,a),a?.clusterNode&&Mie(a.graph,e+1)}},"extractor"),Iie=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(n=>{let i=t.children(n),a=Iie(t,i);r=[...r,...a]}),r},"sorter"),Oie=o(t=>Iie(t,t.children()),"sortNodesByHierarchy")});var Fie={};hr(Fie,{render:()=>uOe});var Bie,uOe,$ie=N(()=>{"use strict";gR();yR();Vo();tL();Ft();Pie();eT();Hw();eL();vt();w2();zt();Bie=o(async(t,e,r,n,i,a)=>{Y.warn("Graph in recursive render:XAX",Uo(e),i);let s=e.graph().rankdir;Y.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?Y.info("Recursive render XXX",e.nodes()):Y.info("No nodes found for",e),e.edges().length>0&&Y.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));Y.trace(`Setting data for parent cluster XXX | |
| 477 | + Node.id = `,y,` | |
| 478 | + data=`,x.height,` | |
| 479 | +Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(Y.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(Y.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){Y.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let w=await Bie(d,v.graph,r,n,e.node(y),a),C=w.elem;je(v,C),v.diff=w.diff||0,Y.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),rJ(C,v)}else e.children(y).length>0?(Y.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),Y.trace(Fm(v.id,e)),wr.set(v.id,{id:Fm(v.id,e),node:v})):(Y.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await vm(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);Y.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),Y.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),Y.info("Fix",wr,"ids:",v.v,v.w,"Translating: ",wr.get(v.v),wr.get(v.w)),await jw(f,x)});await Promise.all(y)},"processEdges")(),Y.info("Graph before layout:",JSON.stringify(Uo(e))),Y.info("############################################# XXX"),Y.info("### Layout ### XXX"),Y.info("############################################# XXX"),R2(e),Y.info("Graph after layout:",JSON.stringify(Uo(e)));let m=0,{subGraphTitleTotalMargin:g}=Ru(a);return await Promise.all(Oie(e).map(async function(y){let v=e.node(y);if(Y.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,Y.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),wr.get(v.id).node=v,k2(v);else if(e.children(y).length>0){Y.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,w=b-x||0;Y.debug("OffsetY",w,"labelHeight",b,"halfPadding",x),await ym(u,v),wr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,Y.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),k2(v)}})),e.edges().forEach(function(y){let v=e.edge(y);Y.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(C=>C.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let w=Qw(h,v,wr,r,x,b,n);Kw(v,w)}),e.nodes().forEach(function(y){let v=e.node(y);Y.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),Y.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),uOe=o(async(t,e)=>{let r=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=e.select("g");Zw(n,t.markers,t.type,t.diagramId),nJ(),tJ(),jZ(),Die(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),Y.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeStart="none",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",p.arrowTypeStart="none",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyc<lic-special-2")}else r.setEdge(a.start,a.end,{...a},a.id)}),Y.warn("Graph at first:",JSON.stringify(Uo(r))),Nie(r),Y.warn("Graph after XAX:",JSON.stringify(Uo(r)));let i=me();await Bie(n,r,t.type,t.diagramId,void 0,i)},"render")});var N2,vR,hOe,Cc,nf,Yd=N(()=>{"use strict";aJ();vt();N2={},vR=o(t=>{for(let e of t)N2[e.name]=e},"registerLayoutLoaders"),hOe=o(()=>{vR([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>($ie(),Fie)),"loader")}])},"registerDefaultLayoutLoaders");hOe();Cc=o(async(t,e)=>{if(!(t.layoutAlgorithm in N2))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);let r=N2[t.layoutAlgorithm];return(await r.loader()).render(t,e,iJ,{algorithm:r.algorithm})},"render"),nf=o((t="",{fallback:e="dagre"}={})=>{if(t in N2)return t;if(e in N2)return Y.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var Ac,fOe,dOe,$m=N(()=>{"use strict";Ei();vt();Ac=o((t,e,r,n)=>{t.attr("class",r);let{width:i,height:a,x:s,y:l}=fOe(t,e);vn(t,a,i,n);let u=dOe(s,l,i,a,e);t.attr("viewBox",u),Y.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),fOe=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),dOe=o((t,e,r,n,i)=>`${t-i} ${e-i} ${r} ${n}`,"createViewBox")});var pOe,mOe,zie,Gie=N(()=>{"use strict";dr();zt();vt();gm();Yd();$m();ir();pOe=o(function(t,e){return e.db.getClasses()},"getClasses"),mOe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,flowchart:a,layout:s}=me(),l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?l.nodes()[0].contentDocument:document;Y.debug("Before getData: ");let h=n.db.getData();Y.debug("Data: ",h);let f=yc(e,i),d=n.db.getDirection();h.type=n.type,h.layoutAlgorithm=nf(s),h.layoutAlgorithm==="dagre"&&s==="elk"&&Y.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),h.direction=d,h.nodeSpacing=a?.nodeSpacing||50,h.rankSpacing=a?.rankSpacing||50,h.markers=["point","circle","cross"],h.diagramId=e,Y.debug("REF1:",h),await Cc(h,f);let p=h.config.flowchart?.diagramPadding??8;Gt.insertTitle(f,"flowchartTitleText",a?.titleTopMargin||0,n.db.getDiagramTitle()),Ac(f,p,"flowchart",a?.useMaxWidth||!1);for(let m of h.nodes){let g=Ge(`#${e} [id="${m.id}"]`);if(!g||!m.link)continue;let y=u.createElementNS("http://www.w3.org/2000/svg","a");y.setAttributeNS("http://www.w3.org/2000/svg","class",m.cssClasses),y.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?y.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):m.linkTarget&&y.setAttributeNS("http://www.w3.org/2000/svg","target",m.linkTarget);let v=g.insert(function(){return y},":first-child"),x=g.select(".label-container");x&&v.append(function(){return x.node()});let b=g.select(".label");b&&v.append(function(){return b.node()})}},"draw"),zie={getClasses:pOe,draw:mOe}});var xR,bR,Vie=N(()=>{"use strict";xR=function(){var t=o(function(Hr,et,mt,Kt){for(mt=mt||{},Kt=Hr.length;Kt--;mt[Hr[Kt]]=et);return mt},"o"),e=[1,4],r=[1,3],n=[1,5],i=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,49],y=[1,48],v=[1,29],x=[1,30],b=[1,31],w=[1,32],C=[1,33],T=[1,44],E=[1,46],A=[1,42],S=[1,47],_=[1,43],I=[1,50],D=[1,45],k=[1,51],L=[1,52],R=[1,34],O=[1,35],M=[1,36],B=[1,37],F=[1,57],P=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],z=[1,61],$=[1,60],H=[1,62],Q=[8,9,11,75,77,78],j=[1,78],ie=[1,91],ne=[1,96],le=[1,95],he=[1,92],K=[1,88],X=[1,94],te=[1,90],J=[1,97],se=[1,93],ue=[1,98],Z=[1,89],Se=[8,9,10,11,40,75,77,78],ce=[8,9,10,11,40,46,75,77,78],ae=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],Oe=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],ge=[44,60,89,102,105,106,109,111,114,115,116],ze=[1,121],He=[1,122],$e=[1,124],Re=[1,123],Ie=[44,60,62,74,89,102,105,106,109,111,114,115,116],be=[1,133],W=[1,147],de=[1,148],re=[1,149],oe=[1,150],V=[1,135],xe=[1,137],q=[1,141],pe=[1,142],ve=[1,143],Pe=[1,144],_e=[1,145],we=[1,146],Ve=[1,151],De=[1,152],qe=[1,131],at=[1,132],Rt=[1,139],st=[1,134],Ue=[1,138],ct=[1,136],We=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],ot=[1,154],Yt=[1,156],bt=[8,9,11],Mt=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],xt=[1,176],ut=[1,172],Et=[1,173],ft=[1,177],yt=[1,174],nt=[1,175],dn=[77,116,119],Tt=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],On=[10,106],tn=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],_r=[1,247],Dr=[1,245],Pn=[1,249],At=[1,243],Ce=[1,244],tt=[1,246],St=[1,248],mr=[1,250],rn=[1,268],gn=[8,9,11,106],Zr=[8,9,10,11,60,84,105,106,109,110,111,112],Ni={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(et,mt,Kt,lt,Cn,ye,Vf){var Te=ye.length-1;switch(Cn){case 2:this.$=[];break;case 3:(!Array.isArray(ye[Te])||ye[Te].length>0)&&ye[Te-1].push(ye[Te]),this.$=ye[Te-1];break;case 4:case 183:this.$=ye[Te];break;case 11:lt.setDirection("TB"),this.$="TB";break;case 12:lt.setDirection(ye[Te-1]),this.$=ye[Te-1];break;case 27:this.$=ye[Te-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=lt.addSubGraph(ye[Te-6],ye[Te-1],ye[Te-4]);break;case 34:this.$=lt.addSubGraph(ye[Te-3],ye[Te-1],ye[Te-3]);break;case 35:this.$=lt.addSubGraph(void 0,ye[Te-1],void 0);break;case 37:this.$=ye[Te].trim(),lt.setAccTitle(this.$);break;case 38:case 39:this.$=ye[Te].trim(),lt.setAccDescription(this.$);break;case 43:this.$=ye[Te-1]+ye[Te];break;case 44:this.$=ye[Te];break;case 45:lt.addVertex(ye[Te-1][ye[Te-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te]),lt.addLink(ye[Te-3].stmt,ye[Te-1],ye[Te-2]),this.$={stmt:ye[Te-1],nodes:ye[Te-1].concat(ye[Te-3].nodes)};break;case 46:lt.addLink(ye[Te-2].stmt,ye[Te],ye[Te-1]),this.$={stmt:ye[Te],nodes:ye[Te].concat(ye[Te-2].nodes)};break;case 47:lt.addLink(ye[Te-3].stmt,ye[Te-1],ye[Te-2]),this.$={stmt:ye[Te-1],nodes:ye[Te-1].concat(ye[Te-3].nodes)};break;case 48:this.$={stmt:ye[Te-1],nodes:ye[Te-1]};break;case 49:lt.addVertex(ye[Te-1][ye[Te-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te]),this.$={stmt:ye[Te-1],nodes:ye[Te-1],shapeData:ye[Te]};break;case 50:this.$={stmt:ye[Te],nodes:ye[Te]};break;case 51:this.$=[ye[Te]];break;case 52:lt.addVertex(ye[Te-5][ye[Te-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te-4]),this.$=ye[Te-5].concat(ye[Te]);break;case 53:this.$=ye[Te-4].concat(ye[Te]);break;case 54:this.$=ye[Te];break;case 55:this.$=ye[Te-2],lt.setClass(ye[Te-2],ye[Te]);break;case 56:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"square");break;case 57:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"doublecircle");break;case 58:this.$=ye[Te-5],lt.addVertex(ye[Te-5],ye[Te-2],"circle");break;case 59:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"ellipse");break;case 60:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"stadium");break;case 61:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"subroutine");break;case 62:this.$=ye[Te-7],lt.addVertex(ye[Te-7],ye[Te-1],"rect",void 0,void 0,void 0,Object.fromEntries([[ye[Te-5],ye[Te-3]]]));break;case 63:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"cylinder");break;case 64:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"round");break;case 65:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"diamond");break;case 66:this.$=ye[Te-5],lt.addVertex(ye[Te-5],ye[Te-2],"hexagon");break;case 67:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"odd");break;case 68:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"trapezoid");break;case 69:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"inv_trapezoid");break;case 70:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"lean_right");break;case 71:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"lean_left");break;case 72:this.$=ye[Te],lt.addVertex(ye[Te]);break;case 73:ye[Te-1].text=ye[Te],this.$=ye[Te-1];break;case 74:case 75:ye[Te-2].text=ye[Te-1],this.$=ye[Te-2];break;case 76:this.$=ye[Te];break;case 77:var wi=lt.destructLink(ye[Te],ye[Te-2]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,text:ye[Te-1]};break;case 78:var wi=lt.destructLink(ye[Te],ye[Te-2]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,text:ye[Te-1],id:ye[Te-3]};break;case 79:this.$={text:ye[Te],type:"text"};break;case 80:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 81:this.$={text:ye[Te],type:"string"};break;case 82:this.$={text:ye[Te],type:"markdown"};break;case 83:var wi=lt.destructLink(ye[Te]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length};break;case 84:var wi=lt.destructLink(ye[Te]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,id:ye[Te-1]};break;case 85:this.$=ye[Te-1];break;case 86:this.$={text:ye[Te],type:"text"};break;case 87:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 88:this.$={text:ye[Te],type:"string"};break;case 89:case 104:this.$={text:ye[Te],type:"markdown"};break;case 101:this.$={text:ye[Te],type:"text"};break;case 102:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 103:this.$={text:ye[Te],type:"text"};break;case 105:this.$=ye[Te-4],lt.addClass(ye[Te-2],ye[Te]);break;case 106:this.$=ye[Te-4],lt.setClass(ye[Te-2],ye[Te]);break;case 107:case 115:this.$=ye[Te-1],lt.setClickEvent(ye[Te-1],ye[Te]);break;case 108:case 116:this.$=ye[Te-3],lt.setClickEvent(ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-3],ye[Te]);break;case 109:this.$=ye[Te-2],lt.setClickEvent(ye[Te-2],ye[Te-1],ye[Te]);break;case 110:this.$=ye[Te-4],lt.setClickEvent(ye[Te-4],ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-4],ye[Te]);break;case 111:this.$=ye[Te-2],lt.setLink(ye[Te-2],ye[Te]);break;case 112:this.$=ye[Te-4],lt.setLink(ye[Te-4],ye[Te-2]),lt.setTooltip(ye[Te-4],ye[Te]);break;case 113:this.$=ye[Te-4],lt.setLink(ye[Te-4],ye[Te-2],ye[Te]);break;case 114:this.$=ye[Te-6],lt.setLink(ye[Te-6],ye[Te-4],ye[Te]),lt.setTooltip(ye[Te-6],ye[Te-2]);break;case 117:this.$=ye[Te-1],lt.setLink(ye[Te-1],ye[Te]);break;case 118:this.$=ye[Te-3],lt.setLink(ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-3],ye[Te]);break;case 119:this.$=ye[Te-3],lt.setLink(ye[Te-3],ye[Te-2],ye[Te]);break;case 120:this.$=ye[Te-5],lt.setLink(ye[Te-5],ye[Te-4],ye[Te]),lt.setTooltip(ye[Te-5],ye[Te-2]);break;case 121:this.$=ye[Te-4],lt.addVertex(ye[Te-2],void 0,void 0,ye[Te]);break;case 122:this.$=ye[Te-4],lt.updateLink([ye[Te-2]],ye[Te]);break;case 123:this.$=ye[Te-4],lt.updateLink(ye[Te-2],ye[Te]);break;case 124:this.$=ye[Te-8],lt.updateLinkInterpolate([ye[Te-6]],ye[Te-2]),lt.updateLink([ye[Te-6]],ye[Te]);break;case 125:this.$=ye[Te-8],lt.updateLinkInterpolate(ye[Te-6],ye[Te-2]),lt.updateLink(ye[Te-6],ye[Te]);break;case 126:this.$=ye[Te-6],lt.updateLinkInterpolate([ye[Te-4]],ye[Te]);break;case 127:this.$=ye[Te-6],lt.updateLinkInterpolate(ye[Te-4],ye[Te]);break;case 128:case 130:this.$=[ye[Te]];break;case 129:case 131:ye[Te-2].push(ye[Te]),this.$=ye[Te-2];break;case 133:this.$=ye[Te-1]+ye[Te];break;case 181:this.$=ye[Te];break;case 182:this.$=ye[Te-1]+""+ye[Te];break;case 184:this.$=ye[Te-1]+""+ye[Te];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:n},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:r,12:n},{4:8,9:e,10:r,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:F,15:53,18:56},t(P,[2,3]),t(P,[2,4]),t(P,[2,5]),t(P,[2,6]),t(P,[2,7]),t(P,[2,8]),{8:z,9:$,11:H,21:58,41:59,72:63,75:[1,64],77:[1,66],78:[1,65]},{8:z,9:$,11:H,21:67},{8:z,9:$,11:H,21:68},{8:z,9:$,11:H,21:69},{8:z,9:$,11:H,21:70},{8:z,9:$,11:H,21:71},{8:z,9:$,10:[1,72],11:H,21:73},t(P,[2,36]),{35:[1,74]},{37:[1,75]},t(P,[2,39]),t(Q,[2,50],{18:76,39:77,10:F,40:j}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{14:ie,44:ne,60:le,80:[1,86],89:he,95:[1,83],97:[1,84],101:85,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},t(P,[2,185]),t(P,[2,186]),t(P,[2,187]),t(P,[2,188]),t(Se,[2,51]),t(Se,[2,54],{46:[1,99]}),t(ce,[2,72],{113:112,29:[1,100],44:g,48:[1,101],50:[1,102],52:[1,103],54:[1,104],56:[1,105],58:[1,106],60:y,63:[1,107],65:[1,108],67:[1,109],68:[1,110],70:[1,111],89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),t(ae,[2,181]),t(ae,[2,142]),t(ae,[2,143]),t(ae,[2,144]),t(ae,[2,145]),t(ae,[2,146]),t(ae,[2,147]),t(ae,[2,148]),t(ae,[2,149]),t(ae,[2,150]),t(ae,[2,151]),t(ae,[2,152]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,113]},t(Oe,[2,26],{18:114,10:F}),t(P,[2,27]),{42:115,43:38,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(P,[2,40]),t(P,[2,41]),t(P,[2,42]),t(ge,[2,76],{73:116,62:[1,118],74:[1,117]}),{76:119,79:120,80:ze,81:He,116:$e,119:Re},{75:[1,125],77:[1,126]},t(Ie,[2,83]),t(P,[2,28]),t(P,[2,29]),t(P,[2,30]),t(P,[2,31]),t(P,[2,32]),{10:be,12:W,14:de,27:re,28:127,32:oe,44:V,60:xe,75:q,80:[1,129],81:[1,130],83:140,84:pe,85:ve,86:Pe,87:_e,88:we,89:Ve,90:De,91:128,105:qe,109:at,111:Rt,114:st,115:Ue,116:ct},t(We,a,{5:153}),t(P,[2,37]),t(P,[2,38]),t(Q,[2,48],{44:ot}),t(Q,[2,49],{18:155,10:F,40:Yt}),t(Se,[2,44]),{44:g,47:157,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{102:[1,158],103:159,105:[1,160]},{44:g,47:161,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{44:g,47:162,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,107],{10:[1,163],96:[1,164]}),{80:[1,165]},t(bt,[2,115],{120:167,10:[1,166],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,117],{10:[1,168]}),t(Mt,[2,183]),t(Mt,[2,170]),t(Mt,[2,171]),t(Mt,[2,172]),t(Mt,[2,173]),t(Mt,[2,174]),t(Mt,[2,175]),t(Mt,[2,176]),t(Mt,[2,177]),t(Mt,[2,178]),t(Mt,[2,179]),t(Mt,[2,180]),{44:g,47:169,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{30:170,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:178,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:180,50:[1,179],67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:181,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:182,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:183,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{109:[1,184]},{30:185,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:186,65:[1,187],67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:188,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:189,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:190,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(ae,[2,182]),t(i,[2,20]),t(Oe,[2,25]),t(Q,[2,46],{39:191,18:192,10:F,40:j}),t(ge,[2,73],{10:[1,193]}),{10:[1,194]},{30:195,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{77:[1,196],79:197,116:$e,119:Re},t(dn,[2,79]),t(dn,[2,81]),t(dn,[2,82]),t(dn,[2,168]),t(dn,[2,169]),{76:198,79:120,80:ze,81:He,116:$e,119:Re},t(Ie,[2,84]),{8:z,9:$,10:be,11:H,12:W,14:de,21:200,27:re,29:[1,199],32:oe,44:V,60:xe,75:q,83:140,84:pe,85:ve,86:Pe,87:_e,88:we,89:Ve,90:De,91:201,105:qe,109:at,111:Rt,114:st,115:Ue,116:ct},t(Tt,[2,101]),t(Tt,[2,103]),t(Tt,[2,104]),t(Tt,[2,157]),t(Tt,[2,158]),t(Tt,[2,159]),t(Tt,[2,160]),t(Tt,[2,161]),t(Tt,[2,162]),t(Tt,[2,163]),t(Tt,[2,164]),t(Tt,[2,165]),t(Tt,[2,166]),t(Tt,[2,167]),t(Tt,[2,90]),t(Tt,[2,91]),t(Tt,[2,92]),t(Tt,[2,93]),t(Tt,[2,94]),t(Tt,[2,95]),t(Tt,[2,96]),t(Tt,[2,97]),t(Tt,[2,98]),t(Tt,[2,99]),t(Tt,[2,100]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,202],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},{10:F,18:203},{44:[1,204]},t(Se,[2,43]),{10:[1,205],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{10:[1,206]},{10:[1,207],106:[1,208]},t(On,[2,128]),{10:[1,209],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{10:[1,210],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{80:[1,211]},t(bt,[2,109],{10:[1,212]}),t(bt,[2,111],{10:[1,213]}),{80:[1,214]},t(Mt,[2,184]),{80:[1,215],98:[1,216]},t(Se,[2,55],{113:112,44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),{31:[1,217],67:xt,82:218,116:ft,117:yt,118:nt},t(tn,[2,86]),t(tn,[2,88]),t(tn,[2,89]),t(tn,[2,153]),t(tn,[2,154]),t(tn,[2,155]),t(tn,[2,156]),{49:[1,219],67:xt,82:218,116:ft,117:yt,118:nt},{30:220,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{51:[1,221],67:xt,82:218,116:ft,117:yt,118:nt},{53:[1,222],67:xt,82:218,116:ft,117:yt,118:nt},{55:[1,223],67:xt,82:218,116:ft,117:yt,118:nt},{57:[1,224],67:xt,82:218,116:ft,117:yt,118:nt},{60:[1,225]},{64:[1,226],67:xt,82:218,116:ft,117:yt,118:nt},{66:[1,227],67:xt,82:218,116:ft,117:yt,118:nt},{30:228,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{31:[1,229],67:xt,82:218,116:ft,117:yt,118:nt},{67:xt,69:[1,230],71:[1,231],82:218,116:ft,117:yt,118:nt},{67:xt,69:[1,233],71:[1,232],82:218,116:ft,117:yt,118:nt},t(Q,[2,45],{18:155,10:F,40:Yt}),t(Q,[2,47],{44:ot}),t(ge,[2,75]),t(ge,[2,74]),{62:[1,234],67:xt,82:218,116:ft,117:yt,118:nt},t(ge,[2,77]),t(dn,[2,80]),{77:[1,235],79:197,116:$e,119:Re},{30:236,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(We,a,{5:237}),t(Tt,[2,102]),t(P,[2,35]),{43:238,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{10:F,18:239},{10:_r,60:Dr,84:Pn,92:240,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:251,104:[1,252],105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:253,104:[1,254],105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{105:[1,255]},{10:_r,60:Dr,84:Pn,92:256,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{44:g,47:257,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,108]),{80:[1,258]},{80:[1,259],98:[1,260]},t(bt,[2,116]),t(bt,[2,118],{10:[1,261]}),t(bt,[2,119]),t(ce,[2,56]),t(tn,[2,87]),t(ce,[2,57]),{51:[1,262],67:xt,82:218,116:ft,117:yt,118:nt},t(ce,[2,64]),t(ce,[2,59]),t(ce,[2,60]),t(ce,[2,61]),{109:[1,263]},t(ce,[2,63]),t(ce,[2,65]),{66:[1,264],67:xt,82:218,116:ft,117:yt,118:nt},t(ce,[2,67]),t(ce,[2,68]),t(ce,[2,70]),t(ce,[2,69]),t(ce,[2,71]),t([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),t(ge,[2,78]),{31:[1,265],67:xt,82:218,116:ft,117:yt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,266],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},t(Se,[2,53]),{43:267,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,121],{106:rn}),t(gn,[2,130],{108:269,10:_r,60:Dr,84:Pn,105:At,109:Ce,110:tt,111:St,112:mr}),t(Zr,[2,132]),t(Zr,[2,134]),t(Zr,[2,135]),t(Zr,[2,136]),t(Zr,[2,137]),t(Zr,[2,138]),t(Zr,[2,139]),t(Zr,[2,140]),t(Zr,[2,141]),t(bt,[2,122],{106:rn}),{10:[1,270]},t(bt,[2,123],{106:rn}),{10:[1,271]},t(On,[2,129]),t(bt,[2,105],{106:rn}),t(bt,[2,106],{113:112,44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),t(bt,[2,110]),t(bt,[2,112],{10:[1,272]}),t(bt,[2,113]),{98:[1,273]},{51:[1,274]},{62:[1,275]},{66:[1,276]},{8:z,9:$,11:H,21:277},t(P,[2,34]),t(Se,[2,52]),{10:_r,60:Dr,84:Pn,105:At,107:278,108:242,109:Ce,110:tt,111:St,112:mr},t(Zr,[2,133]),{14:ie,44:ne,60:le,89:he,101:279,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},{14:ie,44:ne,60:le,89:he,101:280,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},{98:[1,281]},t(bt,[2,120]),t(ce,[2,58]),{30:282,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(ce,[2,66]),t(We,a,{5:283}),t(gn,[2,131],{108:269,10:_r,60:Dr,84:Pn,105:At,109:Ce,110:tt,111:St,112:mr}),t(bt,[2,126],{120:167,10:[1,284],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,127],{120:167,10:[1,285],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,114]),{31:[1,286],67:xt,82:218,116:ft,117:yt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,287],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},{10:_r,60:Dr,84:Pn,92:288,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:289,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},t(ce,[2,62]),t(P,[2,33]),t(bt,[2,124],{106:rn}),t(bt,[2,125],{106:rn})],defaultActions:{},parseError:o(function(et,mt){if(mt.recoverable)this.trace(et);else{var Kt=new Error(et);throw Kt.hash=mt,Kt}},"parseError"),parse:o(function(et){var mt=this,Kt=[0],lt=[],Cn=[null],ye=[],Vf=this.table,Te="",wi=0,TF=0,kF=0,M2e=2,EF=1,I2e=ye.slice.call(arguments,1),Xi=Object.create(this.lexer),Uf={yy:{}};for(var xC in this.yy)Object.prototype.hasOwnProperty.call(this.yy,xC)&&(Uf.yy[xC]=this.yy[xC]);Xi.setInput(et,Uf.yy),Uf.yy.lexer=Xi,Uf.yy.parser=this,typeof Xi.yylloc>"u"&&(Xi.yylloc={});var bC=Xi.yylloc;ye.push(bC);var O2e=Xi.options&&Xi.options.ranges;typeof Uf.yy.parseError=="function"?this.parseError=Uf.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function wnt(Ws){Kt.length=Kt.length-2*Ws,Cn.length=Cn.length-Ws,ye.length=ye.length-Ws}o(wnt,"popStack");function P2e(){var Ws;return Ws=lt.pop()||Xi.lex()||EF,typeof Ws!="number"&&(Ws instanceof Array&&(lt=Ws,Ws=lt.pop()),Ws=mt.symbols_[Ws]||Ws),Ws}o(P2e,"lex");for(var Wa,wC,Hf,xo,Tnt,TC,Jp={},_4,Jc,SF,D4;;){if(Hf=Kt[Kt.length-1],this.defaultActions[Hf]?xo=this.defaultActions[Hf]:((Wa===null||typeof Wa>"u")&&(Wa=P2e()),xo=Vf[Hf]&&Vf[Hf][Wa]),typeof xo>"u"||!xo.length||!xo[0]){var kC="";D4=[];for(_4 in Vf[Hf])this.terminals_[_4]&&_4>M2e&&D4.push("'"+this.terminals_[_4]+"'");Xi.showPosition?kC="Parse error on line "+(wi+1)+`: | |
| 480 | +`+Xi.showPosition()+` | |
| 481 | +Expecting `+D4.join(", ")+", got '"+(this.terminals_[Wa]||Wa)+"'":kC="Parse error on line "+(wi+1)+": Unexpected "+(Wa==EF?"end of input":"'"+(this.terminals_[Wa]||Wa)+"'"),this.parseError(kC,{text:Xi.match,token:this.terminals_[Wa]||Wa,line:Xi.yylineno,loc:bC,expected:D4})}if(xo[0]instanceof Array&&xo.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Hf+", token: "+Wa);switch(xo[0]){case 1:Kt.push(Wa),Cn.push(Xi.yytext),ye.push(Xi.yylloc),Kt.push(xo[1]),Wa=null,wC?(Wa=wC,wC=null):(TF=Xi.yyleng,Te=Xi.yytext,wi=Xi.yylineno,bC=Xi.yylloc,kF>0&&kF--);break;case 2:if(Jc=this.productions_[xo[1]][1],Jp.$=Cn[Cn.length-Jc],Jp._$={first_line:ye[ye.length-(Jc||1)].first_line,last_line:ye[ye.length-1].last_line,first_column:ye[ye.length-(Jc||1)].first_column,last_column:ye[ye.length-1].last_column},O2e&&(Jp._$.range=[ye[ye.length-(Jc||1)].range[0],ye[ye.length-1].range[1]]),TC=this.performAction.apply(Jp,[Te,TF,wi,Uf.yy,xo[1],Cn,ye].concat(I2e)),typeof TC<"u")return TC;Jc&&(Kt=Kt.slice(0,-1*Jc*2),Cn=Cn.slice(0,-1*Jc),ye=ye.slice(0,-1*Jc)),Kt.push(this.productions_[xo[1]][0]),Cn.push(Jp.$),ye.push(Jp._$),SF=Vf[Kt[Kt.length-2]][Kt[Kt.length-1]],Kt.push(SF);break;case 3:return!0}}return!0},"parse")},Zn=function(){var Hr={EOF:1,parseError:o(function(mt,Kt){if(this.yy.parser)this.yy.parser.parseError(mt,Kt);else throw new Error(mt)},"parseError"),setInput:o(function(et,mt){return this.yy=mt||this.yy||{},this._input=et,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var et=this._input[0];this.yytext+=et,this.yyleng++,this.offset++,this.match+=et,this.matched+=et;var mt=et.match(/(?:\r\n?|\n).*/g);return mt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),et},"input"),unput:o(function(et){var mt=et.length,Kt=et.split(/(?:\r\n?|\n)/g);this._input=et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-mt),this.offset-=mt;var lt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Kt.length-1&&(this.yylineno-=Kt.length-1);var Cn=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Kt?(Kt.length===lt.length?this.yylloc.first_column:0)+lt[lt.length-Kt.length].length-Kt[0].length:this.yylloc.first_column-mt},this.options.ranges&&(this.yylloc.range=[Cn[0],Cn[0]+this.yyleng-mt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 482 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(et){this.unput(this.match.slice(et))},"less"),pastInput:o(function(){var et=this.matched.substr(0,this.matched.length-this.match.length);return(et.length>20?"...":"")+et.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var et=this.match;return et.length<20&&(et+=this._input.substr(0,20-et.length)),(et.substr(0,20)+(et.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var et=this.pastInput(),mt=new Array(et.length+1).join("-");return et+this.upcomingInput()+` | |
| 483 | +`+mt+"^"},"showPosition"),test_match:o(function(et,mt){var Kt,lt,Cn;if(this.options.backtrack_lexer&&(Cn={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Cn.yylloc.range=this.yylloc.range.slice(0))),lt=et[0].match(/(?:\r\n?|\n).*/g),lt&&(this.yylineno+=lt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lt?lt[lt.length-1].length-lt[lt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+et[0].length},this.yytext+=et[0],this.match+=et[0],this.matches=et,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(et[0].length),this.matched+=et[0],Kt=this.performAction.call(this,this.yy,this,mt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Kt)return Kt;if(this._backtrack){for(var ye in Cn)this[ye]=Cn[ye];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var et,mt,Kt,lt;this._more||(this.yytext="",this.match="");for(var Cn=this._currentRules(),ye=0;ye<Cn.length;ye++)if(Kt=this._input.match(this.rules[Cn[ye]]),Kt&&(!mt||Kt[0].length>mt[0].length)){if(mt=Kt,lt=ye,this.options.backtrack_lexer){if(et=this.test_match(Kt,Cn[ye]),et!==!1)return et;if(this._backtrack){mt=!1;continue}else return!1}else if(!this.options.flex)break}return mt?(et=this.test_match(mt,Cn[lt]),et!==!1?et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 484 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var mt=this.next();return mt||this.lex()},"lex"),begin:o(function(mt){this.conditionStack.push(mt)},"begin"),popState:o(function(){var mt=this.conditionStack.length-1;return mt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(mt){return mt=this.conditionStack.length-1-Math.abs(mt||0),mt>=0?this.conditionStack[mt]:"INITIAL"},"topState"),pushState:o(function(mt){this.begin(mt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(mt,Kt,lt,Cn){var ye=Cn;switch(lt){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),Kt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let Vf=/\n\s*/g;return Kt.yytext=Kt.yytext.replace(Vf,"<br/>"),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 17:this.popState();break;case 18:return 96;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 88;case 35:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 98;case 41:return 98;case 42:return 98;case 43:return 98;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 78;case 60:return 105;case 61:return 111;case 62:return 46;case 63:return 60;case 64:return 44;case 65:return 8;case 66:return 106;case 67:return 115;case 68:return this.popState(),77;break;case 69:return this.pushState("edgeText"),75;break;case 70:return 119;case 71:return this.popState(),77;break;case 72:return this.pushState("thickEdgeText"),75;break;case 73:return 119;case 74:return this.popState(),77;break;case 75:return this.pushState("dottedEdgeText"),75;break;case 76:return 119;case 77:return 77;case 78:return this.popState(),53;break;case 79:return"TEXT";case 80:return this.pushState("ellipseText"),52;break;case 81:return this.popState(),55;break;case 82:return this.pushState("text"),54;break;case 83:return this.popState(),57;break;case 84:return this.pushState("text"),56;break;case 85:return 58;case 86:return this.pushState("text"),67;break;case 87:return this.popState(),64;break;case 88:return this.pushState("text"),63;break;case 89:return this.popState(),49;break;case 90:return this.pushState("text"),48;break;case 91:return this.popState(),69;break;case 92:return this.popState(),71;break;case 93:return 117;case 94:return this.pushState("trapText"),68;break;case 95:return this.pushState("trapText"),70;break;case 96:return 118;case 97:return 67;case 98:return 90;case 99:return"SEP";case 100:return 89;case 101:return 115;case 102:return 111;case 103:return 44;case 104:return 109;case 105:return 114;case 106:return 116;case 107:return this.popState(),62;break;case 108:return this.pushState("text"),62;break;case 109:return this.popState(),51;break;case 110:return this.pushState("text"),50;break;case 111:return this.popState(),31;break;case 112:return this.pushState("text"),29;break;case 113:return this.popState(),66;break;case 114:return this.pushState("text"),65;break;case 115:return"TEXT";case 116:return"QUOTE";case 117:return 9;case 118:return 10;case 119:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeData:{rules:[8,11,12,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackargs:{rules:[17,18,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackname:{rules:[14,15,16,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},href:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},click:{rules:[21,24,33,34,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dottedEdgeText:{rules:[21,24,74,76,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},thickEdgeText:{rules:[21,24,71,73,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},edgeText:{rules:[21,24,68,70,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},trapText:{rules:[21,24,77,80,82,84,88,90,91,92,93,94,95,108,110,112,114],inclusive:!1},ellipseText:{rules:[21,24,77,78,79,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},text:{rules:[21,24,77,80,81,82,83,84,87,88,89,90,94,95,107,108,109,110,111,112,113,114,115],inclusive:!1},vertex:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr:{rules:[3,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_title:{rules:[1,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},md_string:{rules:[19,20,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},string:{rules:[21,22,23,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,74,75,77,80,82,84,85,86,88,90,94,95,96,97,98,99,100,101,102,103,104,105,106,108,110,112,114,116,117,118,119],inclusive:!0}}};return Hr}();Ni.lexer=Zn;function Sn(){this.yy={}}return o(Sn,"Parser"),Sn.prototype=Ni,Ni.Parser=Sn,new Sn}();xR.parser=xR;bR=xR});var Uie,Hie,Wie=N(()=>{"use strict";Vie();Uie=Object.assign({},bR);Uie.parse=t=>{let e=t.replace(/}\s*\n/g,`} | |
| 485 | +`);return bR.parse(e)};Hie=Uie});var gOe,yOe,qie,Yie=N(()=>{"use strict";Ys();gOe=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),yOe=o(t=>`.label { | |
| 486 | + font-family: ${t.fontFamily}; | |
| 487 | + color: ${t.nodeTextColor||t.textColor}; | |
| 488 | + } | |
| 489 | + .cluster-label text { | |
| 490 | + fill: ${t.titleColor}; | |
| 491 | + } | |
| 492 | + .cluster-label span { | |
| 493 | + color: ${t.titleColor}; | |
| 494 | + } | |
| 495 | + .cluster-label span p { | |
| 496 | + background-color: transparent; | |
| 497 | + } | |
| 498 | + | |
| 499 | + .label text,span { | |
| 500 | + fill: ${t.nodeTextColor||t.textColor}; | |
| 501 | + color: ${t.nodeTextColor||t.textColor}; | |
| 502 | + } | |
| 503 | + | |
| 504 | + .node rect, | |
| 505 | + .node circle, | |
| 506 | + .node ellipse, | |
| 507 | + .node polygon, | |
| 508 | + .node path { | |
| 509 | + fill: ${t.mainBkg}; | |
| 510 | + stroke: ${t.nodeBorder}; | |
| 511 | + stroke-width: 1px; | |
| 512 | + } | |
| 513 | + .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { | |
| 514 | + text-anchor: middle; | |
| 515 | + } | |
| 516 | + // .flowchart-label .text-outer-tspan { | |
| 517 | + // text-anchor: middle; | |
| 518 | + // } | |
| 519 | + // .flowchart-label .text-inner-tspan { | |
| 520 | + // text-anchor: start; | |
| 521 | + // } | |
| 522 | + | |
| 523 | + .node .katex path { | |
| 524 | + fill: #000; | |
| 525 | + stroke: #000; | |
| 526 | + stroke-width: 1px; | |
| 527 | + } | |
| 528 | + | |
| 529 | + .rough-node .label,.node .label, .image-shape .label, .icon-shape .label { | |
| 530 | + text-align: center; | |
| 531 | + } | |
| 532 | + .node.clickable { | |
| 533 | + cursor: pointer; | |
| 534 | + } | |
| 535 | + | |
| 536 | + | |
| 537 | + .root .anchor path { | |
| 538 | + fill: ${t.lineColor} !important; | |
| 539 | + stroke-width: 0; | |
| 540 | + stroke: ${t.lineColor}; | |
| 541 | + } | |
| 542 | + | |
| 543 | + .arrowheadPath { | |
| 544 | + fill: ${t.arrowheadColor}; | |
| 545 | + } | |
| 546 | + | |
| 547 | + .edgePath .path { | |
| 548 | + stroke: ${t.lineColor}; | |
| 549 | + stroke-width: 2.0px; | |
| 550 | + } | |
| 551 | + | |
| 552 | + .flowchart-link { | |
| 553 | + stroke: ${t.lineColor}; | |
| 554 | + fill: none; | |
| 555 | + } | |
| 556 | + | |
| 557 | + .edgeLabel { | |
| 558 | + background-color: ${t.edgeLabelBackground}; | |
| 559 | + p { | |
| 560 | + background-color: ${t.edgeLabelBackground}; | |
| 561 | + } | |
| 562 | + rect { | |
| 563 | + opacity: 0.5; | |
| 564 | + background-color: ${t.edgeLabelBackground}; | |
| 565 | + fill: ${t.edgeLabelBackground}; | |
| 566 | + } | |
| 567 | + text-align: center; | |
| 568 | + } | |
| 569 | + | |
| 570 | + /* For html labels only */ | |
| 571 | + .labelBkg { | |
| 572 | + background-color: ${gOe(t.edgeLabelBackground,.5)}; | |
| 573 | + // background-color: | |
| 574 | + } | |
| 575 | + | |
| 576 | + .cluster rect { | |
| 577 | + fill: ${t.clusterBkg}; | |
| 578 | + stroke: ${t.clusterBorder}; | |
| 579 | + stroke-width: 1px; | |
| 580 | + } | |
| 581 | + | |
| 582 | + .cluster text { | |
| 583 | + fill: ${t.titleColor}; | |
| 584 | + } | |
| 585 | + | |
| 586 | + .cluster span { | |
| 587 | + color: ${t.titleColor}; | |
| 588 | + } | |
| 589 | + /* .cluster div { | |
| 590 | + color: ${t.titleColor}; | |
| 591 | + } */ | |
| 592 | + | |
| 593 | + div.mermaidTooltip { | |
| 594 | + position: absolute; | |
| 595 | + text-align: center; | |
| 596 | + max-width: 200px; | |
| 597 | + padding: 2px; | |
| 598 | + font-family: ${t.fontFamily}; | |
| 599 | + font-size: 12px; | |
| 600 | + background: ${t.tertiaryColor}; | |
| 601 | + border: 1px solid ${t.border2}; | |
| 602 | + border-radius: 2px; | |
| 603 | + pointer-events: none; | |
| 604 | + z-index: 100; | |
| 605 | + } | |
| 606 | + | |
| 607 | + .flowchartTitleText { | |
| 608 | + text-anchor: middle; | |
| 609 | + font-size: 18px; | |
| 610 | + fill: ${t.textColor}; | |
| 611 | + } | |
| 612 | + | |
| 613 | + rect.text { | |
| 614 | + fill: none; | |
| 615 | + stroke-width: 0; | |
| 616 | + } | |
| 617 | + | |
| 618 | + .icon-shape, .image-shape { | |
| 619 | + background-color: ${t.edgeLabelBackground}; | |
| 620 | + p { | |
| 621 | + background-color: ${t.edgeLabelBackground}; | |
| 622 | + padding: 2px; | |
| 623 | + } | |
| 624 | + rect { | |
| 625 | + opacity: 0.5; | |
| 626 | + background-color: ${t.edgeLabelBackground}; | |
| 627 | + fill: ${t.edgeLabelBackground}; | |
| 628 | + } | |
| 629 | + text-align: center; | |
| 630 | + } | |
| 631 | +`,"getStyles"),qie=yOe});var ik={};hr(ik,{diagram:()=>vOe});var vOe,ak=N(()=>{"use strict";zt();qZ();Gie();Wie();Yie();vOe={parser:Hie,get db(){return new Uw},renderer:zie,styles:qie,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&Yy({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Yy({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}})},"init")}});var wR,Zie,Jie=N(()=>{"use strict";wR=function(){var t=o(function(J,se,ue,Z){for(ue=ue||{},Z=J.length;Z--;ue[J[Z]]=se);return ue},"o"),e=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,50],r=[1,10],n=[1,11],i=[1,12],a=[1,13],s=[1,20],l=[1,21],u=[1,22],h=[1,23],f=[1,24],d=[1,19],p=[1,25],m=[1,26],g=[1,18],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],C=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,50,63,64,65,66,67],T=[1,42],E=[1,43],A=[1,52],S=[40,50,68,69],_=[1,63],I=[1,61],D=[1,58],k=[1,62],L=[1,64],R=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,63,64,65,66,67],O=[63,64,65,66,67],M=[1,81],B=[1,80],F=[1,78],P=[1,79],z=[6,10,42,47],$=[6,10,13,41,42,47,48,49],H=[1,89],Q=[1,88],j=[1,87],ie=[19,56],ne=[1,98],le=[1,97],he=[19,56,58,60],K={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,attribute:51,attributeType:52,attributeName:53,attributeKeyTypeList:54,attributeComment:55,ATTRIBUTE_WORD:56,attributeKeyType:57,",":58,ATTRIBUTE_KEY:59,COMMENT:60,cardinality:61,relType:62,ZERO_OR_ONE:63,ZERO_OR_MORE:64,ONE_OR_MORE:65,ONLY_ONE:66,MD_PARENT:67,NON_IDENTIFYING:68,IDENTIFYING:69,WORD:70,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",56:"ATTRIBUTE_WORD",58:",",59:"ATTRIBUTE_KEY",60:"COMMENT",63:"ZERO_OR_ONE",64:"ZERO_OR_MORE",65:"ONE_OR_MORE",66:"ONLY_ONE",67:"MD_PARENT",68:"NON_IDENTIFYING",69:"IDENTIFYING",70:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[18,1],[18,2],[51,2],[51,3],[51,3],[51,4],[52,1],[53,1],[54,1],[54,3],[57,1],[55,1],[12,3],[61,1],[61,1],[61,1],[61,1],[61,1],[62,1],[62,1],[14,1],[14,1],[14,1]],performAction:o(function(se,ue,Z,Se,ce,ae,Oe){var ge=ae.length-1;switch(ce){case 1:break;case 2:this.$=[];break;case 3:ae[ge-1].push(ae[ge]),this.$=ae[ge-1];break;case 4:case 5:this.$=ae[ge];break;case 6:case 7:this.$=[];break;case 8:Se.addEntity(ae[ge-4]),Se.addEntity(ae[ge-2]),Se.addRelationship(ae[ge-4],ae[ge],ae[ge-2],ae[ge-3]);break;case 9:Se.addEntity(ae[ge-8]),Se.addEntity(ae[ge-4]),Se.addRelationship(ae[ge-8],ae[ge],ae[ge-4],ae[ge-5]),Se.setClass([ae[ge-8]],ae[ge-6]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 10:Se.addEntity(ae[ge-6]),Se.addEntity(ae[ge-2]),Se.addRelationship(ae[ge-6],ae[ge],ae[ge-2],ae[ge-3]),Se.setClass([ae[ge-6]],ae[ge-4]);break;case 11:Se.addEntity(ae[ge-6]),Se.addEntity(ae[ge-4]),Se.addRelationship(ae[ge-6],ae[ge],ae[ge-4],ae[ge-5]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 12:Se.addEntity(ae[ge-3]),Se.addAttributes(ae[ge-3],ae[ge-1]);break;case 13:Se.addEntity(ae[ge-5]),Se.addAttributes(ae[ge-5],ae[ge-1]),Se.setClass([ae[ge-5]],ae[ge-3]);break;case 14:Se.addEntity(ae[ge-2]);break;case 15:Se.addEntity(ae[ge-4]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 16:Se.addEntity(ae[ge]);break;case 17:Se.addEntity(ae[ge-2]),Se.setClass([ae[ge-2]],ae[ge]);break;case 18:Se.addEntity(ae[ge-6],ae[ge-4]),Se.addAttributes(ae[ge-6],ae[ge-1]);break;case 19:Se.addEntity(ae[ge-8],ae[ge-6]),Se.addAttributes(ae[ge-8],ae[ge-1]),Se.setClass([ae[ge-8]],ae[ge-3]);break;case 20:Se.addEntity(ae[ge-5],ae[ge-3]);break;case 21:Se.addEntity(ae[ge-7],ae[ge-5]),Se.setClass([ae[ge-7]],ae[ge-2]);break;case 22:Se.addEntity(ae[ge-3],ae[ge-1]);break;case 23:Se.addEntity(ae[ge-5],ae[ge-3]),Se.setClass([ae[ge-5]],ae[ge]);break;case 24:case 25:this.$=ae[ge].trim(),Se.setAccTitle(this.$);break;case 26:case 27:this.$=ae[ge].trim(),Se.setAccDescription(this.$);break;case 32:Se.setDirection("TB");break;case 33:Se.setDirection("BT");break;case 34:Se.setDirection("RL");break;case 35:Se.setDirection("LR");break;case 36:this.$=ae[ge-3],Se.addClass(ae[ge-2],ae[ge-1]);break;case 37:case 38:case 56:case 64:this.$=[ae[ge]];break;case 39:case 40:this.$=ae[ge-2].concat([ae[ge]]);break;case 41:this.$=ae[ge-2],Se.setClass(ae[ge-1],ae[ge]);break;case 42:this.$=ae[ge-3],Se.addCssStyles(ae[ge-2],ae[ge-1]);break;case 43:this.$=[ae[ge]];break;case 44:ae[ge-2].push(ae[ge]),this.$=ae[ge-2];break;case 46:this.$=ae[ge-1]+ae[ge];break;case 54:case 76:case 77:this.$=ae[ge].replace(/"/g,"");break;case 55:case 78:this.$=ae[ge];break;case 57:ae[ge].push(ae[ge-1]),this.$=ae[ge];break;case 58:this.$={type:ae[ge-1],name:ae[ge]};break;case 59:this.$={type:ae[ge-2],name:ae[ge-1],keys:ae[ge]};break;case 60:this.$={type:ae[ge-2],name:ae[ge-1],comment:ae[ge]};break;case 61:this.$={type:ae[ge-3],name:ae[ge-2],keys:ae[ge-1],comment:ae[ge]};break;case 62:case 63:case 66:this.$=ae[ge];break;case 65:ae[ge-2].push(ae[ge]),this.$=ae[ge-2];break;case 67:this.$=ae[ge].replace(/"/g,"");break;case 68:this.$={cardA:ae[ge],relType:ae[ge-1],cardB:ae[ge-2]};break;case 69:this.$=Se.Cardinality.ZERO_OR_ONE;break;case 70:this.$=Se.Cardinality.ZERO_OR_MORE;break;case 71:this.$=Se.Cardinality.ONE_OR_MORE;break;case 72:this.$=Se.Cardinality.ONLY_ONE;break;case 73:this.$=Se.Cardinality.MD_PARENT;break;case 74:this.$=Se.Identification.NON_IDENTIFYING;break;case 75:this.$=Se.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:27,11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,5]),t(e,[2,6]),t(e,[2,16],{12:28,61:32,15:[1,29],17:[1,30],20:[1,31],63:y,64:v,65:x,66:b,67:w}),{23:[1,38]},{25:[1,39]},{27:[1,40]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),t(e,[2,30]),t(e,[2,31]),t(C,[2,54]),t(C,[2,55]),t(e,[2,32]),t(e,[2,33]),t(e,[2,34]),t(e,[2,35]),{16:41,40:T,41:E},{16:44,40:T,41:E},{16:45,40:T,41:E},t(e,[2,4]),{11:46,40:d,50:g},{16:47,40:T,41:E},{18:48,19:[1,49],51:50,52:51,56:A},{11:53,40:d,50:g},{62:54,68:[1,55],69:[1,56]},t(S,[2,69]),t(S,[2,70]),t(S,[2,71]),t(S,[2,72]),t(S,[2,73]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),{13:_,38:57,41:I,42:D,45:59,46:60,48:k,49:L},t(R,[2,37]),t(R,[2,38]),{16:65,40:T,41:E,42:D},{13:_,38:66,41:I,42:D,45:59,46:60,48:k,49:L},{13:[1,67],15:[1,68]},t(e,[2,17],{61:32,12:69,17:[1,70],42:D,63:y,64:v,65:x,66:b,67:w}),{19:[1,71]},t(e,[2,14]),{18:72,19:[2,56],51:50,52:51,56:A},{53:73,56:[1,74]},{56:[2,62]},{21:[1,75]},{61:76,63:y,64:v,65:x,66:b,67:w},t(O,[2,74]),t(O,[2,75]),{6:M,10:B,39:77,42:F,47:P},{40:[1,82],41:[1,83]},t(z,[2,43],{46:84,13:_,41:I,48:k,49:L}),t($,[2,45]),t($,[2,50]),t($,[2,51]),t($,[2,52]),t($,[2,53]),t(e,[2,41],{42:D}),{6:M,10:B,39:85,42:F,47:P},{14:86,40:H,50:Q,70:j},{16:90,40:T,41:E},{11:91,40:d,50:g},{18:92,19:[1,93],51:50,52:51,56:A},t(e,[2,12]),{19:[2,57]},t(ie,[2,58],{54:94,55:95,57:96,59:ne,60:le}),t([19,56,59,60],[2,63]),t(e,[2,22],{15:[1,100],17:[1,99]}),t([40,50],[2,68]),t(e,[2,36]),{13:_,41:I,45:101,46:60,48:k,49:L},t(e,[2,47]),t(e,[2,48]),t(e,[2,49]),t(R,[2,39]),t(R,[2,40]),t($,[2,46]),t(e,[2,42]),t(e,[2,8]),t(e,[2,76]),t(e,[2,77]),t(e,[2,78]),{13:[1,102],42:D},{13:[1,104],15:[1,103]},{19:[1,105]},t(e,[2,15]),t(ie,[2,59],{55:106,58:[1,107],60:le}),t(ie,[2,60]),t(he,[2,64]),t(ie,[2,67]),t(he,[2,66]),{18:108,19:[1,109],51:50,52:51,56:A},{16:110,40:T,41:E},t(z,[2,44],{46:84,13:_,41:I,48:k,49:L}),{14:111,40:H,50:Q,70:j},{16:112,40:T,41:E},{14:113,40:H,50:Q,70:j},t(e,[2,13]),t(ie,[2,61]),{57:114,59:ne},{19:[1,115]},t(e,[2,20]),t(e,[2,23],{17:[1,116],42:D}),t(e,[2,11]),{13:[1,117],42:D},t(e,[2,10]),t(he,[2,65]),t(e,[2,18]),{18:118,19:[1,119],51:50,52:51,56:A},{14:120,40:H,50:Q,70:j},{19:[1,121]},t(e,[2,21]),t(e,[2,9]),t(e,[2,19])],defaultActions:{52:[2,62],72:[2,57]},parseError:o(function(se,ue){if(ue.recoverable)this.trace(se);else{var Z=new Error(se);throw Z.hash=ue,Z}},"parseError"),parse:o(function(se){var ue=this,Z=[0],Se=[],ce=[null],ae=[],Oe=this.table,ge="",ze=0,He=0,$e=0,Re=2,Ie=1,be=ae.slice.call(arguments,1),W=Object.create(this.lexer),de={yy:{}};for(var re in this.yy)Object.prototype.hasOwnProperty.call(this.yy,re)&&(de.yy[re]=this.yy[re]);W.setInput(se,de.yy),de.yy.lexer=W,de.yy.parser=this,typeof W.yylloc>"u"&&(W.yylloc={});var oe=W.yylloc;ae.push(oe);var V=W.options&&W.options.ranges;typeof de.yy.parseError=="function"?this.parseError=de.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xe(ct){Z.length=Z.length-2*ct,ce.length=ce.length-ct,ae.length=ae.length-ct}o(xe,"popStack");function q(){var ct;return ct=Se.pop()||W.lex()||Ie,typeof ct!="number"&&(ct instanceof Array&&(Se=ct,ct=Se.pop()),ct=ue.symbols_[ct]||ct),ct}o(q,"lex");for(var pe,ve,Pe,_e,we,Ve,De={},qe,at,Rt,st;;){if(Pe=Z[Z.length-1],this.defaultActions[Pe]?_e=this.defaultActions[Pe]:((pe===null||typeof pe>"u")&&(pe=q()),_e=Oe[Pe]&&Oe[Pe][pe]),typeof _e>"u"||!_e.length||!_e[0]){var Ue="";st=[];for(qe in Oe[Pe])this.terminals_[qe]&&qe>Re&&st.push("'"+this.terminals_[qe]+"'");W.showPosition?Ue="Parse error on line "+(ze+1)+`: | |
| 632 | +`+W.showPosition()+` | |
| 633 | +Expecting `+st.join(", ")+", got '"+(this.terminals_[pe]||pe)+"'":Ue="Parse error on line "+(ze+1)+": Unexpected "+(pe==Ie?"end of input":"'"+(this.terminals_[pe]||pe)+"'"),this.parseError(Ue,{text:W.match,token:this.terminals_[pe]||pe,line:W.yylineno,loc:oe,expected:st})}if(_e[0]instanceof Array&&_e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Pe+", token: "+pe);switch(_e[0]){case 1:Z.push(pe),ce.push(W.yytext),ae.push(W.yylloc),Z.push(_e[1]),pe=null,ve?(pe=ve,ve=null):(He=W.yyleng,ge=W.yytext,ze=W.yylineno,oe=W.yylloc,$e>0&&$e--);break;case 2:if(at=this.productions_[_e[1]][1],De.$=ce[ce.length-at],De._$={first_line:ae[ae.length-(at||1)].first_line,last_line:ae[ae.length-1].last_line,first_column:ae[ae.length-(at||1)].first_column,last_column:ae[ae.length-1].last_column},V&&(De._$.range=[ae[ae.length-(at||1)].range[0],ae[ae.length-1].range[1]]),Ve=this.performAction.apply(De,[ge,He,ze,de.yy,_e[1],ce,ae].concat(be)),typeof Ve<"u")return Ve;at&&(Z=Z.slice(0,-1*at*2),ce=ce.slice(0,-1*at),ae=ae.slice(0,-1*at)),Z.push(this.productions_[_e[1]][0]),ce.push(De.$),ae.push(De._$),Rt=Oe[Z[Z.length-2]][Z[Z.length-1]],Z.push(Rt);break;case 3:return!0}}return!0},"parse")},X=function(){var J={EOF:1,parseError:o(function(ue,Z){if(this.yy.parser)this.yy.parser.parseError(ue,Z);else throw new Error(ue)},"parseError"),setInput:o(function(se,ue){return this.yy=ue||this.yy||{},this._input=se,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var se=this._input[0];this.yytext+=se,this.yyleng++,this.offset++,this.match+=se,this.matched+=se;var ue=se.match(/(?:\r\n?|\n).*/g);return ue?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),se},"input"),unput:o(function(se){var ue=se.length,Z=se.split(/(?:\r\n?|\n)/g);this._input=se+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ue),this.offset-=ue;var Se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Z.length-1&&(this.yylineno-=Z.length-1);var ce=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Z?(Z.length===Se.length?this.yylloc.first_column:0)+Se[Se.length-Z.length].length-Z[0].length:this.yylloc.first_column-ue},this.options.ranges&&(this.yylloc.range=[ce[0],ce[0]+this.yyleng-ue]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 634 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(se){this.unput(this.match.slice(se))},"less"),pastInput:o(function(){var se=this.matched.substr(0,this.matched.length-this.match.length);return(se.length>20?"...":"")+se.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var se=this.match;return se.length<20&&(se+=this._input.substr(0,20-se.length)),(se.substr(0,20)+(se.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var se=this.pastInput(),ue=new Array(se.length+1).join("-");return se+this.upcomingInput()+` | |
| 635 | +`+ue+"^"},"showPosition"),test_match:o(function(se,ue){var Z,Se,ce;if(this.options.backtrack_lexer&&(ce={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ce.yylloc.range=this.yylloc.range.slice(0))),Se=se[0].match(/(?:\r\n?|\n).*/g),Se&&(this.yylineno+=Se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Se?Se[Se.length-1].length-Se[Se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+se[0].length},this.yytext+=se[0],this.match+=se[0],this.matches=se,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(se[0].length),this.matched+=se[0],Z=this.performAction.call(this,this.yy,this,ue,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Z)return Z;if(this._backtrack){for(var ae in ce)this[ae]=ce[ae];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var se,ue,Z,Se;this._more||(this.yytext="",this.match="");for(var ce=this._currentRules(),ae=0;ae<ce.length;ae++)if(Z=this._input.match(this.rules[ce[ae]]),Z&&(!ue||Z[0].length>ue[0].length)){if(ue=Z,Se=ae,this.options.backtrack_lexer){if(se=this.test_match(Z,ce[ae]),se!==!1)return se;if(this._backtrack){ue=!1;continue}else return!1}else if(!this.options.flex)break}return ue?(se=this.test_match(ue,ce[Se]),se!==!1?se:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 636 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var ue=this.next();return ue||this.lex()},"lex"),begin:o(function(ue){this.conditionStack.push(ue)},"begin"),popState:o(function(){var ue=this.conditionStack.length-1;return ue>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(ue){return ue=this.conditionStack.length-1-Math.abs(ue||0),ue>=0?this.conditionStack[ue]:"INITIAL"},"topState"),pushState:o(function(ue){this.begin(ue)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(ue,Z,Se,ce){var ae=ce;switch(Se){case 0:return this.begin("acc_title"),24;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),26;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 33;case 8:return 34;case 9:return 35;case 10:return 36;case 11:return 10;case 12:break;case 13:return 8;case 14:return 50;case 15:return 70;case 16:return 4;case 17:return this.begin("block"),17;break;case 18:return 49;case 19:return 49;case 20:return 42;case 21:return 15;case 22:return 13;case 23:break;case 24:return 59;case 25:return 56;case 26:return 56;case 27:return 60;case 28:break;case 29:return this.popState(),19;break;case 30:return Z.yytext[0];case 31:return 20;case 32:return 21;case 33:return this.begin("style"),44;break;case 34:return this.popState(),10;break;case 35:break;case 36:return 13;case 37:return 42;case 38:return 49;case 39:return this.begin("style"),37;break;case 40:return 43;case 41:return 63;case 42:return 65;case 43:return 65;case 44:return 65;case 45:return 63;case 46:return 63;case 47:return 64;case 48:return 64;case 49:return 64;case 50:return 64;case 51:return 64;case 52:return 65;case 53:return 64;case 54:return 65;case 55:return 66;case 56:return 66;case 57:return 66;case 58:return 66;case 59:return 63;case 60:return 64;case 61:return 65;case 62:return 67;case 63:return 68;case 64:return 69;case 65:return 69;case 66:return 68;case 67:return 68;case 68:return 68;case 69:return 41;case 70:return 47;case 71:return 40;case 72:return 48;case 73:return Z.yytext[0];case 74:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:#)/i,/^(?:#)/i,/^(?:,)/i,/^(?::::)/i,/^(?::)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:([^\s]*)[~].*[~]([^\s]*))/i,/^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\u00C0-\uFFFF\*]*))/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:style\b)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?::)/i,/^(?:,)/i,/^(?:#)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:;)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:[0-9])/i,/^(?:.)/i,/^(?:$)/i],conditions:{style:{rules:[34,35,36,37,38,69,70],inclusive:!1},acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[23,24,25,26,27,28,29,30],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,31,32,33,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,71,72,73,74],inclusive:!0}}};return J}();K.lexer=X;function te(){this.yy={}}return o(te,"Parser"),te.prototype=K,K.Parser=te,new te}();wR.parser=wR;Zie=wR});var sk,eae=N(()=>{"use strict";vt();zt();mi();ir();sk=class{constructor(){this.entities=new Map;this.relationships=[];this.classes=new Map;this.direction="TB";this.Cardinality={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"};this.Identification={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"};this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().er,"getConfig");this.clear(),this.addEntity=this.addEntity.bind(this),this.addAttributes=this.addAttributes.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setDirection=this.setDirection.bind(this),this.addCssStyles=this.addCssStyles.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"ErDB")}addEntity(e,r=""){return this.entities.has(e)?!this.entities.get(e)?.alias&&r&&(this.entities.get(e).alias=r,Y.info(`Add alias '${r}' to entity '${e}'`)):(this.entities.set(e,{id:`entity-${e}-${this.entities.size}`,label:e,attributes:[],alias:r,shape:"erBox",look:me().look??"default",cssClasses:"default",cssStyles:[]}),Y.info("Added new entity :",e)),this.entities.get(e)}getEntity(e){return this.entities.get(e)}getEntities(){return this.entities}getClasses(){return this.classes}addAttributes(e,r){let n=this.addEntity(e),i;for(i=r.length-1;i>=0;i--)r[i].keys||(r[i].keys=[]),r[i].comment||(r[i].comment=""),n.attributes.push(r[i]),Y.debug("Added attribute ",r[i].name)}addRelationship(e,r,n,i){let a=this.entities.get(e),s=this.entities.get(n);if(!a||!s)return;let l={entityA:a.id,roleA:r,entityB:s.id,relSpec:i};this.relationships.push(l),Y.debug("Added new relationship :",l)}getRelationships(){return this.relationships}getDirection(){return this.direction}setDirection(e){this.direction=e}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}addCssStyles(e,r){for(let n of e){let i=this.entities.get(n);if(!r||!i)return;for(let a of r)i.cssStyles.push(a)}}addClass(e,r){e.forEach(n=>{let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)})})}setClass(e,r){for(let n of e){let i=this.entities.get(n);if(i)for(let a of r)i.cssClasses+=" "+a}}clear(){this.entities=new Map,this.classes=new Map,this.relationships=[],Ar()}getData(){let e=[],r=[],n=me();for(let a of this.entities.keys()){let s=this.entities.get(a);s&&(s.cssCompiledStyles=this.getCompiledStyles(s.cssClasses.split(" ")),e.push(s))}let i=0;for(let a of this.relationships){let s={id:$h(a.entityA,a.entityB,{prefix:"id",counter:i++}),type:"normal",curve:"basis",start:a.entityA,end:a.entityB,label:a.roleA,labelpos:"c",thickness:"normal",classes:"relationshipLine",arrowTypeStart:a.relSpec.cardB.toLowerCase(),arrowTypeEnd:a.relSpec.cardA.toLowerCase(),pattern:a.relSpec.relType=="IDENTIFYING"?"solid":"dashed",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:"TB"}}}});var TR={};hr(TR,{draw:()=>SOe});var SOe,tae=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();dr();SOe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing er diagram (unified)",e);let{securityLevel:i,er:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.config.flowchart.nodeSpacing=a?.nodeSpacing||140,l.config.flowchart.rankSpacing=a?.rankSpacing||80,l.direction=n.db.getDirection(),l.markers=["only_one","zero_or_one","one_or_more","zero_or_more"],l.diagramId=e,await Cc(l,u),l.layoutAlgorithm==="elk"&&u.select(".edges").lower();let h=u.selectAll('[id*="-background"]');Array.from(h).length>0&&h.each(function(){let d=Ge(this),m=d.attr("id").replace("-background",""),g=u.select(`#${CSS.escape(m)}`);if(!g.empty()){let y=g.attr("transform");d.attr("transform",y)}});let f=8;Gt.insertTitle(u,"erDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,f,"erDiagram",a?.useMaxWidth??!0)},"draw")});var COe,AOe,rae,nae=N(()=>{"use strict";Ys();COe=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),AOe=o(t=>` | |
| 637 | + .entityBox { | |
| 638 | + fill: ${t.mainBkg}; | |
| 639 | + stroke: ${t.nodeBorder}; | |
| 640 | + } | |
| 641 | + | |
| 642 | + .relationshipLabelBox { | |
| 643 | + fill: ${t.tertiaryColor}; | |
| 644 | + opacity: 0.7; | |
| 645 | + background-color: ${t.tertiaryColor}; | |
| 646 | + rect { | |
| 647 | + opacity: 0.5; | |
| 648 | + } | |
| 649 | + } | |
| 650 | + | |
| 651 | + .labelBkg { | |
| 652 | + background-color: ${COe(t.tertiaryColor,.5)}; | |
| 653 | + } | |
| 654 | + | |
| 655 | + .edgeLabel .label { | |
| 656 | + fill: ${t.nodeBorder}; | |
| 657 | + font-size: 14px; | |
| 658 | + } | |
| 659 | + | |
| 660 | + .label { | |
| 661 | + font-family: ${t.fontFamily}; | |
| 662 | + color: ${t.nodeTextColor||t.textColor}; | |
| 663 | + } | |
| 664 | + | |
| 665 | + .edge-pattern-dashed { | |
| 666 | + stroke-dasharray: 8,8; | |
| 667 | + } | |
| 668 | + | |
| 669 | + .node rect, | |
| 670 | + .node circle, | |
| 671 | + .node ellipse, | |
| 672 | + .node polygon | |
| 673 | + { | |
| 674 | + fill: ${t.mainBkg}; | |
| 675 | + stroke: ${t.nodeBorder}; | |
| 676 | + stroke-width: 1px; | |
| 677 | + } | |
| 678 | + | |
| 679 | + .relationshipLine { | |
| 680 | + stroke: ${t.lineColor}; | |
| 681 | + stroke-width: 1; | |
| 682 | + fill: none; | |
| 683 | + } | |
| 684 | + | |
| 685 | + .marker { | |
| 686 | + fill: none !important; | |
| 687 | + stroke: ${t.lineColor} !important; | |
| 688 | + stroke-width: 1; | |
| 689 | + } | |
| 690 | +`,"getStyles"),rae=AOe});var iae={};hr(iae,{diagram:()=>_Oe});var _Oe,aae=N(()=>{"use strict";Jie();eae();tae();nae();_Oe={parser:Zie,get db(){return new sk},renderer:TR,styles:rae}});function ii(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function va(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"}function kR(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function jd(t){return typeof t=="object"&&t!==null&&ii(t.container)&&va(t.reference)&&typeof t.message=="string"}function Ll(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function af(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function M2(t){return Ll(t)&&typeof t.fullText=="string"}var Xd,Rl=N(()=>{"use strict";o(ii,"isAstNode");o(va,"isReference");o(kR,"isAstNodeDescription");o(jd,"isLinkingError");Xd=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,r){return ii(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let n=this.subtypes[e];n||(n=this.subtypes[e]={});let i=n[r];if(i!==void 0)return i;{let a=this.computeIsSubtype(e,r);return n[r]=a,a}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let n=this.getAllTypes(),i=[];for(let a of n)this.isSubtype(a,e)&&i.push(a);return this.allSubtypes[e]=i,i}}};o(Ll,"isCompositeCstNode");o(af,"isLeafCstNode");o(M2,"isRootCstNode")});function NOe(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function ok(t){return!!t&&typeof t[Symbol.iterator]=="function"}function en(...t){if(t.length===1){let e=t[0];if(e instanceof ao)return e;if(ok(e))return new ao(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new ao(()=>({index:0}),r=>r.index<e.length?{done:!1,value:e[r.index++]}:Ia)}return t.length>1?new ao(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex<e.array.length)return{done:!1,value:e.array[e.arrIndex++]};e.array=void 0,e.arrIndex=0}if(e.collIndex<t.length){let r=t[e.collIndex++];ok(r)?e.iterator=r[Symbol.iterator]():r&&typeof r.length=="number"&&(e.array=r)}}while(e.iterator||e.array||e.collIndex<t.length);return Ia}):I2}var ao,I2,Ia,_c,zm,Ps=N(()=>{"use strict";ao=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,n=e.next();for(;!n.done;)r++,n=e.next();return r}toArray(){let e=[],r=this.iterator(),n;do n=r.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,r){let n=this.map(i=>[e?e(i):i,r?r(i):i]);return new Map(n)}toString(){return this.join()}concat(e){return new t(()=>({first:this.startFn(),firstDone:!1,iterator:e[Symbol.iterator]()}),r=>{let n;if(!r.firstDone){do if(n=this.nextFn(r.first),!n.done)return n;while(!n.done);r.firstDone=!0}do if(n=r.iterator.next(),!n.done)return n;while(!n.done);return Ia})}join(e=","){let r=this.iterator(),n="",i,a=!1;do i=r.next(),i.done||(a&&(n+=e),n+=NOe(i.value)),a=!0;while(!i.done);return n}indexOf(e,r=0){let n=this.iterator(),i=0,a=n.next();for(;!a.done;){if(i>=r&&a.value===e)return i;a=n.next(),i++}return-1}every(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(!e(n.value))return!1;n=r.next()}return!0}some(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return!0;n=r.next()}return!1}forEach(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;)e(i.value,n),i=r.next(),n++}map(e){return new t(this.startFn,r=>{let{done:n,value:i}=this.nextFn(r);return n?Ia:{done:!1,value:e(i)}})}filter(e){return new t(this.startFn,r=>{let n;do if(n=this.nextFn(r),!n.done&&e(n.value))return n;while(!n.done);return Ia})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let n=this.iterator(),i=r,a=n.next();for(;!a.done;)i===void 0?i=a.value:i=e(i,a.value),a=n.next();return i}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,n){let i=e.next();if(i.done)return n;let a=this.recursiveReduce(e,r,n);return a===void 0?i.value:r(a,i.value)}find(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return n.value;n=r.next()}}findIndex(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;){if(e(i.value))return n;i=r.next(),n++}return-1}includes(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(n.value===e)return!0;n=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:n,value:i}=this.nextFn(r.this);if(!n){let a=e(i);if(ok(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return Ia})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),n=>{do{if(n.iterator){let s=n.iterator.next();if(s.done)n.iterator=void 0;else return s}let{done:i,value:a}=r.nextFn(n.this);if(!i)if(ok(a))n.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(n.iterator);return Ia})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let n=0;n<e;n++)if(this.nextFn(r).done)return r;return r},this.nextFn)}limit(e){return new t(()=>({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?Ia:this.nextFn(r.state)))}distinct(e){return new t(()=>({set:new Set,internalState:this.startFn()}),r=>{let n;do if(n=this.nextFn(r.internalState),!n.done){let i=e?e(n.value):n.value;if(!r.set.has(i))return r.set.add(i),n}while(!n.done);return Ia})}exclude(e,r){let n=new Set;for(let i of e){let a=r?r(i):i;n.add(a)}return this.filter(i=>{let a=r?r(i):i;return!n.has(a)})}};o(NOe,"toString");o(ok,"isIterable");I2=new ao(()=>{},()=>Ia),Ia=Object.freeze({done:!0,value:void 0});o(en,"stream");_c=class extends ao{static{o(this,"TreeStreamImpl")}constructor(e,r,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(r(s.value)[Symbol.iterator]()),s}return Ia})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function n(a){return a.reduce((s,l)=>Math.min(s,l))}o(n,"min"),t.min=n;function i(a){return a.reduce((s,l)=>Math.max(s,l))}o(i,"max"),t.max=i})(zm||(zm={}))});var ck={};hr(ck,{DefaultNameRegexp:()=>lk,RangeComparison:()=>Dc,compareRange:()=>cae,findCommentNode:()=>AR,findDeclarationNodeAtOffset:()=>IOe,findLeafNodeAtOffset:()=>_R,findLeafNodeBeforeOffset:()=>uae,flattenCst:()=>MOe,getInteriorNodes:()=>BOe,getNextNode:()=>OOe,getPreviousNode:()=>fae,getStartlineNode:()=>POe,inRange:()=>CR,isChildNode:()=>SR,isCommentNode:()=>ER,streamCst:()=>Kd,toDocumentSegment:()=>Qd,tokenToRange:()=>Gm});function Kd(t){return new _c(t,e=>Ll(e)?e.content:[],{includeRoot:!0})}function MOe(t){return Kd(t).filter(af)}function SR(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function Gm(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function Qd(t){if(!t)return;let{offset:e,end:r,range:n}=t;return{range:n,offset:e,end:r,length:r-e}}function cae(t,e){if(t.end.line<e.start.line||t.end.line===e.start.line&&t.end.character<=e.start.character)return Dc.Before;if(t.start.line>e.end.line||t.start.line===e.end.line&&t.start.character>=e.end.character)return Dc.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,n=t.end.line<e.end.line||t.end.line===e.end.line&&t.end.character<=e.end.character;return r&&n?Dc.Inside:r?Dc.OverlapBack:n?Dc.OverlapFront:Dc.Outside}function CR(t,e){return cae(t,e)>Dc.After}function IOe(t,e,r=lk){if(t){if(e>0){let n=e-t.offset,i=t.text.charAt(n);r.test(i)||e--}return _R(t,e)}}function AR(t,e){if(t){let r=fae(t,!0);if(r&&ER(r,e))return r;if(M2(t)){let n=t.content.findIndex(i=>!i.hidden);for(let i=n-1;i>=0;i--){let a=t.content[i];if(ER(a,e))return a}}}}function ER(t,e){return af(t)&&e.includes(t.tokenType.name)}function _R(t,e){if(af(t))return t;if(Ll(t)){let r=hae(t,e,!1);if(r)return _R(r,e)}}function uae(t,e){if(af(t))return t;if(Ll(t)){let r=hae(t,e,!0);if(r)return uae(r,e)}}function hae(t,e,r){let n=0,i=t.content.length-1,a;for(;n<=i;){let s=Math.floor((n+i)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,n=s+1):i=s-1}return a}function fae(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t);for(;n>0;){n--;let i=r.content[n];if(e||!i.hidden)return i}t=r}}function OOe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t),i=r.content.length-1;for(;n<i;){n++;let a=r.content[n];if(e||!a.hidden)return a}t=r}}function POe(t){if(t.range.start.character===0)return t;let e=t.range.start.line,r=t,n;for(;t.container;){let i=t.container,a=n??i.content.indexOf(t);if(a===0?(t=i,n=void 0):(n=a-1,t=i.content[n]),t.range.start.line!==e)break;r=t}return r}function BOe(t,e){let r=FOe(t,e);return r?r.parent.content.slice(r.a+1,r.b):[]}function FOe(t,e){let r=lae(t),n=lae(e),i;for(let a=0;a<r.length&&a<n.length;a++){let s=r[a],l=n[a];if(s.parent===l.parent)i={parent:s.parent,a:s.index,b:l.index};else break}return i}function lae(t){let e=[];for(;t.container;){let r=t.container,n=r.content.indexOf(t);e.push({parent:r,index:n}),t=r}return e.reverse()}var Dc,lk,Nl=N(()=>{"use strict";Rl();Ps();o(Kd,"streamCst");o(MOe,"flattenCst");o(SR,"isChildNode");o(Gm,"tokenToRange");o(Qd,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside",t[t.Outside=5]="Outside"})(Dc||(Dc={}));o(cae,"compareRange");o(CR,"inRange");lk=/^[\w\p{L}]$/u;o(IOe,"findDeclarationNodeAtOffset");o(AR,"findCommentNode");o(ER,"isCommentNode");o(_R,"findLeafNodeAtOffset");o(uae,"findLeafNodeBeforeOffset");o(hae,"binarySearch");o(fae,"getPreviousNode");o(OOe,"getNextNode");o(POe,"getStartlineNode");o(BOe,"getInteriorNodes");o(FOe,"getCommonParent");o(lae,"getParentChain")});function Lc(t){throw new Error("Error! The input value was not handled.")}var Zd,uk=N(()=>{"use strict";Zd=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(Lc,"assertUnreachable")});var U2={};hr(U2,{AbstractElement:()=>Hm,AbstractRule:()=>Vm,AbstractType:()=>Um,Action:()=>cg,Alternatives:()=>ug,ArrayLiteral:()=>Wm,ArrayType:()=>qm,Assignment:()=>hg,BooleanLiteral:()=>Ym,CharacterRange:()=>fg,Condition:()=>O2,Conjunction:()=>Xm,CrossReference:()=>dg,Disjunction:()=>jm,EndOfFile:()=>pg,Grammar:()=>Km,GrammarImport:()=>B2,Group:()=>mg,InferredType:()=>Qm,Interface:()=>Zm,Keyword:()=>gg,LangiumGrammarAstReflection:()=>Cg,LangiumGrammarTerminals:()=>$Oe,NamedArgument:()=>F2,NegatedToken:()=>yg,Negation:()=>Jm,NumberLiteral:()=>eg,Parameter:()=>tg,ParameterReference:()=>rg,ParserRule:()=>ng,ReferenceType:()=>ig,RegexToken:()=>vg,ReturnType:()=>$2,RuleCall:()=>xg,SimpleType:()=>ag,StringLiteral:()=>sg,TerminalAlternatives:()=>bg,TerminalGroup:()=>wg,TerminalRule:()=>Jd,TerminalRuleCall:()=>Tg,Type:()=>og,TypeAttribute:()=>z2,TypeDefinition:()=>hk,UnionType:()=>lg,UnorderedGroup:()=>kg,UntilToken:()=>Eg,ValueLiteral:()=>P2,Wildcard:()=>Sg,isAbstractElement:()=>G2,isAbstractRule:()=>zOe,isAbstractType:()=>GOe,isAction:()=>Mu,isAlternatives:()=>mk,isArrayLiteral:()=>qOe,isArrayType:()=>DR,isAssignment:()=>Ml,isBooleanLiteral:()=>LR,isCharacterRange:()=>FR,isCondition:()=>VOe,isConjunction:()=>RR,isCrossReference:()=>ep,isDisjunction:()=>NR,isEndOfFile:()=>$R,isFeatureName:()=>UOe,isGrammar:()=>YOe,isGrammarImport:()=>XOe,isGroup:()=>sf,isInferredType:()=>fk,isInterface:()=>dk,isKeyword:()=>Ho,isNamedArgument:()=>jOe,isNegatedToken:()=>zR,isNegation:()=>MR,isNumberLiteral:()=>KOe,isParameter:()=>QOe,isParameterReference:()=>IR,isParserRule:()=>Oa,isPrimitiveType:()=>dae,isReferenceType:()=>OR,isRegexToken:()=>GR,isReturnType:()=>PR,isRuleCall:()=>Il,isSimpleType:()=>pk,isStringLiteral:()=>ZOe,isTerminalAlternatives:()=>VR,isTerminalGroup:()=>UR,isTerminalRule:()=>so,isTerminalRuleCall:()=>gk,isType:()=>V2,isTypeAttribute:()=>JOe,isTypeDefinition:()=>HOe,isUnionType:()=>BR,isUnorderedGroup:()=>yk,isUntilToken:()=>HR,isValueLiteral:()=>WOe,isWildcard:()=>WR,reflection:()=>lr});function zOe(t){return lr.isInstance(t,Vm)}function GOe(t){return lr.isInstance(t,Um)}function VOe(t){return lr.isInstance(t,O2)}function UOe(t){return dae(t)||t==="current"||t==="entry"||t==="extends"||t==="false"||t==="fragment"||t==="grammar"||t==="hidden"||t==="import"||t==="interface"||t==="returns"||t==="terminal"||t==="true"||t==="type"||t==="infer"||t==="infers"||t==="with"||typeof t=="string"&&/\^?[_a-zA-Z][\w_]*/.test(t)}function dae(t){return t==="string"||t==="number"||t==="boolean"||t==="Date"||t==="bigint"}function HOe(t){return lr.isInstance(t,hk)}function WOe(t){return lr.isInstance(t,P2)}function G2(t){return lr.isInstance(t,Hm)}function qOe(t){return lr.isInstance(t,Wm)}function DR(t){return lr.isInstance(t,qm)}function LR(t){return lr.isInstance(t,Ym)}function RR(t){return lr.isInstance(t,Xm)}function NR(t){return lr.isInstance(t,jm)}function YOe(t){return lr.isInstance(t,Km)}function XOe(t){return lr.isInstance(t,B2)}function fk(t){return lr.isInstance(t,Qm)}function dk(t){return lr.isInstance(t,Zm)}function jOe(t){return lr.isInstance(t,F2)}function MR(t){return lr.isInstance(t,Jm)}function KOe(t){return lr.isInstance(t,eg)}function QOe(t){return lr.isInstance(t,tg)}function IR(t){return lr.isInstance(t,rg)}function Oa(t){return lr.isInstance(t,ng)}function OR(t){return lr.isInstance(t,ig)}function PR(t){return lr.isInstance(t,$2)}function pk(t){return lr.isInstance(t,ag)}function ZOe(t){return lr.isInstance(t,sg)}function so(t){return lr.isInstance(t,Jd)}function V2(t){return lr.isInstance(t,og)}function JOe(t){return lr.isInstance(t,z2)}function BR(t){return lr.isInstance(t,lg)}function Mu(t){return lr.isInstance(t,cg)}function mk(t){return lr.isInstance(t,ug)}function Ml(t){return lr.isInstance(t,hg)}function FR(t){return lr.isInstance(t,fg)}function ep(t){return lr.isInstance(t,dg)}function $R(t){return lr.isInstance(t,pg)}function sf(t){return lr.isInstance(t,mg)}function Ho(t){return lr.isInstance(t,gg)}function zR(t){return lr.isInstance(t,yg)}function GR(t){return lr.isInstance(t,vg)}function Il(t){return lr.isInstance(t,xg)}function VR(t){return lr.isInstance(t,bg)}function UR(t){return lr.isInstance(t,wg)}function gk(t){return lr.isInstance(t,Tg)}function yk(t){return lr.isInstance(t,kg)}function HR(t){return lr.isInstance(t,Eg)}function WR(t){return lr.isInstance(t,Sg)}var $Oe,Vm,Um,O2,hk,P2,Hm,Wm,qm,Ym,Xm,jm,Km,B2,Qm,Zm,F2,Jm,eg,tg,rg,ng,ig,$2,ag,sg,Jd,og,z2,lg,cg,ug,hg,fg,dg,pg,mg,gg,yg,vg,xg,bg,wg,Tg,kg,Eg,Sg,Cg,lr,Rc=N(()=>{"use strict";Rl();$Oe={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},Vm="AbstractRule";o(zOe,"isAbstractRule");Um="AbstractType";o(GOe,"isAbstractType");O2="Condition";o(VOe,"isCondition");o(UOe,"isFeatureName");o(dae,"isPrimitiveType");hk="TypeDefinition";o(HOe,"isTypeDefinition");P2="ValueLiteral";o(WOe,"isValueLiteral");Hm="AbstractElement";o(G2,"isAbstractElement");Wm="ArrayLiteral";o(qOe,"isArrayLiteral");qm="ArrayType";o(DR,"isArrayType");Ym="BooleanLiteral";o(LR,"isBooleanLiteral");Xm="Conjunction";o(RR,"isConjunction");jm="Disjunction";o(NR,"isDisjunction");Km="Grammar";o(YOe,"isGrammar");B2="GrammarImport";o(XOe,"isGrammarImport");Qm="InferredType";o(fk,"isInferredType");Zm="Interface";o(dk,"isInterface");F2="NamedArgument";o(jOe,"isNamedArgument");Jm="Negation";o(MR,"isNegation");eg="NumberLiteral";o(KOe,"isNumberLiteral");tg="Parameter";o(QOe,"isParameter");rg="ParameterReference";o(IR,"isParameterReference");ng="ParserRule";o(Oa,"isParserRule");ig="ReferenceType";o(OR,"isReferenceType");$2="ReturnType";o(PR,"isReturnType");ag="SimpleType";o(pk,"isSimpleType");sg="StringLiteral";o(ZOe,"isStringLiteral");Jd="TerminalRule";o(so,"isTerminalRule");og="Type";o(V2,"isType");z2="TypeAttribute";o(JOe,"isTypeAttribute");lg="UnionType";o(BR,"isUnionType");cg="Action";o(Mu,"isAction");ug="Alternatives";o(mk,"isAlternatives");hg="Assignment";o(Ml,"isAssignment");fg="CharacterRange";o(FR,"isCharacterRange");dg="CrossReference";o(ep,"isCrossReference");pg="EndOfFile";o($R,"isEndOfFile");mg="Group";o(sf,"isGroup");gg="Keyword";o(Ho,"isKeyword");yg="NegatedToken";o(zR,"isNegatedToken");vg="RegexToken";o(GR,"isRegexToken");xg="RuleCall";o(Il,"isRuleCall");bg="TerminalAlternatives";o(VR,"isTerminalAlternatives");wg="TerminalGroup";o(UR,"isTerminalGroup");Tg="TerminalRuleCall";o(gk,"isTerminalRuleCall");kg="UnorderedGroup";o(yk,"isUnorderedGroup");Eg="UntilToken";o(HR,"isUntilToken");Sg="Wildcard";o(WR,"isWildcard");Cg=class extends Xd{static{o(this,"LangiumGrammarAstReflection")}getAllTypes(){return[Hm,Vm,Um,cg,ug,Wm,qm,hg,Ym,fg,O2,Xm,dg,jm,pg,Km,B2,mg,Qm,Zm,gg,F2,yg,Jm,eg,tg,rg,ng,ig,vg,$2,xg,ag,sg,bg,wg,Jd,Tg,og,z2,hk,lg,kg,Eg,P2,Sg]}computeIsSubtype(e,r){switch(e){case cg:case ug:case hg:case fg:case dg:case pg:case mg:case gg:case yg:case vg:case xg:case bg:case wg:case Tg:case kg:case Eg:case Sg:return this.isSubtype(Hm,r);case Wm:case eg:case sg:return this.isSubtype(P2,r);case qm:case ig:case ag:case lg:return this.isSubtype(hk,r);case Ym:return this.isSubtype(O2,r)||this.isSubtype(P2,r);case Xm:case jm:case Jm:case rg:return this.isSubtype(O2,r);case Qm:case Zm:case og:return this.isSubtype(Um,r);case ng:return this.isSubtype(Vm,r)||this.isSubtype(Um,r);case Jd:return this.isSubtype(Vm,r);default:return!1}}getReferenceType(e){let r=`${e.container.$type}:${e.property}`;switch(r){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return Um;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return Vm;case"Grammar:usedGrammars":return Km;case"NamedArgument:parameter":case"ParameterReference:parameter":return tg;case"TerminalRuleCall:rule":return Jd;default:throw new Error(`${r} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case Hm:return{name:Hm,properties:[{name:"cardinality"},{name:"lookahead"}]};case Wm:return{name:Wm,properties:[{name:"elements",defaultValue:[]}]};case qm:return{name:qm,properties:[{name:"elementType"}]};case Ym:return{name:Ym,properties:[{name:"true",defaultValue:!1}]};case Xm:return{name:Xm,properties:[{name:"left"},{name:"right"}]};case jm:return{name:jm,properties:[{name:"left"},{name:"right"}]};case Km:return{name:Km,properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case B2:return{name:B2,properties:[{name:"path"}]};case Qm:return{name:Qm,properties:[{name:"name"}]};case Zm:return{name:Zm,properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case F2:return{name:F2,properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case Jm:return{name:Jm,properties:[{name:"value"}]};case eg:return{name:eg,properties:[{name:"value"}]};case tg:return{name:tg,properties:[{name:"name"}]};case rg:return{name:rg,properties:[{name:"parameter"}]};case ng:return{name:ng,properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case ig:return{name:ig,properties:[{name:"referenceType"}]};case $2:return{name:$2,properties:[{name:"name"}]};case ag:return{name:ag,properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case sg:return{name:sg,properties:[{name:"value"}]};case Jd:return{name:Jd,properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case og:return{name:og,properties:[{name:"name"},{name:"type"}]};case z2:return{name:z2,properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case lg:return{name:lg,properties:[{name:"types",defaultValue:[]}]};case cg:return{name:cg,properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case ug:return{name:ug,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case hg:return{name:hg,properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case fg:return{name:fg,properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case dg:return{name:dg,properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case pg:return{name:pg,properties:[{name:"cardinality"},{name:"lookahead"}]};case mg:return{name:mg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case gg:return{name:gg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case yg:return{name:yg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case vg:return{name:vg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case xg:return{name:xg,properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case bg:return{name:bg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case wg:return{name:wg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Tg:return{name:Tg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case kg:return{name:kg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Eg:return{name:Eg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case Sg:return{name:Sg,properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}},lr=new Cg});var xk={};hr(xk,{assignMandatoryProperties:()=>XR,copyAstNode:()=>YR,findLocalReferences:()=>tPe,findRootNode:()=>H2,getContainerOfType:()=>tp,getDocument:()=>Pa,hasContainerOfType:()=>ePe,linkContentToContainer:()=>vk,streamAllContents:()=>Nc,streamAst:()=>Wo,streamContents:()=>W2,streamReferences:()=>Ag});function vk(t){for(let[e,r]of Object.entries(t))e.startsWith("$")||(Array.isArray(r)?r.forEach((n,i)=>{ii(n)&&(n.$container=t,n.$containerProperty=e,n.$containerIndex=i)}):ii(r)&&(r.$container=t,r.$containerProperty=e))}function tp(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function ePe(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function Pa(t){let r=H2(t).$document;if(!r)throw new Error("AST node has no document.");return r}function H2(t){for(;t.$container;)t=t.$container;return t}function W2(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new ao(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),n=>{for(;n.keyIndex<n.keys.length;){let i=n.keys[n.keyIndex];if(!i.startsWith("$")){let a=t[i];if(ii(a)){if(n.keyIndex++,qR(a,r))return{done:!1,value:a}}else if(Array.isArray(a)){for(;n.arrayIndex<a.length;){let s=n.arrayIndex++,l=a[s];if(ii(l)&&qR(l,r))return{done:!1,value:l}}n.arrayIndex=0}}n.keyIndex++}return Ia})}function Nc(t,e){if(!t)throw new Error("Root node must be an AstNode.");return new _c(t,r=>W2(r,e))}function Wo(t,e){if(t){if(e?.range&&!qR(t,e.range))return new _c(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new _c(t,r=>W2(r,e),{includeRoot:!0})}function qR(t,e){var r;if(!e)return!0;let n=(r=t.$cstNode)===null||r===void 0?void 0:r.range;return n?CR(n,e):!1}function Ag(t){return new ao(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex<e.keys.length;){let r=e.keys[e.keyIndex];if(!r.startsWith("$")){let n=t[r];if(va(n))return e.keyIndex++,{done:!1,value:{reference:n,container:t,property:r}};if(Array.isArray(n)){for(;e.arrayIndex<n.length;){let i=e.arrayIndex++,a=n[i];if(va(a))return{done:!1,value:{reference:a,container:t,property:r,index:i}}}e.arrayIndex=0}}e.keyIndex++}return Ia})}function tPe(t,e=Pa(t).parseResult.value){let r=[];return Wo(e).forEach(n=>{Ag(n).forEach(i=>{i.reference.ref===t&&r.push(i.reference)})}),en(r)}function XR(t,e){let r=t.getTypeMetaData(e.$type),n=e;for(let i of r.properties)i.defaultValue!==void 0&&n[i.name]===void 0&&(n[i.name]=pae(i.defaultValue))}function pae(t){return Array.isArray(t)?[...t.map(pae)]:t}function YR(t,e){let r={$type:t.$type};for(let[n,i]of Object.entries(t))if(!n.startsWith("$"))if(ii(i))r[n]=YR(i,e);else if(va(i))r[n]=e(r,n,i.$refNode,i.$refText);else if(Array.isArray(i)){let a=[];for(let s of i)ii(s)?a.push(YR(s,e)):va(s)?a.push(e(r,n,s.$refNode,s.$refText)):a.push(s);r[n]=a}else r[n]=i;return vk(r),r}var is=N(()=>{"use strict";Rl();Ps();Nl();o(vk,"linkContentToContainer");o(tp,"getContainerOfType");o(ePe,"hasContainerOfType");o(Pa,"getDocument");o(H2,"findRootNode");o(W2,"streamContents");o(Nc,"streamAllContents");o(Wo,"streamAst");o(qR,"isAstNodeInRange");o(Ag,"streamReferences");o(tPe,"findLocalReferences");o(XR,"assignMandatoryProperties");o(pae,"copyDefaultValue");o(YR,"copyAstNode")});function ar(t){return t.charCodeAt(0)}function bk(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function _g(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function rp(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function q2(){throw Error("Internal Error - Should never get here!")}function jR(t){return t.type==="Character"}var KR=N(()=>{"use strict";o(ar,"cc");o(bk,"insertToSet");o(_g,"addFlag");o(rp,"ASSERT_EXISTS");o(q2,"ASSERT_NEVER_REACH_HERE");o(jR,"isCharacter")});var Y2,X2,QR,mae=N(()=>{"use strict";KR();Y2=[];for(let t=ar("0");t<=ar("9");t++)Y2.push(t);X2=[ar("_")].concat(Y2);for(let t=ar("a");t<=ar("z");t++)X2.push(t);for(let t=ar("A");t<=ar("Z");t++)X2.push(t);QR=[ar(" "),ar("\f"),ar(` | |
| 691 | +`),ar("\r"),ar(" "),ar("\v"),ar(" "),ar("\xA0"),ar("\u1680"),ar("\u2000"),ar("\u2001"),ar("\u2002"),ar("\u2003"),ar("\u2004"),ar("\u2005"),ar("\u2006"),ar("\u2007"),ar("\u2008"),ar("\u2009"),ar("\u200A"),ar("\u2028"),ar("\u2029"),ar("\u202F"),ar("\u205F"),ar("\u3000"),ar("\uFEFF")]});var rPe,wk,nPe,np,gae=N(()=>{"use strict";KR();mae();rPe=/[0-9a-fA-F]/,wk=/[0-9]/,nPe=/[1-9]/,np=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let n={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":_g(n,"global");break;case"i":_g(n,"ignoreCase");break;case"m":_g(n,"multiLine");break;case"u":_g(n,"unicode");break;case"y":_g(n,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:n,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break}rp(r);let n=this.disjunction();return this.consumeChar(")"),{type:r,value:n,loc:this.loc(e)}}return q2()}quantifier(e=!1){let r,n=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:i,atMost:i};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:i,atMost:a}):r={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;rp(r);break}if(!(e===!0&&r===void 0)&&rp(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(n),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),rp(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):q2()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[ar(` | |
| 692 | +`),ar("\r"),ar("\u2028"),ar("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=Y2;break;case"D":e=Y2,r=!0;break;case"s":e=QR;break;case"S":e=QR,r=!0;break;case"w":e=X2;break;case"W":e=X2,r=!0;break}return rp(e)?{type:"Set",value:e,complement:r}:q2()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=ar("\f");break;case"n":e=ar(` | |
| 693 | +`);break;case"r":e=ar("\r");break;case"t":e=ar(" ");break;case"v":e=ar("\v");break}return rp(e)?{type:"Character",value:e}:q2()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:ar("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:ar(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` | |
| 694 | +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:ar(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let n=this.classAtom(),i=n.type==="Character";if(jR(n)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(jR(a)){if(a.value<n.value)throw Error("Range out of order in character class");e.push({from:n.value,to:a.value})}else bk(n.value,e),e.push(ar("-")),bk(a.value,e)}else bk(n.value,e)}return this.consumeChar("]"),{type:"Set",complement:r,value:e}}classAtom(){switch(this.peekChar()){case"]":case` | |
| 695 | +`:case"\r":case"\u2028":case"\u2029":throw Error("TBD");case"\\":return this.classEscape();default:return this.classPatternCharacterAtom()}}classEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"b":return this.consumeChar("b"),{type:"Character",value:ar("\b")};case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}group(){let e=!0;switch(this.consumeChar("("),this.peekChar(0)){case"?":this.consumeChar("?"),this.consumeChar(":"),e=!1;break;default:this.groupIdx++;break}let r=this.disjunction();this.consumeChar(")");let n={type:"Group",capturing:e,value:r};return e&&(n.idx=this.groupIdx),n}positiveInteger(){let e=this.popChar();if(nPe.test(e)===!1)throw Error("Expecting a positive integer");for(;wk.test(this.peekChar(0));)e+=this.popChar();return parseInt(e,10)}integerIncludingZero(){let e=this.popChar();if(wk.test(e)===!1)throw Error("Expecting an integer");for(;wk.test(this.peekChar(0));)e+=this.popChar();return parseInt(e,10)}patternCharacter(){let e=this.popChar();switch(e){case` | |
| 696 | +`:case"\r":case"\u2028":case"\u2029":case"^":case"$":case"\\":case".":case"*":case"+":case"?":case"(":case")":case"[":case"|":throw Error("TBD");default:return{type:"Character",value:ar(e)}}}isRegExpFlag(){switch(this.peekChar(0)){case"g":case"i":case"m":case"u":case"y":return!0;default:return!1}}isRangeDash(){return this.peekChar()==="-"&&this.isClassAtom(1)}isDigit(){return wk.test(this.peekChar(0))}isClassAtom(e=0){switch(this.peekChar(e)){case"]":case` | |
| 697 | +`:case"\r":case"\u2028":case"\u2029":return!1;default:return!0}}isTerm(){return this.isAtom()||this.isAssertion()}isAtom(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case".":case"\\":case"[":case"(":return!0;default:return!1}}isAssertion(){switch(this.peekChar(0)){case"^":case"$":return!0;case"\\":switch(this.peekChar(1)){case"b":case"B":return!0;default:return!1}case"(":return this.peekChar(1)==="?"&&(this.peekChar(2)==="="||this.peekChar(2)==="!");default:return!1}}isQuantifier(){let e=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(e)}}isPatternCharacter(){switch(this.peekChar()){case"^":case"$":case"\\":case".":case"*":case"+":case"?":case"(":case")":case"[":case"|":case"/":case` | |
| 698 | +`:case"\r":case"\u2028":case"\u2029":return!1;default:return!0}}parseHexDigits(e){let r="";for(let i=0;i<e;i++){let a=this.popChar();if(rPe.test(a)===!1)throw Error("Expecting a HexDecimal digits");r+=a}return{type:"Character",value:parseInt(r,16)}}peekChar(e=0){return this.input[this.idx+e]}popChar(){let e=this.peekChar(0);return this.consumeChar(void 0),e}consumeChar(e){if(e!==void 0&&this.input[this.idx]!==e)throw Error("Expected: '"+e+"' but found: '"+this.input[this.idx]+"' at offset: "+this.idx);if(this.idx>=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var Mc,yae=N(()=>{"use strict";Mc=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let n=e[r];e.hasOwnProperty(r)&&(n.type!==void 0?this.visit(n):Array.isArray(n)&&n.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var j2=N(()=>{"use strict";gae();yae()});var Tk={};hr(Tk,{NEWLINE_REGEXP:()=>JR,escapeRegExp:()=>ap,getCaseInsensitivePattern:()=>tN,getTerminalParts:()=>iPe,isMultilineComment:()=>eN,isWhitespace:()=>Dg,partialMatches:()=>rN,partialRegExp:()=>bae,whitespaceCharacters:()=>xae});function iPe(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=vae.pattern(t),r=[];for(let n of e.value.value)ip.reset(t),ip.visit(n),r.push({start:ip.startRegexp,end:ip.endRegex});return r}catch{return[]}}function eN(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),ip.reset(t),ip.visit(vae.pattern(t)),ip.multiline}catch{return!1}}function Dg(t){let e=typeof t=="string"?new RegExp(t):t;return xae.some(r=>e.test(r))}function ap(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function tN(t){return Array.prototype.map.call(t,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:ap(e)).join("")}function rN(t,e){let r=bae(t),n=e.match(r);return!!n&&n[0].length>0}function bae(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,n=0;function i(){let a="",s;function l(h){a+=r.substr(n,h),n+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(n,h)+"|$)",n+=h}for(o(u,"appendOptional");n<r.length;)switch(r[n]){case"\\":switch(r[n+1]){case"c":u(3);break;case"x":u(4);break;case"u":e.unicode?r[n+2]==="{"?u(r.indexOf("}",n)-n+1):u(6):u(2);break;case"p":case"P":e.unicode?u(r.indexOf("}",n)-n+1):u(2);break;case"k":u(r.indexOf(">",n)-n+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=n,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=n,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[n+1]==="?")switch(r[n+2]){case":":a+="(?:",n+=3,a+=i()+"|$)";break;case"=":a+="(?=",n+=3,a+=i()+")";break;case"!":s=n,n+=3,i(),a+=r.substr(s,n-s);break;case"<":switch(r[n+3]){case"=":case"!":s=n,n+=4,i(),a+=r.substr(s,n-s);break;default:l(r.indexOf(">",n)-n+1),a+=i()+"|$)";break}break}else l(1),a+=i()+"|$)";break;case")":return++n,a;default:u(1);break}return a}return o(i,"process"),new RegExp(i(),t.flags)}var JR,vae,ZR,ip,xae,Lg=N(()=>{"use strict";j2();JR=/\r?\n/gm,vae=new np,ZR=class extends Mc{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===` | |
| 699 | +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let n=ap(r);this.endRegexpStack.push(n),this.isStarting&&(this.startRegexp+=n)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),n=new RegExp(r);this.multiline=!!` | |
| 700 | +`.match(n)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},ip=new ZR;o(iPe,"getTerminalParts");o(eN,"isMultilineComment");xae=`\f | |
| 701 | +\r \v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF`.split("");o(Dg,"isWhitespace");o(ap,"escapeRegExp");o(tN,"getCaseInsensitivePattern");o(rN,"partialMatches");o(bae,"partialRegExp")});var Ek={};hr(Ek,{findAssignment:()=>hN,findNameAssignment:()=>kk,findNodeForKeyword:()=>cN,findNodeForProperty:()=>Q2,findNodesForKeyword:()=>aPe,findNodesForKeywordInternal:()=>uN,findNodesForProperty:()=>oN,getActionAtElement:()=>Sae,getActionType:()=>Aae,getAllReachableRules:()=>K2,getCrossReferenceTerminal:()=>aN,getEntryRule:()=>wae,getExplicitRuleType:()=>Rg,getHiddenRules:()=>Tae,getRuleType:()=>fN,getRuleTypeName:()=>uPe,getTypeName:()=>J2,isArrayCardinality:()=>oPe,isArrayOperator:()=>lPe,isCommentTerminal:()=>sN,isDataType:()=>cPe,isDataTypeRule:()=>Z2,isOptionalCardinality:()=>sPe,terminalRegex:()=>Ng});function wae(t){return t.rules.find(e=>Oa(e)&&e.entry)}function Tae(t){return t.rules.filter(e=>so(e)&&e.hidden)}function K2(t,e){let r=new Set,n=wae(t);if(!n)return new Set(t.rules);let i=[n].concat(Tae(t));for(let s of i)kae(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||so(s)&&s.hidden)&&a.add(s);return a}function kae(t,e,r){e.add(t.name),Nc(t).forEach(n=>{if(Il(n)||r&&gk(n)){let i=n.rule.ref;i&&!e.has(i.name)&&kae(i,e,r)}})}function aN(t){if(t.terminal)return t.terminal;if(t.type.ref){let e=kk(t.type.ref);return e?.terminal}}function sN(t){return t.hidden&&!Dg(Ng(t))}function oN(t,e){return!t||!e?[]:lN(t,e,t.astNode,!0)}function Q2(t,e,r){if(!t||!e)return;let n=lN(t,e,t.astNode,!0);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function lN(t,e,r,n){if(!n){let i=tp(t.grammarSource,Ml);if(i&&i.feature===e)return[t]}return Ll(t)&&t.astNode===r?t.content.flatMap(i=>lN(i,e,r,!1)):[]}function aPe(t,e){return t?uN(t,e,t?.astNode):[]}function cN(t,e,r){if(!t)return;let n=uN(t,e,t?.astNode);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function uN(t,e,r){if(t.astNode!==r)return[];if(Ho(t.grammarSource)&&t.grammarSource.value===e)return[t];let n=Kd(t).iterator(),i,a=[];do if(i=n.next(),!i.done){let s=i.value;s.astNode===r?Ho(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):n.prune()}while(!i.done);return a}function hN(t){var e;let r=t.astNode;for(;r===((e=t.container)===null||e===void 0?void 0:e.astNode);){let n=tp(t.grammarSource,Ml);if(n)return n;t=t.container}}function kk(t){let e=t;return fk(e)&&(Mu(e.$container)?e=e.$container.$container:Oa(e.$container)?e=e.$container:Lc(e.$container)),Eae(t,e,new Map)}function Eae(t,e,r){var n;function i(a,s){let l;return tp(a,Ml)||(l=Eae(s,s,r)),r.set(t,l),l}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let a of Nc(e)){if(Ml(a)&&a.feature.toLowerCase()==="name")return r.set(t,a),a;if(Il(a)&&Oa(a.rule.ref))return i(a,a.rule.ref);if(pk(a)&&(!((n=a.typeRef)===null||n===void 0)&&n.ref))return i(a,a.typeRef.ref)}}function Sae(t){let e=t.$container;if(sf(e)){let r=e.elements,n=r.indexOf(t);for(let i=n-1;i>=0;i--){let a=r[i];if(Mu(a))return a;{let s=Nc(r[i]).find(Mu);if(s)return s}}}if(G2(e))return Sae(e)}function sPe(t,e){return t==="?"||t==="*"||sf(e)&&!!e.guardCondition}function oPe(t){return t==="*"||t==="+"}function lPe(t){return t==="+="}function Z2(t){return Cae(t,new Set)}function Cae(t,e){if(e.has(t))return!0;e.add(t);for(let r of Nc(t))if(Il(r)){if(!r.rule.ref||Oa(r.rule.ref)&&!Cae(r.rule.ref,e))return!1}else{if(Ml(r))return!1;if(Mu(r))return!1}return!!t.definition}function cPe(t){return iN(t.type,new Set)}function iN(t,e){if(e.has(t))return!0;if(e.add(t),DR(t))return!1;if(OR(t))return!1;if(BR(t))return t.types.every(r=>iN(r,e));if(pk(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return V2(r)?iN(r.type,e):!1}else return!1}else return!1}function Rg(t){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e){if(Oa(e))return e.name;if(dk(e)||V2(e))return e.name}}}function J2(t){var e;if(Oa(t))return Z2(t)?t.name:(e=Rg(t))!==null&&e!==void 0?e:t.name;if(dk(t)||V2(t)||PR(t))return t.name;if(Mu(t)){let r=Aae(t);if(r)return r}else if(fk(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function Aae(t){var e;if(t.inferredType)return t.inferredType.name;if(!((e=t.type)===null||e===void 0)&&e.ref)return J2(t.type.ref)}function uPe(t){var e,r,n;return so(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":Z2(t)?t.name:(n=Rg(t))!==null&&n!==void 0?n:t.name}function fN(t){var e,r,n;return so(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":(n=Rg(t))!==null&&n!==void 0?n:t.name}function Ng(t){let e={s:!1,i:!1,u:!1},r=Mg(t.definition,e),n=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(r,n)}function Mg(t,e){if(VR(t))return hPe(t);if(UR(t))return fPe(t);if(FR(t))return mPe(t);if(gk(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return Iu(Mg(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead})}else{if(zR(t))return pPe(t);if(HR(t))return dPe(t);if(GR(t)){let r=t.regex.lastIndexOf("/"),n=t.regex.substring(1,r),i=t.regex.substring(r+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),Iu(n,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}else{if(WR(t))return Iu(dN,{cardinality:t.cardinality,lookahead:t.lookahead});throw new Error(`Invalid terminal element: ${t?.$type}`)}}}function hPe(t){return Iu(t.elements.map(e=>Mg(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead})}function fPe(t){return Iu(t.elements.map(e=>Mg(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead})}function dPe(t){return Iu(`${dN}*?${Mg(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead})}function pPe(t){return Iu(`(?!${Mg(t.terminal)})${dN}*?`,{cardinality:t.cardinality,lookahead:t.lookahead})}function mPe(t){return t.right?Iu(`[${nN(t.left)}-${nN(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1}):Iu(nN(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}function nN(t){return ap(t.value)}function Iu(t,e){var r;return(e.wrap!==!1||e.lookahead)&&(t=`(${(r=e.lookahead)!==null&&r!==void 0?r:""}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var dN,Ol=N(()=>{"use strict";uk();Rc();Rl();is();Nl();Lg();o(wae,"getEntryRule");o(Tae,"getHiddenRules");o(K2,"getAllReachableRules");o(kae,"ruleDfs");o(aN,"getCrossReferenceTerminal");o(sN,"isCommentTerminal");o(oN,"findNodesForProperty");o(Q2,"findNodeForProperty");o(lN,"findNodesForPropertyInternal");o(aPe,"findNodesForKeyword");o(cN,"findNodeForKeyword");o(uN,"findNodesForKeywordInternal");o(hN,"findAssignment");o(kk,"findNameAssignment");o(Eae,"findNameAssignmentInternal");o(Sae,"getActionAtElement");o(sPe,"isOptionalCardinality");o(oPe,"isArrayCardinality");o(lPe,"isArrayOperator");o(Z2,"isDataTypeRule");o(Cae,"isDataTypeRuleInternal");o(cPe,"isDataType");o(iN,"isDataTypeInternal");o(Rg,"getExplicitRuleType");o(J2,"getTypeName");o(Aae,"getActionType");o(uPe,"getRuleTypeName");o(fN,"getRuleType");o(Ng,"terminalRegex");dN=/[\s\S]/.source;o(Mg,"abstractElementToRegex");o(hPe,"terminalAlternativesToRegex");o(fPe,"terminalGroupToRegex");o(dPe,"untilTokenToRegex");o(pPe,"negateTokenToRegex");o(mPe,"characterRangeToRegex");o(nN,"keywordToRegex");o(Iu,"withCardinality")});function pN(t){let e=[],r=t.Grammar;for(let n of r.rules)so(n)&&sN(n)&&eN(Ng(n))&&e.push(n.name);return{multilineCommentRules:e,nameRegexp:lk}}var mN=N(()=>{"use strict";Nl();Ol();Lg();Rc();o(pN,"createGrammarConfig")});var gN=N(()=>{"use strict"});function Ig(t){console&&console.error&&console.error(`Error: ${t}`)}function ex(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var _ae=N(()=>{"use strict";o(Ig,"PRINT_ERROR");o(ex,"PRINT_WARNING")});function tx(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var Dae=N(()=>{"use strict";o(tx,"timer")});function rx(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function n(){return typeof r.bar}return o(n,"fakeAccess"),n(),n(),t;(0,eval)(t)}var Lae=N(()=>{"use strict";o(rx,"toFastProperties")});var Og=N(()=>{"use strict";_ae();Dae();Lae()});function gPe(t){return yPe(t)?t.LABEL:t.name}function yPe(t){return yi(t.LABEL)&&t.LABEL!==""}function Sk(t){return Je(t,Pg)}function Pg(t){function e(r){return Je(r,Pg)}if(o(e,"convertDefinition"),t instanceof on){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return yi(t.label)&&(r.label=t.label),r}else{if(t instanceof Dn)return{type:"Alternative",definition:e(t.definition)};if(t instanceof ln)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof Ln)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof Rn)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:Pg(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof wn)return{type:"RepetitionWithSeparator",idx:t.idx,separator:Pg(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Or)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof Tn)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof kr){let r={type:"Terminal",name:t.terminalType.name,label:gPe(t.terminalType),idx:t.idx};yi(t.label)&&(r.terminalLabel=t.label);let n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=zo(n)?n.source:n),r}else{if(t instanceof as)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var oo,on,as,Dn,ln,Ln,Rn,Or,wn,Tn,kr,Ck=N(()=>{"use strict";qt();o(gPe,"tokenLabel");o(yPe,"hasTokenLabel");oo=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Ae(this.definition,r=>{r.accept(e)})}},on=class extends oo{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,ma(this,Os(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},as=class extends oo{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",ma(this,Os(e,r=>r!==void 0))}},Dn=class extends oo{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,ma(this,Os(e,r=>r!==void 0))}},ln=class extends oo{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Ln=class extends oo{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Rn=class extends oo{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Or=class extends oo{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},wn=class extends oo{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Tn=class extends oo{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,ma(this,Os(e,r=>r!==void 0))}},kr=class{static{o(this,"Terminal")}constructor(e){this.idx=1,ma(this,Os(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(Sk,"serializeGrammar");o(Pg,"serializeProduction")});var ss,Rae=N(()=>{"use strict";Ck();ss=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case on:return this.visitNonTerminal(r);case Dn:return this.visitAlternative(r);case ln:return this.visitOption(r);case Ln:return this.visitRepetitionMandatory(r);case Rn:return this.visitRepetitionMandatoryWithSeparator(r);case wn:return this.visitRepetitionWithSeparator(r);case Or:return this.visitRepetition(r);case Tn:return this.visitAlternation(r);case kr:return this.visitTerminal(r);case as:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function yN(t){return t instanceof Dn||t instanceof ln||t instanceof Or||t instanceof Ln||t instanceof Rn||t instanceof wn||t instanceof kr||t instanceof as}function sp(t,e=[]){return t instanceof ln||t instanceof Or||t instanceof wn?!0:t instanceof Tn?A2(t.definition,n=>sp(n,e)):t instanceof on&&qn(e,t)?!1:t instanceof oo?(t instanceof on&&e.push(t),Ma(t.definition,n=>sp(n,e))):!1}function vN(t){return t instanceof Tn}function Bs(t){if(t instanceof on)return"SUBRULE";if(t instanceof ln)return"OPTION";if(t instanceof Tn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Rn)return"AT_LEAST_ONE_SEP";if(t instanceof wn)return"MANY_SEP";if(t instanceof Or)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}var Nae=N(()=>{"use strict";qt();Ck();o(yN,"isSequenceProd");o(sp,"isOptionalProd");o(vN,"isBranchingProd");o(Bs,"getProductionDslName")});var os=N(()=>{"use strict";Ck();Rae();Nae()});function Mae(t,e,r){return[new ln({definition:[new kr({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var Ou,Ak=N(()=>{"use strict";qt();os();Ou=class{static{o(this,"RestWalker")}walk(e,r=[]){Ae(e.definition,(n,i)=>{let a=gi(e.definition,i+1);if(n instanceof on)this.walkProdRef(n,a,r);else if(n instanceof kr)this.walkTerminal(n,a,r);else if(n instanceof Dn)this.walkFlat(n,a,r);else if(n instanceof ln)this.walkOption(n,a,r);else if(n instanceof Ln)this.walkAtLeastOne(n,a,r);else if(n instanceof Rn)this.walkAtLeastOneSep(n,a,r);else if(n instanceof wn)this.walkManySep(n,a,r);else if(n instanceof Or)this.walkMany(n,a,r);else if(n instanceof Tn)this.walkOr(n,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,n){}walkProdRef(e,r,n){}walkFlat(e,r,n){let i=r.concat(n);this.walk(e,i)}walkOption(e,r,n){let i=r.concat(n);this.walk(e,i)}walkAtLeastOne(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkAtLeastOneSep(e,r,n){let i=Mae(e,r,n);this.walk(e,i)}walkMany(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkManySep(e,r,n){let i=Mae(e,r,n);this.walk(e,i)}walkOr(e,r,n){let i=r.concat(n);Ae(e.definition,a=>{let s=new Dn({definition:[a]});this.walk(s,i)})}};o(Mae,"restForRepetitionWithSeparator")});function op(t){if(t instanceof on)return op(t.referencedRule);if(t instanceof kr)return bPe(t);if(yN(t))return vPe(t);if(vN(t))return xPe(t);throw Error("non exhaustive match")}function vPe(t){let e=[],r=t.definition,n=0,i=r.length>n,a,s=!0;for(;i&&s;)a=r[n],s=sp(a),e=e.concat(op(a)),n=n+1,i=r.length>n;return Bm(e)}function xPe(t){let e=Je(t.definition,r=>op(r));return Bm(qr(e))}function bPe(t){return[t.terminalType]}var xN=N(()=>{"use strict";qt();os();o(op,"first");o(vPe,"firstForSequence");o(xPe,"firstForBranching");o(bPe,"firstForTerminal")});var _k,bN=N(()=>{"use strict";_k="_~IN~_"});function Iae(t){let e={};return Ae(t,r=>{let n=new wN(r).startWalking();ma(e,n)}),e}function wPe(t,e){return t.name+e+_k}var wN,Oae=N(()=>{"use strict";Ak();xN();qt();bN();os();wN=class extends Ou{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,n){}walkProdRef(e,r,n){let i=wPe(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(n),s=new Dn({definition:a}),l=op(s);this.follows[i]=l}};o(Iae,"computeAllProdsFollows");o(wPe,"buildBetweenProdsFollowPrefix")});function Bg(t){let e=t.toString();if(Dk.hasOwnProperty(e))return Dk[e];{let r=TPe.pattern(e);return Dk[e]=r,r}}function Pae(){Dk={}}var Dk,TPe,Lk=N(()=>{"use strict";j2();Dk={},TPe=new np;o(Bg,"getRegExpAst");o(Pae,"clearRegExpParserCache")});function $ae(t,e=!1){try{let r=Bg(t);return TN(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===Fae)e&&ex(`${nx} Unable to optimize: < ${t.toString()} > | |
| 702 | + Complement Sets cannot be automatically optimized. | |
| 703 | + This will disable the lexer's first char optimizations. | |
| 704 | + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let n="";e&&(n=` | |
| 705 | + This will disable the lexer's first char optimizations. | |
| 706 | + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),Ig(`${nx} | |
| 707 | + Failed parsing: < ${t.toString()} > | |
| 708 | + Using the @chevrotain/regexp-to-ast library | |
| 709 | + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+n)}}return[]}function TN(t,e,r){switch(t.type){case"Disjunction":for(let i=0;i<t.value.length;i++)TN(t.value[i],e,r);break;case"Alternative":let n=t.value;for(let i=0;i<n.length;i++){let a=n[i];switch(a.type){case"EndAnchor":case"GroupBackReference":case"Lookahead":case"NegativeLookahead":case"StartAnchor":case"WordBoundary":case"NonWordBoundary":continue}let s=a;switch(s.type){case"Character":Rk(s.value,e,r);break;case"Set":if(s.complement===!0)throw Error(Fae);Ae(s.value,u=>{if(typeof u=="number")Rk(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)Rk(f,e,r);else{for(let f=h.from;f<=h.to&&f<Fg;f++)Rk(f,e,r);if(h.to>=Fg){let f=h.from>=Fg?h.from:Fg,d=h.to,p=Ic(f),m=Ic(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":TN(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&kN(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return br(e)}function Rk(t,e,r){let n=Ic(t);e[n]=n,r===!0&&kPe(t,e)}function kPe(t,e){let r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){let i=Ic(n.charCodeAt(0));e[i]=i}else{let i=r.toLowerCase();if(i!==r){let a=Ic(i.charCodeAt(0));e[a]=a}}}function Bae(t,e){return ns(t.value,r=>{if(typeof r=="number")return qn(e,r);{let n=r;return ns(e,i=>n.from<=i&&i<=n.to)!==void 0}})}function kN(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Pt(t.value)?Ma(t.value,kN):kN(t.value):!1}function Nk(t,e){if(e instanceof RegExp){let r=Bg(e),n=new EN(t);return n.visit(r),n.found}else return ns(e,r=>qn(t,r.charCodeAt(0)))!==void 0}var Fae,nx,EN,zae=N(()=>{"use strict";j2();qt();Og();Lk();SN();Fae="Complement Sets are not supported for first char optimization",nx=`Unable to use "first char" lexer optimizations: | |
| 710 | +`;o($ae,"getOptimizedStartCodesIndices");o(TN,"firstCharOptimizedIndices");o(Rk,"addOptimizedIdxToResult");o(kPe,"handleIgnoreCase");o(Bae,"findCode");o(kN,"isWholeOptional");EN=class extends Mc{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){qn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?Bae(e,this.targetCharCodes)===void 0&&(this.found=!0):Bae(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(Nk,"canMatchCharCode")});function Uae(t,e){e=Qh(e,{useSticky:AN,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` | |
| 711 | +`],tracer:o((b,w)=>w(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{GPe()});let n;r("Reject Lexer.NA",()=>{n=Jh(t,b=>b[lp]===Xn.NA)});let i=!1,a;r("Transform Patterns",()=>{i=!1,a=Je(n,b=>{let w=b[lp];if(zo(w)){let C=w.source;return C.length===1&&C!=="^"&&C!=="$"&&C!=="."&&!w.ignoreCase?C:C.length===2&&C[0]==="\\"&&!qn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],C[1])?C[1]:e.useSticky?Vae(w):Gae(w)}else{if(Si(w))return i=!0,{exec:w};if(typeof w=="object")return i=!0,w;if(typeof w=="string"){if(w.length===1)return w;{let C=w.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),T=new RegExp(C);return e.useSticky?Vae(T):Gae(T)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=Je(n,b=>b.tokenTypeIdx),l=Je(n,b=>{let w=b.GROUP;if(w!==Xn.SKIPPED){if(yi(w))return w;if(pr(w))return!1;throw Error("non exhaustive match")}}),u=Je(n,b=>{let w=b.LONGER_ALT;if(w)return Pt(w)?Je(w,T=>UT(n,T)):[UT(n,w)]}),h=Je(n,b=>b.PUSH_MODE),f=Je(n,b=>Bt(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=Qae(e.lineTerminatorCharacters);d=Je(n,w=>!1),e.positionTracking!=="onlyOffset"&&(d=Je(n,w=>Bt(w,"LINE_BREAKS")?!!w.LINE_BREAKS:Kae(w,b)===!1&&Nk(b,w.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=Je(n,Xae),m=Je(a,$Pe),g=Xr(n,(b,w)=>{let C=w.GROUP;return yi(C)&&C!==Xn.SKIPPED&&(b[C]=[]),b},{}),y=Je(a,(b,w)=>({pattern:a[w],longerAlt:u[w],canLineTerminator:d[w],isCustom:p[w],short:m[w],group:l[w],push:h[w],pop:f[w],tokenTypeIdx:s[w],tokenType:n[w]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=Xr(n,(b,w,C)=>{if(typeof w.PATTERN=="string"){let T=w.PATTERN.charCodeAt(0),E=Ic(T);CN(b,E,y[C])}else if(Pt(w.START_CHARS_HINT)){let T;Ae(w.START_CHARS_HINT,E=>{let A=typeof E=="string"?E.charCodeAt(0):E,S=Ic(A);T!==S&&(T=S,CN(b,S,y[C]))})}else if(zo(w.PATTERN))if(w.PATTERN.unicode)v=!1,e.ensureOptimizations&&Ig(`${nx} Unable to analyze < ${w.PATTERN.toString()} > pattern. | |
| 712 | + The regexp unicode flag is not currently supported by the regexp-to-ast library. | |
| 713 | + This will disable the lexer's first char optimizations. | |
| 714 | + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let T=$ae(w.PATTERN,e.ensureOptimizations);ur(T)&&(v=!1),Ae(T,E=>{CN(b,E,y[C])})}else e.ensureOptimizations&&Ig(`${nx} TokenType: <${w.name}> is using a custom token pattern without providing <start_chars_hint> parameter. | |
| 715 | + This will disable the lexer's first char optimizations. | |
| 716 | + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:i,canBeOptimized:v}}function Hae(t,e){let r=[],n=SPe(t);r=r.concat(n.errors);let i=CPe(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat(EPe(a)),r=r.concat(IPe(a)),r=r.concat(OPe(a,e)),r=r.concat(PPe(a)),r}function EPe(t){let e=[],r=Yr(t,n=>zo(n[lp]));return e=e.concat(_Pe(r)),e=e.concat(RPe(r)),e=e.concat(NPe(r)),e=e.concat(MPe(r)),e=e.concat(DPe(r)),e}function SPe(t){let e=Yr(t,i=>!Bt(i,lp)),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:Yn.MISSING_PATTERN,tokenTypes:[i]})),n=Zh(t,e);return{errors:r,valid:n}}function CPe(t){let e=Yr(t,i=>{let a=i[lp];return!zo(a)&&!Si(a)&&!Bt(a,"exec")&&!yi(a)}),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:Yn.INVALID_PATTERN,tokenTypes:[i]})),n=Zh(t,e);return{errors:r,valid:n}}function _Pe(t){class e extends Mc{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Bg(a),l=new e;return l.visit(s),l.found}catch{return APe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error: | |
| 717 | + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$' | |
| 718 | + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Yn.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function DPe(t){let e=Yr(t,n=>n.PATTERN.test(""));return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' must not match an empty string",type:Yn.EMPTY_MATCH_PATTERN,tokenTypes:[n]}))}function RPe(t){class e extends Mc{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Bg(a),l=new e;return l.visit(s),l.found}catch{return LPe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error: | |
| 719 | + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^' | |
| 720 | + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Yn.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function NPe(t){let e=Yr(t,n=>{let i=n[lp];return i instanceof RegExp&&(i.multiline||i.global)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:Yn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}))}function MPe(t){let e=[],r=Je(t,a=>Xr(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!qn(e,l)&&l.PATTERN!==Xn.NA&&(e.push(l),s.push(l)),s),[]));r=Tc(r);let n=Yr(r,a=>a.length>1);return Je(n,a=>{let s=Je(a,u=>u.name);return{message:`The same RegExp pattern ->${ia(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:Yn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function IPe(t){let e=Yr(t,n=>{if(!Bt(n,"GROUP"))return!1;let i=n.GROUP;return i!==Xn.SKIPPED&&i!==Xn.NA&&!yi(i)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:Yn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}))}function OPe(t,e){let r=Yr(t,i=>i.PUSH_MODE!==void 0&&!qn(e,i.PUSH_MODE));return Je(r,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:Yn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function PPe(t){let e=[],r=Xr(t,(n,i,a)=>{let s=i.PATTERN;return s===Xn.NA||(yi(s)?n.push({str:s,idx:a,tokenType:i}):zo(s)&&FPe(s)&&n.push({str:s.source,idx:a,tokenType:i})),n},[]);return Ae(t,(n,i)=>{Ae(r,({str:a,idx:s,tokenType:l})=>{if(i<s&&BPe(a,n.PATTERN)){let u=`Token: ->${l.name}<- can never be matched. | |
| 721 | +Because it appears AFTER the Token Type ->${n.name}<-in the lexer's definition. | |
| 722 | +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:Yn.UNREACHABLE_PATTERN,tokenTypes:[n,l]})}})}),e}function BPe(t,e){if(zo(e)){let r=e.exec(t);return r!==null&&r.index===0}else{if(Si(e))return e(t,0,[],{});if(Bt(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function FPe(t){return ns([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function Gae(t){let e=t.ignoreCase?"i":"";return new RegExp(`^(?:${t.source})`,e)}function Vae(t){let e=t.ignoreCase?"iy":"y";return new RegExp(`${t.source}`,e)}function Wae(t,e,r){let n=[];return Bt(t,$g)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+$g+`> property in its definition | |
| 723 | +`,type:Yn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Bt(t,Mk)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+Mk+`> property in its definition | |
| 724 | +`,type:Yn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Bt(t,Mk)&&Bt(t,$g)&&!Bt(t.modes,t.defaultMode)&&n.push({message:`A MultiMode Lexer cannot be initialized with a ${$g}: <${t.defaultMode}>which does not exist | |
| 725 | +`,type:Yn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Bt(t,Mk)&&Ae(t.modes,(i,a)=>{Ae(i,(s,l)=>{if(pr(s))n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> | |
| 726 | +`,type:Yn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Bt(s,"LONGER_ALT")){let u=Pt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Ae(u,h=>{!pr(h)&&!qn(i,h)&&n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> | |
| 727 | +`,type:Yn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),n}function qae(t,e,r){let n=[],i=!1,a=Tc(qr(br(t.modes))),s=Jh(a,u=>u[lp]===Xn.NA),l=Qae(r);return e&&Ae(s,u=>{let h=Kae(u,l);if(h!==!1){let d={message:zPe(u,h),type:h.issue,tokenType:u};n.push(d)}else Bt(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(i=!0):Nk(l,u.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found. | |
| 728 | + This Lexer has been defined to track line and column information, | |
| 729 | + But none of the Token Types can be identified as matching a line terminator. | |
| 730 | + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS | |
| 731 | + for details.`,type:Yn.NO_LINE_BREAKS_FLAGS}),n}function Yae(t){let e={},r=zr(t);return Ae(r,n=>{let i=t[n];if(Pt(i))e[n]=[];else throw Error("non exhaustive match")}),e}function Xae(t){let e=t.PATTERN;if(zo(e))return!1;if(Si(e))return!0;if(Bt(e,"exec"))return!0;if(yi(e))return!1;throw Error("non exhaustive match")}function $Pe(t){return yi(t)&&t.length===1?t.charCodeAt(0):!1}function Kae(t,e){if(Bt(t,"LINE_BREAKS"))return!1;if(zo(t.PATTERN)){try{Nk(e,t.PATTERN)}catch(r){return{issue:Yn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(yi(t.PATTERN))return!1;if(Xae(t))return{issue:Yn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function zPe(t,e){if(e.issue===Yn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. | |
| 732 | + The problem is in the <${t.name}> Token Type | |
| 733 | + Root cause: ${e.errMsg}. | |
| 734 | + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===Yn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option. | |
| 735 | + The problem is in the <${t.name}> Token Type | |
| 736 | + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function Qae(t){return Je(t,r=>yi(r)?r.charCodeAt(0):r)}function CN(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Ic(t){return t<Fg?t:Ik[t]}function GPe(){if(ur(Ik)){Ik=new Array(65536);for(let t=0;t<65536;t++)Ik[t]=t>255?255+~~(t/255):t}}var lp,$g,Mk,AN,APe,LPe,jae,Fg,Ik,SN=N(()=>{"use strict";j2();ix();qt();Og();zae();Lk();lp="PATTERN",$g="defaultMode",Mk="modes",AN=typeof new RegExp("(?:)").sticky=="boolean";o(Uae,"analyzeTokenTypes");o(Hae,"validatePatterns");o(EPe,"validateRegExpPattern");o(SPe,"findMissingPatterns");o(CPe,"findInvalidPatterns");APe=/[^\\][$]/;o(_Pe,"findEndOfInputAnchor");o(DPe,"findEmptyMatchRegExps");LPe=/[^\\[][\^]|^\^/;o(RPe,"findStartOfInputAnchor");o(NPe,"findUnsupportedFlags");o(MPe,"findDuplicatePatterns");o(IPe,"findInvalidGroupType");o(OPe,"findModesThatDoNotExist");o(PPe,"findUnreachablePatterns");o(BPe,"testTokenType");o(FPe,"noMetaChar");o(Gae,"addStartOfInput");o(Vae,"addStickyFlag");o(Wae,"performRuntimeChecks");o(qae,"performWarningRuntimeChecks");o(Yae,"cloneEmptyGroups");o(Xae,"isCustomPattern");o($Pe,"isShortPattern");jae={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r<e;r++){let n=t.charCodeAt(r);if(n===10)return this.lastIndex=r+1,!0;if(n===13)return t.charCodeAt(r+1)===10?this.lastIndex=r+2:this.lastIndex=r+1,!0}return!1},"test"),lastIndex:0};o(Kae,"checkLineBreaksIssues");o(zPe,"buildLineBreakIssueMessage");o(Qae,"getCharCodes");o(CN,"addToMapOfArrays");Fg=256,Ik=[];o(Ic,"charCodeToOptimizedIndex");o(GPe,"initCharCodeToOptimizedIndexMap")});function Pu(t,e){let r=t.tokenTypeIdx;return r===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[r]===!0}function zg(t,e){return t.tokenTypeIdx===e.tokenTypeIdx}function Bu(t){let e=VPe(t);UPe(e),WPe(e),HPe(e),Ae(e,r=>{r.isParent=r.categoryMatches.length>0})}function VPe(t){let e=an(t),r=t,n=!0;for(;n;){r=Tc(qr(Je(r,a=>a.CATEGORIES)));let i=Zh(r,e);e=e.concat(i),ur(i)?n=!1:r=i}return e}function UPe(t){Ae(t,e=>{_N(e)||(ese[Zae]=e,e.tokenTypeIdx=Zae++),Jae(e)&&!Pt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Jae(e)||(e.CATEGORIES=[]),qPe(e)||(e.categoryMatches=[]),YPe(e)||(e.categoryMatchesMap={})})}function HPe(t){Ae(t,e=>{e.categoryMatches=[],Ae(e.categoryMatchesMap,(r,n)=>{e.categoryMatches.push(ese[n].tokenTypeIdx)})})}function WPe(t){Ae(t,e=>{tse([],e)})}function tse(t,e){Ae(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Ae(e.CATEGORIES,r=>{let n=t.concat(e);qn(n,r)||tse(n,r)})}function _N(t){return Bt(t,"tokenTypeIdx")}function Jae(t){return Bt(t,"CATEGORIES")}function qPe(t){return Bt(t,"categoryMatches")}function YPe(t){return Bt(t,"categoryMatchesMap")}function rse(t){return Bt(t,"tokenTypeIdx")}var Zae,ese,cp=N(()=>{"use strict";qt();o(Pu,"tokenStructuredMatcher");o(zg,"tokenStructuredMatcherNoCategories");Zae=1,ese={};o(Bu,"augmentTokenTypes");o(VPe,"expandCategories");o(UPe,"assignTokenDefaultProps");o(HPe,"assignCategoriesTokensProp");o(WPe,"assignCategoriesMapProp");o(tse,"singleAssignCategoriesToksMap");o(_N,"hasShortKeyProperty");o(Jae,"hasCategoriesProperty");o(qPe,"hasExtendingTokensTypesProperty");o(YPe,"hasExtendingTokensTypesMapProperty");o(rse,"isTokenType")});var Gg,DN=N(()=>{"use strict";Gg={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,n,i){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var Yn,ax,Xn,ix=N(()=>{"use strict";SN();qt();Og();cp();DN();Lk();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(Yn||(Yn={}));ax={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` | |
| 737 | +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:Gg,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(ax);Xn=class{static{o(this,"Lexer")}constructor(e,r=ax){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent<this.traceInitMaxIdent&&console.log(`${s}--> <${i}>`);let{time:l,value:u}=tx(a),h=l>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&h(`${s}<-- <${i}> time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. | |
| 738 | +a boolean 2nd argument is no longer supported`);this.config=ma({},ax,r);let n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===ax.lineTerminatorsPattern)this.config.lineTerminatorsPattern=jae;else if(this.config.lineTerminatorCharacters===ax.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config. | |
| 739 | + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Pt(e)?i={modes:{defaultMode:an(e)},defaultMode:$g}:(a=!1,i=an(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(Wae(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(qae(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},Ae(i.modes,(l,u)=>{i.modes[u]=Jh(l,h=>pr(h))});let s=zr(i.modes);if(Ae(i.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(Hae(l,s))}),ur(this.lexerDefinitionErrors)){Bu(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=Uae(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=ma({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=i.defaultMode,!ur(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=Je(this.lexerDefinitionErrors,h=>h.message).join(`----------------------- | |
| 740 | +`);throw new Error(`Errors detected in definition of Lexer: | |
| 741 | +`+u)}Ae(this.lexerDefinitionWarning,l=>{ex(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(AN?(this.chopInput=ta,this.match=this.matchWithTest):(this.updateLastIndex=ni,this.match=this.matchWithExec),a&&(this.handleModes=ni),this.trackStartLines===!1&&(this.computeNewColumn=ta),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=ni),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid <positionTracking> config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=Xr(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!ur(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized. | |
| 742 | + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. | |
| 743 | + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{Pae()}),this.TRACE_INIT("toFastProperties",()=>{rx(this)})})}tokenize(e,r=this.defaultMode){if(!ur(this.lexerDefinitionErrors)){let i=Je(this.lexerDefinitionErrors,a=>a.message).join(`----------------------- | |
| 744 | +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: | |
| 745 | +`+i)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let n,i,a,s,l,u,h,f,d,p,m,g,y,v,x,b,w=e,C=w.length,T=0,E=0,A=this.hasCustom?0:Math.floor(e.length/10),S=new Array(A),_=[],I=this.trackStartLines?1:void 0,D=this.trackStartLines?1:void 0,k=Yae(this.emptyGroups),L=this.trackStartLines,R=this.config.lineTerminatorsPattern,O=0,M=[],B=[],F=[],P=[];Object.freeze(P);let z;function $(){return M}o($,"getPossiblePatternsSlow");function H(le){let he=Ic(le),K=B[he];return K===void 0?P:K}o(H,"getPossiblePatternsOptimized");let Q=o(le=>{if(F.length===1&&le.tokenType.PUSH_MODE===void 0){let he=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(le);_.push({offset:le.startOffset,line:le.startLine,column:le.startColumn,length:le.image.length,message:he})}else{F.pop();let he=ga(F);M=this.patternIdxToConfig[he],B=this.charCodeToPatternIdxToConfig[he],O=M.length;let K=this.canModeBeOptimized[he]&&this.config.safeMode===!1;B&&K?z=H:z=$}},"pop_mode");function j(le){F.push(le),B=this.charCodeToPatternIdxToConfig[le],M=this.patternIdxToConfig[le],O=M.length,O=M.length;let he=this.canModeBeOptimized[le]&&this.config.safeMode===!1;B&&he?z=H:z=$}o(j,"push_mode"),j.call(this,r);let ie,ne=this.config.recoveryEnabled;for(;T<C;){u=null;let le=w.charCodeAt(T),he=z(le),K=he.length;for(n=0;n<K;n++){ie=he[n];let X=ie.pattern;h=null;let te=ie.short;if(te!==!1?le===te&&(u=X):ie.isCustom===!0?(b=X.exec(w,T,S,k),b!==null?(u=b[0],b.payload!==void 0&&(h=b.payload)):u=null):(this.updateLastIndex(X,T),u=this.match(X,e,T)),u!==null){if(l=ie.longerAlt,l!==void 0){let J=l.length;for(a=0;a<J;a++){let se=M[l[a]],ue=se.pattern;if(f=null,se.isCustom===!0?(b=ue.exec(w,T,S,k),b!==null?(s=b[0],b.payload!==void 0&&(f=b.payload)):s=null):(this.updateLastIndex(ue,T),s=this.match(ue,e,T)),s&&s.length>u.length){u=s,h=f,ie=se;break}}}break}}if(u!==null){if(d=u.length,p=ie.group,p!==void 0&&(m=ie.tokenTypeIdx,g=this.createTokenInstance(u,T,m,ie.tokenType,I,D,d),this.handlePayload(g,h),p===!1?E=this.addToken(S,E,g):k[p].push(g)),e=this.chopInput(e,d),T=T+d,D=this.computeNewColumn(D,d),L===!0&&ie.canLineTerminator===!0){let X=0,te,J;R.lastIndex=0;do te=R.test(u),te===!0&&(J=R.lastIndex-1,X++);while(te===!0);X!==0&&(I=I+X,D=d-J,this.updateTokenEndLineColumnLocation(g,p,J,X,I,D,d))}this.handleModes(ie,Q,j,g)}else{let X=T,te=I,J=D,se=ne===!1;for(;se===!1&&T<C;)for(e=this.chopInput(e,1),T++,i=0;i<O;i++){let ue=M[i],Z=ue.pattern,Se=ue.short;if(Se!==!1?w.charCodeAt(T)===Se&&(se=!0):ue.isCustom===!0?se=Z.exec(w,T,S,k)!==null:(this.updateLastIndex(Z,T),se=Z.exec(e)!==null),se===!0)break}if(y=T-X,D=this.computeNewColumn(D,y),x=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(w,X,y,te,J),_.push({offset:X,line:te,column:J,length:y,message:x}),ne===!1)break}}return this.hasCustom||(S.length=E),{tokens:S,groups:k,errors:_}}handleModes(e,r,n,i){if(e.pop===!0){let a=e.push;r(i),a!==void 0&&n.call(this,a)}else e.push!==void 0&&n.call(this,e.push)}chopInput(e,r){return e.substring(r)}updateLastIndex(e,r){e.lastIndex=r}updateTokenEndLineColumnLocation(e,r,n,i,a,s,l){let u,h;r!==void 0&&(u=n===l-1,h=u?-1:0,i===1&&u===!0||(e.endLine=a+h,e.endColumn=s-1+-h))}computeNewColumn(e,r){return e+r}createOffsetOnlyToken(e,r,n,i){return{image:e,startOffset:r,tokenTypeIdx:n,tokenType:i}}createStartOnlyToken(e,r,n,i,a,s){return{image:e,startOffset:r,startLine:a,startColumn:s,tokenTypeIdx:n,tokenType:i}}createFullToken(e,r,n,i,a,s,l){return{image:e,startOffset:r,endOffset:r+l-1,startLine:a,endLine:a,startColumn:s,endColumn:s+l-1,tokenTypeIdx:n,tokenType:i}}addTokenUsingPush(e,r,n){return e.push(n),r}addTokenUsingMemberAccess(e,r,n){return e[r]=n,r++,r}handlePayloadNoCustom(e,r){}handlePayloadWithCustom(e,r){r!==null&&(e.payload=r)}matchWithTest(e,r,n){return e.test(r)===!0?r.substring(n,e.lastIndex):null}matchWithExec(e,r){let n=e.exec(r);return n!==null?n[0]:null}};Xn.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.";Xn.NA=/NOT_APPLICABLE/});function Fu(t){return LN(t)?t.LABEL:t.name}function LN(t){return yi(t.LABEL)&&t.LABEL!==""}function of(t){return jPe(t)}function jPe(t){let e=t.pattern,r={};if(r.name=t.name,pr(e)||(r.PATTERN=e),Bt(t,XPe))throw`The parent property is no longer supported. | |
| 746 | +See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return Bt(t,nse)&&(r.CATEGORIES=t[nse]),Bu([r]),Bt(t,ise)&&(r.LABEL=t[ise]),Bt(t,ase)&&(r.GROUP=t[ase]),Bt(t,ose)&&(r.POP_MODE=t[ose]),Bt(t,sse)&&(r.PUSH_MODE=t[sse]),Bt(t,lse)&&(r.LONGER_ALT=t[lse]),Bt(t,cse)&&(r.LINE_BREAKS=t[cse]),Bt(t,use)&&(r.START_CHARS_HINT=t[use]),r}function $u(t,e,r,n,i,a,s,l){return{image:e,startOffset:r,endOffset:n,startLine:i,endLine:a,startColumn:s,endColumn:l,tokenTypeIdx:t.tokenTypeIdx,tokenType:t}}function sx(t,e){return Pu(t,e)}var XPe,nse,ise,ase,sse,ose,lse,cse,use,lo,up=N(()=>{"use strict";qt();ix();cp();o(Fu,"tokenLabel");o(LN,"hasTokenLabel");XPe="parent",nse="categories",ise="label",ase="group",sse="push_mode",ose="pop_mode",lse="longer_alt",cse="line_breaks",use="start_chars_hint";o(of,"createToken");o(jPe,"createTokenInternal");lo=of({name:"EOF",pattern:Xn.NA});Bu([lo]);o($u,"createTokenInstance");o(sx,"tokenMatcher")});var zu,hse,Pl,Vg=N(()=>{"use strict";up();qt();os();zu={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:n}){return`Expecting ${LN(t)?`--> ${Fu(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:n,ruleName:i}){let a="Expecting: ",l=` | |
| 747 | +but found: '`+ia(e).image+"'";if(n)return a+n+l;{let u=Xr(t,(p,m)=>p.concat(m),[]),h=Je(u,p=>`[${Je(p,m=>Fu(m)).join(", ")}]`),d=`one of these possible Token sequences: | |
| 748 | +${Je(h,(p,m)=>` ${m+1}. ${p}`).join(` | |
| 749 | +`)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:n}){let i="Expecting: ",s=` | |
| 750 | +but found: '`+ia(e).image+"'";if(r)return i+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences:: | |
| 751 | + <${Je(t,h=>`[${Je(h,f=>Fu(f)).join(",")}]`).join(" ,")}>`;return i+u+s}}};Object.freeze(zu);hse={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- | |
| 752 | +inside top level rule: ->`+t.name+"<-"}},Pl={buildDuplicateFoundError(t,e){function r(f){return f instanceof kr?f.terminalType.name:f instanceof on?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let n=t.name,i=ia(e),a=i.idx,s=Bs(i),l=r(i),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} | |
| 753 | + appears more than once (${e.length} times) in the top level rule: ->${n}<-. | |
| 754 | + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES | |
| 755 | + `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,` | |
| 756 | +`),h},buildNamespaceConflictError(t){return`Namespace conflict found in grammar. | |
| 757 | +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>. | |
| 758 | +To resolve this make sure each Terminal and Non-Terminal names are unique | |
| 759 | +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter | |
| 760 | +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix | |
| 761 | +in <OR${r}> inside <${t.topLevelRule.name}> Rule, | |
| 762 | +<${e}> may appears as a prefix path in all these alternatives. | |
| 763 | +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX | |
| 764 | +For Further details.`},buildAlternationAmbiguityError(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in <OR${r}> inside <${t.topLevelRule.name}> Rule, | |
| 765 | +<${e}> may appears as a prefix path in all these alternatives. | |
| 766 | +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES | |
| 767 | +For Further details.`,n},buildEmptyRepetitionError(t){let e=Bs(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens. | |
| 768 | +This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in <OR${t.alternation.idx}> inside <${t.topLevelRule.name}> Rule. | |
| 769 | +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives: | |
| 770 | +<OR${t.alternation.idx}> inside <${t.topLevelRule.name}> Rule. | |
| 771 | + has ${t.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(t){let e=t.topLevelRule.name,r=Je(t.leftRecursionPath,a=>a.name),n=`${e} --> ${r.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar. | |
| 772 | +rule: <${e}> can be invoked from itself (directly or indirectly) | |
| 773 | +without consuming any Tokens. The grammar path that causes this is: | |
| 774 | + ${n} | |
| 775 | + To fix this refactor your grammar to remove the left recursion. | |
| 776 | +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof as?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function fse(t,e){let r=new RN(t,e);return r.resolveRefs(),r.errors}var RN,dse=N(()=>{"use strict";Fs();qt();os();o(fse,"resolveGrammar");RN=class extends ss{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Ae(br(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:n,type:zi.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function Fk(t,e,r=[]){r=an(r);let n=[],i=0;function a(l){return l.concat(gi(t,i+1))}o(a,"remainingPathWith");function s(l){let u=Fk(a(l),e,r);return n.concat(u)}for(o(s,"getAlternativesForProd");r.length<e&&i<t.length;){let l=t[i];if(l instanceof Dn)return s(l.definition);if(l instanceof on)return s(l.definition);if(l instanceof ln)n=s(l.definition);else if(l instanceof Ln){let u=l.definition.concat([new Or({definition:l.definition})]);return s(u)}else if(l instanceof Rn){let u=[new Dn({definition:l.definition}),new Or({definition:[new kr({terminalType:l.separator})].concat(l.definition)})];return s(u)}else if(l instanceof wn){let u=l.definition.concat([new Or({definition:[new kr({terminalType:l.separator})].concat(l.definition)})]);n=s(u)}else if(l instanceof Or){let u=l.definition.concat([new Or({definition:l.definition})]);n=s(u)}else{if(l instanceof Tn)return Ae(l.definition,u=>{ur(u.definition)===!1&&(n=s(u.definition))}),n;if(l instanceof kr)r.push(l.terminalType);else throw Error("non exhaustive match")}i++}return n.push({partialPath:r,suffixDef:gi(t,i)}),n}function $k(t,e,r,n){let i="EXIT_NONE_TERMINAL",a=[i],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-n-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!ur(d);){let p=d.pop();if(p===s){l&&ga(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(ur(m))continue;let x=m[0];if(x===i){let b={idx:g,def:gi(m),ruleStack:Nu(y),occurrenceStack:Nu(v)};d.push(b)}else if(x instanceof kr)if(g<u-1){let b=g+1,w=e[b];if(r(w,x.terminalType)){let C={idx:b,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(C)}}else if(g===u-1)f.push({nextTokenType:x.terminalType,nextTokenOccurrence:x.idx,ruleStack:y,occurrenceStack:v}),l=!0;else throw Error("non exhaustive match");else if(x instanceof on){let b=an(y);b.push(x.nonTerminalName);let w=an(v);w.push(x.idx);let C={idx:g,def:x.definition.concat(a,gi(m)),ruleStack:b,occurrenceStack:w};d.push(C)}else if(x instanceof ln){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w={idx:g,def:x.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v};d.push(w)}else if(x instanceof Ln){let b=new Or({definition:x.definition,idx:x.idx}),w=x.definition.concat([b],gi(m)),C={idx:g,def:w,ruleStack:y,occurrenceStack:v};d.push(C)}else if(x instanceof Rn){let b=new kr({terminalType:x.separator}),w=new Or({definition:[b].concat(x.definition),idx:x.idx}),C=x.definition.concat([w],gi(m)),T={idx:g,def:C,ruleStack:y,occurrenceStack:v};d.push(T)}else if(x instanceof wn){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w=new kr({terminalType:x.separator}),C=new Or({definition:[w].concat(x.definition),idx:x.idx}),T=x.definition.concat([C],gi(m)),E={idx:g,def:T,ruleStack:y,occurrenceStack:v};d.push(E)}else if(x instanceof Or){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w=new Or({definition:x.definition,idx:x.idx}),C=x.definition.concat([w],gi(m)),T={idx:g,def:C,ruleStack:y,occurrenceStack:v};d.push(T)}else if(x instanceof Tn)for(let b=x.definition.length-1;b>=0;b--){let w=x.definition[b],C={idx:g,def:w.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v};d.push(C),d.push(s)}else if(x instanceof Dn)d.push({idx:g,def:x.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof as)d.push(KPe(x,g,y,v));else throw Error("non exhaustive match")}return f}function KPe(t,e,r,n){let i=an(r);i.push(t.name);let a=an(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}var NN,Ok,Ug,Pk,ox,Bk,lx,cx=N(()=>{"use strict";qt();xN();Ak();os();NN=class extends Ou{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=an(this.path.ruleStack).reverse(),this.occurrenceStack=an(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,n){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=r.concat(n);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){ur(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},Ok=class extends NN{static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,n){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=r.concat(n),a=new Dn({definition:i});this.possibleTokTypes=op(a),this.found=!0}}},Ug=class extends Ou{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},Pk=class extends Ug{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,r,n)}},ox=class extends Ug{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,r,n)}},Bk=class extends Ug{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,r,n)}},lx=class extends Ug{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,r,n)}};o(Fk,"possiblePathsFrom");o($k,"nextPossibleTokensAfter");o(KPe,"expandTopLevelRule")});function ux(t){if(t instanceof ln||t==="Option")return jn.OPTION;if(t instanceof Or||t==="Repetition")return jn.REPETITION;if(t instanceof Ln||t==="RepetitionMandatory")return jn.REPETITION_MANDATORY;if(t instanceof Rn||t==="RepetitionMandatoryWithSeparator")return jn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof wn||t==="RepetitionWithSeparator")return jn.REPETITION_WITH_SEPARATOR;if(t instanceof Tn||t==="Alternation")return jn.ALTERNATION;throw Error("non exhaustive match")}function Gk(t){let{occurrence:e,rule:r,prodType:n,maxLookahead:i}=t,a=ux(n);return a===jn.ALTERNATION?Hg(e,r,i):Wg(e,r,a,i)}function mse(t,e,r,n,i,a){let s=Hg(t,e,r),l=wse(s)?zg:Pu;return a(s,n,l,i)}function gse(t,e,r,n,i,a){let s=Wg(t,e,i,r),l=wse(s)?zg:Pu;return a(s[0],l,n)}function yse(t,e,r,n){let i=t.length,a=Ma(t,s=>Ma(s,l=>l.length===1));if(e)return function(s){let l=Je(s,u=>u.GATE);for(let u=0;u<i;u++){let h=t[u],f=h.length,d=l[u];if(!(d!==void 0&&d.call(this)===!1))e:for(let p=0;p<f;p++){let m=h[p],g=m.length;for(let y=0;y<g;y++){let v=this.LA(y+1);if(r(v,m[y])===!1)continue e}return u}}};if(a&&!n){let s=Je(t,u=>qr(u)),l=Xr(s,(u,h,f)=>(Ae(h,d=>{Bt(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Ae(d.categoryMatches,p=>{Bt(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;s<i;s++){let l=t[s],u=l.length;e:for(let h=0;h<u;h++){let f=l[h],d=f.length;for(let p=0;p<d;p++){let m=this.LA(p+1);if(r(m,f[p])===!1)continue e}return s}}}}function vse(t,e,r){let n=Ma(t,a=>a.length===1),i=t.length;if(n&&!r){let a=qr(t);if(a.length===1&&ur(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=Xr(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Ae(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;a<i;a++){let s=t[a],l=s.length;for(let u=0;u<l;u++){let h=this.LA(u+1);if(e(h,s[u])===!1)continue e}return!0}return!1}}function pse(t){let e=new Array(t);for(let r=0;r<t;r++)e[r]=[];return e}function MN(t){let e=[""];for(let r=0;r<t.length;r++){let n=t[r],i=[];for(let a=0;a<e.length;a++){let s=e[a];i.push(s+"_"+n.tokenTypeIdx);for(let l=0;l<n.categoryMatches.length;l++){let u="_"+n.categoryMatches[l];i.push(s+u)}}e=i}return e}function QPe(t,e,r){for(let n=0;n<t.length;n++){if(n===r)continue;let i=t[n];for(let a=0;a<e.length;a++){let s=e[a];if(i[s]===!0)return!1}}return!0}function xse(t,e){let r=Je(t,s=>Fk([s],1)),n=pse(r.length),i=Je(r,s=>{let l={};return Ae(s,u=>{let h=MN(u.partialPath);Ae(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=pse(l.length);for(let u=0;u<l.length;u++){let h=l[u];for(let f=0;f<h.length;f++){let d=h[f].partialPath,p=h[f].suffixDef,m=MN(d);if(QPe(i,m,u)||ur(p)||d.length===e){let y=n[u];if(Vk(y,d)===!1){y.push(d);for(let v=0;v<m.length;v++){let x=m[v];i[u][x]=!0}}}else{let y=Fk(p,s+1,d);a[u]=a[u].concat(y),Ae(y,v=>{let x=MN(v.partialPath);Ae(x,b=>{i[u][b]=!0})})}}}}return n}function Hg(t,e,r,n){let i=new zk(t,jn.ALTERNATION,n);return e.accept(i),xse(i.result,r)}function Wg(t,e,r,n){let i=new zk(t,r);e.accept(i);let a=i.result,l=new IN(e,t,r).startWalking(),u=new Dn({definition:a}),h=new Dn({definition:l});return xse([u,h],n)}function Vk(t,e){e:for(let r=0;r<t.length;r++){let n=t[r];if(n.length===e.length){for(let i=0;i<n.length;i++){let a=e[i],s=n[i];if((a===s||s.categoryMatchesMap[a.tokenTypeIdx]!==void 0)===!1)continue e}return!0}}return!1}function bse(t,e){return t.length<e.length&&Ma(t,(r,n)=>{let i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}function wse(t){return Ma(t,e=>Ma(e,r=>Ma(r,n=>ur(n.categoryMatches))))}var jn,IN,zk,qg=N(()=>{"use strict";qt();cx();Ak();cp();os();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(jn||(jn={}));o(ux,"getProdType");o(Gk,"getLookaheadPaths");o(mse,"buildLookaheadFuncForOr");o(gse,"buildLookaheadFuncForOptionalProd");o(yse,"buildAlternativesLookAheadFunc");o(vse,"buildSingleAlternativeLookaheadFunction");IN=class extends Ou{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,n){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=n}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,n,i){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=n.concat(i),!0):!1}walkOption(e,r,n){this.checkIsTarget(e,jn.OPTION,r,n)||super.walkOption(e,r,n)}walkAtLeastOne(e,r,n){this.checkIsTarget(e,jn.REPETITION_MANDATORY,r,n)||super.walkOption(e,r,n)}walkAtLeastOneSep(e,r,n){this.checkIsTarget(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}walkMany(e,r,n){this.checkIsTarget(e,jn.REPETITION,r,n)||super.walkOption(e,r,n)}walkManySep(e,r,n){this.checkIsTarget(e,jn.REPETITION_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}},zk=class extends ss{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,n){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=n,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,jn.OPTION)}visitRepetition(e){this.checkIsTarget(e,jn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,jn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,jn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,jn.ALTERNATION)}};o(pse,"initializeArrayOfArrays");o(MN,"pathToHashKeys");o(QPe,"isUniquePrefixHash");o(xse,"lookAheadSequenceFromAlternatives");o(Hg,"getLookaheadPathsForOr");o(Wg,"getLookaheadPathsForOptionalProd");o(Vk,"containsPath");o(bse,"isStrictPrefixOfPath");o(wse,"areTokenCategoriesNotUsed")});function Tse(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return Je(e,r=>Object.assign({type:zi.CUSTOM_LOOKAHEAD_VALIDATION},r))}function kse(t,e,r,n){let i=ya(t,u=>ZPe(u,r)),a=iBe(t,e,r),s=ya(t,u=>tBe(u,r)),l=ya(t,u=>eBe(u,t,n,r));return i.concat(a,s,l)}function ZPe(t,e){let r=new ON;t.accept(r);let n=r.allProductions,i=IL(n,JPe),a=Os(i,l=>l.length>1);return Je(br(a),l=>{let u=ia(l),h=e.buildDuplicateFoundError(t,l),f=Bs(u),d={message:h,type:zi.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=Ese(u);return p&&(d.parameter=p),d})}function JPe(t){return`${Bs(t)}_#_${t.idx}_#_${Ese(t)}`}function Ese(t){return t instanceof kr?t.terminalType.name:t instanceof on?t.nonTerminalName:""}function eBe(t,e,r,n){let i=[];if(Xr(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:s,type:zi.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}function Sse(t,e,r){let n=[],i;return qn(e,t)||(i=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,n.push({message:i,type:zi.INVALID_RULE_OVERRIDE,ruleName:t})),n}function BN(t,e,r,n=[]){let i=[],a=Uk(e.definition);if(ur(a))return[];{let s=t.name;qn(a,t)&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:zi.LEFT_RECURSION,ruleName:s});let u=Zh(a,n.concat([t])),h=ya(u,f=>{let d=an(n);return d.push(f),BN(t,f,r,d)});return i.concat(h)}}function Uk(t){let e=[];if(ur(t))return e;let r=ia(t);if(r instanceof on)e.push(r.referencedRule);else if(r instanceof Dn||r instanceof ln||r instanceof Ln||r instanceof Rn||r instanceof wn||r instanceof Or)e=e.concat(Uk(r.definition));else if(r instanceof Tn)e=qr(Je(r.definition,a=>Uk(a.definition)));else if(!(r instanceof kr))throw Error("non exhaustive match");let n=sp(r),i=t.length>1;if(n&&i){let a=gi(t);return e.concat(Uk(a))}else return e}function Cse(t,e){let r=new hx;t.accept(r);let n=r.alternations;return ya(n,a=>{let s=Nu(a.definition);return ya(s,(l,u)=>{let h=$k([l],[],Pu,1);return ur(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:zi.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function Ase(t,e,r){let n=new hx;t.accept(n);let i=n.alternations;return i=Jh(i,s=>s.ignoreAmbiguities===!0),ya(i,s=>{let l=s.idx,u=s.maxLookahead||e,h=Hg(l,t,u,s),f=rBe(h,s,t,r),d=nBe(h,s,t,r);return f.concat(d)})}function tBe(t,e){let r=new hx;t.accept(r);let n=r.alternations;return ya(n,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:zi.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function _se(t,e,r){let n=[];return Ae(t,i=>{let a=new PN;i.accept(a);let s=a.allProductions;Ae(s,l=>{let u=ux(l),h=l.maxLookahead||e,f=l.idx,p=Wg(f,i,u,h)[0];if(ur(qr(p))){let m=r.buildEmptyRepetitionError({topLevelRule:i,repetition:l});n.push({message:m,type:zi.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}function rBe(t,e,r,n){let i=[],a=Xr(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Ae(u,f=>{let d=[h];Ae(t,(p,m)=>{h!==m&&Vk(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!Vk(i,f)&&(i.push(f),l.push({alts:d,path:f}))}),l),[]);return Je(a,l=>{let u=Je(l.alts,f=>f+1);return{message:n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:zi.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function nBe(t,e,r,n){let i=Xr(t,(s,l,u)=>{let h=Je(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return Tc(ya(i,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=Yr(i,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx<u&&bse(p.path,h));return Je(f,p=>{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:n.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:zi.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function iBe(t,e,r){let n=[],i=Je(e,a=>a.name);return Ae(t,a=>{let s=a.name;if(qn(i,s)){let l=r.buildNamespaceConflictError(a);n.push({message:l,type:zi.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),n}var ON,hx,PN,fx=N(()=>{"use strict";qt();Fs();os();qg();cx();cp();o(Tse,"validateLookahead");o(kse,"validateGrammar");o(ZPe,"validateDuplicateProductions");o(JPe,"identifyProductionForDuplicates");o(Ese,"getExtraProductionArgument");ON=class extends ss{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(eBe,"validateRuleDoesNotAlreadyExist");o(Sse,"validateRuleIsOverridden");o(BN,"validateNoLeftRecursion");o(Uk,"getFirstNoneTerminal");hx=class extends ss{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(Cse,"validateEmptyOrAlternative");o(Ase,"validateAmbiguousAlternationAlternatives");PN=class extends ss{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(tBe,"validateTooManyAlts");o(_se,"validateSomeNonEmptyLookaheadPath");o(rBe,"checkAlternativesAmbiguities");o(nBe,"checkPrefixAlternativesAmbiguities");o(iBe,"checkTerminalAndNoneTerminalsNameSpace")});function Dse(t){let e=Qh(t,{errMsgProvider:hse}),r={};return Ae(t.rules,n=>{r[n.name]=n}),fse(r,e.errMsgProvider)}function Lse(t){return t=Qh(t,{errMsgProvider:Pl}),kse(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var Rse=N(()=>{"use strict";qt();dse();fx();Vg();o(Dse,"resolveGrammar");o(Lse,"validateGrammar")});function lf(t){return qn(Pse,t.name)}var Nse,Mse,Ise,Ose,Pse,Yg,hp,dx,px,mx,Xg=N(()=>{"use strict";qt();Nse="MismatchedTokenException",Mse="NoViableAltException",Ise="EarlyExitException",Ose="NotAllInputParsedException",Pse=[Nse,Mse,Ise,Ose];Object.freeze(Pse);o(lf,"isRecognitionException");Yg=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},hp=class extends Yg{static{o(this,"MismatchedTokenException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Nse}},dx=class extends Yg{static{o(this,"NoViableAltException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Mse}},px=class extends Yg{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=Ose}},mx=class extends Yg{static{o(this,"EarlyExitException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Ise}}});function aBe(t,e,r,n,i,a,s){let l=this.getKeyForAutomaticLookahead(n,i),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,i).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=lo,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var FN,zN,$N,Hk,GN=N(()=>{"use strict";up();qt();Xg();bN();Fs();FN={},zN="InRuleRecoveryException",$N=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=zN}},Hk=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Bt(e,"recoveryEnabled")?e.recoveryEnabled:ls.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=aBe)}getTokenToInsert(e){let r=$u(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,n,i){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new hp(m,h,this.LA(0));g.resyncedTokens=Nu(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,i)){d();return}else if(n.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,n){return!(n===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let n=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(n)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new $N("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||ur(r))return!1;let n=this.LA(1);return ns(r,a=>this.tokenMatcher(n,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return qn(n,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),n=2;for(;;){let i=ns(e,a=>sx(r,a));if(i!==void 0)return i;r=this.LA(n),n++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return FN;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return Je(e,(n,i)=>i===0?FN:{ruleName:this.shortRuleNameToFullName(n),idxInCallingRule:r[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=Je(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return qr(e)}getFollowSetFromFollowKey(e){if(e===FN)return[lo];let r=e.ruleName+e.idxInCallingRule+_k+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,lo)||r.push(e),r}reSyncTo(e){let r=[],n=this.LA(1);for(;this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return Nu(r)}attemptInRepetitionRecovery(e,r,n,i,a,s,l){}getCurrentGrammarPath(e,r){let n=this.getHumanReadableRuleStack(),i=an(this.RULE_OCCURRENCE_STACK);return{ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return Je(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(aBe,"attemptInRepetitionRecovery")});function Wk(t,e,r){return r|e|t}var qk=N(()=>{"use strict";o(Wk,"getKeyForAutomaticLookahead")});var Gu,VN=N(()=>{"use strict";qt();Vg();Fs();fx();qg();Gu=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:ls.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(ur(r)){let n=this.validateEmptyOrAlternatives(e.rules),i=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...n,...i,...a]}return r}validateNoLeftRecursion(e){return ya(e,r=>BN(r,r,Pl))}validateEmptyOrAlternatives(e){return ya(e,r=>Cse(r,Pl))}validateAmbiguousAlternationAlternatives(e,r){return ya(e,n=>Ase(n,r,Pl))}validateSomeNonEmptyLookaheadPath(e,r){return _se(e,r,Pl)}buildLookaheadForAlternation(e){return mse(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,yse)}buildLookaheadForOptional(e){return gse(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,ux(e.prodType),vse)}}});function sBe(t){Yk.reset(),t.accept(Yk);let e=Yk.dslMethods;return Yk.reset(),e}var Xk,UN,Yk,Bse=N(()=>{"use strict";qt();Fs();qk();os();VN();Xk=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Bt(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:ls.dynamicTokensEnabled,this.maxLookahead=Bt(e,"maxLookahead")?e.maxLookahead:ls.maxLookahead,this.lookaheadStrategy=Bt(e,"lookaheadStrategy")?e.lookaheadStrategy:new Gu({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Ae(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:n,repetition:i,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=sBe(r);Ae(n,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Bs(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=Wk(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Ae(i,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Bs(h))}),Ae(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Bs(h))}),Ae(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Bs(h))}),Ae(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Bs(h))}),Ae(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Bs(h))})})})}computeLookaheadFunc(e,r,n,i,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),u=Wk(this.fullRuleNameToShort[e.name],n,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let n=this.getLastExplicitRuleShortName();return Wk(n,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},UN=class extends ss{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},Yk=new UN;o(sBe,"collectMethods")});function qN(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset<e.endOffset&&(t.endOffset=e.endOffset)}function YN(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.startColumn=e.startColumn,t.startLine=e.startLine,t.endOffset=e.endOffset,t.endColumn=e.endColumn,t.endLine=e.endLine):t.endOffset<e.endOffset&&(t.endOffset=e.endOffset,t.endColumn=e.endColumn,t.endLine=e.endLine)}function Fse(t,e,r){t.children[r]===void 0?t.children[r]=[e]:t.children[r].push(e)}function $se(t,e,r){t.children[e]===void 0?t.children[e]=[r]:t.children[e].push(r)}var zse=N(()=>{"use strict";o(qN,"setNodeLocationOnlyOffset");o(YN,"setNodeLocationFull");o(Fse,"addTerminalToCst");o($se,"addNoneTerminalToCst")});function XN(t,e){Object.defineProperty(t,oBe,{enumerable:!1,configurable:!0,writable:!1,value:e})}var oBe,Gse=N(()=>{"use strict";oBe="name";o(XN,"defineNameProp")});function lBe(t,e){let r=zr(t),n=r.length;for(let i=0;i<n;i++){let a=r[i],s=t[a],l=s.length;for(let u=0;u<l;u++){let h=s[u];h.tokenTypeIdx===void 0&&this[h.name](h.children,e)}}}function Vse(t,e){let r=o(function(){},"derivedConstructor");XN(r,t+"BaseSemantics");let n={visit:o(function(i,a){if(Pt(i)&&(i=i[0]),!pr(i))return this[i.name](i.children,a)},"visit"),validateVisitor:o(function(){let i=cBe(this,e);if(!ur(i)){let a=Je(i,s=>s.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: | |
| 777 | + ${a.join(` | |
| 778 | + | |
| 779 | +`).replace(/\n/g,` | |
| 780 | + `)}`)}},"validateVisitor")};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}function Use(t,e,r){let n=o(function(){},"derivedConstructor");XN(n,t+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return Ae(e,a=>{i[a]=lBe}),n.prototype=i,n.prototype.constructor=n,n}function cBe(t,e){return uBe(t,e)}function uBe(t,e){let r=Yr(e,i=>Si(t[i])===!1),n=Je(r,i=>({msg:`Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,type:jN.MISSING_METHOD,methodName:i}));return Tc(n)}var jN,Hse=N(()=>{"use strict";qt();Gse();o(lBe,"defaultVisit");o(Vse,"createBaseSemanticVisitorConstructor");o(Use,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(jN||(jN={}));o(cBe,"validateVisitor");o(uBe,"validateMissingCstMethods")});var Zk,Wse=N(()=>{"use strict";zse();qt();Hse();Fs();Zk=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Bt(e,"nodeLocationTracking")?e.nodeLocationTracking:ls.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ni,this.cstFinallyStateUpdate=ni,this.cstPostTerminal=ni,this.cstPostNonTerminal=ni,this.cstPostRule=ni;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=YN,this.setNodeLocationFromNode=YN,this.cstPostRule=ni,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=qN,this.setNodeLocationFromNode=qN,this.cstPostRule=ni,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=ni,this.setInitialNodeLocation=ni;else throw Error(`Invalid <nodeLocationTracking> config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN}cstPostTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];Fse(n,r,e),this.setNodeLocationFromToken(n.location,r)}cstPostNonTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];$se(n,r,e),this.setNodeLocationFromNode(n.location,e.location)}getBaseCstVisitorConstructor(){if(pr(this.baseCstVisitorConstructor)){let e=Vse(this.className,zr(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(pr(this.baseCstVisitorWithDefaultsConstructor)){let e=Use(this.className,zr(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var Jk,qse=N(()=>{"use strict";Fs();Jk=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):jg}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?jg:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var eE,Yse=N(()=>{"use strict";qt();Xg();Fs();Vg();fx();os();eE=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,n){return this.consumeInternal(r,e,n)}subrule(e,r,n){return this.subruleInternal(r,e,n)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,n=Kg){if(qn(this.definedRulesNames,e)){let s={message:Pl.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:zi.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let i=this.defineRule(e,r,n);return this[e]=i,i}OVERRIDE_RULE(e,r,n=Kg){let i=Sse(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let a=this.defineRule(e,r,n);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(lf(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return Sk(br(this.gastProductionsCache))}}});var tE,Xse=N(()=>{"use strict";qt();qk();Xg();qg();cx();Fs();GN();up();cp();tE=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=zg,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Bt(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property. | |
| 781 | + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 | |
| 782 | + For Further details.`);if(Pt(e)){if(ur(e))throw Error(`A Token Vocabulary cannot be empty. | |
| 783 | + Note that the first argument for the parser constructor | |
| 784 | + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. | |
| 785 | + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 | |
| 786 | + For Further details.`)}if(Pt(e))this.tokensMap=Xr(e,(a,s)=>(a[s.name]=s,a),{});else if(Bt(e,"modes")&&Ma(qr(br(e.modes)),rse)){let a=qr(br(e.modes)),s=Bm(a);this.tokensMap=Xr(s,(l,u)=>(l[u.name]=u,l),{})}else if(bn(e))this.tokensMap=an(e);else throw new Error("<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=lo;let n=Bt(e,"modes")?qr(br(e.modes)):br(e),i=Ma(n,a=>ur(a.categoryMatches));this.tokenMatcher=i?zg:Pu,Bu(br(this.tokensMap))}defineRule(e,r,n){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' | |
| 787 | +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=Bt(n,"resyncEnabled")?n.resyncEnabled:Kg.resyncEnabled,a=Bt(n,"recoveryValueFunc")?n.recoveryValueFunc:Kg.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,n){let i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(lf(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return n(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(i)return this.moveToTerminatedState(),n(e);throw s}}else throw e}optionInternal(e,r){let n=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,n)}optionInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(i.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let n=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,n)}atLeastOneInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(i.call(this)===!0){let s=this.doSingleRepetition(a);for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,jn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],i,1024,e,Bk)}atLeastOneSepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,n)}atLeastOneSepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,lx],l,1536,e,lx)}else throw this.raiseEarlyExitException(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let n=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,n)}manyInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=i;i=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],i,768,e,Pk,s)}manySepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,n)}manySepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,ox],l,1280,e,ox)}}repetitionSepSecondInternal(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let n=this.getKeyForAutomaticLookahead(256,r),i=Pt(e)?e:e.DEF,s=this.getLaFuncFromCache(n).call(this,i);if(s!==void 0)return i[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new px(r,e))}}subruleInternal(e,r,n){let i;try{let a=n!==void 0?n.ARGS:void 0;return this.subruleIdx=r,i=e.apply(this,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(a){throw this.subruleInternalError(a,n,e.ruleName)}}subruleInternalError(e,r,n){throw lf(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e}consumeInternal(e,r,n){let i;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(a){i=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i}consumeInternalError(e,r,n){let i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new hp(i,r,a))}consumeInternalRecovery(e,r,n){if(this.recoveryEnabled&&n.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===zN?n:a}}else throw n}saveRecogState(){let e=this.errors,r=an(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),lo)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var rE,jse=N(()=>{"use strict";Xg();qt();qg();Fs();rE=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Bt(e,"errorMessageProvider")?e.errorMessageProvider:ls.errorMessageProvider}SAVE_ERROR(e){if(lf(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:an(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return an(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,n){let i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],l=Wg(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new mx(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=Hg(e,i,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new dx(u,this.LA(1),l))}}});var nE,Kse=N(()=>{"use strict";cx();qt();nE=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let n=this.gastProductionsCache[e];if(pr(n))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return $k([n],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=ia(e.ruleStack),i=this.getGAstProductions()[r];return new Ok(i,e).startWalking()}}});function yx(t,e,r,n=!1){aE(r);let i=ga(this.recordingProdStack),a=Si(e)?e:e.DEF,s=new t({definition:[],idx:r});return n&&(s.separator=e.SEP),Bt(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),this.recordingProdStack.pop(),sE}function dBe(t,e){aE(e);let r=ga(this.recordingProdStack),n=Pt(t)===!1,i=n===!1?t:t.DEF,a=new Tn({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});Bt(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=A2(i,l=>Si(l.GATE));return a.hasPredicates=s,r.definition.push(a),Ae(i,l=>{let u=new Dn({definition:[]});a.definition.push(u),Bt(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Bt(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),sE}function Jse(t){return t===0?"":`${t}`}function aE(t){if(t<0||t>Zse){let e=new Error(`Invalid DSL Method idx value: <${t}> | |
| 788 | + Idx value must be a none negative value smaller than ${Zse+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var sE,Qse,Zse,eoe,toe,fBe,iE,roe=N(()=>{"use strict";qt();os();ix();cp();up();Fs();qk();sE={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(sE);Qse=!0,Zse=Math.pow(2,8)-1,eoe=of({name:"RECORDING_PHASE_TOKEN",pattern:Xn.NA});Bu([eoe]);toe=$u(eoe,`This IToken indicates the Parser is in Recording Phase | |
| 789 | + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(toe);fBe={name:`This CSTNode indicates the Parser is in Recording Phase | |
| 790 | + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},iE=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(n,i){return this.consumeInternalRecord(n,e,i)},this[`SUBRULE${r}`]=function(n,i){return this.subruleInternalRecord(n,e,i)},this[`OPTION${r}`]=function(n){return this.optionInternalRecord(n,e)},this[`OR${r}`]=function(n){return this.orInternalRecord(n,e)},this[`MANY${r}`]=function(n){this.manyInternalRecord(e,n)},this[`MANY_SEP${r}`]=function(n){this.manySepFirstInternalRecord(e,n)},this[`AT_LEAST_ONE${r}`]=function(n){this.atLeastOneInternalRecord(e,n)},this[`AT_LEAST_ONE_SEP${r}`]=function(n){this.atLeastOneSepFirstInternalRecord(e,n)}}this.consume=function(e,r,n){return this.consumeInternalRecord(r,e,n)},this.subrule=function(e,r,n){return this.subruleInternalRecord(r,e,n)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let n=r>0?r:"";delete e[`CONSUME${n}`],delete e[`SUBRULE${n}`],delete e[`OPTION${n}`],delete e[`OR${n}`],delete e[`MANY${n}`],delete e[`MANY_SEP${n}`],delete e[`AT_LEAST_ONE${n}`],delete e[`AT_LEAST_ONE_SEP${n}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return jg}topLevelRuleRecord(e,r){try{let n=new as({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` | |
| 791 | + This error was thrown during the "grammar recording phase" For more info see: | |
| 792 | + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}}optionInternalRecord(e,r){return yx.call(this,ln,e,r)}atLeastOneInternalRecord(e,r){yx.call(this,Ln,r,e)}atLeastOneSepFirstInternalRecord(e,r){yx.call(this,Rn,r,e,Qse)}manyInternalRecord(e,r){yx.call(this,Or,r,e)}manySepFirstInternalRecord(e,r){yx.call(this,wn,r,e,Qse)}orInternalRecord(e,r){return dBe.call(this,e,r)}subruleInternalRecord(e,r,n){if(aE(r),!e||Bt(e,"ruleName")===!1){let l=new Error(`<SUBRULE${Jse(r)}> argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> | |
| 793 | + inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let i=ga(this.recordingProdStack),a=e.ruleName,s=new on({idx:r,nonTerminalName:a,label:n?.LABEL,referencedRule:void 0});return i.definition.push(s),this.outputCst?fBe:sE}consumeInternalRecord(e,r,n){if(aE(r),!_N(e)){let s=new Error(`<CONSUME${Jse(r)}> argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> | |
| 794 | + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=ga(this.recordingProdStack),a=new kr({idx:r,terminalType:e,label:n?.LABEL});return i.definition.push(a),toe}};o(yx,"recordProd");o(dBe,"recordOrProd");o(Jse,"getIdxSuffix");o(aE,"assertMethodIdxIsValid")});var oE,noe=N(()=>{"use strict";qt();Og();Fs();oE=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Bt(e,"traceInitPerf")){let r=e.traceInitPerf,n=typeof r=="number";this.traceInitMaxIdent=n?r:1/0,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=ls.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let n=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent<this.traceInitMaxIdent&&console.log(`${n}--> <${e}>`);let{time:i,value:a}=tx(r),s=i>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&s(`${n}<-- <${e}> time: ${i}ms`),this.traceInitIndent--,a}else return r()}}});function ioe(t,e){e.forEach(r=>{let n=r.prototype;Object.getOwnPropertyNames(n).forEach(i=>{if(i==="constructor")return;let a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]})})}var aoe=N(()=>{"use strict";o(ioe,"applyMixins")});function lE(t=void 0){return function(){return t}}var jg,ls,Kg,zi,vx,xx,Fs=N(()=>{"use strict";qt();Og();Oae();up();Vg();Rse();GN();Bse();Wse();qse();Yse();Xse();jse();Kse();roe();noe();aoe();fx();jg=$u(lo,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(jg);ls=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:zu,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),Kg=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(zi||(zi={}));o(lE,"EMPTY_ALT");vx=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{rx(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Ae(this.definedRulesNames,i=>{let s=this[i].originalGrammarAction,l;this.TRACE_INIT(`${i} Rule`,()=>{l=this.topLevelRuleRecord(i,s)}),this.gastProductionsCache[i]=l})}finally{this.disableRecording()}});let n=[];if(this.TRACE_INIT("Grammar Resolving",()=>{n=Dse({rules:br(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(n)}),this.TRACE_INIT("Grammar Validations",()=>{if(ur(n)&&this.skipValidations===!1){let i=Lse({rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),errMsgProvider:Pl,grammarName:r}),a=Tse({lookaheadStrategy:this.lookaheadStrategy,rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(i,a)}}),ur(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let i=Iae(br(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,a;(a=(i=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(i,{rules:br(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(br(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!ur(this.definitionErrors))throw e=Je(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected: | |
| 795 | + ${e.join(` | |
| 796 | +------------------------------- | |
| 797 | +`)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let n=this;if(n.initErrorHandler(r),n.initLexerAdapter(),n.initLooksAhead(r),n.initRecognizerEngine(e,r),n.initRecoverable(r),n.initTreeBuilder(r),n.initContentAssist(),n.initGastRecorder(r),n.initPerformanceTracer(r),Bt(r,"ignoredIssues"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated. | |
| 798 | + Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead. | |
| 799 | + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES | |
| 800 | + For further details.`);this.skipValidations=Bt(r,"skipValidations")?r.skipValidations:ls.skipValidations}};vx.DEFER_DEFINITION_ERRORS_HANDLING=!1;ioe(vx,[Hk,Xk,Zk,Jk,tE,eE,rE,nE,iE,oE]);xx=class extends vx{static{o(this,"EmbeddedActionsParser")}constructor(e,r=ls){let n=an(r);n.outputCst=!1,super(e,n)}}});var soe=N(()=>{"use strict";os()});var ooe=N(()=>{"use strict"});var loe=N(()=>{"use strict";soe();ooe()});var coe=N(()=>{"use strict";gN()});var cf=N(()=>{"use strict";gN();Fs();ix();up();qg();VN();Vg();Xg();DN();os();os();loe();coe()});function fp(t,e,r){return`${t.name}_${e}_${r}`}function doe(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};bBe(e,t);let r=t.length;for(let n=0;n<r;n++){let i=t[n],a=dp(e,i,i);a!==void 0&&RBe(e,i,a)}return e}function bBe(t,e){let r=e.length;for(let n=0;n<r;n++){let i=e[n],a=aa(t,i,void 0,{type:mBe}),s=aa(t,i,void 0,{type:Jg});a.stop=s,t.ruleToStartState.set(i,a),t.ruleToStopState.set(i,s)}}function poe(t,e,r){return r instanceof kr?QN(t,e,r.terminalType,r):r instanceof on?LBe(t,e,r):r instanceof Tn?SBe(t,e,r):r instanceof ln?CBe(t,e,r):r instanceof Or?wBe(t,e,r):r instanceof wn?TBe(t,e,r):r instanceof Ln?kBe(t,e,r):r instanceof Rn?EBe(t,e,r):dp(t,e,r)}function wBe(t,e,r){let n=aa(t,e,r,{type:hoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return goe(t,e,r,i)}function TBe(t,e,r){let n=aa(t,e,r,{type:hoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r)),a=QN(t,e,r.separator,r);return goe(t,e,r,i,a)}function kBe(t,e,r){let n=aa(t,e,r,{type:uoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return moe(t,e,r,i)}function EBe(t,e,r){let n=aa(t,e,r,{type:uoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r)),a=QN(t,e,r.separator,r);return moe(t,e,r,i,a)}function SBe(t,e,r){let n=aa(t,e,r,{type:uf});hf(t,n);let i=Je(r.definition,s=>poe(t,e,s));return e1(t,e,n,r,...i)}function CBe(t,e,r){let n=aa(t,e,r,{type:uf});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return ABe(t,e,r,i)}function dp(t,e,r){let n=Yr(Je(r.definition,i=>poe(t,e,i)),i=>i!==void 0);return n.length===1?n[0]:n.length===0?void 0:DBe(t,n)}function moe(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:xBe});hf(t,l);let u=aa(t,e,r,{type:foe});return a.loopback=l,u.loopback=l,t.decisionMap[fp(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,Ai(s,l),i===void 0?(Ai(l,a),Ai(l,u)):(Ai(l,u),Ai(l,i.left),Ai(i.right,a)),{left:a,right:u}}function goe(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:vBe});hf(t,l);let u=aa(t,e,r,{type:foe}),h=aa(t,e,r,{type:yBe});return l.loopback=h,u.loopback=h,Ai(l,a),Ai(l,u),Ai(s,h),i!==void 0?(Ai(h,u),Ai(h,i.left),Ai(i.right,a)):Ai(h,l),t.decisionMap[fp(e,i?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function ABe(t,e,r,n){let i=n.left,a=n.right;return Ai(i,a),t.decisionMap[fp(e,"Option",r.idx)]=i,n}function hf(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function e1(t,e,r,n,...i){let a=aa(t,e,n,{type:gBe,start:r});r.end=a;for(let l of i)l!==void 0?(Ai(r,l.left),Ai(l.right,a)):Ai(r,a);let s={left:r,right:a};return t.decisionMap[fp(e,_Be(n),n.idx)]=r,s}function _Be(t){if(t instanceof Tn)return"Alternation";if(t instanceof ln)return"Option";if(t instanceof Or)return"Repetition";if(t instanceof wn)return"RepetitionWithSeparator";if(t instanceof Ln)return"RepetitionMandatory";if(t instanceof Rn)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function DBe(t,e){let r=e.length;for(let a=0;a<r-1;a++){let s=e[a],l;s.left.transitions.length===1&&(l=s.left.transitions[0]);let u=l instanceof Zg,h=l,f=e[a+1].left;s.left.type===uf&&s.right.type===uf&&l!==void 0&&(u&&h.followState===s.right||l.target===s.right)?(u?h.followState=f:l.target=f,NBe(t,s.right)):Ai(s.right,f)}let n=e[0],i=e[r-1];return{left:n.left,right:i.right}}function QN(t,e,r,n){let i=aa(t,e,n,{type:uf}),a=aa(t,e,n,{type:uf});return ZN(i,new Qg(a,r)),{left:i,right:a}}function LBe(t,e,r){let n=r.referencedRule,i=t.ruleToStartState.get(n),a=aa(t,e,r,{type:uf}),s=aa(t,e,r,{type:uf}),l=new Zg(i,n,s);return ZN(a,l),{left:a,right:s}}function RBe(t,e,r){let n=t.ruleToStartState.get(e);Ai(n,r.left);let i=t.ruleToStopState.get(e);return Ai(r.right,i),{left:n,right:i}}function Ai(t,e){let r=new wx(e);ZN(t,r)}function aa(t,e,r,n){let i=Object.assign({atn:t,production:r,epsilonOnlyTransitions:!1,rule:e,transitions:[],nextTokenWithinRule:[],stateNumber:t.states.length},n);return t.states.push(i),i}function ZN(t,e){t.transitions.length===0&&(t.epsilonOnlyTransitions=e.isEpsilon()),t.transitions.push(e)}function NBe(t,e){t.states.splice(t.states.indexOf(e),1)}var uf,mBe,uoe,hoe,Jg,gBe,yBe,vBe,xBe,foe,bx,Qg,wx,Zg,yoe=N(()=>{"use strict";Im();DL();cf();o(fp,"buildATNKey");uf=1,mBe=2,uoe=4,hoe=5,Jg=7,gBe=8,yBe=9,vBe=10,xBe=11,foe=12,bx=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},Qg=class extends bx{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},wx=class extends bx{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},Zg=class extends bx{static{o(this,"RuleTransition")}constructor(e,r,n){super(e),this.rule=r,this.followState=n}isEpsilon(){return!0}};o(doe,"createATN");o(bBe,"createRuleStartAndStopATNStates");o(poe,"atom");o(wBe,"repetition");o(TBe,"repetitionSep");o(kBe,"repetitionMandatory");o(EBe,"repetitionMandatorySep");o(SBe,"alternation");o(CBe,"option");o(dp,"block");o(moe,"plus");o(goe,"star");o(ABe,"optional");o(hf,"defineDecisionState");o(e1,"makeAlts");o(_Be,"getProdType");o(DBe,"makeBlock");o(QN,"tokenRef");o(LBe,"ruleRef");o(RBe,"buildRuleHandle");o(Ai,"epsilon");o(aa,"newState");o(ZN,"addTransition");o(NBe,"removeState")});function JN(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var Tx,t1,voe=N(()=>{"use strict";Im();Tx={},t1=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=JN(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return Je(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(JN,"getATNConfigKey")});function MBe(t,e){let r={};return n=>{let i=n.toString(),a=r[i];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[i]=a),a}}function boe(t,e=!0){let r=new Set;for(let n of t){let i=new Set;for(let a of n){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!i.has(l))return!1}else r.add(l),i.add(l)}}return!0}function IBe(t){let e=t.decisionStates.length,r=Array(e);for(let n=0;n<e;n++)r[n]=MBe(t.decisionStates[n],n);return r}function eM(t,e,r,n){let i=t[e](r),a=i.start;if(a===void 0){let l=WBe(i.atnStartState);a=koe(i,Toe(l)),i.start=a}return OBe.apply(this,[i,a,r,n])}function OBe(t,e,r,n){let i=e,a=1,s=[],l=this.LA(a++);for(;;){let u=GBe(i,l);if(u===void 0&&(u=PBe.apply(this,[t,i,l,a,r,n])),u===Tx)return zBe(s,i,l);if(u.isAcceptState===!0)return u.prediction;i=u,s.push(l),l=this.LA(a++)}}function PBe(t,e,r,n,i,a){let s=VBe(e.configs,r,i);if(s.size===0)return woe(t,e,r,Tx),Tx;let l=Toe(s),u=HBe(s,i);if(u!==void 0)l.isAcceptState=!0,l.prediction=u,l.configs.uniqueAlt=u;else if(jBe(s)){let h=Dl(s.alts);l.isAcceptState=!0,l.prediction=h,l.configs.uniqueAlt=h,BBe.apply(this,[t,n,s.alts,a])}return l=woe(t,e,r,l),l}function BBe(t,e,r,n){let i=[];for(let h=1;h<=e;h++)i.push(this.LA(h).tokenType);let a=t.atnStartState,s=a.rule,l=a.production,u=FBe({topLevelRule:s,ambiguityIndices:r,production:l,prefixPath:i});n(u)}function FBe(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.production.idx===0?"":t.production.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${$Be(t.production)}${r}> inside <${t.topLevelRule.name}> Rule, | |
| 801 | +<${e}> may appears as a prefix path in all these alternatives. | |
| 802 | +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES | |
| 803 | +For Further details.`,n}function $Be(t){if(t instanceof on)return"SUBRULE";if(t instanceof ln)return"OPTION";if(t instanceof Tn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Rn)return"AT_LEAST_ONE_SEP";if(t instanceof wn)return"MANY_SEP";if(t instanceof Or)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}function zBe(t,e,r){let n=ya(e.configs.elements,a=>a.state.transitions),i=Qre(n.filter(a=>a instanceof Qg).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:i,tokenPath:t}}function GBe(t,e){return t.edges[e.tokenTypeIdx]}function VBe(t,e,r){let n=new t1,i=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===Jg){i.push(s);continue}let l=s.state.transitions.length;for(let u=0;u<l;u++){let h=s.state.transitions[u],f=UBe(h,e);f!==void 0&&n.add({state:f,alt:s.alt,stack:s.stack})}}let a;if(i.length===0&&n.size===1&&(a=n),a===void 0){a=new t1;for(let s of n.elements)uE(s,a)}if(i.length>0&&!YBe(a))for(let s of i)a.add(s);return a}function UBe(t,e){if(t instanceof Qg&&sx(e,t.tokenType))return t.target}function HBe(t,e){let r;for(let n of t.elements)if(e.is(n.alt)===!0){if(r===void 0)r=n.alt;else if(r!==n.alt)return}return r}function Toe(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function woe(t,e,r,n){return n=koe(t,n),e.edges[r.tokenTypeIdx]=n,n}function koe(t,e){if(e===Tx)return e;let r=e.configs.key,n=t.states[r];return n!==void 0?n:(e.configs.finalize(),t.states[r]=e,e)}function WBe(t){let e=new t1,r=t.transitions.length;for(let n=0;n<r;n++){let a={state:t.transitions[n].target,alt:n,stack:[]};uE(a,e)}return e}function uE(t,e){let r=t.state;if(r.type===Jg){if(t.stack.length>0){let i=[...t.stack],s={state:i.pop(),alt:t.alt,stack:i};uE(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let n=r.transitions.length;for(let i=0;i<n;i++){let a=r.transitions[i],s=qBe(t,a);s!==void 0&&uE(s,e)}}function qBe(t,e){if(e instanceof wx)return{state:e.target,alt:t.alt,stack:t.stack};if(e instanceof Zg){let r=[...t.stack,e.followState];return{state:e.target,alt:t.alt,stack:r}}}function YBe(t){for(let e of t.elements)if(e.state.type===Jg)return!0;return!1}function XBe(t){for(let e of t.elements)if(e.state.type!==Jg)return!1;return!0}function jBe(t){if(XBe(t))return!0;let e=KBe(t.elements);return QBe(e)&&!ZBe(e)}function KBe(t){let e=new Map;for(let r of t){let n=JN(r,!1),i=e.get(n);i===void 0&&(i={},e.set(n,i)),i[r.alt]=!0}return e}function QBe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length>1)return!0;return!1}function ZBe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var cE,xoe,kx,Eoe=N(()=>{"use strict";cf();yoe();voe();BL();RL();Zre();Im();uT();$T();HT();GL();o(MBe,"createDFACache");cE=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let n=0;n<r;n++)e+=this.predicates[n]===!0?"1":"0";return e}},xoe=new cE,kx=class extends Gu{static{o(this,"LLStarLookaheadStrategy")}constructor(e){var r;super(),this.logging=(r=e?.logging)!==null&&r!==void 0?r:n=>console.log(n)}initialize(e){this.atn=doe(e.rules),this.dfas=IBe(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:n,hasPredicates:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=fp(n,"Alternation",r),f=this.atn.decisionMap[u].decision,d=Je(Gk({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:n}),p=>Je(p,m=>m[0]));if(boe(d,!1)&&!a){let p=Xr(d,(m,g,y)=>(Ae(g,v=>{v&&(m[v.tokenTypeIdx]=y,Ae(v.categoryMatches,x=>{m[x]=y}))}),m),{});return i?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return i?function(p){let m=new cE,g=p===void 0?0:p.length;for(let v=0;v<g;v++){let x=p?.[v].GATE;m.set(v,x===void 0||x.call(this))}let y=eM.call(this,s,f,m,l);return typeof y=="number"?y:void 0}:function(){let p=eM.call(this,s,f,xoe,l);return typeof p=="number"?p:void 0}}buildLookaheadForOptional(e){let{prodOccurrence:r,rule:n,prodType:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=fp(n,i,r),f=this.atn.decisionMap[u].decision,d=Je(Gk({maxLookahead:1,occurrence:r,prodType:i,rule:n}),p=>Je(p,m=>m[0]));if(boe(d)&&d[0][0]&&!a){let p=d[0],m=qr(p);if(m.length===1&&ur(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=Xr(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Ae(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=eM.call(this,s,f,xoe,l);return typeof p=="object"?!1:p===0}}};o(boe,"isLL1Sequence");o(IBe,"initATNSimulator");o(eM,"adaptivePredict");o(OBe,"performLookahead");o(PBe,"computeLookaheadTarget");o(BBe,"reportLookaheadAmbiguity");o(FBe,"buildAmbiguityError");o($Be,"getProductionDslName");o(zBe,"buildAdaptivePredictError");o(GBe,"getExistingTargetState");o(VBe,"computeReachSet");o(UBe,"getReachableTarget");o(HBe,"getUniqueAlt");o(Toe,"newDFAState");o(woe,"addDFAEdge");o(koe,"addDFAState");o(WBe,"computeStartState");o(uE,"closure");o(qBe,"getEpsilonTarget");o(YBe,"hasConfigInRuleStopState");o(XBe,"allConfigsInRuleStopStates");o(jBe,"hasConflictTerminatingPrediction");o(KBe,"getConflictingAltSets");o(QBe,"hasConflictingAltSet");o(ZBe,"hasStateAssociatedWithOneAlt")});var Soe=N(()=>{"use strict";Eoe()});var Coe,tM,Aoe,hE,jr,Pr,fE,_oe,rM,Doe,Loe,Roe,Noe,nM,Moe,Ioe,Ooe,dE,r1,n1,iM,i1,Poe,aM,sM,oM,lM,cM,Boe,Foe,uM,$oe,hM,Ex,zoe,Goe,Voe,Uoe,Hoe,Woe,qoe,Yoe,pE,Xoe,joe,Koe,Qoe,Zoe,Joe,ele,tle,rle,nle,ile,mE,ale,sle,ole,lle,cle,ule,hle,fle,dle,ple,mle,gle,yle,fM,dM,vle,xle,ble,wle,Tle,kle,Ele,Sle,Cle,pM,Fe,mM=N(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(Coe||(Coe={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(tM||(tM={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(Aoe||(Aoe={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(hE||(hE={}));(function(t){function e(n,i){return n===Number.MAX_VALUE&&(n=hE.MAX_VALUE),i===Number.MAX_VALUE&&(i=hE.MAX_VALUE),{line:n,character:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.uinteger(i.line)&&Fe.uinteger(i.character)}o(r,"is"),t.is=r})(jr||(jr={}));(function(t){function e(n,i,a,s){if(Fe.uinteger(n)&&Fe.uinteger(i)&&Fe.uinteger(a)&&Fe.uinteger(s))return{start:jr.create(n,i),end:jr.create(a,s)};if(jr.is(n)&&jr.is(i))return{start:n,end:i};throw new Error(`Range#create called with invalid arguments[${n}, ${i}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&jr.is(i.start)&&jr.is(i.end)}o(r,"is"),t.is=r})(Pr||(Pr={}));(function(t){function e(n,i){return{uri:n,range:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&(Fe.string(i.uri)||Fe.undefined(i.uri))}o(r,"is"),t.is=r})(fE||(fE={}));(function(t){function e(n,i,a,s){return{targetUri:n,targetRange:i,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.targetRange)&&Fe.string(i.targetUri)&&Pr.is(i.targetSelectionRange)&&(Pr.is(i.originSelectionRange)||Fe.undefined(i.originSelectionRange))}o(r,"is"),t.is=r})(_oe||(_oe={}));(function(t){function e(n,i,a,s){return{red:n,green:i,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.numberRange(i.red,0,1)&&Fe.numberRange(i.green,0,1)&&Fe.numberRange(i.blue,0,1)&&Fe.numberRange(i.alpha,0,1)}o(r,"is"),t.is=r})(rM||(rM={}));(function(t){function e(n,i){return{range:n,color:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&rM.is(i.color)}o(r,"is"),t.is=r})(Doe||(Doe={}));(function(t){function e(n,i,a){return{label:n,textEdit:i,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.string(i.label)&&(Fe.undefined(i.textEdit)||n1.is(i))&&(Fe.undefined(i.additionalTextEdits)||Fe.typedArray(i.additionalTextEdits,n1.is))}o(r,"is"),t.is=r})(Loe||(Loe={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(Roe||(Roe={}));(function(t){function e(n,i,a,s,l,u){let h={startLine:n,endLine:i};return Fe.defined(a)&&(h.startCharacter=a),Fe.defined(s)&&(h.endCharacter=s),Fe.defined(l)&&(h.kind=l),Fe.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.uinteger(i.startLine)&&Fe.uinteger(i.startLine)&&(Fe.undefined(i.startCharacter)||Fe.uinteger(i.startCharacter))&&(Fe.undefined(i.endCharacter)||Fe.uinteger(i.endCharacter))&&(Fe.undefined(i.kind)||Fe.string(i.kind))}o(r,"is"),t.is=r})(Noe||(Noe={}));(function(t){function e(n,i){return{location:n,message:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&fE.is(i.location)&&Fe.string(i.message)}o(r,"is"),t.is=r})(nM||(nM={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(Moe||(Moe={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(Ioe||(Ioe={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&Fe.string(n.href)}o(e,"is"),t.is=e})(Ooe||(Ooe={}));(function(t){function e(n,i,a,s,l,u){let h={range:n,message:i};return Fe.defined(a)&&(h.severity=a),Fe.defined(s)&&(h.code=s),Fe.defined(l)&&(h.source=l),Fe.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(n){var i;let a=n;return Fe.defined(a)&&Pr.is(a.range)&&Fe.string(a.message)&&(Fe.number(a.severity)||Fe.undefined(a.severity))&&(Fe.integer(a.code)||Fe.string(a.code)||Fe.undefined(a.code))&&(Fe.undefined(a.codeDescription)||Fe.string((i=a.codeDescription)===null||i===void 0?void 0:i.href))&&(Fe.string(a.source)||Fe.undefined(a.source))&&(Fe.undefined(a.relatedInformation)||Fe.typedArray(a.relatedInformation,nM.is))}o(r,"is"),t.is=r})(dE||(dE={}));(function(t){function e(n,i,...a){let s={title:n,command:i};return Fe.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.title)&&Fe.string(i.command)}o(r,"is"),t.is=r})(r1||(r1={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function n(a){return{range:a,newText:""}}o(n,"del"),t.del=n;function i(a){let s=a;return Fe.objectLiteral(s)&&Fe.string(s.newText)&&Pr.is(s.range)}o(i,"is"),t.is=i})(n1||(n1={}));(function(t){function e(n,i,a){let s={label:n};return i!==void 0&&(s.needsConfirmation=i),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.string(i.label)&&(Fe.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(Fe.string(i.description)||i.description===void 0)}o(r,"is"),t.is=r})(iM||(iM={}));(function(t){function e(r){let n=r;return Fe.string(n)}o(e,"is"),t.is=e})(i1||(i1={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function n(a,s){return{range:a,newText:"",annotationId:s}}o(n,"del"),t.del=n;function i(a){let s=a;return n1.is(s)&&(iM.is(s.annotationId)||i1.is(s.annotationId))}o(i,"is"),t.is=i})(Poe||(Poe={}));(function(t){function e(n,i){return{textDocument:n,edits:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&uM.is(i.textDocument)&&Array.isArray(i.edits)}o(r,"is"),t.is=r})(aM||(aM={}));(function(t){function e(n,i,a){let s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="create"&&Fe.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||Fe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Fe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(sM||(sM={}));(function(t){function e(n,i,a,s){let l={kind:"rename",oldUri:n,newUri:i};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="rename"&&Fe.string(i.oldUri)&&Fe.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||Fe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Fe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(oM||(oM={}));(function(t){function e(n,i,a){let s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="delete"&&Fe.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||Fe.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||Fe.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(lM||(lM={}));(function(t){function e(r){let n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(i=>Fe.string(i.kind)?sM.is(i)||oM.is(i)||lM.is(i):aM.is(i)))}o(e,"is"),t.is=e})(cM||(cM={}));(function(t){function e(n){return{uri:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)}o(r,"is"),t.is=r})(Boe||(Boe={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&Fe.integer(i.version)}o(r,"is"),t.is=r})(Foe||(Foe={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&(i.version===null||Fe.integer(i.version))}o(r,"is"),t.is=r})(uM||(uM={}));(function(t){function e(n,i,a,s){return{uri:n,languageId:i,version:a,text:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&Fe.string(i.languageId)&&Fe.integer(i.version)&&Fe.string(i.text)}o(r,"is"),t.is=r})($oe||($oe={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let n=r;return n===t.PlainText||n===t.Markdown}o(e,"is"),t.is=e})(hM||(hM={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(r)&&hM.is(n.kind)&&Fe.string(n.value)}o(e,"is"),t.is=e})(Ex||(Ex={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(zoe||(zoe={}));(function(t){t.PlainText=1,t.Snippet=2})(Goe||(Goe={}));(function(t){t.Deprecated=1})(Voe||(Voe={}));(function(t){function e(n,i,a){return{newText:n,insert:i,replace:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.newText)&&Pr.is(i.insert)&&Pr.is(i.replace)}o(r,"is"),t.is=r})(Uoe||(Uoe={}));(function(t){t.asIs=1,t.adjustIndentation=2})(Hoe||(Hoe={}));(function(t){function e(r){let n=r;return n&&(Fe.string(n.detail)||n.detail===void 0)&&(Fe.string(n.description)||n.description===void 0)}o(e,"is"),t.is=e})(Woe||(Woe={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(qoe||(qoe={}));(function(t){function e(r,n){return{items:r||[],isIncomplete:!!n}}o(e,"create"),t.create=e})(Yoe||(Yoe={}));(function(t){function e(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(n){let i=n;return Fe.string(i)||Fe.objectLiteral(i)&&Fe.string(i.language)&&Fe.string(i.value)}o(r,"is"),t.is=r})(pE||(pE={}));(function(t){function e(r){let n=r;return!!n&&Fe.objectLiteral(n)&&(Ex.is(n.contents)||pE.is(n.contents)||Fe.typedArray(n.contents,pE.is))&&(r.range===void 0||Pr.is(r.range))}o(e,"is"),t.is=e})(Xoe||(Xoe={}));(function(t){function e(r,n){return n?{label:r,documentation:n}:{label:r}}o(e,"create"),t.create=e})(joe||(joe={}));(function(t){function e(r,n,...i){let a={label:r};return Fe.defined(n)&&(a.documentation=n),Fe.defined(i)?a.parameters=i:a.parameters=[],a}o(e,"create"),t.create=e})(Koe||(Koe={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(Qoe||(Qoe={}));(function(t){function e(r,n){let i={range:r};return Fe.number(n)&&(i.kind=n),i}o(e,"create"),t.create=e})(Zoe||(Zoe={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(Joe||(Joe={}));(function(t){t.Deprecated=1})(ele||(ele={}));(function(t){function e(r,n,i,a,s){let l={name:r,kind:n,location:{uri:a,range:i}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(tle||(tle={}));(function(t){function e(r,n,i,a){return a!==void 0?{name:r,kind:n,location:{uri:i,range:a}}:{name:r,kind:n,location:{uri:i}}}o(e,"create"),t.create=e})(rle||(rle={}));(function(t){function e(n,i,a,s,l,u){let h={name:n,detail:i,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.name)&&Fe.number(i.kind)&&Pr.is(i.range)&&Pr.is(i.selectionRange)&&(i.detail===void 0||Fe.string(i.detail))&&(i.deprecated===void 0||Fe.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}o(r,"is"),t.is=r})(nle||(nle={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(ile||(ile={}));(function(t){t.Invoked=1,t.Automatic=2})(mE||(mE={}));(function(t){function e(n,i,a){let s={diagnostics:n};return i!=null&&(s.only=i),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.typedArray(i.diagnostics,dE.is)&&(i.only===void 0||Fe.typedArray(i.only,Fe.string))&&(i.triggerKind===void 0||i.triggerKind===mE.Invoked||i.triggerKind===mE.Automatic)}o(r,"is"),t.is=r})(ale||(ale={}));(function(t){function e(n,i,a){let s={title:n},l=!0;return typeof i=="string"?(l=!1,s.kind=i):r1.is(i)?s.command=i:s.edit=i,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.title)&&(i.diagnostics===void 0||Fe.typedArray(i.diagnostics,dE.is))&&(i.kind===void 0||Fe.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||r1.is(i.command))&&(i.isPreferred===void 0||Fe.boolean(i.isPreferred))&&(i.edit===void 0||cM.is(i.edit))}o(r,"is"),t.is=r})(sle||(sle={}));(function(t){function e(n,i){let a={range:n};return Fe.defined(i)&&(a.data=i),a}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(i.range)&&(Fe.undefined(i.command)||r1.is(i.command))}o(r,"is"),t.is=r})(ole||(ole={}));(function(t){function e(n,i){return{tabSize:n,insertSpaces:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.uinteger(i.tabSize)&&Fe.boolean(i.insertSpaces)}o(r,"is"),t.is=r})(lle||(lle={}));(function(t){function e(n,i,a){return{range:n,target:i,data:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(i.range)&&(Fe.undefined(i.target)||Fe.string(i.target))}o(r,"is"),t.is=r})(cle||(cle={}));(function(t){function e(n,i){return{range:n,parent:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&(i.parent===void 0||t.is(i.parent))}o(r,"is"),t.is=r})(ule||(ule={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(hle||(hle={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(fle||(fle={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&(n.resultId===void 0||typeof n.resultId=="string")&&Array.isArray(n.data)&&(n.data.length===0||typeof n.data[0]=="number")}o(e,"is"),t.is=e})(dle||(dle={}));(function(t){function e(n,i){return{range:n,text:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&Fe.string(i.text)}o(r,"is"),t.is=r})(ple||(ple={}));(function(t){function e(n,i,a){return{range:n,variableName:i,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&Fe.boolean(i.caseSensitiveLookup)&&(Fe.string(i.variableName)||i.variableName===void 0)}o(r,"is"),t.is=r})(mle||(mle={}));(function(t){function e(n,i){return{range:n,expression:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&(Fe.string(i.expression)||i.expression===void 0)}o(r,"is"),t.is=r})(gle||(gle={}));(function(t){function e(n,i){return{frameId:n,stoppedLocation:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(n.stoppedLocation)}o(r,"is"),t.is=r})(yle||(yle={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(fM||(fM={}));(function(t){function e(n){return{value:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&(i.tooltip===void 0||Fe.string(i.tooltip)||Ex.is(i.tooltip))&&(i.location===void 0||fE.is(i.location))&&(i.command===void 0||r1.is(i.command))}o(r,"is"),t.is=r})(dM||(dM={}));(function(t){function e(n,i,a){let s={position:n,label:i};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&jr.is(i.position)&&(Fe.string(i.label)||Fe.typedArray(i.label,dM.is))&&(i.kind===void 0||fM.is(i.kind))&&i.textEdits===void 0||Fe.typedArray(i.textEdits,n1.is)&&(i.tooltip===void 0||Fe.string(i.tooltip)||Ex.is(i.tooltip))&&(i.paddingLeft===void 0||Fe.boolean(i.paddingLeft))&&(i.paddingRight===void 0||Fe.boolean(i.paddingRight))}o(r,"is"),t.is=r})(vle||(vle={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})(xle||(xle={}));(function(t){function e(r,n,i,a){return{insertText:r,filterText:n,range:i,command:a}}o(e,"create"),t.create=e})(ble||(ble={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(wle||(wle={}));(function(t){t.Invoked=0,t.Automatic=1})(Tle||(Tle={}));(function(t){function e(r,n){return{range:r,text:n}}o(e,"create"),t.create=e})(kle||(kle={}));(function(t){function e(r,n){return{triggerKind:r,selectedCompletionInfo:n}}o(e,"create"),t.create=e})(Ele||(Ele={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&tM.is(n.uri)&&Fe.string(n.name)}o(e,"is"),t.is=e})(Sle||(Sle={}));(function(t){function e(a,s,l,u){return new pM(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!(Fe.defined(s)&&Fe.string(s.uri)&&(Fe.undefined(s.languageId)||Fe.string(s.languageId))&&Fe.uinteger(s.lineCount)&&Fe.func(s.getText)&&Fe.func(s.positionAt)&&Fe.func(s.offsetAt))}o(r,"is"),t.is=r;function n(a,s){let l=a.getText(),u=i(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(n,"applyEdits"),t.applyEdits=n;function i(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);i(u,s),i(h,s);let f=0,d=0,p=0;for(;f<u.length&&d<h.length;)s(u[f],h[d])<=0?a[p++]=u[f++]:a[p++]=h[d++];for(;f<u.length;)a[p++]=u[f++];for(;d<h.length;)a[p++]=h[d++];return a}o(i,"mergeSort")})(Cle||(Cle={}));pM=class{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){this._content=e.text,this._version=r,this._lineOffsets=void 0}getLineOffsets(){if(this._lineOffsets===void 0){let e=[],r=this._content,n=!0;for(let i=0;i<r.length;i++){n&&(e.push(i),n=!1);let a=r.charAt(i);n=a==="\r"||a===` | |
| 804 | +`,a==="\r"&&i+1<r.length&&r.charAt(i+1)===` | |
| 805 | +`&&i++}n&&r.length>0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return jr.create(0,e);for(;n<i;){let s=Math.floor((n+i)/2);r[s]>e?i=s:n=s+1}let a=n-1;return jr.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line],i=e.line+1<r.length?r[e.line+1]:this._content.length;return Math.max(Math.min(n+e.character,i),n)}get lineCount(){return this.getLineOffsets().length}};(function(t){let e=Object.prototype.toString;function r(m){return typeof m<"u"}o(r,"defined"),t.defined=r;function n(m){return typeof m>"u"}o(n,"undefined"),t.undefined=n;function i(m){return m===!0||m===!1}o(i,"boolean"),t.boolean=i;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})(Fe||(Fe={}))});var Sx,Cx,pp,mp,gM,a1,gE=N(()=>{"use strict";mM();Nl();Sx=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){var e;return(e=this.nodeStack[this.nodeStack.length-1])!==null&&e!==void 0?e:this.rootNode}buildRootNode(e){return this.rootNode=new a1(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new mp;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let n=new pp(e.startOffset,e.image.length,Gm(e),e.tokenType,!r);return n.grammarSource=r,n.root=this.rootNode,this.current.content.push(n),n}removeNode(e){let r=e.container;if(r){let n=r.content.indexOf(e);n>=0&&r.content.splice(n,1)}}addHiddenNodes(e){let r=[];for(let a of e){let s=new pp(a.startOffset,a.image.length,Gm(a),a.tokenType,!0);s.root=this.rootNode,r.push(s)}let n=this.current,i=!1;if(n.content.length>0){n.content.push(...r);return}for(;n.container;){let a=n.container.content.indexOf(n);if(a>0){n.container.content.splice(a,0,...r),i=!0;break}n=n.container}i||this.rootNode.content.unshift(...r)}construct(e){let r=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=r;let n=this.nodeStack.pop();n?.content.length===0&&this.removeNode(n)}},Cx=class{static{o(this,"AbstractCstNode")}get parent(){return this.container}get feature(){return this.grammarSource}get hidden(){return!1}get astNode(){var e,r;let n=typeof((e=this._astNode)===null||e===void 0?void 0:e.$type)=="string"?this._astNode:(r=this.container)===null||r===void 0?void 0:r.astNode;if(!n)throw new Error("This node has no associated AST element");return n}set astNode(e){this._astNode=e}get element(){return this.astNode}get text(){return this.root.fullText.substring(this.offset,this.end)}},pp=class extends Cx{static{o(this,"LeafCstNodeImpl")}get offset(){return this._offset}get length(){return this._length}get end(){return this._offset+this._length}get hidden(){return this._hidden}get tokenType(){return this._tokenType}get range(){return this._range}constructor(e,r,n,i,a=!1){super(),this._hidden=a,this._offset=e,this._tokenType=i,this._length=r,this._range=n}},mp=class extends Cx{static{o(this,"CompositeCstNodeImpl")}constructor(){super(...arguments),this.content=new gM(this)}get children(){return this.content}get offset(){var e,r;return(r=(e=this.firstNonHiddenNode)===null||e===void 0?void 0:e.offset)!==null&&r!==void 0?r:0}get length(){return this.end-this.offset}get end(){var e,r;return(r=(e=this.lastNonHiddenNode)===null||e===void 0?void 0:e.end)!==null&&r!==void 0?r:0}get range(){let e=this.firstNonHiddenNode,r=this.lastNonHiddenNode;if(e&&r){if(this._rangeCache===void 0){let{range:n}=e,{range:i}=r;this._rangeCache={start:n.start,end:i.end.line<n.start.line?n.start:i.end}}return this._rangeCache}else return{start:jr.create(0,0),end:jr.create(0,0)}}get firstNonHiddenNode(){for(let e of this.content)if(!e.hidden)return e;return this.content[0]}get lastNonHiddenNode(){for(let e=this.content.length-1;e>=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},gM=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...n){return this.addParents(n),super.splice(e,r,...n)}addParents(e){for(let r of e)r.container=this.parent}},a1=class extends mp{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function yM(t){return t.$type===yE}var yE,Ale,_le,Ax,_x,vE,s1,Dx,JBe,vM,Lx=N(()=>{"use strict";cf();Soe();Rc();Ol();is();gE();yE=Symbol("Datatype");o(yM,"isDataTypeNode");Ale="\u200B",_le=o(t=>t.endsWith(Ale)?t:t+Ale,"withRuleSuffix"),Ax=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.allRules=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition,n=e.LanguageMetaData.mode==="production";this.wrapper=new vM(r,Object.assign(Object.assign({},e.parser.ParserConfig),{skipValidations:n,errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}getRule(e){return this.allRules.get(e)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},_x=class extends Ax{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new Sx,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let n=this.computeRuleType(e),i=this.wrapper.DEFINE_RULE(_le(e.name),this.startImplementation(n,r).bind(this));return this.allRules.set(e.name,i),e.entry&&(this.mainRule=i),i}computeRuleType(e){if(!e.fragment){if(Z2(e))return yE;{let r=Rg(e);return r??e.name}}}parse(e,r={}){this.nodeBuilder.buildRootNode(e);let n=this.lexerResult=this.lexer.tokenize(e);this.wrapper.input=n.tokens;let i=r.rule?this.allRules.get(r.rule):this.mainRule;if(!i)throw new Error(r.rule?`No rule found with name '${r.rule}'`:"No main rule available.");let a=i.call(this.wrapper,{});return this.nodeBuilder.addHiddenNodes(n.hidden),this.unorderedGroups.clear(),this.lexerResult=void 0,{value:a,lexerErrors:n.errors,lexerReport:n.report,parserErrors:this.wrapper.errors}}startImplementation(e,r){return n=>{let i=!this.isRecording()&&e!==void 0;if(i){let s={$type:e};this.stack.push(s),e===yE&&(s.value="")}let a;try{a=r(n)}catch{a=void 0}return a===void 0&&i&&(a=this.construct()),a}}extractHiddenTokens(e){let r=this.lexerResult.hidden;if(!r.length)return[];let n=e.startOffset;for(let i=0;i<r.length;i++)if(r[i].startOffset>n)return r.splice(0,i);return r.splice(0,r.length)}consume(e,r,n){let i=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(i)){let a=this.extractHiddenTokens(i);this.nodeBuilder.addHiddenNodes(a);let s=this.nodeBuilder.buildLeafNode(i,n),{assignment:l,isCrossRef:u}=this.getAssignment(n),h=this.current;if(l){let f=Ho(n)?i.image:this.converter.convert(i.image,s);this.assign(l.operator,l.feature,f,s,u)}else if(yM(h)){let f=i.image;Ho(n)||(f=this.converter.convert(f,s).toString()),h.value+=f}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,n,i,a){let s;!this.isRecording()&&!n&&(s=this.nodeBuilder.buildCompositeNode(i));let l=this.wrapper.wrapSubrule(e,r,a);!this.isRecording()&&s&&s.length>0&&this.performSubruleAssignment(l,i,s)}performSubruleAssignment(e,r,n){let{assignment:i,isCrossRef:a}=this.getAssignment(r);if(i)this.assign(i.operator,i.feature,e,n,a);else if(!i){let s=this.current;if(yM(s))s.value+=e.toString();else if(typeof e=="object"&&e){let u=this.assignWithoutOverride(e,s);this.stack.pop(),this.stack.push(u)}}}action(e,r){if(!this.isRecording()){let n=this.current;if(r.feature&&r.operator){n=this.construct(),this.nodeBuilder.removeNode(n.$cstNode),this.nodeBuilder.buildCompositeNode(r).content.push(n.$cstNode);let a={$type:e};this.stack.push(a),this.assign(r.operator,r.feature,n,n.$cstNode,!1)}else n.$type=e}}construct(){if(this.isRecording())return;let e=this.current;return vk(e),this.nodeBuilder.construct(e),this.stack.pop(),yM(e)?this.converter.convert(e.value,e.$cstNode):(XR(this.astReflection,e),e)}getAssignment(e){if(!this.assignmentMap.has(e)){let r=tp(e,Ml);this.assignmentMap.set(e,{assignment:r,isCrossRef:r?ep(r.terminal):!1})}return this.assignmentMap.get(e)}assign(e,r,n,i,a){let s=this.current,l;switch(a&&typeof n=="string"?l=this.linker.buildReference(s,r,i,n):l=n,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[i,a]of Object.entries(r)){let s=e[i];s===void 0?e[i]=a:Array.isArray(s)&&Array.isArray(a)&&(a.push(...s),e[i]=a)}let n=e.$cstNode;return n&&(n.astNode=void 0,e.$cstNode=void 0),e}get definitionErrors(){return this.wrapper.definitionErrors}},vE=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return zu.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return zu.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return zu.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return zu.buildEarlyExitMessage(e)}},s1=class extends vE{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},Dx=class extends Ax{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e,{mode:"partial"});return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let n=this.wrapper.DEFINE_RULE(_le(e.name),this.startImplementation(r).bind(this));return this.allRules.set(e.name,n),e.entry&&(this.mainRule=n),n}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let n=this.keepStackSize();try{e(r)}finally{this.resetStackSize(n)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,n){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,n],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,n,i,a){this.before(i),this.wrapper.wrapSubrule(e,r,a),this.after(i)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},JBe={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new s1},vM=class extends xx{static{o(this,"ChevrotainWrapper")}constructor(e,r){let n=r&&"maxLookahead"in r;super(e,Object.assign(Object.assign(Object.assign({},JBe),{lookaheadStrategy:n?new Gu({maxLookahead:r.maxLookahead}):new kx({logging:r.skipValidations?()=>{}:void 0})}),r))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r){return this.RULE(e,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r)}wrapSubrule(e,r,n){return this.subrule(e,r,{ARGS:[n]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}}});function Rx(t,e,r){return eFe({parser:e,tokens:r,ruleNames:new Map},t),e}function eFe(t,e){let r=K2(e,!1),n=en(e.rules).filter(Oa).filter(i=>r.has(i));for(let i of n){let a=Object.assign(Object.assign({},t),{consume:1,optional:1,subrule:1,many:1,or:1});t.parser.rule(i,gp(a,i.definition))}}function gp(t,e,r=!1){let n;if(Ho(e))n=oFe(t,e);else if(Mu(e))n=tFe(t,e);else if(Ml(e))n=gp(t,e.terminal);else if(ep(e))n=Dle(t,e);else if(Il(e))n=rFe(t,e);else if(mk(e))n=iFe(t,e);else if(yk(e))n=aFe(t,e);else if(sf(e))n=sFe(t,e);else if($R(e)){let i=t.consume++;n=o(()=>t.parser.consume(i,lo,e),"method")}else throw new Zd(e.$cstNode,`Unexpected element type: ${e.$type}`);return Lle(t,r?void 0:xE(e),n,e.cardinality)}function tFe(t,e){let r=J2(e);return()=>t.parser.action(r,e)}function rFe(t,e){let r=e.rule.ref;if(Oa(r)){let n=t.subrule++,i=r.fragment,a=e.arguments.length>0?nFe(r,e.arguments):()=>({});return s=>t.parser.subrule(n,Rle(t,r),i,e,a(s))}else if(so(r)){let n=t.consume++,i=xM(t,r.name);return()=>t.parser.consume(n,i,e)}else if(r)Lc(r);else throw new Zd(e.$cstNode,`Undefined rule: ${e.rule.$refText}`)}function nFe(t,e){let r=e.map(n=>Vu(n.value));return n=>{let i={};for(let a=0;a<r.length;a++){let s=t.parameters[a],l=r[a];i[s.name]=l(n)}return i}}function Vu(t){if(NR(t)){let e=Vu(t.left),r=Vu(t.right);return n=>e(n)||r(n)}else if(RR(t)){let e=Vu(t.left),r=Vu(t.right);return n=>e(n)&&r(n)}else if(MR(t)){let e=Vu(t.value);return r=>!e(r)}else if(IR(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(LR(t)){let e=!!t.true;return()=>e}Lc(t)}function iFe(t,e){if(e.elements.length===1)return gp(t,e.elements[0]);{let r=[];for(let i of e.elements){let a={ALT:gp(t,i,!0)},s=xE(i);s&&(a.GATE=Vu(s)),r.push(a)}let n=t.or++;return i=>t.parser.alternatives(n,r.map(a=>{let s={ALT:o(()=>a.ALT(i),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(i)),s}))}}function aFe(t,e){if(e.elements.length===1)return gp(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:gp(t,l,!0)},h=xE(l);h&&(u.GATE=Vu(h)),r.push(u)}let n=t.or++,i=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(n,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=i(n,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>{let m=d.unorderedGroups.get(i(n,d));return!m?.[h]},f})),"alternatives"),s=Lle(t,xE(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(i(n,t.parser))}}function sFe(t,e){let r=e.elements.map(n=>gp(t,n));return n=>r.forEach(i=>i(n))}function xE(t){if(sf(t))return t.guardCondition}function Dle(t,e,r=e.terminal){if(r)if(Il(r)&&Oa(r.rule.ref)){let n=r.rule.ref,i=t.subrule++;return a=>t.parser.subrule(i,Rle(t,n),!1,e,a)}else if(Il(r)&&so(r.rule.ref)){let n=t.consume++,i=xM(t,r.rule.ref.name);return()=>t.parser.consume(n,i,e)}else if(Ho(r)){let n=t.consume++,i=xM(t,r.value);return()=>t.parser.consume(n,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=kk(e.type.ref),i=n?.terminal;if(!i)throw new Error("Could not find name assignment for type: "+J2(e.type.ref));return Dle(t,e,i)}}function oFe(t,e){let r=t.consume++,n=t.tokens[e.value];if(!n)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,n,e)}function Lle(t,e,r,n){let i=e&&Vu(e);if(!n)if(i){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>i(s),"GATE")},{ALT:lE(),GATE:o(()=>!i(s),"GATE")}])}else return r;if(n==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else if(n==="+"){let a=t.many++;if(i){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>i(l),"GATE")},{ALT:lE(),GATE:o(()=>!i(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(n==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else Lc(n)}function Rle(t,e){let r=lFe(t,e),n=t.parser.getRule(r);if(!n)throw new Error(`Rule "${r}" not found."`);return n}function lFe(t,e){if(Oa(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,n=r.$container,i=e.$type;for(;!Oa(n);)(sf(n)||mk(n)||yk(n))&&(i=n.elements.indexOf(r).toString()+":"+i),r=n,n=n.$container;return i=n.name+":"+i,t.ruleNames.set(e,i),i}}function xM(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var bE=N(()=>{"use strict";cf();Rc();uk();Ps();Ol();o(Rx,"createParser");o(eFe,"buildRules");o(gp,"buildElement");o(tFe,"buildAction");o(rFe,"buildRuleCall");o(nFe,"buildRuleCallPredicate");o(Vu,"buildPredicate");o(iFe,"buildAlternatives");o(aFe,"buildUnorderedGroup");o(sFe,"buildGroup");o(xE,"getGuardCondition");o(Dle,"buildCrossReference");o(oFe,"buildKeyword");o(Lle,"wrap");o(Rle,"getRule");o(lFe,"getRuleName");o(xM,"getToken")});function bM(t){let e=t.Grammar,r=t.parser.Lexer,n=new Dx(t);return Rx(e,n,r.definition),n.finalize(),n}var wM=N(()=>{"use strict";Lx();bE();o(bM,"createCompletionParser")});function TM(t){let e=Nle(t);return e.finalize(),e}function Nle(t){let e=t.Grammar,r=t.parser.Lexer,n=new _x(t);return Rx(e,n,r.definition)}var kM=N(()=>{"use strict";Lx();bE();o(TM,"createLangiumParser");o(Nle,"prepareLangiumParser")});var Uu,wE=N(()=>{"use strict";cf();Rc();is();Ol();Lg();Ps();Uu=class{static{o(this,"DefaultTokenBuilder")}constructor(){this.diagnostics=[]}buildTokens(e,r){let n=en(K2(e,!1)),i=this.buildTerminalTokens(n),a=this.buildKeywordTokens(n,i,r);return i.forEach(s=>{let l=s.PATTERN;typeof l=="object"&&l&&"test"in l&&Dg(l)?a.unshift(s):a.push(s)}),a}flushLexingReport(e){return{diagnostics:this.popDiagnostics()}}popDiagnostics(){let e=[...this.diagnostics];return this.diagnostics=[],e}buildTerminalTokens(e){return e.filter(so).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=Ng(e),n=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,i={name:e.name,PATTERN:n};return typeof n=="function"&&(i.LINE_BREAKS=!0),e.hidden&&(i.GROUP=Dg(r)?Xn.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")||e.flags.includes("s")?!0:!!(e.source.includes("?<=")||e.source.includes("?<!"))}regexPatternFunction(e){let r=new RegExp(e,e.flags+"y");return(n,i)=>(r.lastIndex=i,r.exec(n))}buildKeywordTokens(e,r,n){return e.filter(Oa).flatMap(i=>Nc(i).filter(Ho)).distinct(i=>i.value).toArray().sort((i,a)=>a.value.length-i.value.length).map(i=>this.buildKeywordToken(i,r,!!n?.caseInsensitive))}buildKeywordToken(e,r,n){let i=this.buildKeywordPattern(e,n),a={name:e.value,PATTERN:i,LONGER_ALT:this.findLongerAlt(e,r)};return typeof i=="function"&&(a.LINE_BREAKS=!0),a}buildKeywordPattern(e,r){return r?new RegExp(tN(e.value)):e.value}findLongerAlt(e,r){return r.reduce((n,i)=>{let a=i?.PATTERN;return a?.source&&rN("^"+a.source+"$",e.value)&&n.push(i),n},[])}}});var yp,Oc,EM=N(()=>{"use strict";Rc();Ol();yp=class{static{o(this,"DefaultValueConverter")}convert(e,r){let n=r.grammarSource;if(ep(n)&&(n=aN(n)),Il(n)){let i=n.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,r)}return e}runConverter(e,r,n){var i;switch(e.name.toUpperCase()){case"INT":return Oc.convertInt(r);case"STRING":return Oc.convertString(r);case"ID":return Oc.convertID(r)}switch((i=fN(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return Oc.convertNumber(r);case"boolean":return Oc.convertBoolean(r);case"bigint":return Oc.convertBigint(r);case"date":return Oc.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d<h.length-1;d++){let p=h.charAt(d);if(p==="\\"){let m=h.charAt(++d);f+=r(m)}else f+=p}return f}o(e,"convertString"),t.convertString=e;function r(h){switch(h){case"b":return"\b";case"f":return"\f";case"n":return` | |
| 806 | +`;case"r":return"\r";case"t":return" ";case"v":return"\v";case"0":return"\0";default:return h}}o(r,"convertEscapeCharacter");function n(h){return h.charAt(0)==="^"?h.substring(1):h}o(n,"convertID"),t.convertID=n;function i(h){return parseInt(h)}o(i,"convertInt"),t.convertInt=i;function a(h){return BigInt(h)}o(a,"convertBigint"),t.convertBigint=a;function s(h){return new Date(h)}o(s,"convertDate"),t.convertDate=s;function l(h){return Number(h)}o(l,"convertNumber"),t.convertNumber=l;function u(h){return h.toLowerCase()==="true"}o(u,"convertBoolean"),t.convertBoolean=u})(Oc||(Oc={}))});var _M=Mi(AM=>{"use strict";Object.defineProperty(AM,"__esModule",{value:!0});var SM;function CM(){if(SM===void 0)throw new Error("No runtime abstraction layer installed");return SM}o(CM,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");SM=r}o(e,"install"),t.install=e})(CM||(CM={}));AM.default=CM});var Ole=Mi(Ba=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});Ba.stringArray=Ba.array=Ba.func=Ba.error=Ba.number=Ba.string=Ba.boolean=void 0;function cFe(t){return t===!0||t===!1}o(cFe,"boolean");Ba.boolean=cFe;function Mle(t){return typeof t=="string"||t instanceof String}o(Mle,"string");Ba.string=Mle;function uFe(t){return typeof t=="number"||t instanceof Number}o(uFe,"number");Ba.number=uFe;function hFe(t){return t instanceof Error}o(hFe,"error");Ba.error=hFe;function fFe(t){return typeof t=="function"}o(fFe,"func");Ba.func=fFe;function Ile(t){return Array.isArray(t)}o(Ile,"array");Ba.array=Ile;function dFe(t){return Ile(t)&&t.every(e=>Mle(e))}o(dFe,"stringArray");Ba.stringArray=dFe});var LM=Mi(o1=>{"use strict";Object.defineProperty(o1,"__esModule",{value:!0});o1.Emitter=o1.Event=void 0;var pFe=_M(),Ple;(function(t){let e={dispose(){}};t.None=function(){return e}})(Ple||(o1.Event=Ple={}));var DM=class{static{o(this,"CallbackList")}add(e,r=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(n)&&n.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let n=!1;for(let i=0,a=this._callbacks.length;i<a;i++)if(this._callbacks[i]===e)if(this._contexts[i]===r){this._callbacks.splice(i,1),this._contexts.splice(i,1);return}else n=!0;if(n)throw new Error("When adding a listener with a context, you should remove it with the same context")}invoke(...e){if(!this._callbacks)return[];let r=[],n=this._callbacks.slice(0),i=this._contexts.slice(0);for(let a=0,s=n.length;a<s;a++)try{r.push(n[a].apply(i[a],e))}catch(l){(0,pFe.default)().console.error(l)}return r}isEmpty(){return!this._callbacks||this._callbacks.length===0}dispose(){this._callbacks=void 0,this._contexts=void 0}},TE=class t{static{o(this,"Emitter")}constructor(e){this._options=e}get event(){return this._event||(this._event=(e,r,n)=>{this._callbacks||(this._callbacks=new DM),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let i={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),i.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(n)&&n.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};o1.Emitter=TE;TE._noop=function(){}});var Ble=Mi(l1=>{"use strict";Object.defineProperty(l1,"__esModule",{value:!0});l1.CancellationTokenSource=l1.CancellationToken=void 0;var mFe=_M(),gFe=Ole(),RM=LM(),kE;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:RM.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:RM.Event.None});function e(r){let n=r;return n&&(n===t.None||n===t.Cancelled||gFe.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}o(e,"is"),t.is=e})(kE||(l1.CancellationToken=kE={}));var yFe=Object.freeze(function(t,e){let r=(0,mFe.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),EE=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?yFe:(this._emitter||(this._emitter=new RM.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},NM=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new EE),this._token}cancel(){this._token?this._token.cancel():this._token=kE.Cancelled}dispose(){this._token?this._token instanceof EE&&this._token.dispose():this._token=kE.None}};l1.CancellationTokenSource=NM});var yr={};var qo=N(()=>{"use strict";Sr(yr,Sa(Ble(),1))});function MM(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function CE(){return SE=performance.now(),new yr.CancellationTokenSource}function $le(t){Fle=t}function Bc(t){return t===Pc}async function xi(t){if(t===yr.CancellationToken.None)return;let e=performance.now();if(e-SE>=Fle&&(SE=e,await MM(),SE=performance.now()),t.isCancellationRequested)throw Pc}var SE,Fle,Pc,cs,Yo=N(()=>{"use strict";qo();o(MM,"delayNextTick");SE=0,Fle=10;o(CE,"startCancelableOperation");o($le,"setInterruptionPeriod");Pc=Symbol("OperationCancelled");o(Bc,"isOperationCancelled");o(xi,"interruptAndCheck");cs=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=n=>(e(n),this),this.reject=n=>(r(n),this)})}}});function IM(t,e){if(t.length<=1)return t;let r=t.length/2|0,n=t.slice(0,r),i=t.slice(r);IM(n,e),IM(i,e);let a=0,s=0,l=0;for(;a<n.length&&s<i.length;)e(n[a],i[s])<=0?t[l++]=n[a++]:t[l++]=i[s++];for(;a<n.length;)t[l++]=n[a++];for(;s<i.length;)t[l++]=i[s++];return t}function zle(t,e,r=0){let n=e?[r]:[];for(let i=0;i<t.length;i++){let a=t.charCodeAt(i);Gle(a)&&(a===13&&i+1<t.length&&t.charCodeAt(i+1)===10&&i++,n.push(r+i+1))}return n}function Gle(t){return t===13||t===10}function Vle(t){let e=t.start,r=t.end;return e.line>r.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function vFe(t){let e=Vle(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var AE,c1,Ule=N(()=>{"use strict";AE=class t{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){for(let n of e)if(t.isIncremental(n)){let i=Vle(n.range),a=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(s,this._content.length);let l=Math.max(i.start.line,0),u=Math.max(i.end.line,0),h=this._lineOffsets,f=zle(n.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;p<m;p++)h[p+l+1]=f[p];else f.length<1e4?h.splice(l+1,u-l,...f):this._lineOffsets=h=h.slice(0,l+1).concat(f,h.slice(u+1));let d=n.text.length-(s-a);if(d!==0)for(let p=l+1+f.length,m=h.length;p<m;p++)h[p]=h[p]+d}else if(t.isFull(n))this._content=n.text,this._lineOffsets=void 0;else throw new Error("Unknown change event received");this._version=r}getLineOffsets(){return this._lineOffsets===void 0&&(this._lineOffsets=zle(this._content,!0)),this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return{line:0,character:e};for(;n<i;){let s=Math.floor((n+i)/2);r[s]>e?i=s:n=s+1}let a=n-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line];if(e.character<=0)return n;let i=e.line+1<r.length?r[e.line+1]:this._content.length,a=Math.min(n+e.character,i);return this.ensureBeforeEOL(a,n)}ensureBeforeEOL(e,r){for(;e>r&&Gle(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(i,a,s,l){return new AE(i,a,s,l)}o(e,"create"),t.create=e;function r(i,a,s){if(i instanceof AE)return i.update(a,s),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function n(i,a){let s=i.getText(),l=IM(a.map(vFe),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=i.offsetAt(f.range.start);if(d<u)throw new Error("Overlapping edit");d>u&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=i.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(n,"applyEdits"),t.applyEdits=n})(c1||(c1={}));o(IM,"mergeSort");o(zle,"computeLineOffsets");o(Gle,"isEOL");o(Vle,"getWellformedRange");o(vFe,"getWellformedEdit")});var Hle,us,u1,OM=N(()=>{"use strict";(()=>{"use strict";var t={470:i=>{function a(u){if(typeof u!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(u))}o(a,"e");function s(u,h){for(var f,d="",p=0,m=-1,g=0,y=0;y<=u.length;++y){if(y<u.length)f=u.charCodeAt(y);else{if(f===47)break;f=47}if(f===47){if(!(m===y-1||g===1))if(m!==y-1&&g===2){if(d.length<2||p!==2||d.charCodeAt(d.length-1)!==46||d.charCodeAt(d.length-2)!==46){if(d.length>2){var v=d.lastIndexOf("/");if(v!==d.length-1){v===-1?(d="",p=0):p=(d=d.slice(0,v)).length-1-d.lastIndexOf("/"),m=y,g=0;continue}}else if(d.length===2||d.length===1){d="",p=0,m=y,g=0;continue}}h&&(d.length>0?d+="/..":d="..",p=2)}else d.length>0?d+="/"+u.slice(m+1,y):d=u.slice(m+1,y),p=y-m-1;m=y,g=0}else f===46&&g!==-1?++g:g=-1}return d}o(s,"r");var l={resolve:o(function(){for(var u,h="",f=!1,d=arguments.length-1;d>=-1&&!f;d--){var p;d>=0?p=arguments[d]:(u===void 0&&(u=process.cwd()),p=u),a(p),p.length!==0&&(h=p+"/"+h,f=p.charCodeAt(0)===47)}return h=s(h,!f),f?h.length>0?"/"+h:"/":h.length>0?h:"."},"resolve"),normalize:o(function(u){if(a(u),u.length===0)return".";var h=u.charCodeAt(0)===47,f=u.charCodeAt(u.length-1)===47;return(u=s(u,!h)).length!==0||h||(u="."),u.length>0&&f&&(u+="/"),h?"/"+u:u},"normalize"),isAbsolute:o(function(u){return a(u),u.length>0&&u.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var u,h=0;h<arguments.length;++h){var f=arguments[h];a(f),f.length>0&&(u===void 0?u=f:u+="/"+f)}return u===void 0?".":l.normalize(u)},"join"),relative:o(function(u,h){if(a(u),a(h),u===h||(u=l.resolve(u))===(h=l.resolve(h)))return"";for(var f=1;f<u.length&&u.charCodeAt(f)===47;++f);for(var d=u.length,p=d-f,m=1;m<h.length&&h.charCodeAt(m)===47;++m);for(var g=h.length-m,y=p<g?p:g,v=-1,x=0;x<=y;++x){if(x===y){if(g>y){if(h.charCodeAt(m+x)===47)return h.slice(m+x+1);if(x===0)return h.slice(m+x)}else p>y&&(u.charCodeAt(f+x)===47?v=x:x===0&&(v=0));break}var b=u.charCodeAt(f+x);if(b!==h.charCodeAt(m+x))break;b===47&&(v=x)}var w="";for(x=f+v+1;x<=d;++x)x!==d&&u.charCodeAt(x)!==47||(w.length===0?w+="..":w+="/..");return w.length>0?w+h.slice(m+v):(m+=v,h.charCodeAt(m)===47&&++m,h.slice(m))},"relative"),_makeLong:o(function(u){return u},"_makeLong"),dirname:o(function(u){if(a(u),u.length===0)return".";for(var h=u.charCodeAt(0),f=h===47,d=-1,p=!0,m=u.length-1;m>=1;--m)if((h=u.charCodeAt(m))===47){if(!p){d=m;break}}else p=!1;return d===-1?f?"/":".":f&&d===1?"//":u.slice(0,d)},"dirname"),basename:o(function(u,h){if(h!==void 0&&typeof h!="string")throw new TypeError('"ext" argument must be a string');a(u);var f,d=0,p=-1,m=!0;if(h!==void 0&&h.length>0&&h.length<=u.length){if(h.length===u.length&&h===u)return"";var g=h.length-1,y=-1;for(f=u.length-1;f>=0;--f){var v=u.charCodeAt(f);if(v===47){if(!m){d=f+1;break}}else y===-1&&(m=!1,y=f+1),g>=0&&(v===h.charCodeAt(g)?--g==-1&&(p=f):(g=-1,p=y))}return d===p?p=y:p===-1&&(p=u.length),u.slice(d,p)}for(f=u.length-1;f>=0;--f)if(u.charCodeAt(f)===47){if(!m){d=f+1;break}}else p===-1&&(m=!1,p=f+1);return p===-1?"":u.slice(d,p)},"basename"),extname:o(function(u){a(u);for(var h=-1,f=0,d=-1,p=!0,m=0,g=u.length-1;g>=0;--g){var y=u.charCodeAt(g);if(y!==47)d===-1&&(p=!1,d=g+1),y===46?h===-1?h=g:m!==1&&(m=1):h!==-1&&(m=-1);else if(!p){f=g+1;break}}return h===-1||d===-1||m===0||m===1&&h===d-1&&h===f+1?"":u.slice(h,d)},"extname"),format:o(function(u){if(u===null||typeof u!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof u);return function(h,f){var d=f.dir||f.root,p=f.base||(f.name||"")+(f.ext||"");return d?d===f.root?d+p:d+"/"+p:p}(0,u)},"format"),parse:o(function(u){a(u);var h={root:"",dir:"",base:"",ext:"",name:""};if(u.length===0)return h;var f,d=u.charCodeAt(0),p=d===47;p?(h.root="/",f=1):f=0;for(var m=-1,g=0,y=-1,v=!0,x=u.length-1,b=0;x>=f;--x)if((d=u.charCodeAt(x))!==47)y===-1&&(v=!1,y=x+1),d===46?m===-1?m=x:b!==1&&(b=1):m!==-1&&(b=-1);else if(!v){g=x+1;break}return m===-1||y===-1||b===0||b===1&&m===y-1&&m===g+1?y!==-1&&(h.base=h.name=g===0&&p?u.slice(1,y):u.slice(g,y)):(g===0&&p?(h.name=u.slice(1,m),h.base=u.slice(1,y)):(h.name=u.slice(g,m),h.base=u.slice(g,y)),h.ext=u.slice(m,y)),g>0?h.dir=u.slice(0,g-1):p&&(h.dir="/"),h},"parse"),sep:"/",delimiter:":",win32:null,posix:null};l.posix=l,i.exports=l}},e={};function r(i){var a=e[i];if(a!==void 0)return a.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}o(r,"r"),r.d=(i,a)=>{for(var s in a)r.o(a,s)&&!r.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:a[s]})},r.o=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};(()=>{let i;r.r(n),r.d(n,{URI:o(()=>p,"URI"),Utils:o(()=>I,"Utils")}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(D,k){if(!D.scheme&&k)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${D.authority}", path: "${D.path}", query: "${D.query}", fragment: "${D.fragment}"}`);if(D.scheme&&!a.test(D.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(D.path){if(D.authority){if(!s.test(D.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(D.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"s");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"f")}static isUri(k){return k instanceof p||!!k&&typeof k.authority=="string"&&typeof k.fragment=="string"&&typeof k.path=="string"&&typeof k.query=="string"&&typeof k.scheme=="string"&&typeof k.fsPath=="string"&&typeof k.with=="function"&&typeof k.toString=="function"}scheme;authority;path;query;fragment;constructor(k,L,R,O,M,B=!1){typeof k=="object"?(this.scheme=k.scheme||h,this.authority=k.authority||h,this.path=k.path||h,this.query=k.query||h,this.fragment=k.fragment||h):(this.scheme=function(F,P){return F||P?F:"file"}(k,B),this.authority=L||h,this.path=function(F,P){switch(F){case"https":case"http":case"file":P?P[0]!==f&&(P=f+P):P=f}return P}(this.scheme,R||h),this.query=O||h,this.fragment=M||h,u(this,B))}get fsPath(){return b(this,!1)}with(k){if(!k)return this;let{scheme:L,authority:R,path:O,query:M,fragment:B}=k;return L===void 0?L=this.scheme:L===null&&(L=h),R===void 0?R=this.authority:R===null&&(R=h),O===void 0?O=this.path:O===null&&(O=h),M===void 0?M=this.query:M===null&&(M=h),B===void 0?B=this.fragment:B===null&&(B=h),L===this.scheme&&R===this.authority&&O===this.path&&M===this.query&&B===this.fragment?this:new g(L,R,O,M,B)}static parse(k,L=!1){let R=d.exec(k);return R?new g(R[2]||h,E(R[4]||h),E(R[5]||h),E(R[7]||h),E(R[9]||h),L):new g(h,h,h,h,h)}static file(k){let L=h;if(i&&(k=k.replace(/\\/g,f)),k[0]===f&&k[1]===f){let R=k.indexOf(f,2);R===-1?(L=k.substring(2),k=f):(L=k.substring(2,R),k=k.substring(R)||f)}return new g("file",L,k,h,h)}static from(k){let L=new g(k.scheme,k.authority,k.path,k.query,k.fragment);return u(L,!0),L}toString(k=!1){return w(this,k)}toJSON(){return this}static revive(k){if(k){if(k instanceof p)return k;{let L=new g(k);return L._formatted=k.external,L._fsPath=k._sep===m?k.fsPath:null,L}}return k}}let m=i?1:void 0;class g extends p{static{o(this,"l")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(k=!1){return k?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)}toJSON(){let k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=m),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(D,k,L){let R,O=-1;for(let M=0;M<D.length;M++){let B=D.charCodeAt(M);if(B>=97&&B<=122||B>=65&&B<=90||B>=48&&B<=57||B===45||B===46||B===95||B===126||k&&B===47||L&&B===91||L&&B===93||L&&B===58)O!==-1&&(R+=encodeURIComponent(D.substring(O,M)),O=-1),R!==void 0&&(R+=D.charAt(M));else{R===void 0&&(R=D.substr(0,M));let F=y[B];F!==void 0?(O!==-1&&(R+=encodeURIComponent(D.substring(O,M)),O=-1),R+=F):O===-1&&(O=M)}}return O!==-1&&(R+=encodeURIComponent(D.substring(O))),R!==void 0?R:D}o(v,"d");function x(D){let k;for(let L=0;L<D.length;L++){let R=D.charCodeAt(L);R===35||R===63?(k===void 0&&(k=D.substr(0,L)),k+=y[R]):k!==void 0&&(k+=D[L])}return k!==void 0?k:D}o(x,"p");function b(D,k){let L;return L=D.authority&&D.path.length>1&&D.scheme==="file"?`//${D.authority}${D.path}`:D.path.charCodeAt(0)===47&&(D.path.charCodeAt(1)>=65&&D.path.charCodeAt(1)<=90||D.path.charCodeAt(1)>=97&&D.path.charCodeAt(1)<=122)&&D.path.charCodeAt(2)===58?k?D.path.substr(1):D.path[1].toLowerCase()+D.path.substr(2):D.path,i&&(L=L.replace(/\//g,"\\")),L}o(b,"m");function w(D,k){let L=k?x:v,R="",{scheme:O,authority:M,path:B,query:F,fragment:P}=D;if(O&&(R+=O,R+=":"),(M||O==="file")&&(R+=f,R+=f),M){let z=M.indexOf("@");if(z!==-1){let $=M.substr(0,z);M=M.substr(z+1),z=$.lastIndexOf(":"),z===-1?R+=L($,!1,!1):(R+=L($.substr(0,z),!1,!1),R+=":",R+=L($.substr(z+1),!1,!0)),R+="@"}M=M.toLowerCase(),z=M.lastIndexOf(":"),z===-1?R+=L(M,!1,!0):(R+=L(M.substr(0,z),!1,!0),R+=M.substr(z))}if(B){if(B.length>=3&&B.charCodeAt(0)===47&&B.charCodeAt(2)===58){let z=B.charCodeAt(1);z>=65&&z<=90&&(B=`/${String.fromCharCode(z+32)}:${B.substr(3)}`)}else if(B.length>=2&&B.charCodeAt(1)===58){let z=B.charCodeAt(0);z>=65&&z<=90&&(B=`${String.fromCharCode(z+32)}:${B.substr(2)}`)}R+=L(B,!0,!1)}return F&&(R+="?",R+=L(F,!1,!1)),P&&(R+="#",R+=k?P:v(P,!1,!1)),R}o(w,"y");function C(D){try{return decodeURIComponent(D)}catch{return D.length>3?D.substr(0,3)+C(D.substr(3)):D}}o(C,"v");let T=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function E(D){return D.match(T)?D.replace(T,k=>C(k)):D}o(E,"C");var A=r(470);let S=A.posix||A,_="/";var I;(function(D){D.joinPath=function(k,...L){return k.with({path:S.join(k.path,...L)})},D.resolvePath=function(k,...L){let R=k.path,O=!1;R[0]!==_&&(R=_+R,O=!0);let M=S.resolve(R,...L);return O&&M[0]===_&&!k.authority&&(M=M.substring(1)),k.with({path:M})},D.dirname=function(k){if(k.path.length===0||k.path===_)return k;let L=S.dirname(k.path);return L.length===1&&L.charCodeAt(0)===46&&(L=""),k.with({path:L})},D.basename=function(k){return S.basename(k.path)},D.extname=function(k){return S.extname(k.path)}})(I||(I={}))})(),Hle=n})();({URI:us,Utils:u1}=Hle)});var hs,Fc=N(()=>{"use strict";OM();(function(t){t.basename=u1.basename,t.dirname=u1.dirname,t.extname=u1.extname,t.joinPath=u1.joinPath,t.resolvePath=u1.resolvePath;function e(i,a){return i?.toString()===a?.toString()}o(e,"equals"),t.equals=e;function r(i,a){let s=typeof i=="string"?i:i.path,l=typeof a=="string"?a:a.path,u=s.split("/").filter(m=>m.length>0),h=l.split("/").filter(m=>m.length>0),f=0;for(;f<u.length&&u[f]===h[f];f++);let d="../".repeat(u.length-f),p=h.slice(f).join("/");return d+p}o(r,"relative"),t.relative=r;function n(i){return us.parse(i.toString()).toString()}o(n,"normalize"),t.normalize=n})(hs||(hs={}))});var kn,Nx,Mx,h1=N(()=>{"use strict";Ule();h1();qo();Ps();Fc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(kn||(kn={}));Nx=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=yr.CancellationToken.None){let n=await this.fileSystemProvider.readFile(e);return this.createAsync(e,n,r)}fromTextDocument(e,r,n){return r=r??us.parse(e.uri),yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromString(e,r,n){return yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r,n){if(typeof r=="string"){let i=this.parse(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else if("$model"in r){let i={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(i,e)}else{let i=this.parse(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}async createAsync(e,r,n){if(typeof r=="string"){let i=await this.parseAsync(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else{let i=await this.parseAsync(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}createLangiumDocument(e,r,n,i){let a;if(n)a={parseResult:e,uri:r,state:kn.Parsed,references:[],textDocument:n};else{let s=this.createTextDocumentGetter(r,i);a={parseResult:e,uri:r,state:kn.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){var n,i;let a=(n=e.parseResult.value.$cstNode)===null||n===void 0?void 0:n.root.fullText,s=(i=this.textDocuments)===null||i===void 0?void 0:i.get(e.uri.toString()),l=s?s.getText():await this.fileSystemProvider.readFile(e.uri);if(s)Object.defineProperty(e,"textDocument",{value:s});else{let u=this.createTextDocumentGetter(e.uri,l);Object.defineProperty(e,"textDocument",{get:u})}return a!==l&&(e.parseResult=await this.parseAsync(e.uri,l,r),e.parseResult.value.$document=e),e.state=kn.Parsed,e}parse(e,r,n){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r,n)}parseAsync(e,r,n){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,n)}createTextDocumentGetter(e,r){let n=this.serviceRegistry,i;return()=>i??(i=c1.create(e.toString(),n.getServices(e).LanguageMetaData.languageId,0,r??""))}},Mx=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.serviceRegistry=e.ServiceRegistry}get all(){return en(this.documentMap.values())}addDocument(e){let r=e.uri.toString();if(this.documentMap.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentMap.set(r,e)}getDocument(e){let r=e.toString();return this.documentMap.get(r)}async getOrCreateDocument(e,r){let n=this.getDocument(e);return n||(n=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(n),n)}createDocument(e,r,n){if(n)return this.langiumDocumentFactory.fromString(r,e,n).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(this.serviceRegistry.getServices(e).references.Linker.unlink(n),n.state=kn.Changed,n.precomputedScopes=void 0,n.diagnostics=void 0),n}deleteDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=kn.Changed,this.documentMap.delete(r)),n}}});var PM,Ix,BM=N(()=>{"use strict";qo();Rl();is();Yo();h1();PM=Symbol("ref_resolving"),Ix=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,r=yr.CancellationToken.None){for(let n of Wo(e.parseResult.value))await xi(r),Ag(n).forEach(i=>this.doLink(i,e))}doLink(e,r){var n;let i=e.reference;if(i._ref===void 0){i._ref=PM;try{let a=this.getCandidate(e);if(jd(a))i._ref=a;else if(i._nodeDescription=a,this.langiumDocuments().hasDocument(a.documentUri)){let s=this.loadAstNode(a);i._ref=s??this.createLinkingError(e,a)}else i._ref=void 0}catch(a){console.error(`An error occurred while resolving reference to '${i.$refText}':`,a);let s=(n=a.message)!==null&&n!==void 0?n:String(a);i._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${i.$refText}': ${s}`})}r.references.push(i)}}unlink(e){for(let r of e.references)delete r._ref,delete r._nodeDescription;e.references=[]}getCandidate(e){let n=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return n??this.createLinkingError(e)}buildReference(e,r,n,i){let a=this,s={$refNode:n,$refText:i,get ref(){var l;if(ii(this._ref))return this._ref;if(kR(this._nodeDescription)){let u=a.loadAstNode(this._nodeDescription);this._ref=u??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){this._ref=PM;let u=H2(e).$document,h=a.getLinkedNode({reference:s,container:e,property:r});if(h.error&&u&&u.state<kn.ComputedScopes)return this._ref=void 0;this._ref=(l=h.node)!==null&&l!==void 0?l:h.error,this._nodeDescription=h.descr,u?.references.push(this)}else if(this._ref===PM)throw new Error(`Cyclic reference resolution detected: ${a.astNodeLocator.getAstNodePath(e)}/${r} (symbol '${i}')`);return ii(this._ref)?this._ref:void 0},get $nodeDescription(){return this._nodeDescription},get error(){return jd(this._ref)?this._ref:void 0}};return s}getLinkedNode(e){var r;try{let n=this.getCandidate(e);if(jd(n))return{error:n};let i=this.loadAstNode(n);return i?{node:i,descr:n}:{descr:n,error:this.createLinkingError(e,n)}}catch(n){console.error(`An error occurred while resolving reference to '${e.reference.$refText}':`,n);let i=(r=n.message)!==null&&r!==void 0?r:String(n);return{error:Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${e.reference.$refText}': ${i}`})}}}loadAstNode(e){if(e.node)return e.node;let r=this.langiumDocuments().getDocument(e.documentUri);if(r)return this.astNodeLocator.getAstNode(r.parseResult.value,e.path)}createLinkingError(e,r){let n=H2(e.container).$document;n&&n.state<kn.ComputedScopes&&console.warn(`Attempted reference resolution before document reached ComputedScopes state (${n.uri}).`);let i=this.reflection.getReferenceType(e);return Object.assign(Object.assign({},e),{message:`Could not resolve reference to ${i} named '${e.reference.$refText}'.`,targetDescription:r})}}});function Wle(t){return typeof t.name=="string"}var Ox,FM=N(()=>{"use strict";Ol();o(Wle,"isNamed");Ox=class{static{o(this,"DefaultNameProvider")}getName(e){if(Wle(e))return e.name}getNameNode(e){return Q2(e.$cstNode,"name")}}});var Px,$M=N(()=>{"use strict";Ol();Rl();is();Nl();Ps();Fc();Px=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator}findDeclaration(e){if(e){let r=hN(e),n=e.astNode;if(r&&n){let i=n[r.feature];if(va(i))return i.ref;if(Array.isArray(i)){for(let a of i)if(va(a)&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return a.ref}}if(n){let i=this.nameProvider.getNameNode(n);if(i&&(i===e||SR(e,i)))return n}}}findDeclarationNode(e){let r=this.findDeclaration(e);if(r?.$cstNode){let n=this.nameProvider.getNameNode(r);return n??r.$cstNode}}findReferences(e,r){let n=[];if(r.includeDeclaration){let a=this.getReferenceToSelf(e);a&&n.push(a)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(i=i.filter(a=>hs.equals(a.sourceUri,r.documentUri))),n.push(...i),en(n)}getReferenceToSelf(e){let r=this.nameProvider.getNameNode(e);if(r){let n=Pa(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:n.uri,sourcePath:i,targetUri:n.uri,targetPath:i,segment:Qd(r),local:!0}}}}});var Bl,vp,f1=N(()=>{"use strict";Ps();Bl=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,n]of e)this.add(r,n)}get size(){return zm.sum(en(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let n=this.map.get(e);if(n){let i=n.indexOf(r);if(i>=0)return n.length===1?this.map.delete(e):n.splice(i,1),!0}return!1}}get(e){var r;return(r=this.map.get(e))!==null&&r!==void 0?r:[]}has(e,r){if(r===void 0)return this.map.has(e);{let n=this.map.get(e);return n?n.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,n)=>r.forEach(i=>e(i,n,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return en(this.map.entries()).flatMap(([e,r])=>r.map(n=>[e,n]))}keys(){return en(this.map.keys())}values(){return en(this.map.values()).flat()}entriesGroupedByKey(){return en(this.map.entries())}},vp=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,n]of e)this.set(r,n)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var Bx,zM=N(()=>{"use strict";qo();is();f1();Yo();Bx=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,r=yr.CancellationToken.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,r)}async computeExportsForNode(e,r,n=W2,i=yr.CancellationToken.None){let a=[];this.exportNode(e,a,r);for(let s of n(e))await xi(i),this.exportNode(s,a,r);return a}exportNode(e,r,n){let i=this.nameProvider.getName(e);i&&r.push(this.descriptions.createDescription(e,i,n))}async computeLocalScopes(e,r=yr.CancellationToken.None){let n=e.parseResult.value,i=new Bl;for(let a of Nc(n))await xi(r),this.processNode(a,e,i);return i}processNode(e,r,n){let i=e.$container;if(i){let a=this.nameProvider.getName(e);a&&n.add(i,this.descriptions.createDescription(e,a,r))}}}});var d1,Fx,xFe,GM=N(()=>{"use strict";Ps();d1=class{static{o(this,"StreamScope")}constructor(e,r,n){var i;this.elements=e,this.outerScope=r,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===e.toLowerCase()):this.elements.find(n=>n.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}},Fx=class{static{o(this,"MapScope")}constructor(e,r,n){var i;this.elements=new Map,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1;for(let a of e){let s=this.caseInsensitive?a.name.toLowerCase():a.name;this.elements.set(s,a)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,n=this.elements.get(r);if(n)return n;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=en(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},xFe={getElement(){},getAllElements(){return I2}}});var p1,$x,xp,_E,m1,DE=N(()=>{"use strict";p1=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},$x=class extends p1{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let n=r();return this.cache.set(e,n),n}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},xp=class extends p1{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,n){this.throwIfDisposed(),this.cacheForContext(e).set(r,n)}get(e,r,n){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(r))return i.get(r);if(n){let a=n();return i.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),n=this.cache.get(r);return n||(n=new Map,this.cache.set(r,n)),n}},_E=class extends xp{static{o(this,"DocumentCache")}constructor(e,r){super(n=>n.toString()),r?(this.toDispose.push(e.workspace.DocumentBuilder.onDocumentPhase(r,n=>{this.clear(n.uri.toString())})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{for(let a of i)this.clear(a)}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{let a=n.concat(i);for(let s of a)this.clear(s)}))}},m1=class extends $x{static{o(this,"WorkspaceCache")}constructor(e,r){super(),r?(this.toDispose.push(e.workspace.DocumentBuilder.onBuildPhase(r,()=>{this.clear()})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{i.length>0&&this.clear()}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var zx,VM=N(()=>{"use strict";GM();is();Ps();DE();zx=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new m1(e.shared)}getScope(e){let r=[],n=this.reflection.getReferenceType(e),i=Pa(e.container).precomputedScopes;if(i){let s=e.container;do{let l=i.get(s);l.length>0&&r.push(en(l).filter(u=>this.reflection.isSubtype(u.type,n))),s=s.$container}while(s)}let a=this.getGlobalScope(n,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,n){return new d1(en(e),r,n)}createScopeForNodes(e,r,n){let i=en(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new d1(i,r,n)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new Fx(this.indexManager.allElements(e)))}}});function UM(t){return typeof t.$comment=="string"}function qle(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var Gx,LE=N(()=>{"use strict";OM();Rl();is();Ol();o(UM,"isAstNodeWithComment");o(qle,"isIntermediateReference");Gx=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r){let n=r??{},i=r?.replacer,a=o((l,u)=>this.replacer(l,u,n),"defaultReplacer"),s=i?(l,u)=>i(l,u,a):a;try{return this.currentDocument=Pa(e),JSON.stringify(e,s,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r){let n=r??{},i=JSON.parse(e);return this.linkNode(i,i,n),i}replacer(e,r,{refText:n,sourceText:i,textRegions:a,comments:s,uriConverter:l}){var u,h,f,d;if(!this.ignoreProperties.has(e))if(va(r)){let p=r.ref,m=n?r.$refText:void 0;if(p){let g=Pa(p),y="";this.currentDocument&&this.currentDocument!==g&&(l?y=l(g.uri,r):y=g.uri.toString());let v=this.astNodeLocator.getAstNodePath(p);return{$ref:`${y}#${v}`,$refText:m}}else return{$error:(h=(u=r.error)===null||u===void 0?void 0:u.message)!==null&&h!==void 0?h:"Could not resolve reference",$refText:m}}else if(ii(r)){let p;if(a&&(p=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},r)),(!e||r.$document)&&p?.$textRegion&&(p.$textRegion.documentURI=(f=this.currentDocument)===null||f===void 0?void 0:f.uri.toString())),i&&!e&&(p??(p=Object.assign({},r)),p.$sourceText=(d=r.$cstNode)===null||d===void 0?void 0:d.text),s){p??(p=Object.assign({},r));let m=this.commentProvider.getComment(r);m&&(p.$comment=m.replace(/\r/g,""))}return p??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(n=>({offset:n.offset,end:n.end,length:n.length,range:n.range}),"createDocumentSegment");if(e.$cstNode){let n=e.$textRegion=r(e.$cstNode),i=n.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=oN(e.$cstNode,a).map(r);s.length!==0&&(i[a]=s)}),e}}linkNode(e,r,n,i,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f<h.length;f++){let d=h[f];qle(d)?h[f]=this.reviveReference(e,u,r,d,n):ii(d)&&this.linkNode(d,r,n,e,u,f)}else qle(h)?e[u]=this.reviveReference(e,u,r,h,n):ii(h)&&this.linkNode(h,r,n,e,u);let l=e;l.$container=i,l.$containerProperty=a,l.$containerIndex=s}reviveReference(e,r,n,i,a){let s=i.$refText,l=i.$error;if(i.$ref){let u=this.getRefNode(n,i.$ref,a.uriConverter);if(ii(u))return s||(s=this.nameProvider.getName(u)),{$refText:s??"",ref:u};l=u}if(l){let u={$refText:s??""};return u.error={container:e,property:r,message:l,reference:u},u}else return}getRefNode(e,r,n){try{let i=r.indexOf("#");if(i===0){let u=this.astNodeLocator.getAstNode(e,r.substring(1));return u||"Could not resolve path: "+r}if(i<0){let u=n?n(r):us.parse(r),h=this.langiumDocuments.getDocument(u);return h?h.parseResult.value:"Could not find document for URI: "+r}let a=n?n(r.substring(0,i)):us.parse(r.substring(0,i)),s=this.langiumDocuments.getDocument(a);if(!s)return"Could not find document for URI: "+r;if(i===r.length-1)return s.parseResult.value;let l=this.astNodeLocator.getAstNode(s.parseResult.value,r.substring(i+1));return l||"Could not resolve URI: "+r}catch(i){return String(i)}}}});var Vx,HM=N(()=>{"use strict";Fc();Vx=class{static{o(this,"DefaultServiceRegistry")}get map(){return this.fileExtensionMap}constructor(e){this.languageIdMap=new Map,this.fileExtensionMap=new Map,this.textDocuments=e?.workspace.TextDocuments}register(e){let r=e.LanguageMetaData;for(let n of r.fileExtensions)this.fileExtensionMap.has(n)&&console.warn(`The file extension ${n} is used by multiple languages. It is now assigned to '${r.languageId}'.`),this.fileExtensionMap.set(n,e);this.languageIdMap.set(r.languageId,e),this.languageIdMap.size===1?this.singleton=e:this.singleton=void 0}getServices(e){var r,n;if(this.singleton!==void 0)return this.singleton;if(this.languageIdMap.size===0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let i=(n=(r=this.textDocuments)===null||r===void 0?void 0:r.get(e))===null||n===void 0?void 0:n.languageId;if(i!==void 0){let l=this.languageIdMap.get(i);if(l)return l}let a=hs.extname(e),s=this.fileExtensionMap.get(a);if(!s)throw i?new Error(`The service registry contains no services for the extension '${a}' for language '${i}'.`):new Error(`The service registry contains no services for the extension '${a}'.`);return s}hasServices(e){try{return this.getServices(e),!0}catch{return!1}}get all(){return Array.from(this.languageIdMap.values())}}});function bp(t){return{code:t}}var g1,Ux,Hx=N(()=>{"use strict";Xo();f1();Yo();Ps();o(bp,"diagnosticData");(function(t){t.all=["fast","slow","built-in"]})(g1||(g1={}));Ux=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new Bl,this.entriesBefore=[],this.entriesAfter=[],this.reflection=e.shared.AstReflection}register(e,r=this,n="fast"){if(n==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");for(let[i,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:n};this.addEntry(i,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:n};this.addEntry(i,l)}else Lc(s)}}wrapValidationException(e,r){return async(n,i,a)=>{await this.handleException(()=>e.call(r,n,i,a),"An error occurred during validation",i,n)}}async handleException(e,r,n,i){try{await e()}catch(a){if(Bc(a))throw a;console.error(`${r}:`,a),a instanceof Error&&a.stack&&console.error(a.stack);let s=a instanceof Error?a.message:String(a);n("error",`${r}: ${s}`,{node:i})}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let n of this.reflection.getAllSubTypes(e))this.entries.add(n,r)}getChecks(e,r){let n=en(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(n=n.filter(i=>r.includes(i.category))),n.map(i=>i.check)}registerBeforeDocument(e,r=this){this.entriesBefore.push(this.wrapPreparationException(e,"An error occurred during set-up of the validation",r))}registerAfterDocument(e,r=this){this.entriesAfter.push(this.wrapPreparationException(e,"An error occurred during tear-down of the validation",r))}wrapPreparationException(e,r,n){return async(i,a,s,l)=>{await this.handleException(()=>e.call(n,i,a,s,l),r,a,i)}}get checksBefore(){return this.entriesBefore}get checksAfter(){return this.entriesAfter}}});function Yle(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=Q2(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=cN(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function RE(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}function Xle(t){switch(t){case"error":return bp(jo.LexingError);case"warning":return bp(jo.LexingWarning);case"info":return bp(jo.LexingInfo);case"hint":return bp(jo.LexingHint);default:throw new Error("Invalid diagnostic severity: "+t)}}var Wx,jo,WM=N(()=>{"use strict";qo();Ol();is();Nl();Yo();Hx();Wx=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,r={},n=yr.CancellationToken.None){let i=e.parseResult,a=[];if(await xi(n),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(i,a,r),r.stopAfterLexingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.LexingError})||(this.processParsingErrors(i,a,r),r.stopAfterParsingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.ParsingError}))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.LinkingError}))))return a;try{a.push(...await this.validateAst(i.value,r,n))}catch(s){if(Bc(s))throw s;console.error("An error occurred during validation:",s)}return await xi(n),a}processLexingErrors(e,r,n){var i,a,s;let l=[...e.lexerErrors,...(a=(i=e.lexerReport)===null||i===void 0?void 0:i.diagnostics)!==null&&a!==void 0?a:[]];for(let u of l){let h=(s=u.severity)!==null&&s!==void 0?s:"error",f={severity:RE(h),range:{start:{line:u.line-1,character:u.column-1},end:{line:u.line-1,character:u.column+u.length-1}},message:u.message,data:Xle(h),source:this.getSource()};r.push(f)}}processParsingErrors(e,r,n){for(let i of e.parserErrors){let a;if(isNaN(i.token.startOffset)){if("previousToken"in i){let s=i.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=Gm(i.token);if(a){let s={severity:RE("error"),range:a,message:i.message,data:bp(jo.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,n){for(let i of e.references){let a=i.error;if(a){let s={node:a.container,property:a.property,index:a.index,data:{code:jo.LinkingError,containerType:a.container.$type,property:a.property,refText:a.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,n=yr.CancellationToken.None){let i=[],a=o((s,l,u)=>{i.push(this.toDiagnostic(s,l,u))},"acceptor");return await this.validateAstBefore(e,r,a,n),await this.validateAstNodes(e,r,a,n),await this.validateAstAfter(e,r,a,n),i}async validateAstBefore(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksBefore;for(let l of s)await xi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}async validateAstNodes(e,r,n,i=yr.CancellationToken.None){await Promise.all(Wo(e).map(async a=>{await xi(i);let s=this.validationRegistry.getChecks(a.$type,r.categories);for(let l of s)await l(a,n,i)}))}async validateAstAfter(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksAfter;for(let l of s)await xi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}toDiagnostic(e,r,n){return{message:r,range:Yle(n),severity:RE(e),code:n.code,codeDescription:n.codeDescription,tags:n.tags,relatedInformation:n.relatedInformation,data:n.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(Yle,"getDiagnosticRange");o(RE,"toDiagnosticSeverity");o(Xle,"toDiagnosticData");(function(t){t.LexingError="lexing-error",t.LexingWarning="lexing-warning",t.LexingInfo="lexing-info",t.LexingHint="lexing-hint",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(jo||(jo={}))});var qx,Yx,qM=N(()=>{"use strict";qo();Rl();is();Nl();Yo();Fc();qx=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,n){let i=n??Pa(e);r??(r=this.nameProvider.getName(e));let a=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${a} has no name.`);let s,l=o(()=>{var u;return s??(s=Qd((u=this.nameProvider.getNameNode(e))!==null&&u!==void 0?u:e.$cstNode))},"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return l()},selectionSegment:Qd(e.$cstNode),type:e.$type,documentUri:i.uri,path:a}}},Yx=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=yr.CancellationToken.None){let n=[],i=e.parseResult.value;for(let a of Wo(i))await xi(r),Ag(a).filter(s=>!jd(s)).forEach(s=>{let l=this.createDescription(s);l&&n.push(l)});return n}createDescription(e){let r=e.reference.$nodeDescription,n=e.reference.$refNode;if(!r||!n)return;let i=Pa(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:r.documentUri,targetPath:r.path,segment:Qd(n),local:hs.equals(r.documentUri,i)}}}});var Xx,YM=N(()=>{"use strict";Xx=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),n=this.getPathSegment(e);return r+this.segmentSeparator+n}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((i,a)=>{if(!i||a.length===0)return i;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1)),h=i[l];return h?.[u]}return i[a]},e)}}});var Kn={};var NE=N(()=>{"use strict";Sr(Kn,Sa(LM(),1))});var jx,XM=N(()=>{"use strict";NE();Yo();jx=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new cs,this.settings={},this.workspaceConfig=!1,this.onConfigurationSectionUpdateEmitter=new Kn.Emitter,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var r,n;this.workspaceConfig=(n=(r=e.capabilities.workspace)===null||r===void 0?void 0:r.configuration)!==null&&n!==void 0?n:!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(n=>this.toSectionName(n.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),n=await e.fetchConfiguration(r);r.forEach((i,a)=>{this.updateSectionConfiguration(i.section,n[a])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(r=>{let n=e.settings[r];this.updateSectionConfiguration(r,n),this.onConfigurationSectionUpdateEmitter.fire({section:r,configuration:n})})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let n=this.toSectionName(e);if(this.settings[n])return this.settings[n][r]}toSectionName(e){return`${e}`}get onConfigurationSectionUpdate(){return this.onConfigurationSectionUpdateEmitter.event}}});var ff,jM=N(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(ff||(ff={}))});var Kx,KM=N(()=>{"use strict";qo();jM();f1();Yo();Ps();Hx();h1();Kx=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new Bl,this.documentPhaseListeners=new Bl,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=kn.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.textDocuments=e.workspace.TextDocuments,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},n=yr.CancellationToken.None){var i,a;for(let s of e){let l=s.uri.toString();if(s.state===kn.Validated){if(typeof r.validation=="boolean"&&r.validation)s.state=kn.IndexedReferences,s.diagnostics=void 0,this.buildState.delete(l);else if(typeof r.validation=="object"){let u=this.buildState.get(l),h=(i=u?.result)===null||i===void 0?void 0:i.validationChecks;if(h){let d=((a=r.validation.categories)!==null&&a!==void 0?a:g1.all).filter(p=>!h.includes(p));d.length>0&&(this.buildState.set(l,{completed:!1,options:{validation:Object.assign(Object.assign({},r.validation),{categories:d})},result:u.result}),s.state=kn.IndexedReferences)}}}else this.buildState.delete(l)}this.currentState=kn.Changed,await this.emitUpdate(e.map(s=>s.uri),[]),await this.buildDocuments(e,r,n)}async update(e,r,n=yr.CancellationToken.None){this.currentState=kn.Changed;for(let s of r)this.langiumDocuments.deleteDocument(s),this.buildState.delete(s.toString()),this.indexManager.remove(s);for(let s of e){if(!this.langiumDocuments.invalidateDocument(s)){let u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},s);u.state=kn.Changed,this.langiumDocuments.addDocument(u)}this.buildState.delete(s.toString())}let i=en(e).concat(r).map(s=>s.toString()).toSet();this.langiumDocuments.all.filter(s=>!i.has(s.uri.toString())&&this.shouldRelink(s,i)).forEach(s=>{this.serviceRegistry.getServices(s.uri).references.Linker.unlink(s),s.state=Math.min(s.state,kn.ComputedScopes),s.diagnostics=void 0}),await this.emitUpdate(e,r),await xi(n);let a=this.sortDocuments(this.langiumDocuments.all.filter(s=>{var l;return s.state<kn.Linked||!(!((l=this.buildState.get(s.uri.toString()))===null||l===void 0)&&l.completed)}).toArray());await this.buildDocuments(a,this.updateBuildOptions,n)}async emitUpdate(e,r){await Promise.all(this.updateListeners.map(n=>n(e,r)))}sortDocuments(e){let r=0,n=e.length-1;for(;r<n;){for(;r<e.length&&this.hasTextDocument(e[r]);)r++;for(;n>=0&&!this.hasTextDocument(e[n]);)n--;r<n&&([e[r],e[n]]=[e[n],e[r]])}return e}hasTextDocument(e){var r;return!!(!((r=this.textDocuments)===null||r===void 0)&&r.get(e.uri))}shouldRelink(e,r){return e.references.some(n=>n.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),ff.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}async buildDocuments(e,r,n){this.prepareBuild(e,r),await this.runCancelable(e,kn.Parsed,n,a=>this.langiumDocumentFactory.update(a,n)),await this.runCancelable(e,kn.IndexedContent,n,a=>this.indexManager.updateContent(a,n)),await this.runCancelable(e,kn.ComputedScopes,n,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.precomputedScopes=await s.computeLocalScopes(a,n)}),await this.runCancelable(e,kn.Linked,n,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,n)),await this.runCancelable(e,kn.IndexedReferences,n,a=>this.indexManager.updateReferences(a,n));let i=e.filter(a=>this.shouldValidate(a));await this.runCancelable(i,kn.Validated,n,a=>this.validate(a,n));for(let a of e){let s=this.buildState.get(a.uri.toString());s&&(s.completed=!0)}}prepareBuild(e,r){for(let n of e){let i=n.uri.toString(),a=this.buildState.get(i);(!a||a.completed)&&this.buildState.set(i,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,n,i){let a=e.filter(l=>l.state<r);for(let l of a)await xi(n),await i(l),l.state=r,await this.notifyDocumentPhase(l,r,n);let s=e.filter(l=>l.state===r);await this.notifyBuildPhase(s,r,n),this.currentState=r}onBuildPhase(e,r){return this.buildPhaseListeners.add(e,r),ff.create(()=>{this.buildPhaseListeners.delete(e,r)})}onDocumentPhase(e,r){return this.documentPhaseListeners.add(e,r),ff.create(()=>{this.documentPhaseListeners.delete(e,r)})}waitUntil(e,r,n){let i;if(r&&"path"in r?i=r:n=r,n??(n=yr.CancellationToken.None),i){let a=this.langiumDocuments.getDocument(i);if(a&&a.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):n.isCancellationRequested?Promise.reject(Pc):new Promise((a,s)=>{let l=this.onBuildPhase(e,()=>{if(l.dispose(),u.dispose(),i){let h=this.langiumDocuments.getDocument(i);a(h?.uri)}else a(void 0)}),u=n.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(Pc)})})}async notifyDocumentPhase(e,r,n){let a=this.documentPhaseListeners.get(r).slice();for(let s of a)try{await s(e,n)}catch(l){if(!Bc(l))throw l}}async notifyBuildPhase(e,r,n){if(e.length===0)return;let a=this.buildPhaseListeners.get(r).slice();for(let s of a)await xi(n),await s(e,n)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){var n,i;let a=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,s=this.getBuildOptions(e).validation,l=typeof s=="object"?s:void 0,u=await a.validateDocument(e,l,r);e.diagnostics?e.diagnostics.push(...u):e.diagnostics=u;let h=this.buildState.get(e.uri.toString());if(h){(n=h.result)!==null&&n!==void 0||(h.result={});let f=(i=l?.categories)!==null&&i!==void 0?i:g1.all;h.result.validationChecks?h.result.validationChecks.push(...f):h.result.validationChecks=[...f]}}getBuildOptions(e){var r,n;return(n=(r=this.buildState.get(e.uri.toString()))===null||r===void 0?void 0:r.options)!==null&&n!==void 0?n:{}}}});var Qx,QM=N(()=>{"use strict";is();DE();qo();Ps();Fc();Qx=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new xp,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let n=Pa(e).uri,i=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{hs.equals(s.targetUri,n)&&s.targetPath===r&&i.push(s)})}),en(i)}allElements(e,r){let n=en(this.symbolIndex.keys());return r&&(n=n.filter(i=>!r||r.has(i))),n.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,r){var n;return r?this.symbolByTypeIndex.get(e,r,()=>{var a;return((a=this.symbolIndex.get(e))!==null&&a!==void 0?a:[]).filter(l=>this.astReflection.isSubtype(l.type,r))}):(n=this.symbolIndex.get(e))!==null&&n!==void 0?n:[]}remove(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r),this.referenceIndex.delete(r)}async updateContent(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,r),a=e.uri.toString();this.symbolIndex.set(a,i),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,r){let n=this.referenceIndex.get(e.uri.toString());return n?n.some(i=>!i.local&&r.has(i.targetUri.toString())):!1}}});var Zx,ZM=N(()=>{"use strict";qo();Yo();Fc();Zx=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new cs,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}get workspaceFolders(){return this.folders}initialize(e){var r;this.folders=(r=e.workspaceFolders)!==null&&r!==void 0?r:void 0}initialized(e){return this.mutex.write(r=>{var n;return this.initializeWorkspace((n=this.folders)!==null&&n!==void 0?n:[],r)})}async initializeWorkspace(e,r=yr.CancellationToken.None){let n=await this.performStartup(e);await xi(r),await this.documentBuilder.build(n,this.initialBuildOptions,r)}async performStartup(e){let r=this.serviceRegistry.all.flatMap(a=>a.LanguageMetaData.fileExtensions),n=[],i=o(a=>{n.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(a=>[a,this.getRootFolder(a)]).map(async a=>this.traverseFolder(...a,r,i))),this._ready.resolve(),n}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return us.parse(e.uri)}async traverseFolder(e,r,n,i){let a=await this.fileSystemProvider.readDirectory(r);await Promise.all(a.map(async s=>{if(this.includeEntry(e,s,n)){if(s.isDirectory)await this.traverseFolder(e,s.uri,n,i);else if(s.isFile){let l=await this.langiumDocuments.getOrCreateDocument(s.uri);i(l)}}}))}includeEntry(e,r,n){let i=hs.basename(r.uri);if(i.startsWith("."))return!1;if(r.isDirectory)return i!=="node_modules"&&i!=="out";if(r.isFile){let a=hs.extname(r.uri);return n.includes(a)}return!1}}});function IE(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function eI(t){return t&&"modes"in t&&"defaultMode"in t}function JM(t){return!IE(t)&&!eI(t)}var Jx,ME,wp,OE=N(()=>{"use strict";cf();Jx=class{static{o(this,"DefaultLexerErrorMessageProvider")}buildUnexpectedCharactersMessage(e,r,n,i,a){return Gg.buildUnexpectedCharactersMessage(e,r,n,i,a)}buildUnableToPopLexerModeMessage(e){return Gg.buildUnableToPopLexerModeMessage(e)}},ME={mode:"full"},wp=class{static{o(this,"DefaultLexer")}constructor(e){this.errorMessageProvider=e.parser.LexerErrorMessageProvider,this.tokenBuilder=e.parser.TokenBuilder;let r=this.tokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let n=JM(r)?Object.values(r):r,i=e.LanguageMetaData.mode==="production";this.chevrotainLexer=new Xn(n,{positionTracking:"full",skipValidations:i,errorMessageProvider:this.errorMessageProvider})}get definition(){return this.tokenTypes}tokenize(e,r=ME){var n,i,a;let s=this.chevrotainLexer.tokenize(e);return{tokens:s.tokens,errors:s.errors,hidden:(n=s.groups.hidden)!==null&&n!==void 0?n:[],report:(a=(i=this.tokenBuilder).flushLexingReport)===null||a===void 0?void 0:a.call(i,e)}}toTokenTypeDictionary(e){if(JM(e))return e;let r=eI(e)?Object.values(e.modes).flat():e,n={};return r.forEach(i=>n[i.name]=i),n}};o(IE,"isTokenTypeArray");o(eI,"isIMultiModeLexerDefinition");o(JM,"isTokenTypeDictionary")});function nI(t,e,r){let n,i;typeof t=="string"?(i=e,n=r):(i=t.range.start,n=e),i||(i=jr.create(0,0));let a=Qle(t),s=aI(n),l=wFe({lines:a,position:i,options:s});return CFe({index:0,tokens:l,position:i})}function iI(t,e){let r=aI(e),n=Qle(t);if(n.length===0)return!1;let i=n[0],a=n[n.length-1],s=r.start,l=r.end;return!!s?.exec(i)&&!!l?.exec(a)}function Qle(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(JR)}function wFe(t){var e,r,n;let i=[],a=t.position.line,s=t.position.character;for(let l=0;l<t.lines.length;l++){let u=l===0,h=l===t.lines.length-1,f=t.lines[l],d=0;if(u&&t.options.start){let m=(e=t.options.start)===null||e===void 0?void 0:e.exec(f);m&&(d=m.index+m[0].length)}else{let m=(r=t.options.line)===null||r===void 0?void 0:r.exec(f);m&&(d=m.index+m[0].length)}if(h){let m=(n=t.options.end)===null||n===void 0?void 0:n.exec(f);m&&(f=f.substring(0,m.index))}if(f=f.substring(0,SFe(f)),rI(f,d)>=f.length){if(i.length>0){let m=jr.create(a,s);i.push({type:"break",content:"",range:Pr.create(m,m)})}}else{jle.lastIndex=d;let m=jle.exec(f);if(m){let g=m[0],y=m[1],v=jr.create(a,s+d),x=jr.create(a,s+d+g.length);i.push({type:"tag",content:y,range:Pr.create(v,x)}),d+=g.length,d=rI(f,d)}if(d<f.length){let g=f.substring(d),y=Array.from(g.matchAll(bFe));i.push(...TFe(y,g,a,s+d))}}a++,s=0}return i.length>0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function TFe(t,e,r,n){let i=[];if(t.length===0){let a=jr.create(r,n),s=jr.create(r,n+e.length);i.push({type:"text",content:e,range:Pr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&i.push({type:"text",content:e.substring(a,u),range:Pr.create(jr.create(r,a+n),jr.create(r,u+n))});let f=h.length+1,d=l[1];if(i.push({type:"inline-tag",content:d,range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+d.length+n))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];i.push({type:"text",content:p,range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+p.length+n))})}else i.push({type:"text",content:"",range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+n))});a=u+l[0].length}let s=e.substring(a);s.length>0&&i.push({type:"text",content:s,range:Pr.create(jr.create(r,a+n),jr.create(r,a+n+s.length))})}return i}function rI(t,e){let r=t.substring(e).match(kFe);return r?e+r.index:t.length}function SFe(t){let e=t.match(EFe);if(e&&typeof e.index=="number")return e.index}function CFe(t){var e,r,n,i;let a=jr.create(t.position.line,t.position.character);if(t.tokens.length===0)return new PE([],Pr.create(a,a));let s=[];for(;t.index<t.tokens.length;){let h=AFe(t,s[s.length-1]);h&&s.push(h)}let l=(r=(e=s[0])===null||e===void 0?void 0:e.range.start)!==null&&r!==void 0?r:a,u=(i=(n=s[s.length-1])===null||n===void 0?void 0:n.range.end)!==null&&i!==void 0?i:a;return new PE(s,Pr.create(l,u))}function AFe(t,e){let r=t.tokens[t.index];if(r.type==="tag")return Jle(t,!1);if(r.type==="text"||r.type==="inline-tag")return Zle(t);_Fe(r,e),t.index++}function _Fe(t,e){if(e){let r=new BE("",t.range);"inlines"in e?e.inlines.push(r):e.content.inlines.push(r)}}function Zle(t){let e=t.tokens[t.index],r=e,n=e,i=[];for(;e&&e.type!=="break"&&e.type!=="tag";)i.push(DFe(t)),n=e,e=t.tokens[t.index];return new tb(i,Pr.create(r.range.start,n.range.end))}function DFe(t){return t.tokens[t.index].type==="inline-tag"?Jle(t,!0):ece(t)}function Jle(t,e){let r=t.tokens[t.index++],n=r.content.substring(1),i=t.tokens[t.index];if(i?.type==="text")if(e){let a=ece(t);return new eb(n,new tb([a],a.range),e,Pr.create(r.range.start,a.range.end))}else{let a=Zle(t);return new eb(n,a,e,Pr.create(r.range.start,a.range.end))}else{let a=r.range;return new eb(n,new tb([],a),e,a)}}function ece(t){let e=t.tokens[t.index++];return new BE(e.content,e.range)}function aI(t){if(!t)return aI({start:"/**",end:"*/",line:"*"});let{start:e,end:r,line:n}=t;return{start:tI(e,!0),end:tI(r,!1),line:tI(n,!0)}}function tI(t,e){if(typeof t=="string"||typeof t=="object"){let r=typeof t=="string"?ap(t):t.source;return e?new RegExp(`^\\s*${r}`):new RegExp(`\\s*${r}\\s*$`)}else return t}function LFe(t,e,r){var n,i;if(t==="linkplain"||t==="linkcode"||t==="link"){let a=e.indexOf(" "),s=e;if(a>0){let u=rI(e,a);s=e.substring(u),e=e.substring(0,a)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(s=`\`${s}\``),(i=(n=r.renderLink)===null||n===void 0?void 0:n.call(r,e,s))!==null&&i!==void 0?i:RFe(e,s)}}function RFe(t,e){try{return us.parse(t,!0),`[${e}](${t})`}catch{return t}}function Kle(t){return t.endsWith(` | |
| 807 | +`)?` | |
| 808 | +`:` | |
| 809 | + | |
| 810 | +`}var jle,bFe,kFe,EFe,PE,eb,tb,BE,sI=N(()=>{"use strict";mM();Lg();Fc();o(nI,"parseJSDoc");o(iI,"isJSDoc");o(Qle,"getLines");jle=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,bFe=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(wFe,"tokenize");o(TFe,"buildInlineTokens");kFe=/\S/,EFe=/\s*$/;o(rI,"skipWhitespace");o(SFe,"lastCharacter");o(CFe,"parseJSDocComment");o(AFe,"parseJSDocElement");o(_Fe,"appendEmptyLine");o(Zle,"parseJSDocText");o(DFe,"parseJSDocInline");o(Jle,"parseJSDocTag");o(ece,"parseJSDocLine");o(aI,"normalizeOptions");o(tI,"normalizeOption");PE=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let n=r.toString();e+=Kle(e)+n}return e.trim()}toMarkdown(e){let r="";for(let n of this.elements)if(r.length===0)r=n.toMarkdown(e);else{let i=n.toMarkdown(e);r+=Kle(r)+i}return r.trim()}},eb=class{static{o(this,"JSDocTagImpl")}constructor(e,r,n,i){this.name=e,this.content=r,this.inline=n,this.range=i}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e} | |
| 811 | +${r}`),this.inline?`{${e}}`:e}toMarkdown(e){var r,n;return(n=(r=e?.renderTag)===null||r===void 0?void 0:r.call(e,this))!==null&&n!==void 0?n:this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=LFe(this.name,r,e??{});if(typeof a=="string")return a}let n="";e?.tag==="italic"||e?.tag===void 0?n="*":e?.tag==="bold"?n="**":e?.tag==="bold-italic"&&(n="***");let i=`${n}@${this.name}${n}`;return this.content.inlines.length===1?i=`${i} \u2014 ${r}`:this.content.inlines.length>1&&(i=`${i} | |
| 812 | +${r}`),this.inline?`{${i}}`:i}};o(LFe,"renderInlineTag");o(RFe,"renderLinkDefault");tb=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;r<this.inlines.length;r++){let n=this.inlines[r],i=this.inlines[r+1];e+=n.toString(),i&&i.range.start.line>n.range.start.line&&(e+=` | |
| 813 | +`)}return e}toMarkdown(e){let r="";for(let n=0;n<this.inlines.length;n++){let i=this.inlines[n],a=this.inlines[n+1];r+=i.toMarkdown(e),a&&a.range.start.line>i.range.start.line&&(r+=` | |
| 814 | +`)}return r}},BE=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(Kle,"fillNewlines")});var rb,oI=N(()=>{"use strict";is();sI();rb=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&iI(r))return nI(r).toMarkdown({renderLink:o((i,a)=>this.documentationLinkRenderer(e,i,a),"renderLink"),renderTag:o(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,r,n){var i;let a=(i=this.findNameInPrecomputedScopes(e,r))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,r);if(a&&a.nameSegment){let s=a.nameSegment.range.start.line+1,l=a.nameSegment.range.start.character+1,u=a.documentUri.with({fragment:`L${s},${l}`});return`[${n}](${u.toString()})`}else return}documentationTagRenderer(e,r){}findNameInPrecomputedScopes(e,r){let i=Pa(e).precomputedScopes;if(!i)return;let a=e;do{let l=i.get(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(i=>i.name===r)}}});var nb,lI=N(()=>{"use strict";LE();Nl();nb=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var r;return UM(e)?e.$comment:(r=AR(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||r===void 0?void 0:r.text}}});var ib,cI,uI,hI=N(()=>{"use strict";Yo();NE();ib=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e,r){return Promise.resolve(this.syncParser.parse(e))}},cI=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length<this.threadCount;){let e=this.createWorker();e.onReady(()=>{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let n=await this.acquireParserWorker(r),i=new cs,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(n)},this.terminationDelay)});return n.parse(e).then(l=>{let u=this.hydrator.hydrate(l);i.resolve(u)}).catch(l=>{i.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),i.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let n of this.workerPool)if(n.ready)return n.lock(),n;let r=new cs;return e.onCancellationRequested(()=>{let n=this.queue.indexOf(r);n>=0&&this.queue.splice(n,1),r.reject(Pc)}),this.queue.push(r),r.promise}},uI=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,n,i){this.onReadyEmitter=new Kn.Emitter,this.deferred=new cs,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),n(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(Pc),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new cs,this.sendMessage(e),this.deferred.promise}}});var ab,fI=N(()=>{"use strict";qo();Yo();ab=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new yr.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=CE();return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,n=yr.CancellationToken.None){let i=new cs,a={action:r,deferred:i,cancellationToken:n};return e.push(a),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:n,cancellationToken:i})=>{try{let a=await Promise.resolve().then(()=>r(i));n.resolve(a)}catch(a){Bc(a)?n.resolve(void 0):n.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var sb,dI=N(()=>{"use strict";gE();Rc();Rl();is();f1();Nl();sb=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new vp,this.tokenTypeIdMap=new vp,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport?this.dehydrateLexerReport(e.lexerReport):void 0,parserErrors:e.parserErrors.map(r=>Object.assign(Object.assign({},r),{message:r.message})),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}dehydrateLexerReport(e){return e}createDehyrationContext(e){let r=new Map,n=new Map;for(let i of Wo(e))r.set(i,{});if(e.$cstNode)for(let i of Kd(e.$cstNode))n.set(i,{});return{astNodes:r,cstNodes:n}}dehydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(n.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ii(l)?s.push(this.dehydrateAstNode(l,r)):va(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else ii(a)?n[i]=this.dehydrateAstNode(a,r):va(a)?n[i]=this.dehydrateReference(a,r):a!==void 0&&(n[i]=a);return n}dehydrateReference(e,r){let n={};return n.$refText=e.$refText,e.$refNode&&(n.$refNode=r.cstNodes.get(e.$refNode)),n}dehydrateCstNode(e,r){let n=r.cstNodes.get(e);return M2(e)?n.fullText=e.fullText:n.grammarSource=this.getGrammarElementId(e.grammarSource),n.hidden=e.hidden,n.astNode=r.astNodes.get(e.astNode),Ll(e)?n.content=e.content.map(i=>this.dehydrateCstNode(i,r)):af(e)&&(n.tokenType=e.tokenType.name,n.offset=e.offset,n.length=e.length,n.startLine=e.range.start.line,n.startColumn=e.range.start.character,n.endLine=e.range.end.line,n.endColumn=e.range.end.character),n}hydrate(e){let r=e.value,n=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,n),{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,n)}}createHydrationContext(e){let r=new Map,n=new Map;for(let a of Wo(e))r.set(a,{});let i;if(e.$cstNode)for(let a of Kd(e.$cstNode)){let s;"fullText"in a?(s=new a1(a.fullText),i=s):"content"in a?s=new mp:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(n.set(a,s),s.root=i)}return{astNodes:r,cstNodes:n}}hydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode&&(n.$cstNode=r.cstNodes.get(e.$cstNode));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ii(l)?s.push(this.setParent(this.hydrateAstNode(l,r),n)):va(l)?s.push(this.hydrateReference(l,n,i,r)):s.push(l)}else ii(a)?n[i]=this.setParent(this.hydrateAstNode(a,r),n):va(a)?n[i]=this.hydrateReference(a,n,i,r):a!==void 0&&(n[i]=a);return n}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,n,i){return this.linker.buildReference(r,n,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,n=0){let i=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=r.astNodes.get(e.astNode),Ll(i))for(let a of e.content){let s=this.hydrateCstNode(a,r,n++);i.content.push(s)}return i}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),n=e.offset,i=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new pp(n,i,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){if(e)return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.getKey(e)}createGrammarElementIdMap(){let e=0;for(let r of Wo(this.grammar))G2(r)&&this.grammarElementIdMap.set(r,e++)}}});function fs(t){return{documentation:{CommentProvider:o(e=>new nb(e),"CommentProvider"),DocumentationProvider:o(e=>new rb(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new ib(e),"AsyncParser"),GrammarConfig:o(e=>pN(e),"GrammarConfig"),LangiumParser:o(e=>TM(e),"LangiumParser"),CompletionParser:o(e=>bM(e),"CompletionParser"),ValueConverter:o(()=>new yp,"ValueConverter"),TokenBuilder:o(()=>new Uu,"TokenBuilder"),Lexer:o(e=>new wp(e),"Lexer"),ParserErrorMessageProvider:o(()=>new s1,"ParserErrorMessageProvider"),LexerErrorMessageProvider:o(()=>new Jx,"LexerErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new Xx,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new qx(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new Yx(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new Ix(e),"Linker"),NameProvider:o(()=>new Ox,"NameProvider"),ScopeProvider:o(e=>new zx(e),"ScopeProvider"),ScopeComputation:o(e=>new Bx(e),"ScopeComputation"),References:o(e=>new Px(e),"References")},serializer:{Hydrator:o(e=>new sb(e),"Hydrator"),JsonSerializer:o(e=>new Gx(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new Wx(e),"DocumentValidator"),ValidationRegistry:o(e=>new Ux(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function ds(t){return{ServiceRegistry:o(e=>new Vx(e),"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new Mx(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new Nx(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new Kx(e),"DocumentBuilder"),IndexManager:o(e=>new Qx(e),"IndexManager"),WorkspaceManager:o(e=>new Zx(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new ab,"WorkspaceLock"),ConfigurationProvider:o(e=>new jx(e),"ConfigurationProvider")}}}var pI=N(()=>{"use strict";mN();wM();kM();wE();EM();BM();FM();$M();zM();VM();LE();HM();WM();Hx();qM();YM();XM();KM();h1();QM();ZM();OE();oI();lI();Lx();hI();fI();dI();o(fs,"createDefaultCoreModule");o(ds,"createDefaultSharedCoreModule")});function ui(t,e,r,n,i,a,s,l,u){let h=[t,e,r,n,i,a,s,l,u].reduce(FE,{});return ace(h)}function ice(t){if(t&&t[nce])for(let e of Object.values(t))ice(e);return t}function ace(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),set:o(()=>{throw new Error("Cannot set property on injected service container")},"set"),get:o((n,i)=>i===nce?!0:rce(n,i,t,e||r),"get"),getOwnPropertyDescriptor:o((n,i)=>(rce(n,i,t,e||r),Object.getOwnPropertyDescriptor(n,i)),"getOwnPropertyDescriptor"),has:o((n,i)=>i in t,"has"),ownKeys:o(()=>[...Object.getOwnPropertyNames(t)],"ownKeys")});return r}function rce(t,e,r,n){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:t[e]});if(t[e]===tce)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let i=r[e];t[e]=tce;try{t[e]=typeof i=="function"?i(n):ace(i,n)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function FE(t,e){if(e){for(let[r,n]of Object.entries(e))if(n!==void 0){let i=t[r];i!==null&&n!==null&&typeof i=="object"&&typeof n=="object"?t[r]=FE(i,n):t[r]=n}}return t}var mI,nce,tce,gI=N(()=>{"use strict";(function(t){t.merge=(e,r)=>FE(FE({},e),r)})(mI||(mI={}));o(ui,"inject");nce=Symbol("isProxy");o(ice,"eagerLoad");o(ace,"_inject");tce=Symbol();o(rce,"_resolve");o(FE,"_merge")});var sce=N(()=>{"use strict"});var oce=N(()=>{"use strict";lI();oI();sI()});var lce=N(()=>{"use strict"});var cce=N(()=>{"use strict";mN();lce()});var yI,Tp,$E,vI,uce=N(()=>{"use strict";cf();wE();OE();yI={indentTokenName:"INDENT",dedentTokenName:"DEDENT",whitespaceTokenName:"WS",ignoreIndentationDelimiters:[]};(function(t){t.REGULAR="indentation-sensitive",t.IGNORE_INDENTATION="ignore-indentation"})(Tp||(Tp={}));$E=class extends Uu{static{o(this,"IndentationAwareTokenBuilder")}constructor(e=yI){super(),this.indentationStack=[0],this.whitespaceRegExp=/[ \t]+/y,this.options=Object.assign(Object.assign({},yI),e),this.indentTokenType=of({name:this.options.indentTokenName,pattern:this.indentMatcher.bind(this),line_breaks:!1}),this.dedentTokenType=of({name:this.options.dedentTokenName,pattern:this.dedentMatcher.bind(this),line_breaks:!1})}buildTokens(e,r){let n=super.buildTokens(e,r);if(!IE(n))throw new Error("Invalid tokens built by default builder");let{indentTokenName:i,dedentTokenName:a,whitespaceTokenName:s,ignoreIndentationDelimiters:l}=this.options,u,h,f,d=[];for(let p of n){for(let[m,g]of l)p.name===m?p.PUSH_MODE=Tp.IGNORE_INDENTATION:p.name===g&&(p.POP_MODE=!0);p.name===a?u=p:p.name===i?h=p:p.name===s?f=p:d.push(p)}if(!u||!h||!f)throw new Error("Some indentation/whitespace tokens not found!");return l.length>0?{modes:{[Tp.REGULAR]:[u,h,...d,f],[Tp.IGNORE_INDENTATION]:[...d,f]},defaultMode:Tp.REGULAR}:[u,h,f,...d]}flushLexingReport(e){let r=super.flushLexingReport(e);return Object.assign(Object.assign({},r),{remainingDedents:this.flushRemainingDedents(e)})}isStartOfLine(e,r){return r===0||`\r | |
| 815 | +`.includes(e[r-1])}matchWhitespace(e,r,n,i){var a;this.whitespaceRegExp.lastIndex=r;let s=this.whitespaceRegExp.exec(e);return{currIndentLevel:(a=s?.[0].length)!==null&&a!==void 0?a:0,prevIndentLevel:this.indentationStack.at(-1),match:s}}createIndentationTokenInstance(e,r,n,i){let a=this.getLineNumber(r,i);return $u(e,n,i,i+n.length,a,a,1,n.length)}getLineNumber(e,r){return e.substring(0,r).split(/\r\n|\r|\n/).length}indentMatcher(e,r,n,i){if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:a,prevIndentLevel:s,match:l}=this.matchWhitespace(e,r,n,i);return a<=s?null:(this.indentationStack.push(a),l)}dedentMatcher(e,r,n,i){var a,s,l,u;if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:h,prevIndentLevel:f,match:d}=this.matchWhitespace(e,r,n,i);if(h>=f)return null;let p=this.indentationStack.lastIndexOf(h);if(p===-1)return this.diagnostics.push({severity:"error",message:`Invalid dedent level ${h} at offset: ${r}. Current indentation stack: ${this.indentationStack}`,offset:r,length:(s=(a=d?.[0])===null||a===void 0?void 0:a.length)!==null&&s!==void 0?s:0,line:this.getLineNumber(e,r),column:1}),null;let m=this.indentationStack.length-p-1,g=(u=(l=e.substring(0,r).match(/[\r\n]+$/))===null||l===void 0?void 0:l[0].length)!==null&&u!==void 0?u:1;for(let y=0;y<m;y++){let v=this.createIndentationTokenInstance(this.dedentTokenType,e,"",r-(g-1));n.push(v),this.indentationStack.pop()}return null}buildTerminalToken(e){let r=super.buildTerminalToken(e),{indentTokenName:n,dedentTokenName:i,whitespaceTokenName:a}=this.options;return r.name===n?this.indentTokenType:r.name===i?this.dedentTokenType:r.name===a?of({name:a,pattern:this.whitespaceRegExp,group:Xn.SKIPPED}):r}flushRemainingDedents(e){let r=[];for(;this.indentationStack.length>1;)r.push(this.createIndentationTokenInstance(this.dedentTokenType,e,"",e.length)),this.indentationStack.pop();return this.indentationStack=[0],r}},vI=class extends wp{static{o(this,"IndentationAwareLexer")}constructor(e){if(super(e),e.parser.TokenBuilder instanceof $E)this.indentationTokenBuilder=e.parser.TokenBuilder;else throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder")}tokenize(e,r=ME){let n=super.tokenize(e),i=n.report;r?.mode==="full"&&n.tokens.push(...i.remainingDedents),i.remainingDedents=[];let{indentTokenType:a,dedentTokenType:s}=this.indentationTokenBuilder,l=a.tokenTypeIdx,u=s.tokenTypeIdx,h=[],f=n.tokens.length-1;for(let d=0;d<f;d++){let p=n.tokens[d],m=n.tokens[d+1];if(p.tokenTypeIdx===l&&m.tokenTypeIdx===u){d++;continue}h.push(p)}return f>=0&&h.push(n.tokens[f]),n.tokens=h,n}}});var hce=N(()=>{"use strict"});var fce=N(()=>{"use strict";hI();wM();gE();uce();kM();Lx();OE();bE();hce();wE();EM()});var dce=N(()=>{"use strict";BM();FM();$M();GM();zM();VM()});var pce=N(()=>{"use strict";dI();LE()});var zE,ps,xI=N(()=>{"use strict";zE=class{static{o(this,"EmptyFileSystemProvider")}readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}},ps={fileSystemProvider:o(()=>new zE,"fileSystemProvider")}});function IFe(){let t=ui(ds(ps),MFe),e=ui(fs({shared:t}),NFe);return t.ServiceRegistry.register(e),e}function Hu(t){var e;let r=IFe(),n=r.serializer.JsonSerializer.deserialize(t);return r.shared.workspace.LangiumDocumentFactory.fromModel(n,us.parse(`memory://${(e=n.name)!==null&&e!==void 0?e:"grammar"}.langium`)),n}var NFe,MFe,mce=N(()=>{"use strict";pI();gI();Rc();xI();Fc();NFe={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},MFe={AstReflection:o(()=>new Cg,"AstReflection")};o(IFe,"createMinimalGrammarServices");o(Hu,"loadGrammarFromJson")});var Gr={};hr(Gr,{AstUtils:()=>xk,BiMap:()=>vp,Cancellation:()=>yr,ContextCache:()=>xp,CstUtils:()=>ck,DONE_RESULT:()=>Ia,Deferred:()=>cs,Disposable:()=>ff,DisposableCache:()=>p1,DocumentCache:()=>_E,EMPTY_STREAM:()=>I2,ErrorWithLocation:()=>Zd,GrammarUtils:()=>Ek,MultiMap:()=>Bl,OperationCancelled:()=>Pc,Reduction:()=>zm,RegExpUtils:()=>Tk,SimpleCache:()=>$x,StreamImpl:()=>ao,TreeStreamImpl:()=>_c,URI:()=>us,UriUtils:()=>hs,WorkspaceCache:()=>m1,assertUnreachable:()=>Lc,delayNextTick:()=>MM,interruptAndCheck:()=>xi,isOperationCancelled:()=>Bc,loadGrammarFromJson:()=>Hu,setInterruptionPeriod:()=>$le,startCancelableOperation:()=>CE,stream:()=>en});var gce=N(()=>{"use strict";DE();NE();Sr(Gr,Kn);f1();jM();uk();mce();Yo();Ps();Fc();is();qo();Nl();Ol();Lg()});var yce=N(()=>{"use strict";WM();Hx()});var vce=N(()=>{"use strict";qM();YM();XM();KM();h1();xI();QM();fI();ZM()});var xa={};hr(xa,{AbstractAstReflection:()=>Xd,AbstractCstNode:()=>Cx,AbstractLangiumParser:()=>Ax,AbstractParserErrorMessageProvider:()=>vE,AbstractThreadedAsyncParser:()=>cI,AstUtils:()=>xk,BiMap:()=>vp,Cancellation:()=>yr,CompositeCstNodeImpl:()=>mp,ContextCache:()=>xp,CstNodeBuilder:()=>Sx,CstUtils:()=>ck,DEFAULT_TOKENIZE_OPTIONS:()=>ME,DONE_RESULT:()=>Ia,DatatypeSymbol:()=>yE,DefaultAstNodeDescriptionProvider:()=>qx,DefaultAstNodeLocator:()=>Xx,DefaultAsyncParser:()=>ib,DefaultCommentProvider:()=>nb,DefaultConfigurationProvider:()=>jx,DefaultDocumentBuilder:()=>Kx,DefaultDocumentValidator:()=>Wx,DefaultHydrator:()=>sb,DefaultIndexManager:()=>Qx,DefaultJsonSerializer:()=>Gx,DefaultLangiumDocumentFactory:()=>Nx,DefaultLangiumDocuments:()=>Mx,DefaultLexer:()=>wp,DefaultLexerErrorMessageProvider:()=>Jx,DefaultLinker:()=>Ix,DefaultNameProvider:()=>Ox,DefaultReferenceDescriptionProvider:()=>Yx,DefaultReferences:()=>Px,DefaultScopeComputation:()=>Bx,DefaultScopeProvider:()=>zx,DefaultServiceRegistry:()=>Vx,DefaultTokenBuilder:()=>Uu,DefaultValueConverter:()=>yp,DefaultWorkspaceLock:()=>ab,DefaultWorkspaceManager:()=>Zx,Deferred:()=>cs,Disposable:()=>ff,DisposableCache:()=>p1,DocumentCache:()=>_E,DocumentState:()=>kn,DocumentValidator:()=>jo,EMPTY_SCOPE:()=>xFe,EMPTY_STREAM:()=>I2,EmptyFileSystem:()=>ps,EmptyFileSystemProvider:()=>zE,ErrorWithLocation:()=>Zd,GrammarAST:()=>U2,GrammarUtils:()=>Ek,IndentationAwareLexer:()=>vI,IndentationAwareTokenBuilder:()=>$E,JSDocDocumentationProvider:()=>rb,LangiumCompletionParser:()=>Dx,LangiumParser:()=>_x,LangiumParserErrorMessageProvider:()=>s1,LeafCstNodeImpl:()=>pp,LexingMode:()=>Tp,MapScope:()=>Fx,Module:()=>mI,MultiMap:()=>Bl,OperationCancelled:()=>Pc,ParserWorker:()=>uI,Reduction:()=>zm,RegExpUtils:()=>Tk,RootCstNodeImpl:()=>a1,SimpleCache:()=>$x,StreamImpl:()=>ao,StreamScope:()=>d1,TextDocument:()=>c1,TreeStreamImpl:()=>_c,URI:()=>us,UriUtils:()=>hs,ValidationCategory:()=>g1,ValidationRegistry:()=>Ux,ValueConverter:()=>Oc,WorkspaceCache:()=>m1,assertUnreachable:()=>Lc,createCompletionParser:()=>bM,createDefaultCoreModule:()=>fs,createDefaultSharedCoreModule:()=>ds,createGrammarConfig:()=>pN,createLangiumParser:()=>TM,createParser:()=>Rx,delayNextTick:()=>MM,diagnosticData:()=>bp,eagerLoad:()=>ice,getDiagnosticRange:()=>Yle,indentationBuilderDefaultOptions:()=>yI,inject:()=>ui,interruptAndCheck:()=>xi,isAstNode:()=>ii,isAstNodeDescription:()=>kR,isAstNodeWithComment:()=>UM,isCompositeCstNode:()=>Ll,isIMultiModeLexerDefinition:()=>eI,isJSDoc:()=>iI,isLeafCstNode:()=>af,isLinkingError:()=>jd,isNamed:()=>Wle,isOperationCancelled:()=>Bc,isReference:()=>va,isRootCstNode:()=>M2,isTokenTypeArray:()=>IE,isTokenTypeDictionary:()=>JM,loadGrammarFromJson:()=>Hu,parseJSDoc:()=>nI,prepareLangiumParser:()=>Nle,setInterruptionPeriod:()=>$le,startCancelableOperation:()=>CE,stream:()=>en,toDiagnosticData:()=>Xle,toDiagnosticSeverity:()=>RE});var Xo=N(()=>{"use strict";pI();gI();HM();sce();Rl();oce();cce();fce();dce();pce();gce();Sr(xa,Gr);yce();vce();Rc()});function Sce(t){return Fl.isInstance(t,ob)}function Cce(t){return Fl.isInstance(t,y1)}function Ace(t){return Fl.isInstance(t,v1)}function _ce(t){return Fl.isInstance(t,WE)}function Dce(t){return Fl.isInstance(t,x1)}function Lce(t){return Fl.isInstance(t,lb)}function Rce(t){return Fl.isInstance(t,b1)}function Nce(t){return Fl.isInstance(t,cb)}function Mce(t){return Fl.isInstance(t,ub)}function Ice(t){return Fl.isInstance(t,hb)}function Oce(t){return Fl.isInstance(t,fb)}var OFe,Lt,AI,ob,GE,y1,VE,UE,v1,WE,bI,wI,TI,x1,kI,lb,EI,b1,SI,cb,ub,hb,fb,qE,CI,HE,Pce,Fl,xce,PFe,bce,BFe,wce,FFe,Tce,$Fe,kce,zFe,Ece,GFe,VFe,UFe,HFe,WFe,qFe,YFe,co,_I,DI,LI,RI,NI,MI,XFe,jFe,KFe,QFe,w1,Wu,$s,ZFe,zs=N(()=>{"use strict";Xo();Xo();Xo();Xo();OFe=Object.defineProperty,Lt=o((t,e)=>OFe(t,"name",{value:e,configurable:!0}),"__name"),AI="Statement",ob="Architecture";o(Sce,"isArchitecture");Lt(Sce,"isArchitecture");GE="Axis",y1="Branch";o(Cce,"isBranch");Lt(Cce,"isBranch");VE="Checkout",UE="CherryPicking",v1="Commit";o(Ace,"isCommit");Lt(Ace,"isCommit");WE="Common";o(_ce,"isCommon");Lt(_ce,"isCommon");bI="Curve",wI="Edge",TI="Entry",x1="GitGraph";o(Dce,"isGitGraph");Lt(Dce,"isGitGraph");kI="Group",lb="Info";o(Lce,"isInfo");Lt(Lce,"isInfo");EI="Junction",b1="Merge";o(Rce,"isMerge");Lt(Rce,"isMerge");SI="Option",cb="Packet";o(Nce,"isPacket");Lt(Nce,"isPacket");ub="PacketBlock";o(Mce,"isPacketBlock");Lt(Mce,"isPacketBlock");hb="Pie";o(Ice,"isPie");Lt(Ice,"isPie");fb="PieSection";o(Oce,"isPieSection");Lt(Oce,"isPieSection");qE="Radar",CI="Service",HE="Direction",Pce=class extends Xd{static{o(this,"MermaidAstReflection")}static{Lt(this,"MermaidAstReflection")}getAllTypes(){return[ob,GE,y1,VE,UE,v1,WE,bI,HE,wI,TI,x1,kI,lb,EI,b1,SI,cb,ub,hb,fb,qE,CI,AI]}computeIsSubtype(t,e){switch(t){case y1:case VE:case UE:case v1:case b1:return this.isSubtype(AI,e);case HE:return this.isSubtype(x1,e);default:return!1}}getReferenceType(t){let e=`${t.container.$type}:${t.property}`;switch(e){case"Entry:axis":return GE;default:throw new Error(`${e} is not a valid reference id.`)}}getTypeMetaData(t){switch(t){case ob:return{name:ob,properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case GE:return{name:GE,properties:[{name:"label"},{name:"name"}]};case y1:return{name:y1,properties:[{name:"name"},{name:"order"}]};case VE:return{name:VE,properties:[{name:"branch"}]};case UE:return{name:UE,properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case v1:return{name:v1,properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case WE:return{name:WE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case bI:return{name:bI,properties:[{name:"entries",defaultValue:[]},{name:"label"},{name:"name"}]};case wI:return{name:wI,properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case TI:return{name:TI,properties:[{name:"axis"},{name:"value"}]};case x1:return{name:x1,properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case kI:return{name:kI,properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case lb:return{name:lb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case EI:return{name:EI,properties:[{name:"id"},{name:"in"}]};case b1:return{name:b1,properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case SI:return{name:SI,properties:[{name:"name"},{name:"value",defaultValue:!1}]};case cb:return{name:cb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case ub:return{name:ub,properties:[{name:"end"},{name:"label"},{name:"start"}]};case hb:return{name:hb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case fb:return{name:fb,properties:[{name:"label"},{name:"value"}]};case qE:return{name:qE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"axes",defaultValue:[]},{name:"curves",defaultValue:[]},{name:"options",defaultValue:[]},{name:"title"}]};case CI:return{name:CI,properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case HE:return{name:HE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};default:return{name:t,properties:[]}}}},Fl=new Pce,PFe=Lt(()=>xce??(xce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"InfoGrammar"),BFe=Lt(()=>bce??(bce=Hu(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"packet-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),FFe=Lt(()=>wce??(wce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"PIE_SECTION_LABEL","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]+\\"/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PIE_SECTION_VALUE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"PieGrammar"),$Fe=Lt(()=>Tce??(Tce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ID","definition":{"$type":"RegexToken","regex":"/[\\\\w]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TEXT_ICON","definition":{"$type":"RegexToken","regex":"/\\\\(\\"[^\\"]+\\"\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"ArchitectureGrammar"),zFe=Lt(()=>kce??(kce=Hu(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+(?=\\\\s)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),GFe=Lt(()=>Ece??(Ece=Hu(`{"$type":"Grammar","isDeclared":true,"name":"Radar","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@12"}}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@12"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9\\\\-_]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"RadarGrammar"),VFe={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},UFe={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},HFe={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},WFe={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},qFe={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},YFe={languageId:"radar",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},co={AstReflection:Lt(()=>new Pce,"AstReflection")},_I={Grammar:Lt(()=>PFe(),"Grammar"),LanguageMetaData:Lt(()=>VFe,"LanguageMetaData"),parser:{}},DI={Grammar:Lt(()=>BFe(),"Grammar"),LanguageMetaData:Lt(()=>UFe,"LanguageMetaData"),parser:{}},LI={Grammar:Lt(()=>FFe(),"Grammar"),LanguageMetaData:Lt(()=>HFe,"LanguageMetaData"),parser:{}},RI={Grammar:Lt(()=>$Fe(),"Grammar"),LanguageMetaData:Lt(()=>WFe,"LanguageMetaData"),parser:{}},NI={Grammar:Lt(()=>zFe(),"Grammar"),LanguageMetaData:Lt(()=>qFe,"LanguageMetaData"),parser:{}},MI={Grammar:Lt(()=>GFe(),"Grammar"),LanguageMetaData:Lt(()=>YFe,"LanguageMetaData"),parser:{}},XFe=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,jFe=/accTitle[\t ]*:([^\n\r]*)/,KFe=/title([\t ][^\n\r]*|)/,QFe={ACC_DESCR:XFe,ACC_TITLE:jFe,TITLE:KFe},w1=class extends yp{static{o(this,"AbstractMermaidValueConverter")}static{Lt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let n=this.runCommonConverter(t,e,r);return n===void 0&&(n=this.runCustomConverter(t,e,r)),n===void 0?super.runConverter(t,e,r):n}runCommonConverter(t,e,r){let n=QFe[t.name];if(n===void 0)return;let i=n.exec(e);if(i!==null){if(i[1]!==void 0)return i[1].trim().replace(/[\t ]{2,}/gm," ");if(i[2]!==void 0)return i[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` | |
| 816 | +`)}}},Wu=class extends w1{static{o(this,"CommonValueConverter")}static{Lt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},$s=class extends Uu{static{o(this,"AbstractMermaidTokenBuilder")}static{Lt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let n=super.buildKeywordTokens(t,e,r);return n.forEach(i=>{this.keywords.has(i.name)&&i.PATTERN!==void 0&&(i.PATTERN=new RegExp(i.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),n}},ZFe=class extends $s{static{o(this,"CommonTokenBuilder")}static{Lt(this,"CommonTokenBuilder")}}});function XE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),NI,YE);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var JFe,YE,II=N(()=>{"use strict";zs();Xo();JFe=class extends $s{static{o(this,"GitGraphTokenBuilder")}static{Lt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},YE={parser:{TokenBuilder:Lt(()=>new JFe,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(XE,"createGitGraphServices");Lt(XE,"createGitGraphServices")});function KE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),_I,jE);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var e$e,jE,OI=N(()=>{"use strict";zs();Xo();e$e=class extends $s{static{o(this,"InfoTokenBuilder")}static{Lt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},jE={parser:{TokenBuilder:Lt(()=>new e$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(KE,"createInfoServices");Lt(KE,"createInfoServices")});function ZE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),DI,QE);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var t$e,QE,PI=N(()=>{"use strict";zs();Xo();t$e=class extends $s{static{o(this,"PacketTokenBuilder")}static{Lt(this,"PacketTokenBuilder")}constructor(){super(["packet-beta"])}},QE={parser:{TokenBuilder:Lt(()=>new t$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(ZE,"createPacketServices");Lt(ZE,"createPacketServices")});function e6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),LI,JE);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var r$e,n$e,JE,BI=N(()=>{"use strict";zs();Xo();r$e=class extends $s{static{o(this,"PieTokenBuilder")}static{Lt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},n$e=class extends w1{static{o(this,"PieValueConverter")}static{Lt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},JE={parser:{TokenBuilder:Lt(()=>new r$e,"TokenBuilder"),ValueConverter:Lt(()=>new n$e,"ValueConverter")}};o(e6,"createPieServices");Lt(e6,"createPieServices")});function r6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),RI,t6);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var i$e,a$e,t6,FI=N(()=>{"use strict";zs();Xo();i$e=class extends $s{static{o(this,"ArchitectureTokenBuilder")}static{Lt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},a$e=class extends w1{static{o(this,"ArchitectureValueConverter")}static{Lt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE")return e.replace(/[[\]]/g,"").trim()}},t6={parser:{TokenBuilder:Lt(()=>new i$e,"TokenBuilder"),ValueConverter:Lt(()=>new a$e,"ValueConverter")}};o(r6,"createArchitectureServices");Lt(r6,"createArchitectureServices")});function i6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),MI,n6);return e.ServiceRegistry.register(r),{shared:e,Radar:r}}var s$e,n6,$I=N(()=>{"use strict";zs();Xo();s$e=class extends $s{static{o(this,"RadarTokenBuilder")}static{Lt(this,"RadarTokenBuilder")}constructor(){super(["radar-beta"])}},n6={parser:{TokenBuilder:Lt(()=>new s$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(i6,"createRadarServices");Lt(i6,"createRadarServices")});var Bce={};hr(Bce,{InfoModule:()=>jE,createInfoServices:()=>KE});var Fce=N(()=>{"use strict";OI();zs()});var $ce={};hr($ce,{PacketModule:()=>QE,createPacketServices:()=>ZE});var zce=N(()=>{"use strict";PI();zs()});var Gce={};hr(Gce,{PieModule:()=>JE,createPieServices:()=>e6});var Vce=N(()=>{"use strict";BI();zs()});var Uce={};hr(Uce,{ArchitectureModule:()=>t6,createArchitectureServices:()=>r6});var Hce=N(()=>{"use strict";FI();zs()});var Wce={};hr(Wce,{GitGraphModule:()=>YE,createGitGraphServices:()=>XE});var qce=N(()=>{"use strict";II();zs()});var Yce={};hr(Yce,{RadarModule:()=>n6,createRadarServices:()=>i6});var Xce=N(()=>{"use strict";$I();zs()});async function uo(t,e){let r=o$e[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);df[t]||await r();let i=df[t].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new l$e(i);return i.value}var df,o$e,l$e,kp=N(()=>{"use strict";II();OI();PI();BI();FI();$I();zs();df={},o$e={info:Lt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(Fce(),Bce)),e=t().Info.parser.LangiumParser;df.info=e},"info"),packet:Lt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(zce(),$ce)),e=t().Packet.parser.LangiumParser;df.packet=e},"packet"),pie:Lt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(Vce(),Gce)),e=t().Pie.parser.LangiumParser;df.pie=e},"pie"),architecture:Lt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(Hce(),Uce)),e=t().Architecture.parser.LangiumParser;df.architecture=e},"architecture"),gitGraph:Lt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(qce(),Wce)),e=t().GitGraph.parser.LangiumParser;df.gitGraph=e},"gitGraph"),radar:Lt(async()=>{let{createRadarServices:t}=await Promise.resolve().then(()=>(Xce(),Yce)),e=t().Radar.parser.LangiumParser;df.radar=e},"radar")};o(uo,"parse");Lt(uo,"parse");l$e=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(n=>n.message).join(` | |
| 817 | +`),r=t.parserErrors.map(n=>n.message).join(` | |
| 818 | +`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{Lt(this,"MermaidParseError")}}});function $c(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var T1=N(()=>{"use strict";o($c,"populateCommonDb")});var Kr,a6=N(()=>{"use strict";Kr={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var pf,s6=N(()=>{"use strict";pf=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function zI(){return j9({length:7})}function u$e(t,e){let r=Object.create(null);return t.reduce((n,i)=>{let a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}function jce(t,e,r){let n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function Qce(t){let e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]),r="";t.forEach(function(i){i===e?r+=" *":r+=" |"});let n=[r,e.id,e.seq];for(let i in _t.records.branches)_t.records.branches.get(i)===e.id&&n.push(i);if(Y.debug(n.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let i=_t.records.commits.get(e.parents[0]);jce(t,e,i),e.parents[1]&&t.push(_t.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let i=_t.records.commits.get(e.parents[0]);jce(t,e,i)}}t=u$e(t,i=>i.id),Qce(t)}var c$e,Ep,_t,h$e,f$e,d$e,p$e,m$e,g$e,y$e,Kce,v$e,x$e,b$e,w$e,T$e,Zce,k$e,E$e,S$e,o6,GI=N(()=>{"use strict";vt();ir();ji();gr();mi();a6();s6();Ya();c$e=or.gitGraph,Ep=o(()=>Fi({...c$e,...cr().gitGraph}),"getConfig"),_t=new pf(()=>{let t=Ep(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(zI,"getID");o(u$e,"uniqBy");h$e=o(function(t){_t.records.direction=t},"setDirection"),f$e=o(function(t){Y.debug("options str",t),t=t?.trim(),t=t||"{}";try{_t.records.options=JSON.parse(t)}catch(e){Y.error("error while parsing gitGraph options",e.message)}},"setOptions"),d$e=o(function(){return _t.records.options},"getOptions"),p$e=o(function(t){let e=t.msg,r=t.id,n=t.type,i=t.tags;Y.info("commit",e,r,n,i),Y.debug("Entering commit:",e,r,n,i);let a=Ep();r=Ze.sanitizeText(r,a),e=Ze.sanitizeText(e,a),i=i?.map(l=>Ze.sanitizeText(l,a));let s={id:r||_t.records.seq+"-"+zI(),message:e,seq:_t.records.seq++,type:n??Kr.NORMAL,tags:i??[],parents:_t.records.head==null?[]:[_t.records.head.id],branch:_t.records.currBranch};_t.records.head=s,Y.info("main branch",a.mainBranchName),_t.records.commits.set(s.id,s),_t.records.branches.set(_t.records.currBranch,s.id),Y.debug("in pushCommit "+s.id)},"commit"),m$e=o(function(t){let e=t.name,r=t.order;if(e=Ze.sanitizeText(e,Ep()),_t.records.branches.has(e))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);_t.records.branches.set(e,_t.records.head!=null?_t.records.head.id:null),_t.records.branchConfig.set(e,{name:e,order:r}),Kce(e),Y.debug("in createBranch")},"branch"),g$e=o(t=>{let e=t.branch,r=t.id,n=t.type,i=t.tags,a=Ep();e=Ze.sanitizeText(e,a),r&&(r=Ze.sanitizeText(r,a));let s=_t.records.branches.get(_t.records.currBranch),l=_t.records.branches.get(e),u=s?_t.records.commits.get(s):void 0,h=l?_t.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(_t.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${_t.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!_t.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&_t.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom Id");throw p.hash={text:`merge ${e} ${r} ${n} ${i?.join(" ")}`,token:`merge ${e} ${r} ${n} ${i?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${n} ${i?.join(" ")}`]},p}let f=l||"",d={id:r||`${_t.records.seq}-${zI()}`,message:`merged branch ${e} into ${_t.records.currBranch}`,seq:_t.records.seq++,parents:_t.records.head==null?[]:[_t.records.head.id,f],branch:_t.records.currBranch,type:Kr.MERGE,customType:n,customId:!!r,tags:i??[]};_t.records.head=d,_t.records.commits.set(d.id,d),_t.records.branches.set(_t.records.currBranch,d.id),Y.debug(_t.records.branches),Y.debug("in mergeBranch")},"merge"),y$e=o(function(t){let e=t.id,r=t.targetId,n=t.tags,i=t.parent;Y.debug("Entering cherryPick:",e,r,n);let a=Ep();if(e=Ze.sanitizeText(e,a),r=Ze.sanitizeText(r,a),n=n?.map(u=>Ze.sanitizeText(u,a)),i=Ze.sanitizeText(i,a),!e||!_t.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=_t.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(i&&!(Array.isArray(s.parents)&&s.parents.includes(i)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===Kr.MERGE&&!i)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!_t.records.commits.has(r)){if(l===_t.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=_t.records.branches.get(_t.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${_t.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=_t.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${_t.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:_t.records.seq+"-"+zI(),message:`cherry-picked ${s?.message} into ${_t.records.currBranch}`,seq:_t.records.seq++,parents:_t.records.head==null?[]:[_t.records.head.id,s.id],branch:_t.records.currBranch,type:Kr.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${s.id}${s.type===Kr.MERGE?`|parent:${i}`:""}`]};_t.records.head=f,_t.records.commits.set(f.id,f),_t.records.branches.set(_t.records.currBranch,f.id),Y.debug(_t.records.branches),Y.debug("in cherryPick")}},"cherryPick"),Kce=o(function(t){if(t=Ze.sanitizeText(t,Ep()),_t.records.branches.has(t)){_t.records.currBranch=t;let e=_t.records.branches.get(_t.records.currBranch);e===void 0||!e?_t.records.head=null:_t.records.head=_t.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(jce,"upsert");o(Qce,"prettyPrintCommitHistory");v$e=o(function(){Y.debug(_t.records.commits);let t=Zce()[0];Qce([t])},"prettyPrint"),x$e=o(function(){_t.reset(),Ar()},"clear"),b$e=o(function(){return[..._t.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),w$e=o(function(){return _t.records.branches},"getBranches"),T$e=o(function(){return _t.records.commits},"getCommits"),Zce=o(function(){let t=[..._t.records.commits.values()];return t.forEach(function(e){Y.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),k$e=o(function(){return _t.records.currBranch},"getCurrentBranch"),E$e=o(function(){return _t.records.direction},"getDirection"),S$e=o(function(){return _t.records.head},"getHead"),o6={commitType:Kr,getConfig:Ep,setDirection:h$e,setOptions:f$e,getOptions:d$e,commit:p$e,branch:m$e,merge:g$e,cherryPick:y$e,checkout:Kce,prettyPrint:v$e,clear:x$e,getBranchesAsObjArray:b$e,getBranches:w$e,getCommits:T$e,getCommitsArray:Zce,getCurrentBranch:k$e,getDirection:E$e,getHead:S$e,setAccTitle:Lr,getAccTitle:Rr,getAccDescription:Mr,setAccDescription:Nr,setDiagramTitle:$r,getDiagramTitle:Ir}});var C$e,A$e,_$e,D$e,L$e,R$e,N$e,Jce,eue=N(()=>{"use strict";kp();vt();T1();GI();a6();C$e=o((t,e)=>{$c(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)A$e(r,e)},"populate"),A$e=o((t,e)=>{let n={Commit:o(i=>e.commit(_$e(i)),"Commit"),Branch:o(i=>e.branch(D$e(i)),"Branch"),Merge:o(i=>e.merge(L$e(i)),"Merge"),Checkout:o(i=>e.checkout(R$e(i)),"Checkout"),CherryPicking:o(i=>e.cherryPick(N$e(i)),"CherryPicking")}[t.$type];n?n(t):Y.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),_$e=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?Kr[t.type]:Kr.NORMAL,tags:t.tags??void 0}),"parseCommit"),D$e=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),L$e=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?Kr[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),R$e=o(t=>t.branch,"parseCheckout"),N$e=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),Jce={parse:o(async t=>{let e=await uo("gitGraph",t);Y.debug(e),C$e(e,o6)},"parse")}});var M$e,Ko,gf,yf,zc,qu,Sp,Gs,Vs,l6,db,c6,mf,Br,I$e,rue,nue,O$e,P$e,B$e,F$e,$$e,z$e,G$e,V$e,U$e,H$e,W$e,q$e,tue,Y$e,pb,X$e,j$e,K$e,Q$e,Z$e,iue,aue=N(()=>{"use strict";dr();zt();vt();ir();a6();M$e=me(),Ko=M$e?.gitGraph,gf=10,yf=40,zc=4,qu=2,Sp=8,Gs=new Map,Vs=new Map,l6=30,db=new Map,c6=[],mf=0,Br="LR",I$e=o(()=>{Gs.clear(),Vs.clear(),db.clear(),mf=0,c6=[],Br="LR"},"clear"),rue=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|<br\s*\/?>/gi):t).forEach(n=>{let i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n.trim(),e.appendChild(i)}),e},"drawText"),nue=o(t=>{let e,r,n;return Br==="BT"?(r=o((i,a)=>i<=a,"comparisonFunc"),n=1/0):(r=o((i,a)=>i>=a,"comparisonFunc"),n=0),t.forEach(i=>{let a=Br==="TB"||Br=="BT"?Vs.get(i)?.y:Vs.get(i)?.x;a!==void 0&&r(a,n)&&(e=i,n=a)}),e},"findClosestParent"),O$e=o(t=>{let e="",r=1/0;return t.forEach(n=>{let i=Vs.get(n).y;i<=r&&(e=n,r=i)}),e||void 0},"findClosestParentBT"),P$e=o((t,e,r)=>{let n=r,i=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(n=F$e(l),i=Math.max(n,i)):a.push(l),$$e(l,n)}),n=i,a.forEach(s=>{z$e(s,n,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=O$e(l.parents);n=Vs.get(u).y-yf,n<=i&&(i=n);let h=Gs.get(l.branch).pos,f=n-gf;Vs.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),B$e=o(t=>{let e=nue(t.parents.filter(n=>n!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Vs.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),F$e=o(t=>B$e(t)+yf,"calculateCommitPosition"),$$e=o((t,e)=>{let r=Gs.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let n=r.pos,i=e+gf;return Vs.set(t.id,{x:n,y:i}),{x:n,y:i}},"setCommitPosition"),z$e=o((t,e,r)=>{let n=Gs.get(t.branch);if(!n)throw new Error(`Branch not found for commit ${t.id}`);let i=e+r,a=n.pos;Vs.set(t.id,{x:a,y:i})},"setRootPosition"),G$e=o((t,e,r,n,i,a)=>{if(a===Kr.HIGHLIGHT)t.append("rect").attr("x",r.x-10).attr("y",r.y-10).attr("width",20).attr("height",20).attr("class",`commit ${e.id} commit-highlight${i%Sp} ${n}-outer`),t.append("rect").attr("x",r.x-6).attr("y",r.y-6).attr("width",12).attr("height",12).attr("class",`commit ${e.id} commit${i%Sp} ${n}-inner`);else if(a===Kr.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",10).attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`);else{let s=t.append("circle");if(s.attr("cx",r.x),s.attr("cy",r.y),s.attr("r",e.type===Kr.MERGE?9:10),s.attr("class",`commit ${e.id} commit${i%Sp}`),a===Kr.MERGE){let l=t.append("circle");l.attr("cx",r.x),l.attr("cy",r.y),l.attr("r",6),l.attr("class",`commit ${n} ${e.id} commit${i%Sp}`)}a===Kr.REVERSE&&t.append("path").attr("d",`M ${r.x-5},${r.y-5}L${r.x+5},${r.y+5}M${r.x-5},${r.y+5}L${r.x+5},${r.y-5}`).attr("class",`commit ${n} ${e.id} commit${i%Sp}`)}},"drawCommitBullet"),V$e=o((t,e,r,n)=>{if(e.type!==Kr.CHERRY_PICK&&(e.customId&&e.type===Kr.MERGE||e.type!==Kr.MERGE)&&Ko?.showCommitLabel){let i=t.append("g"),a=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",n).attr("y",r.y+25).attr("class","commit-label").text(e.id),l=s.node()?.getBBox();if(l&&(a.attr("x",r.posWithOffset-l.width/2-qu).attr("y",r.y+13.5).attr("width",l.width+2*qu).attr("height",l.height+2*qu),Br==="TB"||Br==="BT"?(a.attr("x",r.x-(l.width+4*zc+5)).attr("y",r.y-12),s.attr("x",r.x-(l.width+4*zc)).attr("y",r.y+l.height-12)):s.attr("x",r.posWithOffset-l.width/2),Ko.rotateCommitLabel))if(Br==="TB"||Br==="BT")s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),a.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let u=-7.5-(l.width+10)/25*9.5,h=10+l.width/25*8.5;i.attr("transform","translate("+u+", "+h+") rotate(-45, "+n+", "+r.y+")")}}},"drawCommitLabel"),U$e=o((t,e,r,n)=>{if(e.tags.length>0){let i=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-i).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:i}),i+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",` | |
| 819 | + ${n-a/2-zc/2},${m+qu} | |
| 820 | + ${n-a/2-zc/2},${m-qu} | |
| 821 | + ${r.posWithOffset-a/2-zc},${m-p-qu} | |
| 822 | + ${r.posWithOffset+a/2+zc},${m-p-qu} | |
| 823 | + ${r.posWithOffset+a/2+zc},${m+p+qu} | |
| 824 | + ${r.posWithOffset-a/2-zc},${m+p+qu}`),h.attr("cy",m).attr("cx",n-a/2+zc/2).attr("r",1.5).attr("class","tag-hole"),Br==="TB"||Br==="BT"){let g=n+d;f.attr("class","tag-label-bkg").attr("points",` | |
| 825 | + ${r.x},${g+2} | |
| 826 | + ${r.x},${g-2} | |
| 827 | + ${r.x+gf},${g-p-2} | |
| 828 | + ${r.x+gf+a+4},${g-p-2} | |
| 829 | + ${r.x+gf+a+4},${g+p+2} | |
| 830 | + ${r.x+gf},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),h.attr("cx",r.x+zc/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+n+")")}}}},"drawCommitTags"),H$e=o(t=>{switch(t.customType??t.type){case Kr.NORMAL:return"commit-normal";case Kr.REVERSE:return"commit-reverse";case Kr.HIGHLIGHT:return"commit-highlight";case Kr.MERGE:return"commit-merge";case Kr.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),W$e=o((t,e,r,n)=>{let i={x:0,y:0};if(t.parents.length>0){let a=nue(t.parents);if(a){let s=n.get(a)??i;return e==="TB"?s.y+yf:e==="BT"?(n.get(t.id)??i).y-yf:s.x+yf}}else return e==="TB"?l6:e==="BT"?(n.get(t.id)??i).y-yf:0;return 0},"calculatePosition"),q$e=o((t,e,r)=>{let n=Br==="BT"&&r?e:e+gf,i=Br==="TB"||Br==="BT"?n:Gs.get(t.branch)?.pos,a=Br==="TB"||Br==="BT"?Gs.get(t.branch)?.pos:n;if(a===void 0||i===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:a,y:i,posWithOffset:n}},"getCommitPosition"),tue=o((t,e,r)=>{if(!Ko)throw new Error("GitGraph config not found");let n=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),a=Br==="TB"||Br==="BT"?l6:0,s=[...e.keys()],l=Ko?.parallelCommits??!1,u=o((f,d)=>{let p=e.get(f)?.seq,m=e.get(d)?.seq;return p!==void 0&&m!==void 0?p-m:0},"sortKeys"),h=s.sort(u);Br==="BT"&&(l&&P$e(h,e,a),h=h.reverse()),h.forEach(f=>{let d=e.get(f);if(!d)throw new Error(`Commit not found for key ${f}`);l&&(a=W$e(d,Br,a,Vs));let p=q$e(d,a,l);if(r){let m=H$e(d),g=d.customType??d.type,y=Gs.get(d.branch)?.index??0;G$e(n,d,p,m,y,g),V$e(i,d,p,a),U$e(i,d,p,a)}Br==="TB"||Br==="BT"?Vs.set(d.id,{x:p.x,y:p.posWithOffset}):Vs.set(d.id,{x:p.posWithOffset,y:p.y}),a=Br==="BT"&&l?a+yf:a+yf+gf,a>mf&&(mf=a)})},"drawCommits"),Y$e=o((t,e,r,n,i)=>{let s=(Br==="TB"||Br==="BT"?r.x<n.x:r.y<n.y)?e.branch:t.branch,l=o(h=>h.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.seq<e.seq,"isBetweenCommits");return[...i.values()].some(h=>u(h)&&l(h))},"shouldRerouteArrow"),pb=o((t,e,r=0)=>{let n=t+Math.abs(t-e)/2;if(r>5)return n;if(c6.every(s=>Math.abs(s-n)>=10))return c6.push(n),n;let a=Math.abs(t-e);return pb(t,e-a/5,r+1)},"findLane"),X$e=o((t,e,r,n)=>{let i=Vs.get(e.id),a=Vs.get(r.id);if(i===void 0||a===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let s=Y$e(e,r,i,a,n),l="",u="",h=0,f=0,d=Gs.get(r.branch)?.index;r.type===Kr.MERGE&&e.id!==r.parents[0]&&(d=Gs.get(e.branch)?.index);let p;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,f=10;let m=i.y<a.y?pb(i.y,a.y):pb(a.y,i.y),g=i.x<a.x?pb(i.x,a.x):pb(a.x,i.x);Br==="TB"?i.x<a.x?p=`M ${i.x} ${i.y} L ${g-h} ${i.y} ${u} ${g} ${i.y+f} L ${g} ${a.y-h} ${l} ${g+f} ${a.y} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${g+h} ${i.y} ${l} ${g} ${i.y+f} L ${g} ${a.y-h} ${u} ${g-f} ${a.y} L ${a.x} ${a.y}`):Br==="BT"?i.x<a.x?p=`M ${i.x} ${i.y} L ${g-h} ${i.y} ${l} ${g} ${i.y-f} L ${g} ${a.y+h} ${u} ${g+f} ${a.y} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${g+h} ${i.y} ${u} ${g} ${i.y-f} L ${g} ${a.y+h} ${l} ${g-f} ${a.y} L ${a.x} ${a.y}`):i.y<a.y?p=`M ${i.x} ${i.y} L ${i.x} ${m-h} ${l} ${i.x+f} ${m} L ${a.x-h} ${m} ${u} ${a.x} ${m+f} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${i.x} ${m+h} ${u} ${i.x+f} ${m} L ${a.x-h} ${m} ${l} ${a.x} ${m-f} L ${a.x} ${a.y}`)}else l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,Br==="TB"?(i.x<a.x&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${l} ${i.x+f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${u} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x>a.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${u} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x+h} ${i.y} ${l} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):Br==="BT"?(i.x<a.x&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x>a.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${l} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):(i.y<a.y&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${u} ${a.x} ${i.y+f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${l} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y>a.y&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y===a.y&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`));if(p===void 0)throw new Error("Line definition not found");t.append("path").attr("d",p).attr("class","arrow arrow"+d%Sp)},"drawArrow"),j$e=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(n=>{let i=e.get(n);i.parents&&i.parents.length>0&&i.parents.forEach(a=>{X$e(r,e.get(a),i,e)})})},"drawArrows"),K$e=o((t,e)=>{let r=t.append("g");e.forEach((n,i)=>{let a=i%Sp,s=Gs.get(n.name)?.pos;if(s===void 0)throw new Error(`Position not found for branch ${n.name}`);let l=r.append("line");l.attr("x1",0),l.attr("y1",s),l.attr("x2",mf),l.attr("y2",s),l.attr("class","branch branch"+a),Br==="TB"?(l.attr("y1",l6),l.attr("x1",s),l.attr("y2",mf),l.attr("x2",s)):Br==="BT"&&(l.attr("y1",mf),l.attr("x1",s),l.attr("y2",l6),l.attr("x2",s)),c6.push(s);let u=n.name,h=rue(u),f=r.insert("rect"),p=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+a);p.node().appendChild(h);let m=h.getBBox();f.attr("class","branchLabelBkg label"+a).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(Ko?.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(Ko?.rotateCommitLabel===!0?30:0))+", "+(s-m.height/2-1)+")"),Br==="TB"?(f.attr("x",s-m.width/2-10).attr("y",0),p.attr("transform","translate("+(s-m.width/2-5)+", 0)")):Br==="BT"?(f.attr("x",s-m.width/2-10).attr("y",mf),p.attr("transform","translate("+(s-m.width/2-5)+", "+mf+")")):f.attr("transform","translate(-19, "+(s-m.height/2)+")")})},"drawBranches"),Q$e=o(function(t,e,r,n,i){return Gs.set(t,{pos:e,index:r}),e+=50+(i?40:0)+(Br==="TB"||Br==="BT"?n.width/2:0),e},"setBranchPosition"),Z$e=o(function(t,e,r,n){if(I$e(),Y.debug("in gitgraph renderer",t+` | |
| 831 | +`,"id:",e,r),!Ko)throw new Error("GitGraph config not found");let i=Ko.rotateCommitLabel??!1,a=n.db;db=a.getCommits();let s=a.getBranchesAsObjArray();Br=a.getDirection();let l=Ge(`[id="${e}"]`),u=0;s.forEach((h,f)=>{let d=rue(h.name),p=l.append("g"),m=p.insert("g").attr("class","branchLabel"),g=m.insert("g").attr("class","label branch-label");g.node()?.appendChild(d);let y=d.getBBox();u=Q$e(h.name,u,f,y,i),g.remove(),m.remove(),p.remove()}),tue(l,db,!1),Ko.showBranches&&K$e(l,s),j$e(l,db),tue(l,db,!0),Gt.insertTitle(l,"gitTitleText",Ko.titleTopMargin??0,a.getDiagramTitle()),oA(void 0,l,Ko.diagramPadding,Ko.useMaxWidth)},"draw"),iue={draw:Z$e}});var J$e,sue,oue=N(()=>{"use strict";J$e=o(t=>` | |
| 832 | + .commit-id, | |
| 833 | + .commit-msg, | |
| 834 | + .branch-label { | |
| 835 | + fill: lightgrey; | |
| 836 | + color: lightgrey; | |
| 837 | + font-family: 'trebuchet ms', verdana, arial, sans-serif; | |
| 838 | + font-family: var(--mermaid-font-family); | |
| 839 | + } | |
| 840 | + ${[0,1,2,3,4,5,6,7].map(e=>` | |
| 841 | + .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; } | |
| 842 | + .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; } | |
| 843 | + .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; } | |
| 844 | + .label${e} { fill: ${t["git"+e]}; } | |
| 845 | + .arrow${e} { stroke: ${t["git"+e]}; } | |
| 846 | + `).join(` | |
| 847 | +`)} | |
| 848 | + | |
| 849 | + .branch { | |
| 850 | + stroke-width: 1; | |
| 851 | + stroke: ${t.lineColor}; | |
| 852 | + stroke-dasharray: 2; | |
| 853 | + } | |
| 854 | + .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};} | |
| 855 | + .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; } | |
| 856 | + .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};} | |
| 857 | + .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; } | |
| 858 | + .tag-hole { fill: ${t.textColor}; } | |
| 859 | + | |
| 860 | + .commit-merge { | |
| 861 | + stroke: ${t.primaryColor}; | |
| 862 | + fill: ${t.primaryColor}; | |
| 863 | + } | |
| 864 | + .commit-reverse { | |
| 865 | + stroke: ${t.primaryColor}; | |
| 866 | + fill: ${t.primaryColor}; | |
| 867 | + stroke-width: 3; | |
| 868 | + } | |
| 869 | + .commit-highlight-outer { | |
| 870 | + } | |
| 871 | + .commit-highlight-inner { | |
| 872 | + stroke: ${t.primaryColor}; | |
| 873 | + fill: ${t.primaryColor}; | |
| 874 | + } | |
| 875 | + | |
| 876 | + .arrow { stroke-width: 8; stroke-linecap: round; fill: none} | |
| 877 | + .gitTitleText { | |
| 878 | + text-anchor: middle; | |
| 879 | + font-size: 18px; | |
| 880 | + fill: ${t.textColor}; | |
| 881 | + } | |
| 882 | +`,"getStyles"),sue=J$e});var lue={};hr(lue,{diagram:()=>eze});var eze,cue=N(()=>{"use strict";eue();GI();aue();oue();eze={parser:Jce,db:o6,renderer:iue,styles:sue}});var VI,fue,due=N(()=>{"use strict";VI=function(){var t=o(function(L,R,O,M){for(O=O||{},M=L.length;M--;O[L[M]]=R);return O},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],i=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],w=[1,19],C=[1,20],T=[1,21],E=[1,22],A=[1,23],S=[1,25],_=[1,35],I={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(R,O,M,B,F,P,z){var $=P.length-1;switch(F){case 1:return P[$-1];case 2:this.$=[];break;case 3:P[$-1].push(P[$]),this.$=P[$-1];break;case 4:case 5:this.$=P[$];break;case 6:case 7:this.$=[];break;case 8:B.setWeekday("monday");break;case 9:B.setWeekday("tuesday");break;case 10:B.setWeekday("wednesday");break;case 11:B.setWeekday("thursday");break;case 12:B.setWeekday("friday");break;case 13:B.setWeekday("saturday");break;case 14:B.setWeekday("sunday");break;case 15:B.setWeekend("friday");break;case 16:B.setWeekend("saturday");break;case 17:B.setDateFormat(P[$].substr(11)),this.$=P[$].substr(11);break;case 18:B.enableInclusiveEndDates(),this.$=P[$].substr(18);break;case 19:B.TopAxis(),this.$=P[$].substr(8);break;case 20:B.setAxisFormat(P[$].substr(11)),this.$=P[$].substr(11);break;case 21:B.setTickInterval(P[$].substr(13)),this.$=P[$].substr(13);break;case 22:B.setExcludes(P[$].substr(9)),this.$=P[$].substr(9);break;case 23:B.setIncludes(P[$].substr(9)),this.$=P[$].substr(9);break;case 24:B.setTodayMarker(P[$].substr(12)),this.$=P[$].substr(12);break;case 27:B.setDiagramTitle(P[$].substr(6)),this.$=P[$].substr(6);break;case 28:this.$=P[$].trim(),B.setAccTitle(this.$);break;case 29:case 30:this.$=P[$].trim(),B.setAccDescription(this.$);break;case 31:B.addSection(P[$].substr(8)),this.$=P[$].substr(8);break;case 33:B.addTask(P[$-1],P[$]),this.$="task";break;case 34:this.$=P[$-1],B.setClickEvent(P[$-1],P[$],null);break;case 35:this.$=P[$-2],B.setClickEvent(P[$-2],P[$-1],P[$]);break;case 36:this.$=P[$-2],B.setClickEvent(P[$-2],P[$-1],null),B.setLink(P[$-2],P[$]);break;case 37:this.$=P[$-3],B.setClickEvent(P[$-3],P[$-2],P[$-1]),B.setLink(P[$-3],P[$]);break;case 38:this.$=P[$-2],B.setClickEvent(P[$-2],P[$],null),B.setLink(P[$-2],P[$-1]);break;case 39:this.$=P[$-3],B.setClickEvent(P[$-3],P[$-1],P[$]),B.setLink(P[$-3],P[$-2]);break;case 40:this.$=P[$-1],B.setLink(P[$-1],P[$]);break;case 41:case 47:this.$=P[$-1]+" "+P[$];break;case 42:case 43:case 45:this.$=P[$-2]+" "+P[$-1]+" "+P[$];break;case 44:case 46:this.$=P[$-3]+" "+P[$-2]+" "+P[$-1]+" "+P[$];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:C,33:T,35:E,36:A,37:24,38:S,40:_},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:C,33:T,35:E,36:A,37:24,38:S,40:_},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(R,O){if(O.recoverable)this.trace(R);else{var M=new Error(R);throw M.hash=O,M}},"parseError"),parse:o(function(R){var O=this,M=[0],B=[],F=[null],P=[],z=this.table,$="",H=0,Q=0,j=0,ie=2,ne=1,le=P.slice.call(arguments,1),he=Object.create(this.lexer),K={yy:{}};for(var X in this.yy)Object.prototype.hasOwnProperty.call(this.yy,X)&&(K.yy[X]=this.yy[X]);he.setInput(R,K.yy),K.yy.lexer=he,K.yy.parser=this,typeof he.yylloc>"u"&&(he.yylloc={});var te=he.yylloc;P.push(te);var J=he.options&&he.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function se(W){M.length=M.length-2*W,F.length=F.length-W,P.length=P.length-W}o(se,"popStack");function ue(){var W;return W=B.pop()||he.lex()||ne,typeof W!="number"&&(W instanceof Array&&(B=W,W=B.pop()),W=O.symbols_[W]||W),W}o(ue,"lex");for(var Z,Se,ce,ae,Oe,ge,ze={},He,$e,Re,Ie;;){if(ce=M[M.length-1],this.defaultActions[ce]?ae=this.defaultActions[ce]:((Z===null||typeof Z>"u")&&(Z=ue()),ae=z[ce]&&z[ce][Z]),typeof ae>"u"||!ae.length||!ae[0]){var be="";Ie=[];for(He in z[ce])this.terminals_[He]&&He>ie&&Ie.push("'"+this.terminals_[He]+"'");he.showPosition?be="Parse error on line "+(H+1)+`: | |
| 883 | +`+he.showPosition()+` | |
| 884 | +Expecting `+Ie.join(", ")+", got '"+(this.terminals_[Z]||Z)+"'":be="Parse error on line "+(H+1)+": Unexpected "+(Z==ne?"end of input":"'"+(this.terminals_[Z]||Z)+"'"),this.parseError(be,{text:he.match,token:this.terminals_[Z]||Z,line:he.yylineno,loc:te,expected:Ie})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ce+", token: "+Z);switch(ae[0]){case 1:M.push(Z),F.push(he.yytext),P.push(he.yylloc),M.push(ae[1]),Z=null,Se?(Z=Se,Se=null):(Q=he.yyleng,$=he.yytext,H=he.yylineno,te=he.yylloc,j>0&&j--);break;case 2:if($e=this.productions_[ae[1]][1],ze.$=F[F.length-$e],ze._$={first_line:P[P.length-($e||1)].first_line,last_line:P[P.length-1].last_line,first_column:P[P.length-($e||1)].first_column,last_column:P[P.length-1].last_column},J&&(ze._$.range=[P[P.length-($e||1)].range[0],P[P.length-1].range[1]]),ge=this.performAction.apply(ze,[$,Q,H,K.yy,ae[1],F,P].concat(le)),typeof ge<"u")return ge;$e&&(M=M.slice(0,-1*$e*2),F=F.slice(0,-1*$e),P=P.slice(0,-1*$e)),M.push(this.productions_[ae[1]][0]),F.push(ze.$),P.push(ze._$),Re=z[M[M.length-2]][M[M.length-1]],M.push(Re);break;case 3:return!0}}return!0},"parse")},D=function(){var L={EOF:1,parseError:o(function(O,M){if(this.yy.parser)this.yy.parser.parseError(O,M);else throw new Error(O)},"parseError"),setInput:o(function(R,O){return this.yy=O||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var O=R.match(/(?:\r\n?|\n).*/g);return O?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},"input"),unput:o(function(R){var O=R.length,M=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-O),this.offset-=O;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),M.length-1&&(this.yylineno-=M.length-1);var F=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:M?(M.length===B.length?this.yylloc.first_column:0)+B[B.length-M.length].length-M[0].length:this.yylloc.first_column-O},this.options.ranges&&(this.yylloc.range=[F[0],F[0]+this.yyleng-O]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 885 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(R){this.unput(this.match.slice(R))},"less"),pastInput:o(function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var R=this.pastInput(),O=new Array(R.length+1).join("-");return R+this.upcomingInput()+` | |
| 886 | +`+O+"^"},"showPosition"),test_match:o(function(R,O){var M,B,F;if(this.options.backtrack_lexer&&(F={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(F.yylloc.range=this.yylloc.range.slice(0))),B=R[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],M=this.performAction.call(this,this.yy,this,O,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),M)return M;if(this._backtrack){for(var P in F)this[P]=F[P];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,O,M,B;this._more||(this.yytext="",this.match="");for(var F=this._currentRules(),P=0;P<F.length;P++)if(M=this._input.match(this.rules[F[P]]),M&&(!O||M[0].length>O[0].length)){if(O=M,B=P,this.options.backtrack_lexer){if(R=this.test_match(M,F[P]),R!==!1)return R;if(this._backtrack){O=!1;continue}else return!1}else if(!this.options.flex)break}return O?(R=this.test_match(O,F[B]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 887 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var O=this.next();return O||this.lex()},"lex"),begin:o(function(O){this.conditionStack.push(O)},"begin"),popState:o(function(){var O=this.conditionStack.length-1;return O>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(O){return O=this.conditionStack.length-1-Math.abs(O||0),O>=0?this.conditionStack[O]:"INITIAL"},"topState"),pushState:o(function(O){this.begin(O)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(O,M,B,F){var P=F;switch(B){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return L}();I.lexer=D;function k(){this.yy={}}return o(k,"Parser"),k.prototype=I,I.Parser=k,new k}();VI.parser=VI;fue=VI});var pue=Mi((UI,HI)=>{"use strict";(function(t,e){typeof UI=="object"&&typeof HI<"u"?HI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(UI,function(){"use strict";var t="day";return function(e,r,n){var i=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=i(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?n.utc:n)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}})});var mue=Mi((WI,qI)=>{"use strict";(function(t,e){typeof WI=="object"&&typeof qI<"u"?qI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(WI,function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,n=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x}(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[n,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[i,u("seconds")],ss:[i,u("seconds")],m:[i,u("minutes")],mm:[i,u("minutes")],H:[i,u("hours")],h:[i,u("hours")],HH:[i,u("hours")],hh:[i,u("hours")],D:[i,u("day")],DD:[n,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[i,u("week")],ww:[n,u("week")],M:[i,u("month")],MM:[n,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map(function(x){return x.slice(0,3)})).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[n,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(S,_,I){var D=I&&I.toUpperCase();return _||v[I]||t[I]||v[D].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(k,L,R){return L||R.slice(1)})})).match(e),b=x.length,w=0;w<b;w+=1){var C=x[w],T=p[C],E=T&&T[0],A=T&&T[1];x[w]=A?{regex:E,parser:A}:C.replace(/^\[|\]$/g,"")}return function(S){for(var _={},I=0,D=0;I<b;I+=1){var k=x[I];if(typeof k=="string")D+=k.length;else{var L=k.regex,R=k.parser,O=S.slice(D),M=L.exec(O)[0];R.call(_,M),S=S.replace(M,"")}}return function(B){var F=B.afternoon;if(F!==void 0){var P=B.hours;F?P<12&&(B.hours+=12):P===12&&(B.hours=0),delete B.afternoon}}(_),_}}return o(m,"l"),function(g,y,v){v.p.customParseFormat=!0,g&&g.parseTwoDigitYear&&(l=g.parseTwoDigitYear);var x=y.prototype,b=x.parse;x.parse=function(w){var C=w.date,T=w.utc,E=w.args;this.$u=T;var A=E[1];if(typeof A=="string"){var S=E[2]===!0,_=E[3]===!0,I=S||_,D=E[2];_&&(D=E[2]),s=this.$locale(),!S&&D&&(s=v.Ls[D]),this.$d=function(O,M,B,F){try{if(["x","X"].indexOf(M)>-1)return new Date((M==="X"?1e3:1)*O);var P=m(M)(O),z=P.year,$=P.month,H=P.day,Q=P.hours,j=P.minutes,ie=P.seconds,ne=P.milliseconds,le=P.zone,he=P.week,K=new Date,X=H||(z||$?1:K.getDate()),te=z||K.getFullYear(),J=0;z&&!$||(J=$>0?$-1:K.getMonth());var se,ue=Q||0,Z=j||0,Se=ie||0,ce=ne||0;return le?new Date(Date.UTC(te,J,X,ue,Z,Se,ce+60*le.offset*1e3)):B?new Date(Date.UTC(te,J,X,ue,Z,Se,ce)):(se=new Date(te,J,X,ue,Z,Se,ce),he&&(se=F(se).week(he).toDate()),se)}catch{return new Date("")}}(C,A,T,v),this.init(),D&&D!==!0&&(this.$L=this.locale(D).$L),I&&C!=this.format(A)&&(this.$d=new Date("")),s={}}else if(A instanceof Array)for(var k=A.length,L=1;L<=k;L+=1){E[1]=A[L-1];var R=v.apply(this,E);if(R.isValid()){this.$d=R.$d,this.$L=R.$L,this.init();break}L===k&&(this.$d=new Date(""))}else b.call(this,w)}}})});var gue=Mi((YI,XI)=>{"use strict";(function(t,e){typeof YI=="object"&&typeof XI<"u"?XI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})(YI,function(){"use strict";return function(t,e){var r=e.prototype,n=r.format;r.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var l=this.$utils(),u=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}});return n.bind(this)(u)}}})});function Nue(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){let a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}var xue,ho,bue,wue,Tue,yue,Gc,ZI,JI,eO,mb,gb,tO,rO,f6,E1,nO,kue,iO,yb,aO,sO,d6,jI,ize,aze,sze,oze,lze,cze,uze,hze,fze,dze,pze,mze,gze,yze,vze,xze,bze,wze,Tze,kze,Eze,Sze,Cze,Eue,Aze,_ze,Dze,Sue,Lze,KI,Cue,Aue,u6,k1,Rze,Nze,QI,h6,Gi,_ue,Mze,Cp,Ize,vue,Oze,Due,Pze,Lue,Bze,Fze,Rue,Mue=N(()=>{"use strict";xue=Sa(z0(),1),ho=Sa(R4(),1),bue=Sa(pue(),1),wue=Sa(mue(),1),Tue=Sa(gue(),1);vt();zt();ir();mi();ho.default.extend(bue.default);ho.default.extend(wue.default);ho.default.extend(Tue.default);yue={friday:5,saturday:6},Gc="",ZI="",eO="",mb=[],gb=[],tO=new Map,rO=[],f6=[],E1="",nO="",kue=["active","done","crit","milestone"],iO=[],yb=!1,aO=!1,sO="sunday",d6="saturday",jI=0,ize=o(function(){rO=[],f6=[],E1="",iO=[],u6=0,QI=void 0,h6=void 0,Gi=[],Gc="",ZI="",nO="",JI=void 0,eO="",mb=[],gb=[],yb=!1,aO=!1,jI=0,tO=new Map,Ar(),sO="sunday",d6="saturday"},"clear"),aze=o(function(t){ZI=t},"setAxisFormat"),sze=o(function(){return ZI},"getAxisFormat"),oze=o(function(t){JI=t},"setTickInterval"),lze=o(function(){return JI},"getTickInterval"),cze=o(function(t){eO=t},"setTodayMarker"),uze=o(function(){return eO},"getTodayMarker"),hze=o(function(t){Gc=t},"setDateFormat"),fze=o(function(){yb=!0},"enableInclusiveEndDates"),dze=o(function(){return yb},"endDatesAreInclusive"),pze=o(function(){aO=!0},"enableTopAxis"),mze=o(function(){return aO},"topAxisEnabled"),gze=o(function(t){nO=t},"setDisplayMode"),yze=o(function(){return nO},"getDisplayMode"),vze=o(function(){return Gc},"getDateFormat"),xze=o(function(t){mb=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),bze=o(function(){return mb},"getIncludes"),wze=o(function(t){gb=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),Tze=o(function(){return gb},"getExcludes"),kze=o(function(){return tO},"getLinks"),Eze=o(function(t){E1=t,rO.push(t)},"addSection"),Sze=o(function(){return rO},"getSections"),Cze=o(function(){let t=vue(),e=10,r=0;for(;!t&&r<e;)t=vue(),r++;return f6=Gi,f6},"getTasks"),Eue=o(function(t,e,r,n){return n.includes(t.format(e.trim()))?!1:r.includes("weekends")&&(t.isoWeekday()===yue[d6]||t.isoWeekday()===yue[d6]+1)||r.includes(t.format("dddd").toLowerCase())?!0:r.includes(t.format(e.trim()))},"isInvalidDate"),Aze=o(function(t){sO=t},"setWeekday"),_ze=o(function(){return sO},"getWeekday"),Dze=o(function(t){d6=t},"setWeekend"),Sue=o(function(t,e,r,n){if(!r.length||t.manualEndTime)return;let i;t.startTime instanceof Date?i=(0,ho.default)(t.startTime):i=(0,ho.default)(t.startTime,e,!0),i=i.add(1,"d");let a;t.endTime instanceof Date?a=(0,ho.default)(t.endTime):a=(0,ho.default)(t.endTime,e,!0);let[s,l]=Lze(i,a,e,r,n);t.endTime=s.toDate(),t.renderEndTime=l},"checkTaskDates"),Lze=o(function(t,e,r,n,i){let a=!1,s=null;for(;t<=e;)a||(s=e.toDate()),a=Eue(t,r,n,i),a&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,s]},"fixTaskDates"),KI=o(function(t,e,r){r=r.trim();let i=/^after\s+(?<ids>[\d\w- ]+)/.exec(r);if(i!==null){let s=null;for(let u of i.groups.ids.split(" ")){let h=Cp(u);h!==void 0&&(!s||h.endTime>s.endTime)&&(s=h)}if(s)return s.endTime;let l=new Date;return l.setHours(0,0,0,0),l}let a=(0,ho.default)(r,e.trim(),!0);if(a.isValid())return a.toDate();{Y.debug("Invalid date:"+r),Y.debug("With date format:"+e.trim());let s=new Date(r);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+r);return s}},"getStartDate"),Cue=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),Aue=o(function(t,e,r,n=!1){r=r.trim();let a=/^until\s+(?<ids>[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=Cp(p);m!==void 0&&(!f||m.startTime<f.startTime)&&(f=m)}if(f)return f.startTime;let d=new Date;return d.setHours(0,0,0,0),d}let s=(0,ho.default)(r,e.trim(),!0);if(s.isValid())return n&&(s=s.add(1,"d")),s.toDate();let l=(0,ho.default)(t),[u,h]=Cue(r);if(!Number.isNaN(u)){let f=l.add(u,h);f.isValid()&&(l=f)}return l.toDate()},"getEndDate"),u6=0,k1=o(function(t){return t===void 0?(u6=u6+1,"task"+u6):t},"parseId"),Rze=o(function(t,e){let r;e.substr(0,1)===":"?r=e.substr(1,e.length):r=e;let n=r.split(","),i={};Nue(n,i,kue);for(let s=0;s<n.length;s++)n[s]=n[s].trim();let a="";switch(n.length){case 1:i.id=k1(),i.startTime=t.endTime,a=n[0];break;case 2:i.id=k1(),i.startTime=KI(void 0,Gc,n[0]),a=n[1];break;case 3:i.id=k1(n[0]),i.startTime=KI(void 0,Gc,n[1]),a=n[2];break;default:}return a&&(i.endTime=Aue(i.startTime,Gc,a,yb),i.manualEndTime=(0,ho.default)(a,"YYYY-MM-DD",!0).isValid(),Sue(i,Gc,gb,mb)),i},"compileData"),Nze=o(function(t,e){let r;e.substr(0,1)===":"?r=e.substr(1,e.length):r=e;let n=r.split(","),i={};Nue(n,i,kue);for(let a=0;a<n.length;a++)n[a]=n[a].trim();switch(n.length){case 1:i.id=k1(),i.startTime={type:"prevTaskEnd",id:t},i.endTime={data:n[0]};break;case 2:i.id=k1(),i.startTime={type:"getStartDate",startData:n[0]},i.endTime={data:n[1]};break;case 3:i.id=k1(n[0]),i.startTime={type:"getStartDate",startData:n[1]},i.endTime={data:n[2]};break;default:}return i},"parseData"),Gi=[],_ue={},Mze=o(function(t,e){let r={section:E1,type:E1,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},n=Nze(h6,e);r.raw.startTime=n.startTime,r.raw.endTime=n.endTime,r.id=n.id,r.prevTaskId=h6,r.active=n.active,r.done=n.done,r.crit=n.crit,r.milestone=n.milestone,r.order=jI,jI++;let i=Gi.push(r);h6=r.id,_ue[r.id]=i-1},"addTask"),Cp=o(function(t){let e=_ue[t];return Gi[e]},"findTaskById"),Ize=o(function(t,e){let r={section:E1,type:E1,description:t,task:t,classes:[]},n=Rze(QI,e);r.startTime=n.startTime,r.endTime=n.endTime,r.id=n.id,r.active=n.active,r.done=n.done,r.crit=n.crit,r.milestone=n.milestone,QI=r,f6.push(r)},"addTaskOrg"),vue=o(function(){let t=o(function(r){let n=Gi[r],i="";switch(Gi[r].raw.startTime.type){case"prevTaskEnd":{let a=Cp(n.prevTaskId);n.startTime=a.endTime;break}case"getStartDate":i=KI(void 0,Gc,Gi[r].raw.startTime.startData),i&&(Gi[r].startTime=i);break}return Gi[r].startTime&&(Gi[r].endTime=Aue(Gi[r].startTime,Gc,Gi[r].raw.endTime.data,yb),Gi[r].endTime&&(Gi[r].processed=!0,Gi[r].manualEndTime=(0,ho.default)(Gi[r].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),Sue(Gi[r],Gc,gb,mb))),Gi[r].processed},"compileTask"),e=!0;for(let[r,n]of Gi.entries())t(r),e=e&&n.processed;return e},"compileTasks"),Oze=o(function(t,e){let r=e;me().securityLevel!=="loose"&&(r=(0,xue.sanitizeUrl)(e)),t.split(",").forEach(function(n){Cp(n)!==void 0&&(Lue(n,()=>{window.open(r,"_self")}),tO.set(n,r))}),Due(t,"clickable")},"setLink"),Due=o(function(t,e){t.split(",").forEach(function(r){let n=Cp(r);n!==void 0&&n.classes.push(e)})},"setClass"),Pze=o(function(t,e,r){if(me().securityLevel!=="loose"||e===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a<n.length;a++){let s=n[a].trim();s.startsWith('"')&&s.endsWith('"')&&(s=s.substr(1,s.length-2)),n[a]=s}}n.length===0&&n.push(t),Cp(t)!==void 0&&Lue(t,()=>{Gt.runFunc(e,...n)})},"setClickFun"),Lue=o(function(t,e){iO.push(function(){let r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})},function(){let r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},"pushFun"),Bze=o(function(t,e,r){t.split(",").forEach(function(n){Pze(n,e,r)}),Due(t,"clickable")},"setClickEvent"),Fze=o(function(t){iO.forEach(function(e){e(t)})},"bindFunctions"),Rue={getConfig:o(()=>me().gantt,"getConfig"),clear:ize,setDateFormat:hze,getDateFormat:vze,enableInclusiveEndDates:fze,endDatesAreInclusive:dze,enableTopAxis:pze,topAxisEnabled:mze,setAxisFormat:aze,getAxisFormat:sze,setTickInterval:oze,getTickInterval:lze,setTodayMarker:cze,getTodayMarker:uze,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,setDisplayMode:gze,getDisplayMode:yze,setAccDescription:Nr,getAccDescription:Mr,addSection:Eze,getSections:Sze,getTasks:Cze,addTask:Mze,findTaskById:Cp,addTaskOrg:Ize,setIncludes:xze,getIncludes:bze,setExcludes:wze,getExcludes:Tze,setClickEvent:Bze,setLink:Oze,getLinks:kze,bindFunctions:Fze,parseDuration:Cue,isInvalidDate:Eue,setWeekday:Aze,getWeekday:_ze,setWeekend:Dze};o(Nue,"getTaskTags")});var p6,$ze,Iue,zze,Yu,Gze,Oue,Pue=N(()=>{"use strict";p6=Sa(R4(),1);vt();dr();gr();zt();Ei();$ze=o(function(){Y.debug("Something is calling, setConf, remove the call")},"setConf"),Iue={monday:Ch,tuesday:T5,wednesday:k5,thursday:oc,friday:E5,saturday:S5,sunday:yl},zze=o((t,e)=>{let r=[...t].map(()=>-1/0),n=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(let a of n)for(let s=0;s<r.length;s++)if(a.startTime>=r[s]){r[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i},"getMaxIntersections"),Gze=o(function(t,e,r,n){let i=me().gantt,a=me().securityLevel,s;a==="sandbox"&&(s=Ge("#i"+e));let l=a==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Yu=h.parentElement.offsetWidth,Yu===void 0&&(Yu=1200),i.useWidth!==void 0&&(Yu=i.useWidth);let f=n.db.getTasks(),d=[];for(let S of f)d.push(S.type);d=A(d);let p={},m=2*i.topPadding;if(n.db.getDisplayMode()==="compact"||i.displayMode==="compact"){let S={};for(let I of f)S[I.section]===void 0?S[I.section]=[I]:S[I.section].push(I);let _=0;for(let I of Object.keys(S)){let D=zze(S[I],_)+1;_+=D,m+=D*(i.barHeight+i.barGap),p[I]=D}}else{m+=f.length*(i.barHeight+i.barGap);for(let S of d)p[S]=f.filter(_=>_.type===S).length}h.setAttribute("viewBox","0 0 "+Yu+" "+m);let g=l.select(`[id="${e}"]`),y=_5().domain([M3(f,function(S){return S.startTime}),N3(f,function(S){return S.endTime})]).rangeRound([0,Yu-i.leftPadding-i.rightPadding]);function v(S,_){let I=S.startTime,D=_.startTime,k=0;return I>D?k=1:I<D&&(k=-1),k}o(v,"taskCompare"),f.sort(v),x(f,Yu,m),vn(g,m,Yu,i.useMaxWidth),g.append("text").text(n.db.getDiagramTitle()).attr("x",Yu/2).attr("y",i.titleTopMargin).attr("class","titleText");function x(S,_,I){let D=i.barHeight,k=D+i.barGap,L=i.topPadding,R=i.leftPadding,O=gl().domain([0,d.length]).range(["#00B9FA","#F95002"]).interpolate($8);w(k,L,R,_,I,S,n.db.getExcludes(),n.db.getIncludes()),C(R,L,_,I),b(S,k,L,R,D,O,_,I),T(k,L,R,D,O),E(R,L,_,I)}o(x,"makeGantt");function b(S,_,I,D,k,L,R){let M=[...new Set(S.map(z=>z.order))].map(z=>S.find($=>$.order===z));g.append("g").selectAll("rect").data(M).enter().append("rect").attr("x",0).attr("y",function(z,$){return $=z.order,$*_+I-2}).attr("width",function(){return R-i.rightPadding/2}).attr("height",_).attr("class",function(z){for(let[$,H]of d.entries())if(z.type===H)return"section section"+$%i.numberSectionStyles;return"section section0"});let B=g.append("g").selectAll("rect").data(S).enter(),F=n.db.getLinks();if(B.append("rect").attr("id",function(z){return z.id}).attr("rx",3).attr("ry",3).attr("x",function(z){return z.milestone?y(z.startTime)+D+.5*(y(z.endTime)-y(z.startTime))-.5*k:y(z.startTime)+D}).attr("y",function(z,$){return $=z.order,$*_+I}).attr("width",function(z){return z.milestone?k:y(z.renderEndTime||z.endTime)-y(z.startTime)}).attr("height",k).attr("transform-origin",function(z,$){return $=z.order,(y(z.startTime)+D+.5*(y(z.endTime)-y(z.startTime))).toString()+"px "+($*_+I+.5*k).toString()+"px"}).attr("class",function(z){let $="task",H="";z.classes.length>0&&(H=z.classes.join(" "));let Q=0;for(let[ie,ne]of d.entries())z.type===ne&&(Q=ie%i.numberSectionStyles);let j="";return z.active?z.crit?j+=" activeCrit":j=" active":z.done?z.crit?j=" doneCrit":j=" done":z.crit&&(j+=" crit"),j.length===0&&(j=" task"),z.milestone&&(j=" milestone "+j),j+=Q,j+=" "+H,$+j}),B.append("text").attr("id",function(z){return z.id+"-text"}).text(function(z){return z.task}).attr("font-size",i.fontSize).attr("x",function(z){let $=y(z.startTime),H=y(z.renderEndTime||z.endTime);z.milestone&&($+=.5*(y(z.endTime)-y(z.startTime))-.5*k),z.milestone&&(H=$+k);let Q=this.getBBox().width;return Q>H-$?H+Q+1.5*i.leftPadding>R?$+D-5:H+D+5:(H-$)/2+$+D}).attr("y",function(z,$){return $=z.order,$*_+i.barHeight/2+(i.fontSize/2-2)+I}).attr("text-height",k).attr("class",function(z){let $=y(z.startTime),H=y(z.endTime);z.milestone&&(H=$+k);let Q=this.getBBox().width,j="";z.classes.length>0&&(j=z.classes.join(" "));let ie=0;for(let[le,he]of d.entries())z.type===he&&(ie=le%i.numberSectionStyles);let ne="";return z.active&&(z.crit?ne="activeCritText"+ie:ne="activeText"+ie),z.done?z.crit?ne=ne+" doneCritText"+ie:ne=ne+" doneText"+ie:z.crit&&(ne=ne+" critText"+ie),z.milestone&&(ne+=" milestoneText"),Q>H-$?H+Q+1.5*i.leftPadding>R?j+" taskTextOutsideLeft taskTextOutside"+ie+" "+ne:j+" taskTextOutsideRight taskTextOutside"+ie+" "+ne+" width-"+Q:j+" taskText taskText"+ie+" "+ne+" width-"+Q}),me().securityLevel==="sandbox"){let z;z=Ge("#i"+e);let $=z.nodes()[0].contentDocument;B.filter(function(H){return F.has(H.id)}).each(function(H){var Q=$.querySelector("#"+H.id),j=$.querySelector("#"+H.id+"-text");let ie=Q.parentNode;var ne=$.createElement("a");ne.setAttribute("xlink:href",F.get(H.id)),ne.setAttribute("target","_top"),ie.appendChild(ne),ne.appendChild(Q),ne.appendChild(j)})}}o(b,"drawRects");function w(S,_,I,D,k,L,R,O){if(R.length===0&&O.length===0)return;let M,B;for(let{startTime:Q,endTime:j}of L)(M===void 0||Q<M)&&(M=Q),(B===void 0||j>B)&&(B=j);if(!M||!B)return;if((0,p6.default)(B).diff((0,p6.default)(M),"year")>5){Y.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let F=n.db.getDateFormat(),P=[],z=null,$=(0,p6.default)(M);for(;$.valueOf()<=B;)n.db.isInvalidDate($,F,R,O)?z?z.end=$:z={start:$,end:$}:z&&(P.push(z),z=null),$=$.add(1,"d");g.append("g").selectAll("rect").data(P).enter().append("rect").attr("id",function(Q){return"exclude-"+Q.start.format("YYYY-MM-DD")}).attr("x",function(Q){return y(Q.start)+I}).attr("y",i.gridLineStartPadding).attr("width",function(Q){let j=Q.end.add(1,"day");return y(j)-y(Q.start)}).attr("height",k-_-i.gridLineStartPadding).attr("transform-origin",function(Q,j){return(y(Q.start)+I+.5*(y(Q.end)-y(Q.start))).toString()+"px "+(j*S+.5*k).toString()+"px"}).attr("class","exclude-range")}o(w,"drawExcludeDays");function C(S,_,I,D){let k=bA(y).tickSize(-D+_+i.gridLineStartPadding).tickFormat(wd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d")),R=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||i.tickInterval);if(R!==null){let O=R[1],M=R[2],B=n.db.getWeekday()||i.weekday;switch(M){case"millisecond":k.ticks(ac.every(O));break;case"second":k.ticks(Ks.every(O));break;case"minute":k.ticks(vu.every(O));break;case"hour":k.ticks(xu.every(O));break;case"day":k.ticks(_o.every(O));break;case"week":k.ticks(Iue[B].every(O));break;case"month":k.ticks(bu.every(O));break}}if(g.append("g").attr("class","grid").attr("transform","translate("+S+", "+(D-50)+")").call(k).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let O=xA(y).tickSize(-D+_+i.gridLineStartPadding).tickFormat(wd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(R!==null){let M=R[1],B=R[2],F=n.db.getWeekday()||i.weekday;switch(B){case"millisecond":O.ticks(ac.every(M));break;case"second":O.ticks(Ks.every(M));break;case"minute":O.ticks(vu.every(M));break;case"hour":O.ticks(xu.every(M));break;case"day":O.ticks(_o.every(M));break;case"week":O.ticks(Iue[F].every(M));break;case"month":O.ticks(bu.every(M));break}}g.append("g").attr("class","grid").attr("transform","translate("+S+", "+_+")").call(O).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(C,"makeGrid");function T(S,_){let I=0,D=Object.keys(p).map(k=>[k,p[k]]);g.append("g").selectAll("text").data(D).enter().append(function(k){let L=k[0].split(Ze.lineBreakRegex),R=-(L.length-1)/2,O=u.createElementNS("http://www.w3.org/2000/svg","text");O.setAttribute("dy",R+"em");for(let[M,B]of L.entries()){let F=u.createElementNS("http://www.w3.org/2000/svg","tspan");F.setAttribute("alignment-baseline","central"),F.setAttribute("x","10"),M>0&&F.setAttribute("dy","1em"),F.textContent=B,O.appendChild(F)}return O}).attr("x",10).attr("y",function(k,L){if(L>0)for(let R=0;R<L;R++)return I+=D[L-1][1],k[1]*S/2+I*S+_;else return k[1]*S/2+_}).attr("font-size",i.sectionFontSize).attr("class",function(k){for(let[L,R]of d.entries())if(k[0]===R)return"sectionTitle sectionTitle"+L%i.numberSectionStyles;return"sectionTitle"})}o(T,"vertLabels");function E(S,_,I,D){let k=n.db.getTodayMarker();if(k==="off")return;let L=g.append("g").attr("class","today"),R=new Date,O=L.append("line");O.attr("x1",y(R)+S).attr("x2",y(R)+S).attr("y1",i.titleTopMargin).attr("y2",D-i.titleTopMargin).attr("class","today"),k!==""&&O.attr("style",k.replace(/,/g,";"))}o(E,"drawToday");function A(S){let _={},I=[];for(let D=0,k=S.length;D<k;++D)Object.prototype.hasOwnProperty.call(_,S[D])||(_[S[D]]=!0,I.push(S[D]));return I}o(A,"checkUnique")},"draw"),Oue={setConf:$ze,draw:Gze}});var Vze,Bue,Fue=N(()=>{"use strict";Vze=o(t=>` | |
| 888 | + .mermaid-main-font { | |
| 889 | + font-family: ${t.fontFamily}; | |
| 890 | + } | |
| 891 | + | |
| 892 | + .exclude-range { | |
| 893 | + fill: ${t.excludeBkgColor}; | |
| 894 | + } | |
| 895 | + | |
| 896 | + .section { | |
| 897 | + stroke: none; | |
| 898 | + opacity: 0.2; | |
| 899 | + } | |
| 900 | + | |
| 901 | + .section0 { | |
| 902 | + fill: ${t.sectionBkgColor}; | |
| 903 | + } | |
| 904 | + | |
| 905 | + .section2 { | |
| 906 | + fill: ${t.sectionBkgColor2}; | |
| 907 | + } | |
| 908 | + | |
| 909 | + .section1, | |
| 910 | + .section3 { | |
| 911 | + fill: ${t.altSectionBkgColor}; | |
| 912 | + opacity: 0.2; | |
| 913 | + } | |
| 914 | + | |
| 915 | + .sectionTitle0 { | |
| 916 | + fill: ${t.titleColor}; | |
| 917 | + } | |
| 918 | + | |
| 919 | + .sectionTitle1 { | |
| 920 | + fill: ${t.titleColor}; | |
| 921 | + } | |
| 922 | + | |
| 923 | + .sectionTitle2 { | |
| 924 | + fill: ${t.titleColor}; | |
| 925 | + } | |
| 926 | + | |
| 927 | + .sectionTitle3 { | |
| 928 | + fill: ${t.titleColor}; | |
| 929 | + } | |
| 930 | + | |
| 931 | + .sectionTitle { | |
| 932 | + text-anchor: start; | |
| 933 | + font-family: ${t.fontFamily}; | |
| 934 | + } | |
| 935 | + | |
| 936 | + | |
| 937 | + /* Grid and axis */ | |
| 938 | + | |
| 939 | + .grid .tick { | |
| 940 | + stroke: ${t.gridColor}; | |
| 941 | + opacity: 0.8; | |
| 942 | + shape-rendering: crispEdges; | |
| 943 | + } | |
| 944 | + | |
| 945 | + .grid .tick text { | |
| 946 | + font-family: ${t.fontFamily}; | |
| 947 | + fill: ${t.textColor}; | |
| 948 | + } | |
| 949 | + | |
| 950 | + .grid path { | |
| 951 | + stroke-width: 0; | |
| 952 | + } | |
| 953 | + | |
| 954 | + | |
| 955 | + /* Today line */ | |
| 956 | + | |
| 957 | + .today { | |
| 958 | + fill: none; | |
| 959 | + stroke: ${t.todayLineColor}; | |
| 960 | + stroke-width: 2px; | |
| 961 | + } | |
| 962 | + | |
| 963 | + | |
| 964 | + /* Task styling */ | |
| 965 | + | |
| 966 | + /* Default task */ | |
| 967 | + | |
| 968 | + .task { | |
| 969 | + stroke-width: 2; | |
| 970 | + } | |
| 971 | + | |
| 972 | + .taskText { | |
| 973 | + text-anchor: middle; | |
| 974 | + font-family: ${t.fontFamily}; | |
| 975 | + } | |
| 976 | + | |
| 977 | + .taskTextOutsideRight { | |
| 978 | + fill: ${t.taskTextDarkColor}; | |
| 979 | + text-anchor: start; | |
| 980 | + font-family: ${t.fontFamily}; | |
| 981 | + } | |
| 982 | + | |
| 983 | + .taskTextOutsideLeft { | |
| 984 | + fill: ${t.taskTextDarkColor}; | |
| 985 | + text-anchor: end; | |
| 986 | + } | |
| 987 | + | |
| 988 | + | |
| 989 | + /* Special case clickable */ | |
| 990 | + | |
| 991 | + .task.clickable { | |
| 992 | + cursor: pointer; | |
| 993 | + } | |
| 994 | + | |
| 995 | + .taskText.clickable { | |
| 996 | + cursor: pointer; | |
| 997 | + fill: ${t.taskTextClickableColor} !important; | |
| 998 | + font-weight: bold; | |
| 999 | + } | |
| 1000 | + | |
| 1001 | + .taskTextOutsideLeft.clickable { | |
| 1002 | + cursor: pointer; | |
| 1003 | + fill: ${t.taskTextClickableColor} !important; | |
| 1004 | + font-weight: bold; | |
| 1005 | + } | |
| 1006 | + | |
| 1007 | + .taskTextOutsideRight.clickable { | |
| 1008 | + cursor: pointer; | |
| 1009 | + fill: ${t.taskTextClickableColor} !important; | |
| 1010 | + font-weight: bold; | |
| 1011 | + } | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + /* Specific task settings for the sections*/ | |
| 1015 | + | |
| 1016 | + .taskText0, | |
| 1017 | + .taskText1, | |
| 1018 | + .taskText2, | |
| 1019 | + .taskText3 { | |
| 1020 | + fill: ${t.taskTextColor}; | |
| 1021 | + } | |
| 1022 | + | |
| 1023 | + .task0, | |
| 1024 | + .task1, | |
| 1025 | + .task2, | |
| 1026 | + .task3 { | |
| 1027 | + fill: ${t.taskBkgColor}; | |
| 1028 | + stroke: ${t.taskBorderColor}; | |
| 1029 | + } | |
| 1030 | + | |
| 1031 | + .taskTextOutside0, | |
| 1032 | + .taskTextOutside2 | |
| 1033 | + { | |
| 1034 | + fill: ${t.taskTextOutsideColor}; | |
| 1035 | + } | |
| 1036 | + | |
| 1037 | + .taskTextOutside1, | |
| 1038 | + .taskTextOutside3 { | |
| 1039 | + fill: ${t.taskTextOutsideColor}; | |
| 1040 | + } | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + /* Active task */ | |
| 1044 | + | |
| 1045 | + .active0, | |
| 1046 | + .active1, | |
| 1047 | + .active2, | |
| 1048 | + .active3 { | |
| 1049 | + fill: ${t.activeTaskBkgColor}; | |
| 1050 | + stroke: ${t.activeTaskBorderColor}; | |
| 1051 | + } | |
| 1052 | + | |
| 1053 | + .activeText0, | |
| 1054 | + .activeText1, | |
| 1055 | + .activeText2, | |
| 1056 | + .activeText3 { | |
| 1057 | + fill: ${t.taskTextDarkColor} !important; | |
| 1058 | + } | |
| 1059 | + | |
| 1060 | + | |
| 1061 | + /* Completed task */ | |
| 1062 | + | |
| 1063 | + .done0, | |
| 1064 | + .done1, | |
| 1065 | + .done2, | |
| 1066 | + .done3 { | |
| 1067 | + stroke: ${t.doneTaskBorderColor}; | |
| 1068 | + fill: ${t.doneTaskBkgColor}; | |
| 1069 | + stroke-width: 2; | |
| 1070 | + } | |
| 1071 | + | |
| 1072 | + .doneText0, | |
| 1073 | + .doneText1, | |
| 1074 | + .doneText2, | |
| 1075 | + .doneText3 { | |
| 1076 | + fill: ${t.taskTextDarkColor} !important; | |
| 1077 | + } | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + /* Tasks on the critical line */ | |
| 1081 | + | |
| 1082 | + .crit0, | |
| 1083 | + .crit1, | |
| 1084 | + .crit2, | |
| 1085 | + .crit3 { | |
| 1086 | + stroke: ${t.critBorderColor}; | |
| 1087 | + fill: ${t.critBkgColor}; | |
| 1088 | + stroke-width: 2; | |
| 1089 | + } | |
| 1090 | + | |
| 1091 | + .activeCrit0, | |
| 1092 | + .activeCrit1, | |
| 1093 | + .activeCrit2, | |
| 1094 | + .activeCrit3 { | |
| 1095 | + stroke: ${t.critBorderColor}; | |
| 1096 | + fill: ${t.activeTaskBkgColor}; | |
| 1097 | + stroke-width: 2; | |
| 1098 | + } | |
| 1099 | + | |
| 1100 | + .doneCrit0, | |
| 1101 | + .doneCrit1, | |
| 1102 | + .doneCrit2, | |
| 1103 | + .doneCrit3 { | |
| 1104 | + stroke: ${t.critBorderColor}; | |
| 1105 | + fill: ${t.doneTaskBkgColor}; | |
| 1106 | + stroke-width: 2; | |
| 1107 | + cursor: pointer; | |
| 1108 | + shape-rendering: crispEdges; | |
| 1109 | + } | |
| 1110 | + | |
| 1111 | + .milestone { | |
| 1112 | + transform: rotate(45deg) scale(0.8,0.8); | |
| 1113 | + } | |
| 1114 | + | |
| 1115 | + .milestoneText { | |
| 1116 | + font-style: italic; | |
| 1117 | + } | |
| 1118 | + .doneCritText0, | |
| 1119 | + .doneCritText1, | |
| 1120 | + .doneCritText2, | |
| 1121 | + .doneCritText3 { | |
| 1122 | + fill: ${t.taskTextDarkColor} !important; | |
| 1123 | + } | |
| 1124 | + | |
| 1125 | + .activeCritText0, | |
| 1126 | + .activeCritText1, | |
| 1127 | + .activeCritText2, | |
| 1128 | + .activeCritText3 { | |
| 1129 | + fill: ${t.taskTextDarkColor} !important; | |
| 1130 | + } | |
| 1131 | + | |
| 1132 | + .titleText { | |
| 1133 | + text-anchor: middle; | |
| 1134 | + font-size: 18px; | |
| 1135 | + fill: ${t.titleColor||t.textColor}; | |
| 1136 | + font-family: ${t.fontFamily}; | |
| 1137 | + } | |
| 1138 | +`,"getStyles"),Bue=Vze});var $ue={};hr($ue,{diagram:()=>Uze});var Uze,zue=N(()=>{"use strict";due();Mue();Pue();Fue();Uze={parser:fue,db:Rue,renderer:Oue,styles:Bue}});var Uue,Hue=N(()=>{"use strict";kp();vt();Uue={parse:o(async t=>{let e=await uo("info",t);Y.debug(e)},"parse")}});var vb,oO=N(()=>{vb={name:"mermaid",version:"11.6.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",type:"module",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",exports:{".":{types:"./dist/mermaid.d.ts",import:"./dist/mermaid.core.mjs",default:"./dist/mermaid.core.mjs"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph","mindmap","packet diagram","c4 diagram","er diagram","pie chart","pie diagram","quadrant chart","requirement diagram","graph"],scripts:{clean:"rimraf dist",dev:"pnpm -w dev","docs:code":"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup","docs:build":"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts","docs:verify":"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify","docs:pre:vitepress":"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts","docs:build:vitepress":"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing","docs:dev":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:dev:docker":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:serve":"pnpm docs:build:vitepress && vitepress serve src/vitepress","docs:spellcheck":'cspell "src/docs/**/*.md"',"docs:release-version":"tsx scripts/update-release-version.mts","docs:verify-version":"tsx scripts/update-release-version.mts --verify","types:build-config":"tsx scripts/create-types-from-json-schema.mts","types:verify-config":"tsx scripts/create-types-from-json-schema.mts --verify",checkCircle:"npx madge --circular ./src",prepublishOnly:"pnpm docs:verify-version"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^7.0.4","@iconify/utils":"^2.1.33","@mermaid-js/parser":"workspace:^","@types/d3":"^7.4.3",cytoscape:"^3.29.3","cytoscape-cose-bilkent":"^4.1.0","cytoscape-fcose":"^2.2.0",d3:"^7.9.0","d3-sankey":"^0.12.3","dagre-d3-es":"7.0.11",dayjs:"^1.11.13",dompurify:"^3.2.4",katex:"^0.16.9",khroma:"^2.1.0","lodash-es":"^4.17.21",marked:"^15.0.7",roughjs:"^4.6.6",stylis:"^4.3.6","ts-dedent":"^2.2.0",uuid:"^11.1.0"},devDependencies:{"@adobe/jsonschema2md":"^8.0.2","@iconify/types":"^2.0.0","@types/cytoscape":"^3.21.9","@types/cytoscape-fcose":"^2.2.4","@types/d3-sankey":"^0.12.4","@types/d3-scale":"^4.0.9","@types/d3-scale-chromatic":"^3.1.0","@types/d3-selection":"^3.0.11","@types/d3-shape":"^3.1.7","@types/jsdom":"^21.1.7","@types/katex":"^0.16.7","@types/lodash-es":"^4.17.12","@types/micromatch":"^4.0.9","@types/stylis":"^4.2.7","@types/uuid":"^10.0.0",ajv:"^8.17.1",chokidar:"^4.0.3",concurrently:"^9.1.2","csstree-validator":"^4.0.1",globby:"^14.0.2",jison:"^0.4.18","js-base64":"^3.7.7",jsdom:"^26.0.0","json-schema-to-typescript":"^15.0.4",micromatch:"^4.0.8","path-browserify":"^1.0.1",prettier:"^3.5.2",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1",rimraf:"^6.0.1","start-server-and-test":"^2.0.10","type-fest":"^4.35.0",typedoc:"^0.27.8","typedoc-plugin-markdown":"^4.4.2",typescript:"~5.7.3","unist-util-flatmap":"^1.0.0","unist-util-visit":"^5.0.0",vitepress:"^1.0.2","vitepress-plugin-search":"1.0.4-alpha.22"},files:["dist/","README.md"],publishConfig:{access:"public"}}});var Xze,jze,Wue,que=N(()=>{"use strict";oO();Xze={version:vb.version},jze=o(()=>Xze.version,"getVersion"),Wue={getVersion:jze}});var sa,Vc=N(()=>{"use strict";dr();zt();sa=o(t=>{let{securityLevel:e}=me(),r=Ge("body");if(e==="sandbox"){let a=Ge(`#i${t}`).node()?.contentDocument??document;r=Ge(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var Kze,Yue,Xue=N(()=>{"use strict";vt();Vc();Ei();Kze=o((t,e,r)=>{Y.debug(`rendering info diagram | |
| 1139 | +`+t);let n=sa(e);vn(n,100,400,!0),n.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),Yue={draw:Kze}});var jue={};hr(jue,{diagram:()=>Qze});var Qze,Kue=N(()=>{"use strict";Hue();que();Xue();Qze={parser:Uue,db:Wue,renderer:Yue}});var Jue,lO,m6,cO,eGe,tGe,rGe,nGe,iGe,aGe,sGe,g6,uO=N(()=>{"use strict";vt();mi();Ya();Jue=or.pie,lO={sections:new Map,showData:!1,config:Jue},m6=lO.sections,cO=lO.showData,eGe=structuredClone(Jue),tGe=o(()=>structuredClone(eGe),"getConfig"),rGe=o(()=>{m6=new Map,cO=lO.showData,Ar()},"clear"),nGe=o(({label:t,value:e})=>{m6.has(t)||(m6.set(t,e),Y.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),iGe=o(()=>m6,"getSections"),aGe=o(t=>{cO=t},"setShowData"),sGe=o(()=>cO,"getShowData"),g6={getConfig:tGe,clear:rGe,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addSection:nGe,getSections:iGe,setShowData:aGe,getShowData:sGe}});var oGe,ehe,the=N(()=>{"use strict";kp();vt();T1();uO();oGe=o((t,e)=>{$c(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),ehe={parse:o(async t=>{let e=await uo("pie",t);Y.debug(e),oGe(e,g6)},"parse")}});var lGe,rhe,nhe=N(()=>{"use strict";lGe=o(t=>` | |
| 1140 | + .pieCircle{ | |
| 1141 | + stroke: ${t.pieStrokeColor}; | |
| 1142 | + stroke-width : ${t.pieStrokeWidth}; | |
| 1143 | + opacity : ${t.pieOpacity}; | |
| 1144 | + } | |
| 1145 | + .pieOuterCircle{ | |
| 1146 | + stroke: ${t.pieOuterStrokeColor}; | |
| 1147 | + stroke-width: ${t.pieOuterStrokeWidth}; | |
| 1148 | + fill: none; | |
| 1149 | + } | |
| 1150 | + .pieTitleText { | |
| 1151 | + text-anchor: middle; | |
| 1152 | + font-size: ${t.pieTitleTextSize}; | |
| 1153 | + fill: ${t.pieTitleTextColor}; | |
| 1154 | + font-family: ${t.fontFamily}; | |
| 1155 | + } | |
| 1156 | + .slice { | |
| 1157 | + font-family: ${t.fontFamily}; | |
| 1158 | + fill: ${t.pieSectionTextColor}; | |
| 1159 | + font-size:${t.pieSectionTextSize}; | |
| 1160 | + // fill: white; | |
| 1161 | + } | |
| 1162 | + .legend text { | |
| 1163 | + fill: ${t.pieLegendTextColor}; | |
| 1164 | + font-family: ${t.fontFamily}; | |
| 1165 | + font-size: ${t.pieLegendTextSize}; | |
| 1166 | + } | |
| 1167 | +`,"getStyles"),rhe=lGe});var cGe,uGe,ihe,ahe=N(()=>{"use strict";dr();zt();vt();Vc();Ei();ir();cGe=o(t=>{let e=[...t.entries()].map(n=>({label:n[0],value:n[1]})).sort((n,i)=>i.value-n.value);return I5().value(n=>n.value)(e)},"createPieArcs"),uGe=o((t,e,r,n)=>{Y.debug(`rendering pie chart | |
| 1168 | +`+t);let i=n.db,a=me(),s=Fi(i.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=sa(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=Bo(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=bl().innerRadius(0).outerRadius(x),w=bl().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let C=i.getSections(),T=cGe(C),E=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],A=gu(E);m.selectAll("mySlices").data(T).enter().append("path").attr("d",b).attr("fill",k=>A(k.data.label)).attr("class","pieCircle");let S=0;C.forEach(k=>{S+=k}),m.selectAll("mySlices").data(T).enter().append("text").text(k=>(k.data.value/S*100).toFixed(0)+"%").attr("transform",k=>"translate("+w.centroid(k)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(i.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText");let _=m.selectAll(".legend").data(A.domain()).enter().append("g").attr("class","legend").attr("transform",(k,L)=>{let R=u+h,O=R*A.domain().length/2,M=12*u,B=L*R-O;return"translate("+M+","+B+")"});_.append("rect").attr("width",u).attr("height",u).style("fill",A).style("stroke",A),_.data(T).append("text").attr("x",u+h).attr("y",u-h).text(k=>{let{label:L,value:R}=k.data;return i.getShowData()?`${L} [${R}]`:L});let I=Math.max(..._.selectAll("text").nodes().map(k=>k?.getBoundingClientRect().width??0)),D=d+l+u+h+I;p.attr("viewBox",`0 0 ${D} ${f}`),vn(p,f,D,s.useMaxWidth)},"draw"),ihe={draw:uGe}});var she={};hr(she,{diagram:()=>hGe});var hGe,ohe=N(()=>{"use strict";the();uO();nhe();ahe();hGe={parser:ehe,db:g6,renderer:ihe,styles:rhe}});var hO,uhe,hhe=N(()=>{"use strict";hO=function(){var t=o(function(xe,q,pe,ve){for(pe=pe||{},ve=xe.length;ve--;pe[xe[ve]]=q);return pe},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],w=[1,19],C=[1,20],T=[1,21],E=[1,22],A=[1,24],S=[1,25],_=[1,26],I=[1,27],D=[1,28],k=[1,29],L=[1,32],R=[1,33],O=[1,34],M=[1,39],B=[1,40],F=[1,42],P=[1,44],z=[1,62],$=[1,61],H=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],Q=[1,65],j=[1,66],ie=[1,67],ne=[1,68],le=[1,69],he=[1,70],K=[1,71],X=[1,72],te=[1,73],J=[1,74],se=[1,75],ue=[1,76],Z=[4,5,6,7,8,9,10,11,12,13,14,15,18],Se=[1,90],ce=[1,91],ae=[1,92],Oe=[1,99],ge=[1,93],ze=[1,96],He=[1,94],$e=[1,95],Re=[1,97],Ie=[1,98],be=[1,102],W=[10,55,56,57],de=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],re={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(q,pe,ve,Pe,_e,we,Ve){var De=we.length-1;switch(_e){case 23:this.$=we[De];break;case 24:this.$=we[De-1]+""+we[De];break;case 26:this.$=we[De-1]+we[De];break;case 27:this.$=[we[De].trim()];break;case 28:we[De-2].push(we[De].trim()),this.$=we[De-2];break;case 29:this.$=we[De-4],Pe.addClass(we[De-2],we[De]);break;case 37:this.$=[];break;case 42:this.$=we[De].trim(),Pe.setDiagramTitle(this.$);break;case 43:this.$=we[De].trim(),Pe.setAccTitle(this.$);break;case 44:case 45:this.$=we[De].trim(),Pe.setAccDescription(this.$);break;case 46:Pe.addSection(we[De].substr(8)),this.$=we[De].substr(8);break;case 47:Pe.addPoint(we[De-3],"",we[De-1],we[De],[]);break;case 48:Pe.addPoint(we[De-4],we[De-3],we[De-1],we[De],[]);break;case 49:Pe.addPoint(we[De-4],"",we[De-2],we[De-1],we[De]);break;case 50:Pe.addPoint(we[De-5],we[De-4],we[De-2],we[De-1],we[De]);break;case 51:Pe.setXAxisLeftText(we[De-2]),Pe.setXAxisRightText(we[De]);break;case 52:we[De-1].text+=" \u27F6 ",Pe.setXAxisLeftText(we[De-1]);break;case 53:Pe.setXAxisLeftText(we[De]);break;case 54:Pe.setYAxisBottomText(we[De-2]),Pe.setYAxisTopText(we[De]);break;case 55:we[De-1].text+=" \u27F6 ",Pe.setYAxisBottomText(we[De-1]);break;case 56:Pe.setYAxisBottomText(we[De]);break;case 57:Pe.setQuadrant1Text(we[De]);break;case 58:Pe.setQuadrant2Text(we[De]);break;case 59:Pe.setQuadrant3Text(we[De]);break;case 60:Pe.setQuadrant4Text(we[De]);break;case 64:this.$={text:we[De],type:"text"};break;case 65:this.$={text:we[De-1].text+""+we[De],type:we[De-1].type};break;case 66:this.$={text:we[De],type:"text"};break;case 67:this.$={text:we[De],type:"markdown"};break;case 68:this.$=we[De];break;case 69:this.$=we[De-1]+""+we[De];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:n,56:i,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:n,56:i,57:a},{18:e,26:9,27:2,28:r,55:n,56:i,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:C,41:T,42:E,48:A,50:S,51:_,52:I,53:D,54:k,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(s,[2,34]),{27:45,55:n,56:i,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:C,41:T,42:E,48:A,50:S,51:_,52:I,53:D,54:k,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,44:[1,57],47:[1,58],58:60,59:59,63:O,64:M,65:B,66:F,67:P},t(H,[2,64]),t(H,[2,66]),t(H,[2,67]),t(H,[2,70]),t(H,[2,71]),t(H,[2,72]),t(H,[2,73]),t(H,[2,74]),t(H,[2,75]),t(H,[2,76]),t(H,[2,77]),t(H,[2,78]),t(H,[2,79]),t(H,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:Q,5:j,6:ie,7:ne,8:le,9:he,10:K,11:X,12:te,13:J,14:se,15:ue,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,77],63:O,64:M,65:B,66:F,67:P}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,78],63:O,64:M,65:B,66:F,67:P}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),{45:[1,79]},{44:[1,80]},t(H,[2,65]),t(H,[2,81]),t(H,[2,82]),t(H,[2,83]),{3:82,4:Q,5:j,6:ie,7:ne,8:le,9:he,10:K,11:X,12:te,13:J,14:se,15:ue,18:[1,81]},t(Z,[2,23]),t(Z,[2,1]),t(Z,[2,2]),t(Z,[2,3]),t(Z,[2,4]),t(Z,[2,5]),t(Z,[2,6]),t(Z,[2,7]),t(Z,[2,8]),t(Z,[2,9]),t(Z,[2,10]),t(Z,[2,11]),t(Z,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),{46:[1,85]},{45:[1,86]},{4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,16:89,17:He,18:$e,19:Re,20:Ie,22:88,23:87},t(Z,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,47],{22:88,16:89,23:100,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),{46:[1,101]},t(u,[2,29],{10:be}),t(W,[2,27],{16:103,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),t(de,[2,25]),t(de,[2,13]),t(de,[2,14]),t(de,[2,15]),t(de,[2,16]),t(de,[2,17]),t(de,[2,18]),t(de,[2,19]),t(de,[2,20]),t(de,[2,21]),t(de,[2,22]),t(u,[2,49],{10:be}),t(u,[2,48],{22:88,16:89,23:104,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),{4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,16:89,17:He,18:$e,19:Re,20:Ie,22:105},t(de,[2,26]),t(u,[2,50],{10:be}),t(W,[2,28],{16:103,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(q,pe){if(pe.recoverable)this.trace(q);else{var ve=new Error(q);throw ve.hash=pe,ve}},"parseError"),parse:o(function(q){var pe=this,ve=[0],Pe=[],_e=[null],we=[],Ve=this.table,De="",qe=0,at=0,Rt=0,st=2,Ue=1,ct=we.slice.call(arguments,1),We=Object.create(this.lexer),ot={yy:{}};for(var Yt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Yt)&&(ot.yy[Yt]=this.yy[Yt]);We.setInput(q,ot.yy),ot.yy.lexer=We,ot.yy.parser=this,typeof We.yylloc>"u"&&(We.yylloc={});var bt=We.yylloc;we.push(bt);var Mt=We.options&&We.options.ranges;typeof ot.yy.parseError=="function"?this.parseError=ot.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xt(Ce){ve.length=ve.length-2*Ce,_e.length=_e.length-Ce,we.length=we.length-Ce}o(xt,"popStack");function ut(){var Ce;return Ce=Pe.pop()||We.lex()||Ue,typeof Ce!="number"&&(Ce instanceof Array&&(Pe=Ce,Ce=Pe.pop()),Ce=pe.symbols_[Ce]||Ce),Ce}o(ut,"lex");for(var Et,ft,yt,nt,dn,Tt,On={},tn,_r,Dr,Pn;;){if(yt=ve[ve.length-1],this.defaultActions[yt]?nt=this.defaultActions[yt]:((Et===null||typeof Et>"u")&&(Et=ut()),nt=Ve[yt]&&Ve[yt][Et]),typeof nt>"u"||!nt.length||!nt[0]){var At="";Pn=[];for(tn in Ve[yt])this.terminals_[tn]&&tn>st&&Pn.push("'"+this.terminals_[tn]+"'");We.showPosition?At="Parse error on line "+(qe+1)+`: | |
| 1169 | +`+We.showPosition()+` | |
| 1170 | +Expecting `+Pn.join(", ")+", got '"+(this.terminals_[Et]||Et)+"'":At="Parse error on line "+(qe+1)+": Unexpected "+(Et==Ue?"end of input":"'"+(this.terminals_[Et]||Et)+"'"),this.parseError(At,{text:We.match,token:this.terminals_[Et]||Et,line:We.yylineno,loc:bt,expected:Pn})}if(nt[0]instanceof Array&&nt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+yt+", token: "+Et);switch(nt[0]){case 1:ve.push(Et),_e.push(We.yytext),we.push(We.yylloc),ve.push(nt[1]),Et=null,ft?(Et=ft,ft=null):(at=We.yyleng,De=We.yytext,qe=We.yylineno,bt=We.yylloc,Rt>0&&Rt--);break;case 2:if(_r=this.productions_[nt[1]][1],On.$=_e[_e.length-_r],On._$={first_line:we[we.length-(_r||1)].first_line,last_line:we[we.length-1].last_line,first_column:we[we.length-(_r||1)].first_column,last_column:we[we.length-1].last_column},Mt&&(On._$.range=[we[we.length-(_r||1)].range[0],we[we.length-1].range[1]]),Tt=this.performAction.apply(On,[De,at,qe,ot.yy,nt[1],_e,we].concat(ct)),typeof Tt<"u")return Tt;_r&&(ve=ve.slice(0,-1*_r*2),_e=_e.slice(0,-1*_r),we=we.slice(0,-1*_r)),ve.push(this.productions_[nt[1]][0]),_e.push(On.$),we.push(On._$),Dr=Ve[ve[ve.length-2]][ve[ve.length-1]],ve.push(Dr);break;case 3:return!0}}return!0},"parse")},oe=function(){var xe={EOF:1,parseError:o(function(pe,ve){if(this.yy.parser)this.yy.parser.parseError(pe,ve);else throw new Error(pe)},"parseError"),setInput:o(function(q,pe){return this.yy=pe||this.yy||{},this._input=q,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var q=this._input[0];this.yytext+=q,this.yyleng++,this.offset++,this.match+=q,this.matched+=q;var pe=q.match(/(?:\r\n?|\n).*/g);return pe?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),q},"input"),unput:o(function(q){var pe=q.length,ve=q.split(/(?:\r\n?|\n)/g);this._input=q+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-pe),this.offset-=pe;var Pe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ve.length-1&&(this.yylineno-=ve.length-1);var _e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ve?(ve.length===Pe.length?this.yylloc.first_column:0)+Pe[Pe.length-ve.length].length-ve[0].length:this.yylloc.first_column-pe},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-pe]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1171 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(q){this.unput(this.match.slice(q))},"less"),pastInput:o(function(){var q=this.matched.substr(0,this.matched.length-this.match.length);return(q.length>20?"...":"")+q.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var q=this.match;return q.length<20&&(q+=this._input.substr(0,20-q.length)),(q.substr(0,20)+(q.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var q=this.pastInput(),pe=new Array(q.length+1).join("-");return q+this.upcomingInput()+` | |
| 1172 | +`+pe+"^"},"showPosition"),test_match:o(function(q,pe){var ve,Pe,_e;if(this.options.backtrack_lexer&&(_e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_e.yylloc.range=this.yylloc.range.slice(0))),Pe=q[0].match(/(?:\r\n?|\n).*/g),Pe&&(this.yylineno+=Pe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Pe?Pe[Pe.length-1].length-Pe[Pe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+q[0].length},this.yytext+=q[0],this.match+=q[0],this.matches=q,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(q[0].length),this.matched+=q[0],ve=this.performAction.call(this,this.yy,this,pe,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ve)return ve;if(this._backtrack){for(var we in _e)this[we]=_e[we];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var q,pe,ve,Pe;this._more||(this.yytext="",this.match="");for(var _e=this._currentRules(),we=0;we<_e.length;we++)if(ve=this._input.match(this.rules[_e[we]]),ve&&(!pe||ve[0].length>pe[0].length)){if(pe=ve,Pe=we,this.options.backtrack_lexer){if(q=this.test_match(ve,_e[we]),q!==!1)return q;if(this._backtrack){pe=!1;continue}else return!1}else if(!this.options.flex)break}return pe?(q=this.test_match(pe,_e[Pe]),q!==!1?q:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1173 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var pe=this.next();return pe||this.lex()},"lex"),begin:o(function(pe){this.conditionStack.push(pe)},"begin"),popState:o(function(){var pe=this.conditionStack.length-1;return pe>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(pe){return pe=this.conditionStack.length-1-Math.abs(pe||0),pe>=0?this.conditionStack[pe]:"INITIAL"},"topState"),pushState:o(function(pe){this.begin(pe)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(pe,ve,Pe,_e){var we=_e;switch(Pe){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return xe}();re.lexer=oe;function V(){this.yy={}}return o(V,"Parser"),V.prototype=re,re.Parser=V,new V}();hO.parser=hO;uhe=hO});var ms,y6,fhe=N(()=>{"use strict";dr();Ya();vt();_y();ms=oh(),y6=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:or.quadrantChart?.chartWidth||500,chartWidth:or.quadrantChart?.chartHeight||500,titlePadding:or.quadrantChart?.titlePadding||10,titleFontSize:or.quadrantChart?.titleFontSize||20,quadrantPadding:or.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:or.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:or.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:or.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:or.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:or.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:or.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:or.quadrantChart?.pointTextPadding||5,pointLabelFontSize:or.quadrantChart?.pointLabelFontSize||12,pointRadius:or.quadrantChart?.pointRadius||5,xAxisPosition:or.quadrantChart?.xAxisPosition||"top",yAxisPosition:or.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:or.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:or.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:ms.quadrant1Fill,quadrant2Fill:ms.quadrant2Fill,quadrant3Fill:ms.quadrant3Fill,quadrant4Fill:ms.quadrant4Fill,quadrant1TextFill:ms.quadrant1TextFill,quadrant2TextFill:ms.quadrant2TextFill,quadrant3TextFill:ms.quadrant3TextFill,quadrant4TextFill:ms.quadrant4TextFill,quadrantPointFill:ms.quadrantPointFill,quadrantPointTextFill:ms.quadrantPointTextFill,quadrantXAxisTextFill:ms.quadrantXAxisTextFill,quadrantYAxisTextFill:ms.quadrantYAxisTextFill,quadrantTitleFill:ms.quadrantTitleFill,quadrantInternalBorderStrokeFill:ms.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:ms.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,Y.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){Y.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){Y.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,n,i){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&n?l:0,right:this.config.yAxisPosition==="right"&&n?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:i?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,n,i){let{quadrantSpace:a,titleSpace:s}=i,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&n&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&n&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:n,quadrantLeft:i,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s,width:a,height:n,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s,width:a,height:n,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:n,quadrantLeft:i,quadrantTop:a,quadrantWidth:s}=r,l=gl().domain([0,1]).range([i,s+i]),u=gl().domain([0,1]).range([n+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:n}=e,{quadrantHalfHeight:i,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=n;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+i,x2:s+h-r,y2:u+i}]}getTitle(e){if(e)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),n=this.config.showTitle&&!!this.data.titleText,i=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(i,e,r,n);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(i,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(n)}}}});function fO(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function dhe(t){return!/^\d+$/.test(t)}function phe(t){return!/^\d+px$/.test(t)}var Ap,mhe=N(()=>{"use strict";Ap=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,n){super(`value for ${e} ${r} is invalid, please use a valid ${n}`),this.name="InvalidStyleError"}};o(fO,"validateHexCode");o(dhe,"validateNumber");o(phe,"validateSizeInPixels")});function Xu(t){return Tr(t.trim(),pGe)}function mGe(t){ba.setData({quadrant1Text:Xu(t.text)})}function gGe(t){ba.setData({quadrant2Text:Xu(t.text)})}function yGe(t){ba.setData({quadrant3Text:Xu(t.text)})}function vGe(t){ba.setData({quadrant4Text:Xu(t.text)})}function xGe(t){ba.setData({xAxisLeftText:Xu(t.text)})}function bGe(t){ba.setData({xAxisRightText:Xu(t.text)})}function wGe(t){ba.setData({yAxisTopText:Xu(t.text)})}function TGe(t){ba.setData({yAxisBottomText:Xu(t.text)})}function dO(t){let e={};for(let r of t){let[n,i]=r.trim().split(/\s*:\s*/);if(n==="radius"){if(dhe(i))throw new Ap(n,i,"number");e.radius=parseInt(i)}else if(n==="color"){if(fO(i))throw new Ap(n,i,"hex code");e.color=i}else if(n==="stroke-color"){if(fO(i))throw new Ap(n,i,"hex code");e.strokeColor=i}else if(n==="stroke-width"){if(phe(i))throw new Ap(n,i,"number of pixels (eg. 10px)");e.strokeWidth=i}else throw new Error(`style named ${n} is not supported.`)}return e}function kGe(t,e,r,n,i){let a=dO(i);ba.addPoints([{x:r,y:n,text:Xu(t.text),className:e,...a}])}function EGe(t,e){ba.addClass(t,dO(e))}function SGe(t){ba.setConfig({chartWidth:t})}function CGe(t){ba.setConfig({chartHeight:t})}function AGe(){let t=me(),{themeVariables:e,quadrantChart:r}=t;return r&&ba.setConfig(r),ba.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),ba.setData({titleText:Ir()}),ba.build()}var pGe,ba,_Ge,ghe,yhe=N(()=>{"use strict";zt();gr();mi();fhe();mhe();pGe=me();o(Xu,"textSanitizer");ba=new y6;o(mGe,"setQuadrant1Text");o(gGe,"setQuadrant2Text");o(yGe,"setQuadrant3Text");o(vGe,"setQuadrant4Text");o(xGe,"setXAxisLeftText");o(bGe,"setXAxisRightText");o(wGe,"setYAxisTopText");o(TGe,"setYAxisBottomText");o(dO,"parseStyles");o(kGe,"addPoint");o(EGe,"addClass");o(SGe,"setWidth");o(CGe,"setHeight");o(AGe,"getQuadrantData");_Ge=o(function(){ba.clear(),Ar()},"clear"),ghe={setWidth:SGe,setHeight:CGe,setQuadrant1Text:mGe,setQuadrant2Text:gGe,setQuadrant3Text:yGe,setQuadrant4Text:vGe,setXAxisLeftText:xGe,setXAxisRightText:bGe,setYAxisTopText:wGe,setYAxisBottomText:TGe,parseStyles:dO,addPoint:kGe,addClass:EGe,getQuadrantData:AGe,clear:_Ge,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var DGe,vhe,xhe=N(()=>{"use strict";dr();zt();vt();Ei();DGe=o((t,e,r,n)=>{function i(S){return S==="top"?"hanging":"middle"}o(i,"getDominantBaseLine");function a(S){return S==="left"?"start":"middle"}o(a,"getTextAnchor");function s(S){return`translate(${S.x}, ${S.y}) rotate(${S.rotation||0})`}o(s,"getTransformation");let l=me();Y.debug(`Rendering quadrant chart | |
| 1174 | +`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=Ge("#i"+e));let d=(u==="sandbox"?Ge(h.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;vn(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),n.db.setHeight(g),n.db.setWidth(m);let y=n.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),w=p.append("g").attr("class","labels"),C=p.append("g").attr("class","title");y.title&&C.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",i(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",S=>S.x1).attr("y1",S=>S.y1).attr("x2",S=>S.x2).attr("y2",S=>S.y2).style("stroke",S=>S.strokeFill).style("stroke-width",S=>S.strokeWidth);let T=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");T.append("rect").attr("x",S=>S.x).attr("y",S=>S.y).attr("width",S=>S.width).attr("height",S=>S.height).attr("fill",S=>S.fill),T.append("text").attr("x",0).attr("y",0).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text)).text(S=>S.text.text),w.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(S=>S.text).attr("fill",S=>S.fill).attr("font-size",S=>S.fontSize).attr("dominant-baseline",S=>i(S.horizontalPos)).attr("text-anchor",S=>a(S.verticalPos)).attr("transform",S=>s(S));let A=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");A.append("circle").attr("cx",S=>S.x).attr("cy",S=>S.y).attr("r",S=>S.radius).attr("fill",S=>S.fill).attr("stroke",S=>S.strokeColor).attr("stroke-width",S=>S.strokeWidth),A.append("text").attr("x",0).attr("y",0).text(S=>S.text.text).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text))},"draw"),vhe={draw:DGe}});var bhe={};hr(bhe,{diagram:()=>LGe});var LGe,whe=N(()=>{"use strict";hhe();yhe();xhe();LGe={parser:uhe,db:ghe,renderer:vhe,styles:o(()=>"","styles")}});var pO,Ehe,She=N(()=>{"use strict";pO=function(){var t=o(function(O,M,B,F){for(B=B||{},F=O.length;F--;B[O[F]]=M);return B},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],n=[1,3],i=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],C=[1,43],T=[1,42],E=[1,47],A=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],_=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],I=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],D=[1,64],k={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(M,B,F,P,z,$,H){var Q=$.length-1;switch(z){case 5:P.setOrientation($[Q]);break;case 9:P.setDiagramTitle($[Q].text.trim());break;case 12:P.setLineData({text:"",type:"text"},$[Q]);break;case 13:P.setLineData($[Q-1],$[Q]);break;case 14:P.setBarData({text:"",type:"text"},$[Q]);break;case 15:P.setBarData($[Q-1],$[Q]);break;case 16:this.$=$[Q].trim(),P.setAccTitle(this.$);break;case 17:case 18:this.$=$[Q].trim(),P.setAccDescription(this.$);break;case 19:this.$=$[Q-1];break;case 20:this.$=[Number($[Q-2]),...$[Q]];break;case 21:this.$=[Number($[Q])];break;case 22:P.setXAxisTitle($[Q]);break;case 23:P.setXAxisTitle($[Q-1]);break;case 24:P.setXAxisTitle({type:"text",text:""});break;case 25:P.setXAxisBand($[Q]);break;case 26:P.setXAxisRangeData(Number($[Q-2]),Number($[Q]));break;case 27:this.$=$[Q-1];break;case 28:this.$=[$[Q-2],...$[Q]];break;case 29:this.$=[$[Q]];break;case 30:P.setYAxisTitle($[Q]);break;case 31:P.setYAxisTitle($[Q-1]);break;case 32:P.setYAxisTitle({type:"text",text:""});break;case 33:P.setYAxisRangeData(Number($[Q-2]),Number($[Q]));break;case 37:this.$={text:$[Q],type:"text"};break;case 38:this.$={text:$[Q],type:"text"};break;case 39:this.$={text:$[Q],type:"markdown"};break;case 40:this.$=$[Q];break;case 41:this.$=$[Q-1]+""+$[Q];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:n,34:i,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:n,34:i,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:n,8:[1,11],34:i,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:n,34:i,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:i,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:39,13:38,24:C,27:T,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:45,15:44,27:E,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:49,17:48,24:A,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:52,17:51,24:A,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{20:[1,53]},{22:[1,54]},t(S,[2,18]),{1:[2,2]},t(S,[2,8]),t(S,[2,9]),t(_,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w}),t(_,[2,38]),t(_,[2,39]),t(I,[2,40]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),t(I,[2,47]),t(I,[2,48]),t(I,[2,49]),t(I,[2,50]),t(I,[2,51]),t(S,[2,10]),t(S,[2,22],{30:41,29:56,24:C,27:T}),t(S,[2,24]),t(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,11]),t(S,[2,30],{33:60,27:E}),t(S,[2,32]),{31:[1,61]},t(S,[2,12]),{17:62,24:A},{25:63,27:D},t(S,[2,14]),{17:65,24:A},t(S,[2,16]),t(S,[2,17]),t(I,[2,41]),t(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(S,[2,31]),{27:[1,69]},t(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(S,[2,15]),t(S,[2,26]),t(S,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,33]),t(S,[2,19]),{25:73,27:D},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(M,B){if(B.recoverable)this.trace(M);else{var F=new Error(M);throw F.hash=B,F}},"parseError"),parse:o(function(M){var B=this,F=[0],P=[],z=[null],$=[],H=this.table,Q="",j=0,ie=0,ne=0,le=2,he=1,K=$.slice.call(arguments,1),X=Object.create(this.lexer),te={yy:{}};for(var J in this.yy)Object.prototype.hasOwnProperty.call(this.yy,J)&&(te.yy[J]=this.yy[J]);X.setInput(M,te.yy),te.yy.lexer=X,te.yy.parser=this,typeof X.yylloc>"u"&&(X.yylloc={});var se=X.yylloc;$.push(se);var ue=X.options&&X.options.ranges;typeof te.yy.parseError=="function"?this.parseError=te.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(re){F.length=F.length-2*re,z.length=z.length-re,$.length=$.length-re}o(Z,"popStack");function Se(){var re;return re=P.pop()||X.lex()||he,typeof re!="number"&&(re instanceof Array&&(P=re,re=P.pop()),re=B.symbols_[re]||re),re}o(Se,"lex");for(var ce,ae,Oe,ge,ze,He,$e={},Re,Ie,be,W;;){if(Oe=F[F.length-1],this.defaultActions[Oe]?ge=this.defaultActions[Oe]:((ce===null||typeof ce>"u")&&(ce=Se()),ge=H[Oe]&&H[Oe][ce]),typeof ge>"u"||!ge.length||!ge[0]){var de="";W=[];for(Re in H[Oe])this.terminals_[Re]&&Re>le&&W.push("'"+this.terminals_[Re]+"'");X.showPosition?de="Parse error on line "+(j+1)+`: | |
| 1175 | +`+X.showPosition()+` | |
| 1176 | +Expecting `+W.join(", ")+", got '"+(this.terminals_[ce]||ce)+"'":de="Parse error on line "+(j+1)+": Unexpected "+(ce==he?"end of input":"'"+(this.terminals_[ce]||ce)+"'"),this.parseError(de,{text:X.match,token:this.terminals_[ce]||ce,line:X.yylineno,loc:se,expected:W})}if(ge[0]instanceof Array&&ge.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Oe+", token: "+ce);switch(ge[0]){case 1:F.push(ce),z.push(X.yytext),$.push(X.yylloc),F.push(ge[1]),ce=null,ae?(ce=ae,ae=null):(ie=X.yyleng,Q=X.yytext,j=X.yylineno,se=X.yylloc,ne>0&&ne--);break;case 2:if(Ie=this.productions_[ge[1]][1],$e.$=z[z.length-Ie],$e._$={first_line:$[$.length-(Ie||1)].first_line,last_line:$[$.length-1].last_line,first_column:$[$.length-(Ie||1)].first_column,last_column:$[$.length-1].last_column},ue&&($e._$.range=[$[$.length-(Ie||1)].range[0],$[$.length-1].range[1]]),He=this.performAction.apply($e,[Q,ie,j,te.yy,ge[1],z,$].concat(K)),typeof He<"u")return He;Ie&&(F=F.slice(0,-1*Ie*2),z=z.slice(0,-1*Ie),$=$.slice(0,-1*Ie)),F.push(this.productions_[ge[1]][0]),z.push($e.$),$.push($e._$),be=H[F[F.length-2]][F[F.length-1]],F.push(be);break;case 3:return!0}}return!0},"parse")},L=function(){var O={EOF:1,parseError:o(function(B,F){if(this.yy.parser)this.yy.parser.parseError(B,F);else throw new Error(B)},"parseError"),setInput:o(function(M,B){return this.yy=B||this.yy||{},this._input=M,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var M=this._input[0];this.yytext+=M,this.yyleng++,this.offset++,this.match+=M,this.matched+=M;var B=M.match(/(?:\r\n?|\n).*/g);return B?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),M},"input"),unput:o(function(M){var B=M.length,F=M.split(/(?:\r\n?|\n)/g);this._input=M+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-B),this.offset-=B;var P=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),F.length-1&&(this.yylineno-=F.length-1);var z=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:F?(F.length===P.length?this.yylloc.first_column:0)+P[P.length-F.length].length-F[0].length:this.yylloc.first_column-B},this.options.ranges&&(this.yylloc.range=[z[0],z[0]+this.yyleng-B]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1177 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(M){this.unput(this.match.slice(M))},"less"),pastInput:o(function(){var M=this.matched.substr(0,this.matched.length-this.match.length);return(M.length>20?"...":"")+M.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var M=this.match;return M.length<20&&(M+=this._input.substr(0,20-M.length)),(M.substr(0,20)+(M.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var M=this.pastInput(),B=new Array(M.length+1).join("-");return M+this.upcomingInput()+` | |
| 1178 | +`+B+"^"},"showPosition"),test_match:o(function(M,B){var F,P,z;if(this.options.backtrack_lexer&&(z={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(z.yylloc.range=this.yylloc.range.slice(0))),P=M[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+M[0].length},this.yytext+=M[0],this.match+=M[0],this.matches=M,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(M[0].length),this.matched+=M[0],F=this.performAction.call(this,this.yy,this,B,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),F)return F;if(this._backtrack){for(var $ in z)this[$]=z[$];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var M,B,F,P;this._more||(this.yytext="",this.match="");for(var z=this._currentRules(),$=0;$<z.length;$++)if(F=this._input.match(this.rules[z[$]]),F&&(!B||F[0].length>B[0].length)){if(B=F,P=$,this.options.backtrack_lexer){if(M=this.test_match(F,z[$]),M!==!1)return M;if(this._backtrack){B=!1;continue}else return!1}else if(!this.options.flex)break}return B?(M=this.test_match(B,z[P]),M!==!1?M:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1179 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var B=this.next();return B||this.lex()},"lex"),begin:o(function(B){this.conditionStack.push(B)},"begin"),popState:o(function(){var B=this.conditionStack.length-1;return B>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(B){return B=this.conditionStack.length-1-Math.abs(B||0),B>=0?this.conditionStack[B]:"INITIAL"},"topState"),pushState:o(function(B){this.begin(B)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(B,F,P,z){var $=z;switch(P){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";break;case 17:return this.pushState("axis_data"),"Y_AXIS";break;case 18:return this.pushState("axis_band_data"),24;break;case 19:return 31;case 20:return this.pushState("data"),16;break;case 21:return this.pushState("data"),18;break;case 22:return this.pushState("data_inner"),24;break;case 23:return 27;case 24:return this.popState(),26;break;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n<md_string>\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n<md_string>\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return O}();k.lexer=L;function R(){this.yy={}}return o(R,"Parser"),R.prototype=k,k.Parser=R,new R}();pO.parser=pO;Ehe=pO});function mO(t){return t.type==="bar"}function v6(t){return t.type==="band"}function S1(t){return t.type==="linear"}var x6=N(()=>{"use strict";o(mO,"isBarPlot");o(v6,"isBandAxisData");o(S1,"isLinearAxisData")});var C1,gO=N(()=>{"use strict";to();C1=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let n={width:0,height:0},i=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=sK(i,1,a),l=s?s.width:a.length*r,u=s?s.height:r;n.width=Math.max(n.width,l),n.height=Math.max(n.height,u)}return i.remove(),n}}});var A1,yO=N(()=>{"use strict";A1=class{constructor(e,r,n,i){this.axisConfig=e;this.title=r;this.textDimensionCalculator=n;this.axisThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.width;this.outerPadding=Math.min(n.width/2,i);let a=n.height+this.axisConfig.labelPadding*2;this.labelTextHeight=n.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.height;this.outerPadding=Math.min(n.height/2,i);let a=n.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${r},${this.getScaleValue(n)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(n)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r} L ${this.getScaleValue(n)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(n)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var b6,Che=N(()=>{"use strict";dr();vt();yO();b6=class extends A1{static{o(this,"BandAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.categories=n,this.scale=L0().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=L0().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Y.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var w6,Ahe=N(()=>{"use strict";dr();yO();w6=class extends A1{static{o(this,"LinearAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.domain=n,this.scale=gl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=gl().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function vO(t,e,r,n){let i=new C1(n);return v6(t)?new b6(e,r,t.categories,t.title,i):new w6(e,r,[t.min,t.max],t.title,i)}var _he=N(()=>{"use strict";x6();gO();Che();Ahe();o(vO,"getAxis")});function Dhe(t,e,r,n){let i=new C1(n);return new xO(i,t,e,r)}var xO,Lhe=N(()=>{"use strict";gO();xO=class{constructor(e,r,n,i){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=n;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),n=Math.max(r.width,e.width),i=r.height+2*this.chartConfig.titlePadding;return r.width<=n&&r.height<=i&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=n,this.boundingRect.height=i,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(Dhe,"getChartTitleComponent")});var T6,Rhe=N(()=>{"use strict";dr();T6=class{constructor(e,r,n,i,a){this.plotData=e;this.xAxis=r;this.yAxis=n;this.orientation=i;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(n=>[this.xAxis.getScaleValue(n[0]),this.yAxis.getScaleValue(n[1])]),r;return this.orientation==="horizontal"?r=wl().y(n=>n[0]).x(n=>n[1])(e):r=wl().x(n=>n[0]).y(n=>n[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var k6,Nhe=N(()=>{"use strict";k6=class{constructor(e,r,n,i,a,s){this.barData=e;this.boundingRect=r;this.xAxis=n;this.yAxis=i;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),n=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),i=n/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-i,height:n,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-i,y:a[1],width:n,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function Mhe(t,e,r){return new bO(t,e,r)}var bO,Ihe=N(()=>{"use strict";Rhe();Nhe();bO=class{constructor(e,r,n){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,n]of this.chartData.plots.entries())switch(n.type){case"line":{let i=new T6(n,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break;case"bar":{let i=new k6(n,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break}return e}};o(Mhe,"getPlotComponent")});var E6,Ohe=N(()=>{"use strict";_he();Lhe();Ihe();x6();E6=class{constructor(e,r,n,i){this.chartConfig=e;this.chartData=r;this.componentStore={title:Dhe(e,r,n,i),plot:Mhe(e,r,n),xAxis:vO(r.xAxis,e.xAxis,{titleColor:n.xAxisTitleColor,labelColor:n.xAxisLabelColor,tickColor:n.xAxisTickColor,axisLineColor:n.xAxisLineColor},i),yAxis:vO(r.yAxis,e.yAxis,{titleColor:n.yAxisTitleColor,labelColor:n.yAxisLabelColor,tickColor:n.yAxisTickColor,axisLineColor:n.yAxisLineColor},i)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),n=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([n,n+a]),this.componentStore.xAxis.setBoundingBoxXY({x:n,y:i+s}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:i}),this.chartData.plots.some(u=>mO(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,i=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=n+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:i,y:a}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>mO(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var S6,Phe=N(()=>{"use strict";Ohe();S6=class{static{o(this,"XYChartBuilder")}static build(e,r,n,i){return new E6(e,r,n,i).getDrawableElement()}}});function Fhe(){let t=oh(),e=cr();return Fi(t.xyChart,e.themeVariables.xyChart)}function $he(){let t=cr();return Fi(or.xyChart,t.xyChart)}function zhe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function kO(t){let e=cr();return Tr(t.trim(),e)}function IGe(t){Bhe=t}function OGe(t){t==="horizontal"?bb.chartOrientation="horizontal":bb.chartOrientation="vertical"}function PGe(t){fn.xAxis.title=kO(t.text)}function Ghe(t,e){fn.xAxis={type:"linear",title:fn.xAxis.title,min:t,max:e},C6=!0}function BGe(t){fn.xAxis={type:"band",title:fn.xAxis.title,categories:t.map(e=>kO(e.text))},C6=!0}function FGe(t){fn.yAxis.title=kO(t.text)}function $Ge(t,e){fn.yAxis={type:"linear",title:fn.yAxis.title,min:t,max:e},TO=!0}function zGe(t){let e=Math.min(...t),r=Math.max(...t),n=S1(fn.yAxis)?fn.yAxis.min:1/0,i=S1(fn.yAxis)?fn.yAxis.max:-1/0;fn.yAxis={type:"linear",title:fn.yAxis.title,min:Math.min(n,e),max:Math.max(i,r)}}function Vhe(t){let e=[];if(t.length===0)return e;if(!C6){let r=S1(fn.xAxis)?fn.xAxis.min:1/0,n=S1(fn.xAxis)?fn.xAxis.max:-1/0;Ghe(Math.min(r,1),Math.max(n,t.length))}if(TO||zGe(t),v6(fn.xAxis)&&(e=fn.xAxis.categories.map((r,n)=>[r,t[n]])),S1(fn.xAxis)){let r=fn.xAxis.min,n=fn.xAxis.max,i=(n-r)/(t.length-1),a=[];for(let s=r;s<=n;s+=i)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function Uhe(t){return wO[t===0?0:t%wO.length]}function GGe(t,e){let r=Vhe(e);fn.plots.push({type:"line",strokeFill:Uhe(xb),strokeWidth:2,data:r}),xb++}function VGe(t,e){let r=Vhe(e);fn.plots.push({type:"bar",fill:Uhe(xb),data:r}),xb++}function UGe(){if(fn.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return fn.title=Ir(),S6.build(bb,fn,wb,Bhe)}function HGe(){return wb}function WGe(){return bb}var xb,Bhe,bb,wb,fn,wO,C6,TO,qGe,Hhe,Whe=N(()=>{"use strict";ji();Ya();_y();ir();gr();mi();Phe();x6();xb=0,bb=$he(),wb=Fhe(),fn=zhe(),wO=wb.plotColorPalette.split(",").map(t=>t.trim()),C6=!1,TO=!1;o(Fhe,"getChartDefaultThemeConfig");o($he,"getChartDefaultConfig");o(zhe,"getChartDefaultData");o(kO,"textSanitizer");o(IGe,"setTmpSVGG");o(OGe,"setOrientation");o(PGe,"setXAxisTitle");o(Ghe,"setXAxisRangeData");o(BGe,"setXAxisBand");o(FGe,"setYAxisTitle");o($Ge,"setYAxisRangeData");o(zGe,"setYAxisRangeFromPlotData");o(Vhe,"transformDataWithoutCategory");o(Uhe,"getPlotColorFromPalette");o(GGe,"setLineData");o(VGe,"setBarData");o(UGe,"getDrawableElem");o(HGe,"getChartThemeConfig");o(WGe,"getChartConfig");qGe=o(function(){Ar(),xb=0,bb=$he(),fn=zhe(),wb=Fhe(),wO=wb.plotColorPalette.split(",").map(t=>t.trim()),C6=!1,TO=!1},"clear"),Hhe={getDrawableElem:UGe,clear:qGe,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr,setOrientation:OGe,setXAxisTitle:PGe,setXAxisRangeData:Ghe,setXAxisBand:BGe,setYAxisTitle:FGe,setYAxisRangeData:$Ge,setLineData:GGe,setBarData:VGe,setTmpSVGG:IGe,getChartThemeConfig:HGe,getChartConfig:WGe}});var YGe,qhe,Yhe=N(()=>{"use strict";vt();Vc();Ei();YGe=o((t,e,r,n)=>{let i=n.db,a=i.getChartThemeConfig(),s=i.getChartConfig();function l(v){return v==="top"?"text-before-edge":"middle"}o(l,"getDominantBaseLine");function u(v){return v==="left"?"start":v==="right"?"end":"middle"}o(u,"getTextAnchor");function h(v){return`translate(${v.x}, ${v.y}) rotate(${v.rotation||0})`}o(h,"getTextTransformation"),Y.debug(`Rendering xychart chart | |
| 1180 | +`+t);let f=sa(e),d=f.append("g").attr("class","main"),p=d.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");vn(f,s.height,s.width,!0),f.attr("viewBox",`0 0 ${s.width} ${s.height}`),p.attr("fill",a.backgroundColor),i.setTmpSVGG(f.append("g").attr("class","mermaid-tmp-group"));let m=i.getDrawableElem(),g={};function y(v){let x=d,b="";for(let[w]of v.entries()){let C=d;w>0&&g[b]&&(C=g[b]),b+=v[w],x=g[b],x||(x=g[b]=C.append("g").attr("class",v[w]))}return x}o(y,"getGroup");for(let v of m){if(v.data.length===0)continue;let x=y(v.groupTexts);switch(v.type){case"rect":x.selectAll("rect").data(v.data).enter().append("rect").attr("x",b=>b.x).attr("y",b=>b.y).attr("width",b=>b.width).attr("height",b=>b.height).attr("fill",b=>b.fill).attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break;case"text":x.selectAll("text").data(v.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",b=>b.fill).attr("font-size",b=>b.fontSize).attr("dominant-baseline",b=>l(b.verticalPos)).attr("text-anchor",b=>u(b.horizontalPos)).attr("transform",b=>h(b)).text(b=>b.text);break;case"path":x.selectAll("path").data(v.data).enter().append("path").attr("d",b=>b.path).attr("fill",b=>b.fill?b.fill:"none").attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break}}},"draw"),qhe={draw:YGe}});var Xhe={};hr(Xhe,{diagram:()=>XGe});var XGe,jhe=N(()=>{"use strict";She();Whe();Yhe();XGe={parser:Ehe,db:Hhe,renderer:qhe}});var EO,Zhe,Jhe=N(()=>{"use strict";EO=function(){var t=o(function(re,oe,V,xe){for(V=V||{},xe=re.length;xe--;V[re[xe]]=oe);return V},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],s=[1,22],l=[2,7],u=[1,26],h=[1,27],f=[1,28],d=[1,29],p=[1,33],m=[1,34],g=[1,35],y=[1,36],v=[1,37],x=[1,38],b=[1,24],w=[1,31],C=[1,32],T=[1,30],E=[1,39],A=[1,40],S=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],_=[1,61],I=[89,90],D=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],k=[27,29],L=[1,70],R=[1,71],O=[1,72],M=[1,73],B=[1,74],F=[1,75],P=[1,76],z=[1,83],$=[1,80],H=[1,84],Q=[1,85],j=[1,86],ie=[1,87],ne=[1,88],le=[1,89],he=[1,90],K=[1,91],X=[1,92],te=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],J=[63,64],se=[1,101],ue=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],Z=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],Se=[1,110],ce=[1,106],ae=[1,107],Oe=[1,108],ge=[1,109],ze=[1,111],He=[1,116],$e=[1,117],Re=[1,114],Ie=[1,115],be={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType:39,STRUCT_STOP:40,REQUIREMENT:41,FUNCTIONAL_REQUIREMENT:42,INTERFACE_REQUIREMENT:43,PERFORMANCE_REQUIREMENT:44,PHYSICAL_REQUIREMENT:45,DESIGN_CONSTRAINT:46,LOW_RISK:47,MED_RISK:48,HIGH_RISK:49,VERIFY_ANALYSIS:50,VERIFY_DEMONSTRATION:51,VERIFY_INSPECTION:52,VERIFY_TEST:53,ELEMENT:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:o(function(oe,V,xe,q,pe,ve,Pe){var _e=ve.length-1;switch(pe){case 4:this.$=ve[_e].trim(),q.setAccTitle(this.$);break;case 5:case 6:this.$=ve[_e].trim(),q.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:q.setDirection("TB");break;case 18:q.setDirection("BT");break;case 19:q.setDirection("RL");break;case 20:q.setDirection("LR");break;case 21:q.addRequirement(ve[_e-3],ve[_e-4]);break;case 22:q.addRequirement(ve[_e-5],ve[_e-6]),q.setClass([ve[_e-5]],ve[_e-3]);break;case 23:q.setNewReqId(ve[_e-2]);break;case 24:q.setNewReqText(ve[_e-2]);break;case 25:q.setNewReqRisk(ve[_e-2]);break;case 26:q.setNewReqVerifyMethod(ve[_e-2]);break;case 29:this.$=q.RequirementType.REQUIREMENT;break;case 30:this.$=q.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=q.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=q.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=q.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=q.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=q.RiskLevel.LOW_RISK;break;case 36:this.$=q.RiskLevel.MED_RISK;break;case 37:this.$=q.RiskLevel.HIGH_RISK;break;case 38:this.$=q.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=q.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=q.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=q.VerifyType.VERIFY_TEST;break;case 42:q.addElement(ve[_e-3]);break;case 43:q.addElement(ve[_e-5]),q.setClass([ve[_e-5]],ve[_e-3]);break;case 44:q.setNewElementType(ve[_e-2]);break;case 45:q.setNewElementDocRef(ve[_e-2]);break;case 48:q.addRelationship(ve[_e-2],ve[_e],ve[_e-4]);break;case 49:q.addRelationship(ve[_e-2],ve[_e-4],ve[_e]);break;case 50:this.$=q.Relationships.CONTAINS;break;case 51:this.$=q.Relationships.COPIES;break;case 52:this.$=q.Relationships.DERIVES;break;case 53:this.$=q.Relationships.SATISFIES;break;case 54:this.$=q.Relationships.VERIFIES;break;case 55:this.$=q.Relationships.REFINES;break;case 56:this.$=q.Relationships.TRACES;break;case 57:this.$=ve[_e-2],q.defineClass(ve[_e-1],ve[_e]);break;case 58:q.setClass(ve[_e-1],ve[_e]);break;case 59:q.setClass([ve[_e-2]],ve[_e]);break;case 60:case 62:this.$=[ve[_e]];break;case 61:case 63:this.$=ve[_e-2].concat([ve[_e]]);break;case 64:this.$=ve[_e-2],q.setCssStyle(ve[_e-1],ve[_e]);break;case 65:this.$=[ve[_e]];break;case 66:ve[_e-2].push(ve[_e]),this.$=ve[_e-2];break;case 68:this.$=ve[_e-1]+ve[_e];break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:n,13:i},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:n,13:i},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:n,13:i},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:s,7:42,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:43,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:44,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:45,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:46,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:47,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:48,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:49,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:50,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},t(S,[2,17]),t(S,[2,18]),t(S,[2,19]),t(S,[2,20]),{30:60,33:62,75:_,89:E,90:A},{30:63,33:62,75:_,89:E,90:A},{30:64,33:62,75:_,89:E,90:A},t(I,[2,29]),t(I,[2,30]),t(I,[2,31]),t(I,[2,32]),t(I,[2,33]),t(I,[2,34]),t(D,[2,81]),t(D,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},t(k,[2,79]),t(k,[2,80]),{27:[1,67],29:[1,68]},t(k,[2,85]),t(k,[2,86]),{62:69,65:L,66:R,67:O,68:M,69:B,70:F,71:P},{62:77,65:L,66:R,67:O,68:M,69:B,70:F,71:P},{30:78,33:62,75:_,89:E,90:A},{73:79,75:z,76:$,78:81,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},t(te,[2,60]),t(te,[2,62]),{73:93,75:z,76:$,78:81,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},{30:94,33:62,75:_,76:$,89:E,90:A},{5:[1,95]},{30:96,33:62,75:_,89:E,90:A},{5:[1,97]},{30:98,33:62,75:_,89:E,90:A},{63:[1,99]},t(J,[2,50]),t(J,[2,51]),t(J,[2,52]),t(J,[2,53]),t(J,[2,54]),t(J,[2,55]),t(J,[2,56]),{64:[1,100]},t(S,[2,59],{76:$}),t(S,[2,64],{76:se}),{33:103,75:[1,102],89:E,90:A},t(ue,[2,65],{79:104,75:z,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X}),t(Z,[2,67]),t(Z,[2,69]),t(Z,[2,70]),t(Z,[2,71]),t(Z,[2,72]),t(Z,[2,73]),t(Z,[2,74]),t(Z,[2,75]),t(Z,[2,76]),t(Z,[2,77]),t(Z,[2,78]),t(S,[2,57],{76:se}),t(S,[2,58],{76:$}),{5:Se,28:105,31:ce,34:ae,36:Oe,38:ge,40:ze},{27:[1,112],76:$},{5:He,40:$e,56:113,57:Re,59:Ie},{27:[1,118],76:$},{33:119,89:E,90:A},{33:120,89:E,90:A},{75:z,78:121,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},t(te,[2,61]),t(te,[2,63]),t(Z,[2,68]),t(S,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:Se,28:126,31:ce,34:ae,36:Oe,38:ge,40:ze},t(S,[2,28]),{5:[1,127]},t(S,[2,42]),{32:[1,128]},{32:[1,129]},{5:He,40:$e,56:130,57:Re,59:Ie},t(S,[2,47]),{5:[1,131]},t(S,[2,48]),t(S,[2,49]),t(ue,[2,66],{79:104,75:z,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X}),{33:132,89:E,90:A},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},t(S,[2,27]),{5:Se,28:145,31:ce,34:ae,36:Oe,38:ge,40:ze},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},t(S,[2,46]),{5:He,40:$e,56:152,57:Re,59:Ie},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},t(S,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},t(S,[2,43]),{5:Se,28:159,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:160,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:161,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:162,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:He,40:$e,56:163,57:Re,59:Ie},{5:He,40:$e,56:164,57:Re,59:Ie},t(S,[2,23]),t(S,[2,24]),t(S,[2,25]),t(S,[2,26]),t(S,[2,44]),t(S,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:o(function(oe,V){if(V.recoverable)this.trace(oe);else{var xe=new Error(oe);throw xe.hash=V,xe}},"parseError"),parse:o(function(oe){var V=this,xe=[0],q=[],pe=[null],ve=[],Pe=this.table,_e="",we=0,Ve=0,De=0,qe=2,at=1,Rt=ve.slice.call(arguments,1),st=Object.create(this.lexer),Ue={yy:{}};for(var ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ct)&&(Ue.yy[ct]=this.yy[ct]);st.setInput(oe,Ue.yy),Ue.yy.lexer=st,Ue.yy.parser=this,typeof st.yylloc>"u"&&(st.yylloc={});var We=st.yylloc;ve.push(We);var ot=st.options&&st.options.ranges;typeof Ue.yy.parseError=="function"?this.parseError=Ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Yt(Dr){xe.length=xe.length-2*Dr,pe.length=pe.length-Dr,ve.length=ve.length-Dr}o(Yt,"popStack");function bt(){var Dr;return Dr=q.pop()||st.lex()||at,typeof Dr!="number"&&(Dr instanceof Array&&(q=Dr,Dr=q.pop()),Dr=V.symbols_[Dr]||Dr),Dr}o(bt,"lex");for(var Mt,xt,ut,Et,ft,yt,nt={},dn,Tt,On,tn;;){if(ut=xe[xe.length-1],this.defaultActions[ut]?Et=this.defaultActions[ut]:((Mt===null||typeof Mt>"u")&&(Mt=bt()),Et=Pe[ut]&&Pe[ut][Mt]),typeof Et>"u"||!Et.length||!Et[0]){var _r="";tn=[];for(dn in Pe[ut])this.terminals_[dn]&&dn>qe&&tn.push("'"+this.terminals_[dn]+"'");st.showPosition?_r="Parse error on line "+(we+1)+`: | |
| 1181 | +`+st.showPosition()+` | |
| 1182 | +Expecting `+tn.join(", ")+", got '"+(this.terminals_[Mt]||Mt)+"'":_r="Parse error on line "+(we+1)+": Unexpected "+(Mt==at?"end of input":"'"+(this.terminals_[Mt]||Mt)+"'"),this.parseError(_r,{text:st.match,token:this.terminals_[Mt]||Mt,line:st.yylineno,loc:We,expected:tn})}if(Et[0]instanceof Array&&Et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ut+", token: "+Mt);switch(Et[0]){case 1:xe.push(Mt),pe.push(st.yytext),ve.push(st.yylloc),xe.push(Et[1]),Mt=null,xt?(Mt=xt,xt=null):(Ve=st.yyleng,_e=st.yytext,we=st.yylineno,We=st.yylloc,De>0&&De--);break;case 2:if(Tt=this.productions_[Et[1]][1],nt.$=pe[pe.length-Tt],nt._$={first_line:ve[ve.length-(Tt||1)].first_line,last_line:ve[ve.length-1].last_line,first_column:ve[ve.length-(Tt||1)].first_column,last_column:ve[ve.length-1].last_column},ot&&(nt._$.range=[ve[ve.length-(Tt||1)].range[0],ve[ve.length-1].range[1]]),yt=this.performAction.apply(nt,[_e,Ve,we,Ue.yy,Et[1],pe,ve].concat(Rt)),typeof yt<"u")return yt;Tt&&(xe=xe.slice(0,-1*Tt*2),pe=pe.slice(0,-1*Tt),ve=ve.slice(0,-1*Tt)),xe.push(this.productions_[Et[1]][0]),pe.push(nt.$),ve.push(nt._$),On=Pe[xe[xe.length-2]][xe[xe.length-1]],xe.push(On);break;case 3:return!0}}return!0},"parse")},W=function(){var re={EOF:1,parseError:o(function(V,xe){if(this.yy.parser)this.yy.parser.parseError(V,xe);else throw new Error(V)},"parseError"),setInput:o(function(oe,V){return this.yy=V||this.yy||{},this._input=oe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var oe=this._input[0];this.yytext+=oe,this.yyleng++,this.offset++,this.match+=oe,this.matched+=oe;var V=oe.match(/(?:\r\n?|\n).*/g);return V?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),oe},"input"),unput:o(function(oe){var V=oe.length,xe=oe.split(/(?:\r\n?|\n)/g);this._input=oe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-V),this.offset-=V;var q=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),xe.length-1&&(this.yylineno-=xe.length-1);var pe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:xe?(xe.length===q.length?this.yylloc.first_column:0)+q[q.length-xe.length].length-xe[0].length:this.yylloc.first_column-V},this.options.ranges&&(this.yylloc.range=[pe[0],pe[0]+this.yyleng-V]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1183 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(oe){this.unput(this.match.slice(oe))},"less"),pastInput:o(function(){var oe=this.matched.substr(0,this.matched.length-this.match.length);return(oe.length>20?"...":"")+oe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var oe=this.match;return oe.length<20&&(oe+=this._input.substr(0,20-oe.length)),(oe.substr(0,20)+(oe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var oe=this.pastInput(),V=new Array(oe.length+1).join("-");return oe+this.upcomingInput()+` | |
| 1184 | +`+V+"^"},"showPosition"),test_match:o(function(oe,V){var xe,q,pe;if(this.options.backtrack_lexer&&(pe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(pe.yylloc.range=this.yylloc.range.slice(0))),q=oe[0].match(/(?:\r\n?|\n).*/g),q&&(this.yylineno+=q.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:q?q[q.length-1].length-q[q.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+oe[0].length},this.yytext+=oe[0],this.match+=oe[0],this.matches=oe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(oe[0].length),this.matched+=oe[0],xe=this.performAction.call(this,this.yy,this,V,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),xe)return xe;if(this._backtrack){for(var ve in pe)this[ve]=pe[ve];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var oe,V,xe,q;this._more||(this.yytext="",this.match="");for(var pe=this._currentRules(),ve=0;ve<pe.length;ve++)if(xe=this._input.match(this.rules[pe[ve]]),xe&&(!V||xe[0].length>V[0].length)){if(V=xe,q=ve,this.options.backtrack_lexer){if(oe=this.test_match(xe,pe[ve]),oe!==!1)return oe;if(this._backtrack){V=!1;continue}else return!1}else if(!this.options.flex)break}return V?(oe=this.test_match(V,pe[q]),oe!==!1?oe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1185 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var V=this.next();return V||this.lex()},"lex"),begin:o(function(V){this.conditionStack.push(V)},"begin"),popState:o(function(){var V=this.conditionStack.length-1;return V>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(V){return V=this.conditionStack.length-1-Math.abs(V||0),V>=0?this.conditionStack[V]:"INITIAL"},"topState"),pushState:o(function(V){this.begin(V)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(V,xe,q,pe){var ve=pe;switch(q){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 21;case 9:return 22;case 10:return 23;case 11:return 24;case 12:return 5;case 13:break;case 14:break;case 15:break;case 16:return 8;case 17:return 6;case 18:return 27;case 19:return 40;case 20:return 29;case 21:return 32;case 22:return 31;case 23:return 34;case 24:return 36;case 25:return 38;case 26:return 41;case 27:return 42;case 28:return 43;case 29:return 44;case 30:return 45;case 31:return 46;case 32:return 47;case 33:return 48;case 34:return 49;case 35:return 50;case 36:return 51;case 37:return 52;case 38:return 53;case 39:return 54;case 40:return 65;case 41:return 66;case 42:return 67;case 43:return 68;case 44:return 69;case 45:return 70;case 46:return 71;case 47:return 57;case 48:return 59;case 49:return this.begin("style"),77;break;case 50:return 75;case 51:return 81;case 52:return 88;case 53:return"PERCENT";case 54:return 86;case 55:return 84;case 56:break;case 57:this.begin("string");break;case 58:this.popState();break;case 59:return this.begin("style"),72;break;case 60:return this.begin("style"),74;break;case 61:return 61;case 62:return 64;case 63:return 63;case 64:this.begin("string");break;case 65:this.popState();break;case 66:return"qString";case 67:return xe.yytext=xe.yytext.trim(),89;break;case 68:return 75;case 69:return 80;case 70:return 76}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::{3})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:style\b)/i,/^(?:\w+)/i,/^(?::)/i,/^(?:;)/i,/^(?:%)/i,/^(?:-)/i,/^(?:#)/i,/^(?: )/i,/^(?:["])/i,/^(?:\n)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i,/^(?:\w+)/i,/^(?:[0-9]+)/i,/^(?:,)/i],conditions:{acc_descr_multiline:{rules:[6,7,68,69,70],inclusive:!1},acc_descr:{rules:[4,68,69,70],inclusive:!1},acc_title:{rules:[2,68,69,70],inclusive:!1},style:{rules:[50,51,52,53,54,55,56,57,58,68,69,70],inclusive:!1},unqString:{rules:[68,69,70],inclusive:!1},token:{rules:[68,69,70],inclusive:!1},string:{rules:[65,66,68,69,70],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,59,60,61,62,63,64,67,68,69,70],inclusive:!0}}};return re}();be.lexer=W;function de(){this.yy={}}return o(de,"Parser"),de.prototype=be,be.Parser=de,new de}();EO.parser=EO;Zhe=EO});var A6,efe=N(()=>{"use strict";zt();vt();mi();A6=class{constructor(){this.relations=[];this.latestRequirement=this.getInitialRequirement();this.requirements=new Map;this.latestElement=this.getInitialElement();this.elements=new Map;this.classes=new Map;this.direction="TB";this.RequirementType={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"};this.RiskLevel={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"};this.VerifyType={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"};this.Relationships={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"};this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().requirement,"getConfig");this.clear(),this.setDirection=this.setDirection.bind(this),this.addRequirement=this.addRequirement.bind(this),this.setNewReqId=this.setNewReqId.bind(this),this.setNewReqRisk=this.setNewReqRisk.bind(this),this.setNewReqText=this.setNewReqText.bind(this),this.setNewReqVerifyMethod=this.setNewReqVerifyMethod.bind(this),this.addElement=this.addElement.bind(this),this.setNewElementType=this.setNewElementType.bind(this),this.setNewElementDocRef=this.setNewElementDocRef.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setCssStyle=this.setCssStyle.bind(this),this.setClass=this.setClass.bind(this),this.defineClass=this.defineClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"RequirementDB")}getDirection(){return this.direction}setDirection(e){this.direction=e}resetLatestRequirement(){this.latestRequirement=this.getInitialRequirement()}resetLatestElement(){this.latestElement=this.getInitialElement()}getInitialRequirement(){return{requirementId:"",text:"",risk:"",verifyMethod:"",name:"",type:"",cssStyles:[],classes:["default"]}}getInitialElement(){return{name:"",type:"",docRef:"",cssStyles:[],classes:["default"]}}addRequirement(e,r){return this.requirements.has(e)||this.requirements.set(e,{name:e,type:r,requirementId:this.latestRequirement.requirementId,text:this.latestRequirement.text,risk:this.latestRequirement.risk,verifyMethod:this.latestRequirement.verifyMethod,cssStyles:[],classes:["default"]}),this.resetLatestRequirement(),this.requirements.get(e)}getRequirements(){return this.requirements}setNewReqId(e){this.latestRequirement!==void 0&&(this.latestRequirement.requirementId=e)}setNewReqText(e){this.latestRequirement!==void 0&&(this.latestRequirement.text=e)}setNewReqRisk(e){this.latestRequirement!==void 0&&(this.latestRequirement.risk=e)}setNewReqVerifyMethod(e){this.latestRequirement!==void 0&&(this.latestRequirement.verifyMethod=e)}addElement(e){return this.elements.has(e)||(this.elements.set(e,{name:e,type:this.latestElement.type,docRef:this.latestElement.docRef,cssStyles:[],classes:["default"]}),Y.info("Added new element: ",e)),this.resetLatestElement(),this.elements.get(e)}getElements(){return this.elements}setNewElementType(e){this.latestElement!==void 0&&(this.latestElement.type=e)}setNewElementDocRef(e){this.latestElement!==void 0&&(this.latestElement.docRef=e)}addRelationship(e,r,n){this.relations.push({type:e,src:r,dst:n})}getRelationships(){return this.relations}clear(){this.relations=[],this.resetLatestRequirement(),this.requirements=new Map,this.resetLatestElement(),this.elements=new Map,this.classes=new Map,Ar()}setCssStyle(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(!r||!i)return;for(let a of r)a.includes(",")?i.cssStyles.push(...a.split(",")):i.cssStyles.push(a)}}setClass(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(i)for(let a of r){i.classes.push(a);let s=this.classes.get(a)?.styles;s&&i.cssStyles.push(...s)}}}defineClass(e,r){for(let n of e){let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.requirements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))}),this.elements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))})}}getClasses(){return this.classes}getData(){let e=me(),r=[],n=[];for(let i of this.requirements.values()){let a=i;a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),a.shape="requirementBox",a.look=e.look,r.push(a)}for(let i of this.elements.values()){let a=i;a.shape="requirementBox",a.look=e.look,a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),r.push(a)}for(let i of this.relations){let a=0,s=i.type===this.Relationships.CONTAINS,l={id:`${i.src}-${i.dst}-${a}`,start:this.requirements.get(i.src)?.name??this.elements.get(i.src)?.name,end:this.requirements.get(i.dst)?.name??this.elements.get(i.dst)?.name,label:`<<${i.type}>>`,classes:"relationshipLine",style:["fill:none",s?"":"stroke-dasharray: 10,7"],labelpos:"c",thickness:"normal",type:"normal",pattern:s?"normal":"dashed",arrowTypeStart:s?"requirement_contains":"",arrowTypeEnd:s?"":"requirement_arrow",look:e.look};n.push(l),a++}return{nodes:r,edges:n,other:{},config:e,direction:this.getDirection()}}}});var ZGe,tfe,rfe=N(()=>{"use strict";ZGe=o(t=>` | |
| 1186 | + | |
| 1187 | + marker { | |
| 1188 | + fill: ${t.relationColor}; | |
| 1189 | + stroke: ${t.relationColor}; | |
| 1190 | + } | |
| 1191 | + | |
| 1192 | + marker.cross { | |
| 1193 | + stroke: ${t.lineColor}; | |
| 1194 | + } | |
| 1195 | + | |
| 1196 | + svg { | |
| 1197 | + font-family: ${t.fontFamily}; | |
| 1198 | + font-size: ${t.fontSize}; | |
| 1199 | + } | |
| 1200 | + | |
| 1201 | + .reqBox { | |
| 1202 | + fill: ${t.requirementBackground}; | |
| 1203 | + fill-opacity: 1.0; | |
| 1204 | + stroke: ${t.requirementBorderColor}; | |
| 1205 | + stroke-width: ${t.requirementBorderSize}; | |
| 1206 | + } | |
| 1207 | + | |
| 1208 | + .reqTitle, .reqLabel{ | |
| 1209 | + fill: ${t.requirementTextColor}; | |
| 1210 | + } | |
| 1211 | + .reqLabelBox { | |
| 1212 | + fill: ${t.relationLabelBackground}; | |
| 1213 | + fill-opacity: 1.0; | |
| 1214 | + } | |
| 1215 | + | |
| 1216 | + .req-title-line { | |
| 1217 | + stroke: ${t.requirementBorderColor}; | |
| 1218 | + stroke-width: ${t.requirementBorderSize}; | |
| 1219 | + } | |
| 1220 | + .relationshipLine { | |
| 1221 | + stroke: ${t.relationColor}; | |
| 1222 | + stroke-width: 1; | |
| 1223 | + } | |
| 1224 | + .relationshipLabel { | |
| 1225 | + fill: ${t.relationLabelColor}; | |
| 1226 | + } | |
| 1227 | + .divider { | |
| 1228 | + stroke: ${t.nodeBorder}; | |
| 1229 | + stroke-width: 1; | |
| 1230 | + } | |
| 1231 | + .label { | |
| 1232 | + font-family: ${t.fontFamily}; | |
| 1233 | + color: ${t.nodeTextColor||t.textColor}; | |
| 1234 | + } | |
| 1235 | + .label text,span { | |
| 1236 | + fill: ${t.nodeTextColor||t.textColor}; | |
| 1237 | + color: ${t.nodeTextColor||t.textColor}; | |
| 1238 | + } | |
| 1239 | + .labelBkg { | |
| 1240 | + background-color: ${t.edgeLabelBackground}; | |
| 1241 | + } | |
| 1242 | + | |
| 1243 | +`,"getStyles"),tfe=ZGe});var SO={};hr(SO,{draw:()=>JGe});var JGe,nfe=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();JGe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing requirement diagram (unified)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.nodeSpacing=a?.nodeSpacing??50,l.rankSpacing=a?.rankSpacing??50,l.markers=["requirement_contains","requirement_arrow"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"requirementDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,"requirementDiagram",a?.useMaxWidth??!0)},"draw")});var ife={};hr(ife,{diagram:()=>eVe});var eVe,afe=N(()=>{"use strict";Jhe();efe();rfe();nfe();eVe={parser:Zhe,get db(){return new A6},renderer:SO,styles:tfe}});var CO,lfe,cfe=N(()=>{"use strict";CO=function(){var t=o(function(K,X,te,J){for(te=te||{},J=K.length;J--;te[K[J]]=X);return te},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,13],u=[1,14],h=[1,16],f=[1,17],d=[1,18],p=[1,24],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],w=[1,31],C=[1,32],T=[1,33],E=[1,34],A=[1,35],S=[1,36],_=[1,37],I=[1,38],D=[1,39],k=[1,41],L=[1,42],R=[1,43],O=[1,44],M=[1,45],B=[1,46],F=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],P=[4,5,16,50,52,53],z=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],H=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Q=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],j=[68,69,70],ie=[1,122],ne={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:o(function(X,te,J,se,ue,Z,Se){var ce=Z.length-1;switch(ue){case 3:return se.apply(Z[ce]),Z[ce];break;case 4:case 9:this.$=[];break;case 5:case 10:Z[ce-1].push(Z[ce]),this.$=Z[ce-1];break;case 6:case 7:case 11:case 12:this.$=Z[ce];break;case 8:case 13:this.$=[];break;case 15:Z[ce].type="createParticipant",this.$=Z[ce];break;case 16:Z[ce-1].unshift({type:"boxStart",boxData:se.parseBoxData(Z[ce-2])}),Z[ce-1].push({type:"boxEnd",boxText:Z[ce-2]}),this.$=Z[ce-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(Z[ce-2]),sequenceIndexStep:Number(Z[ce-1]),sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(Z[ce-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:se.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:se.LINETYPE.ACTIVE_START,actor:Z[ce-1].actor};break;case 23:this.$={type:"activeEnd",signalType:se.LINETYPE.ACTIVE_END,actor:Z[ce-1].actor};break;case 29:se.setDiagramTitle(Z[ce].substring(6)),this.$=Z[ce].substring(6);break;case 30:se.setDiagramTitle(Z[ce].substring(7)),this.$=Z[ce].substring(7);break;case 31:this.$=Z[ce].trim(),se.setAccTitle(this.$);break;case 32:case 33:this.$=Z[ce].trim(),se.setAccDescription(this.$);break;case 34:Z[ce-1].unshift({type:"loopStart",loopText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.LOOP_START}),Z[ce-1].push({type:"loopEnd",loopText:Z[ce-2],signalType:se.LINETYPE.LOOP_END}),this.$=Z[ce-1];break;case 35:Z[ce-1].unshift({type:"rectStart",color:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.RECT_START}),Z[ce-1].push({type:"rectEnd",color:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.RECT_END}),this.$=Z[ce-1];break;case 36:Z[ce-1].unshift({type:"optStart",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.OPT_START}),Z[ce-1].push({type:"optEnd",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.OPT_END}),this.$=Z[ce-1];break;case 37:Z[ce-1].unshift({type:"altStart",altText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.ALT_START}),Z[ce-1].push({type:"altEnd",signalType:se.LINETYPE.ALT_END}),this.$=Z[ce-1];break;case 38:Z[ce-1].unshift({type:"parStart",parText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.PAR_START}),Z[ce-1].push({type:"parEnd",signalType:se.LINETYPE.PAR_END}),this.$=Z[ce-1];break;case 39:Z[ce-1].unshift({type:"parStart",parText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.PAR_OVER_START}),Z[ce-1].push({type:"parEnd",signalType:se.LINETYPE.PAR_END}),this.$=Z[ce-1];break;case 40:Z[ce-1].unshift({type:"criticalStart",criticalText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.CRITICAL_START}),Z[ce-1].push({type:"criticalEnd",signalType:se.LINETYPE.CRITICAL_END}),this.$=Z[ce-1];break;case 41:Z[ce-1].unshift({type:"breakStart",breakText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.BREAK_START}),Z[ce-1].push({type:"breakEnd",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.BREAK_END}),this.$=Z[ce-1];break;case 43:this.$=Z[ce-3].concat([{type:"option",optionText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.CRITICAL_OPTION},Z[ce]]);break;case 45:this.$=Z[ce-3].concat([{type:"and",parText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.PAR_AND},Z[ce]]);break;case 47:this.$=Z[ce-3].concat([{type:"else",altText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.ALT_ELSE},Z[ce]]);break;case 48:Z[ce-3].draw="participant",Z[ce-3].type="addParticipant",Z[ce-3].description=se.parseMessage(Z[ce-1]),this.$=Z[ce-3];break;case 49:Z[ce-1].draw="participant",Z[ce-1].type="addParticipant",this.$=Z[ce-1];break;case 50:Z[ce-3].draw="actor",Z[ce-3].type="addParticipant",Z[ce-3].description=se.parseMessage(Z[ce-1]),this.$=Z[ce-3];break;case 51:Z[ce-1].draw="actor",Z[ce-1].type="addParticipant",this.$=Z[ce-1];break;case 52:Z[ce-1].type="destroyParticipant",this.$=Z[ce-1];break;case 53:this.$=[Z[ce-1],{type:"addNote",placement:Z[ce-2],actor:Z[ce-1].actor,text:Z[ce]}];break;case 54:Z[ce-2]=[].concat(Z[ce-1],Z[ce-1]).slice(0,2),Z[ce-2][0]=Z[ce-2][0].actor,Z[ce-2][1]=Z[ce-2][1].actor,this.$=[Z[ce-1],{type:"addNote",placement:se.PLACEMENT.OVER,actor:Z[ce-2].slice(0,2),text:Z[ce]}];break;case 55:this.$=[Z[ce-1],{type:"addLinks",actor:Z[ce-1].actor,text:Z[ce]}];break;case 56:this.$=[Z[ce-1],{type:"addALink",actor:Z[ce-1].actor,text:Z[ce]}];break;case 57:this.$=[Z[ce-1],{type:"addProperties",actor:Z[ce-1].actor,text:Z[ce]}];break;case 58:this.$=[Z[ce-1],{type:"addDetails",actor:Z[ce-1].actor,text:Z[ce]}];break;case 61:this.$=[Z[ce-2],Z[ce]];break;case 62:this.$=Z[ce];break;case 63:this.$=se.PLACEMENT.LEFTOF;break;case 64:this.$=se.PLACEMENT.RIGHTOF;break;case 65:this.$=[Z[ce-4],Z[ce-1],{type:"addMessage",from:Z[ce-4].actor,to:Z[ce-1].actor,signalType:Z[ce-3],msg:Z[ce],activate:!0},{type:"activeStart",signalType:se.LINETYPE.ACTIVE_START,actor:Z[ce-1].actor}];break;case 66:this.$=[Z[ce-4],Z[ce-1],{type:"addMessage",from:Z[ce-4].actor,to:Z[ce-1].actor,signalType:Z[ce-3],msg:Z[ce]},{type:"activeEnd",signalType:se.LINETYPE.ACTIVE_END,actor:Z[ce-4].actor}];break;case 67:this.$=[Z[ce-3],Z[ce-1],{type:"addMessage",from:Z[ce-3].actor,to:Z[ce-1].actor,signalType:Z[ce-2],msg:Z[ce]}];break;case 68:this.$={type:"addParticipant",actor:Z[ce]};break;case 69:this.$=se.LINETYPE.SOLID_OPEN;break;case 70:this.$=se.LINETYPE.DOTTED_OPEN;break;case 71:this.$=se.LINETYPE.SOLID;break;case 72:this.$=se.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=se.LINETYPE.DOTTED;break;case 74:this.$=se.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=se.LINETYPE.SOLID_CROSS;break;case 76:this.$=se.LINETYPE.DOTTED_CROSS;break;case 77:this.$=se.LINETYPE.SOLID_POINT;break;case 78:this.$=se.LINETYPE.DOTTED_POINT;break;case 79:this.$=se.parseMessage(Z[ce].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},t(F,[2,5]),{9:47,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},t(F,[2,7]),t(F,[2,8]),t(F,[2,14]),{12:48,50:_,52:I,53:D},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:B},{22:55,70:B},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(F,[2,29]),t(F,[2,30]),{32:[1,61]},{34:[1,62]},t(F,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:B},{22:72,70:B},{22:73,70:B},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:B},{22:90,70:B},{22:91,70:B},{22:92,70:B},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(F,[2,6]),t(F,[2,15]),t(P,[2,9],{10:93}),t(F,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(F,[2,21]),{5:[1,97]},{5:[1,98]},t(F,[2,24]),t(F,[2,25]),t(F,[2,26]),t(F,[2,27]),t(F,[2,28]),t(F,[2,31]),t(F,[2,32]),t(z,i,{7:99}),t(z,i,{7:100}),t(z,i,{7:101}),t($,i,{40:102,7:103}),t(H,i,{42:104,7:105}),t(H,i,{7:105,42:106}),t(Q,i,{45:107,7:108}),t(z,i,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:B},t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(j,[2,74]),t(j,[2,75]),t(j,[2,76]),t(j,[2,77]),t(j,[2,78]),{22:118,70:B},{22:120,58:119,70:B},{70:[2,63]},{70:[2,64]},{56:121,81:ie},{56:123,81:ie},{56:124,81:ie},{56:125,81:ie},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:_,52:I,53:D},{5:[1,131]},t(F,[2,19]),t(F,[2,20]),t(F,[2,22]),t(F,[2,23]),{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,132],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,133],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,134],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,135]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,46],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,49:[1,136],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,137]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,44],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,48:[1,138],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,139]},{16:[1,140]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,42],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,47:[1,141],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,142],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{15:[1,143]},t(F,[2,49]),{15:[1,144]},t(F,[2,51]),t(F,[2,52]),{22:145,70:B},{22:146,70:B},{56:147,81:ie},{56:148,81:ie},{56:149,81:ie},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(F,[2,16]),t(P,[2,10]),{12:151,50:_,52:I,53:D},t(P,[2,12]),t(P,[2,13]),t(F,[2,18]),t(F,[2,34]),t(F,[2,35]),t(F,[2,36]),t(F,[2,37]),{15:[1,152]},t(F,[2,38]),{15:[1,153]},t(F,[2,39]),t(F,[2,40]),{15:[1,154]},t(F,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:ie},{56:158,81:ie},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:B},t(P,[2,11]),t($,i,{7:103,40:160}),t(H,i,{7:105,42:161}),t(Q,i,{7:108,45:162}),t(F,[2,48]),t(F,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:o(function(X,te){if(te.recoverable)this.trace(X);else{var J=new Error(X);throw J.hash=te,J}},"parseError"),parse:o(function(X){var te=this,J=[0],se=[],ue=[null],Z=[],Se=this.table,ce="",ae=0,Oe=0,ge=0,ze=2,He=1,$e=Z.slice.call(arguments,1),Re=Object.create(this.lexer),Ie={yy:{}};for(var be in this.yy)Object.prototype.hasOwnProperty.call(this.yy,be)&&(Ie.yy[be]=this.yy[be]);Re.setInput(X,Ie.yy),Ie.yy.lexer=Re,Ie.yy.parser=this,typeof Re.yylloc>"u"&&(Re.yylloc={});var W=Re.yylloc;Z.push(W);var de=Re.options&&Re.options.ranges;typeof Ie.yy.parseError=="function"?this.parseError=Ie.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function re(Rt){J.length=J.length-2*Rt,ue.length=ue.length-Rt,Z.length=Z.length-Rt}o(re,"popStack");function oe(){var Rt;return Rt=se.pop()||Re.lex()||He,typeof Rt!="number"&&(Rt instanceof Array&&(se=Rt,Rt=se.pop()),Rt=te.symbols_[Rt]||Rt),Rt}o(oe,"lex");for(var V,xe,q,pe,ve,Pe,_e={},we,Ve,De,qe;;){if(q=J[J.length-1],this.defaultActions[q]?pe=this.defaultActions[q]:((V===null||typeof V>"u")&&(V=oe()),pe=Se[q]&&Se[q][V]),typeof pe>"u"||!pe.length||!pe[0]){var at="";qe=[];for(we in Se[q])this.terminals_[we]&&we>ze&&qe.push("'"+this.terminals_[we]+"'");Re.showPosition?at="Parse error on line "+(ae+1)+`: | |
| 1244 | +`+Re.showPosition()+` | |
| 1245 | +Expecting `+qe.join(", ")+", got '"+(this.terminals_[V]||V)+"'":at="Parse error on line "+(ae+1)+": Unexpected "+(V==He?"end of input":"'"+(this.terminals_[V]||V)+"'"),this.parseError(at,{text:Re.match,token:this.terminals_[V]||V,line:Re.yylineno,loc:W,expected:qe})}if(pe[0]instanceof Array&&pe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+q+", token: "+V);switch(pe[0]){case 1:J.push(V),ue.push(Re.yytext),Z.push(Re.yylloc),J.push(pe[1]),V=null,xe?(V=xe,xe=null):(Oe=Re.yyleng,ce=Re.yytext,ae=Re.yylineno,W=Re.yylloc,ge>0&&ge--);break;case 2:if(Ve=this.productions_[pe[1]][1],_e.$=ue[ue.length-Ve],_e._$={first_line:Z[Z.length-(Ve||1)].first_line,last_line:Z[Z.length-1].last_line,first_column:Z[Z.length-(Ve||1)].first_column,last_column:Z[Z.length-1].last_column},de&&(_e._$.range=[Z[Z.length-(Ve||1)].range[0],Z[Z.length-1].range[1]]),Pe=this.performAction.apply(_e,[ce,Oe,ae,Ie.yy,pe[1],ue,Z].concat($e)),typeof Pe<"u")return Pe;Ve&&(J=J.slice(0,-1*Ve*2),ue=ue.slice(0,-1*Ve),Z=Z.slice(0,-1*Ve)),J.push(this.productions_[pe[1]][0]),ue.push(_e.$),Z.push(_e._$),De=Se[J[J.length-2]][J[J.length-1]],J.push(De);break;case 3:return!0}}return!0},"parse")},le=function(){var K={EOF:1,parseError:o(function(te,J){if(this.yy.parser)this.yy.parser.parseError(te,J);else throw new Error(te)},"parseError"),setInput:o(function(X,te){return this.yy=te||this.yy||{},this._input=X,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var X=this._input[0];this.yytext+=X,this.yyleng++,this.offset++,this.match+=X,this.matched+=X;var te=X.match(/(?:\r\n?|\n).*/g);return te?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),X},"input"),unput:o(function(X){var te=X.length,J=X.split(/(?:\r\n?|\n)/g);this._input=X+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-te),this.offset-=te;var se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),J.length-1&&(this.yylineno-=J.length-1);var ue=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:J?(J.length===se.length?this.yylloc.first_column:0)+se[se.length-J.length].length-J[0].length:this.yylloc.first_column-te},this.options.ranges&&(this.yylloc.range=[ue[0],ue[0]+this.yyleng-te]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1246 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(X){this.unput(this.match.slice(X))},"less"),pastInput:o(function(){var X=this.matched.substr(0,this.matched.length-this.match.length);return(X.length>20?"...":"")+X.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var X=this.match;return X.length<20&&(X+=this._input.substr(0,20-X.length)),(X.substr(0,20)+(X.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var X=this.pastInput(),te=new Array(X.length+1).join("-");return X+this.upcomingInput()+` | |
| 1247 | +`+te+"^"},"showPosition"),test_match:o(function(X,te){var J,se,ue;if(this.options.backtrack_lexer&&(ue={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ue.yylloc.range=this.yylloc.range.slice(0))),se=X[0].match(/(?:\r\n?|\n).*/g),se&&(this.yylineno+=se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:se?se[se.length-1].length-se[se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+X[0].length},this.yytext+=X[0],this.match+=X[0],this.matches=X,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(X[0].length),this.matched+=X[0],J=this.performAction.call(this,this.yy,this,te,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),J)return J;if(this._backtrack){for(var Z in ue)this[Z]=ue[Z];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var X,te,J,se;this._more||(this.yytext="",this.match="");for(var ue=this._currentRules(),Z=0;Z<ue.length;Z++)if(J=this._input.match(this.rules[ue[Z]]),J&&(!te||J[0].length>te[0].length)){if(te=J,se=Z,this.options.backtrack_lexer){if(X=this.test_match(J,ue[Z]),X!==!1)return X;if(this._backtrack){te=!1;continue}else return!1}else if(!this.options.flex)break}return te?(X=this.test_match(te,ue[se]),X!==!1?X:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1248 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var te=this.next();return te||this.lex()},"lex"),begin:o(function(te){this.conditionStack.push(te)},"begin"),popState:o(function(){var te=this.conditionStack.length-1;return te>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(te){return te=this.conditionStack.length-1-Math.abs(te||0),te>=0?this.conditionStack[te]:"INITIAL"},"topState"),pushState:o(function(te){this.begin(te)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(te,J,se,ue){var Z=ue;switch(se){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;break;case 8:return this.begin("ID"),50;break;case 9:return this.begin("ID"),52;break;case 10:return 13;case 11:return this.begin("ID"),53;break;case 12:return J.yytext=J.yytext.trim(),this.begin("ALIAS"),70;break;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;break;case 14:return this.popState(),this.popState(),5;break;case 15:return this.begin("LINE"),36;break;case 16:return this.begin("LINE"),37;break;case 17:return this.begin("LINE"),38;break;case 18:return this.begin("LINE"),39;break;case 19:return this.begin("LINE"),49;break;case 20:return this.begin("LINE"),41;break;case 21:return this.begin("LINE"),43;break;case 22:return this.begin("LINE"),48;break;case 23:return this.begin("LINE"),44;break;case 24:return this.begin("LINE"),47;break;case 25:return this.begin("LINE"),46;break;case 26:return this.popState(),15;break;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;break;case 37:return this.begin("ID"),23;break;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;break;case 41:return this.popState(),"acc_title_value";break;case 42:return this.begin("acc_descr"),33;break;case 43:return this.popState(),"acc_descr_value";break;case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return J.yytext=J.yytext.trim(),70;break;case 53:return 73;case 54:return 74;case 55:return 75;case 56:return 76;case 57:return 71;case 58:return 72;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 80;case 63:return 81;case 64:return 68;case 65:return 69;case 66:return 5;case 67:return"INVALID"}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\<->\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\<->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};return K}();ne.lexer=le;function he(){this.yy={}}return o(he,"Parser"),he.prototype=ne,ne.Parser=he,new he}();CO.parser=CO;lfe=CO});var iVe,aVe,sVe,_6,ufe=N(()=>{"use strict";zt();vt();s6();gr();mi();iVe={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},aVe={FILLED:0,OPEN:1},sVe={LEFTOF:0,RIGHTOF:1,OVER:2},_6=class{constructor(){this.state=new pf(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}));this.setAccTitle=Lr;this.setAccDescription=Nr;this.setDiagramTitle=$r;this.getAccTitle=Rr;this.getAccDescription=Mr;this.getDiagramTitle=Ir;this.apply=this.apply.bind(this),this.parseBoxData=this.parseBoxData.bind(this),this.parseMessage=this.parseMessage.bind(this),this.clear(),this.setWrap(me().wrap),this.LINETYPE=iVe,this.ARROWTYPE=aVe,this.PLACEMENT=sVe}static{o(this,"SequenceDB")}addBox(e){this.state.records.boxes.push({name:e.text,wrap:e.wrap??this.autoWrap(),fill:e.color,actorKeys:[]}),this.state.records.currentBox=this.state.records.boxes.slice(-1)[0]}addActor(e,r,n,i){let a=this.state.records.currentBox,s=this.state.records.actors.get(e);if(s){if(this.state.records.currentBox&&s.box&&this.state.records.currentBox!==s.box)throw new Error(`A same participant should only be defined in one Box: ${s.name} can't be in '${s.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`);if(a=s.box?s.box:this.state.records.currentBox,s.box=a,s&&r===s.name&&n==null)return}if(n?.text==null&&(n={text:r,type:i}),(i==null||n.text==null)&&(n={text:r,type:i}),this.state.records.actors.set(e,{box:a,name:r,description:n.text,wrap:n.wrap??this.autoWrap(),prevActor:this.state.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:i??"participant"}),this.state.records.prevActor){let l=this.state.records.actors.get(this.state.records.prevActor);l&&(l.nextActor=e)}this.state.records.currentBox&&this.state.records.currentBox.actorKeys.push(e),this.state.records.prevActor=e}activationCount(e){let r,n=0;if(!e)return 0;for(r=0;r<this.state.records.messages.length;r++)this.state.records.messages[r].type===this.LINETYPE.ACTIVE_START&&this.state.records.messages[r].from===e&&n++,this.state.records.messages[r].type===this.LINETYPE.ACTIVE_END&&this.state.records.messages[r].from===e&&n--;return n}addMessage(e,r,n,i){this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:n.text,wrap:n.wrap??this.autoWrap(),answer:i})}addSignal(e,r,n,i,a=!1){if(i===this.LINETYPE.ACTIVE_END&&this.activationCount(e??"")<1){let l=new Error("Trying to inactivate an inactive participant ("+e+")");throw l.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},l}return this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:n?.text??"",wrap:n?.wrap??this.autoWrap(),type:i,activate:a}),!0}hasAtLeastOneBox(){return this.state.records.boxes.length>0}hasAtLeastOneBoxWithTitle(){return this.state.records.boxes.some(e=>e.name)}getMessages(){return this.state.records.messages}getBoxes(){return this.state.records.boxes}getActors(){return this.state.records.actors}getCreatedActors(){return this.state.records.createdActors}getDestroyedActors(){return this.state.records.destroyedActors}getActor(e){return this.state.records.actors.get(e)}getActorKeys(){return[...this.state.records.actors.keys()]}enableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!0}disableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!1}showSequenceNumbers(){return this.state.records.sequenceNumbersEnabled}setWrap(e){this.state.records.wrapEnabled=e}extractWrap(e){if(e===void 0)return{};e=e.trim();let r=/^:?wrap:/.exec(e)!==null?!0:/^:?nowrap:/.exec(e)!==null?!1:void 0;return{cleanedText:(r===void 0?e:e.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:r}}autoWrap(){return this.state.records.wrapEnabled!==void 0?this.state.records.wrapEnabled:me().sequence?.wrap??!1}clear(){this.state.reset(),Ar()}parseMessage(e){let r=e.trim(),{wrap:n,cleanedText:i}=this.extractWrap(r),a={text:i,wrap:n};return Y.debug(`parseMessage: ${JSON.stringify(a)}`),a}parseBoxData(e){let r=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(e),n=r?.[1]?r[1].trim():"transparent",i=r?.[2]?r[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",n)||(n="transparent",i=e.trim());else{let l=new Option().style;l.color=n,l.color!==n&&(n="transparent",i=e.trim())}let{wrap:a,cleanedText:s}=this.extractWrap(i);return{text:s?Tr(s,me()):void 0,color:n,wrap:a}}addNote(e,r,n){let i={actor:e,placement:r,message:n.text,wrap:n.wrap??this.autoWrap()},a=[].concat(e,e);this.state.records.notes.push(i),this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:a[0],to:a[1],message:n.text,wrap:n.wrap??this.autoWrap(),type:this.LINETYPE.NOTE,placement:r})}addLinks(e,r){let n=this.getActor(e);try{let i=Tr(r.text,me());i=i.replace(/=/g,"="),i=i.replace(/&/g,"&");let a=JSON.parse(i);this.insertLinks(n,a)}catch(i){Y.error("error while parsing actor link text",i)}}addALink(e,r){let n=this.getActor(e);try{let i={},a=Tr(r.text,me()),s=a.indexOf("@");a=a.replace(/=/g,"="),a=a.replace(/&/g,"&");let l=a.slice(0,s-1).trim(),u=a.slice(s+1).trim();i[l]=u,this.insertLinks(n,i)}catch(i){Y.error("error while parsing actor link text",i)}}insertLinks(e,r){if(e.links==null)e.links=r;else for(let n in r)e.links[n]=r[n]}addProperties(e,r){let n=this.getActor(e);try{let i=Tr(r.text,me()),a=JSON.parse(i);this.insertProperties(n,a)}catch(i){Y.error("error while parsing actor properties text",i)}}insertProperties(e,r){if(e.properties==null)e.properties=r;else for(let n in r)e.properties[n]=r[n]}boxEnd(){this.state.records.currentBox=void 0}addDetails(e,r){let n=this.getActor(e),i=document.getElementById(r.text);try{let a=i.innerHTML,s=JSON.parse(a);s.properties&&this.insertProperties(n,s.properties),s.links&&this.insertLinks(n,s.links)}catch(a){Y.error("error while parsing actor details text",a)}}getActorProperty(e,r){if(e?.properties!==void 0)return e.properties[r]}apply(e){if(Array.isArray(e))e.forEach(r=>{this.apply(r)});else switch(e.type){case"sequenceIndex":this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:void 0,to:void 0,message:{start:e.sequenceIndex,step:e.sequenceIndexStep,visible:e.sequenceVisible},wrap:!1,type:e.signalType});break;case"addParticipant":this.addActor(e.actor,e.actor,e.description,e.draw);break;case"createParticipant":if(this.state.records.actors.has(e.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");this.state.records.lastCreated=e.actor,this.addActor(e.actor,e.actor,e.description,e.draw),this.state.records.createdActors.set(e.actor,this.state.records.messages.length);break;case"destroyParticipant":this.state.records.lastDestroyed=e.actor,this.state.records.destroyedActors.set(e.actor,this.state.records.messages.length);break;case"activeStart":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"activeEnd":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"addNote":this.addNote(e.actor,e.placement,e.text);break;case"addLinks":this.addLinks(e.actor,e.text);break;case"addALink":this.addALink(e.actor,e.text);break;case"addProperties":this.addProperties(e.actor,e.text);break;case"addDetails":this.addDetails(e.actor,e.text);break;case"addMessage":if(this.state.records.lastCreated){if(e.to!==this.state.records.lastCreated)throw new Error("The created participant "+this.state.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");this.state.records.lastCreated=void 0}else if(this.state.records.lastDestroyed){if(e.to!==this.state.records.lastDestroyed&&e.from!==this.state.records.lastDestroyed)throw new Error("The destroyed participant "+this.state.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");this.state.records.lastDestroyed=void 0}this.addSignal(e.from,e.to,e.msg,e.signalType,e.activate);break;case"boxStart":this.addBox(e.boxData);break;case"boxEnd":this.boxEnd();break;case"loopStart":this.addSignal(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"rectStart":this.addSignal(void 0,void 0,e.color,e.signalType);break;case"rectEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"optStart":this.addSignal(void 0,void 0,e.optText,e.signalType);break;case"optEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"altStart":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"else":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"altEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"setAccTitle":Lr(e.text);break;case"parStart":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"and":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"parEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"criticalStart":this.addSignal(void 0,void 0,e.criticalText,e.signalType);break;case"option":this.addSignal(void 0,void 0,e.optionText,e.signalType);break;case"criticalEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"breakStart":this.addSignal(void 0,void 0,e.breakText,e.signalType);break;case"breakEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break}}getConfig(){return me().sequence}}});var oVe,hfe,ffe=N(()=>{"use strict";oVe=o(t=>`.actor { | |
| 1249 | + stroke: ${t.actorBorder}; | |
| 1250 | + fill: ${t.actorBkg}; | |
| 1251 | + } | |
| 1252 | + | |
| 1253 | + text.actor > tspan { | |
| 1254 | + fill: ${t.actorTextColor}; | |
| 1255 | + stroke: none; | |
| 1256 | + } | |
| 1257 | + | |
| 1258 | + .actor-line { | |
| 1259 | + stroke: ${t.actorLineColor}; | |
| 1260 | + } | |
| 1261 | + | |
| 1262 | + .messageLine0 { | |
| 1263 | + stroke-width: 1.5; | |
| 1264 | + stroke-dasharray: none; | |
| 1265 | + stroke: ${t.signalColor}; | |
| 1266 | + } | |
| 1267 | + | |
| 1268 | + .messageLine1 { | |
| 1269 | + stroke-width: 1.5; | |
| 1270 | + stroke-dasharray: 2, 2; | |
| 1271 | + stroke: ${t.signalColor}; | |
| 1272 | + } | |
| 1273 | + | |
| 1274 | + #arrowhead path { | |
| 1275 | + fill: ${t.signalColor}; | |
| 1276 | + stroke: ${t.signalColor}; | |
| 1277 | + } | |
| 1278 | + | |
| 1279 | + .sequenceNumber { | |
| 1280 | + fill: ${t.sequenceNumberColor}; | |
| 1281 | + } | |
| 1282 | + | |
| 1283 | + #sequencenumber { | |
| 1284 | + fill: ${t.signalColor}; | |
| 1285 | + } | |
| 1286 | + | |
| 1287 | + #crosshead path { | |
| 1288 | + fill: ${t.signalColor}; | |
| 1289 | + stroke: ${t.signalColor}; | |
| 1290 | + } | |
| 1291 | + | |
| 1292 | + .messageText { | |
| 1293 | + fill: ${t.signalTextColor}; | |
| 1294 | + stroke: none; | |
| 1295 | + } | |
| 1296 | + | |
| 1297 | + .labelBox { | |
| 1298 | + stroke: ${t.labelBoxBorderColor}; | |
| 1299 | + fill: ${t.labelBoxBkgColor}; | |
| 1300 | + } | |
| 1301 | + | |
| 1302 | + .labelText, .labelText > tspan { | |
| 1303 | + fill: ${t.labelTextColor}; | |
| 1304 | + stroke: none; | |
| 1305 | + } | |
| 1306 | + | |
| 1307 | + .loopText, .loopText > tspan { | |
| 1308 | + fill: ${t.loopTextColor}; | |
| 1309 | + stroke: none; | |
| 1310 | + } | |
| 1311 | + | |
| 1312 | + .loopLine { | |
| 1313 | + stroke-width: 2px; | |
| 1314 | + stroke-dasharray: 2, 2; | |
| 1315 | + stroke: ${t.labelBoxBorderColor}; | |
| 1316 | + fill: ${t.labelBoxBorderColor}; | |
| 1317 | + } | |
| 1318 | + | |
| 1319 | + .note { | |
| 1320 | + //stroke: #decc93; | |
| 1321 | + stroke: ${t.noteBorderColor}; | |
| 1322 | + fill: ${t.noteBkgColor}; | |
| 1323 | + } | |
| 1324 | + | |
| 1325 | + .noteText, .noteText > tspan { | |
| 1326 | + fill: ${t.noteTextColor}; | |
| 1327 | + stroke: none; | |
| 1328 | + } | |
| 1329 | + | |
| 1330 | + .activation0 { | |
| 1331 | + fill: ${t.activationBkgColor}; | |
| 1332 | + stroke: ${t.activationBorderColor}; | |
| 1333 | + } | |
| 1334 | + | |
| 1335 | + .activation1 { | |
| 1336 | + fill: ${t.activationBkgColor}; | |
| 1337 | + stroke: ${t.activationBorderColor}; | |
| 1338 | + } | |
| 1339 | + | |
| 1340 | + .activation2 { | |
| 1341 | + fill: ${t.activationBkgColor}; | |
| 1342 | + stroke: ${t.activationBorderColor}; | |
| 1343 | + } | |
| 1344 | + | |
| 1345 | + .actorPopupMenu { | |
| 1346 | + position: absolute; | |
| 1347 | + } | |
| 1348 | + | |
| 1349 | + .actorPopupMenuPanel { | |
| 1350 | + position: absolute; | |
| 1351 | + fill: ${t.actorBkg}; | |
| 1352 | + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); | |
| 1353 | + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); | |
| 1354 | +} | |
| 1355 | + .actor-man line { | |
| 1356 | + stroke: ${t.actorBorder}; | |
| 1357 | + fill: ${t.actorBkg}; | |
| 1358 | + } | |
| 1359 | + .actor-man circle, line { | |
| 1360 | + stroke: ${t.actorBorder}; | |
| 1361 | + fill: ${t.actorBkg}; | |
| 1362 | + stroke-width: 2px; | |
| 1363 | + } | |
| 1364 | +`,"getStyles"),hfe=oVe});var AO,vf,pfe,mfe,lVe,dfe,_O,cVe,uVe,Tb,_p,gfe,Uc,DO,hVe,fVe,dVe,pVe,mVe,gVe,yVe,yfe,vVe,xVe,bVe,wVe,TVe,kVe,EVe,vfe,SVe,LO,CVe,hi,xfe=N(()=>{"use strict";gr();Wv();ir();AO=Sa(z0(),1);ji();vf=18*2,pfe="actor-top",mfe="actor-bottom",lVe="actor-box",dfe="actor-man",_O=o(function(t,e){return kd(t,e)},"drawRect"),cVe=o(function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";i&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,AO.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),CVe(n)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},n),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),uVe=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),Tb=o(async function(t,e,r=null){let n=t.append("foreignObject"),i=await mh(e.text,cr()),s=n.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(n.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();n.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}n.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?n.attr("y",Math.round(h)):n.attr("y",Math.round(h-s.height))}return[n]},"drawKatex"),_p=o(function(t,e){let r=0,n=0,i=e.text.split(Ze.lineBreakRegex),[a,s]=Bo(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+n+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of i.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||H9;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(n+=(p._groups||p)[0][0].getBBox().height,r=n),l.push(p)}return l},"drawText"),gfe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,_p(t,e),n},"drawLabel"),Uc=-1,DO=o((t,e,r,n)=>{t.select&&r.forEach(i=>{let a=e.get(i),s=t.select("#actor"+a.actorCnt);!n.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):n.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),hVe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower();var u=l;n||(Uc++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",uVe(`actor${Uc}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Uc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Uc,e.links!=null&&u.attr("id","root-"+Uc));let h=Tl();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${mfe}`:f+=` ${pfe}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.rx=3,h.ry=3,h.name=e.name;let d=_O(u,h);if(e.rectData=h,e.properties?.icon){let m=e.properties.icon.trim();m.charAt(0)==="@"?Iq(u,h.x+h.width-20,h.y+10,m.substr(1)):Mq(u,h.x+h.width-20,h.y+10,m)}LO(r,pi(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${lVe}`},r);let p=e.height;if(d.node){let m=d.node().getBBox();e.height=m.height,p=m.height}return p},"drawActorTypeParticipant"),fVe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=t.append("g").lower();n||(Uc++,l.append("line").attr("id","actor"+Uc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Uc);let u=t.append("g"),h=dfe;n?h+=` ${mfe}`:h+=` ${pfe}`,u.attr("class",h),u.attr("name",e.name);let f=Tl();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,u.append("line").attr("id","actor-man-torso"+Uc).attr("x1",a).attr("y1",i+25).attr("x2",a).attr("y2",i+45),u.append("line").attr("id","actor-man-arms"+Uc).attr("x1",a-vf/2).attr("y1",i+33).attr("x2",a+vf/2).attr("y2",i+33),u.append("line").attr("x1",a-vf/2).attr("y1",i+60).attr("x2",a).attr("y2",i+45),u.append("line").attr("x1",a).attr("y1",i+45).attr("x2",a+vf/2-2).attr("y2",i+60);let d=u.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",i+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);let p=u.node().getBBox();return e.height=p.height,LO(r,pi(e.description))(e.description,u,f.x,f.y+35,f.width,f.height,{class:`actor ${dfe}`},r),e.height},"drawActorTypeActor"),dVe=o(async function(t,e,r,n){switch(e.type){case"actor":return await fVe(t,e,r,n);case"participant":return await hVe(t,e,r,n)}},"drawActor"),pVe=o(function(t,e,r){let i=t.append("g");yfe(i,e),e.name&&LO(r)(e.name,i,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),i.lower()},"drawBox"),mVe=o(function(t){return t.append("g")},"anchorElement"),gVe=o(function(t,e,r,n,i){let a=Tl(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,_O(s,a)},"drawActivation"),yVe=o(async function(t,e,r,n){let{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:l,messageFontFamily:u,messageFontSize:h,messageFontWeight:f}=n,d=t.append("g"),p=o(function(y,v,x,b){return d.append("line").attr("x1",y).attr("y1",v).attr("x2",x).attr("y2",b).attr("class","loopLine")},"drawLoopLine");p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(y){p(e.startx,y.y,e.stopx,y.y).style("stroke-dasharray","3, 3")});let m=Hv();m.text=r,m.x=e.startx,m.y=e.starty,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=l||50,m.height=s||20,m.textMargin=a,m.class="labelText",gfe(d,m),m=vfe(),m.text=e.title,m.x=e.startx+l/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=!0;let g=pi(m.text)?await Tb(d,m,e):_p(d,m);if(e.sectionTitles!==void 0){for(let[y,v]of Object.entries(e.sectionTitles))if(v.message){m.text=v.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[y].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=e.wrap,pi(m.text)?(e.starty=e.sections[y].y,await Tb(d,m,e)):_p(d,m);let x=Math.round(g.map(b=>(b._groups||b)[0][0].getBBox().height).reduce((b,w)=>b+w));e.sections[y].height+=x-(i+a)}}return e.height=Math.round(e.stopy-e.starty),d},"drawLoop"),yfe=o(function(t,e){q5(t,e)},"drawBackgroundRect"),vVe=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),xVe=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),bVe=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),wVe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),TVe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),kVe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),EVe=o(function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),vfe=o(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),SVe=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),LO=function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);i(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=Bo(m),b=a.split(Ze.lineBreakRegex);for(let w=0;w<b.length;w++){let C=w*v-v*(b.length-1)/2,T=s.append("text").attr("x",l+h/2).attr("y",u).style("text-anchor","middle").style("font-size",x).style("font-weight",y).style("font-family",g);T.append("tspan").attr("x",l+h/2).attr("dy",C).text(b[w]),T.attr("y",u+f/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(T,d)}}o(e,"byTspan");function r(a,s,l,u,h,f,d,p){let m=s.append("switch"),y=m.append("foreignObject").attr("x",l).attr("y",u).attr("width",h).attr("height",f).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");y.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(a),e(a,m,l,u,h,f,d,p),i(y,d)}o(r,"byFo");async function n(a,s,l,u,h,f,d,p){let m=await id(a,cr()),g=s.append("switch"),v=g.append("foreignObject").attr("x",l+h/2-m.width/2).attr("y",u+f/2-m.height/2).attr("width",m.width).attr("height",m.height).append("xhtml:div").style("height","100%").style("width","100%");v.append("div").style("text-align","center").style("vertical-align","middle").html(await mh(a,cr())),e(a,g,l,u,h,f,d,p),i(v,d)}o(n,"byKatex");function i(a,s){for(let l in s)s.hasOwnProperty(l)&&a.attr(l,s[l])}return o(i,"_setTextAttrs"),function(a,s=!1){return s?n:a.textPlacement==="fo"?r:a.textPlacement==="old"?t:e}}(),CVe=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s).attr("y",l).style("text-anchor","start").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{actorFontSize:p,actorFontFamily:m,actorFontWeight:g}=d,y=i.split(Ze.lineBreakRegex);for(let v=0;v<y.length;v++){let x=v*p-p*(y.length-1)/2,b=a.append("text").attr("x",s).attr("y",l).style("text-anchor","start").style("font-size",p).style("font-weight",g).style("font-family",m);b.append("tspan").attr("x",s).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)a.hasOwnProperty(s)&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),hi={drawRect:_O,drawText:_p,drawLabel:gfe,drawActor:dVe,drawBox:pVe,drawPopup:cVe,anchorElement:mVe,drawActivation:gVe,drawLoop:yVe,drawBackgroundRect:yfe,insertArrowHead:wVe,insertArrowFilledHead:TVe,insertSequenceNumber:kVe,insertArrowCrossHead:EVe,insertDatabaseIcon:vVe,insertComputerIcon:xVe,insertClockIcon:bVe,getTextObj:vfe,getNoteRect:SVe,fixLifeLineHeights:DO,sanitizeUrl:AO.sanitizeUrl}});async function _Ve(t,e){rt.bumpVerticalPos(10);let{startx:r,stopx:n,message:i}=e,a=Ze.splitBreaks(i).length,s=pi(i),l=s?await id(i,me()):Gt.calculateTextDimensions(i,Dp(Ne));if(!s){let d=l.height/a;e.height+=d,rt.bumpVerticalPos(d)}let u,h=l.height-10,f=l.width;if(r===n){u=rt.getVerticalPos()+h,Ne.rightAngles||(h+=Ne.boxMargin,u=rt.getVerticalPos()+h),h+=30;let d=Ze.getMax(f/2,Ne.width/2);rt.insert(r-d,rt.getVerticalPos()-10+h,n+d,rt.getVerticalPos()+30+h)}else h+=Ne.boxMargin,u=rt.getVerticalPos()+h,rt.insert(r,u-10,n,u);return rt.bumpVerticalPos(h),e.height+=h,e.stopy=e.starty+e.height,rt.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),u}function Hc(t,e,r,n,i){rt.bumpVerticalPos(r);let a=n;if(e.id&&e.message&&t[e.id]){let s=t[e.id].width,l=Dp(Ne);e.message=Gt.wrapLabel(`[${e.message}]`,s-2*Ne.wrapPadding,l),e.width=s,e.wrap=!0;let u=Gt.calculateTextDimensions(e.message,l),h=Ze.getMax(u.height,Ne.labelBoxHeight);a=n+h,Y.debug(`${h} - ${e.message}`)}i(e),rt.bumpVerticalPos(a)}function RVe(t,e,r,n,i,a,s){function l(h,f){h.x<i.get(t.from).x?(rt.insert(e.stopx-f,e.starty,e.startx,e.stopy+h.height/2+Ne.noteMargin),e.stopx=e.stopx+f):(rt.insert(e.startx,e.starty,e.stopx+f,e.stopy+h.height/2+Ne.noteMargin),e.stopx=e.stopx-f)}o(l,"receiverAdjustment");function u(h,f){h.x<i.get(t.to).x?(rt.insert(e.startx-f,e.starty,e.stopx,e.stopy+h.height/2+Ne.noteMargin),e.startx=e.startx+f):(rt.insert(e.stopx,e.starty,e.startx+f,e.stopy+h.height/2+Ne.noteMargin),e.startx=e.startx-f)}if(o(u,"senderAdjustment"),a.get(t.to)==n){let h=i.get(t.to),f=h.type=="actor"?vf/2+3:h.width/2+3;l(h,f),h.starty=r-h.height/2,rt.bumpVerticalPos(h.height/2)}else if(s.get(t.from)==n){let h=i.get(t.from);if(Ne.mirrorActors){let f=h.type=="actor"?vf/2:h.width/2;u(h,f)}h.stopy=r-h.height/2,rt.bumpVerticalPos(h.height/2)}else if(s.get(t.to)==n){let h=i.get(t.to);if(Ne.mirrorActors){let f=h.type=="actor"?vf/2+3:h.width/2+3;l(h,f)}h.stopy=r-h.height/2,rt.bumpVerticalPos(h.height/2)}}async function MVe(t,e,r){let n={};for(let i of e)if(t.get(i.to)&&t.get(i.from)){let a=t.get(i.to);if(i.placement===r.db.PLACEMENT.LEFTOF&&!a.prevActor||i.placement===r.db.PLACEMENT.RIGHTOF&&!a.nextActor)continue;let s=i.placement!==void 0,l=!s,u=s?_1(Ne):Dp(Ne),h=i.wrap?Gt.wrapLabel(i.message,Ne.width-2*Ne.wrapPadding,u):i.message,d=(pi(h)?await id(i.message,me()):Gt.calculateTextDimensions(h,u)).width+2*Ne.wrapPadding;l&&i.from===a.nextActor?n[i.to]=Ze.getMax(n[i.to]||0,d):l&&i.from===a.prevActor?n[i.from]=Ze.getMax(n[i.from]||0,d):l&&i.from===i.to?(n[i.from]=Ze.getMax(n[i.from]||0,d/2),n[i.to]=Ze.getMax(n[i.to]||0,d/2)):i.placement===r.db.PLACEMENT.RIGHTOF?n[i.from]=Ze.getMax(n[i.from]||0,d):i.placement===r.db.PLACEMENT.LEFTOF?n[a.prevActor]=Ze.getMax(n[a.prevActor]||0,d):i.placement===r.db.PLACEMENT.OVER&&(a.prevActor&&(n[a.prevActor]=Ze.getMax(n[a.prevActor]||0,d/2)),a.nextActor&&(n[i.from]=Ze.getMax(n[i.from]||0,d/2)))}return Y.debug("maxMessageWidthPerActor:",n),n}async function OVe(t,e,r){let n=0;for(let a of t.keys()){let s=t.get(a);s.wrap&&(s.description=Gt.wrapLabel(s.description,Ne.width-2*Ne.wrapPadding,RO(Ne)));let l=pi(s.description)?await id(s.description,me()):Gt.calculateTextDimensions(s.description,RO(Ne));s.width=s.wrap?Ne.width:Ze.getMax(Ne.width,l.width+2*Ne.wrapPadding),s.height=s.wrap?Ze.getMax(l.height,Ne.height):Ne.height,n=Ze.getMax(n,s.height)}for(let a in e){let s=t.get(a);if(!s)continue;let l=t.get(s.nextActor);if(!l){let d=e[a]+Ne.actorMargin-s.width/2;s.margin=Ze.getMax(d,Ne.actorMargin);continue}let h=e[a]+Ne.actorMargin-s.width/2-l.width/2;s.margin=Ze.getMax(h,Ne.actorMargin)}let i=0;return r.forEach(a=>{let s=Dp(Ne),l=a.actorKeys.reduce((f,d)=>f+=t.get(d).width+(t.get(d).margin||0),0);l-=2*Ne.boxTextMargin,a.wrap&&(a.name=Gt.wrapLabel(a.name,l-2*Ne.wrapPadding,s));let u=Gt.calculateTextDimensions(a.name,s);i=Ze.getMax(u.height,i);let h=Ze.getMax(l,u.width+2*Ne.wrapPadding);if(a.margin=Ne.boxTextMargin,l<h){let f=(h-l)/2;a.margin+=f}}),r.forEach(a=>a.textMaxHeight=i),Ze.getMax(n,Ne.height)}var Ne,rt,AVe,Dp,_1,RO,DVe,LVe,NO,wfe,Tfe,D6,bfe,NVe,IVe,PVe,BVe,FVe,kfe,Efe=N(()=>{"use strict";dr();xfe();vt();gr();Wv();zt();s0();ir();Ei();Ne={},rt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,Tfe(me())},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=this,a=0;function s(l){return o(function(h){a++;let f=i.sequenceItems.length-a+1;i.updateVal(h,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopy",n+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopx",r+f*Ne.boxMargin,Math.max),l!=="activation"&&(i.updateVal(h,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopx",r+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopy",n+f*Ne.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,n){let i=Ze.getMin(t,r),a=Ze.getMax(t,r),s=Ze.getMin(e,n),l=Ze.getMax(e,n);this.updateVal(rt.data,"startx",i,Math.min),this.updateVal(rt.data,"starty",s,Math.min),this.updateVal(rt.data,"stopx",a,Math.max),this.updateVal(rt.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),newActivation:o(function(t,e,r){let n=r.get(t.from),i=D6(t.from).length||0,a=n.x+n.width/2+(i-1)*Ne.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Ne.activationWidth,stopy:void 0,actor:t.from,anchored:hi.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:rt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=Ze.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},AVe=o(async function(t,e){rt.bumpVerticalPos(Ne.boxMargin),e.height=Ne.boxMargin,e.starty=rt.getVerticalPos();let r=Tl();r.x=e.startx,r.y=e.starty,r.width=e.width||Ne.width,r.class="note";let n=t.append("g"),i=hi.drawRect(n,r),a=Hv();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Ne.noteFontFamily,a.fontSize=Ne.noteFontSize,a.fontWeight=Ne.noteFontWeight,a.anchor=Ne.noteAlign,a.textMargin=Ne.noteMargin,a.valign="center";let s=pi(a.text)?await Tb(n,a):_p(n,a),l=Math.round(s.map(u=>(u._groups||u)[0][0].getBBox().height).reduce((u,h)=>u+h));i.attr("height",l+2*Ne.noteMargin),e.height+=l+2*Ne.noteMargin,rt.bumpVerticalPos(l+2*Ne.noteMargin),e.stopy=e.starty+l+2*Ne.noteMargin,e.stopx=e.startx+r.width,rt.insert(e.startx,e.starty,e.stopx,e.stopy),rt.models.addNote(e)},"drawNote"),Dp=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),_1=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),RO=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(_Ve,"boundMessage");DVe=o(async function(t,e,r,n){let{startx:i,stopx:a,starty:s,message:l,type:u,sequenceIndex:h,sequenceVisible:f}=e,d=Gt.calculateTextDimensions(l,Dp(Ne)),p=Hv();p.x=i,p.y=s+10,p.width=a-i,p.class="messageText",p.dy="1em",p.text=l,p.fontFamily=Ne.messageFontFamily,p.fontSize=Ne.messageFontSize,p.fontWeight=Ne.messageFontWeight,p.anchor=Ne.messageAlign,p.valign="center",p.textMargin=Ne.wrapPadding,p.tspan=!1,pi(p.text)?await Tb(t,p,{startx:i,stopx:a,starty:r}):_p(t,p);let m=d.width,g;i===a?Ne.rightAngles?g=t.append("path").attr("d",`M ${i},${r} H ${i+Ze.getMax(Ne.width/2,m/2)} V ${r+25} H ${i}`):g=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(g=t.append("line"),g.attr("x1",i),g.attr("y1",r),g.attr("x2",a),g.attr("y2",r)),u===n.db.LINETYPE.DOTTED||u===n.db.LINETYPE.DOTTED_CROSS||u===n.db.LINETYPE.DOTTED_POINT||u===n.db.LINETYPE.DOTTED_OPEN||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED?(g.style("stroke-dasharray","3, 3"),g.attr("class","messageLine1")):g.attr("class","messageLine0");let y="";Ne.arrowMarkerAbsolute&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),g.attr("stroke-width",2),g.attr("stroke","none"),g.style("fill","none"),(u===n.db.LINETYPE.SOLID||u===n.db.LINETYPE.DOTTED)&&g.attr("marker-end","url("+y+"#arrowhead)"),(u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(g.attr("marker-start","url("+y+"#arrowhead)"),g.attr("marker-end","url("+y+"#arrowhead)")),(u===n.db.LINETYPE.SOLID_POINT||u===n.db.LINETYPE.DOTTED_POINT)&&g.attr("marker-end","url("+y+"#filled-head)"),(u===n.db.LINETYPE.SOLID_CROSS||u===n.db.LINETYPE.DOTTED_CROSS)&&g.attr("marker-end","url("+y+"#crosshead)"),(f||Ne.showSequenceNumbers)&&(g.attr("marker-start","url("+y+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},"drawMessage"),LVe=o(function(t,e,r,n,i,a,s){let l=0,u=0,h,f=0;for(let d of n){let p=e.get(d),m=p.box;h&&h!=m&&(s||rt.models.addBox(h),u+=Ne.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=i),u+=m.margin),p.width=p.width||Ne.width,p.height=Ze.getMax(p.height||Ne.height,Ne.height),p.margin=p.margin||Ne.actorMargin,f=Ze.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=rt.getVerticalPos(),rt.insert(p.x,i,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,rt.models.addActor(p)}h&&!s&&rt.models.addBox(h),rt.bumpVerticalPos(f)},"addActorRenderingData"),NO=o(async function(t,e,r,n){if(n){let i=0;rt.bumpVerticalPos(Ne.boxMargin*2);for(let a of r){let s=e.get(a);s.stopy||(s.stopy=rt.getVerticalPos());let l=await hi.drawActor(t,s,Ne,!0);i=Ze.getMax(i,l)}rt.bumpVerticalPos(i+Ne.boxMargin)}else for(let i of r){let a=e.get(i);await hi.drawActor(t,a,Ne,!1)}},"drawActors"),wfe=o(function(t,e,r,n){let i=0,a=0;for(let s of r){let l=e.get(s),u=IVe(l),h=hi.drawPopup(t,l,u,Ne,Ne.forceMenus,n);h.height>i&&(i=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:i,maxWidth:a}},"drawActorsPopup"),Tfe=o(function(t){Gn(Ne,t),t.fontFamily&&(Ne.actorFontFamily=Ne.noteFontFamily=Ne.messageFontFamily=t.fontFamily),t.fontSize&&(Ne.actorFontSize=Ne.noteFontSize=Ne.messageFontSize=t.fontSize),t.fontWeight&&(Ne.actorFontWeight=Ne.noteFontWeight=Ne.messageFontWeight=t.fontWeight)},"setConf"),D6=o(function(t){return rt.activations.filter(function(e){return e.actor===t})},"actorActivations"),bfe=o(function(t,e){let r=e.get(t),n=D6(t),i=n.reduce(function(s,l){return Ze.getMin(s,l.startx)},r.x+r.width/2-1),a=n.reduce(function(s,l){return Ze.getMax(s,l.stopx)},r.x+r.width/2+1);return[i,a]},"activationBounds");o(Hc,"adjustLoopHeightForWrap");o(RVe,"adjustCreatedDestroyedData");NVe=o(async function(t,e,r,n){let{securityLevel:i,sequence:a}=me();Ne=a;let s;i==="sandbox"&&(s=Ge("#i"+e));let l=i==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=i==="sandbox"?s.nodes()[0].contentDocument:document;rt.init(),Y.debug(n.db);let h=i==="sandbox"?l.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=n.db.getActors(),d=n.db.getCreatedActors(),p=n.db.getDestroyedActors(),m=n.db.getBoxes(),g=n.db.getActorKeys(),y=n.db.getMessages(),v=n.db.getDiagramTitle(),x=n.db.hasAtLeastOneBox(),b=n.db.hasAtLeastOneBoxWithTitle(),w=await MVe(f,y,n);if(Ne.height=await OVe(f,w,m),hi.insertComputerIcon(h),hi.insertDatabaseIcon(h),hi.insertClockIcon(h),x&&(rt.bumpVerticalPos(Ne.boxMargin),b&&rt.bumpVerticalPos(m[0].textMaxHeight)),Ne.hideUnusedParticipants===!0){let F=new Set;y.forEach(P=>{F.add(P.from),F.add(P.to)}),g=g.filter(P=>F.has(P))}LVe(h,f,d,g,0,y,!1);let C=await FVe(y,f,w,n);hi.insertArrowHead(h),hi.insertArrowCrossHead(h),hi.insertArrowFilledHead(h),hi.insertSequenceNumber(h);function T(F,P){let z=rt.endActivation(F);z.starty+18>P&&(z.starty=P-6,P+=12),hi.drawActivation(h,z,P,Ne,D6(F.from).length),rt.insert(z.startx,P-10,z.stopx,P)}o(T,"activeEnd");let E=1,A=1,S=[],_=[],I=0;for(let F of y){let P,z,$;switch(F.type){case n.db.LINETYPE.NOTE:rt.resetVerticalPos(),z=F.noteModel,await AVe(h,z);break;case n.db.LINETYPE.ACTIVE_START:rt.newActivation(F,h,f);break;case n.db.LINETYPE.ACTIVE_END:T(F,rt.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.LOOP_END:P=rt.endLoop(),await hi.drawLoop(h,P,"loop",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.RECT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin,H=>rt.newLoop(void 0,H.message));break;case n.db.LINETYPE.RECT_END:P=rt.endLoop(),_.push(P),rt.models.addLoop(P),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos());break;case n.db.LINETYPE.OPT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.OPT_END:P=rt.endLoop(),await hi.drawLoop(h,P,"opt",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.ALT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.ALT_ELSE:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.ALT_END:P=rt.endLoop(),await hi.drawLoop(h,P,"alt",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H)),rt.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.PAR_END:P=rt.endLoop(),await hi.drawLoop(h,P,"par",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.AUTONUMBER:E=F.message.start||E,A=F.message.step||A,F.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.CRITICAL_OPTION:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.CRITICAL_END:P=rt.endLoop(),await hi.drawLoop(h,P,"critical",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.BREAK_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.BREAK_END:P=rt.endLoop(),await hi.drawLoop(h,P,"break",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;default:try{$=F.msgModel,$.starty=rt.getVerticalPos(),$.sequenceIndex=E,$.sequenceVisible=n.db.showSequenceNumbers();let H=await _Ve(h,$);RVe(F,$,H,I,f,d,p),S.push({messageModel:$,lineStartY:H}),rt.models.addMessage($)}catch(H){Y.error("error while drawing message",H)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT,n.db.LINETYPE.BIDIRECTIONAL_SOLID,n.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(F.type)&&(E=E+A),I++}Y.debug("createdActors",d),Y.debug("destroyedActors",p),await NO(h,f,g,!1);for(let F of S)await DVe(h,F.messageModel,F.lineStartY,n);Ne.mirrorActors&&await NO(h,f,g,!0),_.forEach(F=>hi.drawBackgroundRect(h,F)),DO(h,f,g,Ne);for(let F of rt.models.boxes)F.height=rt.getVerticalPos()-F.y,rt.insert(F.x,F.y,F.x+F.width,F.height),F.startx=F.x,F.starty=F.y,F.stopx=F.startx+F.width,F.stopy=F.starty+F.height,F.stroke="rgb(0,0,0, 0.5)",hi.drawBox(h,F,Ne);x&&rt.bumpVerticalPos(Ne.boxMargin);let D=wfe(h,f,g,u),{bounds:k}=rt.getBounds();k.startx===void 0&&(k.startx=0),k.starty===void 0&&(k.starty=0),k.stopx===void 0&&(k.stopx=0),k.stopy===void 0&&(k.stopy=0);let L=k.stopy-k.starty;L<D.maxHeight&&(L=D.maxHeight);let R=L+2*Ne.diagramMarginY;Ne.mirrorActors&&(R=R-Ne.boxMargin+Ne.bottomMarginAdj);let O=k.stopx-k.startx;O<D.maxWidth&&(O=D.maxWidth);let M=O+2*Ne.diagramMarginX;v&&h.append("text").text(v).attr("x",(k.stopx-k.startx)/2-2*Ne.diagramMarginX).attr("y",-25),vn(h,R,M,Ne.useMaxWidth);let B=v?40:0;h.attr("viewBox",k.startx-Ne.diagramMarginX+" -"+(Ne.diagramMarginY+B)+" "+M+" "+(R+B)),Y.debug("models:",rt.models)},"draw");o(MVe,"getMaxMessageWidthPerActor");IVe=o(function(t){let e=0,r=RO(Ne);for(let n in t.links){let a=Gt.calculateTextDimensions(n,r).width+2*Ne.wrapPadding+2*Ne.boxMargin;e<a&&(e=a)}return e},"getRequiredPopupWidth");o(OVe,"calculateActorMargins");PVe=o(async function(t,e,r){let n=e.get(t.from),i=e.get(t.to),a=n.x,s=i.x,l=t.wrap&&t.message,u=pi(t.message)?await id(t.message,me()):Gt.calculateTextDimensions(l?Gt.wrapLabel(t.message,Ne.width,_1(Ne)):t.message,_1(Ne)),h={width:l?Ne.width:Ze.getMax(Ne.width,u.width+2*Ne.noteMargin),height:0,startx:n.x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===r.db.PLACEMENT.RIGHTOF?(h.width=l?Ze.getMax(Ne.width,u.width):Ze.getMax(n.width/2+i.width/2,u.width+2*Ne.noteMargin),h.startx=a+(n.width+Ne.actorMargin)/2):t.placement===r.db.PLACEMENT.LEFTOF?(h.width=l?Ze.getMax(Ne.width,u.width+2*Ne.noteMargin):Ze.getMax(n.width/2+i.width/2,u.width+2*Ne.noteMargin),h.startx=a-h.width+(n.width-Ne.actorMargin)/2):t.to===t.from?(u=Gt.calculateTextDimensions(l?Gt.wrapLabel(t.message,Ze.getMax(Ne.width,n.width),_1(Ne)):t.message,_1(Ne)),h.width=l?Ze.getMax(Ne.width,n.width):Ze.getMax(n.width,Ne.width,u.width+2*Ne.noteMargin),h.startx=a+(n.width-h.width)/2):(h.width=Math.abs(a+n.width/2-(s+i.width/2))+Ne.actorMargin,h.startx=a<s?a+n.width/2-Ne.actorMargin/2:s+i.width/2-Ne.actorMargin/2),l&&(h.message=Gt.wrapLabel(t.message,h.width-2*Ne.wrapPadding,_1(Ne))),Y.debug(`NM:[${h.startx},${h.stopx},${h.starty},${h.stopy}:${h.width},${h.height}=${t.message}]`),h},"buildNoteModel"),BVe=o(function(t,e,r){if(![r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.SOLID,r.db.LINETYPE.DOTTED,r.db.LINETYPE.SOLID_CROSS,r.db.LINETYPE.DOTTED_CROSS,r.db.LINETYPE.SOLID_POINT,r.db.LINETYPE.DOTTED_POINT,r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type))return{};let[n,i]=bfe(t.from,e),[a,s]=bfe(t.to,e),l=n<=a,u=l?i:n,h=l?a:s,f=Math.abs(a-s)>2,d=o(y=>l?-y:y,"adjustValue");t.from===t.to?h=u:(t.activate&&!f&&(h+=d(Ne.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(h+=d(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(u-=d(3)));let p=[n,i,a,s],m=Math.abs(u-h);t.wrap&&t.message&&(t.message=Gt.wrapLabel(t.message,Ze.getMax(m+2*Ne.wrapPadding,Ne.width),Dp(Ne)));let g=Gt.calculateTextDimensions(t.message,Dp(Ne));return{width:Ze.getMax(t.wrap?0:g.width+2*Ne.wrapPadding,m+2*Ne.wrapPadding,Ne.width),height:0,startx:u,stopx:h,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,p),toBounds:Math.max.apply(null,p)}},"buildMessageModel"),FVe=o(async function(t,e,r,n){let i={},a=[],s,l,u;for(let h of t){switch(h.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),i[s.id]=s,i[h.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=D6(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*Ne.activationWidth/2,g={startx:m,stopx:m+Ne.activationWidth,actor:h.from,enabled:!0};rt.activations.push(g)}break;case n.db.LINETYPE.ACTIVE_END:{let d=rt.activations.map(p=>p.actor).lastIndexOf(h.from);rt.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await PVe(h,e,n),h.noteModel=l,a.forEach(d=>{s=d,s.from=Ze.getMin(s.from,l.startx),s.to=Ze.getMax(s.to,l.startx+l.width),s.width=Ze.getMax(s.width,Math.abs(s.from-s.to))-Ne.labelBoxWidth})):(u=BVe(h,e,n),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=Ze.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=Ze.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=Ze.getMax(s.width,Math.abs(s.to-s.from))-Ne.labelBoxWidth}else s.from=Ze.getMin(u.startx,s.from),s.to=Ze.getMax(u.stopx,s.to),s.width=Ze.getMax(s.width,u.width)-Ne.labelBoxWidth}))}return rt.activations=[],Y.debug("Loop type widths:",i),i},"calculateLoopBounds"),kfe={bounds:rt,drawActors:NO,drawActorsPopup:wfe,setConf:Tfe,draw:NVe}});var Sfe={};hr(Sfe,{diagram:()=>$Ve});var $Ve,Cfe=N(()=>{"use strict";cfe();ufe();ffe();zt();Efe();$Ve={parser:lfe,get db(){return new _6},renderer:kfe,styles:hfe,init:o(t=>{t.sequence||(t.sequence={}),t.wrap&&(t.sequence.wrap=t.wrap,Yy({sequence:{wrap:t.wrap}}))},"init")}});var MO,L6,IO=N(()=>{"use strict";MO=function(){var t=o(function(Ie,be,W,de){for(W=W||{},de=Ie.length;de--;W[Ie[de]]=be);return W},"o"),e=[1,18],r=[1,19],n=[1,20],i=[1,41],a=[1,42],s=[1,26],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],w=[1,29],C=[1,30],T=[1,31],E=[1,44],A=[1,46],S=[1,43],_=[1,47],I=[1,9],D=[1,8,9],k=[1,58],L=[1,59],R=[1,60],O=[1,61],M=[1,62],B=[1,63],F=[1,64],P=[1,8,9,41],z=[1,76],$=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],H=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],Q=[13,58,84,99,101,102],j=[13,58,71,72,84,99,101,102],ie=[13,58,66,67,68,69,70,84,99,101,102],ne=[1,98],le=[1,115],he=[1,107],K=[1,113],X=[1,108],te=[1,109],J=[1,110],se=[1,111],ue=[1,112],Z=[1,114],Se=[22,58,59,80,84,85,86,87,88,89],ce=[1,8,9,39,41,44],ae=[1,8,9,22],Oe=[1,143],ge=[1,8,9,59],ze=[1,8,9,22,58,59,80,84,85,86,87,88,89],He={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:o(function(be,W,de,re,oe,V,xe){var q=V.length-1;switch(oe){case 8:this.$=V[q-1];break;case 9:case 12:case 14:this.$=V[q];break;case 10:case 13:this.$=V[q-2]+"."+V[q];break;case 11:case 15:this.$=V[q-1]+V[q];break;case 16:case 17:this.$=V[q-1]+"~"+V[q]+"~";break;case 18:re.addRelation(V[q]);break;case 19:V[q-1].title=re.cleanupLabel(V[q]),re.addRelation(V[q-1]);break;case 30:this.$=V[q].trim(),re.setAccTitle(this.$);break;case 31:case 32:this.$=V[q].trim(),re.setAccDescription(this.$);break;case 33:re.addClassesToNamespace(V[q-3],V[q-1]);break;case 34:re.addClassesToNamespace(V[q-4],V[q-1]);break;case 35:this.$=V[q],re.addNamespace(V[q]);break;case 36:this.$=[V[q]];break;case 37:this.$=[V[q-1]];break;case 38:V[q].unshift(V[q-2]),this.$=V[q];break;case 40:re.setCssClass(V[q-2],V[q]);break;case 41:re.addMembers(V[q-3],V[q-1]);break;case 42:re.setCssClass(V[q-5],V[q-3]),re.addMembers(V[q-5],V[q-1]);break;case 43:this.$=V[q],re.addClass(V[q]);break;case 44:this.$=V[q-1],re.addClass(V[q-1]),re.setClassLabel(V[q-1],V[q]);break;case 45:re.addAnnotation(V[q],V[q-2]);break;case 46:case 59:this.$=[V[q]];break;case 47:V[q].push(V[q-1]),this.$=V[q];break;case 48:break;case 49:re.addMember(V[q-1],re.cleanupLabel(V[q]));break;case 50:break;case 51:break;case 52:this.$={id1:V[q-2],id2:V[q],relation:V[q-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:V[q-3],id2:V[q],relation:V[q-1],relationTitle1:V[q-2],relationTitle2:"none"};break;case 54:this.$={id1:V[q-3],id2:V[q],relation:V[q-2],relationTitle1:"none",relationTitle2:V[q-1]};break;case 55:this.$={id1:V[q-4],id2:V[q],relation:V[q-2],relationTitle1:V[q-3],relationTitle2:V[q-1]};break;case 56:re.addNote(V[q],V[q-1]);break;case 57:re.addNote(V[q]);break;case 58:this.$=V[q-2],re.defineClass(V[q-1],V[q]);break;case 60:this.$=V[q-2].concat([V[q]]);break;case 61:re.setDirection("TB");break;case 62:re.setDirection("BT");break;case 63:re.setDirection("RL");break;case 64:re.setDirection("LR");break;case 65:this.$={type1:V[q-2],type2:V[q],lineType:V[q-1]};break;case 66:this.$={type1:"none",type2:V[q],lineType:V[q-1]};break;case 67:this.$={type1:V[q-1],type2:"none",lineType:V[q]};break;case 68:this.$={type1:"none",type2:"none",lineType:V[q]};break;case 69:this.$=re.relationType.AGGREGATION;break;case 70:this.$=re.relationType.EXTENSION;break;case 71:this.$=re.relationType.COMPOSITION;break;case 72:this.$=re.relationType.DEPENDENCY;break;case 73:this.$=re.relationType.LOLLIPOP;break;case 74:this.$=re.lineType.LINE;break;case 75:this.$=re.lineType.DOTTED_LINE;break;case 76:case 82:this.$=V[q-2],re.setClickEvent(V[q-1],V[q]);break;case 77:case 83:this.$=V[q-3],re.setClickEvent(V[q-2],V[q-1]),re.setTooltip(V[q-2],V[q]);break;case 78:this.$=V[q-2],re.setLink(V[q-1],V[q]);break;case 79:this.$=V[q-3],re.setLink(V[q-2],V[q-1],V[q]);break;case 80:this.$=V[q-3],re.setLink(V[q-2],V[q-1]),re.setTooltip(V[q-2],V[q]);break;case 81:this.$=V[q-4],re.setLink(V[q-3],V[q-2],V[q]),re.setTooltip(V[q-3],V[q-1]);break;case 84:this.$=V[q-3],re.setClickEvent(V[q-2],V[q-1],V[q]);break;case 85:this.$=V[q-4],re.setClickEvent(V[q-3],V[q-2],V[q-1]),re.setTooltip(V[q-3],V[q]);break;case 86:this.$=V[q-3],re.setLink(V[q-2],V[q]);break;case 87:this.$=V[q-4],re.setLink(V[q-3],V[q-1],V[q]);break;case 88:this.$=V[q-4],re.setLink(V[q-3],V[q-1]),re.setTooltip(V[q-3],V[q]);break;case 89:this.$=V[q-5],re.setLink(V[q-4],V[q-2],V[q]),re.setTooltip(V[q-4],V[q-1]);break;case 90:this.$=V[q-2],re.setCssStyle(V[q-1],V[q]);break;case 91:re.setCssClass(V[q-1],V[q]);break;case 92:this.$=[V[q]];break;case 93:V[q-2].push(V[q]),this.$=V[q-2];break;case 95:this.$=V[q-1]+V[q];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(I,[2,5],{8:[1,48]}),{8:[1,49]},t(D,[2,18],{22:[1,50]}),t(D,[2,20]),t(D,[2,21]),t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,28]),t(D,[2,29]),{34:[1,51]},{36:[1,52]},t(D,[2,32]),t(D,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:k,67:L,68:R,69:O,70:M,71:B,72:F}),{39:[1,65]},t(P,[2,39],{39:[1,67],44:[1,66]}),t(D,[2,50]),t(D,[2,51]),{16:68,58:p,84:E,99:A,101:S},{16:39,18:69,19:40,58:p,84:E,99:A,101:S,102:_},{16:39,18:70,19:40,58:p,84:E,99:A,101:S,102:_},{16:39,18:71,19:40,58:p,84:E,99:A,101:S,102:_},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:p,84:E,99:A,101:S,102:_},{13:z,53:75},{56:77,58:[1,78]},t(D,[2,61]),t(D,[2,62]),t(D,[2,63]),t(D,[2,64]),t($,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:p,84:E,99:A,101:S,102:_}),t($,[2,14],{20:[1,82]}),{15:83,16:84,58:p,84:E,99:A,101:S},{16:39,18:85,19:40,58:p,84:E,99:A,101:S,102:_},t(H,[2,118]),t(H,[2,119]),t(H,[2,120]),t(H,[2,121]),t([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),t(I,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:e,35:r,37:n,42:i,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_},t(D,[2,19]),t(D,[2,30]),t(D,[2,31]),{13:[1,89],16:39,18:88,19:40,58:p,84:E,99:A,101:S,102:_},{51:90,64:56,65:57,66:k,67:L,68:R,69:O,70:M,71:B,72:F},t(D,[2,49]),{65:91,71:B,72:F},t(Q,[2,68],{64:92,66:k,67:L,68:R,69:O,70:M}),t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(ie,[2,74]),t(ie,[2,75]),{8:[1,94],24:95,40:93,43:23,46:a},{16:96,58:p,84:E,99:A,101:S},{45:97,49:ne},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:le,57:104,58:he,80:K,82:105,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},{58:[1,116]},{13:z,53:117},t(D,[2,57]),t(D,[2,123]),{22:le,57:118,58:he,59:[1,119],80:K,82:105,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},t(Se,[2,59]),{16:39,18:120,19:40,58:p,84:E,99:A,101:S,102:_},t($,[2,15]),t($,[2,16]),t($,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:p,84:E,99:A,101:S},t(ce,[2,43],{11:123,12:[1,124]}),t(I,[2,7]),{9:[1,125]},t(ae,[2,52]),{16:39,18:126,19:40,58:p,84:E,99:A,101:S,102:_},{13:[1,128],16:39,18:127,19:40,58:p,84:E,99:A,101:S,102:_},t(Q,[2,67],{64:129,66:k,67:L,68:R,69:O,70:M}),t(Q,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:a},{8:[1,132],41:[2,36]},t(P,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:ne},{16:39,18:136,19:40,58:p,84:E,99:A,101:S,102:_},t(D,[2,76],{13:[1,137]}),t(D,[2,78],{13:[1,139],75:[1,138]}),t(D,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},t(D,[2,90],{59:Oe}),t(ge,[2,92],{83:144,22:le,58:he,80:K,84:X,85:te,86:J,87:se,88:ue,89:Z}),t(ze,[2,94]),t(ze,[2,96]),t(ze,[2,97]),t(ze,[2,98]),t(ze,[2,99]),t(ze,[2,100]),t(ze,[2,101]),t(ze,[2,102]),t(ze,[2,103]),t(ze,[2,104]),t(D,[2,91]),t(D,[2,56]),t(D,[2,58],{59:Oe}),{58:[1,145]},t($,[2,13]),{15:146,16:84,58:p,84:E,99:A,101:S},{39:[2,11]},t(ce,[2,44]),{13:[1,147]},{1:[2,4]},t(ae,[2,54]),t(ae,[2,53]),{16:39,18:148,19:40,58:p,84:E,99:A,101:S,102:_},t(Q,[2,65]),t(D,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:a},{45:151,49:ne},t(P,[2,41]),{41:[2,47]},t(D,[2,45]),t(D,[2,77]),t(D,[2,79]),t(D,[2,80],{75:[1,152]}),t(D,[2,83]),t(D,[2,84],{13:[1,153]}),t(D,[2,86],{13:[1,155],75:[1,154]}),{22:le,58:he,80:K,82:156,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},t(ze,[2,95]),t(Se,[2,60]),{39:[2,10]},{14:[1,157]},t(ae,[2,55]),t(D,[2,34]),{41:[2,38]},{41:[1,158]},t(D,[2,81]),t(D,[2,85]),t(D,[2,87]),t(D,[2,88],{75:[1,159]}),t(ge,[2,93],{83:144,22:le,58:he,80:K,84:X,85:te,86:J,87:se,88:ue,89:Z}),t(ce,[2,8]),t(P,[2,42]),t(D,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:o(function(be,W){if(W.recoverable)this.trace(be);else{var de=new Error(be);throw de.hash=W,de}},"parseError"),parse:o(function(be){var W=this,de=[0],re=[],oe=[null],V=[],xe=this.table,q="",pe=0,ve=0,Pe=0,_e=2,we=1,Ve=V.slice.call(arguments,1),De=Object.create(this.lexer),qe={yy:{}};for(var at in this.yy)Object.prototype.hasOwnProperty.call(this.yy,at)&&(qe.yy[at]=this.yy[at]);De.setInput(be,qe.yy),qe.yy.lexer=De,qe.yy.parser=this,typeof De.yylloc>"u"&&(De.yylloc={});var Rt=De.yylloc;V.push(Rt);var st=De.options&&De.options.ranges;typeof qe.yy.parseError=="function"?this.parseError=qe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ue(Tt){de.length=de.length-2*Tt,oe.length=oe.length-Tt,V.length=V.length-Tt}o(Ue,"popStack");function ct(){var Tt;return Tt=re.pop()||De.lex()||we,typeof Tt!="number"&&(Tt instanceof Array&&(re=Tt,Tt=re.pop()),Tt=W.symbols_[Tt]||Tt),Tt}o(ct,"lex");for(var We,ot,Yt,bt,Mt,xt,ut={},Et,ft,yt,nt;;){if(Yt=de[de.length-1],this.defaultActions[Yt]?bt=this.defaultActions[Yt]:((We===null||typeof We>"u")&&(We=ct()),bt=xe[Yt]&&xe[Yt][We]),typeof bt>"u"||!bt.length||!bt[0]){var dn="";nt=[];for(Et in xe[Yt])this.terminals_[Et]&&Et>_e&&nt.push("'"+this.terminals_[Et]+"'");De.showPosition?dn="Parse error on line "+(pe+1)+`: | |
| 1365 | +`+De.showPosition()+` | |
| 1366 | +Expecting `+nt.join(", ")+", got '"+(this.terminals_[We]||We)+"'":dn="Parse error on line "+(pe+1)+": Unexpected "+(We==we?"end of input":"'"+(this.terminals_[We]||We)+"'"),this.parseError(dn,{text:De.match,token:this.terminals_[We]||We,line:De.yylineno,loc:Rt,expected:nt})}if(bt[0]instanceof Array&&bt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Yt+", token: "+We);switch(bt[0]){case 1:de.push(We),oe.push(De.yytext),V.push(De.yylloc),de.push(bt[1]),We=null,ot?(We=ot,ot=null):(ve=De.yyleng,q=De.yytext,pe=De.yylineno,Rt=De.yylloc,Pe>0&&Pe--);break;case 2:if(ft=this.productions_[bt[1]][1],ut.$=oe[oe.length-ft],ut._$={first_line:V[V.length-(ft||1)].first_line,last_line:V[V.length-1].last_line,first_column:V[V.length-(ft||1)].first_column,last_column:V[V.length-1].last_column},st&&(ut._$.range=[V[V.length-(ft||1)].range[0],V[V.length-1].range[1]]),xt=this.performAction.apply(ut,[q,ve,pe,qe.yy,bt[1],oe,V].concat(Ve)),typeof xt<"u")return xt;ft&&(de=de.slice(0,-1*ft*2),oe=oe.slice(0,-1*ft),V=V.slice(0,-1*ft)),de.push(this.productions_[bt[1]][0]),oe.push(ut.$),V.push(ut._$),yt=xe[de[de.length-2]][de[de.length-1]],de.push(yt);break;case 3:return!0}}return!0},"parse")},$e=function(){var Ie={EOF:1,parseError:o(function(W,de){if(this.yy.parser)this.yy.parser.parseError(W,de);else throw new Error(W)},"parseError"),setInput:o(function(be,W){return this.yy=W||this.yy||{},this._input=be,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var be=this._input[0];this.yytext+=be,this.yyleng++,this.offset++,this.match+=be,this.matched+=be;var W=be.match(/(?:\r\n?|\n).*/g);return W?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),be},"input"),unput:o(function(be){var W=be.length,de=be.split(/(?:\r\n?|\n)/g);this._input=be+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-W),this.offset-=W;var re=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),de.length-1&&(this.yylineno-=de.length-1);var oe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:de?(de.length===re.length?this.yylloc.first_column:0)+re[re.length-de.length].length-de[0].length:this.yylloc.first_column-W},this.options.ranges&&(this.yylloc.range=[oe[0],oe[0]+this.yyleng-W]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1367 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(be){this.unput(this.match.slice(be))},"less"),pastInput:o(function(){var be=this.matched.substr(0,this.matched.length-this.match.length);return(be.length>20?"...":"")+be.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var be=this.match;return be.length<20&&(be+=this._input.substr(0,20-be.length)),(be.substr(0,20)+(be.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var be=this.pastInput(),W=new Array(be.length+1).join("-");return be+this.upcomingInput()+` | |
| 1368 | +`+W+"^"},"showPosition"),test_match:o(function(be,W){var de,re,oe;if(this.options.backtrack_lexer&&(oe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(oe.yylloc.range=this.yylloc.range.slice(0))),re=be[0].match(/(?:\r\n?|\n).*/g),re&&(this.yylineno+=re.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:re?re[re.length-1].length-re[re.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+be[0].length},this.yytext+=be[0],this.match+=be[0],this.matches=be,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(be[0].length),this.matched+=be[0],de=this.performAction.call(this,this.yy,this,W,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),de)return de;if(this._backtrack){for(var V in oe)this[V]=oe[V];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var be,W,de,re;this._more||(this.yytext="",this.match="");for(var oe=this._currentRules(),V=0;V<oe.length;V++)if(de=this._input.match(this.rules[oe[V]]),de&&(!W||de[0].length>W[0].length)){if(W=de,re=V,this.options.backtrack_lexer){if(be=this.test_match(de,oe[V]),be!==!1)return be;if(this._backtrack){W=!1;continue}else return!1}else if(!this.options.flex)break}return W?(be=this.test_match(W,oe[re]),be!==!1?be:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1369 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var W=this.next();return W||this.lex()},"lex"),begin:o(function(W){this.conditionStack.push(W)},"begin"),popState:o(function(){var W=this.conditionStack.length-1;return W>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(W){return W=this.conditionStack.length-1-Math.abs(W||0),W>=0?this.conditionStack[W]:"INITIAL"},"topState"),pushState:o(function(W){this.begin(W)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(W,de,re,oe){var V=oe;switch(re){case 0:return 60;case 1:return 61;case 2:return 62;case 3:return 63;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 77;case 22:this.popState();break;case 23:return 78;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 80;case 28:return 55;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),46;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 81;case 50:return 73;case 51:return 74;case 52:return 76;case 53:return 52;case 54:return 54;case 55:return 47;case 56:return 48;case 57:return 79;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 75;case 65:return 75;case 66:return 75;case 67:return 75;case 68:return 67;case 69:return 67;case 70:return 69;case 71:return 69;case 72:return 68;case 73:return 66;case 74:return 70;case 75:return 71;case 76:return 72;case 77:return 22;case 78:return 44;case 79:return 99;case 80:return 17;case 81:return"PLUS";case 82:return 85;case 83:return 59;case 84:return 88;case 85:return 88;case 86:return 89;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 58;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 84;case 94:return 101;case 95:return 87;case 96:return 87;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}};return Ie}();He.lexer=$e;function Re(){this.yy={}}return o(Re,"Parser"),Re.prototype=He,He.Parser=Re,new Re}();MO.parser=MO;L6=MO});var Dfe,kb,Lfe=N(()=>{"use strict";zt();gr();Dfe=["#","+","~","-",""],kb=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let n=Tr(e,me());this.parseMember(n)}getDisplayDetails(){let e=this.visibility+ec(this.id);this.memberType==="method"&&(e+=`(${ec(this.parameters.trim())})`,this.returnType&&(e+=" : "+ec(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(Dfe.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let i=e.length,a=e.substring(0,1),s=e.substring(i-1);Dfe.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?i:i-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let n=`${this.visibility?"\\"+this.visibility:""}${ec(this.id)}${this.memberType==="method"?`(${ec(this.parameters)})${this.returnType?" : "+ec(this.returnType):""}`:""}`;this.text=n.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});var R6,Rfe,Lp,D1,OO=N(()=>{"use strict";dr();vt();zt();gr();ir();mi();Lfe();R6="classId-",Rfe=0,Lp=o(t=>Ze.sanitizeText(t,me()),"sanitizeText"),D1=class{constructor(){this.relations=[];this.classes=new Map;this.styleClasses=new Map;this.notes=[];this.interfaces=[];this.namespaces=new Map;this.namespaceCounter=0;this.functions=[];this.lineType={LINE:0,DOTTED_LINE:1};this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4};this.setupToolTips=o(e=>{let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=this.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.top-14+document.body.scrollTop+"px"),r.html(r.html().replace(/<br\/>/g,"<br/>")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})},"setupToolTips");this.direction="TB";this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().class,"getConfig");this.functions.push(this.setupToolTips.bind(this)),this.clear(),this.addRelation=this.addRelation.bind(this),this.addClassesToNamespace=this.addClassesToNamespace.bind(this),this.addNamespace=this.addNamespace.bind(this),this.setCssClass=this.setCssClass.bind(this),this.addMembers=this.addMembers.bind(this),this.addClass=this.addClass.bind(this),this.setClassLabel=this.setClassLabel.bind(this),this.addAnnotation=this.addAnnotation.bind(this),this.addMember=this.addMember.bind(this),this.cleanupLabel=this.cleanupLabel.bind(this),this.addNote=this.addNote.bind(this),this.defineClass=this.defineClass.bind(this),this.setDirection=this.setDirection.bind(this),this.setLink=this.setLink.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.clear=this.clear.bind(this),this.setTooltip=this.setTooltip.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setCssStyle=this.setCssStyle.bind(this)}static{o(this,"ClassDB")}splitClassNameAndType(e){let r=Ze.sanitizeText(e,me()),n="",i=r;if(r.indexOf("~")>0){let a=r.split("~");i=Lp(a[0]),n=Lp(a[1])}return{className:i,type:n}}setClassLabel(e,r){let n=Ze.sanitizeText(e,me());r&&(r=Lp(r));let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).label=r,this.classes.get(i).text=`${r}${this.classes.get(i).type?`<${this.classes.get(i).type}>`:""}`}addClass(e){let r=Ze.sanitizeText(e,me()),{className:n,type:i}=this.splitClassNameAndType(r);if(this.classes.has(n))return;let a=Ze.sanitizeText(n,me());this.classes.set(a,{id:a,type:i,label:a,text:`${a}${i?`<${i}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:R6+a+"-"+Rfe}),Rfe++}addInterface(e,r){let n={id:`interface${this.interfaces.length}`,label:e,classId:r};this.interfaces.push(n)}lookUpDomId(e){let r=Ze.sanitizeText(e,me());if(this.classes.has(r))return this.classes.get(r).domId;throw new Error("Class not found: "+r)}clear(){this.relations=[],this.classes=new Map,this.notes=[],this.interfaces=[],this.functions=[],this.functions.push(this.setupToolTips.bind(this)),this.namespaces=new Map,this.namespaceCounter=0,this.direction="TB",Ar()}getClass(e){return this.classes.get(e)}getClasses(){return this.classes}getRelations(){return this.relations}getNotes(){return this.notes}addRelation(e){Y.debug("Adding relation: "+JSON.stringify(e));let r=[this.relationType.LOLLIPOP,this.relationType.AGGREGATION,this.relationType.COMPOSITION,this.relationType.DEPENDENCY,this.relationType.EXTENSION];e.relation.type1===this.relationType.LOLLIPOP&&!r.includes(e.relation.type2)?(this.addClass(e.id2),this.addInterface(e.id1,e.id2),e.id1=`interface${this.interfaces.length-1}`):e.relation.type2===this.relationType.LOLLIPOP&&!r.includes(e.relation.type1)?(this.addClass(e.id1),this.addInterface(e.id2,e.id1),e.id2=`interface${this.interfaces.length-1}`):(this.addClass(e.id1),this.addClass(e.id2)),e.id1=this.splitClassNameAndType(e.id1).className,e.id2=this.splitClassNameAndType(e.id2).className,e.relationTitle1=Ze.sanitizeText(e.relationTitle1.trim(),me()),e.relationTitle2=Ze.sanitizeText(e.relationTitle2.trim(),me()),this.relations.push(e)}addAnnotation(e,r){let n=this.splitClassNameAndType(e).className;this.classes.get(n).annotations.push(r)}addMember(e,r){this.addClass(e);let n=this.splitClassNameAndType(e).className,i=this.classes.get(n);if(typeof r=="string"){let a=r.trim();a.startsWith("<<")&&a.endsWith(">>")?i.annotations.push(Lp(a.substring(2,a.length-2))):a.indexOf(")")>0?i.methods.push(new kb(a,"method")):a&&i.members.push(new kb(a,"attribute"))}}addMembers(e,r){Array.isArray(r)&&(r.reverse(),r.forEach(n=>this.addMember(e,n)))}addNote(e,r){let n={id:`note${this.notes.length}`,class:r,text:e};this.notes.push(n)}cleanupLabel(e){return e.startsWith(":")&&(e=e.substring(1)),Lp(e.trim())}setCssClass(e,r){e.split(",").forEach(n=>{let i=n;/\d/.exec(n[0])&&(i=R6+i);let a=this.classes.get(i);a&&(a.cssClasses+=" "+r)})}defineClass(e,r){for(let n of e){let i=this.styleClasses.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.styleClasses.set(n,i)),r&&r.forEach(a=>{if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.classes.forEach(a=>{a.cssClasses.includes(n)&&a.styles.push(...r.flatMap(s=>s.split(",")))})}}setTooltip(e,r){e.split(",").forEach(n=>{r!==void 0&&(this.classes.get(n).tooltip=Lp(r))})}getTooltip(e,r){return r&&this.namespaces.has(r)?this.namespaces.get(r).classes.get(e).tooltip:this.classes.get(e).tooltip}setLink(e,r,n){let i=me();e.split(",").forEach(a=>{let s=a;/\d/.exec(a[0])&&(s=R6+s);let l=this.classes.get(s);l&&(l.link=Gt.formatUrl(r,i),i.securityLevel==="sandbox"?l.linkTarget="_top":typeof n=="string"?l.linkTarget=Lp(n):l.linkTarget="_blank")}),this.setCssClass(e,"clickable")}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFunc(i,r,n),this.classes.get(i).haveCallback=!0}),this.setCssClass(e,"clickable")}setClickFunc(e,r,n){let i=Ze.sanitizeText(e,me());if(me().securityLevel!=="loose"||r===void 0)return;let s=i;if(this.classes.has(s)){let l=this.lookUpDomId(s),u=[];if(typeof n=="string"){u=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let h=0;h<u.length;h++){let f=u[h].trim();f.startsWith('"')&&f.endsWith('"')&&(f=f.substr(1,f.length-2)),u[h]=f}}u.length===0&&u.push(l),this.functions.push(()=>{let h=document.querySelector(`[id="${l}"]`);h!==null&&h.addEventListener("click",()=>{Gt.runFunc(r,...u)},!1)})}}bindFunctions(e){this.functions.forEach(r=>{r(e)})}getDirection(){return this.direction}setDirection(e){this.direction=e}addNamespace(e){this.namespaces.has(e)||(this.namespaces.set(e,{id:e,classes:new Map,children:{},domId:R6+e+"-"+this.namespaceCounter}),this.namespaceCounter++)}getNamespace(e){return this.namespaces.get(e)}getNamespaces(){return this.namespaces}addClassesToNamespace(e,r){if(this.namespaces.has(e))for(let n of r){let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).parent=e,this.namespaces.get(e).classes.set(i,this.classes.get(i))}}setCssStyle(e,r){let n=this.classes.get(e);if(!(!r||!n))for(let i of r)i.includes(",")?n.styles.push(...i.split(",")):n.styles.push(i)}getArrowMarker(e){let r;switch(e){case 0:r="aggregation";break;case 1:r="extension";break;case 2:r="composition";break;case 3:r="dependency";break;case 4:r="lollipop";break;default:r="none"}return r}getData(){let e=[],r=[],n=me();for(let a of this.namespaces.keys()){let s=this.namespaces.get(a);if(s){let l={id:s.id,label:s.id,isGroup:!0,padding:n.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:n.look};e.push(l)}}for(let a of this.classes.keys()){let s=this.classes.get(a);if(s){let l=s;l.parentId=s.parent,l.look=n.look,e.push(l)}}let i=0;for(let a of this.notes){i++;let s={id:a.id,label:a.text,isGroup:!1,shape:"note",padding:n.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${n.themeVariables.noteBkgColor}`,`stroke: ${n.themeVariables.noteBorderColor}`],look:n.look};e.push(s);let l=this.classes.get(a.class)?.id??"";if(l){let u={id:`edgeNote${i}`,start:a.id,end:l,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:n.look};r.push(u)}}for(let a of this.interfaces){let s={id:a.id,label:a.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:n.look};e.push(s)}i=0;for(let a of this.relations){i++;let s={id:$h(a.id1,a.id2,{prefix:"id",counter:i}),start:a.id1,end:a.id2,type:"normal",label:a.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:this.getArrowMarker(a.relation.type1),arrowTypeEnd:this.getArrowMarker(a.relation.type2),startLabelRight:a.relationTitle1==="none"?"":a.relationTitle1,endLabelLeft:a.relationTitle2==="none"?"":a.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:a.style||"",pattern:a.relation.lineType==1?"dashed":"solid",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:this.getDirection()}}}});var UVe,N6,PO=N(()=>{"use strict";UVe=o(t=>`g.classGroup text { | |
| 1370 | + fill: ${t.nodeBorder||t.classText}; | |
| 1371 | + stroke: none; | |
| 1372 | + font-family: ${t.fontFamily}; | |
| 1373 | + font-size: 10px; | |
| 1374 | + | |
| 1375 | + .title { | |
| 1376 | + font-weight: bolder; | |
| 1377 | + } | |
| 1378 | + | |
| 1379 | +} | |
| 1380 | + | |
| 1381 | +.nodeLabel, .edgeLabel { | |
| 1382 | + color: ${t.classText}; | |
| 1383 | +} | |
| 1384 | +.edgeLabel .label rect { | |
| 1385 | + fill: ${t.mainBkg}; | |
| 1386 | +} | |
| 1387 | +.label text { | |
| 1388 | + fill: ${t.classText}; | |
| 1389 | +} | |
| 1390 | + | |
| 1391 | +.labelBkg { | |
| 1392 | + background: ${t.mainBkg}; | |
| 1393 | +} | |
| 1394 | +.edgeLabel .label span { | |
| 1395 | + background: ${t.mainBkg}; | |
| 1396 | +} | |
| 1397 | + | |
| 1398 | +.classTitle { | |
| 1399 | + font-weight: bolder; | |
| 1400 | +} | |
| 1401 | +.node rect, | |
| 1402 | + .node circle, | |
| 1403 | + .node ellipse, | |
| 1404 | + .node polygon, | |
| 1405 | + .node path { | |
| 1406 | + fill: ${t.mainBkg}; | |
| 1407 | + stroke: ${t.nodeBorder}; | |
| 1408 | + stroke-width: 1px; | |
| 1409 | + } | |
| 1410 | + | |
| 1411 | + | |
| 1412 | +.divider { | |
| 1413 | + stroke: ${t.nodeBorder}; | |
| 1414 | + stroke-width: 1; | |
| 1415 | +} | |
| 1416 | + | |
| 1417 | +g.clickable { | |
| 1418 | + cursor: pointer; | |
| 1419 | +} | |
| 1420 | + | |
| 1421 | +g.classGroup rect { | |
| 1422 | + fill: ${t.mainBkg}; | |
| 1423 | + stroke: ${t.nodeBorder}; | |
| 1424 | +} | |
| 1425 | + | |
| 1426 | +g.classGroup line { | |
| 1427 | + stroke: ${t.nodeBorder}; | |
| 1428 | + stroke-width: 1; | |
| 1429 | +} | |
| 1430 | + | |
| 1431 | +.classLabel .box { | |
| 1432 | + stroke: none; | |
| 1433 | + stroke-width: 0; | |
| 1434 | + fill: ${t.mainBkg}; | |
| 1435 | + opacity: 0.5; | |
| 1436 | +} | |
| 1437 | + | |
| 1438 | +.classLabel .label { | |
| 1439 | + fill: ${t.nodeBorder}; | |
| 1440 | + font-size: 10px; | |
| 1441 | +} | |
| 1442 | + | |
| 1443 | +.relation { | |
| 1444 | + stroke: ${t.lineColor}; | |
| 1445 | + stroke-width: 1; | |
| 1446 | + fill: none; | |
| 1447 | +} | |
| 1448 | + | |
| 1449 | +.dashed-line{ | |
| 1450 | + stroke-dasharray: 3; | |
| 1451 | +} | |
| 1452 | + | |
| 1453 | +.dotted-line{ | |
| 1454 | + stroke-dasharray: 1 2; | |
| 1455 | +} | |
| 1456 | + | |
| 1457 | +#compositionStart, .composition { | |
| 1458 | + fill: ${t.lineColor} !important; | |
| 1459 | + stroke: ${t.lineColor} !important; | |
| 1460 | + stroke-width: 1; | |
| 1461 | +} | |
| 1462 | + | |
| 1463 | +#compositionEnd, .composition { | |
| 1464 | + fill: ${t.lineColor} !important; | |
| 1465 | + stroke: ${t.lineColor} !important; | |
| 1466 | + stroke-width: 1; | |
| 1467 | +} | |
| 1468 | + | |
| 1469 | +#dependencyStart, .dependency { | |
| 1470 | + fill: ${t.lineColor} !important; | |
| 1471 | + stroke: ${t.lineColor} !important; | |
| 1472 | + stroke-width: 1; | |
| 1473 | +} | |
| 1474 | + | |
| 1475 | +#dependencyStart, .dependency { | |
| 1476 | + fill: ${t.lineColor} !important; | |
| 1477 | + stroke: ${t.lineColor} !important; | |
| 1478 | + stroke-width: 1; | |
| 1479 | +} | |
| 1480 | + | |
| 1481 | +#extensionStart, .extension { | |
| 1482 | + fill: transparent !important; | |
| 1483 | + stroke: ${t.lineColor} !important; | |
| 1484 | + stroke-width: 1; | |
| 1485 | +} | |
| 1486 | + | |
| 1487 | +#extensionEnd, .extension { | |
| 1488 | + fill: transparent !important; | |
| 1489 | + stroke: ${t.lineColor} !important; | |
| 1490 | + stroke-width: 1; | |
| 1491 | +} | |
| 1492 | + | |
| 1493 | +#aggregationStart, .aggregation { | |
| 1494 | + fill: transparent !important; | |
| 1495 | + stroke: ${t.lineColor} !important; | |
| 1496 | + stroke-width: 1; | |
| 1497 | +} | |
| 1498 | + | |
| 1499 | +#aggregationEnd, .aggregation { | |
| 1500 | + fill: transparent !important; | |
| 1501 | + stroke: ${t.lineColor} !important; | |
| 1502 | + stroke-width: 1; | |
| 1503 | +} | |
| 1504 | + | |
| 1505 | +#lollipopStart, .lollipop { | |
| 1506 | + fill: ${t.mainBkg} !important; | |
| 1507 | + stroke: ${t.lineColor} !important; | |
| 1508 | + stroke-width: 1; | |
| 1509 | +} | |
| 1510 | + | |
| 1511 | +#lollipopEnd, .lollipop { | |
| 1512 | + fill: ${t.mainBkg} !important; | |
| 1513 | + stroke: ${t.lineColor} !important; | |
| 1514 | + stroke-width: 1; | |
| 1515 | +} | |
| 1516 | + | |
| 1517 | +.edgeTerminals { | |
| 1518 | + font-size: 11px; | |
| 1519 | + line-height: initial; | |
| 1520 | +} | |
| 1521 | + | |
| 1522 | +.classTitleText { | |
| 1523 | + text-anchor: middle; | |
| 1524 | + font-size: 18px; | |
| 1525 | + fill: ${t.textColor}; | |
| 1526 | +} | |
| 1527 | +`,"getStyles"),N6=UVe});var HVe,WVe,qVe,M6,BO=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();HVe=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),WVe=o(function(t,e){return e.db.getClasses()},"getClasses"),qVe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing class diagram (v3)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),M6={getClasses:WVe,draw:qVe,getDir:HVe}});var Nfe={};hr(Nfe,{diagram:()=>YVe});var YVe,Mfe=N(()=>{"use strict";IO();OO();PO();BO();YVe={parser:L6,get db(){return new D1},renderer:M6,styles:N6,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Pfe={};hr(Pfe,{diagram:()=>QVe});var QVe,Bfe=N(()=>{"use strict";IO();OO();PO();BO();QVe={parser:L6,get db(){return new D1},renderer:M6,styles:N6,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var FO,I6,$O=N(()=>{"use strict";FO=function(){var t=o(function(F,P,z,$){for(z=z||{},$=F.length;$--;z[F[$]]=P);return z},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,32],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],w=[1,28],C=[1,29],T=[1,30],E=[1,31],A=[1,34],S=[1,35],_=[1,36],I=[1,37],D=[1,33],k=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],L=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],R=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],O={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,style:42,STYLE_IDS:43,STYLEDEF_STYLEOPTS:44,class:45,CLASSENTITY_IDS:46,STYLECLASS:47,direction_tb:48,direction_bt:49,direction_rl:50,direction_lr:51,eol:52,";":53,EDGE_STATE:54,STYLE_SEPARATOR:55,left_of:56,right_of:57,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"style",43:"STYLE_IDS",44:"STYLEDEF_STYLEOPTS",45:"class",46:"CLASSENTITY_IDS",47:"STYLECLASS",48:"direction_tb",49:"direction_bt",50:"direction_rl",51:"direction_lr",53:";",54:"EDGE_STATE",55:"STYLE_SEPARATOR",56:"left_of",57:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[52,1],[52,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(P,z,$,H,Q,j,ie){var ne=j.length-1;switch(Q){case 3:return H.setRootDoc(j[ne]),j[ne];break;case 4:this.$=[];break;case 5:j[ne]!="nl"&&(j[ne-1].push(j[ne]),this.$=j[ne-1]);break;case 6:case 7:this.$=j[ne];break;case 8:this.$="nl";break;case 12:this.$=j[ne];break;case 13:let X=j[ne-1];X.description=H.trimColon(j[ne]),this.$=X;break;case 14:this.$={stmt:"relation",state1:j[ne-2],state2:j[ne]};break;case 15:let te=H.trimColon(j[ne]);this.$={stmt:"relation",state1:j[ne-3],state2:j[ne-1],description:te};break;case 19:this.$={stmt:"state",id:j[ne-3],type:"default",description:"",doc:j[ne-1]};break;case 20:var le=j[ne],he=j[ne-2].trim();if(j[ne].match(":")){var K=j[ne].split(":");le=K[0],he=[he,K[1]]}this.$={stmt:"state",id:le,type:"default",description:he};break;case 21:this.$={stmt:"state",id:j[ne-3],type:"default",description:j[ne-5],doc:j[ne-1]};break;case 22:this.$={stmt:"state",id:j[ne],type:"fork"};break;case 23:this.$={stmt:"state",id:j[ne],type:"join"};break;case 24:this.$={stmt:"state",id:j[ne],type:"choice"};break;case 25:this.$={stmt:"state",id:H.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:j[ne-1].trim(),note:{position:j[ne-2].trim(),text:j[ne].trim()}};break;case 29:this.$=j[ne].trim(),H.setAccTitle(this.$);break;case 30:case 31:this.$=j[ne].trim(),H.setAccDescription(this.$);break;case 32:case 33:this.$={stmt:"classDef",id:j[ne-1].trim(),classes:j[ne].trim()};break;case 34:this.$={stmt:"style",id:j[ne-1].trim(),styleClass:j[ne].trim()};break;case 35:this.$={stmt:"applyClass",id:j[ne-1].trim(),styleClass:j[ne].trim()};break;case 36:H.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 37:H.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 38:H.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 39:H.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 42:case 43:this.$={stmt:"state",id:j[ne].trim(),type:"default",description:""};break;case 44:this.$={stmt:"state",id:j[ne-2].trim(),classes:[j[ne].trim()],type:"default",description:""};break;case 45:this.$={stmt:"state",id:j[ne-2].trim(),classes:[j[ne].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,5]),{9:38,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,7]),t(k,[2,8]),t(k,[2,9]),t(k,[2,10]),t(k,[2,11]),t(k,[2,12],{14:[1,39],15:[1,40]}),t(k,[2,16]),{18:[1,41]},t(k,[2,18],{20:[1,42]}),{23:[1,43]},t(k,[2,22]),t(k,[2,23]),t(k,[2,24]),t(k,[2,25]),{30:44,31:[1,45],56:[1,46],57:[1,47]},t(k,[2,28]),{34:[1,48]},{36:[1,49]},t(k,[2,31]),{39:[1,50],41:[1,51]},{43:[1,52]},{46:[1,53]},t(L,[2,42],{55:[1,54]}),t(L,[2,43],{55:[1,55]}),t(k,[2,36]),t(k,[2,37]),t(k,[2,38]),t(k,[2,39]),t(k,[2,6]),t(k,[2,13]),{13:56,24:d,54:D},t(k,[2,17]),t(R,i,{7:57}),{24:[1,58]},{24:[1,59]},{23:[1,60]},{24:[2,46]},{24:[2,47]},t(k,[2,29]),t(k,[2,30]),{40:[1,61]},{40:[1,62]},{44:[1,63]},{47:[1,64]},{24:[1,65]},{24:[1,66]},t(k,[2,14],{14:[1,67]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,68],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,20],{20:[1,69]}),{31:[1,70]},{24:[1,71]},t(k,[2,32]),t(k,[2,33]),t(k,[2,34]),t(k,[2,35]),t(L,[2,44]),t(L,[2,45]),t(k,[2,15]),t(k,[2,19]),t(R,i,{7:72}),t(k,[2,26]),t(k,[2,27]),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,73],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,21])],defaultActions:{5:[2,1],6:[2,2],46:[2,46],47:[2,47]},parseError:o(function(P,z){if(z.recoverable)this.trace(P);else{var $=new Error(P);throw $.hash=z,$}},"parseError"),parse:o(function(P){var z=this,$=[0],H=[],Q=[null],j=[],ie=this.table,ne="",le=0,he=0,K=0,X=2,te=1,J=j.slice.call(arguments,1),se=Object.create(this.lexer),ue={yy:{}};for(var Z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Z)&&(ue.yy[Z]=this.yy[Z]);se.setInput(P,ue.yy),ue.yy.lexer=se,ue.yy.parser=this,typeof se.yylloc>"u"&&(se.yylloc={});var Se=se.yylloc;j.push(Se);var ce=se.options&&se.options.ranges;typeof ue.yy.parseError=="function"?this.parseError=ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ae(xe){$.length=$.length-2*xe,Q.length=Q.length-xe,j.length=j.length-xe}o(ae,"popStack");function Oe(){var xe;return xe=H.pop()||se.lex()||te,typeof xe!="number"&&(xe instanceof Array&&(H=xe,xe=H.pop()),xe=z.symbols_[xe]||xe),xe}o(Oe,"lex");for(var ge,ze,He,$e,Re,Ie,be={},W,de,re,oe;;){if(He=$[$.length-1],this.defaultActions[He]?$e=this.defaultActions[He]:((ge===null||typeof ge>"u")&&(ge=Oe()),$e=ie[He]&&ie[He][ge]),typeof $e>"u"||!$e.length||!$e[0]){var V="";oe=[];for(W in ie[He])this.terminals_[W]&&W>X&&oe.push("'"+this.terminals_[W]+"'");se.showPosition?V="Parse error on line "+(le+1)+`: | |
| 1528 | +`+se.showPosition()+` | |
| 1529 | +Expecting `+oe.join(", ")+", got '"+(this.terminals_[ge]||ge)+"'":V="Parse error on line "+(le+1)+": Unexpected "+(ge==te?"end of input":"'"+(this.terminals_[ge]||ge)+"'"),this.parseError(V,{text:se.match,token:this.terminals_[ge]||ge,line:se.yylineno,loc:Se,expected:oe})}if($e[0]instanceof Array&&$e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+He+", token: "+ge);switch($e[0]){case 1:$.push(ge),Q.push(se.yytext),j.push(se.yylloc),$.push($e[1]),ge=null,ze?(ge=ze,ze=null):(he=se.yyleng,ne=se.yytext,le=se.yylineno,Se=se.yylloc,K>0&&K--);break;case 2:if(de=this.productions_[$e[1]][1],be.$=Q[Q.length-de],be._$={first_line:j[j.length-(de||1)].first_line,last_line:j[j.length-1].last_line,first_column:j[j.length-(de||1)].first_column,last_column:j[j.length-1].last_column},ce&&(be._$.range=[j[j.length-(de||1)].range[0],j[j.length-1].range[1]]),Ie=this.performAction.apply(be,[ne,he,le,ue.yy,$e[1],Q,j].concat(J)),typeof Ie<"u")return Ie;de&&($=$.slice(0,-1*de*2),Q=Q.slice(0,-1*de),j=j.slice(0,-1*de)),$.push(this.productions_[$e[1]][0]),Q.push(be.$),j.push(be._$),re=ie[$[$.length-2]][$[$.length-1]],$.push(re);break;case 3:return!0}}return!0},"parse")},M=function(){var F={EOF:1,parseError:o(function(z,$){if(this.yy.parser)this.yy.parser.parseError(z,$);else throw new Error(z)},"parseError"),setInput:o(function(P,z){return this.yy=z||this.yy||{},this._input=P,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var P=this._input[0];this.yytext+=P,this.yyleng++,this.offset++,this.match+=P,this.matched+=P;var z=P.match(/(?:\r\n?|\n).*/g);return z?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),P},"input"),unput:o(function(P){var z=P.length,$=P.split(/(?:\r\n?|\n)/g);this._input=P+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-z),this.offset-=z;var H=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),$.length-1&&(this.yylineno-=$.length-1);var Q=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:$?($.length===H.length?this.yylloc.first_column:0)+H[H.length-$.length].length-$[0].length:this.yylloc.first_column-z},this.options.ranges&&(this.yylloc.range=[Q[0],Q[0]+this.yyleng-z]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1530 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(P){this.unput(this.match.slice(P))},"less"),pastInput:o(function(){var P=this.matched.substr(0,this.matched.length-this.match.length);return(P.length>20?"...":"")+P.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var P=this.match;return P.length<20&&(P+=this._input.substr(0,20-P.length)),(P.substr(0,20)+(P.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var P=this.pastInput(),z=new Array(P.length+1).join("-");return P+this.upcomingInput()+` | |
| 1531 | +`+z+"^"},"showPosition"),test_match:o(function(P,z){var $,H,Q;if(this.options.backtrack_lexer&&(Q={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Q.yylloc.range=this.yylloc.range.slice(0))),H=P[0].match(/(?:\r\n?|\n).*/g),H&&(this.yylineno+=H.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:H?H[H.length-1].length-H[H.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+P[0].length},this.yytext+=P[0],this.match+=P[0],this.matches=P,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(P[0].length),this.matched+=P[0],$=this.performAction.call(this,this.yy,this,z,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),$)return $;if(this._backtrack){for(var j in Q)this[j]=Q[j];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var P,z,$,H;this._more||(this.yytext="",this.match="");for(var Q=this._currentRules(),j=0;j<Q.length;j++)if($=this._input.match(this.rules[Q[j]]),$&&(!z||$[0].length>z[0].length)){if(z=$,H=j,this.options.backtrack_lexer){if(P=this.test_match($,Q[j]),P!==!1)return P;if(this._backtrack){z=!1;continue}else return!1}else if(!this.options.flex)break}return z?(P=this.test_match(z,Q[H]),P!==!1?P:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1532 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var z=this.next();return z||this.lex()},"lex"),begin:o(function(z){this.conditionStack.push(z)},"begin"),popState:o(function(){var z=this.conditionStack.length-1;return z>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(z){return z=this.conditionStack.length-1-Math.abs(z||0),z>=0?this.conditionStack[z]:"INITIAL"},"topState"),pushState:o(function(z){this.begin(z)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(z,$,H,Q){var j=Q;switch(H){case 0:return 41;case 1:return 48;case 2:return 49;case 3:return 50;case 4:return 51;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),17;break;case 13:return 18;case 14:this.popState();break;case 15:return this.begin("acc_title"),33;break;case 16:return this.popState(),"acc_title_value";break;case 17:return this.begin("acc_descr"),35;break;case 18:return this.popState(),"acc_descr_value";break;case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),38;break;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 24:return this.popState(),this.pushState("CLASSDEFID"),39;break;case 25:return this.popState(),40;break;case 26:return this.pushState("CLASS"),45;break;case 27:return this.popState(),this.pushState("CLASS_STYLE"),46;break;case 28:return this.popState(),47;break;case 29:return this.pushState("STYLE"),42;break;case 30:return this.popState(),this.pushState("STYLEDEF_STYLES"),43;break;case 31:return this.popState(),44;break;case 32:return this.pushState("SCALE"),17;break;case 33:return 18;case 34:this.popState();break;case 35:this.pushState("STATE");break;case 36:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),25;break;case 37:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),26;break;case 38:return this.popState(),$.yytext=$.yytext.slice(0,-10).trim(),27;break;case 39:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),$.yytext=$.yytext.slice(0,-10).trim(),27;break;case 42:return 48;case 43:return 49;case 44:return 50;case 45:return 51;case 46:this.pushState("STATE_STRING");break;case 47:return this.pushState("STATE_ID"),"AS";break;case 48:return this.popState(),"ID";break;case 49:this.popState();break;case 50:return"STATE_DESCR";case 51:return 19;case 52:this.popState();break;case 53:return this.popState(),this.pushState("struct"),20;break;case 54:break;case 55:return this.popState(),21;break;case 56:break;case 57:return this.begin("NOTE"),29;break;case 58:return this.popState(),this.pushState("NOTE_ID"),56;break;case 59:return this.popState(),this.pushState("NOTE_ID"),57;break;case 60:this.popState(),this.pushState("FLOATING_NOTE");break;case 61:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 62:break;case 63:return"NOTE_TEXT";case 64:return this.popState(),"ID";break;case 65:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 66:return this.popState(),$.yytext=$.yytext.substr(2).trim(),31;break;case 67:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),31;break;case 68:return 6;case 69:return 6;case 70:return 16;case 71:return 54;case 72:return 24;case 73:return $.yytext=$.yytext.trim(),14;break;case 74:return 15;case 75:return 28;case 76:return 55;case 77:return 5;case 78:return"INVALID"}},"anonymous"),rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,29,35,42,43,44,45,54,55,56,57,71,72,73,74,75],inclusive:!1},FLOATING_NOTE_ID:{rules:[64],inclusive:!1},FLOATING_NOTE:{rules:[61,62,63],inclusive:!1},NOTE_TEXT:{rules:[66,67],inclusive:!1},NOTE_ID:{rules:[65],inclusive:!1},NOTE:{rules:[58,59,60],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[31],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[30],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,33,34],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[48],inclusive:!1},STATE_STRING:{rules:[49,50],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,36,37,38,39,40,41,46,47,51,52,53],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,35,53,57,68,69,70,71,72,73,74,76,77,78],inclusive:!0}}};return F}();O.lexer=M;function B(){this.yy={}}return o(B,"Parser"),B.prototype=O,O.Parser=B,new B}();FO.parser=FO;I6=FO});var zfe,O6,zO,L1,Eb,Gfe,Vfe,Ufe,Rp,P6,GO,VO,UO,HO,WO,B6,F6,Hfe,Wfe,qO,YO,qfe,Yfe,R1,tUe,Xfe,XO,rUe,nUe,jfe,Kfe,iUe,Qfe,aUe,Zfe,jO,KO,Jfe,$6,ede,QO,z6=N(()=>{"use strict";zfe="TB",O6="TB",zO="dir",L1="state",Eb="relation",Gfe="classDef",Vfe="style",Ufe="applyClass",Rp="default",P6="divider",GO="fill:none",VO="fill: #333",UO="c",HO="text",WO="normal",B6="rect",F6="rectWithTitle",Hfe="stateStart",Wfe="stateEnd",qO="divider",YO="roundedWithTitle",qfe="note",Yfe="noteGroup",R1="statediagram",tUe="state",Xfe=`${R1}-${tUe}`,XO="transition",rUe="note",nUe="note-edge",jfe=`${XO} ${nUe}`,Kfe=`${R1}-${rUe}`,iUe="cluster",Qfe=`${R1}-${iUe}`,aUe="cluster-alt",Zfe=`${R1}-${aUe}`,jO="parent",KO="note",Jfe="state",$6="----",ede=`${$6}${KO}`,QO=`${$6}${jO}`});function ZO(t="",e=0,r="",n=$6){let i=r!==null&&r.length>0?`${n}${r}`:"";return`${Jfe}-${t}${i}-${e}`}function G6(t,e,r){if(!e.id||e.id==="</join></fork>"||e.id==="</choice>")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(i=>{if(r.get(i)){let a=r.get(i);e.cssCompiledStyles=[...e.cssCompiledStyles,...a.styles]}}));let n=t.find(i=>i.id===e.id);n?Object.assign(n,e):t.push(e)}function oUe(t){return t?.classes?.join(" ")??""}function lUe(t){return t?.styles??[]}var V6,xf,sUe,tde,N1,rde,nde=N(()=>{"use strict";zt();vt();gr();z6();V6=new Map,xf=0;o(ZO,"stateDomId");sUe=o((t,e,r,n,i,a,s,l)=>{Y.trace("items",e),e.forEach(u=>{switch(u.stmt){case L1:N1(t,u,r,n,i,a,s,l);break;case Rp:N1(t,u,r,n,i,a,s,l);break;case Eb:{N1(t,u.state1,r,n,i,a,s,l),N1(t,u.state2,r,n,i,a,s,l);let h={id:"edge"+xf,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:GO,labelStyle:"",label:Ze.sanitizeText(u.description,me()),arrowheadStyle:VO,labelpos:UO,labelType:HO,thickness:WO,classes:XO,look:s};i.push(h),xf++}break}})},"setupDoc"),tde=o((t,e=O6)=>{let r=e;if(t.doc)for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir");o(G6,"insertOrUpdateNode");o(oUe,"getClassesFromDbInfo");o(lUe,"getStylesFromDbInfo");N1=o((t,e,r,n,i,a,s,l)=>{let u=e.id,h=r.get(u),f=oUe(h),d=lUe(h);if(Y.info("dataFetcher parsedItem",e,h,d),u!=="root"){let p=B6;e.start===!0?p=Hfe:e.start===!1&&(p=Wfe),e.type!==Rp&&(p=e.type),V6.get(u)||V6.set(u,{id:u,shape:p,description:Ze.sanitizeText(u,me()),cssClasses:`${f} ${Xfe}`,cssStyles:d});let m=V6.get(u);e.description&&(Array.isArray(m.description)?(m.shape=F6,m.description.push(e.description)):m.description?.length>0?(m.shape=F6,m.description===u?m.description=[e.description]:m.description=[m.description,e.description]):(m.shape=B6,m.description=e.description),m.description=Ze.sanitizeTextOrArray(m.description,me())),m.description?.length===1&&m.shape===F6&&(m.type==="group"?m.shape=YO:m.shape=B6),!m.type&&e.doc&&(Y.info("Setting cluster for XCX",u,tde(e)),m.type="group",m.isGroup=!0,m.dir=tde(e),m.shape=e.type===P6?qO:YO,m.cssClasses=`${m.cssClasses} ${Qfe} ${a?Zfe:""}`);let g={labelStyle:"",shape:m.shape,label:m.description,cssClasses:m.cssClasses,cssCompiledStyles:[],cssStyles:m.cssStyles,id:u,dir:m.dir,domId:ZO(u,xf),type:m.type,isGroup:m.type==="group",padding:8,rx:10,ry:10,look:s};if(g.shape===qO&&(g.label=""),t&&t.id!=="root"&&(Y.trace("Setting node ",u," to be child of its parent ",t.id),g.parentId=t.id),g.centerLabel=!0,e.note){let y={labelStyle:"",shape:qfe,label:e.note.text,cssClasses:Kfe,cssStyles:[],cssCompilesStyles:[],id:u+ede+"-"+xf,domId:ZO(u,xf,KO),type:m.type,isGroup:m.type==="group",padding:me().flowchart.padding,look:s,position:e.note.position},v=u+QO,x={labelStyle:"",shape:Yfe,label:e.note.text,cssClasses:m.cssClasses,cssStyles:[],id:u+QO,domId:ZO(u,xf,jO),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};xf++,x.id=v,y.parentId=v,G6(n,x,l),G6(n,y,l),G6(n,g,l);let b=u,w=y.id;e.note.position==="left of"&&(b=y.id,w=u),i.push({id:b+"-"+w,start:b,end:w,arrowhead:"none",arrowTypeEnd:"",style:GO,labelStyle:"",classes:jfe,arrowheadStyle:VO,labelpos:UO,labelType:HO,thickness:WO,look:s})}else G6(n,g,l)}e.doc&&(Y.trace("Adding nodes children "),sUe(e,e.doc,r,n,i,!a,s,l))},"dataFetcher"),rde=o(()=>{V6.clear(),xf=0},"reset")});var JO,cUe,uUe,ide,eP=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();z6();JO=o((t,e=O6)=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),cUe=o(function(t,e){return e.db.getClasses()},"getClasses"),uUe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,state:a,layout:s}=me();n.db.extract(n.db.getRootDocV2());let l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["barb"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,R1,a?.useMaxWidth??!0)},"draw"),ide={getClasses:cUe,draw:uUe,getDir:JO}});function ude(){return new Map}var tP,ade,sde,ode,lde,cde,hUe,fUe,hde,U6,Qo,H6=N(()=>{"use strict";zt();vt();ir();gr();mi();nde();eP();z6();tP="[*]",ade="start",sde=tP,ode="end",lde="color",cde="fill",hUe="bgFill",fUe=",";o(ude,"newClassesList");hde=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),U6=o(t=>JSON.parse(JSON.stringify(t)),"clone"),Qo=class{static{o(this,"StateDB")}constructor(e){this.clear(),this.version=e,this.setRootDoc=this.setRootDoc.bind(this),this.getDividerId=this.getDividerId.bind(this),this.setDirection=this.setDirection.bind(this),this.trimColon=this.trimColon.bind(this)}version;nodes=[];edges=[];rootDoc=[];classes=ude();documents={root:hde()};currentDocument=this.documents.root;startEndCount=0;dividerCnt=0;static relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3};setRootDoc(e){Y.info("Setting root doc",e),this.rootDoc=e,this.version===1?this.extract(e):this.extract(this.getRootDocV2())}getRootDoc(){return this.rootDoc}docTranslator(e,r,n){if(r.stmt===Eb)this.docTranslator(e,r.state1,!0),this.docTranslator(e,r.state2,!1);else if(r.stmt===L1&&(r.id==="[*]"?(r.id=n?e.id+"_start":e.id+"_end",r.start=n):r.id=r.id.trim()),r.doc){let i=[],a=[],s;for(s=0;s<r.doc.length;s++)if(r.doc[s].type===P6){let l=U6(r.doc[s]);l.doc=U6(a),i.push(l),a=[]}else a.push(r.doc[s]);if(i.length>0&&a.length>0){let l={stmt:L1,id:X9(),type:"divider",doc:U6(a)};i.push(U6(l)),r.doc=i}r.doc.forEach(l=>this.docTranslator(r,l,!0))}}getRootDocV2(){return this.docTranslator({id:"root"},{id:"root",doc:this.rootDoc},!0),{id:"root",doc:this.rootDoc}}extract(e){let r;e.doc?r=e.doc:r=e,Y.info(r),this.clear(!0),Y.info("Extract initial document:",r),r.forEach(s=>{switch(Y.warn("Statement",s.stmt),s.stmt){case L1:this.addState(s.id.trim(),s.type,s.doc,s.description,s.note,s.classes,s.styles,s.textStyles);break;case Eb:this.addRelation(s.state1,s.state2,s.description);break;case Gfe:this.addStyleClass(s.id.trim(),s.classes);break;case Vfe:{let l=s.id.trim().split(","),u=s.styleClass.split(",");l.forEach(h=>{let f=this.getState(h);if(f===void 0){let d=h.trim();this.addState(d),f=this.getState(d)}f.styles=u.map(d=>d.replace(/;/g,"")?.trim())})}break;case Ufe:this.setCssClass(s.id.trim(),s.styleClass);break}});let n=this.getStates(),a=me().look;rde(),N1(void 0,this.getRootDocV2(),n,this.nodes,this.edges,!0,a,this.classes),this.nodes.forEach(s=>{if(Array.isArray(s.label)){if(s.description=s.label.slice(1),s.isGroup&&s.description.length>0)throw new Error("Group nodes can only have label. Remove the additional description for node ["+s.id+"]");s.label=s.label[0]}})}addState(e,r=Rp,n=null,i=null,a=null,s=null,l=null,u=null){let h=e?.trim();if(this.currentDocument.states.has(h)?(this.currentDocument.states.get(h).doc||(this.currentDocument.states.get(h).doc=n),this.currentDocument.states.get(h).type||(this.currentDocument.states.get(h).type=r)):(Y.info("Adding state ",h,i),this.currentDocument.states.set(h,{id:h,descriptions:[],type:r,doc:n,note:a,classes:[],styles:[],textStyles:[]})),i&&(Y.info("Setting state description",h,i),typeof i=="string"&&this.addDescription(h,i.trim()),typeof i=="object"&&i.forEach(f=>this.addDescription(h,f.trim()))),a){let f=this.currentDocument.states.get(h);f.note=a,f.note.text=Ze.sanitizeText(f.note.text,me())}s&&(Y.info("Setting state classes",h,s),(typeof s=="string"?[s]:s).forEach(d=>this.setCssClass(h,d.trim()))),l&&(Y.info("Setting state styles",h,l),(typeof l=="string"?[l]:l).forEach(d=>this.setStyle(h,d.trim()))),u&&(Y.info("Setting state styles",h,l),(typeof u=="string"?[u]:u).forEach(d=>this.setTextStyle(h,d.trim())))}clear(e){this.nodes=[],this.edges=[],this.documents={root:hde()},this.currentDocument=this.documents.root,this.startEndCount=0,this.classes=ude(),e||Ar()}getState(e){return this.currentDocument.states.get(e)}getStates(){return this.currentDocument.states}logDocuments(){Y.info("Documents = ",this.documents)}getRelations(){return this.currentDocument.relations}startIdIfNeeded(e=""){let r=e;return e===tP&&(this.startEndCount++,r=`${ade}${this.startEndCount}`),r}startTypeIfNeeded(e="",r=Rp){return e===tP?ade:r}endIdIfNeeded(e=""){let r=e;return e===sde&&(this.startEndCount++,r=`${ode}${this.startEndCount}`),r}endTypeIfNeeded(e="",r=Rp){return e===sde?ode:r}addRelationObjs(e,r,n){let i=this.startIdIfNeeded(e.id.trim()),a=this.startTypeIfNeeded(e.id.trim(),e.type),s=this.startIdIfNeeded(r.id.trim()),l=this.startTypeIfNeeded(r.id.trim(),r.type);this.addState(i,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),this.addState(s,l,r.doc,r.description,r.note,r.classes,r.styles,r.textStyles),this.currentDocument.relations.push({id1:i,id2:s,relationTitle:Ze.sanitizeText(n,me())})}addRelation(e,r,n){if(typeof e=="object")this.addRelationObjs(e,r,n);else{let i=this.startIdIfNeeded(e.trim()),a=this.startTypeIfNeeded(e),s=this.endIdIfNeeded(r.trim()),l=this.endTypeIfNeeded(r);this.addState(i,a),this.addState(s,l),this.currentDocument.relations.push({id1:i,id2:s,title:Ze.sanitizeText(n,me())})}}addDescription(e,r){let n=this.currentDocument.states.get(e),i=r.startsWith(":")?r.replace(":","").trim():r;n.descriptions.push(Ze.sanitizeText(i,me()))}cleanupLabel(e){return e.substring(0,1)===":"?e.substr(2).trim():e.trim()}getDividerId(){return this.dividerCnt++,"divider-id-"+this.dividerCnt}addStyleClass(e,r=""){this.classes.has(e)||this.classes.set(e,{id:e,styles:[],textStyles:[]});let n=this.classes.get(e);r?.split(fUe).forEach(i=>{let a=i.replace(/([^;]*);/,"$1").trim();if(RegExp(lde).exec(i)){let l=a.replace(cde,hUe).replace(lde,cde);n.textStyles.push(l)}n.styles.push(a)})}getClasses(){return this.classes}setCssClass(e,r){e.split(",").forEach(n=>{let i=this.getState(n);if(i===void 0){let a=n.trim();this.addState(a),i=this.getState(a)}i.classes.push(r)})}setStyle(e,r){let n=this.getState(e);n!==void 0&&n.styles.push(r)}setTextStyle(e,r){let n=this.getState(e);n!==void 0&&n.textStyles.push(r)}getDirectionStatement(){return this.rootDoc.find(e=>e.stmt===zO)}getDirection(){return this.getDirectionStatement()?.value??zfe}setDirection(e){let r=this.getDirectionStatement();r?r.value=e:this.rootDoc.unshift({stmt:zO,value:e})}trimColon(e){return e&&e[0]===":"?e.substr(1).trim():e.trim()}getData(){let e=me();return{nodes:this.nodes,edges:this.edges,other:{},config:e,direction:JO(this.getRootDocV2())}}getConfig(){return me().state}getAccTitle=Rr;setAccTitle=Lr;getAccDescription=Mr;setAccDescription=Nr;setDiagramTitle=$r;getDiagramTitle=Ir}});var dUe,W6,rP=N(()=>{"use strict";dUe=o(t=>` | |
| 1533 | +defs #statediagram-barbEnd { | |
| 1534 | + fill: ${t.transitionColor}; | |
| 1535 | + stroke: ${t.transitionColor}; | |
| 1536 | + } | |
| 1537 | +g.stateGroup text { | |
| 1538 | + fill: ${t.nodeBorder}; | |
| 1539 | + stroke: none; | |
| 1540 | + font-size: 10px; | |
| 1541 | +} | |
| 1542 | +g.stateGroup text { | |
| 1543 | + fill: ${t.textColor}; | |
| 1544 | + stroke: none; | |
| 1545 | + font-size: 10px; | |
| 1546 | + | |
| 1547 | +} | |
| 1548 | +g.stateGroup .state-title { | |
| 1549 | + font-weight: bolder; | |
| 1550 | + fill: ${t.stateLabelColor}; | |
| 1551 | +} | |
| 1552 | + | |
| 1553 | +g.stateGroup rect { | |
| 1554 | + fill: ${t.mainBkg}; | |
| 1555 | + stroke: ${t.nodeBorder}; | |
| 1556 | +} | |
| 1557 | + | |
| 1558 | +g.stateGroup line { | |
| 1559 | + stroke: ${t.lineColor}; | |
| 1560 | + stroke-width: 1; | |
| 1561 | +} | |
| 1562 | + | |
| 1563 | +.transition { | |
| 1564 | + stroke: ${t.transitionColor}; | |
| 1565 | + stroke-width: 1; | |
| 1566 | + fill: none; | |
| 1567 | +} | |
| 1568 | + | |
| 1569 | +.stateGroup .composit { | |
| 1570 | + fill: ${t.background}; | |
| 1571 | + border-bottom: 1px | |
| 1572 | +} | |
| 1573 | + | |
| 1574 | +.stateGroup .alt-composit { | |
| 1575 | + fill: #e0e0e0; | |
| 1576 | + border-bottom: 1px | |
| 1577 | +} | |
| 1578 | + | |
| 1579 | +.state-note { | |
| 1580 | + stroke: ${t.noteBorderColor}; | |
| 1581 | + fill: ${t.noteBkgColor}; | |
| 1582 | + | |
| 1583 | + text { | |
| 1584 | + fill: ${t.noteTextColor}; | |
| 1585 | + stroke: none; | |
| 1586 | + font-size: 10px; | |
| 1587 | + } | |
| 1588 | +} | |
| 1589 | + | |
| 1590 | +.stateLabel .box { | |
| 1591 | + stroke: none; | |
| 1592 | + stroke-width: 0; | |
| 1593 | + fill: ${t.mainBkg}; | |
| 1594 | + opacity: 0.5; | |
| 1595 | +} | |
| 1596 | + | |
| 1597 | +.edgeLabel .label rect { | |
| 1598 | + fill: ${t.labelBackgroundColor}; | |
| 1599 | + opacity: 0.5; | |
| 1600 | +} | |
| 1601 | +.edgeLabel { | |
| 1602 | + background-color: ${t.edgeLabelBackground}; | |
| 1603 | + p { | |
| 1604 | + background-color: ${t.edgeLabelBackground}; | |
| 1605 | + } | |
| 1606 | + rect { | |
| 1607 | + opacity: 0.5; | |
| 1608 | + background-color: ${t.edgeLabelBackground}; | |
| 1609 | + fill: ${t.edgeLabelBackground}; | |
| 1610 | + } | |
| 1611 | + text-align: center; | |
| 1612 | +} | |
| 1613 | +.edgeLabel .label text { | |
| 1614 | + fill: ${t.transitionLabelColor||t.tertiaryTextColor}; | |
| 1615 | +} | |
| 1616 | +.label div .edgeLabel { | |
| 1617 | + color: ${t.transitionLabelColor||t.tertiaryTextColor}; | |
| 1618 | +} | |
| 1619 | + | |
| 1620 | +.stateLabel text { | |
| 1621 | + fill: ${t.stateLabelColor}; | |
| 1622 | + font-size: 10px; | |
| 1623 | + font-weight: bold; | |
| 1624 | +} | |
| 1625 | + | |
| 1626 | +.node circle.state-start { | |
| 1627 | + fill: ${t.specialStateColor}; | |
| 1628 | + stroke: ${t.specialStateColor}; | |
| 1629 | +} | |
| 1630 | + | |
| 1631 | +.node .fork-join { | |
| 1632 | + fill: ${t.specialStateColor}; | |
| 1633 | + stroke: ${t.specialStateColor}; | |
| 1634 | +} | |
| 1635 | + | |
| 1636 | +.node circle.state-end { | |
| 1637 | + fill: ${t.innerEndBackground}; | |
| 1638 | + stroke: ${t.background}; | |
| 1639 | + stroke-width: 1.5 | |
| 1640 | +} | |
| 1641 | +.end-state-inner { | |
| 1642 | + fill: ${t.compositeBackground||t.background}; | |
| 1643 | + // stroke: ${t.background}; | |
| 1644 | + stroke-width: 1.5 | |
| 1645 | +} | |
| 1646 | + | |
| 1647 | +.node rect { | |
| 1648 | + fill: ${t.stateBkg||t.mainBkg}; | |
| 1649 | + stroke: ${t.stateBorder||t.nodeBorder}; | |
| 1650 | + stroke-width: 1px; | |
| 1651 | +} | |
| 1652 | +.node polygon { | |
| 1653 | + fill: ${t.mainBkg}; | |
| 1654 | + stroke: ${t.stateBorder||t.nodeBorder};; | |
| 1655 | + stroke-width: 1px; | |
| 1656 | +} | |
| 1657 | +#statediagram-barbEnd { | |
| 1658 | + fill: ${t.lineColor}; | |
| 1659 | +} | |
| 1660 | + | |
| 1661 | +.statediagram-cluster rect { | |
| 1662 | + fill: ${t.compositeTitleBackground}; | |
| 1663 | + stroke: ${t.stateBorder||t.nodeBorder}; | |
| 1664 | + stroke-width: 1px; | |
| 1665 | +} | |
| 1666 | + | |
| 1667 | +.cluster-label, .nodeLabel { | |
| 1668 | + color: ${t.stateLabelColor}; | |
| 1669 | + // line-height: 1; | |
| 1670 | +} | |
| 1671 | + | |
| 1672 | +.statediagram-cluster rect.outer { | |
| 1673 | + rx: 5px; | |
| 1674 | + ry: 5px; | |
| 1675 | +} | |
| 1676 | +.statediagram-state .divider { | |
| 1677 | + stroke: ${t.stateBorder||t.nodeBorder}; | |
| 1678 | +} | |
| 1679 | + | |
| 1680 | +.statediagram-state .title-state { | |
| 1681 | + rx: 5px; | |
| 1682 | + ry: 5px; | |
| 1683 | +} | |
| 1684 | +.statediagram-cluster.statediagram-cluster .inner { | |
| 1685 | + fill: ${t.compositeBackground||t.background}; | |
| 1686 | +} | |
| 1687 | +.statediagram-cluster.statediagram-cluster-alt .inner { | |
| 1688 | + fill: ${t.altBackground?t.altBackground:"#efefef"}; | |
| 1689 | +} | |
| 1690 | + | |
| 1691 | +.statediagram-cluster .inner { | |
| 1692 | + rx:0; | |
| 1693 | + ry:0; | |
| 1694 | +} | |
| 1695 | + | |
| 1696 | +.statediagram-state rect.basic { | |
| 1697 | + rx: 5px; | |
| 1698 | + ry: 5px; | |
| 1699 | +} | |
| 1700 | +.statediagram-state rect.divider { | |
| 1701 | + stroke-dasharray: 10,10; | |
| 1702 | + fill: ${t.altBackground?t.altBackground:"#efefef"}; | |
| 1703 | +} | |
| 1704 | + | |
| 1705 | +.note-edge { | |
| 1706 | + stroke-dasharray: 5; | |
| 1707 | +} | |
| 1708 | + | |
| 1709 | +.statediagram-note rect { | |
| 1710 | + fill: ${t.noteBkgColor}; | |
| 1711 | + stroke: ${t.noteBorderColor}; | |
| 1712 | + stroke-width: 1px; | |
| 1713 | + rx: 0; | |
| 1714 | + ry: 0; | |
| 1715 | +} | |
| 1716 | +.statediagram-note rect { | |
| 1717 | + fill: ${t.noteBkgColor}; | |
| 1718 | + stroke: ${t.noteBorderColor}; | |
| 1719 | + stroke-width: 1px; | |
| 1720 | + rx: 0; | |
| 1721 | + ry: 0; | |
| 1722 | +} | |
| 1723 | + | |
| 1724 | +.statediagram-note text { | |
| 1725 | + fill: ${t.noteTextColor}; | |
| 1726 | +} | |
| 1727 | + | |
| 1728 | +.statediagram-note .nodeLabel { | |
| 1729 | + color: ${t.noteTextColor}; | |
| 1730 | +} | |
| 1731 | +.statediagram .edgeLabel { | |
| 1732 | + color: red; // ${t.noteTextColor}; | |
| 1733 | +} | |
| 1734 | + | |
| 1735 | +#dependencyStart, #dependencyEnd { | |
| 1736 | + fill: ${t.lineColor}; | |
| 1737 | + stroke: ${t.lineColor}; | |
| 1738 | + stroke-width: 1; | |
| 1739 | +} | |
| 1740 | + | |
| 1741 | +.statediagramTitleText { | |
| 1742 | + text-anchor: middle; | |
| 1743 | + font-size: 18px; | |
| 1744 | + fill: ${t.textColor}; | |
| 1745 | +} | |
| 1746 | +`,"getStyles"),W6=dUe});var nP,pUe,mUe,fde,gUe,dde,pde=N(()=>{"use strict";nP={},pUe=o((t,e)=>{nP[t]=e},"set"),mUe=o(t=>nP[t],"get"),fde=o(()=>Object.keys(nP),"keys"),gUe=o(()=>fde().length,"size"),dde={get:mUe,set:pUe,keys:fde,size:gUe}});var yUe,vUe,xUe,bUe,gde,wUe,TUe,kUe,EUe,iP,mde,yde,vde=N(()=>{"use strict";dr();pde();H6();ir();gr();zt();vt();yUe=o(t=>t.append("circle").attr("class","start-state").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit).attr("cy",me().state.padding+me().state.sizeUnit),"drawStartState"),vUe=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",me().state.textHeight).attr("class","divider").attr("x2",me().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),xUe=o((t,e)=>{let r=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+2*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",n.width+2*me().state.padding).attr("height",n.height+2*me().state.padding).attr("rx",me().state.radius),r},"drawSimpleState"),bUe=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*me().state.padding).text(m);g||y.attr("dy",me().state.textHeight)},"addTspan"),i=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+1.3*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",me().state.padding).attr("y",a+me().state.padding*.4+me().state.dividerMargin+me().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",me().state.padding).attr("y1",me().state.padding+a+me().state.dividerMargin/2).attr("y2",me().state.padding+a+me().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,i.width);return h.attr("x2",d+3*me().state.padding),t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",d+2*me().state.padding).attr("height",f.height+a+2*me().state.padding).attr("rx",me().state.radius),t},"drawDescrState"),gde=o((t,e,r)=>{let n=me().state.padding,i=2*me().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",me().state.titleShift).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+i,d=Math.max(f,s);d===s&&(d=d+i);let p,m=t.node().getBBox();e.doc,p=l-n,f>s&&(p=(s-d)/2+n),Math.abs(l-m.x)<n&&f>s&&(p=l-(f-s)/2);let g=1-me().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+me().state.textHeight+me().state.titleShift+1).attr("rx","0"),u.attr("x",p+n),f<=s&&u.attr("x",l+(d-i)/2-f/2+n),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",me().state.textHeight*3).attr("rx",me().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",m.height+3+2*me().state.textHeight).attr("rx",me().state.radius),t},"addTitleAndBox"),wUe=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",me().state.sizeUnit+me().state.miniPadding).attr("cx",me().state.padding+me().state.sizeUnit+me().state.miniPadding).attr("cy",me().state.padding+me().state.sizeUnit+me().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit+2).attr("cy",me().state.padding+me().state.sizeUnit+2)),"drawEndState"),TUe=o((t,e)=>{let r=me().state.forkWidth,n=me().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",me().state.padding).attr("y",me().state.padding)},"drawForkJoinState"),kUe=o((t,e,r,n)=>{let i=0,a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"<br/>");s=s.replace(/\n/g,"<br/>");let l=s.split(Ze.lineBreakRegex),u=1.25*me().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}i+=u,d.attr("x",e+me().state.noteMargin),d.attr("y",r+i+1.25*me().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},"_drawLongText"),EUe=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",me().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=kUe(t,0,0,n);return r.attr("height",a+2*me().state.noteMargin),r.attr("width",i+me().state.noteMargin*2),r},"drawNote"),iP=o(function(t,e){let r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&yUe(i),e.type==="end"&&wUe(i),(e.type==="fork"||e.type==="join")&&TUe(i,e),e.type==="note"&&EUe(e.note.text,i),e.type==="divider"&&vUe(i),e.type==="default"&&e.descriptions.length===0&&xUe(i,e),e.type==="default"&&e.descriptions.length>0&&bUe(i,e);let a=i.node().getBBox();return n.width=a.width+2*me().state.padding,n.height=a.height+2*me().state.padding,dde.set(r,n),n},"drawState"),mde=0,yde=o(function(t,e,r){let n=o(function(u){switch(u){case Qo.relationType.AGGREGATION:return"aggregation";case Qo.relationType.EXTENSION:return"extension";case Qo.relationType.COMPOSITION:return"composition";case Qo.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let i=e.points,a=wl().x(function(u){return u.x}).y(function(u){return u.y}).curve(Do),s=t.append("path").attr("d",a(i)).attr("id","edge"+mde).attr("class","transition"),l="";if(me().state.arrowMarkerAbsolute&&(l=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,l=l.replace(/\(/g,"\\("),l=l.replace(/\)/g,"\\)")),s.attr("marker-end","url("+l+"#"+n(Qo.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Gt.calcLabelPosition(e.points),d=Ze.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let w=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),C=w.node().getBBox();g=Math.max(g,C.width),y=Math.min(y,C.x),Y.info(C.x,h,f+p),p===0&&(p=w.node().getBBox().height,Y.info("Title height",p,f)),m.push(w)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((w,C)=>w.attr("y",f+C*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-me().state.padding/2).attr("y",f-v/2-me().state.padding/2-3.5).attr("width",g+me().state.padding).attr("height",v+me().state.padding),Y.info(x)}mde++},"drawEdge")});var fo,aP,SUe,CUe,AUe,_Ue,xde,bde,wde=N(()=>{"use strict";dr();gR();Vo();vt();gr();vde();zt();Ei();aP={},SUe=o(function(){},"setConf"),CUe=o(function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),AUe=o(function(t,e,r,n){fo=me().state;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=i==="sandbox"?a.nodes()[0].contentDocument:document;Y.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);CUe(u);let h=n.db.getRootDoc();xde(h,u,void 0,!1,s,l,n);let f=fo.padding,d=u.node().getBBox(),p=d.width+f*2,m=d.height+f*2,g=p*1.75;vn(u,m,g,fo.useMaxWidth),u.attr("viewBox",`${d.x-fo.padding} ${d.y-fo.padding} `+p+" "+m)},"draw"),_Ue=o(t=>t?t.length*fo.fontSizeFactor:1,"getLabelWidth"),xde=o((t,e,r,n,i,a,s)=>{let l=new sn({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u<t.length;u++)if(t[u].stmt==="relation"){h=!1;break}r?l.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:h?1:fo.edgeLengthFactor,nodeSep:h?1:50,isMultiGraph:!0}):l.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:h?1:fo.edgeLengthFactor,nodeSep:h?1:50,ranker:"tight-tree",isMultiGraph:!0}),l.setDefaultEdgeLabel(function(){return{}});let f=s.db.getStates(),d=s.db.getRelations(),p=Object.keys(f),m=!0;for(let b of p){let w=f[b];r&&(w.parentId=r);let C;if(w.doc){let T=e.append("g").attr("id",w.id).attr("class","stateGroup");if(C=xde(w.doc,T,w.id,!n,i,a,s),m){T=gde(T,w,n);let E=T.node().getBBox();C.width=E.width,C.height=E.height+fo.padding/2,aP[w.id]={y:fo.compositTitleSize}}else{let E=T.node().getBBox();C.width=E.width,C.height=E.height}}else C=iP(e,w,l);if(w.note){let T={descriptions:[],id:w.id+"-note",note:w.note,type:"note"},E=iP(e,T,l);w.note.position==="left of"?(l.setNode(C.id+"-note",E),l.setNode(C.id,C)):(l.setNode(C.id,C),l.setNode(C.id+"-note",E)),l.setParent(C.id,C.id+"-group"),l.setParent(C.id+"-note",C.id+"-group")}else l.setNode(C.id,C)}Y.debug("Count=",l.nodeCount(),l);let g=0;d.forEach(function(b){g++,Y.debug("Setting edge",b),l.setEdge(b.id1,b.id2,{relation:b,width:_Ue(b.title),height:fo.labelHeight*Ze.getRows(b.title).length,labelpos:"c"},"id"+g)}),R2(l),Y.debug("Graph after layout",l.nodes());let y=e.node();l.nodes().forEach(function(b){b!==void 0&&l.node(b)!==void 0?(Y.warn("Node "+b+": "+JSON.stringify(l.node(b))),i.select("#"+y.id+" #"+b).attr("transform","translate("+(l.node(b).x-l.node(b).width/2)+","+(l.node(b).y+(aP[b]?aP[b].y:0)-l.node(b).height/2)+" )"),i.select("#"+y.id+" #"+b).attr("data-x-shift",l.node(b).x-l.node(b).width/2),a.querySelectorAll("#"+y.id+" #"+b+" .divider").forEach(C=>{let T=C.parentElement,E=0,A=0;T&&(T.parentElement&&(E=T.parentElement.getBBox().width),A=parseInt(T.getAttribute("data-x-shift"),10),Number.isNaN(A)&&(A=0)),C.setAttribute("x1",0-A+8),C.setAttribute("x2",E-A-8)})):Y.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(Y.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),yde(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*fo.padding,x.height=v.height+2*fo.padding,Y.debug("Doc rendered",x,l),x},"renderDoc"),bde={setConf:SUe,draw:AUe}});var Tde={};hr(Tde,{diagram:()=>DUe});var DUe,kde=N(()=>{"use strict";$O();H6();rP();wde();DUe={parser:I6,get db(){return new Qo(1)},renderer:bde,styles:W6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Cde={};hr(Cde,{diagram:()=>MUe});var MUe,Ade=N(()=>{"use strict";$O();H6();rP();eP();MUe={parser:I6,get db(){return new Qo(2)},renderer:ide,styles:W6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var sP,Lde,Rde=N(()=>{"use strict";sP=function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var w=x.length-1;switch(v){case 1:return x[w-1];case 2:this.$=[];break;case 3:x[w-1].push(x[w]),this.$=x[w-1];break;case 4:case 5:this.$=x[w];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[w].substr(6)),this.$=x[w].substr(6);break;case 9:this.$=x[w].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[w].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[w].substr(8)),this.$=x[w].substr(8);break;case 13:y.addTask(x[w-1],x[w]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,w="",C=0,T=0,E=0,A=2,S=1,_=x.slice.call(arguments,1),I=Object.create(this.lexer),D={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(D.yy[k]=this.yy[k]);I.setInput(p,D.yy),D.yy.lexer=I,D.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var L=I.yylloc;x.push(L);var R=I.options&&I.options.ranges;typeof D.yy.parseError=="function"?this.parseError=D.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function O(K){g.length=g.length-2*K,v.length=v.length-K,x.length=x.length-K}o(O,"popStack");function M(){var K;return K=y.pop()||I.lex()||S,typeof K!="number"&&(K instanceof Array&&(y=K,K=y.pop()),K=m.symbols_[K]||K),K}o(M,"lex");for(var B,F,P,z,$,H,Q={},j,ie,ne,le;;){if(P=g[g.length-1],this.defaultActions[P]?z=this.defaultActions[P]:((B===null||typeof B>"u")&&(B=M()),z=b[P]&&b[P][B]),typeof z>"u"||!z.length||!z[0]){var he="";le=[];for(j in b[P])this.terminals_[j]&&j>A&&le.push("'"+this.terminals_[j]+"'");I.showPosition?he="Parse error on line "+(C+1)+`: | |
| 1747 | +`+I.showPosition()+` | |
| 1748 | +Expecting `+le.join(", ")+", got '"+(this.terminals_[B]||B)+"'":he="Parse error on line "+(C+1)+": Unexpected "+(B==S?"end of input":"'"+(this.terminals_[B]||B)+"'"),this.parseError(he,{text:I.match,token:this.terminals_[B]||B,line:I.yylineno,loc:L,expected:le})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+P+", token: "+B);switch(z[0]){case 1:g.push(B),v.push(I.yytext),x.push(I.yylloc),g.push(z[1]),B=null,F?(B=F,F=null):(T=I.yyleng,w=I.yytext,C=I.yylineno,L=I.yylloc,E>0&&E--);break;case 2:if(ie=this.productions_[z[1]][1],Q.$=v[v.length-ie],Q._$={first_line:x[x.length-(ie||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(ie||1)].first_column,last_column:x[x.length-1].last_column},R&&(Q._$.range=[x[x.length-(ie||1)].range[0],x[x.length-1].range[1]]),H=this.performAction.apply(Q,[w,T,C,D.yy,z[1],v,x].concat(_)),typeof H<"u")return H;ie&&(g=g.slice(0,-1*ie*2),v=v.slice(0,-1*ie),x=x.slice(0,-1*ie)),g.push(this.productions_[z[1]][0]),v.push(Q.$),x.push(Q._$),ne=b[g[g.length-2]][g[g.length-1]],g.push(ne);break;case 3:return!0}}return!0},"parse")},h=function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1749 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+` | |
| 1750 | +`+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;x<v.length;x++)if(g=this._input.match(this.rules[v[x]]),g&&(!m||g[0].length>m[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1751 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return d}();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f}();sP.parser=sP;Lde=sP});var M1,oP,Sb,Cb,BUe,FUe,$Ue,zUe,GUe,VUe,UUe,Nde,HUe,lP,Mde=N(()=>{"use strict";zt();mi();M1="",oP=[],Sb=[],Cb=[],BUe=o(function(){oP.length=0,Sb.length=0,M1="",Cb.length=0,Ar()},"clear"),FUe=o(function(t){M1=t,oP.push(t)},"addSection"),$Ue=o(function(){return oP},"getSections"),zUe=o(function(){let t=Nde(),e=100,r=0;for(;!t&&r<e;)t=Nde(),r++;return Sb.push(...Cb),Sb},"getTasks"),GUe=o(function(){let t=[];return Sb.forEach(r=>{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),VUe=o(function(t,e){let r=e.substr(1).split(":"),n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));let a=i.map(l=>l.trim()),s={section:M1,type:M1,people:a,task:t,score:n};Cb.push(s)},"addTask"),UUe=o(function(t){let e={section:M1,type:M1,description:t,task:t,classes:[]};Sb.push(e)},"addTaskOrg"),Nde=o(function(){let t=o(function(r){return Cb[r].processed},"compileTask"),e=!0;for(let[r,n]of Cb.entries())t(r),e=e&&n.processed;return e},"compileTasks"),HUe=o(function(){return GUe()},"getActors"),lP={getConfig:o(()=>me().journey,"getConfig"),clear:BUe,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addSection:FUe,getSections:$Ue,getTasks:zUe,addTask:VUe,addTaskOrg:UUe,getActors:HUe}});var WUe,Ide,Ode=N(()=>{"use strict";WUe=o(t=>`.label { | |
| 1752 | + font-family: ${t.fontFamily}; | |
| 1753 | + color: ${t.textColor}; | |
| 1754 | + } | |
| 1755 | + .mouth { | |
| 1756 | + stroke: #666; | |
| 1757 | + } | |
| 1758 | + | |
| 1759 | + line { | |
| 1760 | + stroke: ${t.textColor} | |
| 1761 | + } | |
| 1762 | + | |
| 1763 | + .legend { | |
| 1764 | + fill: ${t.textColor}; | |
| 1765 | + font-family: ${t.fontFamily}; | |
| 1766 | + } | |
| 1767 | + | |
| 1768 | + .label text { | |
| 1769 | + fill: #333; | |
| 1770 | + } | |
| 1771 | + .label { | |
| 1772 | + color: ${t.textColor} | |
| 1773 | + } | |
| 1774 | + | |
| 1775 | + .face { | |
| 1776 | + ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"}; | |
| 1777 | + stroke: #999; | |
| 1778 | + } | |
| 1779 | + | |
| 1780 | + .node rect, | |
| 1781 | + .node circle, | |
| 1782 | + .node ellipse, | |
| 1783 | + .node polygon, | |
| 1784 | + .node path { | |
| 1785 | + fill: ${t.mainBkg}; | |
| 1786 | + stroke: ${t.nodeBorder}; | |
| 1787 | + stroke-width: 1px; | |
| 1788 | + } | |
| 1789 | + | |
| 1790 | + .node .label { | |
| 1791 | + text-align: center; | |
| 1792 | + } | |
| 1793 | + .node.clickable { | |
| 1794 | + cursor: pointer; | |
| 1795 | + } | |
| 1796 | + | |
| 1797 | + .arrowheadPath { | |
| 1798 | + fill: ${t.arrowheadColor}; | |
| 1799 | + } | |
| 1800 | + | |
| 1801 | + .edgePath .path { | |
| 1802 | + stroke: ${t.lineColor}; | |
| 1803 | + stroke-width: 1.5px; | |
| 1804 | + } | |
| 1805 | + | |
| 1806 | + .flowchart-link { | |
| 1807 | + stroke: ${t.lineColor}; | |
| 1808 | + fill: none; | |
| 1809 | + } | |
| 1810 | + | |
| 1811 | + .edgeLabel { | |
| 1812 | + background-color: ${t.edgeLabelBackground}; | |
| 1813 | + rect { | |
| 1814 | + opacity: 0.5; | |
| 1815 | + } | |
| 1816 | + text-align: center; | |
| 1817 | + } | |
| 1818 | + | |
| 1819 | + .cluster rect { | |
| 1820 | + } | |
| 1821 | + | |
| 1822 | + .cluster text { | |
| 1823 | + fill: ${t.titleColor}; | |
| 1824 | + } | |
| 1825 | + | |
| 1826 | + div.mermaidTooltip { | |
| 1827 | + position: absolute; | |
| 1828 | + text-align: center; | |
| 1829 | + max-width: 200px; | |
| 1830 | + padding: 2px; | |
| 1831 | + font-family: ${t.fontFamily}; | |
| 1832 | + font-size: 12px; | |
| 1833 | + background: ${t.tertiaryColor}; | |
| 1834 | + border: 1px solid ${t.border2}; | |
| 1835 | + border-radius: 2px; | |
| 1836 | + pointer-events: none; | |
| 1837 | + z-index: 100; | |
| 1838 | + } | |
| 1839 | + | |
| 1840 | + .task-type-0, .section-type-0 { | |
| 1841 | + ${t.fillType0?`fill: ${t.fillType0}`:""}; | |
| 1842 | + } | |
| 1843 | + .task-type-1, .section-type-1 { | |
| 1844 | + ${t.fillType0?`fill: ${t.fillType1}`:""}; | |
| 1845 | + } | |
| 1846 | + .task-type-2, .section-type-2 { | |
| 1847 | + ${t.fillType0?`fill: ${t.fillType2}`:""}; | |
| 1848 | + } | |
| 1849 | + .task-type-3, .section-type-3 { | |
| 1850 | + ${t.fillType0?`fill: ${t.fillType3}`:""}; | |
| 1851 | + } | |
| 1852 | + .task-type-4, .section-type-4 { | |
| 1853 | + ${t.fillType0?`fill: ${t.fillType4}`:""}; | |
| 1854 | + } | |
| 1855 | + .task-type-5, .section-type-5 { | |
| 1856 | + ${t.fillType0?`fill: ${t.fillType5}`:""}; | |
| 1857 | + } | |
| 1858 | + .task-type-6, .section-type-6 { | |
| 1859 | + ${t.fillType0?`fill: ${t.fillType6}`:""}; | |
| 1860 | + } | |
| 1861 | + .task-type-7, .section-type-7 { | |
| 1862 | + ${t.fillType0?`fill: ${t.fillType7}`:""}; | |
| 1863 | + } | |
| 1864 | + | |
| 1865 | + .actor-0 { | |
| 1866 | + ${t.actor0?`fill: ${t.actor0}`:""}; | |
| 1867 | + } | |
| 1868 | + .actor-1 { | |
| 1869 | + ${t.actor1?`fill: ${t.actor1}`:""}; | |
| 1870 | + } | |
| 1871 | + .actor-2 { | |
| 1872 | + ${t.actor2?`fill: ${t.actor2}`:""}; | |
| 1873 | + } | |
| 1874 | + .actor-3 { | |
| 1875 | + ${t.actor3?`fill: ${t.actor3}`:""}; | |
| 1876 | + } | |
| 1877 | + .actor-4 { | |
| 1878 | + ${t.actor4?`fill: ${t.actor4}`:""}; | |
| 1879 | + } | |
| 1880 | + .actor-5 { | |
| 1881 | + ${t.actor5?`fill: ${t.actor5}`:""}; | |
| 1882 | + } | |
| 1883 | +`,"getStyles"),Ide=WUe});var cP,qUe,Bde,Fde,YUe,XUe,Pde,jUe,KUe,$de,QUe,I1,zde=N(()=>{"use strict";dr();Wv();cP=o(function(t,e){return kd(t,e)},"drawRect"),qUe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=bl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=bl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),Bde=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),Fde=o(function(t,e){return Nq(t,e)},"drawText"),YUe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,Fde(t,e)},"drawLabel"),XUe=o(function(t,e,r){let n=t.append("g"),i=Tl();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,cP(n,i),$de(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),Pde=-1,jUe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");Pde++;let a=300+5*30;i.append("line").attr("id","task"+Pde).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),qUe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=Tl();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,cP(i,s);let l=e.x+14;e.people.forEach(u=>{let h=e.actors[u].color,f={cx:l,cy:e.y,r:7,fill:h,stroke:"#000",title:u,pos:e.actors[u].position};Bde(i,f),l+=10}),$de(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),KUe=o(function(t,e){q5(t,e)},"drawBackgroundRect"),$de=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(/<br\s*\/?>/gi);for(let v=0;v<y.length;v++){let x=v*m-m*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).attr("fill",p).style("text-anchor","middle").style("font-size",m).style("font-family",g);b.append("tspan").attr("x",s+u/2).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)s in a&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),QUe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},"initGraphics"),I1={drawRect:cP,drawCircle:Bde,drawSection:XUe,drawText:Fde,drawLabel:YUe,drawTask:jUe,drawBackgroundRect:KUe,initGraphics:QUe}});function JUe(t){let e=me().journey,r=60;Object.keys(ju).forEach(n=>{let i=ju[n].color,a={cx:20,cy:r,r:7,fill:i,stroke:"#000",pos:ju[n].position};I1.drawCircle(t,a);let s={x:40,y:r+7,fill:"#666",text:n,textMargin:e.boxTextMargin|5};I1.drawText(t,s),r+=20})}var ZUe,ju,q6,Np,eHe,Zo,uP,Gde,tHe,hP,Vde=N(()=>{"use strict";dr();zde();zt();Ei();ZUe=o(function(t){Object.keys(t).forEach(function(r){q6[r]=t[r]})},"setConf"),ju={};o(JUe,"drawActorLegend");q6=me().journey,Np=q6.leftMargin,eHe=o(function(t,e,r,n){let i=me().journey,a=me().securityLevel,s;a==="sandbox"&&(s=Ge("#i"+e));let l=a==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body");Zo.init();let u=l.select("#"+e);I1.initGraphics(u);let h=n.db.getTasks(),f=n.db.getDiagramTitle(),d=n.db.getActors();for(let x in ju)delete ju[x];let p=0;d.forEach(x=>{ju[x]={color:i.actorColours[p%i.actorColours.length],position:p},p++}),JUe(u),Zo.insert(0,0,Np,Object.keys(ju).length*50),tHe(u,h,0);let m=Zo.getBounds();f&&u.append("text").text(f).attr("x",Np).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);let g=m.stopy-m.starty+2*i.diagramMarginY,y=Np+m.stopx+2*i.diagramMarginX;vn(u,g,y,i.useMaxWidth),u.append("line").attr("x1",Np).attr("y1",i.height*4).attr("x2",y-Np-4).attr("y2",i.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");let v=f?70:0;u.attr("viewBox",`${m.startx} -25 ${y} ${g+v}`),u.attr("preserveAspectRatio","xMinYMin meet"),u.attr("height",g+v+25)},"draw"),Zo={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=me().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*i.boxMargin,Math.min),a.updateVal(f,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(Zo.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(Zo.data,"stopx",r+d*i.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*i.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(Zo.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(Zo.data,"stopy",n+d*i.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,n){let i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),l=Math.max(e,n);this.updateVal(Zo.data,"startx",i,Math.min),this.updateVal(Zo.data,"starty",s,Math.min),this.updateVal(Zo.data,"stopx",a,Math.max),this.updateVal(Zo.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},uP=q6.sectionFills,Gde=q6.sectionColours,tHe=o(function(t,e,r){let n=me().journey,i="",a=n.height*2+n.diagramMarginY,s=r+a,l=0,u="#CCC",h="black",f=0;for(let[d,p]of e.entries()){if(i!==p.section){u=uP[l%uP.length],f=l%uP.length,h=Gde[l%Gde.length];let g=0,y=p.section;for(let x=d;x<e.length&&e[x].section==y;x++)g=g+1;let v={x:d*n.taskMargin+d*n.width+Np,y:50,text:p.section,fill:u,num:f,colour:h,taskCount:g};I1.drawSection(t,v,n),i=p.section,l++}let m=p.people.reduce((g,y)=>(ju[y]&&(g[y]=ju[y]),g),{});p.x=d*n.taskMargin+d*n.width+Np,p.y=s,p.width=n.diagramMarginX,p.height=n.diagramMarginY,p.colour=h,p.fill=u,p.num=f,p.actors=m,I1.drawTask(t,p,n),Zo.insert(p.x,p.y,p.x+p.width+n.taskMargin,300+5*30)}},"drawTasks"),hP={setConf:ZUe,draw:eHe}});var Ude={};hr(Ude,{diagram:()=>rHe});var rHe,Hde=N(()=>{"use strict";Rde();Mde();Ode();Vde();rHe={parser:Lde,db:lP,renderer:hP,styles:Ide,init:o(t=>{hP.setConf(t.journey),lP.clear()},"init")}});var dP,Qde,Zde=N(()=>{"use strict";dP=function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,8,10,11,12,14,16,17,20,21],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,16],u=[1,17],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:o(function(m,g,y,v,x,b,w){var C=b.length-1;switch(x){case 1:return b[C-1];case 2:this.$=[];break;case 3:b[C-1].push(b[C]),this.$=b[C-1];break;case 4:case 5:this.$=b[C];break;case 6:case 7:this.$=[];break;case 8:v.getCommonDb().setDiagramTitle(b[C].substr(6)),this.$=b[C].substr(6);break;case 9:this.$=b[C].trim(),v.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=b[C].trim(),v.getCommonDb().setAccDescription(this.$);break;case 12:v.addSection(b[C].substr(8)),this.$=b[C].substr(8);break;case 15:v.addTask(b[C],0,""),this.$=b[C];break;case 16:v.addEvent(b[C].substr(2)),this.$=b[C];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],w=this.table,C="",T=0,E=0,A=0,S=2,_=1,I=b.slice.call(arguments,1),D=Object.create(this.lexer),k={yy:{}};for(var L in this.yy)Object.prototype.hasOwnProperty.call(this.yy,L)&&(k.yy[L]=this.yy[L]);D.setInput(m,k.yy),k.yy.lexer=D,k.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var R=D.yylloc;b.push(R);var O=D.options&&D.options.ranges;typeof k.yy.parseError=="function"?this.parseError=k.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function M(X){y.length=y.length-2*X,x.length=x.length-X,b.length=b.length-X}o(M,"popStack");function B(){var X;return X=v.pop()||D.lex()||_,typeof X!="number"&&(X instanceof Array&&(v=X,X=v.pop()),X=g.symbols_[X]||X),X}o(B,"lex");for(var F,P,z,$,H,Q,j={},ie,ne,le,he;;){if(z=y[y.length-1],this.defaultActions[z]?$=this.defaultActions[z]:((F===null||typeof F>"u")&&(F=B()),$=w[z]&&w[z][F]),typeof $>"u"||!$.length||!$[0]){var K="";he=[];for(ie in w[z])this.terminals_[ie]&&ie>S&&he.push("'"+this.terminals_[ie]+"'");D.showPosition?K="Parse error on line "+(T+1)+`: | |
| 1884 | +`+D.showPosition()+` | |
| 1885 | +Expecting `+he.join(", ")+", got '"+(this.terminals_[F]||F)+"'":K="Parse error on line "+(T+1)+": Unexpected "+(F==_?"end of input":"'"+(this.terminals_[F]||F)+"'"),this.parseError(K,{text:D.match,token:this.terminals_[F]||F,line:D.yylineno,loc:R,expected:he})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+z+", token: "+F);switch($[0]){case 1:y.push(F),x.push(D.yytext),b.push(D.yylloc),y.push($[1]),F=null,P?(F=P,P=null):(E=D.yyleng,C=D.yytext,T=D.yylineno,R=D.yylloc,A>0&&A--);break;case 2:if(ne=this.productions_[$[1]][1],j.$=x[x.length-ne],j._$={first_line:b[b.length-(ne||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(ne||1)].first_column,last_column:b[b.length-1].last_column},O&&(j._$.range=[b[b.length-(ne||1)].range[0],b[b.length-1].range[1]]),Q=this.performAction.apply(j,[C,E,T,k.yy,$[1],x,b].concat(I)),typeof Q<"u")return Q;ne&&(y=y.slice(0,-1*ne*2),x=x.slice(0,-1*ne),b=b.slice(0,-1*ne)),y.push(this.productions_[$[1]][0]),x.push(j.$),b.push(j._$),le=w[y[y.length-2]][y[y.length-1]],y.push(le);break;case 3:return!0}}return!0},"parse")},f=function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1886 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+` | |
| 1887 | +`+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,x;if(this.options.backtrack_lexer&&(x={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(x.yylloc.range=this.yylloc.range.slice(0))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;b<x.length;b++)if(y=this._input.match(this.rules[x[b]]),y&&(!g||y[0].length>g[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1888 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s[^:\n]+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return p}();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d}();dP.parser=dP;Qde=dP});var mP={};hr(mP,{addEvent:()=>ope,addSection:()=>npe,addTask:()=>spe,addTaskOrg:()=>lpe,clear:()=>rpe,default:()=>hHe,getCommonDb:()=>tpe,getSections:()=>ipe,getTasks:()=>ape});var O1,epe,pP,Y6,P1,tpe,rpe,npe,ipe,ape,spe,ope,lpe,Jde,hHe,cpe=N(()=>{"use strict";mi();O1="",epe=0,pP=[],Y6=[],P1=[],tpe=o(()=>qy,"getCommonDb"),rpe=o(function(){pP.length=0,Y6.length=0,O1="",P1.length=0,Ar()},"clear"),npe=o(function(t){O1=t,pP.push(t)},"addSection"),ipe=o(function(){return pP},"getSections"),ape=o(function(){let t=Jde(),e=100,r=0;for(;!t&&r<e;)t=Jde(),r++;return Y6.push(...P1),Y6},"getTasks"),spe=o(function(t,e,r){let n={id:epe++,section:O1,type:O1,task:t,score:e||0,events:r?[r]:[]};P1.push(n)},"addTask"),ope=o(function(t){P1.find(r=>r.id===epe-1).events.push(t)},"addEvent"),lpe=o(function(t){let e={section:O1,type:O1,description:t,task:t,classes:[]};Y6.push(e)},"addTaskOrg"),Jde=o(function(){let t=o(function(r){return P1[r].processed},"compileTask"),e=!0;for(let[r,n]of P1.entries())t(r),e=e&&n.processed;return e},"compileTasks"),hHe={clear:rpe,getCommonDb:tpe,addSection:npe,getSections:ipe,getTasks:ape,addTask:spe,addTaskOrg:lpe,addEvent:ope}});function dpe(t,e){t.each(function(){var r=Ge(this),n=r.text().split(/(\s+|<br>)/).reverse(),i,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;f<n.length;f++)i=n[n.length-1-f],a.push(i),h.text(a.join(" ").trim()),(h.node().getComputedTextLength()>e||i==="<br>")&&(a.pop(),h.text(a.join(" ").trim()),i==="<br>"?a=[""]:a=[i],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(i))})}var fHe,X6,dHe,pHe,hpe,mHe,gHe,upe,yHe,vHe,xHe,gP,fpe,bHe,wHe,THe,kHe,bf,ppe=N(()=>{"use strict";dr();fHe=12,X6=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),dHe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=bl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=bl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),pHe=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),hpe=o(function(t,e){let r=e.text.replace(/<br\s*\/?>/gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class!==void 0&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),mHe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,hpe(t,e)},"drawLabel"),gHe=o(function(t,e,r){let n=t.append("g"),i=gP();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,X6(n,i),fpe(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),upe=-1,yHe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");upe++;let a=300+5*30;i.append("line").attr("id","task"+upe).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),dHe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=gP();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,X6(i,s),fpe(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),vHe=o(function(t,e){X6(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),xHe=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),gP=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),fpe=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(/<br\s*\/?>/gi);for(let v=0;v<y.length;v++){let x=v*m-m*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).attr("fill",p).style("text-anchor","middle").style("font-size",m).style("font-family",g);b.append("tspan").attr("x",s+u/2).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)s in a&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),bHe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},"initGraphics");o(dpe,"wrap");wHe=o(function(t,e,r,n){let i=r%fHe-1,a=t.append("g");e.section=i,a.attr("class",(e.class?e.class+" ":"")+"timeline-node "+("section-"+i));let s=a.append("g"),l=a.append("g"),h=l.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(dpe,e.width).node().getBBox(),f=n.fontSize?.replace?n.fontSize.replace("px",""):n.fontSize;return e.height=h.height+f*1.1*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,l.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),kHe(s,e,i,n),e},"drawNode"),THe=o(function(t,e,r){let n=t.append("g"),a=n.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(dpe,e.width).node().getBBox(),s=r.fontSize?.replace?r.fontSize.replace("px",""):r.fontSize;return n.remove(),a.height+s*1.1*.5+e.padding},"getVirtualNodeHeight"),kHe=o(function(t,e,r){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${-e.height+2*5} q0,-5 5,-5 h${e.width-2*5} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+r).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},"defaultBkg"),bf={drawRect:X6,drawCircle:pHe,drawSection:gHe,drawText:hpe,drawLabel:mHe,drawTask:yHe,drawBackgroundRect:vHe,getTextObj:xHe,getNoteRect:gP,initGraphics:bHe,drawNode:wHe,getVirtualNodeHeight:THe}});var EHe,mpe,SHe,gpe,ype=N(()=>{"use strict";dr();ppe();vt();zt();Ei();EHe=o(function(t,e,r,n){let i=me(),a=i.leftMargin??50;Y.debug("timeline",n.db);let s=i.securityLevel,l;s==="sandbox"&&(l=Ge("#i"+e));let h=(s==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body")).select("#"+e);h.append("g");let f=n.db.getTasks(),d=n.db.getCommonDb().getDiagramTitle();Y.debug("task",f),bf.initGraphics(h);let p=n.db.getSections();Y.debug("sections",p);let m=0,g=0,y=0,v=0,x=50+a,b=50;v=50;let w=0,C=!0;p.forEach(function(_){let I={number:w,descr:_,section:w,width:150,padding:20,maxHeight:m},D=bf.getVirtualNodeHeight(h,I,i);Y.debug("sectionHeight before draw",D),m=Math.max(m,D+20)});let T=0,E=0;Y.debug("tasks.length",f.length);for(let[_,I]of f.entries()){let D={number:_,descr:I,section:I.section,width:150,padding:20,maxHeight:g},k=bf.getVirtualNodeHeight(h,D,i);Y.debug("taskHeight before draw",k),g=Math.max(g,k+20),T=Math.max(T,I.events.length);let L=0;for(let R of I.events){let O={descr:R,section:I.section,number:I.section,width:150,padding:20,maxHeight:50};L+=bf.getVirtualNodeHeight(h,O,i)}E=Math.max(E,L)}Y.debug("maxSectionHeight before draw",m),Y.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(_=>{let I=f.filter(R=>R.section===_),D={number:w,descr:_,section:w,width:200*Math.max(I.length,1)-50,padding:20,maxHeight:m};Y.debug("sectionNode",D);let k=h.append("g"),L=bf.drawNode(k,D,w,i);Y.debug("sectionNode output",L),k.attr("transform",`translate(${x}, ${v})`),b+=m+50,I.length>0&&mpe(h,I,w,x,b,g,i,T,E,m,!1),x+=200*Math.max(I.length,1),b=v,w++}):(C=!1,mpe(h,f,w,x,b,g,i,T,E,m,!0));let A=h.node().getBBox();Y.debug("bounds",A),d&&h.append("text").text(d).attr("x",A.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),y=C?m+g+150:g+100,h.append("g").attr("class","lineWrapper").append("line").attr("x1",a).attr("y1",y).attr("x2",A.width+3*a).attr("y2",y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),Ao(void 0,h,i.timeline?.padding??50,i.timeline?.useMaxWidth??!1)},"draw"),mpe=o(function(t,e,r,n,i,a,s,l,u,h,f){for(let d of e){let p={descr:d.task,section:r,number:r,width:150,padding:20,maxHeight:a};Y.debug("taskNode",p);let m=t.append("g").attr("class","taskWrapper"),y=bf.drawNode(m,p,r,s).height;if(Y.debug("taskHeight after draw",y),m.attr("transform",`translate(${n}, ${i})`),a=Math.max(a,y),d.events){let v=t.append("g").attr("class","lineWrapper"),x=a;i+=100,x=x+SHe(t,d.events,r,n,i,s),i-=100,v.append("line").attr("x1",n+190/2).attr("y1",i+a).attr("x2",n+190/2).attr("y2",i+a+(f?a:h)+u+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}n=n+200,f&&!s.timeline?.disableMulticolor&&r++}i=i-10},"drawTasks"),SHe=o(function(t,e,r,n,i,a){let s=0,l=i;i=i+100;for(let u of e){let h={descr:u,section:r,number:r,width:150,padding:20,maxHeight:50};Y.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=bf.drawNode(f,h,r,a).height;s=s+p,f.attr("transform",`translate(${n}, ${i})`),i=i+10+p}return i=l,s},"drawEvents"),gpe={setConf:o(()=>{},"setConf"),draw:EHe}});var CHe,AHe,vpe,xpe=N(()=>{"use strict";Ys();CHe=o(t=>{let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)t["lineColor"+r]=t["lineColor"+r]||t["cScaleInv"+r],ca(t["lineColor"+r])?t["lineColor"+r]=Dt(t["lineColor"+r],20):t["lineColor"+r]=Ot(t["lineColor"+r],20);for(let r=0;r<t.THEME_COLOR_LIMIT;r++){let n=""+(17-3*r);e+=` | |
| 1889 | + .section-${r-1} rect, .section-${r-1} path, .section-${r-1} circle, .section-${r-1} path { | |
| 1890 | + fill: ${t["cScale"+r]}; | |
| 1891 | + } | |
| 1892 | + .section-${r-1} text { | |
| 1893 | + fill: ${t["cScaleLabel"+r]}; | |
| 1894 | + } | |
| 1895 | + .node-icon-${r-1} { | |
| 1896 | + font-size: 40px; | |
| 1897 | + color: ${t["cScaleLabel"+r]}; | |
| 1898 | + } | |
| 1899 | + .section-edge-${r-1}{ | |
| 1900 | + stroke: ${t["cScale"+r]}; | |
| 1901 | + } | |
| 1902 | + .edge-depth-${r-1}{ | |
| 1903 | + stroke-width: ${n}; | |
| 1904 | + } | |
| 1905 | + .section-${r-1} line { | |
| 1906 | + stroke: ${t["cScaleInv"+r]} ; | |
| 1907 | + stroke-width: 3; | |
| 1908 | + } | |
| 1909 | + | |
| 1910 | + .lineWrapper line{ | |
| 1911 | + stroke: ${t["cScaleLabel"+r]} ; | |
| 1912 | + } | |
| 1913 | + | |
| 1914 | + .disabled, .disabled circle, .disabled text { | |
| 1915 | + fill: lightgray; | |
| 1916 | + } | |
| 1917 | + .disabled text { | |
| 1918 | + fill: #efefef; | |
| 1919 | + } | |
| 1920 | + `}return e},"genSections"),AHe=o(t=>` | |
| 1921 | + .edge { | |
| 1922 | + stroke-width: 3; | |
| 1923 | + } | |
| 1924 | + ${CHe(t)} | |
| 1925 | + .section-root rect, .section-root path, .section-root circle { | |
| 1926 | + fill: ${t.git0}; | |
| 1927 | + } | |
| 1928 | + .section-root text { | |
| 1929 | + fill: ${t.gitBranchLabel0}; | |
| 1930 | + } | |
| 1931 | + .icon-container { | |
| 1932 | + height:100%; | |
| 1933 | + display: flex; | |
| 1934 | + justify-content: center; | |
| 1935 | + align-items: center; | |
| 1936 | + } | |
| 1937 | + .edge { | |
| 1938 | + fill: none; | |
| 1939 | + } | |
| 1940 | + .eventWrapper { | |
| 1941 | + filter: brightness(120%); | |
| 1942 | + } | |
| 1943 | +`,"getStyles"),vpe=AHe});var bpe={};hr(bpe,{diagram:()=>_He});var _He,wpe=N(()=>{"use strict";Zde();cpe();ype();xpe();_He={db:mP,renderer:gpe,parser:Qde,styles:vpe}});var yP,Epe,Spe=N(()=>{"use strict";yP=function(){var t=o(function(C,T,E,A){for(E=E||{},A=C.length;A--;E[C[A]]=T);return E},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(T,E,A,S,_,I,D){var k=I.length-1;switch(_){case 6:case 7:return S;case 8:S.getLogger().trace("Stop NL ");break;case 9:S.getLogger().trace("Stop EOF ");break;case 11:S.getLogger().trace("Stop NL2 ");break;case 12:S.getLogger().trace("Stop EOF2 ");break;case 15:S.getLogger().info("Node: ",I[k].id),S.addNode(I[k-1].length,I[k].id,I[k].descr,I[k].type);break;case 16:S.getLogger().trace("Icon: ",I[k]),S.decorateNode({icon:I[k]});break;case 17:case 21:S.decorateNode({class:I[k]});break;case 18:S.getLogger().trace("SPACELIST");break;case 19:S.getLogger().trace("Node: ",I[k].id),S.addNode(0,I[k].id,I[k].descr,I[k].type);break;case 20:S.decorateNode({icon:I[k]});break;case 25:S.getLogger().trace("node found ..",I[k-2]),this.$={id:I[k-1],descr:I[k-1],type:S.getType(I[k-2],I[k])};break;case 26:this.$={id:I[k],descr:I[k],type:S.nodeType.DEFAULT};break;case 27:S.getLogger().trace("node found ..",I[k-3]),this.$={id:I[k-3],descr:I[k-1],type:S.getType(I[k-2],I[k])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(T,E){if(E.recoverable)this.trace(T);else{var A=new Error(T);throw A.hash=E,A}},"parseError"),parse:o(function(T){var E=this,A=[0],S=[],_=[null],I=[],D=this.table,k="",L=0,R=0,O=0,M=2,B=1,F=I.slice.call(arguments,1),P=Object.create(this.lexer),z={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(z.yy[$]=this.yy[$]);P.setInput(T,z.yy),z.yy.lexer=P,z.yy.parser=this,typeof P.yylloc>"u"&&(P.yylloc={});var H=P.yylloc;I.push(H);var Q=P.options&&P.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function j(ae){A.length=A.length-2*ae,_.length=_.length-ae,I.length=I.length-ae}o(j,"popStack");function ie(){var ae;return ae=S.pop()||P.lex()||B,typeof ae!="number"&&(ae instanceof Array&&(S=ae,ae=S.pop()),ae=E.symbols_[ae]||ae),ae}o(ie,"lex");for(var ne,le,he,K,X,te,J={},se,ue,Z,Se;;){if(he=A[A.length-1],this.defaultActions[he]?K=this.defaultActions[he]:((ne===null||typeof ne>"u")&&(ne=ie()),K=D[he]&&D[he][ne]),typeof K>"u"||!K.length||!K[0]){var ce="";Se=[];for(se in D[he])this.terminals_[se]&&se>M&&Se.push("'"+this.terminals_[se]+"'");P.showPosition?ce="Parse error on line "+(L+1)+`: | |
| 1944 | +`+P.showPosition()+` | |
| 1945 | +Expecting `+Se.join(", ")+", got '"+(this.terminals_[ne]||ne)+"'":ce="Parse error on line "+(L+1)+": Unexpected "+(ne==B?"end of input":"'"+(this.terminals_[ne]||ne)+"'"),this.parseError(ce,{text:P.match,token:this.terminals_[ne]||ne,line:P.yylineno,loc:H,expected:Se})}if(K[0]instanceof Array&&K.length>1)throw new Error("Parse Error: multiple actions possible at state: "+he+", token: "+ne);switch(K[0]){case 1:A.push(ne),_.push(P.yytext),I.push(P.yylloc),A.push(K[1]),ne=null,le?(ne=le,le=null):(R=P.yyleng,k=P.yytext,L=P.yylineno,H=P.yylloc,O>0&&O--);break;case 2:if(ue=this.productions_[K[1]][1],J.$=_[_.length-ue],J._$={first_line:I[I.length-(ue||1)].first_line,last_line:I[I.length-1].last_line,first_column:I[I.length-(ue||1)].first_column,last_column:I[I.length-1].last_column},Q&&(J._$.range=[I[I.length-(ue||1)].range[0],I[I.length-1].range[1]]),te=this.performAction.apply(J,[k,R,L,z.yy,K[1],_,I].concat(F)),typeof te<"u")return te;ue&&(A=A.slice(0,-1*ue*2),_=_.slice(0,-1*ue),I=I.slice(0,-1*ue)),A.push(this.productions_[K[1]][0]),_.push(J.$),I.push(J._$),Z=D[A[A.length-2]][A[A.length-1]],A.push(Z);break;case 3:return!0}}return!0},"parse")},b=function(){var C={EOF:1,parseError:o(function(E,A){if(this.yy.parser)this.yy.parser.parseError(E,A);else throw new Error(E)},"parseError"),setInput:o(function(T,E){return this.yy=E||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var E=T.match(/(?:\r\n?|\n).*/g);return E?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},"input"),unput:o(function(T){var E=T.length,A=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var S=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),A.length-1&&(this.yylineno-=A.length-1);var _=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:A?(A.length===S.length?this.yylloc.first_column:0)+S[S.length-A.length].length-A[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[_[0],_[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 1946 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(T){this.unput(this.match.slice(T))},"less"),pastInput:o(function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var T=this.pastInput(),E=new Array(T.length+1).join("-");return T+this.upcomingInput()+` | |
| 1947 | +`+E+"^"},"showPosition"),test_match:o(function(T,E){var A,S,_;if(this.options.backtrack_lexer&&(_={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_.yylloc.range=this.yylloc.range.slice(0))),S=T[0].match(/(?:\r\n?|\n).*/g),S&&(this.yylineno+=S.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:S?S[S.length-1].length-S[S.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],A=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),A)return A;if(this._backtrack){for(var I in _)this[I]=_[I];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,E,A,S;this._more||(this.yytext="",this.match="");for(var _=this._currentRules(),I=0;I<_.length;I++)if(A=this._input.match(this.rules[_[I]]),A&&(!E||A[0].length>E[0].length)){if(E=A,S=I,this.options.backtrack_lexer){if(T=this.test_match(A,_[I]),T!==!1)return T;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(T=this.test_match(E,_[S]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 1948 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var E=this.next();return E||this.lex()},"lex"),begin:o(function(E){this.conditionStack.push(E)},"begin"),popState:o(function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},"topState"),pushState:o(function(E){this.begin(E)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(E,A,S,_){var I=_;switch(S){case 0:return E.getLogger().trace("Found comment",A.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:E.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return E.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:E.getLogger().trace("end icon"),this.popState();break;case 10:return E.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return E.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return E.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return E.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:E.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return E.getLogger().trace("description:",A.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),E.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),E.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),E.getLogger().trace("node end ...",A.yytext),"NODE_DEND";break;case 30:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return E.getLogger().trace("Long description:",A.yytext),20;break;case 36:return E.getLogger().trace("Long description:",A.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return C}();x.lexer=b;function w(){this.yy={}}return o(w,"Parser"),w.prototype=x,x.Parser=w,new w}();yP.parser=yP;Epe=yP});var $l,Cpe,vP,NHe,MHe,IHe,OHe,Vi,PHe,BHe,FHe,$He,zHe,GHe,VHe,Ape,_pe=N(()=>{"use strict";zt();gr();vt();Ya();$l=[],Cpe=0,vP={},NHe=o(()=>{$l=[],Cpe=0,vP={}},"clear"),MHe=o(function(t){for(let e=$l.length-1;e>=0;e--)if($l[e].level<t)return $l[e];return null},"getParent"),IHe=o(()=>$l.length>0?$l[0]:null,"getMindmap"),OHe=o((t,e,r,n)=>{Y.info("addNode",t,e,r,n);let i=me(),a=i.mindmap?.padding??or.mindmap.padding;switch(n){case Vi.ROUNDED_RECT:case Vi.RECT:case Vi.HEXAGON:a*=2}let s={id:Cpe++,nodeId:Tr(e,i),level:t,descr:Tr(r,i),type:n,children:[],width:i.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:a},l=MHe(t);if(l)l.children.push(s),$l.push(s);else if($l.length===0)$l.push(s);else throw new Error('There can be only one root. No parent could be found for ("'+s.descr+'")')},"addNode"),Vi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},PHe=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Vi.RECT;case"(":return e===")"?Vi.ROUNDED_RECT:Vi.CLOUD;case"((":return Vi.CIRCLE;case")":return Vi.CLOUD;case"))":return Vi.BANG;case"{{":return Vi.HEXAGON;default:return Vi.DEFAULT}},"getType"),BHe=o((t,e)=>{vP[t]=e},"setElementForId"),FHe=o(t=>{if(!t)return;let e=me(),r=$l[$l.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.class=Tr(t.class,e))},"decorateNode"),$He=o(t=>{switch(t){case Vi.DEFAULT:return"no-border";case Vi.RECT:return"rect";case Vi.ROUNDED_RECT:return"rounded-rect";case Vi.CIRCLE:return"circle";case Vi.CLOUD:return"cloud";case Vi.BANG:return"bang";case Vi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),zHe=o(()=>Y,"getLogger"),GHe=o(t=>vP[t],"getElementById"),VHe={clear:NHe,addNode:OHe,getMindmap:IHe,nodeType:Vi,getType:PHe,setElementForId:BHe,decorateNode:FHe,type2Str:$He,getLogger:zHe,getElementById:GHe},Ape=VHe});function Wi(t){"@babel/helpers - typeof";return Wi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wi(t)}function Mf(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Dpe(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function If(t,e,r){return e&&Dpe(t.prototype,e),r&&Dpe(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function X0e(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function _i(t,e){return HHe(t)||qHe(t,e)||ZP(t,e)||XHe()}function j0e(t){return UHe(t)||WHe(t)||ZP(t)||YHe()}function UHe(t){if(Array.isArray(t))return OP(t)}function HHe(t){if(Array.isArray(t))return t}function WHe(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function qHe(t,e){var r=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(r!=null){var n=[],i=!0,a=!1,s,l;try{for(r=r.call(t);!(i=(s=r.next()).done)&&(n.push(s.value),!(e&&n.length===e));i=!0);}catch(u){a=!0,l=u}finally{try{!i&&r.return!=null&&r.return()}finally{if(a)throw l}}return n}}function ZP(t,e){if(t){if(typeof t=="string")return OP(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return OP(t,e)}}function OP(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function YHe(){throw new TypeError(`Invalid attempt to spread non-iterable instance. | |
| 1949 | +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function XHe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. | |
| 1950 | +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function mo(t,e){var r=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=ZP(t))||e&&t&&typeof t.length=="number"){r&&(t=r);var n=0,i=o(function(){},"F");return{s:i,n:o(function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},"n"),e:o(function(u){throw u},"e"),f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. | |
| 1951 | +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,s=!1,l;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return a=u.done,u},"n"),e:o(function(u){s=!0,l=u},"e"),f:o(function(){try{!a&&r.return!=null&&r.return()}finally{if(s)throw l}},"f")}}function yWe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function vWe(t,e){return e={exports:{}},t(e,e.exports),e.exports}function SWe(t){for(var e=t.length;e--&&EWe.test(t.charAt(e)););return e}function _We(t){return t&&t.slice(0,CWe(t)+1).replace(AWe,"")}function MWe(t){var e=RWe.call(t,Ab),r=t[Ab];try{t[Ab]=void 0;var n=!0}catch{}var i=NWe.call(t);return n&&(e?t[Ab]=r:delete t[Ab]),i}function BWe(t){return PWe.call(t)}function GWe(t){return t==null?t===void 0?zWe:$We:Npe&&Npe in Object(t)?IWe(t):FWe(t)}function VWe(t){return t!=null&&typeof t=="object"}function WWe(t){return typeof t=="symbol"||UWe(t)&&ame(t)==HWe}function KWe(t){if(typeof t=="number")return t;if(r4(t))return Mpe;if(zp(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=zp(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=DWe(t);var r=YWe.test(t);return r||XWe.test(t)?jWe(t.slice(2),r?2:8):qWe.test(t)?Mpe:+t}function eqe(t,e,r){var n,i,a,s,l,u,h=0,f=!1,d=!1,p=!0;if(typeof t!="function")throw new TypeError(QWe);e=Ipe(e)||0,zp(r)&&(f=!!r.leading,d="maxWait"in r,a=d?ZWe(Ipe(r.maxWait)||0,e):a,p="trailing"in r?!!r.trailing:p);function m(E){var A=n,S=i;return n=i=void 0,h=E,s=t.apply(S,A),s}o(m,"invokeFunc");function g(E){return h=E,l=setTimeout(x,e),f?m(E):s}o(g,"leadingEdge");function y(E){var A=E-u,S=E-h,_=e-A;return d?JWe(_,a-S):_}o(y,"remainingWait");function v(E){var A=E-u,S=E-h;return u===void 0||A>=e||A<0||d&&S>=a}o(v,"shouldInvoke");function x(){var E=xP();if(v(E))return b(E);l=setTimeout(x,y(E))}o(x,"timerExpired");function b(E){return l=void 0,p&&n?m(E):(n=i=void 0,s)}o(b,"trailingEdge");function w(){l!==void 0&&clearTimeout(l),h=0,n=u=i=l=void 0}o(w,"cancel");function C(){return l===void 0?s:b(xP())}o(C,"flush");function T(){var E=xP(),A=v(E);if(n=arguments,i=this,u=E,A){if(l===void 0)return g(u);if(d)return clearTimeout(l),l=setTimeout(x,e),m(u)}return l===void 0&&(l=setTimeout(x,e)),s}return o(T,"debounced"),T.cancel=w,T.flush=C,T}function IS(t,e,r,n,i,a){var s;return si(t)?s=t:s=Q1[t]||Q1.euclidean,e===0&&si(t)?s(i,a):s(e,r,n,i,a)}function qYe(t,e){if(OS(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||r4(t)?!0:WYe.test(t)||!HYe.test(t)||e!=null&&t in Object(e)}function ZYe(t){if(!zp(t))return!1;var e=ame(t);return e==jYe||e==KYe||e==XYe||e==QYe}function tXe(t){return!!e0e&&e0e in t}function aXe(t){if(t!=null){try{return iXe.call(t)}catch{}try{return t+""}catch{}}return""}function pXe(t){if(!zp(t)||rXe(t))return!1;var e=JYe(t)?dXe:lXe;return e.test(sXe(t))}function gXe(t,e){return t?.[e]}function vXe(t,e){var r=yXe(t,e);return mXe(r)?r:void 0}function bXe(){this.__data__=jb?jb(null):{},this.size=0}function TXe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function AXe(t){var e=this.__data__;if(jb){var r=e[t];return r===EXe?void 0:r}return CXe.call(e,t)?e[t]:void 0}function RXe(t){var e=this.__data__;return jb?e[t]!==void 0:LXe.call(e,t)}function IXe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=jb&&e===void 0?MXe:e,this}function ty(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function PXe(){this.__data__=[],this.size=0}function FXe(t,e){return t===e||t!==t&&e!==e}function $Xe(t,e){for(var r=t.length;r--;)if(Lme(t[r][0],e))return r;return-1}function VXe(t){var e=this.__data__,r=PS(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():GXe.call(e,r,1),--this.size,!0}function HXe(t){var e=this.__data__,r=PS(e,t);return r<0?void 0:e[r][1]}function qXe(t){return PS(this.__data__,t)>-1}function XXe(t,e){var r=this.__data__,n=PS(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function ry(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function JXe(){this.size=0,this.__data__={hash:new t0e,map:new(ZXe||KXe),string:new t0e}}function tje(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}function nje(t,e){var r=t.__data__;return rje(e)?r[typeof e=="string"?"string":"hash"]:r.map}function ije(t){var e=BS(this,t).delete(t);return this.size-=e?1:0,e}function sje(t){return BS(this,t).get(t)}function lje(t){return BS(this,t).has(t)}function uje(t,e){var r=BS(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}function ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function cB(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(fje);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(cB.Cache||Rme),r}function mje(t){var e=dje(t,function(n){return r.size===pje&&r.clear(),n}),r=e.cache;return e}function bje(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}function Ime(t){if(typeof t=="string")return t;if(OS(t))return Mme(t,Ime)+"";if(r4(t))return n0e?n0e.call(t):"";var e=t+"";return e=="0"&&1/t==-wje?"-0":e}function kje(t){return t==null?"":Tje(t)}function Eje(t,e){return OS(t)?t:YYe(t,e)?[t]:Nme(Ome(t))}function Cje(t){if(typeof t=="string"||r4(t))return t;var e=t+"";return e=="0"&&1/t==-Sje?"-0":e}function Aje(t,e){e=Pme(e,t);for(var r=0,n=e.length;t!=null&&r<n;)t=t[uB(e[r++])];return r&&r==n?t:void 0}function Dje(t,e,r){var n=t==null?void 0:_je(t,e);return n===void 0?r:n}function Nje(t,e,r){e=="__proto__"&&i0e?i0e(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}function Pje(t,e,r){var n=t[e];(!(Oje.call(t,e)&&Lme(n,r))||r===void 0&&!(e in t))&&Mje(t,e,r)}function zje(t,e){var r=typeof t;return e=e??Fje,!!e&&(r=="number"||r!="symbol"&&$je.test(t))&&t>-1&&t%1==0&&t<e}function Vje(t,e,r,n){if(!zp(t))return t;e=Pme(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i<a;){var u=uB(e[i]),h=r;if(u==="__proto__"||u==="constructor"||u==="prototype")return t;if(i!=s){var f=l[u];h=n?n(f,u,l):void 0,h===void 0&&(h=zp(f)?f:Gje(e[i+1])?[]:{})}Bje(l,u,h),l=l[u]}return t}function Hje(t,e,r){return t==null?t:Uje(t,e,r)}function qje(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}function Xje(t){return OS(t)?Mme(t,uB):r4(t)?[t]:Yje(Nme(Ome(t)))}function fB(t,e,r,n){for(var i=[],a=new J1,s=t.cy(),l=s.hasCompoundNodes(),u=0;u<t.length;u++){var h=t[u];r?i.push(h):l&&n(i,a,h)}for(;i.length>0;){var f=i.shift();e(f),a.add(f.id()),l&&n(i,a,f)}return t}function Fme(t,e,r){if(r.isParent())for(var n=r._private.children,i=0;i<n.length;i++){var a=n[i];e.has(a.id())||t.push(a)}}function $me(t,e,r){if(r.isChild()){var n=r._private.parent;e.has(n.id())||t.push(n)}}function dKe(t,e,r){$me(t,e,r),Fme(t,e,r)}function SP(t){return function(e){var r=this;if(e===void 0&&(e=!0),r.length!==0)if(r.isNode()&&!r.removed()){for(var n=0,i=r[0],a=i._private.edges,s=0;s<a.length;s++){var l=a[s];!e&&l.isLoop()||(n+=t(i,l))}return n}else return}}function F1(t,e){return function(r){for(var n,i=this.nodes(),a=0;a<i.length;a++){var s=i[a],l=s[t](r);l!==void 0&&(n===void 0||e(l,n))&&(n=l)}return n}}function Lb(){return!1}function rS(){return!0}function $S(){for(var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:NKe,e=arguments.length>1?arguments[1]:void 0,r=0;r<u0e.length;r++){var n=u0e[r];this[n]=t[n]||Xme[n]}this.context=e||this.context,this.listeners=[],this.emitting=0}function Jme(t,e,r){var n=r._private,i=n.styleCache=n.styleCache||[],a;return(a=i[t])!=null||(a=i[t]=e(r)),a}function zS(t,e){return t=_f(t),o(function(n){return Jme(t,e,n)},"cachedStyleFunction")}function GS(t,e){t=_f(t);var r=o(function(i){return e.call(i)},"selfFn");return o(function(){var i=this[0];if(i)return Jme(t,r,i)},"cachedPrototypeStyleFunction")}function AP(t,e){var r=t._private,n=r.data.parent?t.parents():null;if(n)for(var i=0;i<n.length;i++){var a=n[i];if(!e(a))return!1}return!0}function dB(t){var e=t.ok,r=t.edgeOkViaNode||t.ok,n=t.parentOk||t.ok;return function(){var i=this.cy();if(!i.styleEnabled())return!0;var a=this[0],s=i.hasCompoundNodes();if(a){var l=a._private;if(!e(a))return!1;if(a.isNode())return!s||AP(a,n);var u=l.source,h=l.target;return r(u)&&(!s||AP(u,r))&&(u===h||r(h)&&(!s||AP(h,r)))}}}function f0e(t){return function(){var e=arguments,r=[];if(e.length===2){var n=e[0],i=e[1];this.on(t.event,n,i)}else if(e.length===1&&si(e[0])){var a=e[0];this.on(t.event,a)}else if(e.length===0||e.length===1&&En(e[0])){for(var s=e.length===1?e[0]:null,l=0;l<this.length;l++){var u=this[l],h=!t.ableField||u._private[t.ableField],f=u._private[t.field]!=t.value;if(t.overrideAble){var d=t.overrideAble(u);if(d!==void 0&&(h=d,!d))return this}h&&(u._private[t.field]=t.value,f&&r.push(u))}var p=this.spawn(r);p.updateStyle(),p.emit(t.event),s&&p.emit(s)}return this}}function ay(t){Cf[t.field]=function(){var e=this[0];if(e){if(t.overrideField){var r=t.overrideField(e);if(r!==void 0)return r}return e._private[t.field]}},Cf[t.on]=f0e({event:t.on,field:t.field,ableField:t.ableField,overrideAble:t.overrideAble,value:!0}),Cf[t.off]=f0e({event:t.off,field:t.field,ableField:t.ableField,overrideAble:t.overrideAble,value:!1})}function g0e(t){return o(function(r){for(var n=[],i=0;i<this.length;i++){var a=this[i],s=a._private[t.attr];s&&n.push(s)}return this.spawn(n,!0).filter(r)},"sourceImpl")}function y0e(t){return o(function(r){var n=[],i=this._private.cy,a=t||{};Zt(r)&&(r=i.$(r));for(var s=0;s<r.length;s++)for(var l=r[s]._private.edges,u=0;u<l.length;u++){var h=l[u],f=h._private.data,d=this.hasElementWithId(f.source)&&r.hasElementWithId(f.target),p=r.hasElementWithId(f.source)&&this.hasElementWithId(f.target),m=d||p;m&&((a.thisIsSrc||a.thisIsTgt)&&(a.thisIsSrc&&!d||a.thisIsTgt&&!p)||n.push(h))}return this.spawn(n,!0)},"edgesWithImpl")}function v0e(t){var e={codirected:!1};return t=rr({},e,t),o(function(n){for(var i=[],a=this.edges(),s=t,l=0;l<a.length;l++)for(var u=a[l],h=u._private,f=h.source,d=f._private.data.id,p=h.data.target,m=f._private.edges,g=0;g<m.length;g++){var y=m[g],v=y._private.data,x=v.target,b=v.source,w=x===p&&b===d,C=d===x&&p===b;(s.codirected&&w||!s.codirected&&(w||C))&&i.push(y)}return this.spawn(i,!0).filter(n)},"parallelEdgesImpl")}function UKe(t,e,r,n){var i=4,a=.001,s=1e-7,l=10,u=11,h=1/(u-1),f=typeof Float32Array<"u";if(arguments.length!==4)return!1;for(var d=0;d<4;++d)if(typeof arguments[d]!="number"||isNaN(arguments[d])||!isFinite(arguments[d]))return!1;t=Math.min(t,1),r=Math.min(r,1),t=Math.max(t,0),r=Math.max(r,0);var p=f?new Float32Array(u):new Array(u);function m(I,D){return 1-3*D+3*I}o(m,"A");function g(I,D){return 3*D-6*I}o(g,"B");function y(I){return 3*I}o(y,"C");function v(I,D,k){return((m(D,k)*I+g(D,k))*I+y(D))*I}o(v,"calcBezier");function x(I,D,k){return 3*m(D,k)*I*I+2*g(D,k)*I+y(D)}o(x,"getSlope");function b(I,D){for(var k=0;k<i;++k){var L=x(D,t,r);if(L===0)return D;var R=v(D,t,r)-I;D-=R/L}return D}o(b,"newtonRaphsonIterate");function w(){for(var I=0;I<u;++I)p[I]=v(I*h,t,r)}o(w,"calcSampleValues");function C(I,D,k){var L,R,O=0;do R=D+(k-D)/2,L=v(R,t,r)-I,L>0?k=R:D=R;while(Math.abs(L)>s&&++O<l);return R}o(C,"binarySubdivide");function T(I){for(var D=0,k=1,L=u-1;k!==L&&p[k]<=I;++k)D+=h;--k;var R=(I-p[k])/(p[k+1]-p[k]),O=D+R*h,M=x(O,t,r);return M>=a?b(I,O):M===0?O:C(I,D,D+h)}o(T,"getTForX");var E=!1;function A(){E=!0,(t!==e||r!==n)&&w()}o(A,"precompute");var S=o(function(D){return E||A(),t===e&&r===n?D:D===0?0:D===1?1:v(T(D),e,n)},"f");S.getControlPoints=function(){return[{x:t,y:e},{x:r,y:n}]};var _="generateBezier("+[t,e,r,n]+")";return S.toString=function(){return _},S}function x0e(t,e,r,n,i){if(n===1||e===r)return r;var a=i(e,r,n);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function b0e(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function $1(t,e,r,n,i){var a=i!=null?i.type:null;r<0?r=0:r>1&&(r=1);var s=b0e(t,i),l=b0e(e,i);if(Ct(s)&&Ct(l))return x0e(a,s,l,r,n);if(En(s)&&En(l)){for(var u=[],h=0;h<l.length;h++){var f=s[h],d=l[h];if(f!=null&&d!=null){var p=x0e(a,f,d,r,n);u.push(p)}else u.push(d)}return u}}function WKe(t,e,r,n){var i=!n,a=t._private,s=e._private,l=s.easing,u=s.startTime,h=n?t:t.cy(),f=h.style();if(!s.easingImpl)if(l==null)s.easingImpl=dS.linear;else{var d;if(Zt(l)){var p=f.parse("transition-timing-function",l);d=p.value}else d=l;var m,g;Zt(d)?(m=d,g=[]):(m=d[1],g=d.slice(2).map(function(P){return+P})),g.length>0?(m==="spring"&&g.push(s.duration),s.easingImpl=dS[m].apply(null,g)):s.easingImpl=dS[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&i&&!t.locked()){var w={};Rb(x.x,b.x)&&(w.x=$1(x.x,b.x,v,y)),Rb(x.y,b.y)&&(w.y=$1(x.y,b.y,v,y)),t.position(w)}var C=s.startPan,T=s.pan,E=a.pan,A=T!=null&&n;A&&(Rb(C.x,T.x)&&(E.x=$1(C.x,T.x,v,y)),Rb(C.y,T.y)&&(E.y=$1(C.y,T.y,v,y)),t.emit("pan"));var S=s.startZoom,_=s.zoom,I=_!=null&&n;I&&(Rb(S,_)&&(a.zoom=Yb(a.minZoom,$1(S,_,v,y),a.maxZoom)),t.emit("zoom")),(A||I)&&t.emit("viewport");var D=s.style;if(D&&D.length>0&&i){for(var k=0;k<D.length;k++){var L=D[k],R=L.name,O=L,M=s.startStyle[R],B=f.properties[M.name],F=$1(M,O,v,y,B);f.overrideBypass(t,R,F)}t.emit("style")}}return s.progress=v,v}function Rb(t,e){return t==null||e==null?!1:Ct(t)&&Ct(e)?!0:!!(t&&e)}function qKe(t,e,r,n){var i=e._private;i.started=!0,i.startTime=r-i.progress*i.duration}function w0e(t,e){var r=e._private.aniEles,n=[];function i(f,d){var p=f._private,m=p.animation.current,g=p.animation.queue,y=!1;if(m.length===0){var v=g.shift();v&&m.push(v)}for(var x=o(function(E){for(var A=E.length-1;A>=0;A--){var S=E[A];S()}E.splice(0,E.length)},"callbacks"),b=m.length-1;b>=0;b--){var w=m[b],C=w._private;if(C.stopped){m.splice(b,1),C.hooked=!1,C.playing=!1,C.started=!1,x(C.frames);continue}!C.playing&&!C.applying||(C.playing&&C.applying&&(C.applying=!1),C.started||qKe(f,w,t),WKe(f,w,t,d),C.applying&&(C.applying=!1),x(C.frames),C.step!=null&&C.step(t),w.completed()&&(m.splice(b,1),C.hooked=!1,C.playing=!1,C.started=!1,x(C.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&n.push(f),y}o(i,"stepOne");for(var a=!1,s=0;s<r.length;s++){var l=r[s],u=i(l);a=a||u}var h=i(e,!0);(a||h)&&(r.length>0?e.notify("draw",r):e.notify("draw")),r.unmerge(n),e.emit("step")}function tge(t){this.options=rr({},eQe,tQe,t)}function rge(t){this.options=rr({},rQe,t)}function nge(t){this.options=rr({},nQe,t)}function HS(t){this.options=rr({},iQe,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),n=r.filter(function(i){var a=i.source().data("id"),s=i.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(n)}function age(t){this.options=rr({},wQe,t)}function gB(t){this.options=rr({},TQe,t)}function sge(t){this.options=rr({},kQe,t)}function oge(t){this.options=rr({},EQe,t)}function lge(t){this.options=t,this.notifications=0}function hge(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function vB(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return n===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(AQe(t,e,r,n,i),{cx:HP,cy:WP,radius:Bp,startX:cge,startY:uge,stopX:qP,stopY:YP,startAngle:qc.ang+Math.PI/2*Fp,endAngle:Jo.ang-Math.PI/2*Fp,counterClockwise:gS})}function fge(t){var e=[];if(t!=null){for(var r=0;r<t.length;r+=2){var n=t[r],i=t[r+1];e.push({x:n,y:i})}return e}}function _Qe(t,e,r){for(var n=o(function(h,f,d,p){return oa(h,f,d,p)},"qbezierAt$1"),i=e._private,a=i.rstyle.bezierPts,s=0;s<t.bezierProjPcts.length;s++){var l=t.bezierProjPcts[s];a.push({x:n(r[0],r[2],r[4],l),y:n(r[1],r[3],r[5],l)})}}function iZe(t,e){for(var r=0;r<e.length;r++){var n=e[r];t.lineTo(n.x,n.y)}}function aZe(t,e,r){for(var n,i=0;i<e.length;i++){var a=e[i];i===0&&(n=a),t.lineTo(a.x,a.y)}t.quadraticCurveTo(r.x,r.y,n.x,n.y)}function $0e(t,e,r){t.beginPath&&t.beginPath();for(var n=e,i=0;i<n.length;i++){var a=n[i];t.lineTo(a.x,a.y)}var s=r,l=r[0];t.moveTo(l.x,l.y);for(var i=1;i<s.length;i++){var a=s[i];t.lineTo(a.x,a.y)}t.closePath&&t.closePath()}function sZe(t,e,r,n,i){t.beginPath&&t.beginPath(),t.arc(r,n,i,0,Math.PI*2,!1);var a=e,s=a[0];t.moveTo(s.x,s.y);for(var l=0;l<a.length;l++){var u=a[l];t.lineTo(u.x,u.y)}t.closePath&&t.closePath()}function oZe(t,e,r,n){t.arc(e,r,n,0,Math.PI*2,!1)}function RP(t,e,r,n,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5,s=arguments.length>6?arguments[6]:void 0;t.beginPath(),t.moveTo(e+a,r),t.lineTo(e+n-a,r),t.quadraticCurveTo(e+n,r,e+n,r+a),t.lineTo(e+n,r+i-a),t.quadraticCurveTo(e+n,r+i,e+n-a,r+i),t.lineTo(e+a,r+i),t.quadraticCurveTo(e,r+i,e,r+i-a),t.lineTo(e,r+a),t.quadraticCurveTo(e,r,e+a,r),t.closePath(),s?t.stroke():t.fill()}function z0e(t,e,r){var n=t.createShader(e);if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error(t.getShaderInfoLog(n));return n}function pZe(t,e,r){var n=z0e(t,t.VERTEX_SHADER,e),i=z0e(t,t.FRAGMENT_SHADER,r),a=t.createProgram();if(t.attachShader(a,n),t.attachShader(a,i),t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS))throw new Error("Could not initialize shaders");return a}function mZe(t,e,r){r===void 0&&(r=e);var n=t.makeOffscreenCanvas(e,r),i=n.context=n.getContext("2d");return n.clear=function(){return i.clearRect(0,0,n.width,n.height)},n.clear(),n}function wB(t){var e=t.pixelRatio,r=t.cy.zoom(),n=t.cy.pan();return{zoom:r*e,pan:{x:n.x*e,y:n.y*e}}}function NP(t,e,r,n,i){var a=n*r+e.x,s=i*r+e.y;return s=Math.round(t.canvasHeight-s),[a,s]}function oS(t,e,r){var n=t[0]/255,i=t[1]/255,a=t[2]/255,s=e,l=r||new Array(4);return l[0]=n*s,l[1]=i*s,l[2]=a*s,l[3]=s,l}function lS(t,e){var r=e||new Array(4);return r[0]=(t>>0&255)/255,r[1]=(t>>8&255)/255,r[2]=(t>>16&255)/255,r[3]=(t>>24&255)/255,r}function gZe(t){return t[0]+(t[1]<<8)+(t[2]<<16)+(t[3]<<24)}function yZe(t,e){var r=t.createTexture();return r.buffer=function(n){t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_NEAREST),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n),t.generateMipmap(t.TEXTURE_2D),t.bindTexture(t.TEXTURE_2D,null)},r.deleteTexture=function(){t.deleteTexture(r)},r}function Sge(t,e){switch(e){case"float":return[1,t.FLOAT,4];case"vec2":return[2,t.FLOAT,4];case"vec3":return[3,t.FLOAT,4];case"vec4":return[4,t.FLOAT,4];case"int":return[1,t.INT,4];case"ivec2":return[2,t.INT,4]}}function Cge(t,e,r){switch(e){case t.FLOAT:return new Float32Array(r);case t.INT:return new Int32Array(r)}}function vZe(t,e,r,n,i,a){switch(e){case t.FLOAT:return new Float32Array(r.buffer,a*n,i);case t.INT:return new Int32Array(r.buffer,a*n,i)}}function xZe(t,e,r,n){var i=Sge(t,e),a=_i(i,2),s=a[0],l=a[1],u=Cge(t,l,n),h=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,u,t.STATIC_DRAW),l===t.FLOAT?t.vertexAttribPointer(r,s,l,!1,0,0):l===t.INT&&t.vertexAttribIPointer(r,s,l,0,0),t.enableVertexAttribArray(r),t.bindBuffer(t.ARRAY_BUFFER,null),h}function po(t,e,r,n){var i=Sge(t,r),a=_i(i,3),s=a[0],l=a[1],u=a[2],h=Cge(t,l,e*s),f=s*u,d=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,d),t.bufferData(t.ARRAY_BUFFER,e*f,t.DYNAMIC_DRAW),t.enableVertexAttribArray(n),l===t.FLOAT?t.vertexAttribPointer(n,s,l,!1,f,0):l===t.INT&&t.vertexAttribIPointer(n,s,l,f,0),t.vertexAttribDivisor(n,1),t.bindBuffer(t.ARRAY_BUFFER,null);for(var p=new Array(e),m=0;m<e;m++)p[m]=vZe(t,l,h,f,s,m);return d.dataArray=h,d.stride=f,d.size=s,d.getView=function(g){return p[g]},d.setPoint=function(g,y,v){var x=p[g];x[0]=y,x[1]=v},d.bufferSubData=function(g){t.bindBuffer(t.ARRAY_BUFFER,d),g?t.bufferSubData(t.ARRAY_BUFFER,0,h,0,g*s):t.bufferSubData(t.ARRAY_BUFFER,0,h)},d}function bZe(t){var e=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,e);var r=t.createTexture();return t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0),t.bindFramebuffer(t.FRAMEBUFFER,null),e.setFramebufferAttachmentSizes=function(n,i){t.bindTexture(t.TEXTURE_2D,r),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,n,i,0,t.RGBA,t.UNSIGNED_BYTE,null)},e}function Gb(){var t=new G0e(9);return G0e!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}function Age(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t}function wZe(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=r[0],m=r[1],g=r[2],y=r[3],v=r[4],x=r[5],b=r[6],w=r[7],C=r[8];return t[0]=p*n+m*s+g*h,t[1]=p*i+m*l+g*f,t[2]=p*a+m*u+g*d,t[3]=y*n+v*s+x*h,t[4]=y*i+v*l+x*f,t[5]=y*a+v*u+x*d,t[6]=b*n+w*s+C*h,t[7]=b*i+w*l+C*f,t[8]=b*a+w*u+C*d,t}function DS(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=r[0],m=r[1];return t[0]=n,t[1]=i,t[2]=a,t[3]=s,t[4]=l,t[5]=u,t[6]=p*n+m*s+h,t[7]=p*i+m*l+f,t[8]=p*a+m*u+d,t}function _ge(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=Math.sin(r),m=Math.cos(r);return t[0]=m*n+p*s,t[1]=m*i+p*l,t[2]=m*a+p*u,t[3]=m*s-p*n,t[4]=m*l-p*i,t[5]=m*u-p*a,t[6]=h,t[7]=f,t[8]=d,t}function TB(t,e,r){var n=r[0],i=r[1];return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=i*e[3],t[4]=i*e[4],t[5]=i*e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function TZe(t,e,r){return t[0]=2/e,t[1]=0,t[2]=0,t[3]=0,t[4]=-2/r,t[5]=0,t[6]=-1,t[7]=1,t[8]=1,t}function SZe(t,e){return t.intersection?t.intersection(e):new Set(j0e(t).filter(function(r){return e.has(r)}))}function H0e(t,e){return"rgba(".concat(t[0],", ").concat(t[1],", ").concat(t[2],", ").concat(e,")")}function DZe(t){var e=t&&t.style&&t.style.backgroundColor||"white";return tme(e)}function LZe(t){{var e=t.render;t.render=function(a){a=a||{};var s=t.cy;t.webgl&&(s.zoom()>bge?(RZe(t),e.call(t,a)):(NZe(t),Rge(t,a,Vb.SCREEN)))}}{var r=t.matchCanvasSize;t.matchCanvasSize=function(a){r.call(t,a),t.pickingFrameBuffer.setFramebufferAttachmentSizes(t.canvasWidth,t.canvasHeight),t.pickingFrameBuffer.needsDraw=!0}}t.findNearestElements=function(a,s,l,u){return FZe(t,a,s)};{var n=t.invalidateCachedZSortedEles;t.invalidateCachedZSortedEles=function(){n.call(t),t.pickingFrameBuffer.needsDraw=!0}}{var i=t.notify;t.notify=function(a,s){i.call(t,a,s),a==="viewport"||a==="bounds"?t.pickingFrameBuffer.needsDraw=!0:a==="background"&&t.eleDrawing.invalidate(s,{type:"node-body"})}}}function RZe(t){var e=t.data.contexts[t.WEBGL];e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function NZe(t){var e=o(function(n){n.save(),n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,t.canvasWidth,t.canvasHeight),n.restore()},"clear");e(t.data.contexts[t.NODE]),e(t.data.contexts[t.DRAG])}function MZe(t){var e=t.canvasWidth,r=t.canvasHeight,n=wB(t),i=n.pan,a=n.zoom,s=Gb();DS(s,s,[i.x,i.y]),TB(s,s,[a,a]);var l=Gb();TZe(l,e,r);var u=Gb();return wZe(u,l,s),u}function Lge(t,e){var r=t.canvasWidth,n=t.canvasHeight,i=wB(t),a=i.pan,s=i.zoom;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,r,n),e.translate(a.x,a.y),e.scale(s,s)}function IZe(t,e){t.drawSelectionRectangle(e,function(r){return Lge(t,r)})}function OZe(t){var e=t.data.contexts[t.NODE];e.save(),Lge(t,e),e.strokeStyle="rgba(0, 0, 0, 0.3)",e.beginPath(),e.moveTo(-1e3,0),e.lineTo(1e3,0),e.stroke(),e.beginPath(),e.moveTo(0,-1e3),e.lineTo(0,1e3),e.stroke(),e.restore()}function PZe(t){var e=o(function(i,a,s){for(var l=i.atlasManager.getRenderTypeOpts(a),u=t.data.contexts[t.NODE],h=.125,f=l.atlasCollection.atlases,d=0;d<f.length;d++){var p=f[d],m=p.canvas,g=m.width,y=m.height,v=g*d,x=m.height*s;u.save(),u.scale(h,h),u.drawImage(m,v,x),u.strokeStyle="black",u.rect(v,x,g,y),u.stroke(),u.restore()}},"draw"),r=0;e(t.eleDrawing,"node-body",r++),e(t.eleDrawing,"node-label",r++)}function BZe(t,e,r,n,i){var a,s,l,u,h=wB(t),f=h.pan,d=h.zoom;if(n===void 0||i===void 0){var p=NP(t,f,d,e,r),m=_i(p,2),g=m[0],y=m[1],v=6;a=g-v/2,s=y-v/2,l=v,u=v}else{var x=NP(t,f,d,e,r),b=_i(x,2),w=b[0],C=b[1],T=NP(t,f,d,n,i),E=_i(T,2),A=E[0],S=E[1];a=w,s=S,l=Math.abs(A-w),u=Math.abs(S-C)}if(l===0||u===0)return[];var _=t.data.contexts[t.WEBGL];_.bindFramebuffer(_.FRAMEBUFFER,t.pickingFrameBuffer),t.pickingFrameBuffer.needsDraw&&(_.viewport(0,0,_.canvas.width,_.canvas.height),Rge(t,null,Vb.PICKING),t.pickingFrameBuffer.needsDraw=!1);var I=l*u,D=new Uint8Array(I*4);_.readPixels(a,s,l,u,_.RGBA,_.UNSIGNED_BYTE,D),_.bindFramebuffer(_.FRAMEBUFFER,null);for(var k=new Set,L=0;L<I;L++){var R=D.slice(L*4,L*4+4),O=gZe(R)-1;O>=0&&k.add(O)}return k}function FZe(t,e,r){var n=BZe(t,e,r),i=t.getCachedZSortedEles(),a,s,l=mo(n),u;try{for(l.s();!(u=l.n()).done;){var h=u.value,f=i[h];if(!a&&f.isNode()&&(a=f),!s&&f.isEdge()&&(s=f),a&&s)break}}catch(d){l.e(d)}finally{l.f()}return[a,s].filter(Boolean)}function Rge(t,e,r){var n,i;t.webglDebug&&(i=[],n=performance.now());var a=t.eleDrawing,s=0;if(r.screen&&t.data.canvasNeedsRedraw[t.SELECT_BOX]&&IZe(t,e),t.data.canvasNeedsRedraw[t.NODE]||r.picking){var l=o(function(k,L){L+=1,k.isNode()?(a.drawTexture(k,L,"node-underlay"),a.drawTexture(k,L,"node-body"),a.drawTexture(k,L,"node-label"),a.drawTexture(k,L,"node-overlay")):(a.drawEdgeLine(k,L),a.drawEdgeArrow(k,L,"source"),a.drawEdgeArrow(k,L,"target"),a.drawTexture(k,L,"edge-label"))},"draw"),u=t.data.contexts[t.WEBGL];r.screen?(u.clearColor(0,0,0,0),u.enable(u.BLEND),u.blendFunc(u.ONE,u.ONE_MINUS_SRC_ALPHA)):u.disable(u.BLEND),u.clear(u.COLOR_BUFFER_BIT|u.DEPTH_BUFFER_BIT),u.viewport(0,0,u.canvas.width,u.canvas.height);var h=MZe(t),f=t.getCachedZSortedEles();if(s=f.length,a.startFrame(h,i,r),r.screen){for(var d=0;d<f.nondrag.length;d++)l(f.nondrag[d],d);for(var p=0;p<f.drag.length;p++)l(f.drag[p],-1)}else if(r.picking)for(var m=0;m<f.length;m++)l(f[m],m);a.endFrame(),t.data.gc&&(console.log("Garbage Collect!"),t.data.gc=!1,a.gc()),r.screen&&t.webglDebugShowAtlases&&(OZe(t),PZe(t)),t.data.canvasNeedsRedraw[t.NODE]=!1,t.data.canvasNeedsRedraw[t.DRAG]=!1}if(t.webglDebug){var g=performance.now(),y=!0,v=0,x=0,b=mo(i),w;try{for(b.s();!(w=b.n()).done;){var C=w.value;v++,x+=C.count}}catch(D){b.e(D)}finally{b.f()}var T=Math.ceil(g-n),E="".concat(s," elements, ").concat(x," rectangles, ").concat(v," batches");if(y)console.log("WebGL (".concat(r.name,") - ").concat(E));else{console.log("WebGL render (".concat(r.name,") - frame time ").concat(T,"ms")),console.log(" ".concat(E)),console.log("Texture Atlases Used:");var A=a.getAtlasDebugInfo(),S=mo(A),_;try{for(S.s();!(_=S.n()).done;){var I=_.value;console.log(" ".concat(I.type,": ").concat(I.keyCount," keys, ").concat(I.atlasCount," atlases"))}}catch(D){S.e(D)}finally{S.f()}console.log("")}}}function $Ze(t,e){for(var r=atob(t),n=new ArrayBuffer(r.length),i=new Uint8Array(n),a=0;a<r.length;a++)i[a]=r.charCodeAt(a);return new Blob([n],{type:e})}function Y0e(t){var e=t.indexOf(",");return t.substr(e+1)}function Mge(t,e,r){var n=o(function(){return e.toDataURL(r,t.quality)},"getB64Uri");switch(t.output){case"blob-promise":return new ey(function(i,a){try{e.toBlob(function(s){s!=null?i(s):a(new Error("`canvas.toBlob()` sent a null value in its callback"))},r,t.quality)}catch(s){a(s)}});case"blob":return $Ze(Y0e(n()),r);case"base64":return Y0e(n());case"base64uri":default:return n()}}function Oge(t){var e=this,r=e.cy.window(),n=r.document;t.webgl&&(Er.CANVAS_LAYERS=e.CANVAS_LAYERS=4,console.log("webgl rendering enabled")),e.data={canvases:new Array(Er.CANVAS_LAYERS),contexts:new Array(Er.CANVAS_LAYERS),canvasNeedsRedraw:new Array(Er.CANVAS_LAYERS),bufferCanvases:new Array(Er.BUFFER_COUNT),bufferContexts:new Array(Er.CANVAS_LAYERS)};var i="-webkit-tap-highlight-color",a="rgba(0,0,0,0)";e.data.canvasContainer=n.createElement("div");var s=e.data.canvasContainer.style;e.data.canvasContainer.style[i]=a,s.position="relative",s.zIndex="0",s.overflow="hidden";var l=t.cy.container();l.appendChild(e.data.canvasContainer),l.style[i]=a;var u={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};iWe()&&(u["-ms-touch-action"]="none",u["touch-action"]="none");for(var h=0;h<Er.CANVAS_LAYERS;h++){var f=e.data.canvases[h]=n.createElement("canvas"),d=Er.CANVAS_TYPES[h];e.data.contexts[h]=f.getContext(d),e.data.contexts[h]||ai("Could not create canvas of type "+d),Object.keys(u).forEach(function(K){f.style[K]=u[K]}),f.style.position="absolute",f.setAttribute("data-id","layer"+h),f.style.zIndex=String(Er.CANVAS_LAYERS-h),e.data.canvasContainer.appendChild(f),e.data.canvasNeedsRedraw[h]=!1}e.data.topCanvas=e.data.canvases[0],e.data.canvases[Er.NODE].setAttribute("data-id","layer"+Er.NODE+"-node"),e.data.canvases[Er.SELECT_BOX].setAttribute("data-id","layer"+Er.SELECT_BOX+"-selectbox"),e.data.canvases[Er.DRAG].setAttribute("data-id","layer"+Er.DRAG+"-drag"),e.data.canvases[Er.WEBGL]&&e.data.canvases[Er.WEBGL].setAttribute("data-id","layer"+Er.WEBGL+"-webgl");for(var h=0;h<Er.BUFFER_COUNT;h++)e.data.bufferCanvases[h]=n.createElement("canvas"),e.data.bufferContexts[h]=e.data.bufferCanvases[h].getContext("2d"),e.data.bufferCanvases[h].style.position="absolute",e.data.bufferCanvases[h].setAttribute("data-id","buffer"+h),e.data.bufferCanvases[h].style.zIndex=String(-h-1),e.data.bufferCanvases[h].style.visibility="hidden";e.pathsEnabled=!0;var p=Hs(),m=o(function(X){return{x:(X.x1+X.x2)/2,y:(X.y1+X.y2)/2}},"getBoxCenter"),g=o(function(X){return{x:-X.w/2,y:-X.h/2}},"getCenterOffset"),y=o(function(X){var te=X[0]._private,J=te.oldBackgroundTimestamp===te.backgroundTimestamp;return!J},"backgroundTimestampHasChanged"),v=o(function(X){return X[0]._private.nodeKey},"getStyleKey"),x=o(function(X){return X[0]._private.labelStyleKey},"getLabelKey"),b=o(function(X){return X[0]._private.sourceLabelStyleKey},"getSourceLabelKey"),w=o(function(X){return X[0]._private.targetLabelStyleKey},"getTargetLabelKey"),C=o(function(X,te,J,se,ue){return e.drawElement(X,te,J,!1,!1,ue)},"drawElement"),T=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"main",ue)},"drawLabel"),E=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"source",ue)},"drawSourceLabel"),A=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"target",ue)},"drawTargetLabel"),S=o(function(X){return X.boundingBox(),X[0]._private.bodyBounds},"getElementBox"),_=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.main||p},"getLabelBox"),I=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.source||p},"getSourceLabelBox"),D=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.target||p},"getTargetLabelBox"),k=o(function(X,te){return te},"isLabelVisibleAtScale"),L=o(function(X){return m(S(X))},"getElementRotationPoint"),R=o(function(X,te,J){var se=X?X+"-":"";return{x:te.x+J.pstyle(se+"text-margin-x").pfValue,y:te.y+J.pstyle(se+"text-margin-y").pfValue}},"addTextMargin"),O=o(function(X,te,J){var se=X[0]._private.rscratch;return{x:se[te],y:se[J]}},"getRsPt"),M=o(function(X){return R("",O(X,"labelX","labelY"),X)},"getLabelRotationPoint"),B=o(function(X){return R("source",O(X,"sourceLabelX","sourceLabelY"),X)},"getSourceLabelRotationPoint"),F=o(function(X){return R("target",O(X,"targetLabelX","targetLabelY"),X)},"getTargetLabelRotationPoint"),P=o(function(X){return g(S(X))},"getElementRotationOffset"),z=o(function(X){return g(I(X))},"getSourceLabelRotationOffset"),$=o(function(X){return g(D(X))},"getTargetLabelRotationOffset"),H=o(function(X){var te=_(X),J=g(_(X));if(X.isNode()){switch(X.pstyle("text-halign").value){case"left":J.x=-te.w-(te.leftPad||0);break;case"right":J.x=-(te.rightPad||0);break}switch(X.pstyle("text-valign").value){case"top":J.y=-te.h-(te.topPad||0);break;case"bottom":J.y=-(te.botPad||0);break}}return J},"getLabelRotationOffset"),Q=e.data.eleTxrCache=new Fb(e,{getKey:v,doesEleInvalidateKey:y,drawElement:C,getBoundingBox:S,getRotationPoint:L,getRotationOffset:P,allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),j=e.data.lblTxrCache=new Fb(e,{getKey:x,drawElement:T,getBoundingBox:_,getRotationPoint:M,getRotationOffset:H,isVisible:k}),ie=e.data.slbTxrCache=new Fb(e,{getKey:b,drawElement:E,getBoundingBox:I,getRotationPoint:B,getRotationOffset:z,isVisible:k}),ne=e.data.tlbTxrCache=new Fb(e,{getKey:w,drawElement:A,getBoundingBox:D,getRotationPoint:F,getRotationOffset:$,isVisible:k}),le=e.data.lyrTxrCache=new wge(e);e.onUpdateEleCalcs(o(function(X,te){Q.invalidateElements(te),j.invalidateElements(te),ie.invalidateElements(te),ne.invalidateElements(te),le.invalidateElements(te);for(var J=0;J<te.length;J++){var se=te[J]._private;se.oldBackgroundTimestamp=se.backgroundTimestamp}},"invalidateTextureCaches"));var he=o(function(X){for(var te=0;te<X.length;te++)le.enqueueElementRefinement(X[te].ele)},"refineInLayers");Q.onDequeue(he),j.onDequeue(he),ie.onDequeue(he),ne.onDequeue(he),t.webgl&&e.initWebgl(t,{getStyleKey:v,getLabelKey:x,drawElement:C,drawLabel:T,getElementBox:S,getLabelBox:_,getElementRotationPoint:L,getElementRotationOffset:P,getLabelRotationPoint:M,getLabelRotationOffset:H})}function Fge(t,e,r){var n=r,i=o(function(S){un("Can not register `"+e+"` for `"+t+"` since `"+S+"` already exists in the prototype and can not be overridden")},"overrideErr");if(t==="core"){if(Jb.prototype[e])return i(e);Jb.prototype[e]=r}else if(t==="collection"){if(ka.prototype[e])return i(e);ka.prototype[e]=r}else if(t==="layout"){for(var a=o(function(S){this.options=S,r.call(this,S),Ur(this._private)||(this._private={}),this._private.cy=S.cy,this._private.listeners=[],this.createEmitter()},"Layout"),s=a.prototype=Object.create(r.prototype),l=[],u=0;u<l.length;u++){var h=l[u];s[h]=s[h]||function(){return this}}s.start&&!s.run?s.run=function(){return this.start(),this}:!s.start&&s.run&&(s.start=function(){return this.run(),this});var f=r.prototype.stop;s.stop=function(){var A=this.options;if(A&&A.animate){var S=this.animations;if(S)for(var _=0;_<S.length;_++)S[_].stop()}return f?f.call(this):this.emit("layoutstop"),this},s.destroy||(s.destroy=function(){return this}),s.cy=function(){return this._private.cy};var d=o(function(S){return S._private.cy},"getCy"),p={addEventFields:o(function(S,_){_.layout=S,_.cy=d(S),_.target=S},"addEventFields"),bubble:o(function(){return!0},"bubble"),parent:o(function(S){return d(S)},"parent")};rr(s,{createEmitter:o(function(){return this._private.emitter=new $S(p,this),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(S,_){return this.emitter().on(S,_),this},"on"),one:o(function(S,_){return this.emitter().one(S,_),this},"one"),once:o(function(S,_){return this.emitter().one(S,_),this},"once"),removeListener:o(function(S,_){return this.emitter().removeListener(S,_),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),emit:o(function(S,_){return this.emitter().emit(S,_),this},"emit")}),cn.eventAliasesOn(s),n=a}else if(t==="renderer"&&e!=="null"&&e!=="base"){var m=$ge("renderer","base"),g=m.prototype,y=r,v=r.prototype,x=o(function(){m.apply(this,arguments),y.apply(this,arguments)},"Renderer"),b=x.prototype;for(var w in g){var C=g[w],T=v[w]!=null;if(T)return i(w);b[w]=C}for(var E in v)b[E]=v[E];g.clientFunctions.forEach(function(A){b[A]=b[A]||function(){ai("Renderer does not implement `renderer."+A+"()` on its prototype")}}),n=x}else if(t==="__proto__"||t==="constructor"||t==="prototype")return ai(t+" is an illegal type to be registered, possibly lead to prototype pollutions");return rme({map:Pge,keys:[t,e],value:n})}function $ge(t,e){return nme({map:Pge,keys:[t,e]})}function HZe(t,e,r,n,i){return rme({map:Bge,keys:[t,e,r,n],value:i})}function WZe(t,e,r,n){return nme({map:Bge,keys:[t,e,r,n]})}var Ui,Lpe,jHe,K0e,KHe,QHe,e4,Zt,si,En,Ur,ZHe,Ct,JHe,vS,go,t4,Q0e,JP,Z0e,eWe,Af,tWe,rWe,nWe,iWe,Ub,eB,LS,J0e,Rpe,Hi,aWe,sWe,oWe,lWe,cWe,uWe,eme,hWe,rr,fWe,dWe,pWe,mWe,tme,gWe,rme,nme,zp,Ib,xWe,bWe,wWe,TWe,RS,kWe,xP,EWe,CWe,AWe,DWe,LWe,j1,ime,RWe,NWe,Ab,IWe,OWe,PWe,FWe,$We,zWe,Npe,ame,UWe,HWe,r4,Mpe,qWe,YWe,XWe,jWe,Ipe,QWe,ZWe,JWe,n4,bP,sme,tqe,xS,Qu,V1,ome,Ob,lme,Hb,Wb,rqe,wf,j6,nqe,_f,cme,iqe,Ope,aqe,sqe,tB,ume,bS,Ppe,rB,ai,hme,un,oqe,Yc,lqe,fme,cqe,dme,la,Df,nB,uqe,Gl,kf,hqe,Xc,fqe,dqe,J1,NS,Bpe,qb,pqe,i4,mqe,gqe,yqe,vqe,xqe,bqe,wqe,Tqe,kqe,Eqe,Sqe,wP,Cqe,Aqe,MS,pme,U1,_qe,Dqe,Lqe,Rqe,Nqe,K6,iB,mme,Gp,Op,Mqe,oa,W1,Iqe,Yb,Hs,Oqe,Pqe,Bqe,gme,Fqe,cS,uS,Fpe,aB,K1,$qe,yme,vme,zqe,Gqe,Vqe,Uqe,Hqe,Wqe,Us,Zu,qqe,wS,TS,Yqe,$p,Pb,TP,Ef,Xb,Xqe,Q6,gs,xme,PP,Vp,bme,sB,jqe,BP,Kqe,Qqe,$pe,q1,zpe,Y1,Zqe,FP,Jqe,eYe,tYe,rYe,wme,nYe,iYe,aYe,sYe,oYe,lYe,cYe,Gpe,uYe,hYe,Tme,Vpe,Upe,fYe,dYe,_b,Q1,pYe,oB,kS,kP,kme,Eme,mYe,gYe,yYe,Hpe,Wpe,vYe,xYe,bYe,wYe,TYe,qpe,kYe,EYe,SYe,CYe,Ype,Z6,AYe,_Ye,Xpe,DYe,LYe,RYe,NYe,MYe,IYe,jpe,OYe,Kpe,PYe,BYe,FYe,J6,$Ye,eS,zYe,Sme,Cme,Ame,_me,Ju,Qpe,Dme,Zpe,Jpe,GYe,ey,$P,Up,VYe,UYe,OS,HYe,WYe,YYe,XYe,jYe,KYe,QYe,JYe,eXe,EP,e0e,rXe,nXe,iXe,sXe,oXe,lXe,cXe,uXe,hXe,fXe,dXe,mXe,yXe,lB,xXe,jb,wXe,kXe,EXe,SXe,CXe,_Xe,DXe,LXe,NXe,MXe,OXe,t0e,BXe,Lme,PS,zXe,GXe,UXe,WXe,YXe,jXe,KXe,QXe,ZXe,eje,rje,BS,aje,oje,cje,hje,Rme,fje,dje,pje,gje,yje,vje,xje,Nme,Mme,wje,r0e,n0e,Tje,Ome,Pme,Sje,uB,_je,Lje,Rje,i0e,Mje,Ije,Oje,Bje,Fje,$je,Gje,Uje,Wje,Yje,jje,Kje,Qje,cn,Zje,hS,Vr,mn,$t,zP,Jje,eKe,tKe,B1,Tf,GP,rKe,nKe,iKe,aKe,sKe,Bme,oKe,lKe,hB,cKe,fi,zn,uKe,hKe,fKe,Lf,Rf,Sf,tl,Z1,Kb,zme,pKe,FS,Vl,Gme,Vme,a0e,mKe,X1,Of,el,zl,Pp,Db,tS,CP,gKe,yKe,Ume,Hme,s0e,Qb,o0e,l0e,vKe,Bb,a4,Wme,xKe,bKe,wKe,TKe,kKe,EKe,SKe,CKe,AKe,c0e,_Ke,DKe,LKe,qme,Yme,RKe,Xme,u0e,NKe,Nf,jme,h0e,MKe,IKe,nS,Kme,Qme,Qr,OKe,Zme,ES,PKe,BKe,fS,Ta,iy,FKe,$Ke,zKe,GKe,Cf,$a,d0e,p0e,m0e,ka,Mn,VKe,HKe,Nn,dS,YKe,XKe,iS,ege,VP,pS,jKe,KKe,UP,mS,Ga,$b,QKe,s4,pB,jc,VS,mB,wa,US,Fa,za,ZKe,JKe,Hp,Zb,Jb,SS,eQe,tQe,z1,T0e,rQe,nQe,_P,iQe,aQe,sQe,oQe,lQe,cQe,ige,uQe,hQe,fQe,k0e,dQe,pQe,CS,mQe,gQe,yQe,vQe,xQe,bQe,E0e,wQe,TQe,kQe,EQe,SQe,S0e,C0e,yB,qp,AS,HP,WP,qc,Jo,A0e,_0e,Fp,gS,Ku,Mp,Bp,Wc,G1,aS,cge,uge,qP,YP,D0e,L0e,CQe,AQe,Va,o4,xB,Kc,dge,pge,DQe,mge,R0e,N0e,WS,qS,gge,yge,sy,eh,l4,M0e,LQe,vge,oy,DP,xge,RQe,I0e,sS,yS,XP,bge,NQe,MQe,IQe,OQe,PQe,BQe,FQe,$Qe,zQe,GQe,VQe,UQe,HQe,H1,WQe,Fb,qi,qQe,zb,_S,YQe,XQe,jQe,KQe,QQe,ZQe,JQe,eZe,O0e,tZe,P0e,rZe,wge,Ea,B0e,nZe,Tge,F0e,Qc,lZe,cZe,uZe,hZe,fZe,LP,th,kge,bB,Yp,ly,Ege,ys,dZe,Nb,G0e,Vb,Mb,kZe,EZe,CZe,MP,V0e,U0e,IP,AZe,_Ze,Dge,Pf,W0e,q0e,jP,KP,Nge,Ip,c4,Ige,zZe,Er,GZe,VZe,UZe,Pge,Bge,QP,zge,Wp,qZe,rl,kB=N(()=>{"use strict";o(Wi,"_typeof");o(Mf,"_classCallCheck");o(Dpe,"_defineProperties");o(If,"_createClass");o(X0e,"_defineProperty$1");o(_i,"_slicedToArray");o(j0e,"_toConsumableArray");o(UHe,"_arrayWithoutHoles");o(HHe,"_arrayWithHoles");o(WHe,"_iterableToArray");o(qHe,"_iterableToArrayLimit");o(ZP,"_unsupportedIterableToArray");o(OP,"_arrayLikeToArray");o(YHe,"_nonIterableSpread");o(XHe,"_nonIterableRest");o(mo,"_createForOfIteratorHelper");Ui=typeof window>"u"?null:window,Lpe=Ui?Ui.navigator:null;Ui&&Ui.document;jHe=Wi(""),K0e=Wi({}),KHe=Wi(function(){}),QHe=typeof HTMLElement>"u"?"undefined":Wi(HTMLElement),e4=o(function(e){return e&&e.instanceString&&si(e.instanceString)?e.instanceString():null},"instanceStr"),Zt=o(function(e){return e!=null&&Wi(e)==jHe},"string"),si=o(function(e){return e!=null&&Wi(e)===KHe},"fn"),En=o(function(e){return!go(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),Ur=o(function(e){return e!=null&&Wi(e)===K0e&&!En(e)&&e.constructor===Object},"plainObject"),ZHe=o(function(e){return e!=null&&Wi(e)===K0e},"object"),Ct=o(function(e){return e!=null&&Wi(e)===Wi(1)&&!isNaN(e)},"number"),JHe=o(function(e){return Ct(e)&&Math.floor(e)===e},"integer"),vS=o(function(e){if(QHe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),go=o(function(e){return t4(e)||Q0e(e)},"elementOrCollection"),t4=o(function(e){return e4(e)==="collection"&&e._private.single},"element"),Q0e=o(function(e){return e4(e)==="collection"&&!e._private.single},"collection"),JP=o(function(e){return e4(e)==="core"},"core"),Z0e=o(function(e){return e4(e)==="stylesheet"},"stylesheet"),eWe=o(function(e){return e4(e)==="event"},"event"),Af=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),tWe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),rWe=o(function(e){return Ur(e)&&Ct(e.x1)&&Ct(e.x2)&&Ct(e.y1)&&Ct(e.y2)},"boundingBox"),nWe=o(function(e){return ZHe(e)&&si(e.then)},"promise"),iWe=o(function(){return Lpe&&Lpe.userAgent.match(/msie|trident|edge/i)},"ms"),Ub=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;s<arguments.length;s++)a.push(arguments[s]);return a.join("$")},"keyFn"));var n=o(function i(){var a=this,s=arguments,l,u=r.apply(a,s),h=i.cache;return(l=h[u])||(l=h[u]=e.apply(a,s)),l},"memoizedFn");return n.cache={},n},"memoize"),eB=Ub(function(t){return t.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})}),LS=Ub(function(t){return t.replace(/(-\w)/g,function(e){return e[1].toUpperCase()})}),J0e=Ub(function(t,e){return t+e[0].toUpperCase()+e.substring(1)},function(t,e){return t+"$"+e}),Rpe=o(function(e){return Af(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},"capitalize"),Hi="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",aWe="rgb[a]?\\(("+Hi+"[%]?)\\s*,\\s*("+Hi+"[%]?)\\s*,\\s*("+Hi+"[%]?)(?:\\s*,\\s*("+Hi+"))?\\)",sWe="rgb[a]?\\((?:"+Hi+"[%]?)\\s*,\\s*(?:"+Hi+"[%]?)\\s*,\\s*(?:"+Hi+"[%]?)(?:\\s*,\\s*(?:"+Hi+"))?\\)",oWe="hsl[a]?\\(("+Hi+")\\s*,\\s*("+Hi+"[%])\\s*,\\s*("+Hi+"[%])(?:\\s*,\\s*("+Hi+"))?\\)",lWe="hsl[a]?\\((?:"+Hi+")\\s*,\\s*(?:"+Hi+"[%])\\s*,\\s*(?:"+Hi+"[%])(?:\\s*,\\s*(?:"+Hi+"))?\\)",cWe="\\#[0-9a-fA-F]{3}",uWe="\\#[0-9a-fA-F]{6}",eme=o(function(e,r){return e<r?-1:e>r?1:0},"ascending"),hWe=o(function(e,r){return-1*eme(e,r)},"descending"),rr=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r<e.length;r++){var n=e[r];if(n!=null)for(var i=Object.keys(n),a=0;a<i.length;a++){var s=i[a];t[s]=n[s]}}return t},fWe=o(function(e){if(!(!(e.length===4||e.length===7)||e[0]!=="#")){var r=e.length===4,n,i,a,s=16;return r?(n=parseInt(e[1]+e[1],s),i=parseInt(e[2]+e[2],s),a=parseInt(e[3]+e[3],s)):(n=parseInt(e[1]+e[2],s),i=parseInt(e[3]+e[4],s),a=parseInt(e[5]+e[6],s)),[n,i,a]}},"hex2tuple"),dWe=o(function(e){var r,n,i,a,s,l,u,h;function f(g,y,v){return v<0&&(v+=1),v>1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+oWe+"$").exec(e);if(d){if(n=parseInt(d[1]),n<0?n=(360- -1*n%360)%360:n>360&&(n=n%360),n/=360,i=parseFloat(d[2]),i<0||i>100||(i=i/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(i===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+i):a+i-a*i,m=2*a-p;l=Math.round(255*f(m,p,n+1/3)),u=Math.round(255*f(m,p,n)),h=Math.round(255*f(m,p,n-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),pWe=o(function(e){var r,n=new RegExp("^"+aWe+"$").exec(e);if(n){r=[];for(var i=[],a=1;a<=3;a++){var s=n[a];if(s[s.length-1]==="%"&&(i[a]=!0),s=parseFloat(s),i[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=i[1]||i[2]||i[3],u=i[1]&&i[2]&&i[3];if(l&&!u)return;var h=n[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),mWe=o(function(e){return gWe[e.toLowerCase()]},"colorname2tuple"),tme=o(function(e){return(En(e)?e:null)||mWe(e)||fWe(e)||pWe(e)||dWe(e)},"color2tuple"),gWe={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},rme=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a<i;a++){var s=n[a];if(Ur(s))throw Error("Tried to set map with object key");a<n.length-1?(r[s]==null&&(r[s]={}),r=r[s]):r[s]=e.value}},"setMap"),nme=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a<i;a++){var s=n[a];if(Ur(s))throw Error("Tried to get map with object key");if(r=r[s],r==null)return r}return r},"getMap");o(yWe,"isObject");zp=yWe,Ib=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};o(vWe,"createCommonjsModule");xWe=typeof Ib=="object"&&Ib&&Ib.Object===Object&&Ib,bWe=xWe,wWe=typeof self=="object"&&self&&self.Object===Object&&self,TWe=bWe||wWe||Function("return this")(),RS=TWe,kWe=o(function(){return RS.Date.now()},"now"),xP=kWe,EWe=/\s/;o(SWe,"trimmedEndIndex");CWe=SWe,AWe=/^\s+/;o(_We,"baseTrim");DWe=_We,LWe=RS.Symbol,j1=LWe,ime=Object.prototype,RWe=ime.hasOwnProperty,NWe=ime.toString,Ab=j1?j1.toStringTag:void 0;o(MWe,"getRawTag");IWe=MWe,OWe=Object.prototype,PWe=OWe.toString;o(BWe,"objectToString");FWe=BWe,$We="[object Null]",zWe="[object Undefined]",Npe=j1?j1.toStringTag:void 0;o(GWe,"baseGetTag");ame=GWe;o(VWe,"isObjectLike");UWe=VWe,HWe="[object Symbol]";o(WWe,"isSymbol");r4=WWe,Mpe=NaN,qWe=/^[-+]0x[0-9a-f]+$/i,YWe=/^0b[01]+$/i,XWe=/^0o[0-7]+$/i,jWe=parseInt;o(KWe,"toNumber");Ipe=KWe,QWe="Expected a function",ZWe=Math.max,JWe=Math.min;o(eqe,"debounce");n4=eqe,bP=Ui?Ui.performance:null,sme=bP&&bP.now?function(){return bP.now()}:function(){return Date.now()},tqe=function(){if(Ui){if(Ui.requestAnimationFrame)return function(t){Ui.requestAnimationFrame(t)};if(Ui.mozRequestAnimationFrame)return function(t){Ui.mozRequestAnimationFrame(t)};if(Ui.webkitRequestAnimationFrame)return function(t){Ui.webkitRequestAnimationFrame(t)};if(Ui.msRequestAnimationFrame)return function(t){Ui.msRequestAnimationFrame(t)}}return function(t){t&&setTimeout(function(){t(sme())},1e3/60)}}(),xS=o(function(e){return tqe(e)},"requestAnimationFrame"),Qu=sme,V1=9261,ome=65599,Ob=5381,lme=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:V1,n=r,i;i=e.next(),!i.done;)n=n*ome+i.value|0;return n},"hashIterableInts"),Hb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:V1;return r*ome+e|0},"hashInt"),Wb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ob;return(r<<5)+r+e|0},"hashIntAlt"),rqe=o(function(e,r){return e*2097152+r},"combineHashes"),wf=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),j6=o(function(e,r){return[Hb(e[0],r[0]),Wb(e[1],r[1])]},"hashArrays"),nqe=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i<a?n.value=e[i++]:n.done=!0,n},"next")};return lme(s,r)},"hashIntsArray"),_f=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i<a?n.value=e.charCodeAt(i++):n.done=!0,n},"next")};return lme(s,r)},"hashString"),cme=o(function(){return iqe(arguments)},"hashStrings"),iqe=o(function(e){for(var r,n=0;n<e.length;n++){var i=e[n];n===0?r=_f(i):r=_f(i,r)}return r},"hashStringsArray"),Ope=!0,aqe=console.warn!=null,sqe=console.trace!=null,tB=Number.MAX_SAFE_INTEGER||9007199254740991,ume=o(function(){return!0},"trueify"),bS=o(function(){return!1},"falsify"),Ppe=o(function(){return 0},"zeroify"),rB=o(function(){},"noop"),ai=o(function(e){throw new Error(e)},"error"),hme=o(function(e){if(e!==void 0)Ope=!!e;else return Ope},"warnings"),un=o(function(e){hme()&&(aqe?console.warn(e):(console.log(e),sqe&&console.trace()))},"warn"),oqe=o(function(e){return rr({},e)},"clone"),Yc=o(function(e){return e==null?e:En(e)?e.slice():Ur(e)?oqe(e):e},"copy"),lqe=o(function(e){return e.slice()},"copyArray"),fme=o(function(e,r){for(r=e="";e++<36;r+=e*51&52?(e^15?8^Math.random()*(e^20?16:4):4).toString(16):"-");return r},"uuid"),cqe={},dme=o(function(){return cqe},"staticEmptyObject"),la=o(function(e){var r=Object.keys(e);return function(n){for(var i={},a=0;a<r.length;a++){var s=r[a],l=n?.[s];i[s]=l===void 0?e[s]:l}return i}},"defaults"),Df=o(function(e,r,n){for(var i=e.length-1;i>=0&&!(e[i]===r&&(e.splice(i,1),n));i--);},"removeFromArray"),nB=o(function(e){e.splice(0,e.length)},"clearArray"),uqe=o(function(e,r){for(var n=0;n<r.length;n++){var i=r[n];e.push(i)}},"push"),Gl=o(function(e,r,n){return n&&(r=J0e(n,r)),e[r]},"getPrefixedProperty"),kf=o(function(e,r,n,i){n&&(r=J0e(n,r)),e[r]=i},"setPrefixedProperty"),hqe=function(){function t(){Mf(this,t),this._obj={}}return o(t,"ObjectMap"),If(t,[{key:"set",value:o(function(r,n){return this._obj[r]=n,this},"set")},{key:"delete",value:o(function(r){return this._obj[r]=void 0,this},"_delete")},{key:"clear",value:o(function(){this._obj={}},"clear")},{key:"has",value:o(function(r){return this._obj[r]!==void 0},"has")},{key:"get",value:o(function(r){return this._obj[r]},"get")}]),t}(),Xc=typeof Map<"u"?Map:hqe,fqe="undefined",dqe=function(){function t(e){if(Mf(this,t),this._obj=Object.create(null),this.size=0,e!=null){var r;e.instanceString!=null&&e.instanceString()===this.instanceString()?r=e.toArray():r=e;for(var n=0;n<r.length;n++)this.add(r[n])}}return o(t,"ObjectSet"),If(t,[{key:"instanceString",value:o(function(){return"set"},"instanceString")},{key:"add",value:o(function(r){var n=this._obj;n[r]!==1&&(n[r]=1,this.size++)},"add")},{key:"delete",value:o(function(r){var n=this._obj;n[r]===1&&(n[r]=0,this.size--)},"_delete")},{key:"clear",value:o(function(){this._obj=Object.create(null)},"clear")},{key:"has",value:o(function(r){return this._obj[r]===1},"has")},{key:"toArray",value:o(function(){var r=this;return Object.keys(this._obj).filter(function(n){return r.has(n)})},"toArray")},{key:"forEach",value:o(function(r,n){return this.toArray().forEach(r,n)},"forEach")}]),t}(),J1=(typeof Set>"u"?"undefined":Wi(Set))!==fqe?Set:dqe,NS=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!JP(e)){ai("An element must have a core reference and parameters set");return}var i=r.group;if(i==null&&(r.data&&r.data.source!=null&&r.data.target!=null?i="edges":i="nodes"),i!=="nodes"&&i!=="edges"){ai("An element must be of type `nodes` or `edges`; you specified `"+i+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:i,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?i==="edges":!!r.pannable,active:!1,classes:new J1,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];En(r.classes)?h=r.classes:Zt(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;f<d;f++){var p=h[f];!p||p===""||a.classes.add(p)}this.createEmitter();var m=r.style||r.css;m&&(un("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(m)),(n===void 0||n)&&this.restore()},"Element"),Bpe=o(function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},o(function(n,i,a){var s;Ur(n)&&!go(n)&&(s=n,n=s.roots||s.root,i=s.visit,a=s.directed),a=arguments.length===2&&!si(i)?i:a,i=si(i)?i:function(){};for(var l=this._private.cy,u=n=Zt(n)?this.filter(n):n,h=[],f=[],d={},p={},m={},g=0,y,v=this.byGroup(),x=v.nodes,b=v.edges,w=0;w<u.length;w++){var C=u[w],T=C.id();C.isNode()&&(h.unshift(C),e.bfs&&(m[T]=!0,f.push(C)),p[T]=0)}for(var E=o(function(){var L=e.bfs?h.shift():h.pop(),R=L.id();if(e.dfs){if(m[R])return"continue";m[R]=!0,f.push(L)}var O=p[R],M=d[R],B=M!=null?M.source():null,F=M!=null?M.target():null,P=M==null?void 0:L.same(B)?F[0]:B[0],z=void 0;if(z=i(L,M,P,g++,O),z===!0)return y=L,"break";if(z===!1)return"break";for(var $=L.connectedEdges().filter(function(ne){return(!a||ne.source().same(L))&&b.has(ne)}),H=0;H<$.length;H++){var Q=$[H],j=Q.connectedNodes().filter(function(ne){return!ne.same(L)&&x.has(ne)}),ie=j.id();j.length!==0&&!m[ie]&&(j=j[0],h.push(j),e.bfs&&(m[ie]=!0,f.push(j)),d[ie]=Q,p[ie]=p[R]+1)}},"_loop");h.length!==0;){var A=E();if(A!=="continue"&&A==="break")break}for(var S=l.collection(),_=0;_<f.length;_++){var I=f[_],D=d[I.id()];D!=null&&S.push(D),S.push(I)}return{path:l.collection(S),found:l.collection(y)}},"searchFn")},"defineSearch"),qb={breadthFirstSearch:Bpe({bfs:!0}),depthFirstSearch:Bpe({dfs:!0})};qb.bfs=qb.breadthFirstSearch;qb.dfs=qb.depthFirstSearch;pqe=vWe(function(t,e){(function(){var r,n,i,a,s,l,u,h,f,d,p,m,g,y,v;i=Math.floor,d=Math.min,n=o(function(x,b){return x<b?-1:x>b?1:0},"defaultCmp"),f=o(function(x,b,w,C,T){var E;if(w==null&&(w=0),T==null&&(T=n),w<0)throw new Error("lo must be non-negative");for(C==null&&(C=x.length);w<C;)E=i((w+C)/2),T(b,x[E])<0?C=E:w=E+1;return[].splice.apply(x,[w,w-w].concat(b)),b},"insort"),l=o(function(x,b,w){return w==null&&(w=n),x.push(b),y(x,0,x.length-1,w)},"heappush"),s=o(function(x,b){var w,C;return b==null&&(b=n),w=x.pop(),x.length?(C=x[0],x[0]=w,v(x,0,b)):C=w,C},"heappop"),h=o(function(x,b,w){var C;return w==null&&(w=n),C=x[0],x[0]=b,v(x,0,w),C},"heapreplace"),u=o(function(x,b,w){var C;return w==null&&(w=n),x.length&&w(x[0],b)<0&&(C=[x[0],b],b=C[0],x[0]=C[1],v(x,0,w)),b},"heappushpop"),a=o(function(x,b){var w,C,T,E,A,S;for(b==null&&(b=n),E=function(){S=[];for(var _=0,I=i(x.length/2);0<=I?_<I:_>I;0<=I?_++:_--)S.push(_);return S}.apply(this).reverse(),A=[],C=0,T=E.length;C<T;C++)w=E[C],A.push(v(x,w,b));return A},"heapify"),g=o(function(x,b,w){var C;if(w==null&&(w=n),C=x.indexOf(b),C!==-1)return y(x,0,C,w),v(x,C,w)},"updateItem"),p=o(function(x,b,w){var C,T,E,A,S;if(w==null&&(w=n),T=x.slice(0,b),!T.length)return T;for(a(T,w),S=x.slice(b),E=0,A=S.length;E<A;E++)C=S[E],u(T,C,w);return T.sort(w).reverse()},"nlargest"),m=o(function(x,b,w){var C,T,E,A,S,_,I,D,k;if(w==null&&(w=n),b*10<=x.length){if(E=x.slice(0,b).sort(w),!E.length)return E;for(T=E[E.length-1],I=x.slice(b),A=0,_=I.length;A<_;A++)C=I[A],w(C,T)<0&&(f(E,C,0,null,w),E.pop(),T=E[E.length-1]);return E}for(a(x,w),k=[],S=0,D=d(b,x.length);0<=D?S<D:S>D;0<=D?++S:--S)k.push(s(x,w));return k},"nsmallest"),y=o(function(x,b,w,C){var T,E,A;for(C==null&&(C=n),T=x[w];w>b;){if(A=w-1>>1,E=x[A],C(T,E)<0){x[w]=E,w=A;continue}break}return x[w]=T},"_siftdown"),v=o(function(x,b,w){var C,T,E,A,S;for(w==null&&(w=n),T=x.length,S=b,E=x[b],C=2*b+1;C<T;)A=C+1,A<T&&!(w(x[C],x[A])<0)&&(C=A),x[b]=x[C],b=C,C=2*b+1;return x[b]=E,y(x,S,b,w)},"_siftup"),r=function(){x.push=l,x.pop=s,x.replace=h,x.pushpop=u,x.heapify=a,x.updateItem=g,x.nlargest=p,x.nsmallest=m;function x(b){this.cmp=b??n,this.nodes=[]}return o(x,"Heap"),x.prototype.push=function(b){return l(this.nodes,b,this.cmp)},x.prototype.pop=function(){return s(this.nodes,this.cmp)},x.prototype.peek=function(){return this.nodes[0]},x.prototype.contains=function(b){return this.nodes.indexOf(b)!==-1},x.prototype.replace=function(b){return h(this.nodes,b,this.cmp)},x.prototype.pushpop=function(b){return u(this.nodes,b,this.cmp)},x.prototype.heapify=function(){return a(this.nodes,this.cmp)},x.prototype.updateItem=function(b){return g(this.nodes,b,this.cmp)},x.prototype.clear=function(){return this.nodes=[]},x.prototype.empty=function(){return this.nodes.length===0},x.prototype.size=function(){return this.nodes.length},x.prototype.clone=function(){var b;return b=new x,b.nodes=this.nodes.slice(0),b},x.prototype.toArray=function(){return this.nodes.slice(0)},x.prototype.insert=x.prototype.push,x.prototype.top=x.prototype.peek,x.prototype.front=x.prototype.peek,x.prototype.has=x.prototype.contains,x.prototype.copy=x.prototype.clone,x}(),function(x,b){return t.exports=b()}(this,function(){return r})}).call(Ib)}),i4=pqe,mqe=la({root:null,weight:o(function(e){return 1},"weight"),directed:!1}),gqe={dijkstra:o(function(e){if(!Ur(e)){var r=arguments;e={root:r[0],weight:r[1],directed:r[2]}}var n=mqe(e),i=n.root,a=n.weight,s=n.directed,l=this,u=a,h=Zt(i)?this.filter(i)[0]:i[0],f={},d={},p={},m=this.byGroup(),g=m.nodes,y=m.edges;y.unmergeBy(function(O){return O.isLoop()});for(var v=o(function(M){return f[M.id()]},"getDist"),x=o(function(M,B){f[M.id()]=B,b.updateItem(M)},"setDist"),b=new i4(function(O,M){return v(O)-v(M)}),w=0;w<g.length;w++){var C=g[w];f[C.id()]=C.same(h)?0:1/0,b.push(C)}for(var T=o(function(M,B){for(var F=(s?M.edgesTo(B):M.edgesWith(B)).intersect(y),P=1/0,z,$=0;$<F.length;$++){var H=F[$],Q=u(H);(Q<P||!z)&&(P=Q,z=H)}return{edge:z,dist:P}},"distBetween");b.size()>0;){var E=b.pop(),A=v(E),S=E.id();if(p[S]=A,A!==1/0)for(var _=E.neighborhood().intersect(g),I=0;I<_.length;I++){var D=_[I],k=D.id(),L=T(E,D),R=A+L.dist;R<v(D)&&(x(D,R),d[k]={node:E,edge:L.edge})}}return{distanceTo:o(function(M){var B=Zt(M)?g.filter(M)[0]:M[0];return p[B.id()]},"distanceTo"),pathTo:o(function(M){var B=Zt(M)?g.filter(M)[0]:M[0],F=[],P=B,z=P.id();if(B.length>0)for(F.unshift(B);d[z];){var $=d[z];F.unshift($.edge),F.unshift($.node),P=$.node,z=P.id()}return l.spawn(F)},"pathTo")}},"dijkstra")},yqe={kruskal:o(function(e){e=e||function(w){return 1};for(var r=this.byGroup(),n=r.nodes,i=r.edges,a=n.length,s=new Array(a),l=n,u=o(function(C){for(var T=0;T<s.length;T++){var E=s[T];if(E.has(C))return T}},"findSetIndex"),h=0;h<a;h++)s[h]=this.spawn(n[h]);for(var f=i.sort(function(w,C){return e(w)-e(C)}),d=0;d<f.length;d++){var p=f[d],m=p.source()[0],g=p.target()[0],y=u(m),v=u(g),x=s[y],b=s[v];y!==v&&(l.merge(p),x.merge(b),s.splice(v,1))}return l},"kruskal")},vqe=la({root:null,goal:null,weight:o(function(e){return 1},"weight"),heuristic:o(function(e){return 0},"heuristic"),directed:!1}),xqe={aStar:o(function(e){var r=this.cy(),n=vqe(e),i=n.root,a=n.goal,s=n.heuristic,l=n.directed,u=n.weight;i=r.collection(i)[0],a=r.collection(a)[0];var h=i.id(),f=a.id(),d={},p={},m={},g=new i4(function(z,$){return p[z.id()]-p[$.id()]}),y=new J1,v={},x={},b=o(function($,H){g.push($),y.add(H)},"addToOpenSet"),w,C,T=o(function(){w=g.pop(),C=w.id(),y.delete(C)},"popFromOpenSet"),E=o(function($){return y.has($)},"isInOpenSet");b(i,h),d[h]=0,p[h]=s(i);for(var A=0;g.size()>0;){if(T(),A++,C===f){for(var S=[],_=a,I=f,D=x[I];S.unshift(_),D!=null&&S.unshift(D),_=v[I],_!=null;)I=_.id(),D=x[I];return{found:!0,distance:d[C],path:this.spawn(S),steps:A}}m[C]=!0;for(var k=w._private.edges,L=0;L<k.length;L++){var R=k[L];if(this.hasElementWithId(R.id())&&!(l&&R.data("source")!==C)){var O=R.source(),M=R.target(),B=O.id()!==C?O:M,F=B.id();if(this.hasElementWithId(F)&&!m[F]){var P=d[C]+u(R);if(!E(F)){d[F]=P,p[F]=P+s(B),b(B,F),v[F]=w,x[F]=R;continue}P<d[F]&&(d[F]=P,p[F]=P+s(B),v[F]=w,x[F]=R)}}}}return{found:!1,distance:void 0,path:void 0,steps:A}},"aStar")},bqe=la({weight:o(function(e){return 1},"weight"),directed:!1}),wqe={floydWarshall:o(function(e){for(var r=this.cy(),n=bqe(e),i=n.weight,a=n.directed,s=i,l=this.byGroup(),u=l.nodes,h=l.edges,f=u.length,d=f*f,p=o(function(Q){return u.indexOf(Q)},"indexOf"),m=o(function(Q){return u[Q]},"atIndex"),g=new Array(d),y=0;y<d;y++){var v=y%f,x=(y-v)/f;x===v?g[y]=0:g[y]=1/0}for(var b=new Array(d),w=new Array(d),C=0;C<h.length;C++){var T=h[C],E=T.source()[0],A=T.target()[0];if(E!==A){var S=p(E),_=p(A),I=S*f+_,D=s(T);if(g[I]>D&&(g[I]=D,b[I]=_,w[I]=T),!a){var k=_*f+S;!a&&g[k]>D&&(g[k]=D,b[k]=S,w[k]=T)}}}for(var L=0;L<f;L++)for(var R=0;R<f;R++)for(var O=R*f+L,M=0;M<f;M++){var B=R*f+M,F=L*f+M;g[O]+g[F]<g[B]&&(g[B]=g[O]+g[F],b[B]=b[O])}var P=o(function(Q){return(Zt(Q)?r.filter(Q):Q)[0]},"getArgEle"),z=o(function(Q){return p(P(Q))},"indexOfArgEle"),$={distance:o(function(Q,j){var ie=z(Q),ne=z(j);return g[ie*f+ne]},"distance"),path:o(function(Q,j){var ie=z(Q),ne=z(j),le=m(ie);if(ie===ne)return le.collection();if(b[ie*f+ne]==null)return r.collection();var he=r.collection(),K=ie,X;for(he.merge(le);ie!==ne;)K=ie,ie=b[ie*f+ne],X=w[K*f+ie],he.merge(X),he.merge(m(ie));return he},"path")};return $},"floydWarshall")},Tqe=la({weight:o(function(e){return 1},"weight"),directed:!1,root:null}),kqe={bellmanFord:o(function(e){var r=this,n=Tqe(e),i=n.weight,a=n.directed,s=n.root,l=i,u=this,h=this.cy(),f=this.byGroup(),d=f.edges,p=f.nodes,m=p.length,g=new Xc,y=!1,v=[];s=h.collection(s)[0],d.unmergeBy(function(ce){return ce.isLoop()});for(var x=d.length,b=o(function(ae){var Oe=g.get(ae.id());return Oe||(Oe={},g.set(ae.id(),Oe)),Oe},"getInfo"),w=o(function(ae){return(Zt(ae)?h.$(ae):ae)[0]},"getNodeFromTo"),C=o(function(ae){return b(w(ae)).dist},"distanceTo"),T=o(function(ae){for(var Oe=arguments.length>1&&arguments[1]!==void 0?arguments[1]:s,ge=w(ae),ze=[],He=ge;;){if(He==null)return r.spawn();var $e=b(He),Re=$e.edge,Ie=$e.pred;if(ze.unshift(He[0]),He.same(Oe)&&ze.length>0)break;Re!=null&&ze.unshift(Re),He=Ie}return u.spawn(ze)},"pathTo"),E=0;E<m;E++){var A=p[E],S=b(A);A.same(s)?S.dist=0:S.dist=1/0,S.pred=null,S.edge=null}for(var _=!1,I=o(function(ae,Oe,ge,ze,He,$e){var Re=ze.dist+$e;Re<He.dist&&!ge.same(ze.edge)&&(He.dist=Re,He.pred=ae,He.edge=ge,_=!0)},"checkForEdgeReplacement"),D=1;D<m;D++){_=!1;for(var k=0;k<x;k++){var L=d[k],R=L.source(),O=L.target(),M=l(L),B=b(R),F=b(O);I(R,O,L,B,F,M),a||I(O,R,L,F,B,M)}if(!_)break}if(_)for(var P=[],z=0;z<x;z++){var $=d[z],H=$.source(),Q=$.target(),j=l($),ie=b(H).dist,ne=b(Q).dist;if(ie+j<ne||!a&&ne+j<ie)if(y||(un("Graph contains a negative weight cycle for Bellman-Ford"),y=!0),e.findNegativeWeightCycles!==!1){var le=[];ie+j<ne&&le.push(H),!a&&ne+j<ie&&le.push(Q);for(var he=le.length,K=0;K<he;K++){var X=le[K],te=[X];te.push(b(X).edge);for(var J=b(X).pred;te.indexOf(J)===-1;)te.push(J),te.push(b(J).edge),J=b(J).pred;te=te.slice(te.indexOf(J));for(var se=te[0].id(),ue=0,Z=2;Z<te.length;Z+=2)te[Z].id()<se&&(se=te[Z].id(),ue=Z);te=te.slice(ue).concat(te.slice(0,ue)),te.push(te[0]);var Se=te.map(function(ce){return ce.id()}).join(",");P.indexOf(Se)===-1&&(v.push(u.spawn(te)),P.push(Se))}}else break}return{distanceTo:C,pathTo:T,hasNegativeWeightCycle:y,negativeWeightCycles:v}},"bellmanFord")},Eqe=Math.sqrt(2),Sqe=o(function(e,r,n){n.length===0&&ai("Karger-Stein must be run on a connected (sub)graph");for(var i=n[e],a=i[1],s=i[2],l=r[a],u=r[s],h=n,f=h.length-1;f>=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;g<h.length;g++){var y=h[g];y[1]===u?(h[g]=y.slice(),h[g][1]=l):y[2]===u&&(h[g]=y.slice(),h[g][2]=l)}for(var v=0;v<r.length;v++)r[v]===u&&(r[v]=l);return h},"collapse"),wP=o(function(e,r,n,i){for(;n>i;){var a=Math.floor(Math.random()*r.length);r=Sqe(a,e,r),n--}return r},"contractUntil"),Cqe={kargerStein:o(function(){var e=this,r=this.byGroup(),n=r.nodes,i=r.edges;i.unmergeBy(function(F){return F.isLoop()});var a=n.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/Eqe);if(a<2){ai("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f<s;f++){var d=i[f];h.push([f,n.indexOf(d.source()),n.indexOf(d.target())])}for(var p=1/0,m=[],g=new Array(a),y=new Array(a),v=new Array(a),x=o(function(P,z){for(var $=0;$<a;$++)z[$]=P[$]},"copyNodesMap"),b=0;b<=l;b++){for(var w=0;w<a;w++)y[w]=w;var C=wP(y,h.slice(),a,u),T=C.slice();x(y,v);var E=wP(y,C,u,2),A=wP(v,T,u,2);E.length<=A.length&&E.length<p?(p=E.length,m=E,x(y,g)):A.length<=E.length&&A.length<p&&(p=A.length,m=A,x(v,g))}for(var S=this.spawn(m.map(function(F){return i[F[0]]})),_=this.spawn(),I=this.spawn(),D=g[0],k=0;k<g.length;k++){var L=g[k],R=n[k];L===D?_.merge(R):I.merge(R)}var O=o(function(P){var z=e.spawn();return P.forEach(function($){z.merge($),$.connectedEdges().forEach(function(H){e.contains(H)&&!S.contains(H)&&z.merge(H)})}),z},"constructComponent"),M=[O(_),O(I)],B={cut:S,components:M,partition1:_,partition2:I};return B},"kargerStein")},Aqe=o(function(e){return{x:e.x,y:e.y}},"copyPosition"),MS=o(function(e,r,n){return{x:e.x*r+n.x,y:e.y*r+n.y}},"modelToRenderedPosition"),pme=o(function(e,r,n){return{x:(e.x-n.x)/r,y:(e.y-n.y)/r}},"renderedToModelPosition"),U1=o(function(e){return{x:e[0],y:e[1]}},"array2point"),_qe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=1/0,a=r;a<n;a++){var s=e[a];isFinite(s)&&(i=Math.min(s,i))}return i},"min"),Dqe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=-1/0,a=r;a<n;a++){var s=e[a];isFinite(s)&&(i=Math.max(s,i))}return i},"max"),Lqe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=0,a=0,s=r;s<n;s++){var l=e[s];isFinite(l)&&(i+=l,a++)}return i/a},"mean"),Rqe=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;i?e=e.slice(r,n):(n<e.length&&e.splice(n,e.length-n),r>0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),Nqe=o(function(e){return Math.PI*e/180},"deg2rad"),K6=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),iB=Math.log2||function(t){return Math.log(t)/Math.log(2)},mme=o(function(e){return e>0?1:e<0?-1:0},"signum"),Gp=o(function(e,r){return Math.sqrt(Op(e,r))},"dist"),Op=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return n*n+i*i},"sqdist"),Mqe=o(function(e){for(var r=e.length,n=0,i=0;i<r;i++)n+=e[i];for(var a=0;a<r;a++)e[a]=e[a]/n;return e},"inPlaceSumNormalize"),oa=o(function(e,r,n,i){return(1-i)*(1-i)*e+2*(1-i)*i*r+i*i*n},"qbezierAt"),W1=o(function(e,r,n,i){return{x:oa(e.x,r.x,n.x,i),y:oa(e.y,r.y,n.y,i)}},"qbezierPtAt"),Iqe=o(function(e,r,n,i){var a={x:r.x-e.x,y:r.y-e.y},s=Gp(e,r),l={x:a.x/s,y:a.y/s};return n=n??0,i=i??n*s,{x:e.x+l.x*i,y:e.y+l.y*i}},"lineAt"),Yb=o(function(e,r,n){return Math.max(e,Math.min(n,r))},"bound"),Hs=o(function(e){if(e==null)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(e.x1!=null&&e.y1!=null){if(e.x2!=null&&e.y2!=null&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),Oqe=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),Pqe=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),Bqe=o(function(e,r,n){return{x1:e.x1+r,x2:e.x2+r,y1:e.y1+n,y2:e.y2+n,w:e.w,h:e.h}},"shiftBoundingBox"),gme=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),Fqe=o(function(e,r,n){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),cS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),uS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],n,i,a,s;if(r.length===1)n=i=a=s=r[0];else if(r.length===2)n=a=r[0],s=i=r[1];else if(r.length===4){var l=_i(r,4);n=l[0],i=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=i,e.y1-=n,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),Fpe=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),aB=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2<r.x1||r.x2<e.x1||e.y2<r.y1||r.y2<e.y1||e.y1>r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),K1=o(function(e,r,n){return e.x1<=r&&r<=e.x2&&e.y1<=n&&n<=e.y2},"inBoundingBox"),$qe=o(function(e,r){return K1(e,r.x,r.y)},"pointInBoundingBox"),yme=o(function(e,r){return K1(e,r.x1,r.y1)&&K1(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),vme=o(function(e,r,n,i,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?Vp(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=n-f+h-l,v=i-d-l,x=n+f-h+l,b=v;if(g=Ef(e,r,n,i,y,v,x,b,!1),g.length>0)return g}if(m){var w=n+f+l,C=i-d+h-l,T=w,E=i+d-h+l;if(g=Ef(e,r,n,i,w,C,T,E,!1),g.length>0)return g}if(p){var A=n-f+h-l,S=i+d+l,_=n+f-h+l,I=S;if(g=Ef(e,r,n,i,A,S,_,I,!1),g.length>0)return g}if(m){var D=n-f-l,k=i-d+h-l,L=D,R=i+d-h+l;if(g=Ef(e,r,n,i,D,k,L,R,!1),g.length>0)return g}var O;{var M=n-f+h,B=i-d+h;if(O=Pb(e,r,n,i,M,B,h+l),O.length>0&&O[0]<=M&&O[1]<=B)return[O[0],O[1]]}{var F=n+f-h,P=i-d+h;if(O=Pb(e,r,n,i,F,P,h+l),O.length>0&&O[0]>=F&&O[1]<=P)return[O[0],O[1]]}{var z=n+f-h,$=i+d-h;if(O=Pb(e,r,n,i,z,$,h+l),O.length>0&&O[0]>=z&&O[1]>=$)return[O[0],O[1]]}{var H=n-f+h,Q=i+d-h;if(O=Pb(e,r,n,i,H,Q,h+l),O.length>0&&O[0]<=H&&O[1]>=Q)return[O[0],O[1]]}return[]},"roundRectangleIntersectLine"),zqe=o(function(e,r,n,i,a,s,l){var u=l,h=Math.min(n,a),f=Math.max(n,a),d=Math.min(i,s),p=Math.max(i,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),Gqe=o(function(e,r,n,i,a,s,l,u,h){var f={x1:Math.min(n,l,a)-h,x2:Math.max(n,l,a)+h,y1:Math.min(i,u,s)-h,y2:Math.max(i,u,s)+h};return!(e<f.x1||e>f.x2||r<f.y1||r>f.y2)},"inBezierVicinity"),Vqe=o(function(e,r,n,i){n-=i;var a=r*r-4*e*n;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),Uqe=o(function(e,r,n,i,a){var s=1e-5;e===0&&(e=s),r/=e,n/=e,i/=e;var l,u,h,f,d,p,m,g;if(u=(3*n-r*r)/9,h=-(27*i)+r*(9*n-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),Hqe=o(function(e,r,n,i,a,s,l,u){var h=1*n*n-4*n*a+2*n*l+4*a*a-4*a*l+l*l+i*i-4*i*s+2*i*u+4*s*s-4*s*u+u*u,f=1*9*n*a-3*n*n-3*n*l-6*a*a+3*a*l+9*i*s-3*i*i-3*i*u-6*s*s+3*s*u,d=1*3*n*n-6*n*a+n*l-n*e+2*a*a+2*a*e-l*e+3*i*i-6*i*s+i*u-i*r+2*s*s+2*s*r-u*r,p=1*n*a-n*n+n*e-a*e+i*s-i*i+i*r-s*r,m=[];Uqe(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])<g&&m[v]>=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,w,C,T=0;T<y.length;T++)b=Math.pow(1-y[T],2)*n+2*(1-y[T])*y[T]*a+y[T]*y[T]*l,w=Math.pow(1-y[T],2)*i+2*(1-y[T])*y[T]*s+y[T]*y[T]*u,C=Math.pow(b-e,2)+Math.pow(w-r,2),x>=0?C<x&&(x=C):x=C;return x},"sqdistToQuadraticBezier"),Wqe=o(function(e,r,n,i,a,s){var l=[e-n,r-i],u=[a-n,s-i],h=u[0]*u[0]+u[1]*u[1],f=l[0]*l[0]+l[1]*l[1],d=l[0]*u[0]+l[1]*u[1],p=d*d/h;return d<0?f:p>h?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),Us=o(function(e,r,n){for(var i,a,s,l,u,h=0,f=0;f<n.length/2;f++)if(i=n[f*2],a=n[f*2+1],f+1<n.length/2?(s=n[(f+1)*2],l=n[(f+1)*2+1]):(s=n[(f+1-n.length/2)*2],l=n[(f+1-n.length/2)*2+1]),!(i==e&&s==e))if(i>=e&&e>=s||i<=e&&e<=s)u=(e-i)/(s-i)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),Zu=o(function(e,r,n,i,a,s,l,u,h){var f=new Array(n.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g<f.length/2;g++)f[g*2]=s/2*(n[g*2]*p-n[g*2+1]*m),f[g*2+1]=l/2*(n[g*2+1]*p+n[g*2]*m),f[g*2]+=i,f[g*2+1]+=a;var y;if(h>0){var v=TS(f,-h);y=wS(v)}else y=f;return Us(e,r,y)},"pointInsidePolygon"),qqe=o(function(e,r,n,i,a,s,l,u){for(var h=new Array(n.length*2),f=0;f<u.length;f++){var d=u[f];h[f*4+0]=d.startX,h[f*4+1]=d.startY,h[f*4+2]=d.stopX,h[f*4+3]=d.stopY;var p=Math.pow(d.cx-e,2)+Math.pow(d.cy-r,2);if(p<=Math.pow(d.radius,2))return!0}return Us(e,r,h)},"pointInsideRoundPolygon"),wS=o(function(e){for(var r=new Array(e.length/2),n,i,a,s,l,u,h,f,d=0;d<e.length/4;d++){n=e[d*4],i=e[d*4+1],a=e[d*4+2],s=e[d*4+3],d<e.length/4-1?(l=e[(d+1)*4],u=e[(d+1)*4+1],h=e[(d+1)*4+2],f=e[(d+1)*4+3]):(l=e[0],u=e[1],h=e[2],f=e[3]);var p=Ef(n,i,a,s,l,u,h,f,!0);r[d*2]=p[0],r[d*2+1]=p[1]}return r},"joinLines"),TS=o(function(e,r){for(var n=new Array(e.length*2),i,a,s,l,u=0;u<e.length/2;u++){i=e[u*2],a=e[u*2+1],u<e.length/2-1?(s=e[(u+1)*2],l=e[(u+1)*2+1]):(s=e[0],l=e[1]);var h=l-a,f=-(s-i),d=Math.sqrt(h*h+f*f),p=h/d,m=f/d;n[u*4]=i+p*r,n[u*4+1]=a+m*r,n[u*4+2]=s+p*r,n[u*4+3]=l+m*r}return n},"expandPolygon"),Yqe=o(function(e,r,n,i,a,s){var l=n-e,u=i-r;l/=a,u/=s;var h=Math.sqrt(l*l+u*u),f=h-1;if(f<0)return[];var d=f/h;return[(n-e)*d+e,(i-r)*d+r]},"intersectLineEllipse"),$p=o(function(e,r,n,i,a,s,l){return e-=a,r-=s,e/=n/2+l,r/=i/2+l,e*e+r*r<=1},"checkInEllipse"),Pb=o(function(e,r,n,i,a,s,l){var u=[n-e,i-r],h=[e-a,r-s],f=u[0]*u[0]+u[1]*u[1],d=2*(h[0]*u[0]+h[1]*u[1]),p=h[0]*h[0]+h[1]*h[1]-l*l,m=d*d-4*f*p;if(m<0)return[];var g=(-d+Math.sqrt(m))/(2*f),y=(-d-Math.sqrt(m))/(2*f),v=Math.min(g,y),x=Math.max(g,y),b=[];if(v>=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var w=b[0]*u[0]+e,C=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[w,C];var T=b[1]*u[0]+e,E=b[1]*u[1]+r;return[w,C,T,E]}else return[w,C]},"intersectLineCircle"),TP=o(function(e,r,n){return r<=e&&e<=n||n<=e&&e<=r?e:e<=r&&r<=n||n<=r&&r<=e?r:n},"midOfThree"),Ef=o(function(e,r,n,i,a,s,l,u,h){var f=e-a,d=n-e,p=l-a,m=r-s,g=i-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var w=v/b,C=x/b,T=.001,E=0-T,A=1+T;return E<=w&&w<=A&&E<=C&&C<=A?[e+w*d,r+w*g]:h?[e+w*d,r+w*g]:[]}else return v===0||x===0?TP(e,n,l)===l?[l,u]:TP(e,n,a)===a?[a,s]:TP(a,l,n)===n?[n,i]:[]:[]},"finiteLinesIntersect"),Xb=o(function(e,r,n,i,a,s,l,u){var h=[],f,d=new Array(n.length),p=!0;s==null&&(p=!1);var m;if(p){for(var g=0;g<d.length/2;g++)d[g*2]=n[g*2]*s+i,d[g*2+1]=n[g*2+1]*l+a;if(u>0){var y=TS(d,-u);m=wS(y)}else m=d}else m=n;for(var v,x,b,w,C=0;C<m.length/2;C++)v=m[C*2],x=m[C*2+1],C<m.length/2-1?(b=m[(C+1)*2],w=m[(C+1)*2+1]):(b=m[0],w=m[1]),f=Ef(e,r,i,a,v,x,b,w),f.length!==0&&h.push(f[0],f[1]);return h},"polygonIntersectLine"),Xqe=o(function(e,r,n,i,a,s,l,u,h){var f=[],d,p=new Array(n.length*2);h.forEach(function(b,w){w===0?(p[p.length-2]=b.startX,p[p.length-1]=b.startY):(p[w*4-2]=b.startX,p[w*4-1]=b.startY),p[w*4]=b.stopX,p[w*4+1]=b.stopY,d=Pb(e,r,i,a,b.cx,b.cy,b.radius),d.length!==0&&f.push(d[0],d[1])});for(var m=0;m<p.length/4;m++)d=Ef(e,r,i,a,p[m*4],p[m*4+1],p[m*4+2],p[m*4+3],!1),d.length!==0&&f.push(d[0],d[1]);if(f.length>2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;v<f.length/2;v++){var x=Math.pow(f[v*2]-e,2)+Math.pow(f[v*2+1]-r,2);x<=y&&(g[0]=f[v*2],g[1]=f[v*2+1],y=x)}return g}return f},"roundPolygonIntersectLine"),Q6=o(function(e,r,n){var i=[e[0]-r[0],e[1]-r[1]],a=Math.sqrt(i[0]*i[0]+i[1]*i[1]),s=(a-n)/a;return s<0&&(s=1e-5),[r[0]+s*i[0],r[1]+s*i[1]]},"shortenIntersection"),gs=o(function(e,r){var n=PP(e,r);return n=xme(n),n},"generateUnitNgonPointsFitToSquare"),xme=o(function(e){for(var r,n,i=e.length/2,a=1/0,s=1/0,l=-1/0,u=-1/0,h=0;h<i;h++)r=e[2*h],n=e[2*h+1],a=Math.min(a,r),l=Math.max(l,r),s=Math.min(s,n),u=Math.max(u,n);for(var f=2/(l-a),d=2/(u-s),p=0;p<i;p++)r=e[2*p]=e[2*p]*f,n=e[2*p+1]=e[2*p+1]*d,a=Math.min(a,r),l=Math.max(l,r),s=Math.min(s,n),u=Math.max(u,n);if(s<-1)for(var m=0;m<i;m++)n=e[2*m+1]=e[2*m+1]+(-1-s);return e},"fitPolygonToSquare"),PP=o(function(e,r){var n=1/e*2*Math.PI,i=e%2===0?Math.PI/2+n/2:Math.PI/2;i+=r;for(var a=new Array(e*2),s,l=0;l<e;l++)s=l*n+i,a[2*l]=Math.cos(s),a[2*l+1]=Math.sin(-s);return a},"generateUnitNgonPoints"),Vp=o(function(e,r){return Math.min(e/4,r/4,8)},"getRoundRectangleRadius"),bme=o(function(e,r){return Math.min(e/10,r/10,8)},"getRoundPolygonRadius"),sB=o(function(){return 8},"getCutRectangleCornerLength"),jqe=o(function(e,r,n){return[e-2*r+n,2*(r-e),e]},"bezierPtsToQuadCoeff"),BP=o(function(e,r){return{heightOffset:Math.min(15,.05*r),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},"getBarrelCurveConstants"),Kqe=la({dampingFactor:.8,precision:1e-6,iterations:200,weight:o(function(e){return 1},"weight")}),Qqe={pageRank:o(function(e){for(var r=Kqe(e),n=r.dampingFactor,i=r.precision,a=r.iterations,s=r.weight,l=this._private.cy,u=this.byGroup(),h=u.nodes,f=u.edges,d=h.length,p=d*d,m=f.length,g=new Array(p),y=new Array(d),v=(1-n)/d,x=0;x<d;x++){for(var b=0;b<d;b++){var w=x*d+b;g[w]=0}y[x]=0}for(var C=0;C<m;C++){var T=f[C],E=T.data("source"),A=T.data("target");if(E!==A){var S=h.indexOfId(E),_=h.indexOfId(A),I=s(T),D=_*d+S;g[D]+=I,y[S]+=I}}for(var k=1/d+v,L=0;L<d;L++)if(y[L]===0)for(var R=0;R<d;R++){var O=R*d+L;g[O]=k}else for(var M=0;M<d;M++){var B=M*d+L;g[B]=g[B]/y[L]+v}for(var F=new Array(d),P=new Array(d),z,$=0;$<d;$++)F[$]=1;for(var H=0;H<a;H++){for(var Q=0;Q<d;Q++)P[Q]=0;for(var j=0;j<d;j++)for(var ie=0;ie<d;ie++){var ne=j*d+ie;P[j]+=g[ne]*F[ie]}Mqe(P),z=F,F=P,P=z;for(var le=0,he=0;he<d;he++){var K=z[he]-F[he];le+=K*K}if(le<i)break}var X={rank:o(function(J){return J=l.collection(J)[0],F[h.indexOf(J)]},"rank")};return X},"pageRank")},$pe=la({root:null,weight:o(function(e){return 1},"weight"),directed:!1,alpha:0}),q1={degreeCentralityNormalized:o(function(e){e=$pe(e);var r=this.cy(),n=this.nodes(),i=n.length;if(e.directed){for(var f={},d={},p=0,m=0,g=0;g<i;g++){var y=n[g],v=y.id();e.root=y;var x=this.degreeCentrality(e);p<x.indegree&&(p=x.indegree),m<x.outdegree&&(m=x.outdegree),f[v]=x.indegree,d[v]=x.outdegree}return{indegree:o(function(w){return p==0?0:(Zt(w)&&(w=r.filter(w)),f[w.id()]/p)},"indegree"),outdegree:o(function(w){return m===0?0:(Zt(w)&&(w=r.filter(w)),d[w.id()]/m)},"outdegree")}}else{for(var a={},s=0,l=0;l<i;l++){var u=n[l];e.root=u;var h=this.degreeCentrality(e);s<h.degree&&(s=h.degree),a[u.id()]=h.degree}return{degree:o(function(w){return s===0?0:(Zt(w)&&(w=r.filter(w)),a[w.id()]/s)},"degree")}}},"degreeCentralityNormalized"),degreeCentrality:o(function(e){e=$pe(e);var r=this.cy(),n=this,i=e,a=i.root,s=i.weight,l=i.directed,u=i.alpha;if(a=r.collection(a)[0],l){for(var m=a.connectedEdges(),g=m.filter(function(E){return E.target().same(a)&&n.has(E)}),y=m.filter(function(E){return E.source().same(a)&&n.has(E)}),v=g.length,x=y.length,b=0,w=0,C=0;C<g.length;C++)b+=s(g[C]);for(var T=0;T<y.length;T++)w+=s(y[T]);return{indegree:Math.pow(v,1-u)*Math.pow(b,u),outdegree:Math.pow(x,1-u)*Math.pow(w,u)}}else{for(var h=a.connectedEdges().intersection(n),f=h.length,d=0,p=0;p<h.length;p++)d+=s(h[p]);return{degree:Math.pow(f,1-u)*Math.pow(d,u)}}},"degreeCentrality")};q1.dc=q1.degreeCentrality;q1.dcn=q1.degreeCentralityNormalised=q1.degreeCentralityNormalized;zpe=la({harmonic:!0,weight:o(function(){return 1},"weight"),directed:!1,root:null}),Y1={closenessCentralityNormalized:o(function(e){for(var r=zpe(e),n=r.harmonic,i=r.weight,a=r.directed,s=this.cy(),l={},u=0,h=this.nodes(),f=this.floydWarshall({weight:i,directed:a}),d=0;d<h.length;d++){for(var p=0,m=h[d],g=0;g<h.length;g++)if(d!==g){var y=f.distance(m,h[g]);n?p+=1/y:p+=y}n||(p=1/p),u<p&&(u=p),l[m.id()]=p}return{closeness:o(function(x){return u==0?0:(Zt(x)?x=s.filter(x)[0].id():x=x.id(),l[x]/u)},"closeness")}},"closenessCentralityNormalized"),closenessCentrality:o(function(e){var r=zpe(e),n=r.root,i=r.weight,a=r.directed,s=r.harmonic;n=this.filter(n)[0];for(var l=this.dijkstra({root:n,weight:i,directed:a}),u=0,h=this.nodes(),f=0;f<h.length;f++){var d=h[f];if(!d.same(n)){var p=l.distanceTo(d);s?u+=1/p:u+=p}}return s?u:1/u},"closenessCentrality")};Y1.cc=Y1.closenessCentrality;Y1.ccn=Y1.closenessCentralityNormalised=Y1.closenessCentralityNormalized;Zqe=la({weight:null,directed:!1}),FP={betweennessCentrality:o(function(e){for(var r=Zqe(e),n=r.directed,i=r.weight,a=i!=null,s=this.cy(),l=this.nodes(),u={},h={},f=0,d={set:o(function(w,C){h[w]=C,C>f&&(f=C)},"set"),get:o(function(w){return h[w]},"get")},p=0;p<l.length;p++){var m=l[p],g=m.id();n?u[g]=m.outgoers().nodes():u[g]=m.openNeighborhood().nodes(),d.set(g,0)}for(var y=o(function(w){for(var C=l[w].id(),T=[],E={},A={},S={},_=new i4(function(ie,ne){return S[ie]-S[ne]}),I=0;I<l.length;I++){var D=l[I].id();E[D]=[],A[D]=0,S[D]=1/0}for(A[C]=1,S[C]=0,_.push(C);!_.empty();){var k=_.pop();if(T.push(k),a)for(var L=0;L<u[k].length;L++){var R=u[k][L],O=s.getElementById(k),M=void 0;O.edgesTo(R).length>0?M=O.edgesTo(R)[0]:M=R.edgesTo(O)[0];var B=i(M);R=R.id(),S[R]>S[k]+B&&(S[R]=S[k]+B,_.nodes.indexOf(R)<0?_.push(R):_.updateItem(R),A[R]=0,E[R]=[]),S[R]==S[k]+B&&(A[R]=A[R]+A[k],E[R].push(k))}else for(var F=0;F<u[k].length;F++){var P=u[k][F].id();S[P]==1/0&&(_.push(P),S[P]=S[k]+1),S[P]==S[k]+1&&(A[P]=A[P]+A[k],E[P].push(k))}}for(var z={},$=0;$<l.length;$++)z[l[$].id()]=0;for(;T.length>0;){for(var H=T.pop(),Q=0;Q<E[H].length;Q++){var j=E[H][Q];z[j]=z[j]+A[j]/A[H]*(1+z[H])}H!=l[w].id()&&d.set(H,d.get(H)+z[H])}},"_loop"),v=0;v<l.length;v++)y(v);var x={betweenness:o(function(w){var C=s.collection(w).id();return d.get(C)},"betweenness"),betweennessNormalized:o(function(w){if(f==0)return 0;var C=s.collection(w).id();return d.get(C)/f},"betweennessNormalized")};return x.betweennessNormalised=x.betweennessNormalized,x},"betweennessCentrality")};FP.bc=FP.betweennessCentrality;Jqe=la({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(t){return 1}]}),eYe=o(function(e){return Jqe(e)},"setOptions"),tYe=o(function(e,r){for(var n=0,i=0;i<r.length;i++)n+=r[i](e);return n},"getSimilarity"),rYe=o(function(e,r,n){for(var i=0;i<r;i++)e[i*r+i]=n},"addLoops"),wme=o(function(e,r){for(var n,i=0;i<r;i++){n=0;for(var a=0;a<r;a++)n+=e[a*r+i];for(var s=0;s<r;s++)e[s*r+i]=e[s*r+i]/n}},"normalize"),nYe=o(function(e,r,n){for(var i=new Array(n*n),a=0;a<n;a++){for(var s=0;s<n;s++)i[a*n+s]=0;for(var l=0;l<n;l++)for(var u=0;u<n;u++)i[a*n+u]+=e[a*n+l]*r[l*n+u]}return i},"mmult"),iYe=o(function(e,r,n){for(var i=e.slice(0),a=1;a<n;a++)e=nYe(e,i,r);return e},"expand"),aYe=o(function(e,r,n){for(var i=new Array(r*r),a=0;a<r*r;a++)i[a]=Math.pow(e[a],n);return wme(i,r),i},"inflate"),sYe=o(function(e,r,n,i){for(var a=0;a<n;a++){var s=Math.round(e[a]*Math.pow(10,i))/Math.pow(10,i),l=Math.round(r[a]*Math.pow(10,i))/Math.pow(10,i);if(s!==l)return!1}return!0},"hasConverged"),oYe=o(function(e,r,n,i){for(var a=[],s=0;s<r;s++){for(var l=[],u=0;u<r;u++)Math.round(e[s*r+u]*1e3)/1e3>0&&l.push(n[u]);l.length!==0&&a.push(i.collection(l))}return a},"assign"),lYe=o(function(e,r){for(var n=0;n<e.length;n++)if(!r[n]||e[n].id()!==r[n].id())return!1;return!0},"isDuplicate"),cYe=o(function(e){for(var r=0;r<e.length;r++)for(var n=0;n<e.length;n++)r!=n&&lYe(e[r],e[n])&&e.splice(n,1);return e},"removeDuplicates"),Gpe=o(function(e){for(var r=this.nodes(),n=this.edges(),i=this.cy(),a=eYe(e),s={},l=0;l<r.length;l++)s[r[l].id()]=l;for(var u=r.length,h=u*u,f=new Array(h),d,p=0;p<h;p++)f[p]=0;for(var m=0;m<n.length;m++){var g=n[m],y=s[g.source().id()],v=s[g.target().id()],x=tYe(g,a.attributes);f[y*u+v]+=x,f[v*u+y]+=x}rYe(f,u,a.multFactor),wme(f,u);for(var b=!0,w=0;b&&w<a.maxIterations;)b=!1,d=iYe(f,u,a.expandFactor),f=aYe(d,u,a.inflateFactor),sYe(f,d,h,4)||(b=!0),w++;var C=oYe(f,u,r,i);return C=cYe(C),C},"markovClustering"),uYe={markovClustering:Gpe,mcl:Gpe},hYe=o(function(e){return e},"identity"),Tme=o(function(e,r){return Math.abs(r-e)},"absDiff"),Vpe=o(function(e,r,n){return e+Tme(r,n)},"addAbsDiff"),Upe=o(function(e,r,n){return e+Math.pow(n-r,2)},"addSquaredDiff"),fYe=o(function(e){return Math.sqrt(e)},"sqrt"),dYe=o(function(e,r,n){return Math.max(e,Tme(r,n))},"maxAbsDiff"),_b=o(function(e,r,n,i,a){for(var s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:hYe,l=i,u,h,f=0;f<e;f++)u=r(f),h=n(f),l=a(l,u,h);return s(l)},"getDistance"),Q1={euclidean:o(function(e,r,n){return e>=2?_b(e,r,n,0,Upe,fYe):_b(e,r,n,0,Vpe)},"euclidean"),squaredEuclidean:o(function(e,r,n){return _b(e,r,n,0,Upe)},"squaredEuclidean"),manhattan:o(function(e,r,n){return _b(e,r,n,0,Vpe)},"manhattan"),max:o(function(e,r,n){return _b(e,r,n,-1/0,dYe)},"max")};Q1["squared-euclidean"]=Q1.squaredEuclidean;Q1.squaredeuclidean=Q1.squaredEuclidean;o(IS,"clusteringDistance");pYe=la({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),oB=o(function(e){return pYe(e)},"setOptions"),kS=o(function(e,r,n,i,a){var s=a!=="kMedoids",l=s?function(d){return n[d]}:function(d){return i[d](n)},u=o(function(p){return i[p](r)},"getQ"),h=n,f=r;return IS(e,i.length,l,u,h,f)},"getDist"),kP=o(function(e,r,n){for(var i=n.length,a=new Array(i),s=new Array(i),l=new Array(r),u=null,h=0;h<i;h++)a[h]=e.min(n[h]).value,s[h]=e.max(n[h]).value;for(var f=0;f<r;f++){u=[];for(var d=0;d<i;d++)u[d]=Math.random()*(s[d]-a[d])+a[d];l[f]=u}return l},"randomCentroids"),kme=o(function(e,r,n,i,a){for(var s=1/0,l=0,u=0;u<r.length;u++){var h=kS(n,e,r[u],i,a);h<s&&(s=h,l=u)}return l},"classify"),Eme=o(function(e,r,n){for(var i=[],a=null,s=0;s<r.length;s++)a=r[s],n[a.id()]===e&&i.push(a);return i},"buildCluster"),mYe=o(function(e,r,n){return Math.abs(r-e)<=n},"haveValuesConverged"),gYe=o(function(e,r,n){for(var i=0;i<e.length;i++)for(var a=0;a<e[i].length;a++){var s=Math.abs(e[i][a]-r[i][a]);if(s>n)return!1}return!0},"haveMatricesConverged"),yYe=o(function(e,r,n){for(var i=0;i<n;i++)if(e===r[i])return!0;return!1},"seenBefore"),Hpe=o(function(e,r){var n=new Array(r);if(e.length<50)for(var i=0;i<r;i++){for(var a=e[Math.floor(Math.random()*e.length)];yYe(a,n,i);)a=e[Math.floor(Math.random()*e.length)];n[i]=a}else for(var s=0;s<r;s++)n[s]=e[Math.floor(Math.random()*e.length)];return n},"randomMedoids"),Wpe=o(function(e,r,n){for(var i=0,a=0;a<r.length;a++)i+=kS("manhattan",r[a],e,n,"kMedoids");return i},"findCost"),vYe=o(function(e){var r=this.cy(),n=this.nodes(),i=null,a=oB(e),s=new Array(a.k),l={},u;a.testMode?typeof a.testCentroids=="number"?(a.testCentroids,u=kP(n,a.k,a.attributes)):Wi(a.testCentroids)==="object"?u=a.testCentroids:u=kP(n,a.k,a.attributes):u=kP(n,a.k,a.attributes);for(var h=!0,f=0;h&&f<a.maxIterations;){for(var d=0;d<n.length;d++)i=n[d],l[i.id()]=kme(i,u,a.distance,a.attributes,"kMeans");h=!1;for(var p=0;p<a.k;p++){var m=Eme(p,n,l);if(m.length!==0){for(var g=a.attributes.length,y=u[p],v=new Array(g),x=new Array(g),b=0;b<g;b++){x[b]=0;for(var w=0;w<m.length;w++)i=m[w],x[b]+=a.attributes[b](i);v[b]=x[b]/m.length,mYe(v[b],y[b],a.sensitivityThreshold)||(h=!0)}u[p]=v,s[p]=r.collection(m)}}f++}return s},"kMeans"),xYe=o(function(e){var r=this.cy(),n=this.nodes(),i=null,a=oB(e),s=new Array(a.k),l,u={},h,f=new Array(a.k);a.testMode?typeof a.testCentroids=="number"||(Wi(a.testCentroids)==="object"?l=a.testCentroids:l=Hpe(n,a.k)):l=Hpe(n,a.k);for(var d=!0,p=0;d&&p<a.maxIterations;){for(var m=0;m<n.length;m++)i=n[m],u[i.id()]=kme(i,l,a.distance,a.attributes,"kMedoids");d=!1;for(var g=0;g<l.length;g++){var y=Eme(g,n,u);if(y.length!==0){f[g]=Wpe(l[g],y,a.attributes);for(var v=0;v<y.length;v++)h=Wpe(y[v],y,a.attributes),h<f[g]&&(f[g]=h,l[g]=y[v],d=!0);s[g]=r.collection(y)}}p++}return s},"kMedoids"),bYe=o(function(e,r,n,i,a){for(var s,l,u=0;u<r.length;u++)for(var h=0;h<e.length;h++)i[u][h]=Math.pow(n[u][h],a.m);for(var f=0;f<e.length;f++)for(var d=0;d<a.attributes.length;d++){s=0,l=0;for(var p=0;p<r.length;p++)s+=i[p][f]*a.attributes[d](r[p]),l+=i[p][f];e[f][d]=s/l}},"updateCentroids"),wYe=o(function(e,r,n,i,a){for(var s=0;s<e.length;s++)r[s]=e[s].slice();for(var l,u,h,f=2/(a.m-1),d=0;d<n.length;d++)for(var p=0;p<i.length;p++){l=0;for(var m=0;m<n.length;m++)u=kS(a.distance,i[p],n[d],a.attributes,"cmeans"),h=kS(a.distance,i[p],n[m],a.attributes,"cmeans"),l+=Math.pow(u/h,f);e[p][d]=1/l}},"updateMembership"),TYe=o(function(e,r,n,i){for(var a=new Array(n.k),s=0;s<a.length;s++)a[s]=[];for(var l,u,h=0;h<r.length;h++){l=-1/0,u=-1;for(var f=0;f<r[0].length;f++)r[h][f]>l&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d<a.length;d++)a[d]=i.collection(a[d]);return a},"assign"),qpe=o(function(e){var r=this.cy(),n=this.nodes(),i=oB(e),a,s,l,u,h;u=new Array(n.length);for(var f=0;f<n.length;f++)u[f]=new Array(i.k);l=new Array(n.length);for(var d=0;d<n.length;d++)l[d]=new Array(i.k);for(var p=0;p<n.length;p++){for(var m=0,g=0;g<i.k;g++)l[p][g]=Math.random(),m+=l[p][g];for(var y=0;y<i.k;y++)l[p][y]=l[p][y]/m}s=new Array(i.k);for(var v=0;v<i.k;v++)s[v]=new Array(i.attributes.length);h=new Array(n.length);for(var x=0;x<n.length;x++)h[x]=new Array(i.k);for(var b=!0,w=0;b&&w<i.maxIterations;)b=!1,bYe(s,n,l,h,i),wYe(l,u,s,n,i),gYe(l,u,i.sensitivityThreshold)||(b=!0),w++;return a=TYe(n,l,i,r),{clusters:a,degreeOfMembership:l}},"fuzzyCMeans"),kYe={kMeans:vYe,kMedoids:xYe,fuzzyCMeans:qpe,fcm:qpe},EYe=la({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),SYe={single:"min",complete:"max"},CYe=o(function(e){var r=EYe(e),n=SYe[r.linkage];return n!=null&&(r.linkage=n),r},"setOptions"),Ype=o(function(e,r,n,i,a){for(var s=0,l=1/0,u,h=a.attributes,f=o(function(_,I){return IS(a.distance,h.length,function(D){return h[D](_)},function(D){return h[D](I)},_,I)},"getDist"),d=0;d<e.length;d++){var p=e[d].key,m=n[p][i[p]];m<l&&(s=p,l=m)}if(a.mode==="threshold"&&l>=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[i[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;x<e.length;x++){var b=e[x];g.key===b.key?u=1/0:a.linkage==="min"?(u=n[g.key][b.key],n[g.key][b.key]>n[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="max"?(u=n[g.key][b.key],n[g.key][b.key]<n[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="mean"?u=(n[g.key][b.key]*g.size+n[y.key][b.key]*y.size)/(g.size+y.size):a.mode==="dendrogram"?u=f(b.value,g.value):u=f(b.value[0],g.value[0]),n[g.key][b.key]=n[b.key][g.key]=u}for(var w=0;w<e.length;w++){var C=e[w].key;if(i[C]===g.key||i[C]===y.key){for(var T=C,E=0;E<e.length;E++){var A=e[E].key;n[C][A]<n[C][T]&&(T=A)}i[C]=T}e[w].index=w}return g.key=y.key=g.index=y.index=null,!0},"mergeClosest"),Z6=o(function t(e,r,n){e&&(e.value?r.push(e.value):(e.left&&t(e.left,r),e.right&&t(e.right,r)))},"getAllChildren"),AYe=o(function t(e,r){if(!e)return"";if(e.left&&e.right){var n=t(e.left,r),i=t(e.right,r),a=r.add({group:"nodes",data:{id:n+","+i}});return r.add({group:"edges",data:{source:n,target:a.id()}}),r.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}else if(e.value)return e.value.id()},"buildDendrogram"),_Ye=o(function t(e,r,n){if(!e)return[];var i=[],a=[],s=[];return r===0?(e.left&&Z6(e.left,i),e.right&&Z6(e.right,a),s=i.concat(a),[n.collection(s)]):r===1?e.value?[n.collection(e.value)]:(e.left&&Z6(e.left,i),e.right&&Z6(e.right,a),[n.collection(i),n.collection(a)]):e.value?[n.collection(e.value)]:(e.left&&(i=t(e.left,r-1,n)),e.right&&(a=t(e.right,r-1,n)),i.concat(a))},"buildClustersFromTree"),Xpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=CYe(e),a=i.attributes,s=o(function(w,C){return IS(i.distance,a.length,function(T){return a[T](w)},function(T){return a[T](C)},w,C)},"getDist"),l=[],u=[],h=[],f=[],d=0;d<n.length;d++){var p={value:i.mode==="dendrogram"?n[d]:[n[d]],key:d,index:d};l[d]=p,f[d]=p,u[d]=[],h[d]=0}for(var m=0;m<l.length;m++)for(var g=0;g<=m;g++){var y=void 0;i.mode==="dendrogram"?y=m===g?1/0:s(l[m].value,l[g].value):y=m===g?1/0:s(l[m].value[0],l[g].value[0]),u[m][g]=y,u[g][m]=y,y<u[m][h[m]]&&(h[m]=g)}for(var v=Ype(l,f,u,h,i);v;)v=Ype(l,f,u,h,i);var x;return i.mode==="dendrogram"?(x=_Ye(l[0],i.dendrogramDepth,r),i.addDendrogram&&AYe(l[0],r)):(x=new Array(l.length),l.forEach(function(b,w){b.key=b.index=null,x[w]=r.collection(b.value)})),x},"hierarchicalClustering"),DYe={hierarchicalClustering:Xpe,hca:Xpe},LYe=la({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),RYe=o(function(e){var r=e.damping,n=e.preference;.5<=r&&r<1||ai("Damping must range on [0.5, 1). Got: ".concat(r));var i=["median","mean","min","max"];return i.some(function(a){return a===n})||Ct(n)||ai("Preference must be one of [".concat(i.map(function(a){return"'".concat(a,"'")}).join(", "),"] or a number. Got: ").concat(n)),LYe(e)},"setOptions"),NYe=o(function(e,r,n,i){var a=o(function(l,u){return i[u](l)},"attr");return-IS(e,i.length,function(s){return a(r,s)},function(s){return a(n,s)},r,n)},"getSimilarity"),MYe=o(function(e,r){var n=null;return r==="median"?n=Rqe(e):r==="mean"?n=Lqe(e):r==="min"?n=_qe(e):r==="max"?n=Dqe(e):n=r,n},"getPreference"),IYe=o(function(e,r,n){for(var i=[],a=0;a<e;a++)r[a*e+a]+n[a*e+a]>0&&i.push(a);return i},"findExemplars"),jpe=o(function(e,r,n){for(var i=[],a=0;a<e;a++){for(var s=-1,l=-1/0,u=0;u<n.length;u++){var h=n[u];r[a*e+h]>l&&(s=h,l=r[a*e+h])}s>0&&i.push(s)}for(var f=0;f<n.length;f++)i[n[f]]=n[f];return i},"assignClusters"),OYe=o(function(e,r,n){for(var i=jpe(e,r,n),a=0;a<n.length;a++){for(var s=[],l=0;l<i.length;l++)i[l]===n[a]&&s.push(l);for(var u=-1,h=-1/0,f=0;f<s.length;f++){for(var d=0,p=0;p<s.length;p++)d+=r[s[p]*e+s[f]];d>h&&(u=f,h=d)}n[a]=s[u]}return i=jpe(e,r,n),i},"assign"),Kpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=RYe(e),a={},s=0;s<n.length;s++)a[n[s].id()]=s;var l,u,h,f,d,p;l=n.length,u=l*l,h=new Array(u);for(var m=0;m<u;m++)h[m]=-1/0;for(var g=0;g<l;g++)for(var y=0;y<l;y++)g!==y&&(h[g*l+y]=NYe(i.distance,n[g],n[y],i.attributes));f=MYe(h,i.preference);for(var v=0;v<l;v++)h[v*l+v]=f;d=new Array(u);for(var x=0;x<u;x++)d[x]=0;p=new Array(u);for(var b=0;b<u;b++)p[b]=0;for(var w=new Array(l),C=new Array(l),T=new Array(l),E=0;E<l;E++)w[E]=0,C[E]=0,T[E]=0;for(var A=new Array(l*i.minIterations),S=0;S<A.length;S++)A[S]=0;var _;for(_=0;_<i.maxIterations;_++){for(var I=0;I<l;I++){for(var D=-1/0,k=-1/0,L=-1,R=0,O=0;O<l;O++)w[O]=d[I*l+O],R=p[I*l+O]+h[I*l+O],R>=D?(k=D,D=R,L=O):R>k&&(k=R);for(var M=0;M<l;M++)d[I*l+M]=(1-i.damping)*(h[I*l+M]-D)+i.damping*w[M];d[I*l+L]=(1-i.damping)*(h[I*l+L]-k)+i.damping*w[L]}for(var B=0;B<l;B++){for(var F=0,P=0;P<l;P++)w[P]=p[P*l+B],C[P]=Math.max(0,d[P*l+B]),F+=C[P];F-=C[B],C[B]=d[B*l+B],F+=C[B];for(var z=0;z<l;z++)p[z*l+B]=(1-i.damping)*Math.min(0,F-C[z])+i.damping*w[z];p[B*l+B]=(1-i.damping)*(F-C[B])+i.damping*w[B]}for(var $=0,H=0;H<l;H++){var Q=p[H*l+H]+d[H*l+H]>0?1:0;A[_%i.minIterations*l+H]=Q,$+=Q}if($>0&&(_>=i.minIterations-1||_==i.maxIterations-1)){for(var j=0,ie=0;ie<l;ie++){T[ie]=0;for(var ne=0;ne<i.minIterations;ne++)T[ie]+=A[ne*l+ie];(T[ie]===0||T[ie]===i.minIterations)&&j++}if(j===l)break}}for(var le=IYe(l,d,p),he=OYe(l,h,le),K={},X=0;X<le.length;X++)K[le[X]]=[];for(var te=0;te<n.length;te++){var J=a[n[te].id()],se=he[J];se!=null&&K[se].push(n[te])}for(var ue=new Array(le.length),Z=0;Z<le.length;Z++)ue[Z]=r.collection(K[le[Z]]);return ue},"affinityPropagation"),PYe={affinityPropagation:Kpe,ap:Kpe},BYe=la({root:void 0,directed:!1}),FYe={hierholzer:o(function(e){if(!Ur(e)){var r=arguments;e={root:r[0],directed:r[1]}}var n=BYe(e),i=n.root,a=n.directed,s=this,l=!1,u,h,f;i&&(f=Zt(i)?this.filter(i)[0].id():i[0].id());var d={},p={};a?s.forEach(function(b){var w=b.id();if(b.isNode()){var C=b.indegree(!0),T=b.outdegree(!0),E=C-T,A=T-C;E==1?u?l=!0:u=w:A==1?h?l=!0:h=w:(A>1||E>1)&&(l=!0),d[w]=[],b.outgoers().forEach(function(S){S.isEdge()&&d[w].push(S.id())})}else p[w]=[void 0,b.target().id()]}):s.forEach(function(b){var w=b.id();if(b.isNode()){var C=b.degree(!0);C%2&&(u?h?l=!0:h=w:u=w),d[w]=[],b.connectedEdges().forEach(function(T){return d[w].push(T.id())})}else p[w]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(w){for(var C=w,T=[w],E,A,S;d[C].length;)E=d[C].shift(),A=p[E][0],S=p[E][1],C!=S?(d[S]=d[S].filter(function(_){return _!=E}),C=S):!a&&C!=A&&(d[A]=d[A].filter(function(_){return _!=E}),C=A),T.unshift(E),T.unshift(C);return T},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},J6=o(function(){var e=this,r={},n=0,i=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(w){var C=w.id(),T=w.connectedEdges().intersection(e);v.merge(w),r[C].cutVertex?v.merge(T.filter(function(E){return E.isLoop()})):v.merge(T)})}),a.push(v)},"buildComponent"),h=o(function d(p,m,g){p===g&&(i+=1),r[m]={id:n,low:n++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,w;y.forEach(function(C){v=C.source().id(),x=C.target().id(),b=v===m?x:v,b!==g&&(w=C.id(),l[w]||(l[w]=!0,s.push({x:m,y:b,edge:C})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(d(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(i=0,h(p,p),r[p].cutVertex=i>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),$Ye={hopcroftTarjanBiconnected:J6,htbc:J6,htb:J6,hopcroftTarjanBiconnectedComponents:J6},eS=o(function(){var e=this,r={},n=0,i=[],a=[],s=e.spawn(e),l=o(function u(h){a.push(h),r[h]={index:n,low:n++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||u(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);i.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:i}},"tarjanStronglyConnected"),zYe={tarjanStronglyConnected:eS,tsc:eS,tscc:eS,tarjanStronglyConnectedComponents:eS},Sme={};[qb,gqe,yqe,xqe,wqe,kqe,Cqe,Qqe,q1,Y1,FP,uYe,kYe,DYe,PYe,FYe,$Ye,zYe].forEach(function(t){rr(Sme,t)});Cme=0,Ame=1,_me=2,Ju=o(function t(e){if(!(this instanceof t))return new t(e);this.id="Thenable/1.0.7",this.state=Cme,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");Ju.prototype={fulfill:o(function(e){return Qpe(this,Ame,"fulfillValue",e)},"fulfill"),reject:o(function(e){return Qpe(this,_me,"rejectReason",e)},"reject"),then:o(function(e,r){var n=this,i=new Ju;return n.onFulfilled.push(Jpe(e,i,"fulfill")),n.onRejected.push(Jpe(r,i,"reject")),Dme(n),i.proxy},"then")};Qpe=o(function(e,r,n,i){return e.state===Cme&&(e.state=r,e[n]=i,Dme(e)),e},"deliver"),Dme=o(function(e){e.state===Ame?Zpe(e,"onFulfilled",e.fulfillValue):e.state===_me&&Zpe(e,"onRejected",e.rejectReason)},"execute"),Zpe=o(function(e,r,n){if(e[r].length!==0){var i=e[r];e[r]=[];var a=o(function(){for(var l=0;l<i.length;l++)i[l](n)},"func");typeof setImmediate=="function"?setImmediate(a):setTimeout(a,0)}},"execute_handlers"),Jpe=o(function(e,r,n){return function(i){if(typeof e!="function")r[n].call(r,i);else{var a;try{a=e(i)}catch(s){r.reject(s);return}GYe(r,a)}}},"resolver"),GYe=o(function t(e,r){if(e===r||e.proxy===r){e.reject(new TypeError("cannot resolve promise with itself"));return}var n;if(Wi(r)==="object"&&r!==null||typeof r=="function")try{n=r.then}catch(a){e.reject(a);return}if(typeof n=="function"){var i=!1;try{n.call(r,function(a){i||(i=!0,a===r?e.reject(new TypeError("circular thenable chain")):t(e,a))},function(a){i||(i=!0,e.reject(a))})}catch(a){i||e.reject(a)}return}e.fulfill(r)},"resolve");Ju.all=function(t){return new Ju(function(e,r){for(var n=new Array(t.length),i=0,a=o(function(u,h){n[u]=h,i++,i===t.length&&e(n)},"fulfill"),s=0;s<t.length;s++)(function(l){var u=t[l],h=u!=null&&u.then!=null;if(h)u.then(function(d){a(l,d)},function(d){r(d)});else{var f=u;a(l,f)}})(s)})};Ju.resolve=function(t){return new Ju(function(e,r){e(t)})};Ju.reject=function(t){return new Ju(function(e,r){r(t)})};ey=typeof Promise<"u"?Promise:Ju,$P=o(function(e,r,n){var i=JP(e),a=!i,s=this._private=rr({duration:1e3},r,n);if(s.target=e,s.style=s.style||s.css,s.started=!1,s.playing=!1,s.hooked=!1,s.applying=!1,s.progress=0,s.completes=[],s.frames=[],s.complete&&si(s.complete)&&s.completes.push(s.complete),a){var l=e.position();s.startPosition=s.startPosition||{x:l.x,y:l.y},s.startStyle=s.startStyle||e.cy().style().getAnimationStartStyle(e,s.style)}if(i){var u=e.pan();s.startPan={x:u.x,y:u.y},s.startZoom=e.zoom()}this.length=1,this[0]=this},"Animation"),Up=$P.prototype;rr(Up,{instanceString:o(function(){return"animation"},"instanceString"),hook:o(function(){var e=this._private;if(!e.hooked){var r,n=e.target._private.animation;e.queue?r=n.queue:r=n.current,r.push(this),go(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},"hook"),play:o(function(){var e=this._private;return e.progress===1&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},"play"),playing:o(function(){return this._private.playing},"playing"),apply:o(function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},"apply"),applying:o(function(){return this._private.applying},"applying"),pause:o(function(){var e=this._private;return e.playing=!1,e.started=!1,this},"pause"),stop:o(function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},"stop"),rewind:o(function(){return this.progress(0)},"rewind"),fastforward:o(function(){return this.progress(1)},"fastforward"),time:o(function(e){var r=this._private;return e===void 0?r.progress*r.duration:this.progress(e/r.duration)},"time"),progress:o(function(e){var r=this._private,n=r.playing;return e===void 0?r.progress:(n&&this.pause(),r.progress=e,r.started=!1,n&&this.play(),this)},"progress"),completed:o(function(){return this._private.progress===1},"completed"),reverse:o(function(){var e=this._private,r=e.playing;r&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=o(function(h,f){var d=e[h];d!=null&&(e[h]=e[f],e[f]=d)},"swap");if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var i=0;i<e.style.length;i++){var a=e.style[i],s=a.name,l=e.startStyle[s];e.startStyle[s]=a,e.style[i]=l}return r&&this.play(),this},"reverse"),promise:o(function(e){var r=this._private,n;switch(e){case"frame":n=r.frames;break;default:case"complete":case"completed":n=r.completes}return new ey(function(i,a){n.push(function(){i()})})},"promise")});Up.complete=Up.completed;Up.run=Up.play;Up.running=Up.playing;VYe={animated:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return!1;var s=i[0];if(s)return s._private.animation.current.length>0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s<i.length;s++){var l=i[s];l._private.animation.queue=[]}return this},"clearQueueImpl")},"clearQueue"),delay:o(function(){return o(function(r,n){var i=this._private.cy||this;return i.styleEnabled()?this.animate({delay:r,duration:r,complete:n}):this},"delayImpl")},"delay"),delayAnimation:o(function(){return o(function(r,n){var i=this._private.cy||this;return i.styleEnabled()?this.animation({delay:r,duration:r,complete:n}):this},"delayAnimationImpl")},"delayAnimation"),animation:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this,u=!a,h=!u;if(!l.styleEnabled())return this;var f=l.style();r=rr({},r,n);var d=Object.keys(r).length===0;if(d)return new $P(s[0],r);switch(r.duration===void 0&&(r.duration=400),r.duration){case"slow":r.duration=600;break;case"fast":r.duration=200;break}if(h&&(r.style=f.getPropsList(r.style||r.css),r.css=void 0),h&&r.renderedPosition!=null){var p=r.renderedPosition,m=l.pan(),g=l.zoom();r.position=pme(p,g,m)}if(u&&r.panBy!=null){var y=r.panBy,v=l.pan();r.pan={x:v.x+y.x,y:v.y+y.y}}var x=r.center||r.centre;if(u&&x!=null){var b=l.getCenterPan(x.eles,r.zoom);b!=null&&(r.pan=b)}if(u&&r.fit!=null){var w=r.fit,C=l.getFitViewport(w.eles||w.boundingBox,w.padding);C!=null&&(r.pan=C.pan,r.zoom=C.zoom)}if(u&&Ur(r.zoom)){var T=l.getZoomedViewport(r.zoom);T!=null?(T.zoomed&&(r.zoom=T.zoom),T.panned&&(r.pan=T.pan)):r.zoom=null}return new $P(s[0],r)},"animationImpl")},"animation"),animate:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this;if(!l.styleEnabled())return this;n&&(r=rr({},r,n));for(var u=0;u<s.length;u++){var h=s[u],f=h.animated()&&(r.queue===void 0||r.queue),d=h.animation(r,f?{queue:!0}:void 0);d.play()}return this},"animateImpl")},"animate"),stop:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this;if(!l.styleEnabled())return this;for(var u=0;u<s.length;u++){for(var h=s[u],f=h._private,d=f.animation.current,p=0;p<d.length;p++){var m=d[p],g=m._private;n&&(g.duration=0)}r&&(f.animation.queue=[]),n||(f.animation.current=[])}return l.notify("draw"),this},"stopImpl")},"stop")},UYe=Array.isArray,OS=UYe,HYe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,WYe=/^\w*$/;o(qYe,"isKey");YYe=qYe,XYe="[object AsyncFunction]",jYe="[object Function]",KYe="[object GeneratorFunction]",QYe="[object Proxy]";o(ZYe,"isFunction");JYe=ZYe,eXe=RS["__core-js_shared__"],EP=eXe,e0e=function(){var t=/[^.]+$/.exec(EP&&EP.keys&&EP.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(tXe,"isMasked");rXe=tXe,nXe=Function.prototype,iXe=nXe.toString;o(aXe,"toSource");sXe=aXe,oXe=/[\\^$.*+?()[\]{}|]/g,lXe=/^\[object .+?Constructor\]$/,cXe=Function.prototype,uXe=Object.prototype,hXe=cXe.toString,fXe=uXe.hasOwnProperty,dXe=RegExp("^"+hXe.call(fXe).replace(oXe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(pXe,"baseIsNative");mXe=pXe;o(gXe,"getValue$1");yXe=gXe;o(vXe,"getNative");lB=vXe,xXe=lB(Object,"create"),jb=xXe;o(bXe,"hashClear");wXe=bXe;o(TXe,"hashDelete");kXe=TXe,EXe="__lodash_hash_undefined__",SXe=Object.prototype,CXe=SXe.hasOwnProperty;o(AXe,"hashGet");_Xe=AXe,DXe=Object.prototype,LXe=DXe.hasOwnProperty;o(RXe,"hashHas");NXe=RXe,MXe="__lodash_hash_undefined__";o(IXe,"hashSet");OXe=IXe;o(ty,"Hash");ty.prototype.clear=wXe;ty.prototype.delete=kXe;ty.prototype.get=_Xe;ty.prototype.has=NXe;ty.prototype.set=OXe;t0e=ty;o(PXe,"listCacheClear");BXe=PXe;o(FXe,"eq");Lme=FXe;o($Xe,"assocIndexOf");PS=$Xe,zXe=Array.prototype,GXe=zXe.splice;o(VXe,"listCacheDelete");UXe=VXe;o(HXe,"listCacheGet");WXe=HXe;o(qXe,"listCacheHas");YXe=qXe;o(XXe,"listCacheSet");jXe=XXe;o(ry,"ListCache");ry.prototype.clear=BXe;ry.prototype.delete=UXe;ry.prototype.get=WXe;ry.prototype.has=YXe;ry.prototype.set=jXe;KXe=ry,QXe=lB(RS,"Map"),ZXe=QXe;o(JXe,"mapCacheClear");eje=JXe;o(tje,"isKeyable");rje=tje;o(nje,"getMapData");BS=nje;o(ije,"mapCacheDelete");aje=ije;o(sje,"mapCacheGet");oje=sje;o(lje,"mapCacheHas");cje=lje;o(uje,"mapCacheSet");hje=uje;o(ny,"MapCache");ny.prototype.clear=eje;ny.prototype.delete=aje;ny.prototype.get=oje;ny.prototype.has=cje;ny.prototype.set=hje;Rme=ny,fje="Expected a function";o(cB,"memoize");cB.Cache=Rme;dje=cB,pje=500;o(mje,"memoizeCapped");gje=mje,yje=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,vje=/\\(\\)?/g,xje=gje(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(yje,function(r,n,i,a){e.push(i?a.replace(vje,"$1"):n||r)}),e}),Nme=xje;o(bje,"arrayMap");Mme=bje,wje=1/0,r0e=j1?j1.prototype:void 0,n0e=r0e?r0e.toString:void 0;o(Ime,"baseToString");Tje=Ime;o(kje,"toString$1");Ome=kje;o(Eje,"castPath");Pme=Eje,Sje=1/0;o(Cje,"toKey");uB=Cje;o(Aje,"baseGet");_je=Aje;o(Dje,"get");Lje=Dje,Rje=function(){try{var t=lB(Object,"defineProperty");return t({},"",{}),t}catch{}}(),i0e=Rje;o(Nje,"baseAssignValue");Mje=Nje,Ije=Object.prototype,Oje=Ije.hasOwnProperty;o(Pje,"assignValue");Bje=Pje,Fje=9007199254740991,$je=/^(?:0|[1-9]\d*)$/;o(zje,"isIndex");Gje=zje;o(Vje,"baseSet");Uje=Vje;o(Hje,"set");Wje=Hje;o(qje,"copyArray");Yje=qje;o(Xje,"toPath");jje=Xje,Kje={data:o(function(e){var r={field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:o(function(i){},"beforeGet"),beforeSet:o(function(i,a){},"beforeSet"),onSet:o(function(i){},"onSet"),canSet:o(function(i){return!0},"canSet")};return e=rr({},r,e),o(function(i,a){var s=e,l=this,u=l.length!==void 0,h=u?l:[l],f=u?l[0]:l;if(Zt(i)){var d=i.indexOf(".")!==-1,p=d&&jje(i);if(s.allowGetting&&a===void 0){var m;return f&&(s.beforeGet(f),p&&f._private[s.field][i]===void 0?m=Lje(f._private[s.field],p):m=f._private[s.field][i]),m}else if(s.allowSetting&&a!==void 0){var g=!s.immutableKeys[i];if(g){var y=X0e({},i,a);s.beforeSet(l,y);for(var v=0,x=h.length;v<x;v++){var b=h[v];s.canSet(b)&&(p&&f._private[s.field][i]===void 0?Wje(b._private[s.field],p,a):b._private[s.field][i]=a)}s.updateStyle&&l.updateStyle(),s.onSet(l),s.settingTriggersEvent&&l[s.triggerFnName](s.settingEvent)}}}else if(s.allowSetting&&Ur(i)){var w=i,C,T,E=Object.keys(w);s.beforeSet(l,w);for(var A=0;A<E.length;A++){C=E[A],T=w[C];var S=!s.immutableKeys[C];if(S)for(var _=0;_<h.length;_++){var I=h[_];s.canSet(I)&&(I._private[s.field][C]=T)}}s.updateStyle&&l.updateStyle(),s.onSet(l),s.settingTriggersEvent&&l[s.triggerFnName](s.settingEvent)}else if(s.allowBinding&&si(i)){var D=i;l.on(s.bindingEvent,D)}else if(s.allowGetting&&i===void 0){var k;return f&&(s.beforeGet(f),k=f._private[s.field]),k}return l},"dataImpl")},"data"),removeData:o(function(e){var r={field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}};return e=rr({},r,e),o(function(i){var a=e,s=this,l=s.length!==void 0,u=l?s:[s];if(Zt(i)){for(var h=i.split(/\s+/),f=h.length,d=0;d<f;d++){var p=h[d];if(!Af(p)){var m=!a.immutableKeys[p];if(m)for(var g=0,y=u.length;g<y;g++)u[g]._private[a.field][p]=void 0}}a.triggerEvent&&s[a.triggerFnName](a.event)}else if(i===void 0){for(var v=0,x=u.length;v<x;v++)for(var b=u[v]._private[a.field],w=Object.keys(b),C=0;C<w.length;C++){var T=w[C],E=!a.immutableKeys[T];E&&(b[T]=void 0)}a.triggerEvent&&s[a.triggerFnName](a.event)}return s},"removeDataImpl")},"removeData")},Qje={eventAliasesOn:o(function(e){var r=e;r.addListener=r.listen=r.bind=r.on,r.unlisten=r.unbind=r.off=r.removeListener,r.trigger=r.emit,r.pon=r.promiseOn=function(n,i){var a=this,s=Array.prototype.slice.call(arguments,0);return new ey(function(l,u){var h=o(function(m){a.off.apply(a,d),l(m)},"callback"),f=s.concat([h]),d=f.concat([]);a.on.apply(a,f)})}},"eventAliasesOn")},cn={};[VYe,Kje,Qje].forEach(function(t){rr(cn,t)});Zje={animate:cn.animate(),animation:cn.animation(),animated:cn.animated(),clearQueue:cn.clearQueue(),delay:cn.delay(),delayAnimation:cn.delayAnimation(),stop:cn.stop()},hS={classes:o(function(e){var r=this;if(e===void 0){var n=[];return r[0]._private.classes.forEach(function(g){return n.push(g)}),n}else En(e)||(e=(e||"").match(/\S+/g)||[]);for(var i=[],a=new J1(e),s=0;s<r.length;s++){for(var l=r[s],u=l._private,h=u.classes,f=!1,d=0;d<e.length;d++){var p=e[d],m=h.has(p);if(!m){f=!0;break}}f||(f=h.size!==e.length),f&&(u.classes=a,i.push(l))}return i.length>0&&this.spawn(i).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){En(e)||(e=e.match(/\S+/g)||[]);for(var n=this,i=r===void 0,a=[],s=0,l=n.length;s<l;s++)for(var u=n[s],h=u._private.classes,f=!1,d=0;d<e.length;d++){var p=e[d],m=h.has(p),g=!1;r||i&&!m?(h.add(p),g=!0):(!r||i&&m)&&(h.delete(p),g=!0),!f&&g&&(a.push(u),f=!0)}return a.length>0&&this.spawn(a).updateStyle().emit("class"),n},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var n=this;if(r==null)r=250;else if(r===0)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},r),n},"flashClass")};hS.className=hS.classNames=hS.classes;Vr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Hi,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Vr.variable="(?:[\\w-.]|(?:\\\\"+Vr.metaChar+"))+";Vr.className="(?:[\\w-]|(?:\\\\"+Vr.metaChar+"))+";Vr.value=Vr.string+"|"+Vr.number;Vr.id=Vr.variable;(function(){var t,e,r;for(t=Vr.comparatorOp.split("|"),r=0;r<t.length;r++)e=t[r],Vr.comparatorOp+="|@"+e;for(t=Vr.comparatorOp.split("|"),r=0;r<t.length;r++)e=t[r],!(e.indexOf("!")>=0)&&e!=="="&&(Vr.comparatorOp+="|\\!"+e)})();mn=o(function(){return{checks:[]}},"newQuery"),$t={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},zP=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return hWe(t.selector,e.selector)}),Jje=function(){for(var t={},e,r=0;r<zP.length;r++)e=zP[r],t[e.selector]=e.matches;return t}(),eKe=o(function(e,r){return Jje[e](r)},"stateSelectorMatches"),tKe="("+zP.map(function(t){return t.selector}).join("|")+")",B1=o(function(e){return e.replace(new RegExp("\\\\("+Vr.metaChar+")","g"),function(r,n){return n})},"cleanMetaChars"),Tf=o(function(e,r,n){e[e.length-1]=n},"replaceLastQuery"),GP=[{name:"group",query:!0,regex:"("+Vr.group+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.GROUP,value:a==="*"?a:a+"s"})},"populate")},{name:"state",query:!0,regex:tKe,populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.STATE,value:a})},"populate")},{name:"id",query:!0,regex:"\\#("+Vr.id+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.ID,value:B1(a)})},"populate")},{name:"className",query:!0,regex:"\\.("+Vr.className+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.CLASS,value:B1(a)})},"populate")},{name:"dataExists",query:!0,regex:"\\[\\s*("+Vr.variable+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.DATA_EXIST,field:B1(a)})},"populate")},{name:"dataCompare",query:!0,regex:"\\[\\s*("+Vr.variable+")\\s*("+Vr.comparatorOp+")\\s*("+Vr.value+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,3),a=i[0],s=i[1],l=i[2],u=new RegExp("^"+Vr.string+"$").exec(l)!=null;u?l=l.substring(1,l.length-1):l=parseFloat(l),r.checks.push({type:$t.DATA_COMPARE,field:B1(a),operator:s,value:l})},"populate")},{name:"dataBool",query:!0,regex:"\\[\\s*("+Vr.boolOp+")\\s*("+Vr.variable+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,2),a=i[0],s=i[1];r.checks.push({type:$t.DATA_BOOL,field:B1(s),operator:a})},"populate")},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+Vr.meta+")\\s*("+Vr.comparatorOp+")\\s*("+Vr.number+")\\s*\\]\\]",populate:o(function(e,r,n){var i=_i(n,3),a=i[0],s=i[1],l=i[2];r.checks.push({type:$t.META_COMPARE,field:B1(a),operator:s,value:parseFloat(l)})},"populate")},{name:"nextQuery",separator:!0,regex:Vr.separator,populate:o(function(e,r){var n=e.currentSubject,i=e.edgeCount,a=e.compoundCount,s=e[e.length-1];n!=null&&(s.subject=n,e.currentSubject=null),s.edgeCount=i,s.compoundCount=a,e.edgeCount=0,e.compoundCount=0;var l=e[e.length++]=mn();return l},"populate")},{name:"directedEdge",separator:!0,regex:Vr.directedEdge,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=r,a=mn();return n.checks.push({type:$t.DIRECTED_EDGE,source:i,target:a}),Tf(e,r,n),e.edgeCount++,a}else{var s=mn(),l=r,u=mn();return s.checks.push({type:$t.NODE_SOURCE,source:l,target:u}),Tf(e,r,s),e.edgeCount++,u}},"populate")},{name:"undirectedEdge",separator:!0,regex:Vr.undirectedEdge,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=r,a=mn();return n.checks.push({type:$t.UNDIRECTED_EDGE,nodes:[i,a]}),Tf(e,r,n),e.edgeCount++,a}else{var s=mn(),l=r,u=mn();return s.checks.push({type:$t.NODE_NEIGHBOR,node:l,neighbor:u}),Tf(e,r,s),u}},"populate")},{name:"child",separator:!0,regex:Vr.child,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=mn(),a=e[e.length-1];return n.checks.push({type:$t.CHILD,parent:a,child:i}),Tf(e,r,n),e.compoundCount++,i}else if(e.currentSubject===r){var s=mn(),l=e[e.length-1],u=mn(),h=mn(),f=mn(),d=mn();return s.checks.push({type:$t.COMPOUND_SPLIT,left:l,right:u,subject:h}),h.checks=r.checks,r.checks=[{type:$t.TRUE}],d.checks.push({type:$t.TRUE}),u.checks.push({type:$t.PARENT,parent:d,child:f}),Tf(e,l,s),e.currentSubject=h,e.compoundCount++,f}else{var p=mn(),m=mn(),g=[{type:$t.PARENT,parent:p,child:m}];return p.checks=r.checks,r.checks=g,e.compoundCount++,m}},"populate")},{name:"descendant",separator:!0,regex:Vr.descendant,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=mn(),a=e[e.length-1];return n.checks.push({type:$t.DESCENDANT,ancestor:a,descendant:i}),Tf(e,r,n),e.compoundCount++,i}else if(e.currentSubject===r){var s=mn(),l=e[e.length-1],u=mn(),h=mn(),f=mn(),d=mn();return s.checks.push({type:$t.COMPOUND_SPLIT,left:l,right:u,subject:h}),h.checks=r.checks,r.checks=[{type:$t.TRUE}],d.checks.push({type:$t.TRUE}),u.checks.push({type:$t.ANCESTOR,ancestor:d,descendant:f}),Tf(e,l,s),e.currentSubject=h,e.compoundCount++,f}else{var p=mn(),m=mn(),g=[{type:$t.ANCESTOR,ancestor:p,descendant:m}];return p.checks=r.checks,r.checks=g,e.compoundCount++,m}},"populate")},{name:"subject",modifier:!0,regex:Vr.subject,populate:o(function(e,r){if(e.currentSubject!=null&&e.currentSubject!==r)return un("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=r;var n=e[e.length-1],i=n.checks[0],a=i==null?null:i.type;a===$t.DIRECTED_EDGE?i.type=$t.NODE_TARGET:a===$t.UNDIRECTED_EDGE&&(i.type=$t.NODE_NEIGHBOR,i.node=i.nodes[1],i.neighbor=i.nodes[0],i.nodes=null)},"populate")}];GP.forEach(function(t){return t.regexObj=new RegExp("^"+t.regex)});rKe=o(function(e){for(var r,n,i,a=0;a<GP.length;a++){var s=GP[a],l=s.name,u=e.match(s.regexObj);if(u!=null){n=u,r=s,i=l;var h=u[0];e=e.substring(h.length);break}}return{expr:r,match:n,name:i,remaining:e}},"consumeExpr"),nKe=o(function(e){var r=e.match(/^\s+/);if(r){var n=r[0];e=e.substring(n.length)}return e},"consumeWhitespace"),iKe=o(function(e){var r=this,n=r.inputText=e,i=r[0]=mn();for(r.length=1,n=nKe(n);;){var a=rKe(n);if(a.expr==null)return un("The selector `"+e+"`is invalid"),!1;var s=a.match.slice(1),l=a.expr.populate(r,i,s);if(l===!1)return!1;if(l!=null&&(i=l),n=a.remaining,n.match(/^\s*$/))break}var u=r[r.length-1];r.currentSubject!=null&&(u.subject=r.currentSubject),u.edgeCount=r.edgeCount,u.compoundCount=r.compoundCount;for(var h=0;h<r.length;h++){var f=r[h];if(f.compoundCount>0&&f.edgeCount>0)return un("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return un("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&un("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),aKe=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return Zt(f)?'"'+f+'"':e(f)},"cleanVal"),n=o(function(f){return" "+f+" "},"space"),i=o(function(f,d){var p=f.type,m=f.value;switch(p){case $t.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case $t.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+n(e(v))+r(m)+"]"}case $t.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case $t.DATA_EXIST:{var w=f.field;return"["+w+"]"}case $t.META_COMPARE:{var C=f.operator,T=f.field;return"[["+T+n(e(C))+r(m)+"]]"}case $t.STATE:return m;case $t.ID:return"#"+m;case $t.CLASS:return"."+m;case $t.PARENT:case $t.CHILD:return a(f.parent,d)+n(">")+a(f.child,d);case $t.ANCESTOR:case $t.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case $t.COMPOUND_SPLIT:{var E=a(f.left,d),A=a(f.subject,d),S=a(f.right,d);return E+(E.length>0?" ":"")+A+S}case $t.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+i(m,d)},"")},"queryToString"),s="",l=0;l<this.length;l++){var u=this[l];s+=a(u,u.subject),this.length>1&&l<this.length-1&&(s+=", ")}return this.toStringCache=s,s},"toString"),sKe={parse:iKe,toString:aKe},Bme=o(function(e,r,n){var i,a=Zt(e),s=Ct(e),l=Zt(n),u,h,f=!1,d=!1,p=!1;switch(r.indexOf("!")>=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+n),f&&(e=u=u.toLowerCase(),n=h=h.toLowerCase()),r){case"*=":i=u.indexOf(h)>=0;break;case"$=":i=u.indexOf(h,u.length-h.length)>=0;break;case"^=":i=u.indexOf(h)===0;break;case"=":i=e===n;break;case">":p=!0,i=e>n;break;case">=":p=!0,i=e>=n;break;case"<":p=!0,i=e<n;break;case"<=":p=!0,i=e<=n;break;default:i=!1;break}return d&&(e!=null||!p)&&(i=!i),i},"valCmp"),oKe=o(function(e,r){switch(r){case"?":return!!e;case"!":return!e;case"^":return e===void 0}},"boolCmp"),lKe=o(function(e){return e!==void 0},"existCmp"),hB=o(function(e,r){return e.data(r)},"data"),cKe=o(function(e,r){return e[r]()},"meta"),fi=[],zn=o(function(e,r){return e.checks.every(function(n){return fi[n.type](n,r)})},"matches");fi[$t.GROUP]=function(t,e){var r=t.value;return r==="*"||r===e.group()};fi[$t.STATE]=function(t,e){var r=t.value;return eKe(r,e)};fi[$t.ID]=function(t,e){var r=t.value;return e.id()===r};fi[$t.CLASS]=function(t,e){var r=t.value;return e.hasClass(r)};fi[$t.META_COMPARE]=function(t,e){var r=t.field,n=t.operator,i=t.value;return Bme(cKe(e,r),n,i)};fi[$t.DATA_COMPARE]=function(t,e){var r=t.field,n=t.operator,i=t.value;return Bme(hB(e,r),n,i)};fi[$t.DATA_BOOL]=function(t,e){var r=t.field,n=t.operator;return oKe(hB(e,r),n)};fi[$t.DATA_EXIST]=function(t,e){var r=t.field;return t.operator,lKe(hB(e,r))};fi[$t.UNDIRECTED_EDGE]=function(t,e){var r=t.nodes[0],n=t.nodes[1],i=e.source(),a=e.target();return zn(r,i)&&zn(n,a)||zn(n,i)&&zn(r,a)};fi[$t.NODE_NEIGHBOR]=function(t,e){return zn(t.node,e)&&e.neighborhood().some(function(r){return r.isNode()&&zn(t.neighbor,r)})};fi[$t.DIRECTED_EDGE]=function(t,e){return zn(t.source,e.source())&&zn(t.target,e.target())};fi[$t.NODE_SOURCE]=function(t,e){return zn(t.source,e)&&e.outgoers().some(function(r){return r.isNode()&&zn(t.target,r)})};fi[$t.NODE_TARGET]=function(t,e){return zn(t.target,e)&&e.incomers().some(function(r){return r.isNode()&&zn(t.source,r)})};fi[$t.CHILD]=function(t,e){return zn(t.child,e)&&zn(t.parent,e.parent())};fi[$t.PARENT]=function(t,e){return zn(t.parent,e)&&e.children().some(function(r){return zn(t.child,r)})};fi[$t.DESCENDANT]=function(t,e){return zn(t.descendant,e)&&e.ancestors().some(function(r){return zn(t.ancestor,r)})};fi[$t.ANCESTOR]=function(t,e){return zn(t.ancestor,e)&&e.descendants().some(function(r){return zn(t.descendant,r)})};fi[$t.COMPOUND_SPLIT]=function(t,e){return zn(t.subject,e)&&zn(t.left,e)&&zn(t.right,e)};fi[$t.TRUE]=function(){return!0};fi[$t.COLLECTION]=function(t,e){var r=t.value;return r.has(e)};fi[$t.FILTER]=function(t,e){var r=t.value;return r(e)};uKe=o(function(e){var r=this;if(r.length===1&&r[0].checks.length===1&&r[0].checks[0].type===$t.ID)return e.getElementById(r[0].checks[0].value).collection();var n=o(function(a){for(var s=0;s<r.length;s++){var l=r[s];if(zn(l,a))return!0}return!1},"selectorFunction");return r.text()==null&&(n=o(function(){return!0},"selectorFunction")),e.filter(n)},"filter"),hKe=o(function(e){for(var r=this,n=0;n<r.length;n++){var i=r[n];if(zn(i,e))return!0}return!1},"matches"),fKe={matches:hKe,filter:uKe},Lf=o(function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,e==null||Zt(e)&&e.match(/^\s*$/)||(go(e)?this.addQuery({checks:[{type:$t.COLLECTION,value:e.collection()}]}):si(e)?this.addQuery({checks:[{type:$t.FILTER,value:e}]}):Zt(e)?this.parse(e)||(this.invalid=!0):ai("A selector must be created from a string; found "))},"Selector"),Rf=Lf.prototype;[sKe,fKe].forEach(function(t){return rr(Rf,t)});Rf.text=function(){return this.inputText};Rf.size=function(){return this.length};Rf.eq=function(t){return this[t]};Rf.sameText=function(t){return!this.invalid&&!t.invalid&&this.text()===t.text()};Rf.addQuery=function(t){this[this.length++]=t};Rf.selector=Rf.toString;Sf={allAre:o(function(e){var r=new Lf(e);return this.every(function(n){return r.matches(n)})},"allAre"),is:o(function(e){var r=new Lf(e);return this.some(function(n){return r.matches(n)})},"is"),some:o(function(e,r){for(var n=0;n<this.length;n++){var i=r?e.apply(r,[this[n],n,this]):e(this[n],n,this);if(i)return!0}return!1},"some"),every:o(function(e,r){for(var n=0;n<this.length;n++){var i=r?e.apply(r,[this[n],n,this]):e(this[n],n,this);if(!i)return!1}return!0},"every"),same:o(function(e){if(this===e)return!0;e=this.cy().collection(e);var r=this.length,n=e.length;return r!==n?!1:r===1?this[0]===e[0]:this.every(function(i){return e.hasElementWithId(i.id())})},"same"),anySame:o(function(e){return e=this.cy().collection(e),this.some(function(r){return e.hasElementWithId(r.id())})},"anySame"),allAreNeighbors:o(function(e){e=this.cy().collection(e);var r=this.neighborhood();return e.every(function(n){return r.hasElementWithId(n.id())})},"allAreNeighbors"),contains:o(function(e){e=this.cy().collection(e);var r=this;return e.every(function(n){return r.hasElementWithId(n.id())})},"contains")};Sf.allAreNeighbours=Sf.allAreNeighbors;Sf.has=Sf.contains;Sf.equal=Sf.equals=Sf.same;tl=o(function(e,r){return o(function(i,a,s,l){var u=i,h=this,f;if(u==null?f="":go(u)&&u.length===1&&(f=u.id()),h.length===1&&f){var d=h[0]._private,p=d.traversalCache=d.traversalCache||{},m=p[r]=p[r]||[],g=_f(f),y=m[g];return y||(m[g]=e.call(h,i,a,s,l))}else return e.call(h,i,a,s,l)},"traversalCache")},"cache"),Z1={parent:o(function(e){var r=[];if(this.length===1){var n=this[0]._private.parent;if(n)return n}for(var i=0;i<this.length;i++){var a=this[i],s=a._private.parent;s&&r.push(s)}return this.spawn(r,!0).filter(e)},"parent"),parents:o(function(e){for(var r=[],n=this.parent();n.nonempty();){for(var i=0;i<n.length;i++){var a=n[i];r.push(a)}n=n.parent()}return this.spawn(r,!0).filter(e)},"parents"),commonAncestors:o(function(e){for(var r,n=0;n<this.length;n++){var i=this[n],a=i.parents();r=r||a,r=r.intersect(a)}return r.filter(e)},"commonAncestors"),orphans:o(function(e){return this.stdFilter(function(r){return r.isOrphan()}).filter(e)},"orphans"),nonorphans:o(function(e){return this.stdFilter(function(r){return r.isChild()}).filter(e)},"nonorphans"),children:tl(function(t){for(var e=[],r=0;r<this.length;r++)for(var n=this[r],i=n._private.children,a=0;a<i.length;a++)e.push(i[a]);return this.spawn(e,!0).filter(t)},"children"),siblings:o(function(e){return this.parent().children().not(this).filter(e)},"siblings"),isParent:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.children.length!==0},"isParent"),isChildless:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.children.length===0},"isChildless"),isChild:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.parent!=null},"isChild"),isOrphan:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.parent==null},"isOrphan"),descendants:o(function(e){var r=[];function n(i){for(var a=0;a<i.length;a++){var s=i[a];r.push(s),s.children().nonempty()&&n(s.children())}}return o(n,"add"),n(this.children()),this.spawn(r,!0).filter(e)},"descendants")};o(fB,"forEachCompound");o(Fme,"addChildren");Z1.forEachDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,Fme)};o($me,"addParent");Z1.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,$me)};o(dKe,"addParentAndChildren");Z1.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,dKe)};Z1.ancestors=Z1.parents;Kb=zme={data:cn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:cn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:cn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:cn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:cn.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:cn.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};Kb.attr=Kb.data;Kb.removeAttr=Kb.removeData;pKe=zme,FS={};o(SP,"defineDegreeFunction");rr(FS,{degree:SP(function(t,e){return e.source().same(e.target())?2:1}),indegree:SP(function(t,e){return e.target().same(t)?1:0}),outdegree:SP(function(t,e){return e.source().same(t)?1:0})});o(F1,"defineDegreeBoundsFunction");rr(FS,{minDegree:F1("degree",function(t,e){return t<e}),maxDegree:F1("degree",function(t,e){return t>e}),minIndegree:F1("indegree",function(t,e){return t<e}),maxIndegree:F1("indegree",function(t,e){return t>e}),minOutdegree:F1("outdegree",function(t,e){return t<e}),maxOutdegree:F1("outdegree",function(t,e){return t>e})});rr(FS,{totalDegree:o(function(e){for(var r=0,n=this.nodes(),i=0;i<n.length;i++)r+=n[i].degree(e);return r},"totalDegree")});Vme=o(function(e,r,n){for(var i=0;i<e.length;i++){var a=e[i];if(!a.locked()){var s=a._private.position,l={x:r.x!=null?r.x-s.x:0,y:r.y!=null?r.y-s.y:0};a.isParent()&&!(l.x===0&&l.y===0)&&a.children().shift(l,n),a.dirtyBoundingBoxCache()}}},"beforePositionSet"),a0e={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:o(function(e){e.updateCompoundBounds()},"beforeGet"),beforeSet:o(function(e,r){Vme(e,r,!1)},"beforeSet"),onSet:o(function(e){e.dirtyCompoundBoundsCache()},"onSet"),canSet:o(function(e){return!e.locked()},"canSet")};Vl=Gme={position:cn.data(a0e),silentPosition:cn.data(rr({},a0e,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:o(function(e,r){Vme(e,r,!0)},"beforeSet"),onSet:o(function(e){e.dirtyCompoundBoundsCache()},"onSet")})),positions:o(function(e,r){if(Ur(e))r?this.silentPosition(e):this.position(e);else if(si(e)){var n=e,i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var s=this[a],l=void 0;(l=n(s,a))&&(r?s.silentPosition(l):s.position(l))}i.endBatch()}return this},"positions"),silentPositions:o(function(e){return this.positions(e,!0)},"silentPositions"),shift:o(function(e,r,n){var i;if(Ur(e)?(i={x:Ct(e.x)?e.x:0,y:Ct(e.y)?e.y:0},n=r):Zt(e)&&Ct(r)&&(i={x:0,y:0},i[e]=r),i!=null){var a=this.cy();a.startBatch();for(var s=0;s<this.length;s++){var l=this[s];if(!(a.hasCompoundNodes()&&l.isChild()&&l.ancestors().anySame(this))){var u=l.position(),h={x:u.x+i.x,y:u.y+i.y};n?l.silentPosition(h):l.position(h)}}a.endBatch()}return this},"shift"),silentShift:o(function(e,r){return Ur(e)?this.shift(e,!0):Zt(e)&&Ct(r)&&this.shift(e,r,!0),this},"silentShift"),renderedPosition:o(function(e,r){var n=this[0],i=this.cy(),a=i.zoom(),s=i.pan(),l=Ur(e)?e:void 0,u=l!==void 0||r!==void 0&&Zt(e);if(n&&n.isNode())if(u)for(var h=0;h<this.length;h++){var f=this[h];r!==void 0?f.position(e,(r-s[e])/a):l!==void 0&&f.position(pme(l,a,s))}else{var d=n.position();return l=MS(d,a,s),e===void 0?l:l[e]}else if(!u)return;return this},"renderedPosition"),relativePosition:o(function(e,r){var n=this[0],i=this.cy(),a=Ur(e)?e:void 0,s=a!==void 0||r!==void 0&&Zt(e),l=i.hasCompoundNodes();if(n&&n.isNode())if(s)for(var u=0;u<this.length;u++){var h=this[u],f=l?h.parent():null,d=f&&f.length>0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=n.position(),y=l?n.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Vl.modelPosition=Vl.point=Vl.position;Vl.modelPositions=Vl.points=Vl.positions;Vl.renderedPoint=Vl.renderedPosition;Vl.relativePoint=Vl.relativePosition;mKe=Gme;X1=Of={};Of.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),n=r.zoom(),i=r.pan(),a=e.x1*n+i.x,s=e.x2*n+i.x,l=e.y1*n+i.y,u=e.y2*n+i.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Of.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var n=r._private;n.compoundBoundsClean=!1,n.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Of.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(_,I,D){var k=0,L=0,R=I+D;return _>0&&R>0&&(k=I/R*_,L=D/R*_),{biasDiff:k,biasComplementDiff:L}}o(m,"computeBiasValues");function g(_,I,D,k){if(D.units==="%")switch(k){case"width":return _>0?D.pfValue*_:0;case"height":return I>0?D.pfValue*I:0;case"average":return _>0&&I>0?D.pfValue*(_+I)/2:0;case"min":return _>0&&I>0?_>I?D.pfValue*I:D.pfValue*_:0;case"max":return _>0&&I>0?_>I?D.pfValue*_:D.pfValue*I:0;default:return 0}else return D.units==="px"?D.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var w=m(f.width.val-d.w,y,v),C=w.biasDiff,T=w.biasComplementDiff,E=m(f.height.val-d.h,x,b),A=E.biasDiff,S=E.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-C+d.x1+d.x2+T)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-A+d.y1+d.y2+S)/2}o(r,"update");for(var n=0;n<this.length;n++){var i=this[n],a=i._private;(!a.compoundBoundsClean||t)&&(r(i),e.batching()||(a.compoundBoundsClean=!0))}return this};el=o(function(e){return e===1/0||e===-1/0?0:e},"noninf"),zl=o(function(e,r,n,i,a){i-r===0||a-n===0||r==null||n==null||i==null||a==null||(e.x1=r<e.x1?r:e.x1,e.x2=i>e.x2?i:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=a>e.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),Pp=o(function(e,r){return r==null?e:zl(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Db=o(function(e,r,n){return Gl(e,r,n)},"prefixedProperty"),tS=o(function(e,r,n){if(!r.cy().headless()){var i=r._private,a=i.rstyle,s=a.arrowWidth/2,l=r.pstyle(n+"-arrow-shape").value,u,h;if(l!=="none"){n==="source"?(u=a.srcX,h=a.srcY):n==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=i.arrowBounds=i.arrowBounds||{},d=f[n]=f[n]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,cS(d,1),zl(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),CP=o(function(e,r,n){if(!r.cy().headless()){var i;n?i=n+"-":i="";var a=r._private,s=a.rstyle,l=r.pstyle(i+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Db(s,"labelWidth",n),d=Db(s,"labelHeight",n),p=Db(s,"labelX",n),m=Db(s,"labelY",n),g=r.pstyle(i+"text-margin-x").pfValue,y=r.pstyle(i+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(i+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,w=r.pstyle("text-border-width").pfValue,C=w/2,T=r.pstyle("text-background-padding").pfValue,E=2,A=d,S=f,_=S/2,I=A/2,D,k,L,R;if(v)D=p-_,k=p+_,L=m-I,R=m+I;else{switch(u.value){case"left":D=p-S,k=p;break;case"center":D=p-_,k=p+_;break;case"right":D=p,k=p+S;break}switch(h.value){case"top":L=m-A,R=m;break;case"center":L=m-I,R=m+I;break;case"bottom":L=m,R=m+A;break}}var O=g-Math.max(b,C)-T-E,M=g+Math.max(b,C)+T+E,B=y-Math.max(b,C)-T-E,F=y+Math.max(b,C)+T+E;D+=O,k+=M,L+=B,R+=F;var P=n||"main",z=a.labelBounds,$=z[P]=z[P]||{};$.x1=D,$.y1=L,$.x2=k,$.y2=R,$.w=k-D,$.h=R-L,$.leftPad=O,$.rightPad=M,$.topPad=B,$.botPad=F;var H=v&&x.strValue==="autorotate",Q=x.pfValue!=null&&x.pfValue!==0;if(H||Q){var j=H?Db(a.rstyle,"labelAngle",n):x.pfValue,ie=Math.cos(j),ne=Math.sin(j),le=(D+k)/2,he=(L+R)/2;if(!v){switch(u.value){case"left":le=k;break;case"right":le=D;break}switch(h.value){case"top":he=R;break;case"bottom":he=L;break}}var K=o(function(ce,ae){return ce=ce-le,ae=ae-he,{x:ce*ie-ae*ne+le,y:ce*ne+ae*ie+he}},"rotate"),X=K(D,L),te=K(D,R),J=K(k,L),se=K(k,R);D=Math.min(X.x,te.x,J.x,se.x),k=Math.max(X.x,te.x,J.x,se.x),L=Math.min(X.y,te.y,J.y,se.y),R=Math.max(X.y,te.y,J.y,se.y)}var ue=P+"Rot",Z=z[ue]=z[ue]||{};Z.x1=D,Z.y1=L,Z.x2=k,Z.y2=R,Z.w=k-D,Z.h=R-L,zl(e,D,L,k,R),zl(a.labelBounds.all,D,L,k,R)}return e}},"updateBoundsFromLabel"),gKe=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("outline-opacity").value,i=r.pstyle("outline-width").value;if(n>0&&i>0){var a=r.pstyle("outline-offset").value,s=r.pstyle("shape").value,l=i+a,u=(e.w+l*2)/e.w,h=(e.h+l*2)/e.h,f=0,d=0;["diamond","pentagon","round-triangle"].includes(s)?(u=(e.w+l*2.4)/e.w,d=-l/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(s)?u=(e.w+l*2.4)/e.w:s==="star"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.6)/e.h,d=-l/3.8):s==="triangle"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.4)/e.h,d=-l/1.4):s==="vee"&&(u=(e.w+l*4.4)/e.w,h=(e.h+l*3.8)/e.h,d=-l*.5);var p=e.h*h-e.h,m=e.w*u-e.w;if(uS(e,[Math.ceil(p/2),Math.ceil(m/2)]),f!=0||d!==0){var g=Bqe(e,f,d);gme(e,g)}}}},"updateBoundsFromOutline"),yKe=o(function(e,r){var n=e._private.cy,i=n.styleEnabled(),a=n.headless(),s=Hs(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&i?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(Se){return Se.pstyle("display").value!=="none"},"isDisplayed"),w=!i||b(e)&&(!h||b(e.source())&&b(e.target()));if(w){var C=0,T=0;i&&r.includeOverlays&&(C=e.pstyle("overlay-opacity").value,C!==0&&(T=e.pstyle("overlay-padding").value));var E=0,A=0;i&&r.includeUnderlays&&(E=e.pstyle("underlay-opacity").value,E!==0&&(A=e.pstyle("underlay-padding").value));var S=Math.max(T,A),_=0,I=0;if(i&&(_=e.pstyle("width").pfValue,I=_/2),u&&r.includeNodes){var D=e.position();g=D.x,y=D.y;var k=e.outerWidth(),L=k/2,R=e.outerHeight(),O=R/2;f=g-L,d=g+L,p=y-O,m=y+O,zl(s,f,p,d,m),i&&r.includeOutlines&&gKe(s,e)}else if(h&&r.includeEdges)if(i&&!a){var M=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=I,d+=I,p-=I,m+=I,zl(s,f,p,d,m),M==="haystack"){var B=v.haystackPts;if(B&&B.length===2){if(f=B[0].x,p=B[0].y,d=B[1].x,m=B[1].y,f>d){var F=f;f=d,d=F}if(p>m){var P=p;p=m,m=P}zl(s,f-I,p-I,d+I,m+I)}}else if(M==="bezier"||M==="unbundled-bezier"||M.endsWith("segments")||M.endsWith("taxi")){var z;switch(M){case"bezier":case"unbundled-bezier":z=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":z=v.linePts;break}if(z!=null)for(var $=0;$<z.length;$++){var H=z[$];f=H.x-I,d=H.x+I,p=H.y-I,m=H.y+I,zl(s,f,p,d,m)}}}else{var Q=e.source(),j=Q.position(),ie=e.target(),ne=ie.position();if(f=j.x,d=ne.x,p=j.y,m=ne.y,f>d){var le=f;f=d,d=le}if(p>m){var he=p;p=m,m=he}f-=I,d+=I,p-=I,m+=I,zl(s,f,p,d,m)}if(i&&r.includeEdges&&h&&(tS(s,e,"mid-source"),tS(s,e,"mid-target"),tS(s,e,"source"),tS(s,e,"target")),i){var K=e.pstyle("ghost").value==="yes";if(K){var X=e.pstyle("ghost-offset-x").pfValue,te=e.pstyle("ghost-offset-y").pfValue;zl(s,s.x1+X,s.y1+te,s.x2+X,s.y2+te)}}var J=l.bodyBounds=l.bodyBounds||{};Fpe(J,s),uS(J,x),cS(J,1),i&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,zl(s,f-S,p-S,d+S,m+S));var se=l.overlayBounds=l.overlayBounds||{};Fpe(se,s),uS(se,x),cS(se,1);var ue=l.labelBounds=l.labelBounds||{};ue.all!=null?Pqe(ue.all):ue.all=Hs(),i&&r.includeLabels&&(r.includeMainLabels&&CP(s,e,null),h&&(r.includeSourceLabels&&CP(s,e,"source"),r.includeTargetLabels&&CP(s,e,"target")))}return s.x1=el(s.x1),s.y1=el(s.y1),s.x2=el(s.x2),s.y2=el(s.y2),s.w=el(s.x2-s.x1),s.h=el(s.y2-s.y1),s.w>0&&s.h>0&&w&&(uS(s,x),cS(s,1)),s},"boundingBoxImpl"),Ume=o(function(e){var r=0,n=o(function(s){return(s?1:0)<<r++},"tf"),i=0;return i+=n(e.incudeNodes),i+=n(e.includeEdges),i+=n(e.includeLabels),i+=n(e.includeMainLabels),i+=n(e.includeSourceLabels),i+=n(e.includeTargetLabels),i+=n(e.includeOverlays),i+=n(e.includeOutlines),i},"getKey"),Hme=o(function(e){if(e.isEdge()){var r=e.source().position(),n=e.target().position(),i=o(function(s){return Math.round(s)},"r");return nqe([i(r.x),i(r.y),i(n.x),i(n.y)])}else return 0},"getBoundingBoxPosKey"),s0e=o(function(e,r){var n=e._private,i,a=e.isEdge(),s=r==null?o0e:Ume(r),l=s===o0e,u=Hme(e),h=n.bbCachePosKey===u,f=r.useCache&&h,d=o(function(y){return y._private.bbCache==null||y._private.styleDirty},"isDirty"),p=!f||d(e)||a&&(d(e.source())||d(e.target()));if(p?(h||e.recalculateRenderedStyle(f),i=yKe(e,Qb),n.bbCache=i,n.bbCachePosKey=u):i=n.bbCache,!l){var m=e.isNode();i=Hs(),(r.includeNodes&&m||r.includeEdges&&!m)&&(r.includeOverlays?Pp(i,n.overlayBounds):Pp(i,n.bodyBounds)),r.includeLabels&&(r.includeMainLabels&&(!a||r.includeSourceLabels&&r.includeTargetLabels)?Pp(i,n.labelBounds.all):(r.includeMainLabels&&Pp(i,n.labelBounds.mainRot),r.includeSourceLabels&&Pp(i,n.labelBounds.sourceRot),r.includeTargetLabels&&Pp(i,n.labelBounds.targetRot))),i.w=i.x2-i.x1,i.h=i.y2-i.y1}return i},"cachedBoundingBoxImpl"),Qb={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,includeOutlines:!0,useCache:!0},o0e=Ume(Qb),l0e=la(Qb);Of.boundingBox=function(t){var e;if(this.length===1&&this[0]._private.bbCache!=null&&!this[0]._private.styleDirty&&(t===void 0||t.useCache===void 0||t.useCache===!0))t===void 0?t=Qb:t=l0e(t),e=s0e(this[0],t);else{e=Hs(),t=t||Qb;var r=l0e(t),n=this,i=n.cy(),a=i.styleEnabled();if(a)for(var s=0;s<n.length;s++){var l=n[s],u=l._private,h=Hme(l),f=u.bbCachePosKey===h,d=r.useCache&&f&&!u.styleDirty;l.recalculateRenderedStyle(d)}this.updateCompoundBounds(!t.useCache);for(var p=0;p<n.length;p++){var m=n[p];Pp(e,s0e(m,r))}}return e.x1=el(e.x1),e.y1=el(e.y1),e.x2=el(e.x2),e.y2=el(e.y2),e.w=el(e.x2-e.x1),e.h=el(e.y2-e.y1),e};Of.dirtyBoundingBoxCache=function(){for(var t=0;t<this.length;t++){var e=this[t]._private;e.bbCache=null,e.bbCachePosKey=null,e.bodyBounds=null,e.overlayBounds=null,e.labelBounds.all=null,e.labelBounds.source=null,e.labelBounds.target=null,e.labelBounds.main=null,e.labelBounds.sourceRot=null,e.labelBounds.targetRot=null,e.labelBounds.mainRot=null,e.arrowBounds.source=null,e.arrowBounds.target=null,e.arrowBounds["mid-source"]=null,e.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this};Of.boundingBoxAt=function(t){var e=this.nodes(),r=this.cy(),n=r.hasCompoundNodes(),i=r.collection();if(n&&(i=e.filter(function(h){return h.isParent()}),e=e.not(i)),Ur(t)){var a=t;t=o(function(){return a},"fn")}var s=o(function(f,d){return f._private.bbAtOldPos=t(f,d)},"storeOldPos"),l=o(function(f){return f._private.bbAtOldPos},"getOldPos");r.startBatch(),e.forEach(s).silentPositions(t),n&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var u=Oqe(this.boundingBox({useCache:!1}));return e.silentPositions(l),n&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),r.endBatch(),u};X1.boundingbox=X1.bb=X1.boundingBox;X1.renderedBoundingbox=X1.renderedBoundingBox;vKe=Of;Bb=a4={};Wme=o(function(e){e.uppercaseName=Rpe(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=Rpe(e.outerName),Bb[e.name]=o(function(){var n=this[0],i=n._private,a=i.cy,s=a._private.styleEnabled;if(n)if(s){if(n.isParent())return n.updateCompoundBounds(),i[e.autoName]||0;var l=n.pstyle(e.name);switch(l.strValue){case"label":return n.recalculateRenderedStyle(),i.rstyle[e.labelName]||0;default:return l.pfValue}}else return 1},"dimImpl"),Bb["outer"+e.uppercaseName]=o(function(){var n=this[0],i=n._private,a=i.cy,s=a._private.styleEnabled;if(n)if(s){var l=n[e.name](),u=n.pstyle("border-width").pfValue,h=2*n.padding();return l+u+h}else return 1},"outerDimImpl"),Bb["rendered"+e.uppercaseName]=o(function(){var n=this[0];if(n){var i=n[e.name]();return i*this.cy().zoom()}},"renderedDimImpl"),Bb["rendered"+e.uppercaseOuterName]=o(function(){var n=this[0];if(n){var i=n[e.outerName]();return i*this.cy().zoom()}},"renderedOuterDimImpl")},"defineDimFns");Wme({name:"width"});Wme({name:"height"});a4.padding=function(){var t=this[0],e=t._private;return t.isParent()?(t.updateCompoundBounds(),e.autoPadding!==void 0?e.autoPadding:t.pstyle("padding").pfValue):t.pstyle("padding").pfValue};a4.paddedHeight=function(){var t=this[0];return t.height()+2*t.padding()};a4.paddedWidth=function(){var t=this[0];return t.width()+2*t.padding()};xKe=a4,bKe=o(function(e,r){if(e.isEdge())return r(e)},"ifEdge"),wKe=o(function(e,r){if(e.isEdge()){var n=e.cy();return MS(r(e),n.zoom(),n.pan())}},"ifEdgeRenderedPosition"),TKe=o(function(e,r){if(e.isEdge()){var n=e.cy(),i=n.pan(),a=n.zoom();return r(e).map(function(s){return MS(s,a,i)})}},"ifEdgeRenderedPositions"),kKe=o(function(e){return e.renderer().getControlPoints(e)},"controlPoints"),EKe=o(function(e){return e.renderer().getSegmentPoints(e)},"segmentPoints"),SKe=o(function(e){return e.renderer().getSourceEndpoint(e)},"sourceEndpoint"),CKe=o(function(e){return e.renderer().getTargetEndpoint(e)},"targetEndpoint"),AKe=o(function(e){return e.renderer().getEdgeMidpoint(e)},"midpoint"),c0e={controlPoints:{get:kKe,mult:!0},segmentPoints:{get:EKe,mult:!0},sourceEndpoint:{get:SKe},targetEndpoint:{get:CKe},midpoint:{get:AKe}},_Ke=o(function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)},"renderedName"),DKe=Object.keys(c0e).reduce(function(t,e){var r=c0e[e],n=_Ke(e);return t[e]=function(){return bKe(this,r.get)},r.mult?t[n]=function(){return TKe(this,r.get)}:t[n]=function(){return wKe(this,r.get)},t},{}),LKe=rr({},mKe,vKe,xKe,DKe);qme=o(function(e,r){this.recycle(e,r)},"Event");o(Lb,"returnFalse");o(rS,"returnTrue");qme.prototype={instanceString:o(function(){return"event"},"instanceString"),recycle:o(function(e,r){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Lb,e!=null&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?rS:Lb):e!=null&&e.type?r=e:this.type=e,r!=null&&(this.originalEvent=r.originalEvent,this.type=r.type!=null?r.type:this.type,this.cy=r.cy,this.target=r.target,this.position=r.position,this.renderedPosition=r.renderedPosition,this.namespace=r.namespace,this.layout=r.layout),this.cy!=null&&this.position!=null&&this.renderedPosition==null){var n=this.position,i=this.cy.zoom(),a=this.cy.pan();this.renderedPosition={x:n.x*i+a.x,y:n.y*i+a.y}}this.timeStamp=e&&e.timeStamp||Date.now()},"recycle"),preventDefault:o(function(){this.isDefaultPrevented=rS;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},"preventDefault"),stopPropagation:o(function(){this.isPropagationStopped=rS;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},"stopPropagation"),stopImmediatePropagation:o(function(){this.isImmediatePropagationStopped=rS,this.stopPropagation()},"stopImmediatePropagation"),isDefaultPrevented:Lb,isPropagationStopped:Lb,isImmediatePropagationStopped:Lb};Yme=/^([^.]+)(\.(?:[^.]+))?$/,RKe=".*",Xme={qualifierCompare:o(function(e,r){return e===r},"qualifierCompare"),eventMatches:o(function(){return!0},"eventMatches"),addEventFields:o(function(){},"addEventFields"),callbackContext:o(function(e){return e},"callbackContext"),beforeEmit:o(function(){},"beforeEmit"),afterEmit:o(function(){},"afterEmit"),bubble:o(function(){return!1},"bubble"),parent:o(function(){return null},"parent"),context:null},u0e=Object.keys(Xme),NKe={};o($S,"Emitter");Nf=$S.prototype,jme=o(function(e,r,n,i,a,s,l){si(i)&&(a=i,i=null),l&&(s==null?s=l:s=rr({},s,l));for(var u=En(n)?n:n.split(/\s+/),h=0;h<u.length;h++){var f=u[h];if(!Af(f)){var d=f.match(Yme);if(d){var p=d[1],m=d[2]?d[2]:null,g=r(e,f,p,m,i,a,s);if(g===!1)break}}}},"forEachEvent"),h0e=o(function(e,r){return e.addEventFields(e.context,r),new qme(r.type,r)},"makeEventObj"),MKe=o(function(e,r,n){if(eWe(n)){r(e,n);return}else if(Ur(n)){r(e,h0e(e,n));return}for(var i=En(n)?n:n.split(/\s+/),a=0;a<i.length;a++){var s=i[a];if(!Af(s)){var l=s.match(Yme);if(l){var u=l[1],h=l[2]?l[2]:null,f=h0e(e,{type:u,namespace:h,target:e.context});r(e,f)}}}},"forEachEventObj");Nf.on=Nf.addListener=function(t,e,r,n,i){return jme(this,function(a,s,l,u,h,f,d){si(f)&&a.listeners.push({event:s,callback:f,type:l,namespace:u,qualifier:h,conf:d})},t,e,r,n,i),this};Nf.one=function(t,e,r,n){return this.on(t,e,r,n,{one:!0})};Nf.removeListener=Nf.off=function(t,e,r,n){var i=this;this.emitting!==0&&(this.listeners=lqe(this.listeners));for(var a=this.listeners,s=o(function(h){var f=a[h];jme(i,function(d,p,m,g,y,v){if((f.type===m||t==="*")&&(!g&&f.namespace!==".*"||f.namespace===g)&&(!y||d.qualifierCompare(f.qualifier,y))&&(!v||f.callback===v))return a.splice(h,1),!1},t,e,r,n)},"_loop"),l=a.length-1;l>=0;l--)s(l);return this};Nf.removeAllListeners=function(){return this.removeListener("*")};Nf.emit=Nf.trigger=function(t,e,r){var n=this.listeners,i=n.length;return this.emitting++,En(e)||(e=[e]),MKe(this,function(a,s){r!=null&&(n=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],i=n.length);for(var l=o(function(f){var d=n[f];if(d.type===s.type&&(!d.namespace||d.namespace===s.namespace||d.namespace===RKe)&&a.eventMatches(a.context,d,s)){var p=[s];e!=null&&uqe(p,e),a.beforeEmit(a.context,d,s),d.conf&&d.conf.one&&(a.listeners=a.listeners.filter(function(y){return y!==d}));var m=a.callbackContext(a.context,d,s),g=d.callback.apply(m,p);a.afterEmit(a.context,d,s),g===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u<i;u++)l(u);a.bubble(a.context)&&!s.isPropagationStopped()&&a.parent(a.context).emit(s,e)},t),this.emitting--,this};IKe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&t4(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e.cy(),r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext"),beforeEmit:o(function(e,r){r.conf&&r.conf.once&&r.conf.onceCollection.removeListener(r.event,r.qualifier,r.callback)},"beforeEmit"),bubble:o(function(){return!0},"bubble"),parent:o(function(e){return e.isChild()?e.parent():e.cy()},"parent")},nS=o(function(e){return Zt(e)?new Lf(e):e},"argSelector"),Kme={createEmitter:o(function(){for(var e=0;e<this.length;e++){var r=this[e],n=r._private;n.emitter||(n.emitter=new $S(IKe,r))}return this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().on(e,i,n)}return this},"on"),removeListener:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().removeListener(e,i,n)}return this},"removeListener"),removeAllListeners:o(function(){for(var e=0;e<this.length;e++){var r=this[e];r.emitter().removeAllListeners()}return this},"removeAllListeners"),one:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().one(e,i,n)}return this},"one"),once:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().on(e,i,n,{once:!0,onceCollection:this})}},"once"),emit:o(function(e,r){for(var n=0;n<this.length;n++){var i=this[n];i.emitter().emit(e,r)}return this},"emit"),emitAndNotify:o(function(e,r){if(this.length!==0)return this.cy().notify(e,this),this.emit(e,r),this},"emitAndNotify")};cn.eventAliasesOn(Kme);Qme={nodes:o(function(e){return this.filter(function(r){return r.isNode()}).filter(e)},"nodes"),edges:o(function(e){return this.filter(function(r){return r.isEdge()}).filter(e)},"edges"),byGroup:o(function(){for(var e=this.spawn(),r=this.spawn(),n=0;n<this.length;n++){var i=this[n];i.isNode()?e.push(i):r.push(i)}return{nodes:e,edges:r}},"byGroup"),filter:o(function(e,r){if(e===void 0)return this;if(Zt(e)||go(e))return new Lf(e).filter(this);if(si(e)){for(var n=this.spawn(),i=this,a=0;a<i.length;a++){var s=i[a],l=r?e.apply(r,[s,a,i]):e(s,a,i);l&&n.push(s)}return n}return this.spawn()},"filter"),not:o(function(e){if(e){Zt(e)&&(e=this.filter(e));for(var r=this.spawn(),n=0;n<this.length;n++){var i=this[n],a=e.has(i);a||r.push(i)}return r}else return this},"not"),absoluteComplement:o(function(){var e=this.cy();return e.mutableElements().not(this)},"absoluteComplement"),intersect:o(function(e){if(Zt(e)){var r=e;return this.filter(r)}for(var n=this.spawn(),i=this,a=e,s=this.length<e.length,l=s?i:a,u=s?a:i,h=0;h<l.length;h++){var f=l[h];u.has(f)&&n.push(f)}return n},"intersect"),xor:o(function(e){var r=this._private.cy;Zt(e)&&(e=r.$(e));var n=this.spawn(),i=this,a=e,s=o(function(u,h){for(var f=0;f<u.length;f++){var d=u[f],p=d._private.data.id,m=h.hasElementWithId(p);m||n.push(d)}},"add");return s(i,a),s(a,i),n},"xor"),diff:o(function(e){var r=this._private.cy;Zt(e)&&(e=r.$(e));var n=this.spawn(),i=this.spawn(),a=this.spawn(),s=this,l=e,u=o(function(f,d,p){for(var m=0;m<f.length;m++){var g=f[m],y=g._private.data.id,v=d.hasElementWithId(y);v?a.merge(g):p.push(g)}},"add");return u(s,l,n),u(l,s,i),{left:n,right:i,both:a}},"diff"),add:o(function(e){var r=this._private.cy;if(!e)return this;if(Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=this.spawnSelf(),a=0;a<e.length;a++){var s=e[a],l=!this.has(s);l&&i.push(s)}return i},"add"),merge:o(function(e){var r=this._private,n=r.cy;if(!e)return this;if(e&&Zt(e)){var i=e;e=n.mutableElements().filter(i)}for(var a=r.map,s=0;s<e.length;s++){var l=e[s],u=l._private.data.id,h=!a.has(u);if(h){var f=this.length++;this[f]=l,a.set(u,{ele:l,index:f})}}return this},"merge"),unmergeAt:o(function(e){var r=this[e],n=r.id(),i=this._private,a=i.map;this[e]=void 0,a.delete(n);var s=e===this.length-1;if(this.length>1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,n=e._private.data.id,i=r.map,a=i.get(n);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=0;i<e.length;i++)this.unmergeOne(e[i]);return this},"unmerge"),unmergeBy:o(function(e){for(var r=this.length-1;r>=0;r--){var n=this[r];e(n)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var n=[],i=this,a=0;a<i.length;a++){var s=i[a],l=r?e.apply(r,[s,a,i]):e(s,a,i);n.push(l)}return n},"map"),reduce:o(function(e,r){for(var n=r,i=this,a=0;a<i.length;a++)n=e(n,i[a],a,i);return n},"reduce"),max:o(function(e,r){for(var n=-1/0,i,a=this,s=0;s<a.length;s++){var l=a[s],u=r?e.apply(r,[l,s,a]):e(l,s,a);u>n&&(n=u,i=l)}return{value:n,ele:i}},"max"),min:o(function(e,r){for(var n=1/0,i,a=this,s=0;s<a.length;s++){var l=a[s],u=r?e.apply(r,[l,s,a]):e(l,s,a);u<n&&(n=u,i=l)}return{value:n,ele:i}},"min")},Qr=Qme;Qr.u=Qr["|"]=Qr["+"]=Qr.union=Qr.or=Qr.add;Qr["\\"]=Qr["!"]=Qr["-"]=Qr.difference=Qr.relativeComplement=Qr.subtract=Qr.not;Qr.n=Qr["&"]=Qr["."]=Qr.and=Qr.intersection=Qr.intersect;Qr["^"]=Qr["(+)"]=Qr["(-)"]=Qr.symmetricDifference=Qr.symdiff=Qr.xor;Qr.fnFilter=Qr.filterFn=Qr.stdFilter=Qr.filter;Qr.complement=Qr.abscomp=Qr.absoluteComplement;OKe={isNode:o(function(){return this.group()==="nodes"},"isNode"),isEdge:o(function(){return this.group()==="edges"},"isEdge"),isLoop:o(function(){return this.isEdge()&&this.source()[0]===this.target()[0]},"isLoop"),isSimple:o(function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},"isSimple"),group:o(function(){var e=this[0];if(e)return e._private.group},"group")},Zme=o(function(e,r){var n=e.cy(),i=n.hasCompoundNodes();function a(f){var d=f.pstyle("z-compound-depth");return d.value==="auto"?i?f.zDepth():0:d.value==="bottom"?-1:d.value==="top"?tB:0}o(a,"getDepth");var s=a(e)-a(r);if(s!==0)return s;function l(f){var d=f.pstyle("z-index-compare");return d.value==="auto"&&f.isNode()?1:0}o(l,"getEleDepth");var u=l(e)-l(r);if(u!==0)return u;var h=e.pstyle("z-index").value-r.pstyle("z-index").value;return h!==0?h:e.poolIndex()-r.poolIndex()},"zIndexSort"),ES={forEach:o(function(e,r){if(si(e))for(var n=this.length,i=0;i<n;i++){var a=this[i],s=r?e.apply(r,[a,i,this]):e(a,i,this);if(s===!1)break}return this},"forEach"),toArray:o(function(){for(var e=[],r=0;r<this.length;r++)e.push(this[r]);return e},"toArray"),slice:o(function(e,r){var n=[],i=this.length;r==null&&(r=i),e==null&&(e=0),e<0&&(e=i+e),r<0&&(r=i+r);for(var a=e;a>=0&&a<r&&a<i;a++)n.push(this[a]);return this.spawn(n)},"slice"),size:o(function(){return this.length},"size"),eq:o(function(e){return this[e]||this.spawn()},"eq"),first:o(function(){return this[0]||this.spawn()},"first"),last:o(function(){return this[this.length-1]||this.spawn()},"last"),empty:o(function(){return this.length===0},"empty"),nonempty:o(function(){return!this.empty()},"nonempty"),sort:o(function(e){if(!si(e))return this;var r=this.toArray().sort(e);return this.spawn(r)},"sort"),sortByZIndex:o(function(){return this.sort(Zme)},"sortByZIndex"),zDepth:o(function(){var e=this[0];if(e){var r=e._private,n=r.group;if(n==="nodes"){var i=r.data.parent?e.parents().size():0;return e.isParent()?i:tB-1}else{var a=r.source,s=r.target,l=a.zDepth(),u=s.zDepth();return Math.max(l,u,0)}}},"zDepth")};ES.each=ES.forEach;PKe=o(function(){var e="undefined",r=(typeof Symbol>"u"?"undefined":Wi(Symbol))!=e&&Wi(Symbol.iterator)!=e;r&&(ES[Symbol.iterator]=function(){var n=this,i={value:void 0,done:!1},a=0,s=this.length;return X0e({next:o(function(){return a<s?i.value=n[a++]:(i.value=void 0,i.done=!0),i},"next")},Symbol.iterator,function(){return this})})},"defineSymbolIterator");PKe();BKe=la({nodeDimensionsIncludeLabels:!1}),fS={layoutDimensions:o(function(e){e=BKe(e);var r;if(!this.takesUpSpace())r={w:0,h:0};else if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();r={w:n.w,h:n.h}}else r={w:this.outerWidth(),h:this.outerHeight()};return(r.w===0||r.h===0)&&(r.w=r.h=1),r},"layoutDimensions"),layoutPositions:o(function(e,r,n){var i=this.nodes().filter(function(T){return!T.isParent()}),a=this.cy(),s=r.eles,l=o(function(E){return E.id()},"getMemoizeKey"),u=Ub(n,l);e.emit({type:"layoutstart",layout:e}),e.animations=[];var h=o(function(E,A,S){var _={x:A.x1+A.w/2,y:A.y1+A.h/2},I={x:(S.x-_.x)*E,y:(S.y-_.y)*E};return{x:_.x+I.x,y:_.y+I.y}},"calculateSpacing"),f=r.spacingFactor&&r.spacingFactor!==1,d=o(function(){if(!f)return null;for(var E=Hs(),A=0;A<i.length;A++){var S=i[A],_=u(S,A);Fqe(E,_.x,_.y)}return E},"spacingBb"),p=d(),m=Ub(function(T,E){var A=u(T,E);if(f){var S=Math.abs(r.spacingFactor);A=h(S,p,A)}return r.transform!=null&&(A=r.transform(T,A)),A},l);if(r.animate){for(var g=0;g<i.length;g++){var y=i[g],v=m(y,g),x=r.animateFilter==null||r.animateFilter(y,g);if(x){var b=y.animation({position:v,duration:r.animationDuration,easing:r.animationEasing});e.animations.push(b)}else y.position(v)}if(r.fit){var w=a.animation({fit:{boundingBox:s.boundingBoxAt(m),padding:r.padding},duration:r.animationDuration,easing:r.animationEasing});e.animations.push(w)}else if(r.zoom!==void 0&&r.pan!==void 0){var C=a.animation({zoom:r.zoom,pan:r.pan,duration:r.animationDuration,easing:r.animationEasing});e.animations.push(C)}e.animations.forEach(function(T){return T.play()}),e.one("layoutready",r.ready),e.emit({type:"layoutready",layout:e}),ey.all(e.animations.map(function(T){return T.promise()})).then(function(){e.one("layoutstop",r.stop),e.emit({type:"layoutstop",layout:e})})}else i.positions(m),r.fit&&a.fit(r.eles,r.padding),r.zoom!=null&&a.zoom(r.zoom),r.pan&&a.pan(r.pan),e.one("layoutready",r.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",r.stop),e.emit({type:"layoutstop",layout:e});return this},"layoutPositions"),layout:o(function(e){var r=this.cy();return r.makeLayout(rr({},e,{eles:this}))},"layout")};fS.createLayout=fS.makeLayout=fS.layout;o(Jme,"styleCache");o(zS,"cacheStyleFunction");o(GS,"cachePrototypeStyleFunction");Ta={recalculateRenderedStyle:o(function(e){var r=this.cy(),n=r.renderer(),i=r.styleEnabled();return n&&i&&n.recalculateRenderedStyle(this,e),this},"recalculateRenderedStyle"),dirtyStyleCache:o(function(){var e=this.cy(),r=o(function(a){return a._private.styleCache=null},"dirty");if(e.hasCompoundNodes()){var n;n=this.spawnSelf().merge(this.descendants()).merge(this.parents()),n.merge(n.connectedEdges()),n.forEach(r)}else this.forEach(function(i){r(i),i.connectedEdges().forEach(r)});return this},"dirtyStyleCache"),updateStyle:o(function(e){var r=this._private.cy;if(!r.styleEnabled())return this;if(r.batching()){var n=r._private.batchStyleEles;return n.merge(this),this}var i=r.hasCompoundNodes(),a=this;e=!!(e||e===void 0),i&&(a=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var s=a;return e?s.emitAndNotify("style"):s.emit("style"),a.forEach(function(l){return l._private.styleDirty=!0}),this},"updateStyle"),cleanStyle:o(function(){var e=this.cy();if(e.styleEnabled())for(var r=0;r<this.length;r++){var n=this[r];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},"cleanStyle"),parsedStyle:o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,n=this[0],i=n.cy();if(i.styleEnabled()&&n){n._private.styleDirty&&(n._private.styleDirty=!1,i.style().apply(n));var a=n._private.style[e];return a??(r?i.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var n=r.pstyle(e);return n.pfValue!==void 0?n.pfValue:n.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=this[0];if(n)return r.style().getRenderedStyle(n,e)},"renderedStyle"),style:o(function(e,r){var n=this.cy();if(!n.styleEnabled())return this;var i=!1,a=n.style();if(Ur(e)){var s=e;a.applyBypass(this,s,i),this.emitAndNotify("style")}else if(Zt(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,i),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=!1,i=r.style(),a=this;if(e===void 0)for(var s=0;s<a.length;s++){var l=a[s];i.removeAllBypasses(l,n)}else{e=e.split(/\s+/);for(var u=0;u<a.length;u++){var h=a[u];i.removeBypasses(h,e,n)}}return this.emitAndNotify("style"),this},"removeStyle"),show:o(function(){return this.css("display","element"),this},"show"),hide:o(function(){return this.css("display","none"),this},"hide"),effectiveOpacity:o(function(){var e=this.cy();if(!e.styleEnabled())return 1;var r=e.hasCompoundNodes(),n=this[0];if(n){var i=n._private,a=n.pstyle("opacity").value;if(!r)return a;var s=i.data.parent?n.parents():null;if(s)for(var l=0;l<s.length;l++){var u=s[l],h=u.pstyle("opacity").value;a=h*a}return a}},"effectiveOpacity"),transparent:o(function(){var e=this.cy();if(!e.styleEnabled())return!1;var r=this[0],n=r.cy().hasCompoundNodes();if(r)return n?r.effectiveOpacity()===0:r.pstyle("opacity").value===0},"transparent"),backgrounding:o(function(){var e=this.cy();if(!e.styleEnabled())return!1;var r=this[0];return!!r._private.backgrounding},"backgrounding")};o(AP,"checkCompound");o(dB,"defineDerivedStateFunction");iy=zS("eleTakesUpSpace",function(t){return t.pstyle("display").value==="element"&&t.width()!==0&&(t.isNode()?t.height()!==0:!0)});Ta.takesUpSpace=GS("takesUpSpace",dB({ok:iy}));FKe=zS("eleInteractive",function(t){return t.pstyle("events").value==="yes"&&t.pstyle("visibility").value==="visible"&&iy(t)}),$Ke=zS("parentInteractive",function(t){return t.pstyle("visibility").value==="visible"&&iy(t)});Ta.interactive=GS("interactive",dB({ok:FKe,parentOk:$Ke,edgeOkViaNode:iy}));Ta.noninteractive=function(){var t=this[0];if(t)return!t.interactive()};zKe=zS("eleVisible",function(t){return t.pstyle("visibility").value==="visible"&&t.pstyle("opacity").pfValue!==0&&iy(t)}),GKe=iy;Ta.visible=GS("visible",dB({ok:zKe,edgeOkViaNode:GKe}));Ta.hidden=function(){var t=this[0];if(t)return!t.visible()};Ta.isBundledBezier=GS("isBundledBezier",function(){return this.cy().styleEnabled()?!this.removed()&&this.pstyle("curve-style").value==="bezier"&&this.takesUpSpace():!1});Ta.bypass=Ta.css=Ta.style;Ta.renderedCss=Ta.renderedStyle;Ta.removeBypass=Ta.removeCss=Ta.removeStyle;Ta.pstyle=Ta.parsedStyle;Cf={};o(f0e,"defineSwitchFunction");o(ay,"defineSwitchSet");ay({field:"locked",overrideField:o(function(e){return e.cy().autolock()?!0:void 0},"overrideField"),on:"lock",off:"unlock"});ay({field:"grabbable",overrideField:o(function(e){return e.cy().autoungrabify()||e.pannable()?!1:void 0},"overrideField"),on:"grabify",off:"ungrabify"});ay({field:"selected",ableField:"selectable",overrideAble:o(function(e){return e.cy().autounselectify()?!1:void 0},"overrideAble"),on:"select",off:"unselect"});ay({field:"selectable",overrideField:o(function(e){return e.cy().autounselectify()?!1:void 0},"overrideField"),on:"selectify",off:"unselectify"});Cf.deselect=Cf.unselect;Cf.grabbed=function(){var t=this[0];if(t)return t._private.grabbed};ay({field:"active",on:"activate",off:"unactivate"});ay({field:"pannable",on:"panify",off:"unpanify"});Cf.inactive=function(){var t=this[0];if(t)return!t._private.active};$a={},d0e=o(function(e){return o(function(n){for(var i=this,a=[],s=0;s<i.length;s++){var l=i[s];if(l.isNode()){for(var u=!1,h=l.connectedEdges(),f=0;f<h.length;f++){var d=h[f],p=d.source(),m=d.target();if(e.noIncomingEdges&&m===l&&p!==l||e.noOutgoingEdges&&p===l&&m!==l){u=!0;break}}u||a.push(l)}}return this.spawn(a,!0).filter(n)},"dagExtremityImpl")},"defineDagExtremity"),p0e=o(function(e){return function(r){for(var n=this,i=[],a=0;a<n.length;a++){var s=n[a];if(s.isNode())for(var l=s.connectedEdges(),u=0;u<l.length;u++){var h=l[u],f=h.source(),d=h.target();e.outgoing&&f===s?(i.push(h),i.push(d)):e.incoming&&d===s&&(i.push(h),i.push(f))}}return this.spawn(i,!0).filter(r)}},"defineDagOneHop"),m0e=o(function(e){return function(r){for(var n=this,i=[],a={};;){var s=e.outgoing?n.outgoers():n.incomers();if(s.length===0)break;for(var l=!1,u=0;u<s.length;u++){var h=s[u],f=h.id();a[f]||(a[f]=!0,i.push(h),l=!0)}if(!l)break;n=s}return this.spawn(i,!0).filter(r)}},"defineDagAllHops");$a.clearTraversalCache=function(){for(var t=0;t<this.length;t++)this[t]._private.traversalCache=null};rr($a,{roots:d0e({noIncomingEdges:!0}),leaves:d0e({noOutgoingEdges:!0}),outgoers:tl(p0e({outgoing:!0}),"outgoers"),successors:m0e({outgoing:!0}),incomers:tl(p0e({incoming:!0}),"incomers"),predecessors:m0e({incoming:!0})});rr($a,{neighborhood:tl(function(t){for(var e=[],r=this.nodes(),n=0;n<r.length;n++)for(var i=r[n],a=i.connectedEdges(),s=0;s<a.length;s++){var l=a[s],u=l.source(),h=l.target(),f=i===u?h:u;f.length>0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});$a.neighbourhood=$a.neighborhood;$a.closedNeighbourhood=$a.closedNeighborhood;$a.openNeighbourhood=$a.openNeighborhood;rr($a,{source:tl(o(function(e){var r=this[0],n;return r&&(n=r._private.source||r.cy().collection()),n&&e?n.filter(e):n},"sourceImpl"),"source"),target:tl(o(function(e){var r=this[0],n;return r&&(n=r._private.target||r.cy().collection()),n&&e?n.filter(e):n},"targetImpl"),"target"),sources:g0e({attr:"source"}),targets:g0e({attr:"target"})});o(g0e,"defineSourceFunction");rr($a,{edgesWith:tl(y0e(),"edgesWith"),edgesTo:tl(y0e({thisIsSrc:!0}),"edgesTo")});o(y0e,"defineEdgesWithFunction");rr($a,{connectedEdges:tl(function(t){for(var e=[],r=this,n=0;n<r.length;n++){var i=r[n];if(i.isNode())for(var a=i._private.edges,s=0;s<a.length;s++){var l=a[s];e.push(l)}}return this.spawn(e,!0).filter(t)},"connectedEdges"),connectedNodes:tl(function(t){for(var e=[],r=this,n=0;n<r.length;n++){var i=r[n];i.isEdge()&&(e.push(i.source()[0]),e.push(i.target()[0]))}return this.spawn(e,!0).filter(t)},"connectedNodes"),parallelEdges:tl(v0e(),"parallelEdges"),codirectedEdges:tl(v0e({codirected:!0}),"codirectedEdges")});o(v0e,"defineParallelEdgesFunction");rr($a,{components:o(function(e){var r=this,n=r.cy(),i=n.collection(),a=e==null?r.nodes():e.nodes(),s=[];e!=null&&a.empty()&&(a=e.sources());var l=o(function(f,d){i.merge(f),a.unmerge(f),d.merge(f)},"visitInComponent");if(a.empty())return r.spawn();var u=o(function(){var f=n.collection();s.push(f);var d=a[0];l(d,f),r.bfs({directed:!1,roots:d,visit:o(function(m){return l(m,f)},"visit")}),f.forEach(function(p){p.connectedEdges().forEach(function(m){r.has(m)&&f.has(m.source())&&f.has(m.target())&&f.merge(m)})})},"_loop");do u();while(a.length>0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});$a.componentsOf=$a.components;ka=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){ai("A collection must have a reference to the core");return}var a=new Xc,s=!1;if(!r)r=[];else if(r.length>0&&Ur(r[0])&&!t4(r[0])){s=!0;for(var l=[],u=new J1,h=0,f=r.length;h<f;h++){var d=r[h];d.data==null&&(d.data={});var p=d.data;if(p.id==null)p.id=fme();else if(e.hasElementWithId(p.id)||u.has(p.id))continue;var m=new NS(e,d,!1);l.push(m),u.add(p.id)}r=l}this.length=0;for(var g=0,y=r.length;g<y;g++){var v=r[g][0];if(v!=null){var x=v._private.data.id;(!n||!a.has(x))&&(n&&a.set(x,{index:this.length,ele:v}),this[this.length]=v,this.length++)}}this._private={eles:this,cy:e,get map(){return this.lazyMap==null&&this.rebuildMap(),this.lazyMap},set map(b){this.lazyMap=b},rebuildMap:o(function(){for(var w=this.lazyMap=new Xc,C=this.eles,T=0;T<C.length;T++){var E=C[T];w.set(E.id(),{index:T,ele:E})}},"rebuildMap")},n&&(this._private.map=a),s&&!i&&this.restore()},"Collection"),Mn=NS.prototype=ka.prototype=Object.create(Array.prototype);Mn.instanceString=function(){return"collection"};Mn.spawn=function(t,e){return new ka(this.cy(),t,e)};Mn.spawnSelf=function(){return this.spawn(this)};Mn.cy=function(){return this._private.cy};Mn.renderer=function(){return this._private.cy.renderer()};Mn.element=function(){return this[0]};Mn.collection=function(){return Q0e(this)?this:new ka(this._private.cy,[this])};Mn.unique=function(){return new ka(this._private.cy,this,!0)};Mn.hasElementWithId=function(t){return t=""+t,this._private.map.has(t)};Mn.getElementById=function(t){t=""+t;var e=this._private.cy,r=this._private.map.get(t);return r?r.ele:new ka(e)};Mn.$id=Mn.getElementById;Mn.poolIndex=function(){var t=this._private.cy,e=t._private.elements,r=this[0]._private.data.id;return e._private.map.get(r).index};Mn.indexOf=function(t){var e=t[0]._private.data.id;return this._private.map.get(e).index};Mn.indexOfId=function(t){return t=""+t,this._private.map.get(t).index};Mn.json=function(t){var e=this.element(),r=this.cy();if(e==null&&t)return this;if(e!=null){var n=e._private;if(Ur(t)){if(r.startBatch(),t.data){e.data(t.data);var i=n.data;if(e.isEdge()){var a=!1,s={},l=t.data.source,u=t.data.target;l!=null&&l!=i.source&&(s.source=""+l,a=!0),u!=null&&u!=i.target&&(s.target=""+u,a=!0),a&&(e=e.move(s))}else{var h="parent"in t.data,f=t.data.parent;h&&(f!=null||i.parent!=null)&&f!=i.parent&&(f===void 0&&(f=null),f!=null&&(f=""+f),e=e.move({parent:f}))}}t.position&&e.position(t.position);var d=o(function(y,v,x){var b=t[y];b!=null&&b!==n[y]&&(b?e[v]():e[x]())},"checkSwitch");return d("removed","remove","restore"),d("selected","select","unselect"),d("selectable","selectify","unselectify"),d("locked","lock","unlock"),d("grabbable","grabify","ungrabify"),d("pannable","panify","unpanify"),t.classes!=null&&e.classes(t.classes),r.endBatch(),this}else if(t===void 0){var p={data:Yc(n.data),position:Yc(n.position),group:n.group,removed:n.removed,selected:n.selected,selectable:n.selectable,locked:n.locked,grabbable:n.grabbable,pannable:n.pannable,classes:null};p.classes="";var m=0;return n.classes.forEach(function(g){return p.classes+=m++===0?g:" "+g}),p}}};Mn.jsons=function(){for(var t=[],e=0;e<this.length;e++){var r=this[e],n=r.json();t.push(n)}return t};Mn.clone=function(){for(var t=this.cy(),e=[],r=0;r<this.length;r++){var n=this[r],i=n.json(),a=new NS(t,i,!1);e.push(a)}return new ka(t,e)};Mn.copy=Mn.clone;Mn.restore=function(){for(var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=r.cy(),i=n._private,a=[],s=[],l,u=0,h=r.length;u<h;u++){var f=r[u];e&&!f.removed()||(f.isNode()?a.push(f):s.push(f))}l=a.concat(s);var d,p=o(function(){l.splice(d,1),d--},"removeFromElements");for(d=0;d<l.length;d++){var m=l[d],g=m._private,y=g.data;if(m.clearTraversalCache(),!(!e&&!g.removed)){if(y.id===void 0)y.id=fme();else if(Ct(y.id))y.id=""+y.id;else if(Af(y.id)||!Zt(y.id)){ai("Can not create element with invalid string ID `"+y.id+"`"),p();continue}else if(n.hasElementWithId(y.id)){ai("Can not create second element with ID `"+y.id+"`"),p();continue}}var v=y.id;if(m.isNode()){var x=g.position;x.x==null&&(x.x=0),x.y==null&&(x.y=0)}if(m.isEdge()){for(var b=m,w=["source","target"],C=w.length,T=!1,E=0;E<C;E++){var A=w[E],S=y[A];Ct(S)&&(S=y[A]=""+y[A]),S==null||S===""?(ai("Can not create edge `"+v+"` with unspecified "+A),T=!0):n.hasElementWithId(S)||(ai("Can not create edge `"+v+"` with nonexistant "+A+" `"+S+"`"),T=!0)}if(T){p();continue}var _=n.getElementById(y.source),I=n.getElementById(y.target);_.same(I)?_._private.edges.push(b):(_._private.edges.push(b),I._private.edges.push(b)),b._private.source=_,b._private.target=I}g.map=new Xc,g.map.set(v,{ele:m,index:0}),g.removed=!1,e&&n.addToPool(m)}for(var D=0;D<a.length;D++){var k=a[D],L=k._private.data;Ct(L.parent)&&(L.parent=""+L.parent);var R=L.parent,O=R!=null;if(O||k._private.parent){var M=k._private.parent?n.collection().merge(k._private.parent):n.getElementById(R);if(M.empty())L.parent=void 0;else if(M[0].removed())un("Node added with missing parent, reference to parent removed"),L.parent=void 0,k._private.parent=null;else{for(var B=!1,F=M;!F.empty();){if(k.same(F)){B=!0,L.parent=void 0;break}F=F.parent()}B||(M[0]._private.children.push(k),k._private.parent=M[0],i.hasCompoundNodes=!0)}}}if(l.length>0){for(var P=l.length===r.length?r:new ka(n,l),z=0;z<P.length;z++){var $=P[z];$.isNode()||($.parallelEdges().clearTraversalCache(),$.source().clearTraversalCache(),$.target().clearTraversalCache())}var H;i.hasCompoundNodes?H=n.collection().merge(P).merge(P.connectedNodes()).merge(P.parent()):H=P,H.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(t),t?P.emitAndNotify("add"):e&&P.emit("add")}return r};Mn.removed=function(){var t=this[0];return t&&t._private.removed};Mn.inside=function(){var t=this[0];return t&&!t._private.removed};Mn.remove=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=[],i={},a=r._private.cy;function s(R){for(var O=R._private.edges,M=0;M<O.length;M++)u(O[M])}o(s,"addConnectedEdges");function l(R){for(var O=R._private.children,M=0;M<O.length;M++)u(O[M])}o(l,"addChildren");function u(R){var O=i[R.id()];e&&R.removed()||O||(i[R.id()]=!0,R.isNode()?(n.push(R),s(R),l(R)):n.unshift(R))}o(u,"add");for(var h=0,f=r.length;h<f;h++){var d=r[h];u(d)}function p(R,O){var M=R._private.edges;Df(M,O),R.clearTraversalCache()}o(p,"removeEdgeRef");function m(R){R.clearTraversalCache()}o(m,"removeParallelRef");var g=[];g.ids={};function y(R,O){O=O[0],R=R[0];var M=R._private.children,B=R.id();Df(M,O),O._private.parent=null,g.ids[B]||(g.ids[B]=!0,g.push(R))}o(y,"removeChildRef"),r.dirtyCompoundBoundsCache(),e&&a.removeFromPool(n);for(var v=0;v<n.length;v++){var x=n[v];if(x.isEdge()){var b=x.source()[0],w=x.target()[0];p(b,x),p(w,x);for(var C=x.parallelEdges(),T=0;T<C.length;T++){var E=C[T];m(E),E.isBundledBezier()&&E.dirtyBoundingBoxCache()}}else{var A=x.parent();A.length!==0&&y(A,x)}e&&(x._private.removed=!0)}var S=a._private.elements;a._private.hasCompoundNodes=!1;for(var _=0;_<S.length;_++){var I=S[_];if(I.isParent()){a._private.hasCompoundNodes=!0;break}}var D=new ka(this.cy(),n);D.size()>0&&(t?D.emitAndNotify("remove"):e&&D.emit("remove"));for(var k=0;k<g.length;k++){var L=g[k];(!e||!L.removed())&&L.updateStyle()}return D};Mn.move=function(t){var e=this._private.cy,r=this,n=!1,i=!1,a=o(function(g){return g==null?g:""+g},"toString");if(t.source!==void 0||t.target!==void 0){var s=a(t.source),l=a(t.target),u=s!=null&&e.hasElementWithId(s),h=l!=null&&e.hasElementWithId(l);(u||h)&&(e.batch(function(){r.remove(n,i),r.emitAndNotify("moveout");for(var m=0;m<r.length;m++){var g=r[m],y=g._private.data;g.isEdge()&&(u&&(y.source=s),h&&(y.target=l))}r.restore(n,i)}),r.emitAndNotify("move"))}else if(t.parent!==void 0){var f=a(t.parent),d=f===null||e.hasElementWithId(f);if(d){var p=f===null?void 0:f;e.batch(function(){var m=r.remove(n,i);m.emitAndNotify("moveout");for(var g=0;g<r.length;g++){var y=r[g],v=y._private.data;y.isNode()&&(v.parent=p)}m.restore(n,i)}),r.emitAndNotify("move")}}return this};[Sme,Zje,hS,Sf,Z1,pKe,FS,LKe,Kme,Qme,OKe,ES,fS,Ta,Cf,$a].forEach(function(t){rr(Mn,t)});VKe={add:o(function(e){var r,n=this;if(go(e)){var i=e;if(i._private.cy===n)r=i.restore();else{for(var a=[],s=0;s<i.length;s++){var l=i[s];a.push(l.json())}r=new ka(n,a)}}else if(En(e)){var u=e;r=new ka(n,u)}else if(Ur(e)&&(En(e.nodes)||En(e.edges))){for(var h=e,f=[],d=["nodes","edges"],p=0,m=d.length;p<m;p++){var g=d[p],y=h[g];if(En(y))for(var v=0,x=y.length;v<x;v++){var b=rr({group:g},y[v]);f.push(b)}}r=new ka(n,f)}else{var w=e;r=new NS(n,w).collection()}return r},"add"),remove:o(function(e){if(!go(e)){if(Zt(e)){var r=e;e=this.$(r)}}return e.remove()},"remove")};o(UKe,"generateCubicBezier");HKe=function(){function t(n){return-n.tension*n.x-n.friction*n.v}o(t,"springAccelerationForState");function e(n,i,a){var s={x:n.x+a.dx*i,v:n.v+a.dv*i,tension:n.tension,friction:n.friction};return{dx:s.v,dv:t(s)}}o(e,"springEvaluateStateWithDerivative");function r(n,i){var a={dx:n.v,dv:t(n)},s=e(n,i*.5,a),l=e(n,i*.5,s),u=e(n,i,l),h=1/6*(a.dx+2*(s.dx+l.dx)+u.dx),f=1/6*(a.dv+2*(s.dv+l.dv)+u.dv);return n.x=n.x+h*i,n.v=n.v+f*i,n}return o(r,"springIntegrateState"),o(function n(i,a,s){var l={x:-1,v:0,tension:null,friction:null},u=[0],h=0,f=1/1e4,d=16/1e3,p,m,g;for(i=parseFloat(i)||500,a=parseFloat(a)||20,s=s||null,l.tension=i,l.friction=a,p=s!==null,p?(h=n(i,a),m=h/s*d):m=d;g=r(g||l,m),u.push(1+g.x),h+=16,Math.abs(g.x)>f&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")}(),Nn=o(function(e,r,n,i){var a=UKe(e,r,n,i);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),dS={linear:o(function(e,r,n){return e+(r-e)*n},"linear"),ease:Nn(.25,.1,.25,1),"ease-in":Nn(.42,0,1,1),"ease-out":Nn(0,0,.58,1),"ease-in-out":Nn(.42,0,.58,1),"ease-in-sine":Nn(.47,0,.745,.715),"ease-out-sine":Nn(.39,.575,.565,1),"ease-in-out-sine":Nn(.445,.05,.55,.95),"ease-in-quad":Nn(.55,.085,.68,.53),"ease-out-quad":Nn(.25,.46,.45,.94),"ease-in-out-quad":Nn(.455,.03,.515,.955),"ease-in-cubic":Nn(.55,.055,.675,.19),"ease-out-cubic":Nn(.215,.61,.355,1),"ease-in-out-cubic":Nn(.645,.045,.355,1),"ease-in-quart":Nn(.895,.03,.685,.22),"ease-out-quart":Nn(.165,.84,.44,1),"ease-in-out-quart":Nn(.77,0,.175,1),"ease-in-quint":Nn(.755,.05,.855,.06),"ease-out-quint":Nn(.23,1,.32,1),"ease-in-out-quint":Nn(.86,0,.07,1),"ease-in-expo":Nn(.95,.05,.795,.035),"ease-out-expo":Nn(.19,1,.22,1),"ease-in-out-expo":Nn(1,0,0,1),"ease-in-circ":Nn(.6,.04,.98,.335),"ease-out-circ":Nn(.075,.82,.165,1),"ease-in-out-circ":Nn(.785,.135,.15,.86),spring:o(function(e,r,n){if(n===0)return dS.linear;var i=HKe(e,r,n);return function(a,s,l){return a+(s-a)*i(l)}},"spring"),"cubic-bezier":Nn};o(x0e,"getEasedValue");o(b0e,"getValue");o($1,"ease");o(WKe,"step$1");o(Rb,"valid");o(qKe,"startAnimation");o(w0e,"stepAll");YKe={animate:cn.animate(),animation:cn.animation(),animated:cn.animated(),clearQueue:cn.clearQueue(),delay:cn.delay(),delayAnimation:cn.delayAnimation(),stop:cn.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&xS(o(function(a){w0e(a,e),r()},"animationStep"))}o(r,"headlessStep");var n=e.renderer();n&&n.beforeRender?n.beforeRender(o(function(a,s){w0e(s,e)},"rendererAnimationStep"),n.beforeRenderPriorities.animations):r()},"startAnimationLoop")},XKe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&t4(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext")},iS=o(function(e){return Zt(e)?new Lf(e):e},"argSelector"),ege={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new $S(XKe,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){return this.emitter().on(e,iS(r),n),this},"on"),removeListener:o(function(e,r,n){return this.emitter().removeListener(e,iS(r),n),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,n){return this.emitter().one(e,iS(r),n),this},"one"),once:o(function(e,r,n){return this.emitter().one(e,iS(r),n),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};cn.eventAliasesOn(ege);VP={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};VP.jpeg=VP.jpg;pS={layout:o(function(e){var r=this;if(e==null){ai("Layout options must be specified to make a layout");return}if(e.name==null){ai("A `name` must be specified to make a layout");return}var n=e.name,i=r.extension("layout",n);if(i==null){ai("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;Zt(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new i(rr({},e,{cy:r,eles:a}));return s},"layout")};pS.createLayout=pS.makeLayout=pS.layout;jKe={notify:o(function(e,r){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var i=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();r!=null&&i.merge(r);return}if(n.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var i=e.batchNotifications[n];i.empty()?r.notify(n):r.notify(n,i)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var n=Object.keys(e),i=0;i<n.length;i++){var a=n[i],s=e[a],l=r.getElementById(a);l.data(s)}})},"batchData")},KKe=la({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1,webgl:!1,webglDebug:!1,webglDebugShowAtlases:!1,webglTexSize:2048,webglTexRows:12,webglBatchSize:2048,webglTexPerBatch:14,webglBgColor:[255,255,255]}),UP={renderTo:o(function(e,r,n,i){var a=this._private.renderer;return a.renderTo(e,r,n,i),this},"renderTo"),renderer:o(function(){return this._private.renderer},"renderer"),forceRender:o(function(){return this.notify("draw"),this},"forceRender"),resize:o(function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},"resize"),initRenderer:o(function(e){var r=this,n=r.extension("renderer",e.name);if(n==null){ai("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"));return}e.wheelSensitivity!==void 0&&un("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");var i=KKe(e);i.cy=r,r._private.renderer=new n(i),this.notify("init")},"initRenderer"),destroyRenderer:o(function(){var e=this;e.notify("destroy");var r=e.container();if(r)for(r._cyreg=null;r.childNodes.length>0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(n){var i=n._private;i.rscratch={},i.rstyle={},i.animation.current=[],i.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};UP.invalidateDimensions=UP.resize;mS={collection:o(function(e,r){return Zt(e)?this.$(e):go(e)?e.collection():En(e)?(r||(r={}),new ka(this,e,r.unique,r.removed)):new ka(this)},"collection"),nodes:o(function(e){var r=this.$(function(n){return n.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(n){return n.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};mS.elements=mS.filter=mS.$;Ga={},$b="t",QKe="f";Ga.apply=function(t){for(var e=this,r=e._private,n=r.cy,i=n.collection(),a=0;a<t.length;a++){var s=t[a],l=e.getContextMeta(s);if(!l.empty){var u=e.getContextStyle(l),h=e.applyContextStyle(l,u,s);s._private.appliedInitStyle?e.updateTransitions(s,h.diffProps):s._private.appliedInitStyle=!0;var f=e.updateStyleHints(s);f&&i.push(s)}}return i};Ga.getPropertiesDiff=function(t,e){var r=this,n=r._private.propDiffs=r._private.propDiffs||{},i=t+"-"+e,a=n[i];if(a)return a;for(var s=[],l={},u=0;u<r.length;u++){var h=r[u],f=t[u]===$b,d=e[u]===$b,p=f!==d,m=h.mappedProperties.length>0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y<g.length;y++){for(var v=g[y],x=v.name,b=!1,w=u+1;w<r.length;w++){var C=r[w],T=e[w]===$b;if(T&&(b=C.properties[v.name]!=null,b))break}!l[x]&&!b&&(l[x]=!0,s.push(x))}}}return n[i]=s,s};Ga.getContextMeta=function(t){for(var e=this,r="",n,i=t._private.styleCxtKey||"",a=0;a<e.length;a++){var s=e[a],l=s.selector&&s.selector.matches(t);l?r+=$b:r+=QKe}return n=e.getPropertiesDiff(i,r),t._private.styleCxtKey=r,{key:r,diffPropNames:n,empty:n.length===0}};Ga.getContextStyle=function(t){var e=t.key,r=this,n=this._private.contextStyles=this._private.contextStyles||{};if(n[e])return n[e];for(var i={_private:{key:e}},a=0;a<r.length;a++){var s=r[a],l=e[a]===$b;if(l)for(var u=0;u<s.properties.length;u++){var h=s.properties[u];i[h.name]=h}}return n[e]=i,i};Ga.applyContextStyle=function(t,e,r){for(var n=this,i=t.diffPropNames,a={},s=n.types,l=0;l<i.length;l++){var u=i[l],h=e[u],f=r.pstyle(u);if(!h)if(f)f.bypass?h={name:u,deleteBypassed:!0}:h={name:u,delete:!0};else continue;if(f!==h){if(h.mapped===s.fn&&f!=null&&f.mapping!=null&&f.mapping.value===h.value){var d=f.mapping,p=d.fnValue=h.value(r);if(p===d.prevFnValue)continue}var m=a[u]={prev:f};n.applyParsedProperty(r,h),m.next=r.pstyle(u),m.next&&m.next.bypass&&(m.next=m.next.bypassed)}}return{diffProps:a}};Ga.updateStyleHints=function(t){var e=t._private,r=this,n=r.propertyGroupNames,i=r.propertyGroupKeys,a=o(function(te,J,se){return r.getPropertiesHash(te,J,se)},"propHash"),s=e.styleKey;if(t.removed())return!1;var l=e.group==="nodes",u=t._private.style;n=Object.keys(u);for(var h=0;h<i.length;h++){var f=i[h];e.styleKeys[f]=[V1,Ob]}for(var d=o(function(te,J){return e.styleKeys[J][0]=Hb(te,e.styleKeys[J][0])},"updateGrKey1"),p=o(function(te,J){return e.styleKeys[J][1]=Wb(te,e.styleKeys[J][1])},"updateGrKey2"),m=o(function(te,J){d(te,J),p(te,J)},"updateGrKey"),g=o(function(te,J){for(var se=0;se<te.length;se++){var ue=te.charCodeAt(se);d(ue,J),p(ue,J)}},"updateGrKeyWStr"),y=2e9,v=o(function(te){return-128<te&&te<128&&Math.floor(te)!==te?y-(te*1024|0):te},"cleanNum"),x=0;x<n.length;x++){var b=n[x],w=u[b];if(w!=null){var C=this.properties[b],T=C.type,E=C.groupKey,A=void 0;C.hashOverride!=null?A=C.hashOverride(t,w):w.pfValue!=null&&(A=w.pfValue);var S=C.enums==null?w.value:null,_=A!=null,I=S!=null,D=_||I,k=w.units;if(T.number&&D&&!T.multiple){var L=_?A:S;m(v(L),E),!_&&k!=null&&g(k,E)}else g(w.strValue,E)}}for(var R=[V1,Ob],O=0;O<i.length;O++){var M=i[O],B=e.styleKeys[M];R[0]=Hb(B[0],R[0]),R[1]=Wb(B[1],R[1])}e.styleKey=rqe(R[0],R[1]);var F=e.styleKeys;e.labelDimsKey=wf(F.labelDimensions);var P=a(t,["label"],F.labelDimensions);if(e.labelKey=wf(P),e.labelStyleKey=wf(j6(F.commonLabel,P)),!l){var z=a(t,["source-label"],F.labelDimensions);e.sourceLabelKey=wf(z),e.sourceLabelStyleKey=wf(j6(F.commonLabel,z));var $=a(t,["target-label"],F.labelDimensions);e.targetLabelKey=wf($),e.targetLabelStyleKey=wf(j6(F.commonLabel,$))}if(l){var H=e.styleKeys,Q=H.nodeBody,j=H.nodeBorder,ie=H.nodeOutline,ne=H.backgroundImage,le=H.compound,he=H.pie,K=[Q,j,ie,ne,le,he].filter(function(X){return X!=null}).reduce(j6,[V1,Ob]);e.nodeKey=wf(K),e.hasPie=he!=null&&he[0]!==V1&&he[1]!==Ob}return s!==e.styleKey};Ga.clearStyleHints=function(t){var e=t._private;e.styleCxtKey="",e.styleKeys={},e.styleKey=null,e.labelKey=null,e.labelStyleKey=null,e.sourceLabelKey=null,e.sourceLabelStyleKey=null,e.targetLabelKey=null,e.targetLabelStyleKey=null,e.nodeKey=null,e.hasPie=null};Ga.applyParsedProperty=function(t,e){var r=this,n=e,i=t._private.style,a,s=r.types,l=r.properties[n.name].type,u=n.bypass,h=i[n.name],f=h&&h.bypass,d=t._private,p="mapping",m=o(function(Q){return Q==null?null:Q.pfValue!=null?Q.pfValue:Q.value},"getVal"),g=o(function(){var Q=m(h),j=m(n);r.checkTriggers(t,n.name,Q,j)},"checkTriggers");if(e.name==="curve-style"&&t.isEdge()&&(e.value!=="bezier"&&t.isLoop()||e.value==="haystack"&&(t.source().isParent()||t.target().isParent()))&&(n=e=this.parse(e.name,"bezier",u)),n.delete)return i[n.name]=void 0,g(),!0;if(n.deleteBypassed)return h?h.bypass?(h.bypassed=void 0,g(),!0):!1:(g(),!0);if(n.deleteBypass)return h?h.bypass?(i[n.name]=h.bypassed,g(),!0):!1:(g(),!0);var y=o(function(){un("Do not assign mappings to elements without corresponding data (i.e. ele `"+t.id()+"` has no mapping for property `"+n.name+"` with data field `"+n.field+"`); try a `["+n.field+"]` selector to limit scope to elements with `"+n.field+"` defined")},"printMappingErr");switch(n.mapped){case s.mapData:{for(var v=n.field.split("."),x=d.data,b=0;b<v.length&&x;b++){var w=v[b];x=x[w]}if(x==null)return y(),!1;var C;if(Ct(x)){var T=n.fieldMax-n.fieldMin;T===0?C=0:C=(x-n.fieldMin)/T}else return un("Do not use continuous mappers without specifying numeric data (i.e. `"+n.field+": "+x+"` for `"+t.id()+"` is non-numeric)"),!1;if(C<0?C=0:C>1&&(C=1),l.color){var E=n.valueMin[0],A=n.valueMax[0],S=n.valueMin[1],_=n.valueMax[1],I=n.valueMin[2],D=n.valueMax[2],k=n.valueMin[3]==null?1:n.valueMin[3],L=n.valueMax[3]==null?1:n.valueMax[3],R=[Math.round(E+(A-E)*C),Math.round(S+(_-S)*C),Math.round(I+(D-I)*C),Math.round(k+(L-k)*C)];a={bypass:n.bypass,name:n.name,value:R,strValue:"rgb("+R[0]+", "+R[1]+", "+R[2]+")"}}else if(l.number){var O=n.valueMin+(n.valueMax-n.valueMin)*C;a=this.parse(n.name,O,n.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=n,n=a;break}case s.data:{for(var M=n.field.split("."),B=d.data,F=0;F<M.length&&B;F++){var P=M[F];B=B[P]}if(B!=null&&(a=this.parse(n.name,B,n.bypass,p)),!a)return y(),!1;a.mapping=n,n=a;break}case s.fn:{var z=n.value,$=n.fnValue!=null?n.fnValue:z(t);if(n.prevFnValue=$,$==null)return un("Custom function mappers may not return null (i.e. `"+n.name+"` for ele `"+t.id()+"` is null)"),!1;if(a=this.parse(n.name,$,n.bypass,p),!a)return un("Custom function mappers may not return invalid values for the property type (i.e. `"+n.name+"` for ele `"+t.id()+"` is invalid)"),!1;a.mapping=Yc(n),n=a;break}case void 0:break;default:return!1}return u?(f?n.bypassed=h.bypassed:n.bypassed=h,i[n.name]=n):f?h.bypassed=n:i[n.name]=n,g(),!0};Ga.cleanElements=function(t,e){for(var r=0;r<t.length;r++){var n=t[r];if(this.clearStyleHints(n),n.dirtyCompoundBoundsCache(),n.dirtyBoundingBoxCache(),!e)n._private.style={};else for(var i=n._private.style,a=Object.keys(i),s=0;s<a.length;s++){var l=a[s],u=i[l];u!=null&&(u.bypass?u.bypassed=null:i[l]=null)}}};Ga.update=function(){var t=this._private.cy,e=t.mutableElements();e.updateStyle()};Ga.updateTransitions=function(t,e){var r=this,n=t._private,i=t.pstyle("transition-property").value,a=t.pstyle("transition-duration").pfValue,s=t.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var l={},u=!1,h=0;h<i.length;h++){var f=i[h],d=t.pstyle(f),p=e[f];if(p){var m=p.prev,g=m,y=p.next!=null?p.next:d,v=!1,x=void 0,b=1e-6;g&&(Ct(g.pfValue)&&Ct(y.pfValue)?(v=y.pfValue-g.pfValue,x=g.pfValue+b*v):Ct(g.value)&&Ct(y.value)?(v=y.value-g.value,x=g.value+b*v):En(g.value)&&En(y.value)&&(v=g.value[0]!==y.value[0]||g.value[1]!==y.value[1]||g.value[2]!==y.value[2],x=g.strValue),v&&(l[f]=y.strValue,this.applyBypass(t,f,x),u=!0))}}if(!u)return;n.transitioning=!0,new ey(function(w){s>0?t.delayAnimation(s).play().promise().then(w):w()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1})}else n.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1)};Ga.checkTrigger=function(t,e,r,n,i,a){var s=this.properties[e],l=i(s);l!=null&&l(r,n)&&a(s)};Ga.checkZOrderTrigger=function(t,e,r,n){var i=this;this.checkTrigger(t,e,r,n,function(a){return a.triggersZOrder},function(){i._private.cy.notify("zorder",t)})};Ga.checkBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBounds},function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),i.triggersBoundsOfParallelBeziers&&e==="curve-style"&&(r==="bezier"||n==="bezier")&&t.parallelEdges().forEach(function(a){a.dirtyBoundingBoxCache()}),i.triggersBoundsOfConnectedEdges&&e==="display"&&(r==="none"||n==="none")&&t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Ga.checkTriggers=function(t,e,r,n){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,n),this.checkBoundsTrigger(t,e,r,n)};s4={};s4.applyBypass=function(t,e,r,n){var i=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;l<i.properties.length;l++){var u=i.properties[l],h=u.name,f=this.parse(h,r,!0);f&&a.push(f)}}else if(Zt(e)){var d=this.parse(e,r,!0);d&&a.push(d)}else if(Ur(e)){var p=e;n=r;for(var m=Object.keys(p),g=0;g<m.length;g++){var y=m[g],v=p[y];if(v===void 0&&(v=p[LS(y)]),v!==void 0){var x=this.parse(y,v,!0);x&&a.push(x)}}}else return!1;if(a.length===0)return!1;for(var b=!1,w=0;w<t.length;w++){for(var C=t[w],T={},E=void 0,A=0;A<a.length;A++){var S=a[A];if(n){var _=C.pstyle(S.name);E=T[S.name]={prev:_}}b=this.applyParsedProperty(C,Yc(S))||b,n&&(E.next=C.pstyle(S.name))}b&&this.updateStyleHints(C),n&&this.updateTransitions(C,T,s)}return b};s4.overrideBypass=function(t,e,r){e=eB(e);for(var n=0;n<t.length;n++){var i=t[n],a=i._private.style[e],s=this.properties[e].type,l=s.color,u=s.mutiple,h=a?a.pfValue!=null?a.pfValue:a.value:null;!a||!a.bypass?this.applyBypass(i,e,r):(a.value=r,a.pfValue!=null&&(a.pfValue=r),l?a.strValue="rgb("+r.join(",")+")":u?a.strValue=r.join(" "):a.strValue=""+r,this.updateStyleHints(i)),this.checkTriggers(i,e,h,r)}};s4.removeAllBypasses=function(t,e){return this.removeBypasses(t,this.propertyNames,e)};s4.removeBypasses=function(t,e,r){for(var n=!0,i=0;i<t.length;i++){for(var a=t[i],s={},l=0;l<e.length;l++){var u=e[l],h=this.properties[u],f=a.pstyle(h.name);if(!(!f||!f.bypass)){var d="",p=this.parse(u,d,!0),m=s[h.name]={prev:f};this.applyParsedProperty(a,p),m.next=a.pstyle(h.name)}}this.updateStyleHints(a),r&&this.updateTransitions(a,s,n)}};pB={};pB.getEmSizeInPixels=function(){var t=this.containerCss("font-size");return t!=null?parseFloat(t):1};pB.containerCss=function(t){var e=this._private.cy,r=e.container(),n=e.window();if(n&&r&&n.getComputedStyle)return n.getComputedStyle(r).getPropertyValue(t)};jc={};jc.getRenderedStyle=function(t,e){return e?this.getStylePropertyValue(t,e,!0):this.getRawStyle(t,!0)};jc.getRawStyle=function(t,e){var r=this;if(t=t[0],t){for(var n={},i=0;i<r.properties.length;i++){var a=r.properties[i],s=r.getStylePropertyValue(t,a.name,e);s!=null&&(n[a.name]=s,n[LS(a.name)]=s)}return n}};jc.getIndexedStyle=function(t,e,r,n){var i=t.pstyle(e)[r][n];return i??t.cy().style().getDefaultProperty(e)[r][0]};jc.getStylePropertyValue=function(t,e,r){var n=this;if(t=t[0],t){var i=n.properties[e];i.alias&&(i=i.pointsTo);var a=i.type,s=t.pstyle(i.name);if(s){var l=s.value,u=s.units,h=s.strValue;if(r&&a.number&&l!=null&&Ct(l)){var f=t.cy().zoom(),d=o(function(v){return v*f},"getRenderedValue"),p=o(function(v,x){return d(v)+x},"getValueStringWithUnits"),m=En(l),g=m?u.every(function(y){return y!=null}):u!=null;return g?m?l.map(function(y,v){return p(y,u[v])}).join(" "):p(l,u):m?l.map(function(y){return Zt(y)?y:""+d(y)}).join(" "):""+d(l)}else if(h!=null)return h}return null}};jc.getAnimationStartStyle=function(t,e){for(var r={},n=0;n<e.length;n++){var i=e[n],a=i.name,s=t.pstyle(a);s!==void 0&&(Ur(s)?s=this.parse(a,s.strValue):s=this.parse(a,s)),s&&(r[a]=s)}return r};jc.getPropsList=function(t){var e=this,r=[],n=t,i=e.properties;if(n)for(var a=Object.keys(n),s=0;s<a.length;s++){var l=a[s],u=n[l],h=i[l]||i[eB(l)],f=this.parse(h.name,u);f&&r.push(f)}return r};jc.getNonDefaultPropertiesHash=function(t,e,r){var n=r.slice(),i,a,s,l,u,h;for(u=0;u<e.length;u++)if(i=e[u],a=t.pstyle(i,!1),a!=null)if(a.pfValue!=null)n[0]=Hb(l,n[0]),n[1]=Wb(l,n[1]);else for(s=a.strValue,h=0;h<s.length;h++)l=s.charCodeAt(h),n[0]=Hb(l,n[0]),n[1]=Wb(l,n[1]);return n};jc.getPropertiesHash=jc.getNonDefaultPropertiesHash;VS={};VS.appendFromJson=function(t){for(var e=this,r=0;r<t.length;r++){var n=t[r],i=n.selector,a=n.style||n.css,s=Object.keys(a);e.selector(i);for(var l=0;l<s.length;l++){var u=s[l],h=a[u];e.css(u,h)}}return e};VS.fromJson=function(t){var e=this;return e.resetToDefault(),e.appendFromJson(t),e};VS.json=function(){for(var t=[],e=this.defaultLength;e<this.length;e++){for(var r=this[e],n=r.selector,i=r.properties,a={},s=0;s<i.length;s++){var l=i[s];a[l.name]=l.strValue}t.push({selector:n?n.toString():"core",style:a})}return t};mB={};mB.appendFromString=function(t){var e=this,r=this,n=""+t,i,a,s;n=n.replace(/[/][*](\s|.)+?[*][/]/g,"");function l(){n.length>i.length?n=n.substr(i.length):n=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=n.match(/^\s*$/);if(h)break;var f=n.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){un("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+n);break}i=f[0];var d=f[1];if(d!=="core"){var p=new Lf(d);if(p.invalid){un("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){un("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],w=x[2],C=e.properties[b];if(!C){un("Skipping property: Invalid property name in: "+s),u();continue}var T=r.parse(b,w);if(!T){un("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:w}),u()}if(g){l();break}r.selector(d);for(var E=0;E<y.length;E++){var A=y[E];r.css(A.name,A.val)}l()}return r};mB.fromString=function(t){var e=this;return e.resetToDefault(),e.appendFromString(t),e};wa={};(function(){var t=Hi,e=sWe,r=lWe,n=cWe,i=uWe,a=o(function(K){return"^"+K+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},"data"),s=o(function(K){var X=t+"|\\w+|"+e+"|"+r+"|"+n+"|"+i;return"^"+K+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+t+")\\s*\\,\\s*("+t+")\\s*,\\s*("+X+")\\s*\\,\\s*("+X+")\\)$"},"mapData"),l=[`^url\\s*\\(\\s*['"]?(.+?)['"]?\\s*\\)$`,"^(none)$","^(.+)$"];wa.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},nonNegativeNumber:{number:!0,min:0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},linePosition:{enums:["center","inside","outside"]},lineJoin:{enums:["round","bevel","miter"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi","round-segments","round-taxi"]},radiusType:{enums:["arc-radius","influence-radius"],multiple:!0},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textOverflowWrap:{enums:["whitespace","anywhere"]},textBackgroundShape:{enums:["rectangle","roundrectangle","round-rectangle"]},nodeShape:{enums:["rectangle","roundrectangle","round-rectangle","cutrectangle","cut-rectangle","bottomroundrectangle","bottom-round-rectangle","barrel","ellipse","triangle","round-triangle","square","pentagon","round-pentagon","hexagon","round-hexagon","concavehexagon","concave-hexagon","heptagon","round-heptagon","octagon","round-octagon","tag","round-tag","star","diamond","round-diamond","vee","rhomboid","right-rhomboid","polygon"]},overlayShape:{enums:["roundrectangle","round-rectangle","ellipse"]},cornerRadius:{number:!0,min:0,units:"px|em",implicitUnits:"px",enums:["auto"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","circle-triangle","triangle-cross","triangle-backcurve","vee","square","circle","diamond","chevron","none"]},arrowFill:{enums:["filled","hollow"]},arrowWidth:{number:!0,units:"%|px|em",implicitUnits:"px",enums:["match-line"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},justification:{enums:["left","center","right","auto"]},text:{string:!0},data:{mapping:!0,regex:a("data")},layoutData:{mapping:!0,regex:a("layoutData")},scratch:{mapping:!0,regex:a("scratch")},mapData:{mapping:!0,regex:s("mapData")},mapLayoutData:{mapping:!0,regex:s("mapLayoutData")},mapScratch:{mapping:!0,regex:s("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:l,singleRegexMatchValue:!0},urls:{regexes:l,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position","endpoints"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-node-or-label","outside-to-line","outside-to-line-or-label"],singleEnum:!0,validate:o(function(K,X){switch(K.length){case 2:return X[0]!=="deg"&&X[0]!=="rad"&&X[1]!=="deg"&&X[1]!=="rad";case 1:return Zt(K[0])||X[0]==="deg"||X[0]==="rad";default:return!1}},"validate")},easing:{regexes:["^(spring)\\s*\\(\\s*("+t+")\\s*,\\s*("+t+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+t+")\\s*,\\s*("+t+")\\s*,\\s*("+t+")\\s*,\\s*("+t+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]},gradientDirection:{enums:["to-bottom","to-top","to-left","to-right","to-bottom-right","to-bottom-left","to-top-right","to-top-left","to-right-bottom","to-left-bottom","to-right-top","to-left-top"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:o(function(K){var X=K.length;return X===1||X===2||X===4},"validate")}};var u={zeroNonZero:o(function(K,X){return(K==null||X==null)&&K!==X||K==0&&X!=0?!0:K!=0&&X==0},"zeroNonZero"),any:o(function(K,X){return K!=X},"any"),emptyNonEmpty:o(function(K,X){var te=Af(K),J=Af(X);return te&&!J||!te&&J},"emptyNonEmpty")},h=wa.types,f=[{name:"label",type:h.text,triggersBounds:u.any,triggersZOrder:u.emptyNonEmpty},{name:"text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any}],d=[{name:"source-label",type:h.text,triggersBounds:u.any},{name:"source-text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"source-text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"source-text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"source-text-offset",type:h.size,triggersBounds:u.any}],p=[{name:"target-label",type:h.text,triggersBounds:u.any},{name:"target-text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"target-text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"target-text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"target-text-offset",type:h.size,triggersBounds:u.any}],m=[{name:"font-family",type:h.fontFamily,triggersBounds:u.any},{name:"font-style",type:h.fontStyle,triggersBounds:u.any},{name:"font-weight",type:h.fontWeight,triggersBounds:u.any},{name:"font-size",type:h.size,triggersBounds:u.any},{name:"text-transform",type:h.textTransform,triggersBounds:u.any},{name:"text-wrap",type:h.textWrap,triggersBounds:u.any},{name:"text-overflow-wrap",type:h.textOverflowWrap,triggersBounds:u.any},{name:"text-max-width",type:h.size,triggersBounds:u.any},{name:"text-outline-width",type:h.size,triggersBounds:u.any},{name:"line-height",type:h.positiveNumber,triggersBounds:u.any}],g=[{name:"text-valign",type:h.valign,triggersBounds:u.any},{name:"text-halign",type:h.halign,triggersBounds:u.any},{name:"color",type:h.color},{name:"text-outline-color",type:h.color},{name:"text-outline-opacity",type:h.zeroOneNumber},{name:"text-background-color",type:h.color},{name:"text-background-opacity",type:h.zeroOneNumber},{name:"text-background-padding",type:h.size,triggersBounds:u.any},{name:"text-border-opacity",type:h.zeroOneNumber},{name:"text-border-color",type:h.color},{name:"text-border-width",type:h.size,triggersBounds:u.any},{name:"text-border-style",type:h.borderStyle,triggersBounds:u.any},{name:"text-background-shape",type:h.textBackgroundShape,triggersBounds:u.any},{name:"text-justification",type:h.justification}],y=[{name:"events",type:h.bool,triggersZOrder:u.any},{name:"text-events",type:h.bool,triggersZOrder:u.any}],v=[{name:"display",type:h.display,triggersZOrder:u.any,triggersBounds:u.any,triggersBoundsOfConnectedEdges:!0},{name:"visibility",type:h.visibility,triggersZOrder:u.any},{name:"opacity",type:h.zeroOneNumber,triggersZOrder:u.zeroNonZero},{name:"text-opacity",type:h.zeroOneNumber},{name:"min-zoomed-font-size",type:h.size},{name:"z-compound-depth",type:h.zCompoundDepth,triggersZOrder:u.any},{name:"z-index-compare",type:h.zIndexCompare,triggersZOrder:u.any},{name:"z-index",type:h.number,triggersZOrder:u.any}],x=[{name:"overlay-padding",type:h.size,triggersBounds:u.any},{name:"overlay-color",type:h.color},{name:"overlay-opacity",type:h.zeroOneNumber,triggersBounds:u.zeroNonZero},{name:"overlay-shape",type:h.overlayShape,triggersBounds:u.any},{name:"overlay-corner-radius",type:h.cornerRadius}],b=[{name:"underlay-padding",type:h.size,triggersBounds:u.any},{name:"underlay-color",type:h.color},{name:"underlay-opacity",type:h.zeroOneNumber,triggersBounds:u.zeroNonZero},{name:"underlay-shape",type:h.overlayShape,triggersBounds:u.any},{name:"underlay-corner-radius",type:h.cornerRadius}],w=[{name:"transition-property",type:h.propList},{name:"transition-duration",type:h.time},{name:"transition-delay",type:h.time},{name:"transition-timing-function",type:h.easing}],C=o(function(K,X){return X.value==="label"?-K.poolIndex():X.pfValue},"nodeSizeHashOverride"),T=[{name:"height",type:h.nodeSize,triggersBounds:u.any,hashOverride:C},{name:"width",type:h.nodeSize,triggersBounds:u.any,hashOverride:C},{name:"shape",type:h.nodeShape,triggersBounds:u.any},{name:"shape-polygon-points",type:h.polygonPointList,triggersBounds:u.any},{name:"corner-radius",type:h.cornerRadius},{name:"background-color",type:h.color},{name:"background-fill",type:h.fill},{name:"background-opacity",type:h.zeroOneNumber},{name:"background-blacken",type:h.nOneOneNumber},{name:"background-gradient-stop-colors",type:h.colors},{name:"background-gradient-stop-positions",type:h.percentages},{name:"background-gradient-direction",type:h.gradientDirection},{name:"padding",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"padding-relative-to",type:h.paddingRelativeTo,triggersBounds:u.any},{name:"bounds-expansion",type:h.boundsExpansion,triggersBounds:u.any}],E=[{name:"border-color",type:h.color},{name:"border-opacity",type:h.zeroOneNumber},{name:"border-width",type:h.size,triggersBounds:u.any},{name:"border-style",type:h.borderStyle},{name:"border-cap",type:h.lineCap},{name:"border-join",type:h.lineJoin},{name:"border-dash-pattern",type:h.numbers},{name:"border-dash-offset",type:h.number},{name:"border-position",type:h.linePosition}],A=[{name:"outline-color",type:h.color},{name:"outline-opacity",type:h.zeroOneNumber},{name:"outline-width",type:h.size,triggersBounds:u.any},{name:"outline-style",type:h.borderStyle},{name:"outline-offset",type:h.size,triggersBounds:u.any}],S=[{name:"background-image",type:h.urls},{name:"background-image-crossorigin",type:h.bgCrossOrigin},{name:"background-image-opacity",type:h.zeroOneNumbers},{name:"background-image-containment",type:h.bgContainment},{name:"background-image-smoothing",type:h.bools},{name:"background-position-x",type:h.bgPos},{name:"background-position-y",type:h.bgPos},{name:"background-width-relative-to",type:h.bgRelativeTo},{name:"background-height-relative-to",type:h.bgRelativeTo},{name:"background-repeat",type:h.bgRepeat},{name:"background-fit",type:h.bgFit},{name:"background-clip",type:h.bgClip},{name:"background-width",type:h.bgWH},{name:"background-height",type:h.bgWH},{name:"background-offset-x",type:h.bgPos},{name:"background-offset-y",type:h.bgPos}],_=[{name:"position",type:h.position,triggersBounds:u.any},{name:"compound-sizing-wrt-labels",type:h.compoundIncludeLabels,triggersBounds:u.any},{name:"min-width",type:h.size,triggersBounds:u.any},{name:"min-width-bias-left",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-width-bias-right",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-height",type:h.size,triggersBounds:u.any},{name:"min-height-bias-top",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-height-bias-bottom",type:h.sizeMaybePercent,triggersBounds:u.any}],I=[{name:"line-style",type:h.lineStyle},{name:"line-color",type:h.color},{name:"line-fill",type:h.fill},{name:"line-cap",type:h.lineCap},{name:"line-opacity",type:h.zeroOneNumber},{name:"line-dash-pattern",type:h.numbers},{name:"line-dash-offset",type:h.number},{name:"line-outline-width",type:h.size},{name:"line-outline-color",type:h.color},{name:"line-gradient-stop-colors",type:h.colors},{name:"line-gradient-stop-positions",type:h.percentages},{name:"curve-style",type:h.curveStyle,triggersBounds:u.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:h.zeroOneNumber,triggersBounds:u.any},{name:"source-endpoint",type:h.edgeEndpoint,triggersBounds:u.any},{name:"target-endpoint",type:h.edgeEndpoint,triggersBounds:u.any},{name:"control-point-step-size",type:h.size,triggersBounds:u.any},{name:"control-point-distances",type:h.bidirectionalSizes,triggersBounds:u.any},{name:"control-point-weights",type:h.numbers,triggersBounds:u.any},{name:"segment-distances",type:h.bidirectionalSizes,triggersBounds:u.any},{name:"segment-weights",type:h.numbers,triggersBounds:u.any},{name:"segment-radii",type:h.numbers,triggersBounds:u.any},{name:"radius-type",type:h.radiusType,triggersBounds:u.any},{name:"taxi-turn",type:h.bidirectionalSizeMaybePercent,triggersBounds:u.any},{name:"taxi-turn-min-distance",type:h.size,triggersBounds:u.any},{name:"taxi-direction",type:h.axisDirection,triggersBounds:u.any},{name:"taxi-radius",type:h.number,triggersBounds:u.any},{name:"edge-distances",type:h.edgeDistances,triggersBounds:u.any},{name:"arrow-scale",type:h.positiveNumber,triggersBounds:u.any},{name:"loop-direction",type:h.angle,triggersBounds:u.any},{name:"loop-sweep",type:h.angle,triggersBounds:u.any},{name:"source-distance-from-node",type:h.size,triggersBounds:u.any},{name:"target-distance-from-node",type:h.size,triggersBounds:u.any}],D=[{name:"ghost",type:h.bool,triggersBounds:u.any},{name:"ghost-offset-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"ghost-offset-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"ghost-opacity",type:h.zeroOneNumber}],k=[{name:"selection-box-color",type:h.color},{name:"selection-box-opacity",type:h.zeroOneNumber},{name:"selection-box-border-color",type:h.color},{name:"selection-box-border-width",type:h.size},{name:"active-bg-color",type:h.color},{name:"active-bg-opacity",type:h.zeroOneNumber},{name:"active-bg-size",type:h.size},{name:"outside-texture-bg-color",type:h.color},{name:"outside-texture-bg-opacity",type:h.zeroOneNumber}],L=[];wa.pieBackgroundN=16,L.push({name:"pie-size",type:h.sizeMaybePercent});for(var R=1;R<=wa.pieBackgroundN;R++)L.push({name:"pie-"+R+"-background-color",type:h.color}),L.push({name:"pie-"+R+"-background-size",type:h.percent}),L.push({name:"pie-"+R+"-background-opacity",type:h.zeroOneNumber});var O=[],M=wa.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:h.arrowShape,triggersBounds:u.any},{name:"arrow-color",type:h.color},{name:"arrow-fill",type:h.arrowFill},{name:"arrow-width",type:h.arrowWidth}].forEach(function(he){M.forEach(function(K){var X=K+"-"+he.name,te=he.type,J=he.triggersBounds;O.push({name:X,type:te,triggersBounds:J})})},{});var B=wa.properties=[].concat(y,w,v,x,b,D,g,m,f,d,p,T,E,A,S,L,_,I,O,k),F=wa.propertyGroups={behavior:y,transition:w,visibility:v,overlay:x,underlay:b,ghost:D,commonLabel:g,labelDimensions:m,mainLabel:f,sourceLabel:d,targetLabel:p,nodeBody:T,nodeBorder:E,nodeOutline:A,backgroundImage:S,pie:L,compound:_,edgeLine:I,edgeArrow:O,core:k},P=wa.propertyGroupNames={},z=wa.propertyGroupKeys=Object.keys(F);z.forEach(function(he){P[he]=F[he].map(function(K){return K.name}),F[he].forEach(function(K){return K.groupKey=he})});var $=wa.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"segment-distance",pointsTo:"segment-distances"},{name:"segment-weight",pointsTo:"segment-weights"},{name:"segment-radius",pointsTo:"segment-radii"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];wa.propertyNames=B.map(function(he){return he.name});for(var H=0;H<B.length;H++){var Q=B[H];B[Q.name]=Q}for(var j=0;j<$.length;j++){var ie=$[j],ne=B[ie.pointsTo],le={name:ie.name,alias:!0,pointsTo:ne};B.push(le),B[ie.name]=le}})();wa.getDefaultProperty=function(t){return this.getDefaultProperties()[t]};wa.getDefaultProperties=function(){var t=this._private;if(t.defaultProperties!=null)return t.defaultProperties;for(var e=rr({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,events:"yes","text-events":"no","text-valign":"top","text-halign":"center","text-justification":"auto","line-height":1,color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-overflow-wrap":"whitespace","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"overlay-shape":"round-rectangle","overlay-corner-radius":"auto","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","underlay-corner-radius":"auto","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-fill":"solid","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-image-containment":"inside","background-image-smoothing":"yes","background-position-x":"50%","background-position-y":"50%","background-offset-x":0,"background-offset-y":0,"background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid","border-dash-pattern":[4,2],"border-dash-offset":0,"border-cap":"butt","border-join":"miter","border-position":"center","outline-color":"#999","outline-opacity":1,"outline-width":0,"outline-offset":0,"outline-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","corner-radius":"auto","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce(function(u,h){for(var f=1;f<=wa.pieBackgroundN;f++){var d=h.name.replace("{{i}}",f),p=h.value;u[d]=p}return u},{}),{"line-style":"solid","line-color":"#999","line-fill":"solid","line-cap":"butt","line-opacity":1,"line-outline-width":0,"line-outline-color":"#000","line-gradient-stop-colors":"#999","line-gradient-stop-positions":"0%","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"segment-radii":15,"radius-type":"arc-radius","taxi-turn":"50%","taxi-radius":15,"taxi-turn-min-distance":10,"taxi-direction":"auto","edge-distances":"intersection","curve-style":"haystack","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node","line-dash-pattern":[6,3],"line-dash-offset":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"},{name:"arrow-width",value:1}].reduce(function(u,h){return wa.arrowPrefixes.forEach(function(f){var d=f+"-"+h.name,p=h.value;u[d]=p}),u},{})),r={},n=0;n<this.properties.length;n++){var i=this.properties[n];if(!i.pointsTo){var a=i.name,s=e[a],l=this.parse(a,s);r[a]=l}}return t.defaultProperties=r,t.defaultProperties};wa.addDefaultStylesheet=function(){this.selector(":parent").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3}).selector(":loop").css({"curve-style":"bezier"}).selector("edge:compound").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector(":parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}),this.defaultLength=this.length};US={};US.parse=function(t,e,r,n){var i=this;if(si(e))return i.parseImplWarn(t,e,r,n);var a=n==="mapping"||n===!0||n===!1||n==null?"dontcare":n,s=r?"t":"f",l=""+e,u=cme(t,l,s,a),h=i.propCache=i.propCache||[],f;return(f=h[u])||(f=h[u]=i.parseImplWarn(t,e,r,n)),(r||n==="mapping")&&(f=Yc(f),f&&(f.value=Yc(f.value))),f};US.parseImplWarn=function(t,e,r,n){var i=this.parseImpl(t,e,r,n);return!i&&e!=null&&un("The style property `".concat(t,": ").concat(e,"` is invalid")),i&&(i.name==="width"||i.name==="height")&&e==="label"&&un("The style value of `label` is deprecated for `"+i.name+"`"),i};US.parseImpl=function(t,e,r,n){var i=this;t=eB(t);var a=i.properties[t],s=e,l=i.types;if(!a||e===void 0)return null;a.alias&&(a=a.pointsTo,t=a.name);var u=Zt(e);u&&(e=e.trim());var h=a.type;if(!h)return null;if(r&&(e===""||e===null))return{name:t,value:e,bypass:!0,deleteBypass:!0};if(si(e))return{name:t,value:e,strValue:"fn",mapped:l.fn,bypass:r};var f,d;if(!(!u||n||e.length<7||e[1]!=="a")){if(e.length>=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return un("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&n!=="multiple"){var w;if(u?w=e.split(/\s+/):En(e)?w=e:w=[e],h.evenMultiple&&w.length%2!==0)return null;for(var C=[],T=[],E=[],A="",S=!1,_=0;_<w.length;_++){var I=i.parse(t,w[_],r,"multiple");S=S||Zt(I.value),C.push(I.value),E.push(I.pfValue!=null?I.pfValue:I.value),T.push(I.units),A+=(_>0?" ":"")+I.strValue}return h.validate&&!h.validate(C,T)?null:h.singleEnum&&S?C.length===1&&Zt(C[0])?{name:t,value:C[0],strValue:C[0],bypass:r}:null:{name:t,value:C,pfValue:E,strValue:A,bypass:r,units:T}}var D=o(function(){for(var K=0;K<h.enums.length;K++){var X=h.enums[K];if(X===e)return{name:t,value:e,strValue:""+e,bypass:r}}return null},"checkEnums");if(h.number){var k,L="px";if(h.units&&(k=h.units),h.implicitUnits&&(L=h.implicitUnits),!h.unitless)if(u){var R="px|em"+(h.allowPercent?"|\\%":"");k&&(R=k);var O=e.match("^("+Hi+")("+R+")?$");O&&(e=O[1],k=O[2]||L)}else(!k||h.implicitUnits)&&(k=L);if(e=parseFloat(e),isNaN(e)&&h.enums===void 0)return null;if(isNaN(e)&&h.enums!==void 0)return e=s,D();if(h.integer&&!JHe(e)||h.min!==void 0&&(e<h.min||h.strictMin&&e===h.min)||h.max!==void 0&&(e>h.max||h.strictMax&&e===h.max))return null;var M={name:t,value:e,strValue:""+e+(k||""),units:k,bypass:r};return h.unitless||k!=="px"&&k!=="em"?M.pfValue=e:M.pfValue=k==="px"||!k?e:this.getEmSizeInPixels()*e,(k==="ms"||k==="s")&&(M.pfValue=k==="ms"?e:1e3*e),(k==="deg"||k==="rad")&&(M.pfValue=k==="rad"?e:Nqe(e)),k==="%"&&(M.pfValue=e/100),M}else if(h.propList){var B=[],F=""+e;if(F!=="none"){for(var P=F.split(/\s*,\s*|\s+/),z=0;z<P.length;z++){var $=P[z].trim();i.properties[$]?B.push($):un("`"+$+"` is not a valid property name")}if(B.length===0)return null}return{name:t,value:B,strValue:B.length===0?"none":B.join(" "),bypass:r}}else if(h.color){var H=tme(e);return H?{name:t,value:H,pfValue:H,strValue:"rgb("+H[0]+","+H[1]+","+H[2]+")",bypass:r}:null}else if(h.regex||h.regexes){if(h.enums){var Q=D();if(Q)return Q}for(var j=h.regexes?h.regexes:[h.regex],ie=0;ie<j.length;ie++){var ne=new RegExp(j[ie]),le=ne.exec(e);if(le)return{name:t,value:h.singleRegexMatchValue?le[1]:le,strValue:""+e,bypass:r}}return null}else return h.string?{name:t,value:""+e,strValue:""+e,bypass:r}:h.enums?D():null};Fa=o(function t(e){if(!(this instanceof t))return new t(e);if(!JP(e)){ai("A style must have a core reference");return}this._private={cy:e,coreStyle:{}},this.length=0,this.resetToDefault()},"Style"),za=Fa.prototype;za.instanceString=function(){return"style"};za.clear=function(){for(var t=this._private,e=t.cy,r=e.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,t.contextStyles={},t.propDiffs={},this.cleanElements(r,!0),r.forEach(function(i){var a=i[0]._private;a.styleDirty=!0,a.appliedInitStyle=!1}),this};za.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this};za.core=function(t){return this._private.coreStyle[t]||this.getDefaultProperty(t)};za.selector=function(t){var e=t==="core"?null:new Lf(t),r=this.length++;return this[r]={selector:e,properties:[],mappedProperties:[],index:r},this};za.css=function(){var t=this,e=arguments;if(e.length===1)for(var r=e[0],n=0;n<t.properties.length;n++){var i=t.properties[n],a=r[i.name];a===void 0&&(a=r[LS(i.name)]),a!==void 0&&this.cssRule(i.name,a)}else e.length===2&&this.cssRule(e[0],e[1]);return this};za.style=za.css;za.cssRule=function(t,e){var r=this.parse(t,e);if(r){var n=this.length-1;this[n].properties.push(r),this[n].properties[r.name]=r,r.name.match(/pie-(\d+)-background-size/)&&r.value&&(this._private.hasPie=!0),r.mapped&&this[n].mappedProperties.push(r);var i=!this[n].selector;i&&(this._private.coreStyle[r.name]=r)}return this};za.append=function(t){return Z0e(t)?t.appendToStyle(this):En(t)?this.appendFromJson(t):Zt(t)&&this.appendFromString(t),this};Fa.fromJson=function(t,e){var r=new Fa(t);return r.fromJson(e),r};Fa.fromString=function(t,e){return new Fa(t).fromString(e)};[Ga,s4,pB,jc,VS,mB,wa,US].forEach(function(t){rr(za,t)});Fa.types=za.types;Fa.properties=za.properties;Fa.propertyGroups=za.propertyGroups;Fa.propertyGroupNames=za.propertyGroupNames;Fa.propertyGroupKeys=za.propertyGroupKeys;ZKe={style:o(function(e){if(e){var r=this.setStyle(e);r.update()}return this._private.style},"style"),setStyle:o(function(e){var r=this._private;return Z0e(e)?r.style=e.generateStyle(this):En(e)?r.style=Fa.fromJson(this,e):Zt(e)?r.style=Fa.fromString(this,e):r.style=Fa(this),r.style},"setStyle"),updateStyle:o(function(){this.mutableElements().updateStyle()},"updateStyle")},JKe="single",Hp={autolock:o(function(e){if(e!==void 0)this._private.autolock=!!e;else return this._private.autolock;return this},"autolock"),autoungrabify:o(function(e){if(e!==void 0)this._private.autoungrabify=!!e;else return this._private.autoungrabify;return this},"autoungrabify"),autounselectify:o(function(e){if(e!==void 0)this._private.autounselectify=!!e;else return this._private.autounselectify;return this},"autounselectify"),selectionType:o(function(e){var r=this._private;if(r.selectionType==null&&(r.selectionType=JKe),e!==void 0)(e==="additive"||e==="single")&&(r.selectionType=e);else return r.selectionType;return this},"selectionType"),panningEnabled:o(function(e){if(e!==void 0)this._private.panningEnabled=!!e;else return this._private.panningEnabled;return this},"panningEnabled"),userPanningEnabled:o(function(e){if(e!==void 0)this._private.userPanningEnabled=!!e;else return this._private.userPanningEnabled;return this},"userPanningEnabled"),zoomingEnabled:o(function(e){if(e!==void 0)this._private.zoomingEnabled=!!e;else return this._private.zoomingEnabled;return this},"zoomingEnabled"),userZoomingEnabled:o(function(e){if(e!==void 0)this._private.userZoomingEnabled=!!e;else return this._private.userZoomingEnabled;return this},"userZoomingEnabled"),boxSelectionEnabled:o(function(e){if(e!==void 0)this._private.boxSelectionEnabled=!!e;else return this._private.boxSelectionEnabled;return this},"boxSelectionEnabled"),pan:o(function(){var e=arguments,r=this._private.pan,n,i,a,s,l;switch(e.length){case 0:return r;case 1:if(Zt(e[0]))return n=e[0],r[n];if(Ur(e[0])){if(!this._private.panningEnabled)return this;a=e[0],s=a.x,l=a.y,Ct(s)&&(r.x=s),Ct(l)&&(r.y=l),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;n=e[0],i=e[1],(n==="x"||n==="y")&&Ct(i)&&(r[n]=i),this.emit("pan viewport");break}return this.notify("viewport"),this},"pan"),panBy:o(function(e,r){var n=arguments,i=this._private.pan,a,s,l,u,h;if(!this._private.panningEnabled)return this;switch(n.length){case 1:Ur(e)&&(l=n[0],u=l.x,h=l.y,Ct(u)&&(i.x+=u),Ct(h)&&(i.y+=h),this.emit("pan viewport"));break;case 2:a=e,s=r,(a==="x"||a==="y")&&Ct(s)&&(i[a]+=s),this.emit("pan viewport");break}return this.notify("viewport"),this},"panBy"),gc:o(function(){this.notify("gc")},"gc"),fit:o(function(e,r){var n=this.getFitViewport(e,r);if(n){var i=this._private;i.zoom=n.zoom,i.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},"fit"),getFitViewport:o(function(e,r){if(Ct(e)&&r===void 0&&(r=e,e=void 0),!(!this._private.panningEnabled||!this._private.zoomingEnabled)){var n;if(Zt(e)){var i=e;e=this.$(i)}else if(rWe(e)){var a=e;n={x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2},n.w=n.x2-n.x1,n.h=n.y2-n.y1}else go(e)||(e=this.mutableElements());if(!(go(e)&&e.empty())){n=n||e.boundingBox();var s=this.width(),l=this.height(),u;if(r=Ct(r)?r:0,!isNaN(s)&&!isNaN(l)&&s>0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0){u=Math.min((s-2*r)/n.w,(l-2*r)/n.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u<this._private.minZoom?this._private.minZoom:u;var h={x:(s-u*(n.x1+n.x2))/2,y:(l-u*(n.y1+n.y2))/2};return{zoom:u,pan:h}}}}},"getFitViewport"),zoomRange:o(function(e,r){var n=this._private;if(r==null){var i=e;e=i.min,r=i.max}return Ct(e)&&Ct(r)&&e<=r?(n.minZoom=e,n.maxZoom=r):Ct(e)&&r===void 0&&e<=n.maxZoom?n.minZoom=e:Ct(r)&&e===void 0&&r>=n.minZoom&&(n.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,n=r.pan,i=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),Ct(e)?s=e:Ur(e)&&(s=e.level,e.position!=null?a=MS(e.position,i,n):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=s<r.minZoom?r.minZoom:s,l||!Ct(s)||s===i||a!=null&&(!Ct(a.x)||!Ct(a.y)))return null;if(a!=null){var u=n,h=i,f=s,d={x:-f/h*(a.x-u.x)+a.x,y:-f/h*(a.y-u.y)+a.y};return{zoomed:!0,panned:!0,zoom:f,pan:d}}else return{zoomed:!0,panned:!1,zoom:s,pan:n}},"getZoomedViewport"),zoom:o(function(e){if(e===void 0)return this._private.zoom;var r=this.getZoomedViewport(e),n=this._private;return r==null||!r.zoomed?this:(n.zoom=r.zoom,r.panned&&(n.pan.x=r.pan.x,n.pan.y=r.pan.y),this.emit("zoom"+(r.panned?" pan":"")+" viewport"),this.notify("viewport"),this)},"zoom"),viewport:o(function(e){var r=this._private,n=!0,i=!0,a=[],s=!1,l=!1;if(!e)return this;if(Ct(e.zoom)||(n=!1),Ur(e.pan)||(i=!1),!n&&!i)return this;if(n){var u=e.zoom;u<r.minZoom||u>r.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(i&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;Ct(h.x)&&(r.pan.x=h.x,l=!1),Ct(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(Zt(e)){var n=e;e=this.mutableElements().filter(n)}else go(e)||(e=this.mutableElements());if(e.length!==0){var i=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(i.x1+i.x2))/2,y:(s-r*(i.y1+i.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,n=this;return e.sizeCache=e.sizeCache||(r?function(){var i=n.window().getComputedStyle(r),a=o(function(l){return parseFloat(i.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}}():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,n=this.renderedExtent(),i={x1:(n.x1-e.x)/r,x2:(n.x2-e.x)/r,y1:(n.y1-e.y)/r,y2:(n.y2-e.y)/r};return i.w=i.x2-i.x1,i.h=i.y2-i.y1,i},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};Hp.centre=Hp.center;Hp.autolockNodes=Hp.autolock;Hp.autoungrabifyNodes=Hp.autoungrabify;Zb={data:cn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:cn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:cn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:cn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Zb.attr=Zb.data;Zb.removeAttr=Zb.removeData;Jb=o(function(e){var r=this;e=rr({},e);var n=e.container;n&&!vS(n)&&vS(n[0])&&(n=n[0]);var i=n?n._cyreg:null;i=i||{},i&&i.cy&&(i.cy.destroy(),i={});var a=i.readies=i.readies||[];n&&(n._cyreg=i),i.cy=r;var s=Ui!==void 0&&n!==void 0&&!e.headless,l=e;l.layout=rr({name:s?"grid":"null"},l.layout),l.renderer=rr({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:n,ready:!1,options:l,elements:new ka(this),listeners:[],aniEles:new ka(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:Ct(l.zoom)?l.zoom:1,pan:{x:Ur(l.pan)&&Ct(l.pan.x)?l.pan.x:0,y:Ur(l.pan)&&Ct(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(nWe);if(v)return ey.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=rr({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Ur(g)||En(g))&&r.add(g),r.one("layoutready",function(w){r.notifications(!0),r.emit(w),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=rr({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,si(l.ready)&&r.on("ready",l.ready);for(var v=0;v<a.length;v++){var x=a[v];r.on("ready",x)}i&&(i.readies=[]),r.emit("ready")},l.done)})},"Core"),SS=Jb.prototype;rr(SS,{instanceString:o(function(){return"core"},"instanceString"),isReady:o(function(){return this._private.ready},"isReady"),destroyed:o(function(){return this._private.destroyed},"destroyed"),ready:o(function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},"ready"),destroy:o(function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},"destroy"),hasElementWithId:o(function(e){return this._private.elements.hasElementWithId(e)},"hasElementWithId"),getElementById:o(function(e){return this._private.elements.getElementById(e)},"getElementById"),hasCompoundNodes:o(function(){return this._private.hasCompoundNodes},"hasCompoundNodes"),headless:o(function(){return this._private.renderer.isHeadless()},"headless"),styleEnabled:o(function(){return this._private.styleEnabled},"styleEnabled"),addToPool:o(function(e){return this._private.elements.merge(e),this},"addToPool"),removeFromPool:o(function(e){return this._private.elements.unmerge(e),this},"removeFromPool"),container:o(function(){return this._private.container||null},"container"),window:o(function(){var e=this._private.container;if(e==null)return Ui;var r=this._private.container.ownerDocument;return r===void 0||r==null?Ui:r.defaultView||Ui},"window"),mount:o(function(e){if(e!=null){var r=this,n=r._private,i=n.options;return!vS(e)&&vS(e[0])&&(e=e[0]),r.stopAnimationLoop(),r.destroyRenderer(),n.container=e,n.styleEnabled=!0,r.invalidateSize(),r.initRenderer(rr({},i,i.renderer,{name:i.renderer.name==="null"?"canvas":i.renderer.name})),r.startAnimationLoop(),r.style(i.style),r.emit("mount"),r}},"mount"),unmount:o(function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},"unmount"),options:o(function(){return Yc(this._private.options)},"options"),json:o(function(e){var r=this,n=r._private,i=r.mutableElements(),a=o(function(C){return r.getElementById(C.id())},"getFreshRef");if(Ur(e)){if(r.startBatch(),e.elements){var s={},l=o(function(C,T){for(var E=[],A=[],S=0;S<C.length;S++){var _=C[S];if(!_.data.id){un("cy.json() cannot handle elements without an ID attribute");continue}var I=""+_.data.id,D=r.getElementById(I);s[I]=!0,D.length!==0?A.push({ele:D,json:_}):(T&&(_.group=T),E.push(_))}r.add(E);for(var k=0;k<A.length;k++){var L=A[k],R=L.ele,O=L.json;R.json(O)}},"updateEles");if(En(e.elements))l(e.elements);else for(var u=["nodes","edges"],h=0;h<u.length;h++){var f=u[h],d=e.elements[f];En(d)&&l(d,f)}var p=r.collection();i.filter(function(w){return!s[w.id()]}).forEach(function(w){w.isParent()?p.merge(w):w.remove()}),p.forEach(function(w){return w.children().move({parent:null})}),p.forEach(function(w){return a(w).remove()})}e.style&&r.style(e.style),e.zoom!=null&&e.zoom!==n.zoom&&r.zoom(e.zoom),e.pan&&(e.pan.x!==n.pan.x||e.pan.y!==n.pan.y)&&r.pan(e.pan),e.data&&r.data(e.data);for(var m=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],g=0;g<m.length;g++){var y=m[g];e[y]!=null&&r[y](e[y])}return r.endBatch(),this}else{var v=!!e,x={};v?x.elements=this.elements().map(function(w){return w.json()}):(x.elements={},i.forEach(function(w){var C=w.group();x.elements[C]||(x.elements[C]=[]),x.elements[C].push(w.json())})),this._private.styleEnabled&&(x.style=r.style().json()),x.data=Yc(r.data());var b=n.options;return x.zoomingEnabled=n.zoomingEnabled,x.userZoomingEnabled=n.userZoomingEnabled,x.zoom=n.zoom,x.minZoom=n.minZoom,x.maxZoom=n.maxZoom,x.panningEnabled=n.panningEnabled,x.userPanningEnabled=n.userPanningEnabled,x.pan=Yc(n.pan),x.boxSelectionEnabled=n.boxSelectionEnabled,x.renderer=Yc(b.renderer),x.hideEdgesOnViewport=b.hideEdgesOnViewport,x.textureOnViewport=b.textureOnViewport,x.wheelSensitivity=b.wheelSensitivity,x.motionBlur=b.motionBlur,x.multiClickDebounceTime=b.multiClickDebounceTime,x}},"json")});SS.$id=SS.getElementById;[VKe,YKe,ege,VP,pS,jKe,UP,mS,ZKe,Hp,Zb].forEach(function(t){rr(SS,t)});eQe={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")},tQe={maximal:!1,acyclic:!1},z1=o(function(e){return e.scratch("breadthfirst")},"getInfo"),T0e=o(function(e,r){return e.scratch("breadthfirst",r)},"setInfo");o(tge,"BreadthFirstLayout");tge.prototype.run=function(){var t=this.options,e=t.cy,r=t.eles,n=r.nodes().filter(function(ae){return ae.isChildless()}),i=r,a=t.directed,s=t.acyclic||t.maximal||t.maximalAdjustments>0,l=!!t.boundingBox,u=e.extent(),h=Hs(l?t.boundingBox:{x1:u.x1,y1:u.y1,w:u.w,h:u.h}),f;if(go(t.roots))f=t.roots;else if(En(t.roots)){for(var d=[],p=0;p<t.roots.length;p++){var m=t.roots[p],g=e.getElementById(m);d.push(g)}f=e.collection(d)}else if(Zt(t.roots))f=e.$(t.roots);else if(a)f=n.roots();else{var y=r.components();f=e.collection();for(var v=o(function(Oe){var ge=y[Oe],ze=ge.maxDegree(!1),He=ge.filter(function($e){return $e.degree(!1)===ze});f=f.add(He)},"_loop"),x=0;x<y.length;x++)v(x)}var b=[],w={},C=o(function(Oe,ge){b[ge]==null&&(b[ge]=[]);var ze=b[ge].length;b[ge].push(Oe),T0e(Oe,{index:ze,depth:ge})},"addToDepth"),T=o(function(Oe,ge){var ze=z1(Oe),He=ze.depth,$e=ze.index;b[He][$e]=null,Oe.isChildless()&&C(Oe,ge)},"changeDepth");i.bfs({roots:f,directed:t.directed,visit:o(function(Oe,ge,ze,He,$e){var Re=Oe[0],Ie=Re.id();Re.isChildless()&&C(Re,$e),w[Ie]=!0},"visit")});for(var E=[],A=0;A<n.length;A++){var S=n[A];w[S.id()]||E.push(S)}var _=o(function(Oe){for(var ge=b[Oe],ze=0;ze<ge.length;ze++){var He=ge[ze];if(He==null){ge.splice(ze,1),ze--;continue}T0e(He,{depth:Oe,index:ze})}},"assignDepthsAt"),I=o(function(Oe,ge){for(var ze=z1(Oe),He=Oe.incomers().filter(function(re){return re.isNode()&&r.has(re)}),$e=-1,Re=Oe.id(),Ie=0;Ie<He.length;Ie++){var be=He[Ie],W=z1(be);$e=Math.max($e,W.depth)}if(ze.depth<=$e){if(!t.acyclic&&ge[Re])return null;var de=$e+1;return T(Oe,de),ge[Re]=de,!0}return!1},"adjustMaximally");if(a&&s){var D=[],k={},L=o(function(Oe){return D.push(Oe)},"enqueue"),R=o(function(){return D.shift()},"dequeue");for(n.forEach(function(ae){return D.push(ae)});D.length>0;){var O=R(),M=I(O,k);if(M)O.outgoers().filter(function(ae){return ae.isNode()&&r.has(ae)}).forEach(L);else if(M===null){un("Detected double maximal shift for node `"+O.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var B=0;if(t.avoidOverlap)for(var F=0;F<n.length;F++){var P=n[F],z=P.layoutDimensions(t),$=z.w,H=z.h;B=Math.max(B,$,H)}var Q={},j=o(function(Oe){if(Q[Oe.id()])return Q[Oe.id()];for(var ge=z1(Oe).depth,ze=Oe.neighborhood(),He=0,$e=0,Re=0;Re<ze.length;Re++){var Ie=ze[Re];if(!(Ie.isEdge()||Ie.isParent()||!n.has(Ie))){var be=z1(Ie);if(be!=null){var W=be.index,de=be.depth;if(!(W==null||de==null)){var re=b[de].length;de<ge&&(He+=W/re,$e++)}}}}return $e=Math.max(1,$e),He=He/$e,$e===0&&(He=0),Q[Oe.id()]=He,He},"getWeightedPercent"),ie=o(function(Oe,ge){var ze=j(Oe),He=j(ge),$e=ze-He;return $e===0?eme(Oe.id(),ge.id()):$e},"sortFn");t.depthSort!==void 0&&(ie=t.depthSort);for(var ne=b.length,le=0;le<ne;le++)b[le].sort(ie),_(le);for(var he=[],K=0;K<E.length;K++)he.push(E[K]);var X=o(function(){for(var Oe=0;Oe<ne;Oe++)_(Oe)},"assignDepths");he.length&&(b.unshift(he),ne=b.length,X());for(var te=0,J=0;J<ne;J++)te=Math.max(b[J].length,te);var se={x:h.x1+h.w/2,y:h.y1+h.h/2},ue=n.reduce(function(ae,Oe){return function(ge){return{w:ae.w===-1?ge.w:(ae.w+ge.w)/2,h:ae.h===-1?ge.h:(ae.h+ge.h)/2}}(Oe.boundingBox({includeLabels:t.nodeDimensionsIncludeLabels}))},{w:-1,h:-1}),Z=Math.max(ne===1?0:l?(h.h-t.padding*2-ue.h)/(ne-1):(h.h-t.padding*2-ue.h)/(ne+1),B),Se=b.reduce(function(ae,Oe){return Math.max(ae,Oe.length)},0),ce=o(function(Oe){var ge=z1(Oe),ze=ge.depth,He=ge.index;if(t.circle){var $e=Math.min(h.w/2/ne,h.h/2/ne);$e=Math.max($e,B);var Re=$e*ze+$e-(ne>0&&b[0].length<=3?$e/2:0),Ie=2*Math.PI/b[ze].length*He;return ze===0&&b[0].length===1&&(Re=1),{x:se.x+Re*Math.cos(Ie),y:se.y+Re*Math.sin(Ie)}}else{var be=b[ze].length,W=Math.max(be===1?0:l?(h.w-t.padding*2-ue.w)/((t.grid?Se:be)-1):(h.w-t.padding*2-ue.w)/((t.grid?Se:be)+1),B),de={x:se.x+(He+1-(be+1)/2)*W,y:se.y+(ze+1-(ne+1)/2)*Z};return de}},"getPosition");return r.nodes().layoutPositions(this,t,ce),this};rQe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(rge,"CircleLayout");rge.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=n.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p<a.length;p++){var m=a[p],g=m.layoutDimensions(e),y=g.w,v=g.h;d=Math.max(d,y,v)}if(Ct(e.radius)?f=e.radius:a.length<=1?f=0:f=Math.min(s.h,s.w)/2-d,a.length>1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),w=Math.sqrt(d*d/(x*x+b*b));f=Math.max(w,f)}var C=o(function(E,A){var S=e.startAngle+A*h*(i?1:-1),_=f*Math.cos(S),I=f*Math.sin(S),D={x:l.x+_,y:l.y+I};return D},"getPos");return n.nodes().layoutPositions(this,e,C),this};nQe={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(nge,"ConcentricLayout");nge.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,n=t.cy,i=e.eles,a=i.nodes().not(":parent"),s=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f<a.length;f++){var d=a[f],p=void 0;p=e.concentric(d),u.push({value:p,node:d}),d._private.scratch.concentric=p}a.updateStyle();for(var m=0;m<a.length;m++){var g=a[m],y=g.layoutDimensions(e);h=Math.max(h,y.w,y.h)}u.sort(function(ue,Z){return Z.value-ue.value});for(var v=e.levelWidth(a),x=[[]],b=x[0],w=0;w<u.length;w++){var C=u[w];if(b.length>0){var T=Math.abs(b[0].value-C.value);T>=v&&(b=[],x.push(b))}b.push(C)}var E=h+e.minNodeSpacing;if(!e.avoidOverlap){var A=x.length>0&&x[0].length>1,S=Math.min(s.w,s.h)/2-E,_=S/(x.length+A?1:0);E=Math.min(E,_)}for(var I=0,D=0;D<x.length;D++){var k=x[D],L=e.sweep===void 0?2*Math.PI-2*Math.PI/k.length:e.sweep,R=k.dTheta=L/Math.max(1,k.length-1);if(k.length>1&&e.avoidOverlap){var O=Math.cos(R)-Math.cos(0),M=Math.sin(R)-Math.sin(0),B=Math.sqrt(E*E/(O*O+M*M));I=Math.max(B,I)}k.r=I,I+=E}if(e.equidistant){for(var F=0,P=0,z=0;z<x.length;z++){var $=x[z],H=$.r-P;F=Math.max(F,H)}P=0;for(var Q=0;Q<x.length;Q++){var j=x[Q];Q===0&&(P=j.r),j.r=P,P+=F}}for(var ie={},ne=0;ne<x.length;ne++)for(var le=x[ne],he=le.dTheta,K=le.r,X=0;X<le.length;X++){var te=le[X],J=e.startAngle+(r?1:-1)*he*X,se={x:l.x+K*Math.cos(J),y:l.y+K*Math.sin(J)};ie[te.node.id()]=se}return i.nodes().layoutPositions(this,e,function(ue){var Z=ue.id();return ie[Z]}),this};iQe={ready:o(function(){},"ready"),stop:o(function(){},"stop"),animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:o(function(e){return 2048},"nodeRepulsion"),nodeOverlap:4,idealEdgeLength:o(function(e){return 32},"idealEdgeLength"),edgeElasticity:o(function(e){return 32},"edgeElasticity"),nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};o(HS,"CoseLayout");HS.prototype.run=function(){var t=this.options,e=t.cy,r=this;r.stopped=!1,(t.animate===!0||t.animate===!1)&&r.emit({type:"layoutstart",layout:r}),t.debug===!0?_P=!0:_P=!1;var n=aQe(e,r,t);_P&&lQe(n),t.randomize&&cQe(n);var i=Qu(),a=o(function(){uQe(n,e,t),t.fit===!0&&e.fit(t.padding)},"refresh"),s=o(function(p){return!(r.stopped||p>=t.numIter||(hQe(n,t),n.temperature=n.temperature*t.coolingFactor,n.temperature<t.minTemp))},"mainLoop"),l=o(function(){if(t.animate===!0||t.animate===!1)a(),r.one("layoutstop",t.stop),r.emit({type:"layoutstop",layout:r});else{var p=t.eles.nodes(),m=ige(n,t,p);p.layoutPositions(r,t,m)}},"done"),u=0,h=!0;if(t.animate===!0){var f=o(function d(){for(var p=0;h&&p<t.refresh;)h=s(u),u++,p++;if(!h)E0e(n,t),l();else{var m=Qu();m-i>=t.animationThreshold&&a(),xS(d)}},"frame");f()}else{for(;h;)h=s(u),u++;E0e(n,t),l()}return this};HS.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};HS.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};aQe=o(function(e,r,n){for(var i=n.eles.edges(),a=n.eles.nodes(),s=Hs(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:i.size(),temperature:n.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=n.eles.components(),h={},f=0;f<u.length;f++)for(var d=u[f],p=0;p<d.length;p++){var m=d[p];h[m.id()]=f}for(var f=0;f<l.nodeSize;f++){var g=a[f],y=g.layoutDimensions(n),v={};v.isLocked=g.locked(),v.id=g.data("id"),v.parentId=g.data("parent"),v.cmptId=h[g.id()],v.children=[],v.positionX=g.position("x"),v.positionY=g.position("y"),v.offsetX=0,v.offsetY=0,v.height=y.w,v.width=y.h,v.maxX=v.positionX+v.width/2,v.minX=v.positionX-v.width/2,v.maxY=v.positionY+v.height/2,v.minY=v.positionY-v.height/2,v.padLeft=parseFloat(g.style("padding")),v.padRight=parseFloat(g.style("padding")),v.padTop=parseFloat(g.style("padding")),v.padBottom=parseFloat(g.style("padding")),v.nodeRepulsion=si(n.nodeRepulsion)?n.nodeRepulsion(g):n.nodeRepulsion,l.layoutNodes.push(v),l.idToIndex[v.id]=f}for(var x=[],b=0,w=-1,C=[],f=0;f<l.nodeSize;f++){var g=l.layoutNodes[f],T=g.parentId;T!=null?l.layoutNodes[l.idToIndex[T]].children.push(g.id):(x[++w]=g.id,C.push(g.id))}for(l.graphSet.push(C);b<=w;){var E=x[b++],A=l.idToIndex[E],m=l.layoutNodes[A],S=m.children;if(S.length>0){l.graphSet.push(S);for(var f=0;f<S.length;f++)x[++w]=S[f]}}for(var f=0;f<l.graphSet.length;f++)for(var _=l.graphSet[f],p=0;p<_.length;p++){var I=l.idToIndex[_[p]];l.indexToGraph[I]=f}for(var f=0;f<l.edgeSize;f++){var D=i[f],k={};k.id=D.data("id"),k.sourceId=D.data("source"),k.targetId=D.data("target");var L=si(n.idealEdgeLength)?n.idealEdgeLength(D):n.idealEdgeLength,R=si(n.edgeElasticity)?n.edgeElasticity(D):n.edgeElasticity,O=l.idToIndex[k.sourceId],M=l.idToIndex[k.targetId],B=l.indexToGraph[O],F=l.indexToGraph[M];if(B!=F){for(var P=sQe(k.sourceId,k.targetId,l),z=l.graphSet[P],$=0,v=l.layoutNodes[O];z.indexOf(v.id)===-1;)v=l.layoutNodes[l.idToIndex[v.parentId]],$++;for(v=l.layoutNodes[M];z.indexOf(v.id)===-1;)v=l.layoutNodes[l.idToIndex[v.parentId]],$++;L*=$*n.nestingFactor}k.idealLength=L,k.elasticity=R,l.layoutEdges.push(k)}return l},"createLayoutInfo"),sQe=o(function(e,r,n){var i=oQe(e,r,0,n);return 2>i.count?0:i.graph},"findLCA"),oQe=o(function t(e,r,n,i){var a=i.graphSet[n];if(-1<a.indexOf(e)&&-1<a.indexOf(r))return{count:2,graph:n};for(var s=0,l=0;l<a.length;l++){var u=a[l],h=i.idToIndex[u],f=i.layoutNodes[h].children;if(f.length!==0){var d=i.indexToGraph[i.idToIndex[f[0]]],p=t(e,r,d,i);if(p.count!==0)if(p.count===1){if(s++,s===2)break}else return p}}return{count:s,graph:n}},"findLCA_aux"),cQe=o(function(e,r){for(var n=e.clientWidth,i=e.clientHeight,a=0;a<e.nodeSize;a++){var s=e.layoutNodes[a];s.children.length===0&&!s.isLocked&&(s.positionX=Math.random()*n,s.positionY=Math.random()*i)}},"randomizePositions"),ige=o(function(e,r,n){var i=e.boundingBox,a={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return r.boundingBox&&(n.forEach(function(s){var l=e.layoutNodes[e.idToIndex[s.data("id")]];a.x1=Math.min(a.x1,l.positionX),a.x2=Math.max(a.x2,l.positionX),a.y1=Math.min(a.y1,l.positionY),a.y2=Math.max(a.y2,l.positionY)}),a.w=a.x2-a.x1,a.h=a.y2-a.y1),function(s,l){var u=e.layoutNodes[e.idToIndex[s.data("id")]];if(r.boundingBox){var h=(u.positionX-a.x1)/a.w,f=(u.positionY-a.y1)/a.h;return{x:i.x1+h*i.w,y:i.y1+f*i.h}}else return{x:u.positionX,y:u.positionY}}},"getScaleInBoundsFn"),uQe=o(function(e,r,n){var i=n.layout,a=n.eles.nodes(),s=ige(e,n,a);a.positions(s),e.ready!==!0&&(e.ready=!0,i.one("layoutready",n.ready),i.emit({type:"layoutready",layout:this}))},"refreshPositions"),hQe=o(function(e,r,n){fQe(e,r),mQe(e),gQe(e,r),yQe(e),vQe(e)},"step"),fQe=o(function(e,r){for(var n=0;n<e.graphSet.length;n++)for(var i=e.graphSet[n],a=i.length,s=0;s<a;s++)for(var l=e.layoutNodes[e.idToIndex[i[s]]],u=s+1;u<a;u++){var h=e.layoutNodes[e.idToIndex[i[u]]];dQe(l,h,e,r)}},"calculateNodeForces"),k0e=o(function(e){return-e+2*e*Math.random()},"randomDistance"),dQe=o(function(e,r,n,i){var a=e.cmptId,s=r.cmptId;if(!(a!==s&&!n.isCompound)){var l=r.positionX-e.positionX,u=r.positionY-e.positionY,h=1;l===0&&u===0&&(l=k0e(h),u=k0e(h));var f=pQe(e,r,l,u);if(f>0)var d=i.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=CS(e,l,u),v=CS(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,w=x*x+b*b,p=Math.sqrt(w),d=(e.nodeRepulsion+r.nodeRepulsion)/w,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),pQe=o(function(e,r,n,i){if(n>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(i>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),CS=o(function(e,r,n){var i=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=n/r,h=s/l,f={};return r===0&&0<n||r===0&&0>n?(f.x=i,f.y=a+s/2,f):0<r&&-1*h<=u&&u<=h?(f.x=i+l/2,f.y=a+l*n/2/r,f):0>r&&-1*h<=u&&u<=h?(f.x=i-l/2,f.y=a-l*n/2/r,f):0<n&&(u<=-1*h||u>=h)?(f.x=i+s*r/2/n,f.y=a+s/2,f):(0>n&&(u<=-1*h||u>=h)&&(f.x=i-s*r/2/n,f.y=a-s/2),f)},"findClippingPoint"),mQe=o(function(e,r){for(var n=0;n<e.edgeSize;n++){var i=e.layoutEdges[n],a=e.idToIndex[i.sourceId],s=e.layoutNodes[a],l=e.idToIndex[i.targetId],u=e.layoutNodes[l],h=u.positionX-s.positionX,f=u.positionY-s.positionY;if(!(h===0&&f===0)){var d=CS(s,h,f),p=CS(u,-1*h,-1*f),m=p.x-d.x,g=p.y-d.y,y=Math.sqrt(m*m+g*g),v=Math.pow(i.idealLength-y,2)/i.elasticity;if(y!==0)var x=v*m/y,b=v*g/y;else var x=0,b=0;s.isLocked||(s.offsetX+=x,s.offsetY+=b),u.isLocked||(u.offsetX-=x,u.offsetY-=b)}}},"calculateEdgeForces"),gQe=o(function(e,r){if(r.gravity!==0)for(var n=1,i=0;i<e.graphSet.length;i++){var a=e.graphSet[i],s=a.length;if(i===0)var l=e.clientHeight/2,u=e.clientWidth/2;else var h=e.layoutNodes[e.idToIndex[a[0]]],f=e.layoutNodes[e.idToIndex[h.parentId]],l=f.positionX,u=f.positionY;for(var d=0;d<s;d++){var p=e.layoutNodes[e.idToIndex[a[d]]];if(!p.isLocked){var m=l-p.positionX,g=u-p.positionY,y=Math.sqrt(m*m+g*g);if(y>n){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),yQe=o(function(e,r){var n=[],i=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;i<=a;){var s=n[i++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0<h.length&&!u.isLocked){for(var f=u.offsetX,d=u.offsetY,p=0;p<h.length;p++){var m=e.layoutNodes[e.idToIndex[h[p]]];m.offsetX+=f,m.offsetY+=d,n[++a]=h[p]}u.offsetX=0,u.offsetY=0}}},"propagateForces"),vQe=o(function(e,r){for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];0<i.children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0)}for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];if(!(0<i.children.length||i.isLocked)){var a=xQe(i.offsetX,i.offsetY,e.temperature);i.positionX+=a.x,i.positionY+=a.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,bQe(i,e)}}for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];0<i.children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},"updatePositions"),xQe=o(function(e,r,n){var i=Math.sqrt(e*e+r*r);if(i>n)var a={x:n*e/i,y:n*r/i};else var a={x:e,y:r};return a},"limitForce"),bQe=o(function t(e,r){var n=e.parentId;if(n!=null){var i=r.layoutNodes[r.idToIndex[n]],a=!1;if((i.maxX==null||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,a=!0),(i.minX==null||e.minX-i.padLeft<i.minX)&&(i.minX=e.minX-i.padLeft,a=!0),(i.maxY==null||e.maxY+i.padBottom>i.maxY)&&(i.maxY=e.maxY+i.padBottom,a=!0),(i.minY==null||e.minY-i.padTop<i.minY)&&(i.minY=e.minY-i.padTop,a=!0),a)return t(i,r)}},"updateAncestryBoundaries"),E0e=o(function(e,r){for(var n=e.layoutNodes,i=[],a=0;a<n.length;a++){var s=n[a],l=s.cmptId,u=i[l]=i[l]||[];u.push(s)}for(var h=0,a=0;a<i.length;a++){var f=i[a];if(f){f.x1=1/0,f.x2=-1/0,f.y1=1/0,f.y2=-1/0;for(var d=0;d<f.length;d++){var p=f[d];f.x1=Math.min(f.x1,p.positionX-p.width/2),f.x2=Math.max(f.x2,p.positionX+p.width/2),f.y1=Math.min(f.y1,p.positionY-p.height/2),f.y2=Math.max(f.y2,p.positionY+p.height/2)}f.w=f.x2-f.x1,f.h=f.y2-f.y1,h+=f.w*f.h}}i.sort(function(b,w){return w.w*w.h-b.w*b.h});for(var m=0,g=0,y=0,v=0,x=Math.sqrt(h)*e.clientWidth/e.clientHeight,a=0;a<i.length;a++){var f=i[a];if(f){for(var d=0;d<f.length;d++){var p=f[d];p.isLocked||(p.positionX+=m-f.x1,p.positionY+=g-f.y1)}m+=f.w+r.componentSpacing,y+=f.w+r.componentSpacing,v=Math.max(v,f.h),y>x&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),wQe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(age,"GridLayout");age.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=n.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));var a=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)n.nodes().layoutPositions(this,e,function(Q){return{x:a.x1,y:a.y1}});else{var s=i.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(j){if(j==null)return Math.min(u,h);var ie=Math.min(u,h);ie==u?u=j:h=j},"small"),d=o(function(j){if(j==null)return Math.max(u,h);var ie=Math.max(u,h);ie==u?u=j:h=j},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u<s;){var v=f(),x=d();(x+1)*v>=s?d(x+1):f(v+1)}var b=a.w/h,w=a.h/u;if(e.condense&&(b=0,w=0),e.avoidOverlap)for(var C=0;C<i.length;C++){var T=i[C],E=T._private.position;(E.x==null||E.y==null)&&(E.x=0,E.y=0);var A=T.layoutDimensions(e),S=e.avoidOverlapPadding,_=A.w+S,I=A.h+S;b=Math.max(b,_),w=Math.max(w,I)}for(var D={},k=o(function(j,ie){return!!D["c-"+j+"-"+ie]},"used"),L=o(function(j,ie){D["c-"+j+"-"+ie]=!0},"use"),R=0,O=0,M=o(function(){O++,O>=h&&(O=0,R++)},"moveToNextCell"),B={},F=0;F<i.length;F++){var P=i[F],z=e.position(P);if(z&&(z.row!==void 0||z.col!==void 0)){var $={row:z.row,col:z.col};if($.col===void 0)for($.col=0;k($.row,$.col);)$.col++;else if($.row===void 0)for($.row=0;k($.row,$.col);)$.row++;B[P.id()]=$,L($.row,$.col)}}var H=o(function(j,ie){var ne,le;if(j.locked()||j.isParent())return!1;var he=B[j.id()];if(he)ne=he.col*b+b/2+a.x1,le=he.row*w+w/2+a.y1;else{for(;k(R,O);)M();ne=O*b+b/2+a.x1,le=R*w+w/2+a.y1,L(R,O),M()}return{x:ne,y:le}},"getPos");i.layoutPositions(this,e,H)}return this};TQe={ready:o(function(){},"ready"),stop:o(function(){},"stop")};o(gB,"NullLayout");gB.prototype.run=function(){var t=this.options,e=t.eles,r=this;return t.cy,r.emit("layoutstart"),e.nodes().positions(function(){return{x:0,y:0}}),r.one("layoutready",t.ready),r.emit("layoutready"),r.one("layoutstop",t.stop),r.emit("layoutstop"),this};gB.prototype.stop=function(){return this};kQe={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,spacingFactor:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(sge,"PresetLayout");sge.prototype.run=function(){var t=this.options,e=t.eles,r=e.nodes(),n=si(t.positions);function i(a){if(t.positions==null)return Aqe(a.position());if(n)return t.positions(a);var s=t.positions[a._private.data.id];return s??null}return o(i,"getPosition"),r.layoutPositions(this,t,function(a,s){var l=i(a);return a.locked()||l==null?!1:l}),this};EQe={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(oge,"RandomLayout");oge.prototype.run=function(){var t=this.options,e=t.cy,r=t.eles,n=Hs(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),i=o(function(s,l){return{x:n.x1+Math.round(Math.random()*n.w),y:n.y1+Math.round(Math.random()*n.h)}},"getPos");return r.nodes().layoutPositions(this,t,i),this};SQe=[{name:"breadthfirst",impl:tge},{name:"circle",impl:rge},{name:"concentric",impl:nge},{name:"cose",impl:HS},{name:"grid",impl:age},{name:"null",impl:gB},{name:"preset",impl:sge},{name:"random",impl:oge}];o(lge,"NullRenderer");S0e=o(function(){},"noop"),C0e=o(function(){throw new Error("A headless instance can not render images")},"throwImgErr");lge.prototype={recalculateRenderedStyle:S0e,notify:o(function(){this.notifications++},"notify"),init:S0e,isHeadless:o(function(){return!0},"isHeadless"),png:C0e,jpg:C0e};yB={};yB.arrowShapeWidth=.3;yB.registerArrowShapes=function(){var t=this.arrowShapes={},e=this,r=o(function(h,f,d,p,m,g,y){var v=m.x-d/2-y,x=m.x+d/2+y,b=m.y-d/2-y,w=m.y+d/2+y,C=v<=h&&h<=x&&b<=f&&f<=w;return C},"bbCollide"),n=o(function(h,f,d,p,m){var g=h*Math.cos(p)-f*Math.sin(p),y=h*Math.sin(p)+f*Math.cos(p),v=g*d,x=y*d,b=v+m.x,w=x+m.y;return{x:b,y:w}},"transform"),i=o(function(h,f,d,p){for(var m=[],g=0;g<h.length;g+=2){var y=h[g],v=h[g+1];m.push(n(y,v,f,d,p))}return m},"transformPoints"),a=o(function(h){for(var f=[],d=0;d<h.length;d++){var p=h[d];f.push(p.x,p.y)}return f},"pointsToArr"),s=o(function(h){return h.pstyle("width").pfValue*h.pstyle("arrow-scale").pfValue*2},"standardGap"),l=o(function(h,f){Zt(f)&&(f=t[f]),t[h]=rr({name:h,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:o(function(p,m,g,y,v,x){var b=a(i(this.points,g+2*x,y,v)),w=Us(p,m,b);return w},"collide"),roughCollide:r,draw:o(function(p,m,g,y){var v=i(this.points,m,g,y);e.arrowShapeImpl("polygon")(p,v)},"draw"),spacing:o(function(p){return 0},"spacing"),gap:s},f)},"defineArrowShape");l("none",{collide:bS,roughCollide:bS,draw:rB,spacing:Ppe,gap:Ppe}),l("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),l("arrow","triangle"),l("triangle-backcurve",{points:t.triangle.points,controlPoint:[0,-.15],roughCollide:r,draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=this.controlPoint,v=n(y[0],y[1],f,d,p);e.arrowShapeImpl(this.name)(h,g,v)},"draw"),gap:o(function(h){return s(h)*.8},"gap")}),l("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:o(function(h,f,d,p,m,g,y){var v=a(i(this.points,d+2*y,p,m)),x=a(i(this.pointsTee,d+2*y,p,m)),b=Us(h,f,v)||Us(h,f,x);return b},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=i(this.pointsTee,f,d,p);e.arrowShapeImpl(this.name)(h,g,y)},"draw")}),l("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:o(function(h,f,d,p,m,g,y){var v=m,x=Math.pow(v.x-h,2)+Math.pow(v.y-f,2)<=Math.pow((d+2*y)*this.radius,2),b=a(i(this.points,d+2*y,p,m));return Us(h,f,b)||x},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.pointsTr,f,d,p);e.arrowShapeImpl(this.name)(h,g,p.x,p.y,this.radius*f)},"draw"),spacing:o(function(h){return e.getArrowWidth(h.pstyle("width").pfValue,h.pstyle("arrow-scale").value)*this.radius},"spacing")}),l("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:o(function(h,f){var d=this.baseCrossLinePts.slice(),p=f/h,m=3,g=5;return d[m]=d[m]-p,d[g]=d[g]-p,d},"crossLinePts"),collide:o(function(h,f,d,p,m,g,y){var v=a(i(this.points,d+2*y,p,m)),x=a(i(this.crossLinePts(d,g),d+2*y,p,m)),b=Us(h,f,v)||Us(h,f,x);return b},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=i(this.crossLinePts(f,m),f,d,p);e.arrowShapeImpl(this.name)(h,g,y)},"draw")}),l("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:o(function(h){return s(h)*.525},"gap")}),l("circle",{radius:.15,collide:o(function(h,f,d,p,m,g,y){var v=m,x=Math.pow(v.x-h,2)+Math.pow(v.y-f,2)<=Math.pow((d+2*y)*this.radius,2);return x},"collide"),draw:o(function(h,f,d,p,m){e.arrowShapeImpl(this.name)(h,p.x,p.y,this.radius*f)},"draw"),spacing:o(function(h){return e.getArrowWidth(h.pstyle("width").pfValue,h.pstyle("arrow-scale").value)*this.radius},"spacing")}),l("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:o(function(h){return 1},"spacing"),gap:o(function(h){return 1},"gap")}),l("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),l("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:o(function(h){return h.pstyle("width").pfValue*h.pstyle("arrow-scale").value},"gap")}),l("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:o(function(h){return .95*h.pstyle("width").pfValue*h.pstyle("arrow-scale").value},"gap")})};qp={};qp.projectIntoViewport=function(t,e){var r=this.cy,n=this.findContainerClientCoords(),i=n[0],a=n[1],s=n[4],l=r.pan(),u=r.zoom(),h=((t-i)/s-l.x)/u,f=((e-a)/s-l.y)/u;return[h,f]};qp.findContainerClientCoords=function(){if(this.containerBB)return this.containerBB;var t=this.container,e=t.getBoundingClientRect(),r=this.cy.window().getComputedStyle(t),n=o(function(x){return parseFloat(r.getPropertyValue(x))},"styleValue"),i={left:n("padding-left"),right:n("padding-right"),top:n("padding-top"),bottom:n("padding-bottom")},a={left:n("border-left-width"),right:n("border-right-width"),top:n("border-top-width"),bottom:n("border-bottom-width")},s=t.clientWidth,l=t.clientHeight,u=i.left+i.right,h=i.top+i.bottom,f=a.left+a.right,d=e.width/(s+f),p=s-u,m=l-h,g=e.left+i.left+a.left,y=e.top+i.top+a.top;return this.containerBB=[g,y,p,m,d]};qp.invalidateContainerClientCoordsCache=function(){this.containerBB=null};qp.findNearestElement=function(t,e,r,n){return this.findNearestElements(t,e,r,n)[0]};qp.findNearestElements=function(t,e,r,n){var i=this,a=this,s=a.getCachedZSortedEles(),l=[],u=a.cy.zoom(),h=a.cy.hasCompoundNodes(),f=(n?24:8)/u,d=(n?8:2)/u,p=(n?8:2)/u,m=1/0,g,y;r&&(s=s.interactive);function v(A,S){if(A.isNode()){if(y)return;y=A,l.push(A)}if(A.isEdge()&&(S==null||S<m))if(g){if(g.pstyle("z-compound-depth").value===A.pstyle("z-compound-depth").value&&g.pstyle("z-compound-depth").value===A.pstyle("z-compound-depth").value){for(var _=0;_<l.length;_++)if(l[_].isEdge()){l[_]=A,g=A,m=S??m;break}}}else l.push(A),g=A,m=S??m}o(v,"addEle");function x(A){var S=A.outerWidth()+2*d,_=A.outerHeight()+2*d,I=S/2,D=_/2,k=A.position(),L=A.pstyle("corner-radius").value==="auto"?"auto":A.pstyle("corner-radius").pfValue,R=A._private.rscratch;if(k.x-I<=t&&t<=k.x+I&&k.y-D<=e&&e<=k.y+D){var O=a.nodeShapes[i.getNodeShape(A)];if(O.checkPoint(t,e,0,S,_,k.x,k.y,L,R))return v(A,0),!0}}o(x,"checkNode");function b(A){var S=A._private,_=S.rscratch,I=A.pstyle("width").pfValue,D=A.pstyle("arrow-scale").value,k=I/2+f,L=k*k,R=k*2,F=S.source,P=S.target,O;if(_.edgeType==="segments"||_.edgeType==="straight"||_.edgeType==="haystack"){for(var M=_.allpts,B=0;B+3<M.length;B+=2)if(zqe(t,e,M[B],M[B+1],M[B+2],M[B+3],R)&&L>(O=Wqe(t,e,M[B],M[B+1],M[B+2],M[B+3])))return v(A,O),!0}else if(_.edgeType==="bezier"||_.edgeType==="multibezier"||_.edgeType==="self"||_.edgeType==="compound"){for(var M=_.allpts,B=0;B+5<_.allpts.length;B+=4)if(Gqe(t,e,M[B],M[B+1],M[B+2],M[B+3],M[B+4],M[B+5],R)&&L>(O=Hqe(t,e,M[B],M[B+1],M[B+2],M[B+3],M[B+4],M[B+5])))return v(A,O),!0}for(var F=F||S.source,P=P||S.target,z=i.getArrowWidth(I,D),$=[{name:"source",x:_.arrowStartX,y:_.arrowStartY,angle:_.srcArrowAngle},{name:"target",x:_.arrowEndX,y:_.arrowEndY,angle:_.tgtArrowAngle},{name:"mid-source",x:_.midX,y:_.midY,angle:_.midsrcArrowAngle},{name:"mid-target",x:_.midX,y:_.midY,angle:_.midtgtArrowAngle}],B=0;B<$.length;B++){var H=$[B],Q=a.arrowShapes[A.pstyle(H.name+"-arrow-shape").value],j=A.pstyle("width").pfValue;if(Q.roughCollide(t,e,z,H.angle,{x:H.x,y:H.y},j,f)&&Q.collide(t,e,z,H.angle,{x:H.x,y:H.y},j,f))return v(A),!0}h&&l.length>0&&(x(F),x(P))}o(b,"checkEdge");function w(A,S,_){return Gl(A,S,_)}o(w,"preprop");function C(A,S){var _=A._private,I=p,D;S?D=S+"-":D="",A.boundingBox();var k=_.labelBounds[S||"main"],L=A.pstyle(D+"label").value,R=A.pstyle("text-events").strValue==="yes";if(!(!R||!L)){var O=w(_.rscratch,"labelX",S),M=w(_.rscratch,"labelY",S),B=w(_.rscratch,"labelAngle",S),F=A.pstyle(D+"text-margin-x").pfValue,P=A.pstyle(D+"text-margin-y").pfValue,z=k.x1-I-F,$=k.x2+I-F,H=k.y1-I-P,Q=k.y2+I-P;if(B){var j=Math.cos(B),ie=Math.sin(B),ne=o(function(se,ue){return se=se-O,ue=ue-M,{x:se*j-ue*ie+O,y:se*ie+ue*j+M}},"rotate"),le=ne(z,H),he=ne(z,Q),K=ne($,H),X=ne($,Q),te=[le.x+F,le.y+P,K.x+F,K.y+P,X.x+F,X.y+P,he.x+F,he.y+P];if(Us(t,e,te))return v(A),!0}else if(K1(k,t,e))return v(A),!0}}o(C,"checkLabel");for(var T=s.length-1;T>=0;T--){var E=s[T];E.isNode()?x(E)||C(E):b(E)||C(E)||C(E,"source")||C(E,"target")}return l};qp.getAllInBox=function(t,e,r,n){var i=this.getCachedZSortedEles().interactive,a=[],s=Math.min(t,r),l=Math.max(t,r),u=Math.min(e,n),h=Math.max(e,n);t=s,r=l,e=u,n=h;for(var f=Hs({x1:t,y1:e,x2:r,y2:n}),d=0;d<i.length;d++){var p=i[d];if(p.isNode()){var m=p,g=m.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});aB(f,g)&&!yme(g,f)&&a.push(m)}else{var y=p,v=y._private,x=v.rscratch;if(x.startX!=null&&x.startY!=null&&!K1(f,x.startX,x.startY)||x.endX!=null&&x.endY!=null&&!K1(f,x.endX,x.endY))continue;if(x.edgeType==="bezier"||x.edgeType==="multibezier"||x.edgeType==="self"||x.edgeType==="compound"||x.edgeType==="segments"||x.edgeType==="haystack"){for(var b=v.rstyle.bezierPts||v.rstyle.linePts||v.rstyle.haystackPts,w=!0,C=0;C<b.length;C++)if(!$qe(f,b[C])){w=!1;break}w&&a.push(y)}else(x.edgeType==="haystack"||x.edgeType==="straight")&&a.push(y)}}return a};AS={};AS.calculateArrowAngles=function(t){var e=t._private.rscratch,r=e.edgeType==="haystack",n=e.edgeType==="bezier",i=e.edgeType==="multibezier",a=e.edgeType==="segments",s=e.edgeType==="compound",l=e.edgeType==="self",u,h,f,d,p,m,x,b;if(r?(f=e.haystackPts[0],d=e.haystackPts[1],p=e.haystackPts[2],m=e.haystackPts[3]):(f=e.arrowStartX,d=e.arrowStartY,p=e.arrowEndX,m=e.arrowEndY),x=e.midX,b=e.midY,a)u=f-e.segpts[0],h=d-e.segpts[1];else if(i||s||l||n){var g=e.allpts,y=oa(g[0],g[2],g[4],.1),v=oa(g[1],g[3],g[5],.1);u=f-y,h=d-v}else u=f-x,h=d-b;e.srcArrowAngle=K6(u,h);var x=e.midX,b=e.midY;if(r&&(x=(f+p)/2,b=(d+m)/2),u=p-f,h=m-d,a){var g=e.allpts;if(g.length/2%2===0){var w=g.length/2,C=w-2;u=g[w]-g[C],h=g[w+1]-g[C+1]}else if(e.isRound)u=e.midVector[1],h=-e.midVector[0];else{var w=g.length/2-1,C=w-2;u=g[w]-g[C],h=g[w+1]-g[C+1]}}else if(i||s||l){var g=e.allpts,T=e.ctrlpts,E,A,S,_;if(T.length/2%2===0){var I=g.length/2-1,D=I+2,k=D+2;E=oa(g[I],g[D],g[k],0),A=oa(g[I+1],g[D+1],g[k+1],0),S=oa(g[I],g[D],g[k],1e-4),_=oa(g[I+1],g[D+1],g[k+1],1e-4)}else{var D=g.length/2-1,I=D-2,k=D+2;E=oa(g[I],g[D],g[k],.4999),A=oa(g[I+1],g[D+1],g[k+1],.4999),S=oa(g[I],g[D],g[k],.5),_=oa(g[I+1],g[D+1],g[k+1],.5)}u=S-E,h=_-A}if(e.midtgtArrowAngle=K6(u,h),e.midDispX=u,e.midDispY=h,u*=-1,h*=-1,a){var g=e.allpts;if(g.length/2%2!==0){if(!e.isRound){var w=g.length/2-1,L=w+2;u=-(g[L]-g[w]),h=-(g[L+1]-g[w+1])}}}if(e.midsrcArrowAngle=K6(u,h),a)u=p-e.segpts[e.segpts.length-2],h=m-e.segpts[e.segpts.length-1];else if(i||s||l||n){var g=e.allpts,R=g.length,y=oa(g[R-6],g[R-4],g[R-2],.9),v=oa(g[R-5],g[R-3],g[R-1],.9);u=p-y,h=m-v}else u=p-x,h=m-b;e.tgtArrowAngle=K6(u,h)};AS.getArrowWidth=AS.getArrowHeight=function(t,e){var r=this.arrowWidthCache=this.arrowWidthCache||{},n=r[t+", "+e];return n||(n=Math.max(Math.pow(t*13.37,.9),29)*e,r[t+", "+e]=n,n)};qc={},Jo={},L0e=o(function(e,r,n){n.x=r.x-e.x,n.y=r.y-e.y,n.len=Math.sqrt(n.x*n.x+n.y*n.y),n.nx=n.x/n.len,n.ny=n.y/n.len,n.ang=Math.atan2(n.ny,n.nx)},"asVec"),CQe=o(function(e,r){r.x=e.x*-1,r.y=e.y*-1,r.nx=e.nx*-1,r.ny=e.ny*-1,r.ang=e.ang>0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),AQe=o(function(e,r,n,i,a){if(e!==D0e?L0e(r,e,qc):CQe(Jo,qc),L0e(r,n,Jo),A0e=qc.nx*Jo.ny-qc.ny*Jo.nx,_0e=qc.nx*Jo.nx-qc.ny*-Jo.ny,Ku=Math.asin(Math.max(-1,Math.min(1,A0e))),Math.abs(Ku)<1e-6){HP=r.x,WP=r.y,Bp=G1=0;return}Fp=1,gS=!1,_0e<0?Ku<0?Ku=Math.PI+Ku:(Ku=Math.PI-Ku,Fp=-1,gS=!0):Ku>0&&(Fp=-1,gS=!0),r.radius!==void 0?G1=r.radius:G1=i,Mp=Ku/2,aS=Math.min(qc.len/2,Jo.len/2),a?(Wc=Math.abs(Math.cos(Mp)*G1/Math.sin(Mp)),Wc>aS?(Wc=aS,Bp=Math.abs(Wc*Math.sin(Mp)/Math.cos(Mp))):Bp=G1):(Wc=Math.min(aS,G1),Bp=Math.abs(Wc*Math.sin(Mp)/Math.cos(Mp))),qP=r.x+Jo.nx*Wc,YP=r.y+Jo.ny*Wc,HP=qP-Jo.ny*Bp*Fp,WP=YP+Jo.nx*Bp*Fp,cge=r.x+qc.nx*Wc,uge=r.y+qc.ny*Wc,D0e=r},"calcCornerArc");o(hge,"drawPreparedRoundCorner");o(vB,"getRoundCorner");Va={};Va.findMidptPtsEtc=function(t,e){var r=e.posPts,n=e.intersectionPts,i=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(T,E,A,S){var _=S-E,I=A-T,D=Math.sqrt(I*I+_*_);return{x:-_/D,y:I/D}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=n;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=_i(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=_i(y,2),x=v[0],b=v[1],w={x1:m,y1:g,x2:x,y2:b};i=h(m,g,x,b),a=w}else un("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=n;break}}return{midptPts:a,vectorNormInverse:i}};Va.findHaystackPoints=function(t){for(var e=0;e<t.length;e++){var r=t[e],n=r._private,i=n.rscratch;if(!i.haystack){var a=Math.random()*2*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=Math.random()*2*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var s=n.source,l=n.target,u=s.position(),h=l.position(),f=s.width(),d=l.width(),p=s.height(),m=l.height(),g=r.pstyle("haystack-radius").value,y=g/2;i.haystackPts=i.allpts=[i.source.x*f*y+u.x,i.source.y*p*y+u.y,i.target.x*d*y+h.x,i.target.y*m*y+h.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(r),this.calculateArrowAngles(r),this.recalculateEdgeLabelProjections(r),this.calculateLabelAngles(r)}};Va.findSegmentsPoints=function(t,e){var r=t._private.rscratch,n=t.pstyle("segment-weights"),i=t.pstyle("segment-distances"),a=t.pstyle("segment-radii"),s=t.pstyle("radius-type"),l=Math.min(n.pfValue.length,i.pfValue.length),u=a.pfValue[a.pfValue.length-1],h=s.pfValue[s.pfValue.length-1];r.edgeType="segments",r.segpts=[],r.radii=[],r.isArcRadius=[];for(var f=0;f<l;f++){var d=n.pfValue[f],p=i.pfValue[f],m=1-d,g=d,y=this.findMidptPtsEtc(t,e),v=y.midptPts,x=y.vectorNormInverse,b={x:v.x1*m+v.x2*g,y:v.y1*m+v.y2*g};r.segpts.push(b.x+x.x*p,b.y+x.y*p),r.radii.push(a.pfValue[f]!==void 0?a.pfValue[f]:u),r.isArcRadius.push((s.pfValue[f]!==void 0?s.pfValue[f]:h)==="arc-radius")}};Va.findLoopPoints=function(t,e,r,n){var i=t._private.rscratch,a=e.dirCounts,s=e.srcPos,l=t.pstyle("control-point-distances"),u=l?l.pfValue[0]:void 0,h=t.pstyle("loop-direction").pfValue,f=t.pstyle("loop-sweep").pfValue,d=t.pstyle("control-point-step-size").pfValue;i.edgeType="self";var p=r,m=d;n&&(p=0,m=u);var g=h-Math.PI/2,y=g-f/2,v=g+f/2,x=h+"_"+f;p=a[x]===void 0?a[x]=0:++a[x],i.ctrlpts=[s.x+Math.cos(y)*1.4*m*(p/3+1),s.y+Math.sin(y)*1.4*m*(p/3+1),s.x+Math.cos(v)*1.4*m*(p/3+1),s.y+Math.sin(v)*1.4*m*(p/3+1)]};Va.findCompoundLoopPoints=function(t,e,r,n){var i=t._private.rscratch;i.edgeType="compound";var a=e.srcPos,s=e.tgtPos,l=e.srcW,u=e.srcH,h=e.tgtW,f=e.tgtH,d=t.pstyle("control-point-step-size").pfValue,p=t.pstyle("control-point-distances"),m=p?p.pfValue[0]:void 0,g=r,y=d;n&&(g=0,y=m);var v=50,x={x:a.x-l/2,y:a.y-u/2},b={x:s.x-h/2,y:s.y-f/2},w={x:Math.min(x.x,b.x),y:Math.min(x.y,b.y)},C=.5,T=Math.max(C,Math.log(l*.01)),E=Math.max(C,Math.log(h*.01));i.ctrlpts=[w.x,w.y-(1+Math.pow(v,1.12)/100)*y*(g/3+1)*T,w.x-(1+Math.pow(v,1.12)/100)*y*(g/3+1)*E,w.y]};Va.findStraightEdgePoints=function(t){t._private.rscratch.edgeType="straight"};Va.findBezierPoints=function(t,e,r,n,i){var a=t._private.rscratch,s=t.pstyle("control-point-step-size").pfValue,l=t.pstyle("control-point-distances"),u=t.pstyle("control-point-weights"),h=l&&u?Math.min(l.value.length,u.value.length):1,f=l?l.pfValue[0]:void 0,d=u.value[0],p=n;a.edgeType=p?"multibezier":"bezier",a.ctrlpts=[];for(var m=0;m<h;m++){var g=(.5-e.eles.length/2+r)*s*(i?-1:1),y=void 0,v=mme(g);p&&(f=l?l.pfValue[m]:s,d=u.value[m]),n?y=f:y=f!==void 0?v*f:void 0;var x=y!==void 0?y:g,b=1-d,w=d,C=this.findMidptPtsEtc(t,e),T=C.midptPts,E=C.vectorNormInverse,A={x:T.x1*b+T.x2*w,y:T.y1*b+T.y2*w};a.ctrlpts.push(A.x+E.x*x,A.y+E.y*x)}};Va.findTaxiPoints=function(t,e){var r=t._private.rscratch;r.edgeType="segments";var n="vertical",i="horizontal",a="leftward",s="rightward",l="downward",u="upward",h="auto",f=e.posPts,d=e.srcW,p=e.srcH,m=e.tgtW,g=e.tgtH,y=t.pstyle("edge-distances").value,v=y!=="node-position",x=t.pstyle("taxi-direction").value,b=x,w=t.pstyle("taxi-turn"),C=w.units==="%",T=w.pfValue,E=T<0,A=t.pstyle("taxi-turn-min-distance").pfValue,S=v?(d+m)/2:0,_=v?(p+g)/2:0,I=f.x2-f.x1,D=f.y2-f.y1,k=o(function(q,pe){return q>0?Math.max(q-pe,0):Math.min(q+pe,0)},"subDWH"),L=k(I,S),R=k(D,_),O=!1;b===h?x=Math.abs(L)>Math.abs(R)?i:n:b===u||b===l?(x=n,O=!0):(b===a||b===s)&&(x=i,O=!0);var M=x===n,B=M?R:L,F=M?D:I,P=mme(F),z=!1;!(O&&(C||E))&&(b===l&&F<0||b===u&&F>0||b===a&&F>0||b===s&&F<0)&&(P*=-1,B=P*Math.abs(B),z=!0);var $;if(C){var H=T<0?1+T:T;$=H*B}else{var Q=T<0?B:0;$=Q+T*P}var j=o(function(q){return Math.abs(q)<A||Math.abs(q)>=Math.abs(B)},"getIsTooClose"),ie=j($),ne=j(Math.abs(B)-Math.abs($)),le=ie||ne;if(le&&!z)if(M){var he=Math.abs(F)<=p/2,K=Math.abs(I)<=m/2;if(he){var X=(f.x1+f.x2)/2,te=f.y1,J=f.y2;r.segpts=[X,te,X,J]}else if(K){var se=(f.y1+f.y2)/2,ue=f.x1,Z=f.x2;r.segpts=[ue,se,Z,se]}else r.segpts=[f.x1,f.y2]}else{var Se=Math.abs(F)<=d/2,ce=Math.abs(D)<=g/2;if(Se){var ae=(f.y1+f.y2)/2,Oe=f.x1,ge=f.x2;r.segpts=[Oe,ae,ge,ae]}else if(ce){var ze=(f.x1+f.x2)/2,He=f.y1,$e=f.y2;r.segpts=[ze,He,ze,$e]}else r.segpts=[f.x2,f.y1]}else if(M){var Re=f.y1+$+(v?p/2*P:0),Ie=f.x1,be=f.x2;r.segpts=[Ie,Re,be,Re]}else{var W=f.x1+$+(v?d/2*P:0),de=f.y1,re=f.y2;r.segpts=[W,de,W,re]}if(r.isRound){var oe=t.pstyle("taxi-radius").value,V=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(oe),r.isArcRadius=new Array(r.segpts.length/2).fill(V)}};Va.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var n=e.srcPos,i=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!Ct(r.startX)||!Ct(r.startY),v=!Ct(r.arrowStartX)||!Ct(r.arrowStartY),x=!Ct(r.endX)||!Ct(r.endY),b=!Ct(r.arrowEndX)||!Ct(r.arrowEndY),w=3,C=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,T=w*C,E=Gp({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),A=E<T,S=Gp({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.endX,y:r.endY}),_=S<T,I=!1;if(y||v||A){I=!0;var D={x:r.ctrlpts[0]-n.x,y:r.ctrlpts[1]-n.y},k=Math.sqrt(D.x*D.x+D.y*D.y),L={x:D.x/k,y:D.y/k},R=Math.max(a,s),O={x:r.ctrlpts[0]+L.x*2*R,y:r.ctrlpts[1]+L.y*2*R},M=h.intersectLine(n.x,n.y,a,s,O.x,O.y,0,d,m);A?(r.ctrlpts[0]=r.ctrlpts[0]+L.x*(T-E),r.ctrlpts[1]=r.ctrlpts[1]+L.y*(T-E)):(r.ctrlpts[0]=M[0]+L.x*T,r.ctrlpts[1]=M[1]+L.y*T)}if(x||b||_){I=!0;var B={x:r.ctrlpts[0]-i.x,y:r.ctrlpts[1]-i.y},F=Math.sqrt(B.x*B.x+B.y*B.y),P={x:B.x/F,y:B.y/F},z=Math.max(a,s),$={x:r.ctrlpts[0]+P.x*2*z,y:r.ctrlpts[1]+P.y*2*z},H=f.intersectLine(i.x,i.y,l,u,$.x,$.y,0,p,g);_?(r.ctrlpts[0]=r.ctrlpts[0]+P.x*(T-S),r.ctrlpts[1]=r.ctrlpts[1]+P.y*(T-S)):(r.ctrlpts[0]=H[0]+P.x*T,r.ctrlpts[1]=H[1]+P.y*T)}I&&this.findEndpoints(t)}};Va.storeAllpts=function(t){var e=t._private.rscratch;if(e.edgeType==="multibezier"||e.edgeType==="bezier"||e.edgeType==="self"||e.edgeType==="compound"){e.allpts=[],e.allpts.push(e.startX,e.startY);for(var r=0;r+1<e.ctrlpts.length;r+=2)e.allpts.push(e.ctrlpts[r],e.ctrlpts[r+1]),r+3<e.ctrlpts.length&&e.allpts.push((e.ctrlpts[r]+e.ctrlpts[r+2])/2,(e.ctrlpts[r+1]+e.ctrlpts[r+3])/2);e.allpts.push(e.endX,e.endY);var n,i;e.ctrlpts.length/2%2===0?(n=e.allpts.length/2-1,e.midX=e.allpts[n],e.midY=e.allpts[n+1]):(n=e.allpts.length/2-3,i=.5,e.midX=oa(e.allpts[n],e.allpts[n+2],e.allpts[n+4],i),e.midY=oa(e.allpts[n+1],e.allpts[n+3],e.allpts[n+5],i))}else if(e.edgeType==="straight")e.allpts=[e.startX,e.startY,e.endX,e.endY],e.midX=(e.startX+e.endX+e.arrowStartX+e.arrowEndX)/4,e.midY=(e.startY+e.endY+e.arrowStartY+e.arrowEndY)/4;else if(e.edgeType==="segments"){if(e.allpts=[],e.allpts.push(e.startX,e.startY),e.allpts.push.apply(e.allpts,e.segpts),e.allpts.push(e.endX,e.endY),e.isRound){e.roundCorners=[];for(var a=2;a+3<e.allpts.length;a+=2){var s=e.radii[a/2-1],l=e.isArcRadius[a/2-1];e.roundCorners.push(vB({x:e.allpts[a-2],y:e.allpts[a-1]},{x:e.allpts[a],y:e.allpts[a+1],radius:s},{x:e.allpts[a+2],y:e.allpts[a+3]},s,l))}}if(e.segpts.length%4===0){var u=e.segpts.length/2,h=u-2;e.midX=(e.segpts[h]+e.segpts[u])/2,e.midY=(e.segpts[h+1]+e.segpts[u+1])/2}else{var f=e.segpts.length/2-1;if(!e.isRound)e.midX=e.segpts[f],e.midY=e.segpts[f+1];else{var d={x:e.segpts[f],y:e.segpts[f+1]},p=e.roundCorners[f/2],m=[d.x-p.cx,d.y-p.cy],g=p.radius/Math.sqrt(Math.pow(m[0],2)+Math.pow(m[1],2));m=m.map(function(y){return y*g}),e.midX=p.cx+m[0],e.midY=p.cy+m[1],e.midVector=m}}}};Va.checkForInvalidEdgeWarning=function(t){var e=t[0]._private.rscratch;e.nodesOverlap||Ct(e.startX)&&Ct(e.startY)&&Ct(e.endX)&&Ct(e.endY)?e.loggedErr=!1:e.loggedErr||(e.loggedErr=!0,un("Edge `"+t.id()+"` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap."))};Va.findEdgeControlPoints=function(t){var e=this;if(!(!t||t.length===0)){for(var r=this,n=r.cy,i=n.hasCompoundNodes(),a={map:new Xc,get:o(function(A){var S=this.map.get(A[0]);return S!=null?S.get(A[1]):null},"get"),set:o(function(A,S){var _=this.map.get(A[0]);_==null&&(_=new Xc,this.map.set(A[0],_)),_.set(A[1],S)},"set")},s=[],l=[],u=0;u<t.length;u++){var h=t[u],f=h._private,d=h.pstyle("curve-style").value;if(!(h.removed()||!h.takesUpSpace())){if(d==="haystack"){l.push(h);continue}var p=d==="unbundled-bezier"||d.endsWith("segments")||d==="straight"||d==="straight-triangle"||d.endsWith("taxi"),m=d==="unbundled-bezier"||d==="bezier",g=f.source,y=f.target,v=g.poolIndex(),x=y.poolIndex(),b=[v,x].sort(),w=a.get(b);w==null&&(w={eles:[]},a.set(b,w),s.push(b)),w.eles.push(h),p&&(w.hasUnbundled=!0),m&&(w.hasBezier=!0)}}for(var C=o(function(A){var S=s[A],_=a.get(S),I=void 0;if(!_.hasUnbundled){var D=_.eles[0].parallelEdges().filter(function(W){return W.isBundledBezier()});nB(_.eles),D.forEach(function(W){return _.eles.push(W)}),_.eles.sort(function(W,de){return W.poolIndex()-de.poolIndex()})}var k=_.eles[0],L=k.source(),R=k.target();if(L.poolIndex()>R.poolIndex()){var O=L;L=R,R=O}var M=_.srcPos=L.position(),B=_.tgtPos=R.position(),F=_.srcW=L.outerWidth(),P=_.srcH=L.outerHeight(),z=_.tgtW=R.outerWidth(),$=_.tgtH=R.outerHeight(),H=_.srcShape=r.nodeShapes[e.getNodeShape(L)],Q=_.tgtShape=r.nodeShapes[e.getNodeShape(R)],j=_.srcCornerRadius=L.pstyle("corner-radius").value==="auto"?"auto":L.pstyle("corner-radius").pfValue,ie=_.tgtCornerRadius=R.pstyle("corner-radius").value==="auto"?"auto":R.pstyle("corner-radius").pfValue,ne=_.tgtRs=R._private.rscratch,le=_.srcRs=L._private.rscratch;_.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var he=0;he<_.eles.length;he++){var K=_.eles[he],X=K[0]._private.rscratch,te=K.pstyle("curve-style").value,J=te==="unbundled-bezier"||te.endsWith("segments")||te.endsWith("taxi"),se=!L.same(K.source());if(!_.calculatedIntersection&&L!==R&&(_.hasBezier||_.hasUnbundled)){_.calculatedIntersection=!0;var ue=H.intersectLine(M.x,M.y,F,P,B.x,B.y,0,j,le),Z=_.srcIntn=ue,Se=Q.intersectLine(B.x,B.y,z,$,M.x,M.y,0,ie,ne),ce=_.tgtIntn=Se,ae=_.intersectionPts={x1:ue[0],x2:Se[0],y1:ue[1],y2:Se[1]},Oe=_.posPts={x1:M.x,x2:B.x,y1:M.y,y2:B.y},ge=Se[1]-ue[1],ze=Se[0]-ue[0],He=Math.sqrt(ze*ze+ge*ge),$e=_.vector={x:ze,y:ge},Re=_.vectorNorm={x:$e.x/He,y:$e.y/He},Ie={x:-Re.y,y:Re.x};_.nodesOverlap=!Ct(He)||Q.checkPoint(ue[0],ue[1],0,z,$,B.x,B.y,ie,ne)||H.checkPoint(Se[0],Se[1],0,F,P,M.x,M.y,j,le),_.vectorNormInverse=Ie,I={nodesOverlap:_.nodesOverlap,dirCounts:_.dirCounts,calculatedIntersection:!0,hasBezier:_.hasBezier,hasUnbundled:_.hasUnbundled,eles:_.eles,srcPos:B,srcRs:ne,tgtPos:M,tgtRs:le,srcW:z,srcH:$,tgtW:F,tgtH:P,srcIntn:ce,tgtIntn:Z,srcShape:Q,tgtShape:H,posPts:{x1:Oe.x2,y1:Oe.y2,x2:Oe.x1,y2:Oe.y1},intersectionPts:{x1:ae.x2,y1:ae.y2,x2:ae.x1,y2:ae.y1},vector:{x:-$e.x,y:-$e.y},vectorNorm:{x:-Re.x,y:-Re.y},vectorNormInverse:{x:-Ie.x,y:-Ie.y}}}var be=se?I:_;X.nodesOverlap=be.nodesOverlap,X.srcIntn=be.srcIntn,X.tgtIntn=be.tgtIntn,X.isRound=te.startsWith("round"),i&&(L.isParent()||L.isChild()||R.isParent()||R.isChild())&&(L.parents().anySame(R)||R.parents().anySame(L)||L.same(R)&&L.isParent())?e.findCompoundLoopPoints(K,be,he,J):L===R?e.findLoopPoints(K,be,he,J):te.endsWith("segments")?e.findSegmentsPoints(K,be):te.endsWith("taxi")?e.findTaxiPoints(K,be):te==="straight"||!J&&_.eles.length%2===1&&he===Math.floor(_.eles.length/2)?e.findStraightEdgePoints(K):e.findBezierPoints(K,be,he,J,se),e.findEndpoints(K),e.tryToCorrectInvalidPoints(K,be),e.checkForInvalidEdgeWarning(K),e.storeAllpts(K),e.storeEdgeProjections(K),e.calculateArrowAngles(K),e.recalculateEdgeLabelProjections(K),e.calculateLabelAngles(K)}},"_loop"),T=0;T<s.length;T++)C(T);this.findHaystackPoints(l)}};o(fge,"getPts");Va.getSegmentPoints=function(t){var e=t[0]._private.rscratch;this.recalculateRenderedStyle(t);var r=e.edgeType;if(r==="segments")return fge(e.segpts)};Va.getControlPoints=function(t){var e=t[0]._private.rscratch;this.recalculateRenderedStyle(t);var r=e.edgeType;if(r==="bezier"||r==="multibezier"||r==="self"||r==="compound")return fge(e.ctrlpts)};Va.getEdgeMidpoint=function(t){var e=t[0]._private.rscratch;return this.recalculateRenderedStyle(t),{x:e.midX,y:e.midY}};o4={};o4.manualEndptToPx=function(t,e){var r=this,n=t.position(),i=t.outerWidth(),a=t.outerHeight(),s=t._private.rscratch;if(e.value.length===2){var l=[e.pfValue[0],e.pfValue[1]];return e.units[0]==="%"&&(l[0]=l[0]*i),e.units[1]==="%"&&(l[1]=l[1]*a),l[0]+=n.x,l[1]+=n.y,l}else{var u=e.pfValue[0];u=-Math.PI/2+u;var h=2*Math.max(i,a),f=[n.x+Math.cos(u)*h,n.y+Math.sin(u)*h];return r.nodeShapes[this.getNodeShape(t)].intersectLine(n.x,n.y,i,a,f[0],f[1],0,t.pstyle("corner-radius").value==="auto"?"auto":t.pstyle("corner-radius").pfValue,s)}};o4.findEndpoints=function(t){var e=this,r,n=t.source()[0],i=t.target()[0],a=n.position(),s=i.position(),l=t.pstyle("target-arrow-shape").value,u=t.pstyle("source-arrow-shape").value,h=t.pstyle("target-distance-from-node").pfValue,f=t.pstyle("source-distance-from-node").pfValue,d=n._private.rscratch,p=i._private.rscratch,m=t.pstyle("curve-style").value,g=t._private.rscratch,y=g.edgeType,v=m==="taxi",x=y==="self"||y==="compound",b=y==="bezier"||y==="multibezier"||x,w=y!=="bezier",C=y==="straight"||y==="segments",T=y==="segments",E=b||w||C,A=x||v,S=t.pstyle("source-endpoint"),_=A?"outside-to-node":S.value,I=n.pstyle("corner-radius").value==="auto"?"auto":n.pstyle("corner-radius").pfValue,D=t.pstyle("target-endpoint"),k=A?"outside-to-node":D.value,L=i.pstyle("corner-radius").value==="auto"?"auto":i.pstyle("corner-radius").pfValue;g.srcManEndpt=S,g.tgtManEndpt=D;var R,O,M,B;if(b){var F=[g.ctrlpts[0],g.ctrlpts[1]],P=w?[g.ctrlpts[g.ctrlpts.length-2],g.ctrlpts[g.ctrlpts.length-1]]:F;R=P,O=F}else if(C){var z=T?g.segpts.slice(0,2):[s.x,s.y],$=T?g.segpts.slice(g.segpts.length-2):[a.x,a.y];R=$,O=z}if(k==="inside-to-node")r=[s.x,s.y];else if(D.units)r=this.manualEndptToPx(i,D);else if(k==="outside-to-line")r=g.tgtIntn;else if(k==="outside-to-node"||k==="outside-to-node-or-label"?M=R:(k==="outside-to-line"||k==="outside-to-line-or-label")&&(M=[a.x,a.y]),r=e.nodeShapes[this.getNodeShape(i)].intersectLine(s.x,s.y,i.outerWidth(),i.outerHeight(),M[0],M[1],0,L,p),k==="outside-to-node-or-label"||k==="outside-to-line-or-label"){var H=i._private.rscratch,Q=H.labelWidth,j=H.labelHeight,ie=H.labelX,ne=H.labelY,le=Q/2,he=j/2,K=i.pstyle("text-valign").value;K==="top"?ne-=he:K==="bottom"&&(ne+=he);var X=i.pstyle("text-halign").value;X==="left"?ie-=le:X==="right"&&(ie+=le);var te=Xb(M[0],M[1],[ie-le,ne-he,ie+le,ne-he,ie+le,ne+he,ie-le,ne+he],s.x,s.y);if(te.length>0){var J=a,se=Op(J,U1(r)),ue=Op(J,U1(te)),Z=se;if(ue<se&&(r=te,Z=ue),te.length>2){var Se=Op(J,{x:te[2],y:te[3]});Se<Z&&(r=[te[2],te[3]])}}}var ce=Q6(r,R,e.arrowShapes[l].spacing(t)+h),ae=Q6(r,R,e.arrowShapes[l].gap(t)+h);if(g.endX=ae[0],g.endY=ae[1],g.arrowEndX=ce[0],g.arrowEndY=ce[1],_==="inside-to-node")r=[a.x,a.y];else if(S.units)r=this.manualEndptToPx(n,S);else if(_==="outside-to-line")r=g.srcIntn;else if(_==="outside-to-node"||_==="outside-to-node-or-label"?B=O:(_==="outside-to-line"||_==="outside-to-line-or-label")&&(B=[s.x,s.y]),r=e.nodeShapes[this.getNodeShape(n)].intersectLine(a.x,a.y,n.outerWidth(),n.outerHeight(),B[0],B[1],0,I,d),_==="outside-to-node-or-label"||_==="outside-to-line-or-label"){var Oe=n._private.rscratch,ge=Oe.labelWidth,ze=Oe.labelHeight,He=Oe.labelX,$e=Oe.labelY,Re=ge/2,Ie=ze/2,be=n.pstyle("text-valign").value;be==="top"?$e-=Ie:be==="bottom"&&($e+=Ie);var W=n.pstyle("text-halign").value;W==="left"?He-=Re:W==="right"&&(He+=Re);var de=Xb(B[0],B[1],[He-Re,$e-Ie,He+Re,$e-Ie,He+Re,$e+Ie,He-Re,$e+Ie],a.x,a.y);if(de.length>0){var re=s,oe=Op(re,U1(r)),V=Op(re,U1(de)),xe=oe;if(V<oe&&(r=[de[0],de[1]],xe=V),de.length>2){var q=Op(re,{x:de[2],y:de[3]});q<xe&&(r=[de[2],de[3]])}}}var pe=Q6(r,O,e.arrowShapes[u].spacing(t)+f),ve=Q6(r,O,e.arrowShapes[u].gap(t)+f);g.startX=ve[0],g.startY=ve[1],g.arrowStartX=pe[0],g.arrowStartY=pe[1],E&&(!Ct(g.startX)||!Ct(g.startY)||!Ct(g.endX)||!Ct(g.endY)?g.badLine=!0:g.badLine=!1)};o4.getSourceEndpoint=function(t){var e=t[0]._private.rscratch;switch(this.recalculateRenderedStyle(t),e.edgeType){case"haystack":return{x:e.haystackPts[0],y:e.haystackPts[1]};default:return{x:e.arrowStartX,y:e.arrowStartY}}};o4.getTargetEndpoint=function(t){var e=t[0]._private.rscratch;switch(this.recalculateRenderedStyle(t),e.edgeType){case"haystack":return{x:e.haystackPts[2],y:e.haystackPts[3]};default:return{x:e.arrowEndX,y:e.arrowEndY}}};xB={};o(_Qe,"pushBezierPts");xB.storeEdgeProjections=function(t){var e=t._private,r=e.rscratch,n=r.edgeType;if(e.rstyle.bezierPts=null,e.rstyle.linePts=null,e.rstyle.haystackPts=null,n==="multibezier"||n==="bezier"||n==="self"||n==="compound"){e.rstyle.bezierPts=[];for(var i=0;i+5<r.allpts.length;i+=4)_Qe(this,t,r.allpts.slice(i,i+6))}else if(n==="segments")for(var a=e.rstyle.linePts=[],i=0;i+1<r.allpts.length;i+=2)a.push({x:r.allpts[i],y:r.allpts[i+1]});else if(n==="haystack"){var s=r.haystackPts;e.rstyle.haystackPts=[{x:s[0],y:s[1]},{x:s[2],y:s[3]}]}e.rstyle.arrowWidth=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth};xB.recalculateEdgeProjections=function(t){this.findEdgeControlPoints(t)};Kc={};Kc.recalculateNodeLabelProjection=function(t){var e=t.pstyle("label").strValue;if(!Af(e)){var r,n,i=t._private,a=t.width(),s=t.height(),l=t.padding(),u=t.position(),h=t.pstyle("text-halign").strValue,f=t.pstyle("text-valign").strValue,d=i.rscratch,p=i.rstyle;switch(h){case"left":r=u.x-a/2-l;break;case"right":r=u.x+a/2+l;break;default:r=u.x}switch(f){case"top":n=u.y-s/2-l;break;case"bottom":n=u.y+s/2+l;break;default:n=u.y}d.labelX=r,d.labelY=n,p.labelX=r,p.labelY=n,this.calculateLabelAngles(t),this.applyLabelDimensions(t)}};dge=o(function(e,r){var n=Math.atan(r/e);return e===0&&n<0&&(n=n*-1),n},"lineAngleFromDelta"),pge=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return dge(n,i)},"lineAngle"),DQe=o(function(e,r,n,i){var a=Yb(0,i-.001,1),s=Yb(0,i+.001,1),l=W1(e,r,n,a),u=W1(e,r,n,s);return pge(l,u)},"bezierAngle");Kc.recalculateEdgeLabelProjections=function(t){var e,r=t._private,n=r.rscratch,i=this,a={mid:t.pstyle("label").strValue,source:t.pstyle("source-label").strValue,target:t.pstyle("target-label").strValue};if(a.mid||a.source||a.target){e={x:n.midX,y:n.midY};var s=o(function(d,p,m){kf(r.rscratch,d,p,m),kf(r.rstyle,d,p,m)},"setRs");s("labelX",null,e.x),s("labelY",null,e.y);var l=dge(n.midDispX,n.midDispY);s("labelAutoAngle",null,l);var u=o(function f(){if(f.cache)return f.cache;for(var d=[],p=0;p+5<n.allpts.length;p+=4){var m={x:n.allpts[p],y:n.allpts[p+1]},g={x:n.allpts[p+2],y:n.allpts[p+3]},y={x:n.allpts[p+4],y:n.allpts[p+5]};d.push({p0:m,p1:g,p2:y,startDist:0,length:0,segments:[]})}var v=r.rstyle.bezierPts,x=i.bezierProjPcts.length;function b(A,S,_,I,D){var k=Gp(S,_),L=A.segments[A.segments.length-1],R={p0:S,p1:_,t0:I,t1:D,startDist:L?L.startDist+L.length:0,length:k};A.segments.push(R),A.length+=k}o(b,"addSegment");for(var w=0;w<d.length;w++){var C=d[w],T=d[w-1];T&&(C.startDist=T.startDist+T.length),b(C,C.p0,v[w*x],0,i.bezierProjPcts[0]);for(var E=0;E<x-1;E++)b(C,v[w*x+E],v[w*x+E+1],i.bezierProjPcts[E],i.bezierProjPcts[E+1]);b(C,v[w*x+x-1],C.p2,i.bezierProjPcts[x-1],1)}return f.cache=d},"createControlPointInfo"),h=o(function(d){var p,m=d==="source";if(a[d]){var g=t.pstyle(d+"-text-offset").pfValue;switch(n.edgeType){case"self":case"compound":case"bezier":case"multibezier":{for(var y=u(),v,x=0,b=0,w=0;w<y.length;w++){for(var C=y[m?w:y.length-1-w],T=0;T<C.segments.length;T++){var E=C.segments[m?T:C.segments.length-1-T],A=w===y.length-1&&T===C.segments.length-1;if(x=b,b+=E.length,b>=g||A){v={cp:C,segment:E};break}}if(v)break}var S=v.cp,_=v.segment,I=(g-x)/_.length,D=_.t1-_.t0,k=m?_.t0+D*I:_.t1-D*I;k=Yb(0,k,1),e=W1(S.p0,S.p1,S.p2,k),p=DQe(S.p0,S.p1,S.p2,k);break}case"straight":case"segments":case"haystack":{for(var L=0,R,O,M,B,F=n.allpts.length,P=0;P+3<F&&(m?(M={x:n.allpts[P],y:n.allpts[P+1]},B={x:n.allpts[P+2],y:n.allpts[P+3]}):(M={x:n.allpts[F-2-P],y:n.allpts[F-1-P]},B={x:n.allpts[F-4-P],y:n.allpts[F-3-P]}),R=Gp(M,B),O=L,L+=R,!(L>=g));P+=2);var z=g-O,$=z/R;$=Yb(0,$,1),e=Iqe(M,B,$),p=pge(M,B);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};Kc.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};Kc.applyPrefixedLabelDimensions=function(t,e){var r=t._private,n=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,n),a=t.pstyle("line-height").pfValue,s=t.pstyle("text-wrap").strValue,l=Gl(r.rscratch,"labelWrapCachedLines",e)||[],u=s!=="wrap"?1:Math.max(l.length,1),h=i.height/u,f=h*a,d=i.width,p=i.height+(u-1)*(a-1)*h;kf(r.rstyle,"labelWidth",e,d),kf(r.rscratch,"labelWidth",e,d),kf(r.rstyle,"labelHeight",e,p),kf(r.rscratch,"labelHeight",e,p),kf(r.rscratch,"labelLineHeight",e,f)};Kc.getLabelText=function(t,e){var r=t._private,n=e?e+"-":"",i=t.pstyle(n+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(Q,j){return j?(kf(r.rscratch,Q,e,j),j):Gl(r.rscratch,Q,e)},"rscratch");if(!i)return"";a=="none"||(a=="uppercase"?i=i.toUpperCase():a=="lowercase"&&(i=i.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=i.split(` | |
| 1952 | +`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;v<f.length;v++){var x=f[v],b=this.calculateLabelDimensions(t,x),w=b.width;if(m){var C=x.split("").join(h);x=C}if(w>d){var T=x.matchAll(y),E="",A=0,S=mo(T),_;try{for(S.s();!(_=S.n()).done;){var I=_.value,D=I[0],k=x.substring(A,I.index);A=I.index+D.length;var L=E.length===0?k:E+k+D,R=this.calculateLabelDimensions(t,L),O=R.width;O<=d?E+=k+D:(E&&g.push(E),E=k+D)}}catch(H){S.e(H)}finally{S.f()}E.match(/^[\s\u200b]+$/)||g.push(E)}else g.push(x)}s("labelWrapCachedLines",g),i=s("labelWrapCachedText",g.join(` | |
| 1953 | +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var M=t.pstyle("text-max-width").pfValue,B="",F="\u2026",P=!1;if(this.calculateLabelDimensions(t,i).width<M)return i;for(var z=0;z<i.length;z++){var $=this.calculateLabelDimensions(t,B+i[z]+F).width;if($>M)break;B+=i[z],z===i.length-1&&(P=!0)}return P||(B+=F),B}return i};Kc.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};Kc.calculateLabelDimensions=function(t,e){var r=this,n=r.cy.window(),i=n.document,a=_f(e,t._private.labelDimsKey),s=r.labelDimCache||(r.labelDimCache=[]),l=s[a];if(l!=null)return l;var u=0,h=t.pstyle("font-style").strValue,f=t.pstyle("font-size").pfValue,d=t.pstyle("font-family").strValue,p=t.pstyle("font-weight").strValue,m=this.labelCalcCanvas,g=this.labelCalcCanvasContext;if(!m){m=this.labelCalcCanvas=i.createElement("canvas"),g=this.labelCalcCanvasContext=m.getContext("2d");var y=m.style;y.position="absolute",y.left="-9999px",y.top="-9999px",y.zIndex="-1",y.visibility="hidden",y.pointerEvents="none"}g.font="".concat(h," ").concat(p," ").concat(f,"px ").concat(d);for(var v=0,x=0,b=e.split(` | |
| 1954 | +`),w=0;w<b.length;w++){var C=b[w],T=g.measureText(C),E=Math.ceil(T.width),A=f;v=Math.max(E,v),x+=A}return v+=u,x+=u,s[a]={width:v,height:x}};Kc.calculateLabelAngle=function(t,e){var r=t._private,n=r.rscratch,i=t.isEdge(),a=e?e+"-":"",s=t.pstyle(a+"text-rotation"),l=s.strValue;return l==="none"?0:i&&l==="autorotate"?n.labelAutoAngle:l==="autorotate"?0:s.pfValue};Kc.calculateLabelAngles=function(t){var e=this,r=t.isEdge(),n=t._private,i=n.rscratch;i.labelAngle=e.calculateLabelAngle(t),r&&(i.sourceLabelAngle=e.calculateLabelAngle(t,"source"),i.targetLabelAngle=e.calculateLabelAngle(t,"target"))};mge={},R0e=28,N0e=!1;mge.getNodeShape=function(t){var e=this,r=t.pstyle("shape").value;if(r==="cutrectangle"&&(t.width()<R0e||t.height()<R0e))return N0e||(un("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),N0e=!0),"rectangle";if(t.isParent())return r==="rectangle"||r==="roundrectangle"||r==="round-rectangle"||r==="cutrectangle"||r==="cut-rectangle"||r==="barrel"?r:"rectangle";if(r==="polygon"){var n=t.pstyle("shape-polygon-points").value;return e.nodeShapes.makePolygon(n).name}return r};WS={};WS.registerCalculationListeners=function(){var t=this.cy,e=t.collection(),r=this,n=o(function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u<s.length;u++){var h=s[u],f=h._private,d=f.rstyle;d.clean=!1,d.cleanConnected=!1}},"enqueue");r.binder(t).on("bounds.* dirty.*",o(function(s){var l=s.target;n(l)},"onDirtyBounds")).on("style.* background.*",o(function(s){var l=s.target;n(l,!1)},"onDirtyStyle"));var i=o(function(s){if(s){var l=r.onUpdateEleCalcsFns;e.cleanStyle();for(var u=0;u<e.length;u++){var h=e[u],f=h._private.rstyle;h.isNode()&&!f.cleanConnected&&(n(h.connectedEdges()),f.cleanConnected=!0)}if(l)for(var d=0;d<l.length;d++){var p=l[d];p(s,e)}r.recalculateRenderedStyle(e),e=t.collection()}},"updateEleCalcs");r.flushRenderedStyleQueue=function(){i(!0)},r.beforeRender(i,r.beforeRenderPriorities.eleCalcs)};WS.onUpdateEleCalcs=function(t){var e=this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[];e.push(t)};WS.recalculateRenderedStyle=function(t,e){var r=o(function(C){return C._private.rstyle.cleanConnected},"isCleanConnected"),n=[],i=[];if(!this.destroyed){e===void 0&&(e=!0);for(var a=0;a<t.length;a++){var s=t[a],l=s._private,u=l.rstyle;s.isEdge()&&(!r(s.source())||!r(s.target()))&&(u.clean=!1),!(e&&u.clean||s.removed())&&s.pstyle("display").value!=="none"&&(l.group==="nodes"?i.push(s):n.push(s),u.clean=!0)}for(var h=0;h<i.length;h++){var f=i[h],d=f._private,p=d.rstyle,m=f.position();this.recalculateNodeLabelProjection(f),p.nodeX=m.x,p.nodeY=m.y,p.nodeW=f.pstyle("width").pfValue,p.nodeH=f.pstyle("height").pfValue}this.recalculateEdgeProjections(n);for(var g=0;g<n.length;g++){var y=n[g],v=y._private,x=v.rstyle,b=v.rscratch;x.srcX=b.arrowStartX,x.srcY=b.arrowStartY,x.tgtX=b.arrowEndX,x.tgtY=b.arrowEndY,x.midX=b.midX,x.midY=b.midY,x.labelAngle=b.labelAngle,x.sourceLabelAngle=b.sourceLabelAngle,x.targetLabelAngle=b.targetLabelAngle}}};qS={};qS.updateCachedGrabbedEles=function(){var t=this.cachedZSortedEles;if(t){t.drag=[],t.nondrag=[];for(var e=[],r=0;r<t.length;r++){var n=t[r],i=n._private.rscratch;n.grabbed()&&!n.isParent()?e.push(n):i.inDragLayer?t.drag.push(n):t.nondrag.push(n)}for(var r=0;r<e.length;r++){var n=e[r];t.drag.push(n)}}};qS.invalidateCachedZSortedEles=function(){this.cachedZSortedEles=null};qS.getCachedZSortedEles=function(t){if(t||!this.cachedZSortedEles){var e=this.cy.mutableElements().toArray();e.sort(Zme),e.interactive=e.filter(function(r){return r.interactive()}),this.cachedZSortedEles=e,this.updateCachedGrabbedEles()}else e=this.cachedZSortedEles;return e};gge={};[qp,AS,Va,o4,xB,Kc,mge,WS,qS].forEach(function(t){rr(gge,t)});yge={};yge.getCachedImage=function(t,e,r){var n=this,i=n.imageCache=n.imageCache||{},a=i[t];if(a)return a.image.complete||a.image.addEventListener("load",r),a.image;a=i[t]=i[t]||{};var s=a.image=new Image;s.addEventListener("load",r),s.addEventListener("error",function(){s.error=!0});var l="data:",u=t.substring(0,l.length).toLowerCase()===l;return u||(e=e==="null"?null:e,s.crossOrigin=e),s.src=t,s};sy={};sy.registerBinding=function(t,e,r,n){var i=Array.prototype.slice.apply(arguments,[1]);if(Array.isArray(t)){for(var a=[],s=0;s<t.length;s++){var l=t[s];if(l!==void 0){var u=this.binder(l);a.push(u.on.apply(u,i))}}return a}var u=this.binder(t);return u.on.apply(u,i)};sy.binder=function(t){var e=this,r=e.cy.window(),n=t===r||t===r.document||t===r.document.body||tWe(t);if(e.supportsPassiveEvents==null){var i=!1;try{var a=Object.defineProperty({},"passive",{get:o(function(){return i=!0,!0},"get")});r.addEventListener("test",null,a)}catch{}e.supportsPassiveEvents=i}var s=o(function(u,h,f){var d=Array.prototype.slice.call(arguments);return n&&e.supportsPassiveEvents&&(d[2]={capture:f??!1,passive:!1,once:!1}),e.bindings.push({target:t,args:d}),(t.addEventListener||t.on).apply(t,d),this},"on");return{on:s,addEventListener:s,addListener:s,bind:s}};sy.nodeIsDraggable=function(t){return t&&t.isNode()&&!t.locked()&&t.grabbable()};sy.nodeIsGrabbable=function(t){return this.nodeIsDraggable(t)&&t.interactive()};sy.load=function(){var t=this,e=t.cy.window(),r=o(function(W){return W.selected()},"isSelected"),n=o(function(W){var de=W.getRootNode();if(de&&de.nodeType===11&&de.host!==void 0)return de},"getShadowRoot"),i=o(function(W,de,re,oe){W==null&&(W=t.cy);for(var V=0;V<de.length;V++){var xe=de[V];W.emit({originalEvent:re,type:xe,position:oe})}},"triggerEvents"),a=o(function(W){return W.shiftKey||W.metaKey||W.ctrlKey},"isMultSelKeyDown"),s=o(function(W,de){var re=!0;if(t.cy.hasCompoundNodes()&&W&&W.pannable())for(var oe=0;de&&oe<de.length;oe++){var W=de[oe];if(W.isNode()&&W.isParent()&&!W.pannable()){re=!1;break}}else re=!0;return re},"allowPanningPassthrough"),l=o(function(W){W[0]._private.grabbed=!0},"setGrabbed"),u=o(function(W){W[0]._private.grabbed=!1},"setFreed"),h=o(function(W){W[0]._private.rscratch.inDragLayer=!0},"setInDragLayer"),f=o(function(W){W[0]._private.rscratch.inDragLayer=!1},"setOutDragLayer"),d=o(function(W){W[0]._private.rscratch.isGrabTarget=!0},"setGrabTarget"),p=o(function(W){W[0]._private.rscratch.isGrabTarget=!1},"removeGrabTarget"),m=o(function(W,de){var re=de.addToList,oe=re.has(W);!oe&&W.grabbable()&&!W.locked()&&(re.merge(W),l(W))},"addToDragList"),g=o(function(W,de){if(W.cy().hasCompoundNodes()&&!(de.inDragLayer==null&&de.addToList==null)){var re=W.descendants();de.inDragLayer&&(re.forEach(h),re.connectedEdges().forEach(h)),de.addToList&&m(re,de)}},"addDescendantsToDrag"),y=o(function(W,de){de=de||{};var re=W.cy().hasCompoundNodes();de.inDragLayer&&(W.forEach(h),W.neighborhood().stdFilter(function(oe){return!re||oe.isEdge()}).forEach(h)),de.addToList&&W.forEach(function(oe){m(oe,de)}),g(W,de),b(W,{inDragLayer:de.inDragLayer}),t.updateCachedGrabbedEles()},"addNodesToDrag"),v=y,x=o(function(W){W&&(t.getCachedZSortedEles().forEach(function(de){u(de),f(de),p(de)}),t.updateCachedGrabbedEles())},"freeDraggedElements"),b=o(function(W,de){if(!(de.inDragLayer==null&&de.addToList==null)&&W.cy().hasCompoundNodes()){var re=W.ancestors().orphans();if(!re.same(W)){var oe=re.descendants().spawnSelf().merge(re).unmerge(W).unmerge(W.descendants()),V=oe.connectedEdges();de.inDragLayer&&(V.forEach(h),oe.forEach(h)),de.addToList&&oe.forEach(function(xe){m(xe,de)})}}},"updateAncestorsInDragLayer"),w=o(function(){document.activeElement!=null&&document.activeElement.blur!=null&&document.activeElement.blur()},"blurActiveDomElement"),C=typeof MutationObserver<"u",T=typeof ResizeObserver<"u";C?(t.removeObserver=new MutationObserver(function(be){for(var W=0;W<be.length;W++){var de=be[W],re=de.removedNodes;if(re)for(var oe=0;oe<re.length;oe++){var V=re[oe];if(V===t.container){t.destroy();break}}}}),t.container.parentNode&&t.removeObserver.observe(t.container.parentNode,{childList:!0})):t.registerBinding(t.container,"DOMNodeRemoved",function(be){t.destroy()});var E=n4(function(){t.cy.resize()},100);C&&(t.styleObserver=new MutationObserver(E),t.styleObserver.observe(t.container,{attributes:!0})),t.registerBinding(e,"resize",E),T&&(t.resizeObserver=new ResizeObserver(E),t.resizeObserver.observe(t.container));var A=o(function(W,de){for(;W!=null;)de(W),W=W.parentNode},"forEachUp"),S=o(function(){t.invalidateContainerClientCoordsCache()},"invalidateCoords");A(t.container,function(be){t.registerBinding(be,"transitionend",S),t.registerBinding(be,"animationend",S),t.registerBinding(be,"scroll",S)}),t.registerBinding(t.container,"contextmenu",function(be){be.preventDefault()});var _=o(function(){return t.selection[4]!==0},"inBoxSelection"),I=o(function(W){for(var de=t.findContainerClientCoords(),re=de[0],oe=de[1],V=de[2],xe=de[3],q=W.touches?W.touches:[W],pe=!1,ve=0;ve<q.length;ve++){var Pe=q[ve];if(re<=Pe.clientX&&Pe.clientX<=re+V&&oe<=Pe.clientY&&Pe.clientY<=oe+xe){pe=!0;break}}if(!pe)return!1;for(var _e=t.container,we=W.target,Ve=we.parentNode,De=!1;Ve;){if(Ve===_e){De=!0;break}Ve=Ve.parentNode}return!!De},"eventInContainer");t.registerBinding(t.container,"mousedown",o(function(W){if(I(W)&&!(t.hoverData.which===1&&W.which!==1)){W.preventDefault(),w(),t.hoverData.capture=!0,t.hoverData.which=W.which;var de=t.cy,re=[W.clientX,W.clientY],oe=t.projectIntoViewport(re[0],re[1]),V=t.selection,xe=t.findNearestElements(oe[0],oe[1],!0,!1),q=xe[0],pe=t.dragData.possibleDragElements;t.hoverData.mdownPos=oe,t.hoverData.mdownGPos=re;var ve=o(function(){t.hoverData.tapholdCancelled=!1,clearTimeout(t.hoverData.tapholdTimeout),t.hoverData.tapholdTimeout=setTimeout(function(){if(!t.hoverData.tapholdCancelled){var qe=t.hoverData.down;qe?qe.emit({originalEvent:W,type:"taphold",position:{x:oe[0],y:oe[1]}}):de.emit({originalEvent:W,type:"taphold",position:{x:oe[0],y:oe[1]}})}},t.tapholdDuration)},"checkForTaphold");if(W.which==3){t.hoverData.cxtStarted=!0;var Pe={originalEvent:W,type:"cxttapstart",position:{x:oe[0],y:oe[1]}};q?(q.activate(),q.emit(Pe),t.hoverData.down=q):de.emit(Pe),t.hoverData.downTime=new Date().getTime(),t.hoverData.cxtDragged=!1}else if(W.which==1){q&&q.activate();{if(q!=null&&t.nodeIsGrabbable(q)){var _e=o(function(qe){return{originalEvent:W,type:qe,position:{x:oe[0],y:oe[1]}}},"makeEvent"),we=o(function(qe){qe.emit(_e("grab"))},"triggerGrab");if(d(q),!q.selected())pe=t.dragData.possibleDragElements=de.collection(),v(q,{addToList:pe}),q.emit(_e("grabon")).emit(_e("grab"));else{pe=t.dragData.possibleDragElements=de.collection();var Ve=de.$(function(De){return De.isNode()&&De.selected()&&t.nodeIsGrabbable(De)});y(Ve,{addToList:pe}),q.emit(_e("grabon")),Ve.forEach(we)}t.redrawHint("eles",!0),t.redrawHint("drag",!0)}t.hoverData.down=q,t.hoverData.downs=xe,t.hoverData.downTime=new Date().getTime()}i(q,["mousedown","tapstart","vmousedown"],W,{x:oe[0],y:oe[1]}),q==null?(V[4]=1,t.data.bgActivePosistion={x:oe[0],y:oe[1]},t.redrawHint("select",!0),t.redraw()):q.pannable()&&(V[4]=1),ve()}V[0]=V[2]=oe[0],V[1]=V[3]=oe[1]}},"mousedownHandler"),!1);var D=n(t.container);t.registerBinding([e,D],"mousemove",o(function(W){var de=t.hoverData.capture;if(!(!de&&!I(W))){var re=!1,oe=t.cy,V=oe.zoom(),xe=[W.clientX,W.clientY],q=t.projectIntoViewport(xe[0],xe[1]),pe=t.hoverData.mdownPos,ve=t.hoverData.mdownGPos,Pe=t.selection,_e=null;!t.hoverData.draggingEles&&!t.hoverData.dragging&&!t.hoverData.selecting&&(_e=t.findNearestElement(q[0],q[1],!0,!1));var we=t.hoverData.last,Ve=t.hoverData.down,De=[q[0]-Pe[2],q[1]-Pe[3]],qe=t.dragData.possibleDragElements,at;if(ve){var Rt=xe[0]-ve[0],st=Rt*Rt,Ue=xe[1]-ve[1],ct=Ue*Ue,We=st+ct;t.hoverData.isOverThresholdDrag=at=We>=t.desktopTapThreshold2}var ot=a(W);at&&(t.hoverData.tapholdCancelled=!0);var Yt=o(function(){var Tt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];Tt.length===0?(Tt.push(De[0]),Tt.push(De[1])):(Tt[0]+=De[0],Tt[1]+=De[1])},"updateDragDelta");re=!0,i(_e,["mousemove","vmousemove","tapdrag"],W,{x:q[0],y:q[1]});var bt=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||oe.emit({originalEvent:W,type:"boxstart",position:{x:q[0],y:q[1]}}),Pe[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(at){var Mt={originalEvent:W,type:"cxtdrag",position:{x:q[0],y:q[1]}};Ve?Ve.emit(Mt):oe.emit(Mt),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||_e!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:W,type:"cxtdragout",position:{x:q[0],y:q[1]}}),t.hoverData.cxtOver=_e,_e&&_e.emit({originalEvent:W,type:"cxtdragover",position:{x:q[0],y:q[1]}}))}}else if(t.hoverData.dragging){if(re=!0,oe.panningEnabled()&&oe.userPanningEnabled()){var xt;if(t.hoverData.justStartedPan){var ut=t.hoverData.mdownPos;xt={x:(q[0]-ut[0])*V,y:(q[1]-ut[1])*V},t.hoverData.justStartedPan=!1}else xt={x:De[0]*V,y:De[1]*V};oe.panBy(xt),oe.emit("dragpan"),t.hoverData.dragged=!0}q=t.projectIntoViewport(W.clientX,W.clientY)}else if(Pe[4]==1&&(Ve==null||Ve.pannable())){if(at){if(!t.hoverData.dragging&&oe.boxSelectionEnabled()&&(ot||!oe.panningEnabled()||!oe.userPanningEnabled()))bt();else if(!t.hoverData.selecting&&oe.panningEnabled()&&oe.userPanningEnabled()){var Et=s(Ve,t.hoverData.downs);Et&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,Pe[4]=0,t.data.bgActivePosistion=U1(pe),t.redrawHint("select",!0),t.redraw())}Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate()}}else{if(Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate(),(!Ve||!Ve.grabbed())&&_e!=we&&(we&&i(we,["mouseout","tapdragout"],W,{x:q[0],y:q[1]}),_e&&i(_e,["mouseover","tapdragover"],W,{x:q[0],y:q[1]}),t.hoverData.last=_e),Ve)if(at){if(oe.boxSelectionEnabled()&&ot)Ve&&Ve.grabbed()&&(x(qe),Ve.emit("freeon"),qe.emit("free"),t.dragData.didDrag&&(Ve.emit("dragfreeon"),qe.emit("dragfree"))),bt();else if(Ve&&Ve.grabbed()&&t.nodeIsDraggable(Ve)){var ft=!t.dragData.didDrag;ft&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||y(qe,{inDragLayer:!0});var yt={x:0,y:0};if(Ct(De[0])&&Ct(De[1])&&(yt.x+=De[0],yt.y+=De[1],ft)){var nt=t.hoverData.dragDelta;nt&&Ct(nt[0])&&Ct(nt[1])&&(yt.x+=nt[0],yt.y+=nt[1])}t.hoverData.draggingEles=!0,qe.silentShift(yt).emit("position drag"),t.redrawHint("drag",!0),t.redraw()}}else Yt();re=!0}if(Pe[2]=q[0],Pe[3]=q[1],re)return W.stopPropagation&&W.stopPropagation(),W.preventDefault&&W.preventDefault(),!1}},"mousemoveHandler"),!1);var k,L,R;t.registerBinding(e,"mouseup",o(function(W){if(!(t.hoverData.which===1&&W.which!==1&&t.hoverData.capture)){var de=t.hoverData.capture;if(de){t.hoverData.capture=!1;var re=t.cy,oe=t.projectIntoViewport(W.clientX,W.clientY),V=t.selection,xe=t.findNearestElement(oe[0],oe[1],!0,!1),q=t.dragData.possibleDragElements,pe=t.hoverData.down,ve=a(W);if(t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,pe&&pe.unactivate(),t.hoverData.which===3){var Pe={originalEvent:W,type:"cxttapend",position:{x:oe[0],y:oe[1]}};if(pe?pe.emit(Pe):re.emit(Pe),!t.hoverData.cxtDragged){var _e={originalEvent:W,type:"cxttap",position:{x:oe[0],y:oe[1]}};pe?pe.emit(_e):re.emit(_e)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(i(xe,["mouseup","tapend","vmouseup"],W,{x:oe[0],y:oe[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(i(pe,["click","tap","vclick"],W,{x:oe[0],y:oe[1]}),L=!1,W.timeStamp-R<=re.multiClickDebounceTime()?(k&&clearTimeout(k),L=!0,R=null,i(pe,["dblclick","dbltap","vdblclick"],W,{x:oe[0],y:oe[1]})):(k=setTimeout(function(){L||i(pe,["oneclick","onetap","voneclick"],W,{x:oe[0],y:oe[1]})},re.multiClickDebounceTime()),R=W.timeStamp)),pe==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!a(W)&&(re.$(r).unselect(["tapunselect"]),q.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=q=re.collection()),xe==pe&&!t.dragData.didDrag&&!t.hoverData.selecting&&xe!=null&&xe._private.selectable&&(t.hoverData.dragging||(re.selectionType()==="additive"||ve?xe.selected()?xe.unselect(["tapunselect"]):xe.select(["tapselect"]):ve||(re.$(r).unmerge(xe).unselect(["tapunselect"]),xe.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var we=re.collection(t.getAllInBox(V[0],V[1],V[2],V[3]));t.redrawHint("select",!0),we.length>0&&t.redrawHint("eles",!0),re.emit({type:"boxend",originalEvent:W,position:{x:oe[0],y:oe[1]}});var Ve=o(function(at){return at.selectable()&&!at.selected()},"eleWouldBeSelected");re.selectionType()==="additive"||ve||re.$(r).unmerge(we).unselect(),we.emit("box").stdFilter(Ve).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!V[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var De=pe&&pe.grabbed();x(q),De&&(pe.emit("freeon"),q.emit("free"),t.dragData.didDrag&&(pe.emit("dragfreeon"),q.emit("dragfree")))}}V[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var O=o(function(W){if(!t.scrollingPage){var de=t.cy,re=de.zoom(),oe=de.pan(),V=t.projectIntoViewport(W.clientX,W.clientY),xe=[V[0]*re+oe.x,V[1]*re+oe.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||_()){W.preventDefault();return}if(de.panningEnabled()&&de.userPanningEnabled()&&de.zoomingEnabled()&&de.userZoomingEnabled()){W.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout(function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()},150);var q;W.deltaY!=null?q=W.deltaY/-250:W.wheelDeltaY!=null?q=W.wheelDeltaY/1e3:q=W.wheelDelta/1e3,q=q*t.wheelSensitivity;var pe=W.deltaMode===1;pe&&(q*=33);var ve=de.zoom()*Math.pow(10,q);W.type==="gesturechange"&&(ve=t.gestureStartZoom*W.scale),de.zoom({level:ve,renderedPosition:{x:xe[0],y:xe[1]}}),de.emit(W.type==="gesturechange"?"pinchzoom":"scrollzoom")}}},"wheelHandler");t.registerBinding(t.container,"wheel",O,!0),t.registerBinding(e,"scroll",o(function(W){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(W){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||W.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(be){t.hasTouchStarted||O(be)},!0),t.registerBinding(t.container,"mouseout",o(function(W){var de=t.projectIntoViewport(W.clientX,W.clientY);t.cy.emit({originalEvent:W,type:"mouseout",position:{x:de[0],y:de[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(W){var de=t.projectIntoViewport(W.clientX,W.clientY);t.cy.emit({originalEvent:W,type:"mouseover",position:{x:de[0],y:de[1]}})},"mouseOverHandler"),!1);var M,B,F,P,z,$,H,Q,j,ie,ne,le,he,K=o(function(W,de,re,oe){return Math.sqrt((re-W)*(re-W)+(oe-de)*(oe-de))},"distance"),X=o(function(W,de,re,oe){return(re-W)*(re-W)+(oe-de)*(oe-de)},"distanceSq"),te;t.registerBinding(t.container,"touchstart",te=o(function(W){if(t.hasTouchStarted=!0,!!I(W)){w(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var de=t.cy,re=t.touchData.now,oe=t.touchData.earlier;if(W.touches[0]){var V=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);re[0]=V[0],re[1]=V[1]}if(W.touches[1]){var V=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);re[2]=V[0],re[3]=V[1]}if(W.touches[2]){var V=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);re[4]=V[0],re[5]=V[1]}if(W.touches[1]){t.touchData.singleTouchMoved=!0,x(t.dragData.touchDragEles);var xe=t.findContainerClientCoords();j=xe[0],ie=xe[1],ne=xe[2],le=xe[3],M=W.touches[0].clientX-j,B=W.touches[0].clientY-ie,F=W.touches[1].clientX-j,P=W.touches[1].clientY-ie,he=0<=M&&M<=ne&&0<=F&&F<=ne&&0<=B&&B<=le&&0<=P&&P<=le;var q=de.pan(),pe=de.zoom();z=K(M,B,F,P),$=X(M,B,F,P),H=[(M+F)/2,(B+P)/2],Q=[(H[0]-q.x)/pe,(H[1]-q.y)/pe];var ve=200,Pe=ve*ve;if($<Pe&&!W.touches[2]){var _e=t.findNearestElement(re[0],re[1],!0,!0),we=t.findNearestElement(re[2],re[3],!0,!0);_e&&_e.isNode()?(_e.activate().emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start=_e):we&&we.isNode()?(we.activate().emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start=we):de.emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!0,t.touchData.cxtDragged=!1,t.data.bgActivePosistion=void 0,t.redraw();return}}if(W.touches[2])de.boxSelectionEnabled()&&W.preventDefault();else if(!W.touches[1]){if(W.touches[0]){var Ve=t.findNearestElements(re[0],re[1],!0,!0),De=Ve[0];if(De!=null&&(De.activate(),t.touchData.start=De,t.touchData.starts=Ve,t.nodeIsGrabbable(De))){var qe=t.dragData.touchDragEles=de.collection(),at=null;t.redrawHint("eles",!0),t.redrawHint("drag",!0),De.selected()?(at=de.$(function(We){return We.selected()&&t.nodeIsGrabbable(We)}),y(at,{addToList:qe})):v(De,{addToList:qe}),d(De);var Rt=o(function(ot){return{originalEvent:W,type:ot,position:{x:re[0],y:re[1]}}},"makeEvent");De.emit(Rt("grabon")),at?at.forEach(function(We){We.emit(Rt("grab"))}):De.emit(Rt("grab"))}i(De,["touchstart","tapstart","vmousedown"],W,{x:re[0],y:re[1]}),De==null&&(t.data.bgActivePosistion={x:V[0],y:V[1]},t.redrawHint("select",!0),t.redraw()),t.touchData.singleTouchMoved=!1,t.touchData.singleTouchStartTime=+new Date,clearTimeout(t.touchData.tapholdTimeout),t.touchData.tapholdTimeout=setTimeout(function(){t.touchData.singleTouchMoved===!1&&!t.pinching&&!t.touchData.selecting&&i(t.touchData.start,["taphold"],W,{x:re[0],y:re[1]})},t.tapholdDuration)}}if(W.touches.length>=1){for(var st=t.touchData.startPosition=[null,null,null,null,null,null],Ue=0;Ue<re.length;Ue++)st[Ue]=oe[Ue]=re[Ue];var ct=W.touches[0];t.touchData.startGPosition=[ct.clientX,ct.clientY]}}},"touchstartHandler"),!1);var J;t.registerBinding(e,"touchmove",J=o(function(W){var de=t.touchData.capture;if(!(!de&&!I(W))){var re=t.selection,oe=t.cy,V=t.touchData.now,xe=t.touchData.earlier,q=oe.zoom();if(W.touches[0]){var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}if(W.touches[1]){var pe=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);V[2]=pe[0],V[3]=pe[1]}if(W.touches[2]){var pe=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);V[4]=pe[0],V[5]=pe[1]}var ve=t.touchData.startGPosition,Pe;if(de&&W.touches[0]&&ve){for(var _e=[],we=0;we<V.length;we++)_e[we]=V[we]-xe[we];var Ve=W.touches[0].clientX-ve[0],De=Ve*Ve,qe=W.touches[0].clientY-ve[1],at=qe*qe,Rt=De+at;Pe=Rt>=t.touchTapThreshold2}if(de&&t.touchData.cxt){W.preventDefault();var st=W.touches[0].clientX-j,Ue=W.touches[0].clientY-ie,ct=W.touches[1].clientX-j,We=W.touches[1].clientY-ie,ot=X(st,Ue,ct,We),Yt=ot/$,bt=150,Mt=bt*bt,xt=1.5,ut=xt*xt;if(Yt>=ut||ot>=Mt){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var Et={originalEvent:W,type:"cxttapend",position:{x:V[0],y:V[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(Et),t.touchData.start=null):oe.emit(Et)}}if(de&&t.touchData.cxt){var Et={originalEvent:W,type:"cxtdrag",position:{x:V[0],y:V[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(Et):oe.emit(Et),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var ft=t.findNearestElement(V[0],V[1],!0,!0);(!t.touchData.cxtOver||ft!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:W,type:"cxtdragout",position:{x:V[0],y:V[1]}}),t.touchData.cxtOver=ft,ft&&ft.emit({originalEvent:W,type:"cxtdragover",position:{x:V[0],y:V[1]}}))}else if(de&&W.touches[2]&&oe.boxSelectionEnabled())W.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||oe.emit({originalEvent:W,type:"boxstart",position:{x:V[0],y:V[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,re[4]=1,!re||re.length===0||re[0]===void 0?(re[0]=(V[0]+V[2]+V[4])/3,re[1]=(V[1]+V[3]+V[5])/3,re[2]=(V[0]+V[2]+V[4])/3+1,re[3]=(V[1]+V[3]+V[5])/3+1):(re[2]=(V[0]+V[2]+V[4])/3,re[3]=(V[1]+V[3]+V[5])/3),t.redrawHint("select",!0),t.redraw();else if(de&&W.touches[1]&&!t.touchData.didSelect&&oe.zoomingEnabled()&&oe.panningEnabled()&&oe.userZoomingEnabled()&&oe.userPanningEnabled()){W.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var yt=t.dragData.touchDragEles;if(yt){t.redrawHint("drag",!0);for(var nt=0;nt<yt.length;nt++){var dn=yt[nt]._private;dn.grabbed=!1,dn.rscratch.inDragLayer=!1}}var Tt=t.touchData.start,st=W.touches[0].clientX-j,Ue=W.touches[0].clientY-ie,ct=W.touches[1].clientX-j,We=W.touches[1].clientY-ie,On=K(st,Ue,ct,We),tn=On/z;if(he){var _r=st-M,Dr=Ue-B,Pn=ct-F,At=We-P,Ce=(_r+Pn)/2,tt=(Dr+At)/2,St=oe.zoom(),mr=St*tn,rn=oe.pan(),gn=Q[0]*St+rn.x,Zr=Q[1]*St+rn.y,Ni={x:-mr/St*(gn-rn.x-Ce)+gn,y:-mr/St*(Zr-rn.y-tt)+Zr};if(Tt&&Tt.active()){var yt=t.dragData.touchDragEles;x(yt),t.redrawHint("drag",!0),t.redrawHint("eles",!0),Tt.unactivate().emit("freeon"),yt.emit("free"),t.dragData.didDrag&&(Tt.emit("dragfreeon"),yt.emit("dragfree"))}oe.viewport({zoom:mr,pan:Ni,cancelOnFailedZoom:!0}),oe.emit("pinchzoom"),z=On,M=st,B=Ue,F=ct,P=We,t.pinching=!0}if(W.touches[0]){var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}if(W.touches[1]){var pe=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);V[2]=pe[0],V[3]=pe[1]}if(W.touches[2]){var pe=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);V[4]=pe[0],V[5]=pe[1]}}else if(W.touches[0]&&!t.touchData.didSelect){var Zn=t.touchData.start,Sn=t.touchData.last,ft;if(!t.hoverData.draggingEles&&!t.swipePanning&&(ft=t.findNearestElement(V[0],V[1],!0,!0)),de&&Zn!=null&&W.preventDefault(),de&&Zn!=null&&t.nodeIsDraggable(Zn))if(Pe){var yt=t.dragData.touchDragEles,Hr=!t.dragData.didDrag;Hr&&y(yt,{inDragLayer:!0}),t.dragData.didDrag=!0;var et={x:0,y:0};if(Ct(_e[0])&&Ct(_e[1])&&(et.x+=_e[0],et.y+=_e[1],Hr)){t.redrawHint("eles",!0);var mt=t.touchData.dragDelta;mt&&Ct(mt[0])&&Ct(mt[1])&&(et.x+=mt[0],et.y+=mt[1])}t.hoverData.draggingEles=!0,yt.silentShift(et).emit("position drag"),t.redrawHint("drag",!0),t.touchData.startPosition[0]==xe[0]&&t.touchData.startPosition[1]==xe[1]&&t.redrawHint("eles",!0),t.redraw()}else{var mt=t.touchData.dragDelta=t.touchData.dragDelta||[];mt.length===0?(mt.push(_e[0]),mt.push(_e[1])):(mt[0]+=_e[0],mt[1]+=_e[1])}if(i(Zn||ft,["touchmove","tapdrag","vmousemove"],W,{x:V[0],y:V[1]}),(!Zn||!Zn.grabbed())&&ft!=Sn&&(Sn&&Sn.emit({originalEvent:W,type:"tapdragout",position:{x:V[0],y:V[1]}}),ft&&ft.emit({originalEvent:W,type:"tapdragover",position:{x:V[0],y:V[1]}})),t.touchData.last=ft,de)for(var nt=0;nt<V.length;nt++)V[nt]&&t.touchData.startPosition[nt]&&Pe&&(t.touchData.singleTouchMoved=!0);if(de&&(Zn==null||Zn.pannable())&&oe.panningEnabled()&&oe.userPanningEnabled()){var Kt=s(Zn,t.touchData.starts);Kt&&(W.preventDefault(),t.data.bgActivePosistion||(t.data.bgActivePosistion=U1(t.touchData.startPosition)),t.swipePanning?(oe.panBy({x:_e[0]*q,y:_e[1]*q}),oe.emit("dragpan")):Pe&&(t.swipePanning=!0,oe.panBy({x:Ve*q,y:qe*q}),oe.emit("dragpan"),Zn&&(Zn.unactivate(),t.redrawHint("select",!0),t.touchData.start=null)));var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}}for(var we=0;we<V.length;we++)xe[we]=V[we];de&&W.touches.length>0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var se;t.registerBinding(e,"touchcancel",se=o(function(W){var de=t.touchData.start;t.touchData.capture=!1,de&&de.unactivate()},"touchcancelHandler"));var ue,Z,Se,ce;if(t.registerBinding(e,"touchend",ue=o(function(W){var de=t.touchData.start,re=t.touchData.capture;if(re)W.touches.length===0&&(t.touchData.capture=!1),W.preventDefault();else return;var oe=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var V=t.cy,xe=V.zoom(),q=t.touchData.now,pe=t.touchData.earlier;if(W.touches[0]){var ve=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);q[0]=ve[0],q[1]=ve[1]}if(W.touches[1]){var ve=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);q[2]=ve[0],q[3]=ve[1]}if(W.touches[2]){var ve=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);q[4]=ve[0],q[5]=ve[1]}de&&de.unactivate();var Pe;if(t.touchData.cxt){if(Pe={originalEvent:W,type:"cxttapend",position:{x:q[0],y:q[1]}},de?de.emit(Pe):V.emit(Pe),!t.touchData.cxtDragged){var _e={originalEvent:W,type:"cxttap",position:{x:q[0],y:q[1]}};de?de.emit(_e):V.emit(_e)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!W.touches[2]&&V.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var we=V.collection(t.getAllInBox(oe[0],oe[1],oe[2],oe[3]));oe[0]=void 0,oe[1]=void 0,oe[2]=void 0,oe[3]=void 0,oe[4]=0,t.redrawHint("select",!0),V.emit({type:"boxend",originalEvent:W,position:{x:q[0],y:q[1]}});var Ve=o(function(Mt){return Mt.selectable()&&!Mt.selected()},"eleWouldBeSelected");we.emit("box").stdFilter(Ve).select().emit("boxselect"),we.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(de?.unactivate(),W.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!W.touches[1]){if(!W.touches[0]){if(!W.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var De=t.dragData.touchDragEles;if(de!=null){var qe=de._private.grabbed;x(De),t.redrawHint("drag",!0),t.redrawHint("eles",!0),qe&&(de.emit("freeon"),De.emit("free"),t.dragData.didDrag&&(de.emit("dragfreeon"),De.emit("dragfree"))),i(de,["touchend","tapend","vmouseup","tapdragout"],W,{x:q[0],y:q[1]}),de.unactivate(),t.touchData.start=null}else{var at=t.findNearestElement(q[0],q[1],!0,!0);i(at,["touchend","tapend","vmouseup","tapdragout"],W,{x:q[0],y:q[1]})}var Rt=t.touchData.startPosition[0]-q[0],st=Rt*Rt,Ue=t.touchData.startPosition[1]-q[1],ct=Ue*Ue,We=st+ct,ot=We*xe*xe;t.touchData.singleTouchMoved||(de||V.$(":selected").unselect(["tapunselect"]),i(de,["tap","vclick"],W,{x:q[0],y:q[1]}),Z=!1,W.timeStamp-ce<=V.multiClickDebounceTime()?(Se&&clearTimeout(Se),Z=!0,ce=null,i(de,["dbltap","vdblclick"],W,{x:q[0],y:q[1]})):(Se=setTimeout(function(){Z||i(de,["onetap","voneclick"],W,{x:q[0],y:q[1]})},V.multiClickDebounceTime()),ce=W.timeStamp)),de!=null&&!t.dragData.didDrag&&de._private.selectable&&ot<t.touchTapThreshold2&&!t.pinching&&(V.selectionType()==="single"?(V.$(r).unmerge(de).unselect(["tapunselect"]),de.select(["tapselect"])):de.selected()?de.unselect(["tapunselect"]):de.select(["tapselect"]),t.redrawHint("eles",!0)),t.touchData.singleTouchMoved=!0}}}for(var Yt=0;Yt<q.length;Yt++)pe[Yt]=q[Yt];t.dragData.didDrag=!1,W.touches.length===0&&(t.touchData.dragDelta=[],t.touchData.startPosition=[null,null,null,null,null,null],t.touchData.startGPosition=null,t.touchData.didSelect=!1),W.touches.length<2&&(W.touches.length===1&&(t.touchData.startGPosition=[W.touches[0].clientX,W.touches[0].clientY]),t.pinching=!1,t.redrawHint("eles",!0),t.redraw())},"touchendHandler"),!1),typeof TouchEvent>"u"){var ae=[],Oe=o(function(W){return{clientX:W.clientX,clientY:W.clientY,force:1,identifier:W.pointerId,pageX:W.pageX,pageY:W.pageY,radiusX:W.width/2,radiusY:W.height/2,screenX:W.screenX,screenY:W.screenY,target:W.target}},"makeTouch"),ge=o(function(W){return{event:W,touch:Oe(W)}},"makePointer"),ze=o(function(W){ae.push(ge(W))},"addPointer"),He=o(function(W){for(var de=0;de<ae.length;de++){var re=ae[de];if(re.event.pointerId===W.pointerId){ae.splice(de,1);return}}},"removePointer"),$e=o(function(W){var de=ae.filter(function(re){return re.event.pointerId===W.pointerId})[0];de.event=W,de.touch=Oe(W)},"updatePointer"),Re=o(function(W){W.touches=ae.map(function(de){return de.touch})},"addTouchesToEvent"),Ie=o(function(W){return W.pointerType==="mouse"||W.pointerType===4},"pointerIsMouse");t.registerBinding(t.container,"pointerdown",function(be){Ie(be)||(be.preventDefault(),ze(be),Re(be),te(be))}),t.registerBinding(t.container,"pointerup",function(be){Ie(be)||(He(be),Re(be),ue(be))}),t.registerBinding(t.container,"pointercancel",function(be){Ie(be)||(He(be),Re(be),se(be))}),t.registerBinding(t.container,"pointermove",function(be){Ie(be)||(be.preventDefault(),$e(be),Re(be),J(be))})}};eh={};eh.generatePolygon=function(t,e){return this.nodeShapes[t]={renderer:this,name:t,points:e,draw:o(function(n,i,a,s,l,u){this.renderer.nodeShapeImpl("polygon",n,i,a,s,l,this.points)},"draw"),intersectLine:o(function(n,i,a,s,l,u,h,f){return Xb(l,u,this.points,n,i,a/2,s/2,h)},"intersectLine"),checkPoint:o(function(n,i,a,s,l,u,h,f){return Zu(n,i,this.points,u,h,s,l,[0,-1],a)},"checkPoint")}};eh.generateEllipse=function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){return Yqe(a,s,e,r,n/2+l,i/2+l)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){return $p(e,r,i,a,s,l,n)},"checkPoint")}};eh.generateRoundPolygon=function(t,e){return this.nodeShapes[t]={renderer:this,name:t,points:e,getOrCreateCorners:o(function(n,i,a,s,l,u,h){if(u[h]!==void 0&&u[h+"-cx"]===n&&u[h+"-cy"]===i)return u[h];u[h]=new Array(e.length/2),u[h+"-cx"]=n,u[h+"-cy"]=i;var f=a/2,d=s/2;l=l==="auto"?bme(a,s):l;for(var p=new Array(e.length/2),m=0;m<e.length/2;m++)p[m]={x:n+f*e[m*2],y:i+d*e[m*2+1]};var g,y,v,x,b=p.length;for(y=p[b-1],g=0;g<b;g++)v=p[g%b],x=p[(g+1)%b],u[h][g]=vB(y,v,x,l),y=v,v=x;return u[h]},"getOrCreateCorners"),draw:o(function(n,i,a,s,l,u,h){this.renderer.nodeShapeImpl("round-polygon",n,i,a,s,l,this.points,this.getOrCreateCorners(i,a,s,l,u,h,"drawCorners"))},"draw"),intersectLine:o(function(n,i,a,s,l,u,h,f,d){return Xqe(l,u,this.points,n,i,a,s,h,this.getOrCreateCorners(n,i,a,s,f,d,"corners"))},"intersectLine"),checkPoint:o(function(n,i,a,s,l,u,h,f,d){return qqe(n,i,this.points,u,h,s,l,this.getOrCreateCorners(u,h,s,l,f,d,"corners"))},"checkPoint")}};eh.generateRoundRectangle=function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,this.points,s)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){return vme(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=i/2,f=a/2;u=u==="auto"?Vp(i,a):u,u=Math.min(h,f,u);var d=u*2;return!!(Zu(e,r,this.points,s,l,i,a-d,[0,-1],n)||Zu(e,r,this.points,s,l,i-d,a,[0,-1],n)||$p(e,r,d,d,s-h+u,l-f+u,n)||$p(e,r,d,d,s+h-u,l-f+u,n)||$p(e,r,d,d,s+h-u,l+f-u,n)||$p(e,r,d,d,s-h+u,l+f-u,n))},"checkPoint")}};eh.generateCutRectangle=function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:sB(),points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,null,s)},"draw"),generateCutTrianglePts:o(function(e,r,n,i,a){var s=a==="auto"?this.cornerLength:a,l=r/2,u=e/2,h=n-u,f=n+u,d=i-l,p=i+l;return{topLeft:[h,d+s,h+s,d,h+s,d+s],topRight:[f-s,d,f,d+s,f-s,d+s],bottomRight:[f,p-s,f-s,p,f-s,p-s],bottomLeft:[h+s,p,h,p-s,h+s,p-s]}},"generateCutTrianglePts"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=this.generateCutTrianglePts(n+2*l,i+2*l,e,r,u),f=[].concat.apply([],[h.topLeft.splice(0,4),h.topRight.splice(0,4),h.bottomRight.splice(0,4),h.bottomLeft.splice(0,4)]);return Xb(a,s,f,e,r)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=u==="auto"?this.cornerLength:u;if(Zu(e,r,this.points,s,l,i,a-2*h,[0,-1],n)||Zu(e,r,this.points,s,l,i-2*h,a,[0,-1],n))return!0;var f=this.generateCutTrianglePts(i,a,s,l);return Us(e,r,f.topLeft)||Us(e,r,f.topRight)||Us(e,r,f.bottomRight)||Us(e,r,f.bottomLeft)},"checkPoint")}};eh.generateBarrel=function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=.15,f=.5,d=.85,p=this.generateBarrelBezierPts(n+2*l,i+2*l,e,r),m=o(function(v){var x=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},h),b=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},f),w=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},d);return[v[0],v[1],x.x,x.y,b.x,b.y,w.x,w.y,v[4],v[5]]},"approximateBarrelCurvePts"),g=[].concat(m(p.topLeft),m(p.topRight),m(p.bottomRight),m(p.bottomLeft));return Xb(a,s,g,e,r)},"intersectLine"),generateBarrelBezierPts:o(function(e,r,n,i){var a=r/2,s=e/2,l=n-s,u=n+s,h=i-a,f=i+a,d=BP(e,r),p=d.heightOffset,m=d.widthOffset,g=d.ctrlPtOffsetPct*e,y={topLeft:[l,h+p,l+g,h,l+m,h],topRight:[u-m,h,u-g,h,u,h+p],bottomRight:[u,f-p,u-g,f,u-m,f],bottomLeft:[l+m,f,l+g,f,l,f-p]};return y.topLeft.isTop=!0,y.topRight.isTop=!0,y.bottomLeft.isBottom=!0,y.bottomRight.isBottom=!0,y},"generateBarrelBezierPts"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=BP(i,a),f=h.heightOffset,d=h.widthOffset;if(Zu(e,r,this.points,s,l,i,a-2*f,[0,-1],n)||Zu(e,r,this.points,s,l,i-2*d,a,[0,-1],n))return!0;for(var p=this.generateBarrelBezierPts(i,a,s,l),m=o(function(S,_,I){var D=I[4],k=I[2],L=I[0],R=I[5],O=I[1],M=Math.min(D,L),B=Math.max(D,L),F=Math.min(R,O),P=Math.max(R,O);if(M<=S&&S<=B&&F<=_&&_<=P){var z=jqe(D,k,L),$=Vqe(z[0],z[1],z[2],S),H=$.filter(function(Q){return 0<=Q&&Q<=1});if(H.length>0)return H[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y<g.length;y++){var v=g[y],x=p[v],b=m(e,r,x);if(b!=null){var w=x[5],C=x[3],T=x[1],E=oa(w,C,T,b);if(x.isTop&&E<=r||x.isBottom&&r<=E)return!0}}return!1},"checkPoint")}};eh.generateBottomRoundrectangle=function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,this.points,s)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=e-(n/2+l),f=r-(i/2+l),d=f,p=e+(n/2+l),m=Ef(a,s,e,r,h,f,p,d,!1);return m.length>0?m:vme(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){u=u==="auto"?Vp(i,a):u;var h=2*u;if(Zu(e,r,this.points,s,l,i,a-h,[0,-1],n)||Zu(e,r,this.points,s,l,i-h,a,[0,-1],n))return!0;var f=i/2+2*n,d=a/2+2*n,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(Us(e,r,p)||$p(e,r,h,h,s+i/2-u,l+a/2-u,n)||$p(e,r,h,h,s-i/2+u,l+a/2-u,n))},"checkPoint")}};eh.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",gs(3,0)),this.generateRoundPolygon("round-triangle",gs(3,0)),this.generatePolygon("rectangle",gs(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",gs(5,0)),this.generateRoundPolygon("round-pentagon",gs(5,0)),this.generatePolygon("hexagon",gs(6,0)),this.generateRoundPolygon("round-hexagon",gs(6,0)),this.generatePolygon("heptagon",gs(7,0)),this.generateRoundPolygon("round-heptagon",gs(7,0)),this.generatePolygon("octagon",gs(8,0)),this.generateRoundPolygon("round-octagon",gs(8,0));var n=new Array(20);{var i=PP(5,0),a=PP(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l<a.length/2;l++)a[l*2]*=s,a[l*2+1]*=s;for(var l=0;l<20/4;l++)n[l*4]=i[l*2],n[l*4+1]=i[l*2+1],n[l*4+2]=a[l*2],n[l*4+3]=a[l*2+1]}n=xme(n),this.generatePolygon("star",n),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("right-rhomboid",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);{var u=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",u),this.generateRoundPolygon("round-tag",u)}t.makePolygon=function(h){var f=h.join("$"),d="polygon-"+f,p;return(p=this[d])?p:e.generatePolygon(d,h)}};l4={};l4.timeToRender=function(){return this.redrawTotalTime/this.redrawCount};l4.redraw=function(t){t=t||dme();var e=this;e.averageRedrawTime===void 0&&(e.averageRedrawTime=0),e.lastRedrawTime===void 0&&(e.lastRedrawTime=0),e.lastDrawTime===void 0&&(e.lastDrawTime=0),e.requestedFrame=!0,e.renderOptions=t};l4.beforeRender=function(t,e){if(!this.destroyed){e==null&&ai("Priority is not optional for beforeRender");var r=this.beforeRenderCallbacks;r.push({fn:t,priority:e}),r.sort(function(n,i){return i.priority-n.priority})}};M0e=o(function(e,r,n){for(var i=e.beforeRenderCallbacks,a=0;a<i.length;a++)i[a].fn(r,n)},"beforeRenderCallbacks");l4.startRenderLoop=function(){var t=this,e=t.cy;if(!t.renderLoopStarted){t.renderLoopStarted=!0;var r=o(function n(i){if(!t.destroyed){if(!e.batching())if(t.requestedFrame&&!t.skipFrame){M0e(t,!0,i);var a=Qu();t.render(t.renderOptions);var s=t.lastDrawTime=Qu();t.averageRedrawTime===void 0&&(t.averageRedrawTime=s-a),t.redrawCount===void 0&&(t.redrawCount=0),t.redrawCount++,t.redrawTotalTime===void 0&&(t.redrawTotalTime=0);var l=s-a;t.redrawTotalTime+=l,t.lastRedrawTime=l,t.averageRedrawTime=t.averageRedrawTime/2+l/2,t.requestedFrame=!1}else M0e(t,!1,i);t.skipFrame=!1,xS(n)}},"renderFn");xS(r)}};LQe=o(function(e){this.init(e)},"BaseRenderer"),vge=LQe,oy=vge.prototype;oy.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"];oy.init=function(t){var e=this;e.options=t,e.cy=t.cy;var r=e.container=t.cy.container(),n=e.cy.window();if(n){var i=n.document,a=i.head,s="__________cytoscape_stylesheet",l="__________cytoscape_container",u=i.getElementById(s)!=null;if(r.className.indexOf(l)<0&&(r.className=(r.className||"")+" "+l),!u){var h=i.createElement("style");h.id=s,h.textContent="."+l+" { position: relative; }",a.insertBefore(h,a.children[0])}var f=n.getComputedStyle(r),d=f.getPropertyValue("position");d==="static"&&un("A Cytoscape container has style position:static and so can not use UI extensions properly")}e.selection=[void 0,void 0,void 0,void 0,0],e.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],e.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},e.dragData={possibleDragElements:[]},e.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},e.redraws=0,e.showFps=t.showFps,e.debug=t.debug,e.webgl=t.webgl,e.hideEdgesOnViewport=t.hideEdgesOnViewport,e.textureOnViewport=t.textureOnViewport,e.wheelSensitivity=t.wheelSensitivity,e.motionBlurEnabled=t.motionBlur,e.forcedPixelRatio=Ct(t.pixelRatio)?t.pixelRatio:null,e.motionBlur=t.motionBlur,e.motionBlurOpacity=t.motionBlurOpacity,e.motionBlurTransparency=1-e.motionBlurOpacity,e.motionBlurPxRatio=1,e.mbPxRBlurry=1,e.minMbLowQualFrames=4,e.fullQualityMb=!1,e.clearedForMotionBlur=[],e.desktopTapThreshold=t.desktopTapThreshold,e.desktopTapThreshold2=t.desktopTapThreshold*t.desktopTapThreshold,e.touchTapThreshold=t.touchTapThreshold,e.touchTapThreshold2=t.touchTapThreshold*t.touchTapThreshold,e.tapholdDuration=500,e.bindings=[],e.beforeRenderCallbacks=[],e.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},e.registerNodeShapes(),e.registerArrowShapes(),e.registerCalculationListeners()};oy.notify=function(t,e){var r=this,n=r.cy;if(!this.destroyed){if(t==="init"){r.load();return}if(t==="destroy"){r.destroy();return}(t==="add"||t==="remove"||t==="move"&&n.hasCompoundNodes()||t==="load"||t==="zorder"||t==="mount")&&r.invalidateCachedZSortedEles(),t==="viewport"&&r.redrawHint("select",!0),t==="gc"&&r.redrawHint("gc",!0),(t==="load"||t==="resize"||t==="mount")&&(r.invalidateContainerClientCoordsCache(),r.matchCanvasSize(r.container)),r.redrawHint("eles",!0),r.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()}};oy.destroy=function(){var t=this;t.destroyed=!0,t.cy.stopAnimationLoop();for(var e=0;e<t.bindings.length;e++){var r=t.bindings[e],n=r,i=n.target;(i.off||i.removeEventListener).apply(i,n.args)}if(t.bindings=[],t.beforeRenderCallbacks=[],t.onUpdateEleCalcsFns=[],t.removeObserver&&t.removeObserver.disconnect(),t.styleObserver&&t.styleObserver.disconnect(),t.resizeObserver&&t.resizeObserver.disconnect(),t.labelCalcDiv)try{document.body.removeChild(t.labelCalcDiv)}catch{}};oy.isHeadless=function(){return!1};[yB,gge,yge,sy,eh,l4].forEach(function(t){rr(oy,t)});DP=1e3/60,xge={setupDequeueing:o(function(e){return o(function(){var n=this,i=this.renderer;if(!n.dequeueingSetup){n.dequeueingSetup=!0;var a=n4(function(){i.redrawHint("eles",!0),i.redrawHint("drag",!0),i.redraw()},e.deqRedrawThreshold),s=o(function(h,f){var d=Qu(),p=i.averageRedrawTime,m=i.lastRedrawTime,g=[],y=i.cy.extent(),v=i.getPixelRatio();for(h||i.flushRenderedStyleQueue();;){var x=Qu(),b=x-d,w=x-f;if(m<DP){var C=DP-(h?p:0);if(w>=e.deqFastCost*C)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(w>=e.deqNoDrawCost*DP)break;var T=e.deq(n,v,y);if(T.length>0)for(var E=0;E<T.length;E++)g.push(T[E]);else break}g.length>0&&(e.onDeqd(n,g),!h&&e.shouldRedraw(n,g,v,y)&&a())},"dequeue"),l=e.priority||rB;i.beforeRender(s,l(n))}},"setupDequeueingImpl")},"setupDequeueing")},RQe=function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:bS;Mf(this,t),this.idsByKey=new Xc,this.keyForId=new Xc,this.cachesByLvl=new Xc,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),If(t,[{key:"getIdsFor",value:o(function(r){r==null&&ai("Can not get id list for null key");var n=this.idsByKey,i=this.idsByKey.get(r);return i||(i=new J1,n.set(r,i)),i},"getIdsFor")},{key:"addIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).add(n)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).delete(n)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);this.deleteIdForKey(i,n),this.addIdForKey(a,n),this.keyForId.set(n,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteIdForKey(i,n),this.keyForId.delete(n)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);return i!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var n=this.cachesByLvl,i=this.lvls,a=n.get(r);return a||(a=new Xc,n.set(r,a),i.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,n){return this.getCachesAt(n).get(r)},"getCache")},{key:"get",value:o(function(r,n){var i=this.getKey(r),a=this.getCache(i,n);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,n){var i=this.keyForId.get(r.id()),a=this.getCache(i,n);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,n){return this.getCachesAt(n).has(r)},"hasCache")},{key:"has",value:o(function(r,n){var i=this.getKey(r);return this.hasCache(i,n)},"has")},{key:"setCache",value:o(function(r,n,i){i.key=r,this.getCachesAt(n).set(r,i)},"setCache")},{key:"set",value:o(function(r,n,i){var a=this.getKey(r);this.setCache(a,n,i),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,n){this.getCachesAt(n).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,n){var i=this.getKey(r);this.deleteCache(i,n)},"_delete")},{key:"invalidateKey",value:o(function(r){var n=this;this.lvls.forEach(function(i){return n.deleteCache(r,i)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(i),a||this.getNumberOfIdsForKey(i)===0},"invalidate")}]),t}(),I0e=25,sS=50,yS=-4,XP=3,bge=7.99,NQe=8,MQe=1024,IQe=1024,OQe=1024,PQe=.2,BQe=.8,FQe=10,$Qe=.15,zQe=.1,GQe=.9,VQe=.9,UQe=100,HQe=1,H1={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},WQe=la({getKey:null,doesEleInvalidateKey:bS,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:ume,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Fb=o(function(e,r){var n=this;n.renderer=e,n.onDequeues=[];var i=WQe(r);rr(n,i),n.lookup=new RQe(i.getKey,i.doesEleInvalidateKey),n.setupDequeueing()},"ElementTextureCache"),qi=Fb.prototype;qi.reasons=H1;qi.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};qi.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},n=r[t]=r[t]||[];return n};qi.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new i4(function(r,n){return n.reqs-r.reqs});return e};qi.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};qi.getElement=function(t,e,r,n,i){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(n==null&&(n=Math.ceil(iB(l*r))),n<yS)n=yS;else if(l>=bge||n>XP)return null;var h=Math.pow(2,n),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,n);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=I0e?g=I0e:f<=sS?g=sS:g=Math.ceil(f/sS)*sS,f>OQe||d>IQe)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidth<d&&(v=x());for(var b=o(function(M){return M&&M.scaledLabelShown===p},"scalableFrom"),w=i&&i===H1.dequeue,C=i&&i===H1.highQuality,T=i&&i===H1.downscale,E,A=n+1;A<=XP;A++){var S=u.get(t,A);if(S){E=S;break}}var _=E&&E.level===n+1?E:null,I=o(function(){v.context.drawImage(_.texture.canvas,_.x,0,_.width,_.height,v.usedWidth,0,d,f)},"downscale");if(v.context.setTransform(1,0,0,1,0,0),v.context.clearRect(v.usedWidth,0,d,g),b(_))I();else if(b(E))if(C){for(var D=E.level;D>n;D--)_=a.getElement(t,e,r,D,H1.downscale);I()}else return a.queueElement(t,E.level-1),E;else{var k;if(!w&&!C&&!T)for(var L=n-1;L>=yS;L--){var R=u.get(t,L);if(R){k=R;break}}if(b(k))return a.queueElement(t,n),k;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:n,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+NQe),v.eleCaches.push(m),u.set(t,n,m),a.checkTextureFullness(v),m};qi.invalidateElements=function(t){for(var e=0;e<t.length;e++)this.invalidateElement(t[e])};qi.invalidateElement=function(t){var e=this,r=e.lookup,n=[],i=r.isInvalid(t);if(i){for(var a=yS;a<=XP;a++){var s=r.getForCachedKey(t,a);s&&n.push(s)}var l=r.invalidate(t);if(l)for(var u=0;u<n.length;u++){var h=n[u],f=h.texture;f.invalidatedWidth+=h.width,h.invalidated=!0,e.checkTextureUtility(f)}e.removeFromQueue(t)}};qi.checkTextureUtility=function(t){t.invalidatedWidth>=PQe*t.width&&this.retireTexture(t)};qi.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>BQe&&t.fullnessChecks>=FQe?Df(r,t):t.fullnessChecks++};qi.retireTexture=function(t){var e=this,r=t.height,n=e.getTextureQueue(r),i=this.lookup;Df(n,t),t.retired=!0;for(var a=t.eleCaches,s=0;s<a.length;s++){var l=a[s];i.deleteCache(l.key,l.level)}nB(a);var u=e.getRetiredTextureQueue(r);u.push(t)};qi.addTexture=function(t,e){var r=this,n=r.getTextureQueue(t),i={};return n.push(i),i.eleCaches=[],i.height=t,i.width=Math.max(MQe,e),i.usedWidth=0,i.invalidatedWidth=0,i.fullnessChecks=0,i.canvas=r.renderer.makeOffscreenCanvas(i.width,i.height),i.context=i.canvas.getContext("2d"),i};qi.recycleTexture=function(t,e){for(var r=this,n=r.getTextureQueue(t),i=r.getRetiredTextureQueue(t),a=0;a<i.length;a++){var s=i[a];if(s.width>=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,nB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Df(i,s),n.push(s),s}};qi.queueElement=function(t,e){var r=this,n=r.getElementQueue(),i=r.getElementKeyToQueue(),a=this.getKey(t),s=i[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,n.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};n.push(l),i[a]=l}};qi.dequeue=function(t){for(var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=[],a=e.lookup,s=0;s<HQe&&r.size()>0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(n[u]=null,f)continue;i.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,H1.dequeue)}return i};qi.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=this.getKey(t),a=n[i];a!=null&&(a.eles.length===1?(a.reqs=tB,r.updateItem(a),r.pop(),n[i]=null):a.eles.unmerge(t))};qi.onDequeue=function(t){this.onDequeues.push(t)};qi.offDequeue=function(t){Df(this.onDequeues,t)};qi.setupDequeueing=xge.setupDequeueing({deqRedrawThreshold:UQe,deqCost:$Qe,deqAvgCost:zQe,deqNoDrawCost:GQe,deqFastCost:VQe,deq:o(function(e,r,n){return e.dequeue(r,n)},"deq"),onDeqd:o(function(e,r){for(var n=0;n<e.onDequeues.length;n++){var i=e.onDequeues[n];i(r)}},"onDeqd"),shouldRedraw:o(function(e,r,n,i){for(var a=0;a<r.length;a++)for(var s=r[a].eles,l=0;l<s.length;l++){var u=s[l].boundingBox();if(aB(u,i))return!0}return!1},"shouldRedraw"),priority:o(function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq},"priority")});qQe=1,zb=-4,_S=2,YQe=3.99,XQe=50,jQe=50,KQe=.15,QQe=.1,ZQe=.9,JQe=.9,eZe=1,O0e=250,tZe=4e3*4e3,P0e=32767,rZe=!0,wge=o(function(e){var r=this,n=r.renderer=e,i=n.cy;r.layersByLevel={},r.firstGet=!0,r.lastInvalidationTime=Qu()-2*O0e,r.skipping=!1,r.eleTxrDeqs=i.collection(),r.scheduleElementRefinement=n4(function(){r.refineElementTextures(r.eleTxrDeqs),r.eleTxrDeqs.unmerge(r.eleTxrDeqs)},jQe),n.beforeRender(function(s,l){l-r.lastInvalidationTime<=O0e?r.skipping=!0:r.skipping=!1},n.beforeRenderPriorities.lyrTxrSkip);var a=o(function(l,u){return u.reqs-l.reqs},"qSort");r.layersQueue=new i4(a),r.setupDequeueing()},"LayeredTextureCache"),Ea=wge.prototype,B0e=0,nZe=Math.pow(2,53)-1;Ea.makeLayer=function(t,e){var r=Math.pow(2,e),n=Math.ceil(t.w*r),i=Math.ceil(t.h*r),a=this.renderer.makeOffscreenCanvas(n,i),s={id:B0e=++B0e%nZe,bb:t,level:e,width:n,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},l=s.context,u=-s.bb.x1,h=-s.bb.y1;return l.scale(r,r),l.translate(u,h),s};Ea.getLayers=function(t,e,r){var n=this,i=n.renderer,a=i.cy,s=a.zoom(),l=n.firstGet;if(n.firstGet=!1,r==null){if(r=Math.ceil(iB(s*e)),r<zb)r=zb;else if(s>=YQe||r>_S)return null}n.validateLayersElesOrdering(r,t);var u=n.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=n.levelIsComplete(r,t),m,g=o(function(){var I=o(function(O){if(n.validateLayersElesOrdering(O,t),n.levelIsComplete(O,t))return m=u[O],!0},"canUseAsTmpLvl"),D=o(function(O){if(!m)for(var M=r+O;zb<=M&&M<=_S&&!I(M);M+=O);},"checkLvls");D(1),D(-1);for(var k=f.length-1;k>=0;k--){var L=f[k];L.invalid&&Df(f,L)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=Hs();for(var I=0;I<t.length;I++)gme(d,t[I].boundingBox())}return d},"getBb"),v=o(function(I){I=I||{};var D=I.after;y();var k=Math.ceil(d.w*h),L=Math.ceil(d.h*h);if(k>P0e||L>P0e)return null;var R=k*L;if(R>tZe)return null;var O=n.makeLayer(d,r);if(D!=null){var M=f.indexOf(D)+1;f.splice(M,0,O)}else(I.insert===void 0||I.insert)&&f.unshift(O);return O},"makeLayer");if(n.skipping&&!l)return null;for(var x=null,b=t.length/qQe,w=!l,C=0;C<t.length;C++){var T=t[C],E=T._private.rscratch,A=E.imgLayerCaches=E.imgLayerCaches||{},S=A[r];if(S){x=S;continue}if((!x||x.eles.length>=b||!yme(x.bb,T.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||w?n.queueLayer(x,T):n.drawEleInLayer(x,T,r,e),x.eles.push(T),A[r]=x}return m||(w?null:f)};Ea.getEleLevelForLayerLevel=function(t,e){return t};Ea.drawEleInLayer=function(t,e,r,n){var i=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=i.getEleLevelForLayerLevel(r,n),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,rZe),a.setImgSmoothing(s,!0))};Ea.levelIsComplete=function(t,e){var r=this,n=r.layersByLevel[t];if(!n||n.length===0)return!1;for(var i=0,a=0;a<n.length;a++){var s=n[a];if(s.reqs>0||s.invalid)return!1;i+=s.eles.length}return i===e.length};Ea.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var n=0;n<r.length;n++){for(var i=r[n],a=-1,s=0;s<e.length;s++)if(i.eles[0]===e[s]){a=s;break}if(a<0){this.invalidateLayer(i);continue}for(var l=a,s=0;s<i.eles.length;s++)if(i.eles[s]!==e[l+s]){this.invalidateLayer(i);break}}};Ea.updateElementsInLayers=function(t,e){for(var r=this,n=t4(t[0]),i=0;i<t.length;i++)for(var a=n?null:t[i],s=n?t[i]:t[i].ele,l=s._private.rscratch,u=l.imgLayerCaches=l.imgLayerCaches||{},h=zb;h<=_S;h++){var f=u[h];f&&(a&&r.getEleLevelForLayerLevel(f.level)!==a.level||e(f,s,a))}};Ea.haveLayers=function(){for(var t=this,e=!1,r=zb;r<=_S;r++){var n=t.layersByLevel[r];if(n&&n.length>0){e=!0;break}}return e};Ea.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=Qu(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(n,i,a){e.invalidateLayer(n)},"invalAssocLayers")))};Ea.invalidateLayer=function(t){if(this.lastInvalidationTime=Qu(),!t.invalid){var e=t.level,r=t.eles,n=this.layersByLevel[e];Df(n,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i<r.length;i++){var a=r[i]._private.rscratch.imgLayerCaches;a&&(a[e]=null)}}};Ea.refineElementTextures=function(t){var e=this;e.updateElementsInLayers(t,o(function(n,i,a){var s=n.replacement;if(s||(s=n.replacement=e.makeLayer(n.bb,n.level),s.replaces=n,s.eles=n.eles),!s.reqs)for(var l=0;l<s.eles.length;l++)e.queueLayer(s,s.eles[l])},"refineEachEle"))};Ea.enqueueElementRefinement=function(t){this.eleTxrDeqs.merge(t),this.scheduleElementRefinement()};Ea.queueLayer=function(t,e){var r=this,n=r.layersQueue,i=t.elesQueue,a=i.hasId=i.hasId||{};if(!t.replacement){if(e){if(a[e.id()])return;i.push(e),a[e.id()]=!0}t.reqs?(t.reqs++,n.updateItem(t)):(t.reqs=1,n.push(t))}};Ea.dequeue=function(t){for(var e=this,r=e.layersQueue,n=[],i=0;i<eZe&&r.size()!==0;){var a=r.peek();if(a.replacement){r.pop();continue}if(a.replaces&&a!==a.replaces.replacement){r.pop();continue}if(a.invalid){r.pop();continue}var s=a.elesQueue.shift();s&&(e.drawEleInLayer(a,s,a.level,t),i++),n.length===0&&n.push(!0),a.elesQueue.length===0&&(r.pop(),a.reqs=0,a.replaces&&e.applyLayerReplacement(a),e.requestRedraw())}return n};Ea.applyLayerReplacement=function(t){var e=this,r=e.layersByLevel[t.level],n=t.replaces,i=r.indexOf(n);if(!(i<0||n.invalid)){r[i]=t;for(var a=0;a<t.eles.length;a++){var s=t.eles[a]._private,l=s.imgLayerCaches=s.imgLayerCaches||{};l&&(l[t.level]=t)}e.requestRedraw()}};Ea.requestRedraw=n4(function(){var t=this.renderer;t.redrawHint("eles",!0),t.redrawHint("drag",!0),t.redraw()},100);Ea.setupDequeueing=xge.setupDequeueing({deqRedrawThreshold:XQe,deqCost:KQe,deqAvgCost:QQe,deqNoDrawCost:ZQe,deqFastCost:JQe,deq:o(function(e,r){return e.dequeue(r)},"deq"),onDeqd:rB,shouldRedraw:ume,priority:o(function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq},"priority")});Tge={};o(iZe,"polygon");o(aZe,"triangleBackcurve");o($0e,"triangleTee");o(sZe,"circleTriangle");o(oZe,"circle");Tge.arrowShapeImpl=function(t){return(F0e||(F0e={polygon:iZe,"triangle-backcurve":aZe,"triangle-tee":$0e,"circle-triangle":sZe,"triangle-cross":$0e,circle:oZe}))[t]};Qc={};Qc.drawElement=function(t,e,r,n,i,a){var s=this;e.isNode()?s.drawNode(t,e,r,n,i,a):s.drawEdge(t,e,r,n,i,a)};Qc.drawElementOverlay=function(t,e){var r=this;e.isNode()?r.drawNodeOverlay(t,e):r.drawEdgeOverlay(t,e)};Qc.drawElementUnderlay=function(t,e){var r=this;e.isNode()?r.drawNodeUnderlay(t,e):r.drawEdgeUnderlay(t,e)};Qc.drawCachedElementPortion=function(t,e,r,n,i,a,s,l){var u=this,h=r.getBoundingBox(e);if(!(h.w===0||h.h===0)){var f=r.getElement(e,h,n,i,a);if(f!=null){var d=l(u,e);if(d===0)return;var p=s(u,e),m=h.x1,g=h.y1,y=h.w,v=h.h,x,b,w,C,T;if(p!==0){var E=r.getRotationPoint(e);w=E.x,C=E.y,t.translate(w,C),t.rotate(p),T=u.getImgSmoothing(t),T||u.setImgSmoothing(t,!0);var A=r.getRotationOffset(e);x=A.x,b=A.y}else x=m,b=g;var S;d!==1&&(S=t.globalAlpha,t.globalAlpha=S*d),t.drawImage(f.texture.canvas,f.x,0,f.width,f.height,x,b,y,v),d!==1&&(t.globalAlpha=S),p!==0&&(t.rotate(-p),t.translate(-w,-C),T||u.setImgSmoothing(t,!1))}else r.drawElement(t,e)}};lZe=o(function(){return 0},"getZeroRotation"),cZe=o(function(e,r){return e.getTextAngle(r,null)},"getLabelRotation"),uZe=o(function(e,r){return e.getTextAngle(r,"source")},"getSourceLabelRotation"),hZe=o(function(e,r){return e.getTextAngle(r,"target")},"getTargetLabelRotation"),fZe=o(function(e,r){return r.effectiveOpacity()},"getOpacity"),LP=o(function(e,r){return r.pstyle("text-opacity").pfValue*r.effectiveOpacity()},"getTextOpacity");Qc.drawCachedElement=function(t,e,r,n,i,a){var s=this,l=s.data,u=l.eleTxrCache,h=l.lblTxrCache,f=l.slbTxrCache,d=l.tlbTxrCache,p=e.boundingBox(),m=a===!0?u.reasons.highQuality:null;if(!(p.w===0||p.h===0||!e.visible())&&(!n||aB(p,n))){var g=e.isEdge(),y=e.element()._private.rscratch.badLine;s.drawElementUnderlay(t,e),s.drawCachedElementPortion(t,e,u,r,i,m,lZe,fZe),(!g||!y)&&s.drawCachedElementPortion(t,e,h,r,i,m,cZe,LP),g&&!y&&(s.drawCachedElementPortion(t,e,f,r,i,m,uZe,LP),s.drawCachedElementPortion(t,e,d,r,i,m,hZe,LP)),s.drawElementOverlay(t,e)}};Qc.drawElements=function(t,e){for(var r=this,n=0;n<e.length;n++){var i=e[n];r.drawElement(t,i)}};Qc.drawCachedElements=function(t,e,r,n){for(var i=this,a=0;a<e.length;a++){var s=e[a];i.drawCachedElement(t,s,r,n)}};Qc.drawCachedNodes=function(t,e,r,n){for(var i=this,a=0;a<e.length;a++){var s=e[a];s.isNode()&&i.drawCachedElement(t,s,r,n)}};Qc.drawLayeredElements=function(t,e,r,n){var i=this,a=i.data.lyrTxrCache.getLayers(e,r);if(a)for(var s=0;s<a.length;s++){var l=a[s],u=l.bb;u.w===0||u.h===0||t.drawImage(l.canvas,u.x1,u.y1,u.w,u.h)}else i.drawCachedElements(t,e,r,n)};th={};th.drawEdge=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,w=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,O),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,O),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),C=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],O);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),T=o(function(){i&&s.drawEdgeOverlay(t,e)},"drawOverlay"),E=o(function(){i&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),A=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,O)},"drawArrows"),S=o(function(){s.drawElementText(t,e,null,n)},"drawText");t.lineJoin="round";var _=e.pstyle("ghost").value==="yes";if(_){var I=e.pstyle("ghost-offset-x").pfValue,D=e.pstyle("ghost-offset-y").pfValue,k=e.pstyle("ghost-opacity").value,L=x*k;t.translate(I,D),w(L),A(L),t.translate(-I,-D)}else C();E(),w(),A(),T(),S(),r&&t.translate(u.x1,u.y1)}};kge=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n){if(n.visible()){var i=n.pstyle("".concat(e,"-opacity")).value;if(i!==0){var a=this,s=a.usePaths(),l=n._private.rscratch,u=n.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=n.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],i),a.drawEdgePath(n,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");th.drawEdgeOverlay=kge("overlay");th.drawEdgeUnderlay=kge("underlay");th.drawEdgePath=function(t,e,r,n){var i=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=i.pathCacheKey&&i.pathCacheKey===d;p?(s=e=i.pathCache,l=!0):(s=e=new Path2D,i.pathCacheKey=d,i.pathCache=s)}if(a.setLineDash)switch(n){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!i.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+3<r.length;m+=4)e.quadraticCurveTo(r[m],r[m+1],r[m+2],r[m+3]);break;case"straight":case"haystack":for(var g=2;g+1<r.length;g+=2)e.lineTo(r[g],r[g+1]);break;case"segments":if(i.isRound){var y=mo(i.roundCorners),v;try{for(y.s();!(v=y.n()).done;){var x=v.value;hge(e,x)}}catch(w){y.e(w)}finally{y.f()}e.lineTo(r[r.length-2],r[r.length-1])}else for(var b=2;b+1<r.length;b+=2)e.lineTo(r[b],r[b+1]);break}e=a,u?e.stroke(s):e.stroke(),e.setLineDash&&e.setLineDash([])};th.drawEdgeTrianglePath=function(t,e,r){e.fillStyle=e.strokeStyle;for(var n=t.pstyle("width").pfValue,i=0;i+1<r.length;i+=2){var a=[r[i+2]-r[i],r[i+3]-r[i+1]],s=Math.sqrt(a[0]*a[0]+a[1]*a[1]),l=[a[1]/s,-a[0]/s],u=[l[0]*n/2,l[1]*n/2];e.beginPath(),e.moveTo(r[i]-u[0],r[i+1]-u[1]),e.lineTo(r[i]+u[0],r[i+1]+u[1]),e.lineTo(r[i+2],r[i+3]),e.closePath(),e.fill()}};th.drawArrowheads=function(t,e,r){var n=e._private.rscratch,i=n.edgeType==="haystack";i||this.drawArrowhead(t,e,"source",n.arrowStartX,n.arrowStartY,n.srcArrowAngle,r),this.drawArrowhead(t,e,"mid-target",n.midX,n.midY,n.midtgtArrowAngle,r),this.drawArrowhead(t,e,"mid-source",n.midX,n.midY,n.midsrcArrowAngle,r),i||this.drawArrowhead(t,e,"target",n.arrowEndX,n.arrowEndY,n.tgtArrowAngle,r)};th.drawArrowhead=function(t,e,r,n,i,a,s){if(!(isNaN(n)||n==null||isNaN(i)||i==null||isNaN(a)||a==null)){var l=this,u=e.pstyle(r+"-arrow-shape").value;if(u!=="none"){var h=e.pstyle(r+"-arrow-fill").value==="hollow"?"both":"filled",f=e.pstyle(r+"-arrow-fill").value,d=e.pstyle("width").pfValue,p=e.pstyle(r+"-arrow-width"),m=p.value==="match-line"?d:p.pfValue;p.units==="%"&&(m*=d);var g=e.pstyle("opacity").value;s===void 0&&(s=g);var y=t.globalCompositeOperation;(s!==1||f==="hollow")&&(t.globalCompositeOperation="destination-out",l.colorFillStyle(t,255,255,255,1),l.colorStrokeStyle(t,255,255,255,1),l.drawArrowShape(e,t,h,d,u,m,n,i,a),t.globalCompositeOperation=y);var v=e.pstyle(r+"-arrow-color").value;l.colorFillStyle(t,v[0],v[1],v[2],s),l.colorStrokeStyle(t,v[0],v[1],v[2],s),l.drawArrowShape(e,t,f,d,u,m,n,i,a)}}};th.drawArrowShape=function(t,e,r,n,i,a,s,l,u){var h=this,f=this.usePaths()&&i!=="triangle-cross",d=!1,p,m=e,g={x:s,y:l},y=t.pstyle("arrow-scale").value,v=this.getArrowWidth(n,y),x=h.arrowShapes[i];if(f){var b=h.arrowPathCache=h.arrowPathCache||[],w=_f(i),C=b[w];C!=null?(p=e=C,d=!0):(p=e=new Path2D,b[w]=p)}d||(e.beginPath&&e.beginPath(),f?x.draw(e,1,0,{x:0,y:0},1):x.draw(e,v,u,g,n),e.closePath&&e.closePath()),e=m,f&&(e.translate(s,l),e.rotate(u),e.scale(v,v)),(r==="filled"||r==="both")&&(f?e.fill(p):e.fill()),(r==="hollow"||r==="both")&&(e.lineWidth=a/(f?v:1),e.lineJoin="miter",f?e.stroke(p):e.stroke()),f&&(e.scale(1/v,1/v),e.rotate(-u),e.translate(-s,-l))};bB={};bB.safeDrawImage=function(t,e,r,n,i,a,s,l,u,h){if(!(i<=0||a<=0||u<=0||h<=0))try{t.drawImage(e,r,n,i,a,s,l,u,h)}catch(f){un(f)}};bB.drawInscribedImage=function(t,e,r,n,i){var a=this,s=r.position(),l=s.x,u=s.y,h=r.cy().style(),f=h.getIndexedStyle.bind(h),d=f(r,"background-fit","value",n),p=f(r,"background-repeat","value",n),m=r.width(),g=r.height(),y=r.padding()*2,v=m+(f(r,"background-width-relative-to","value",n)==="inner"?0:y),x=g+(f(r,"background-height-relative-to","value",n)==="inner"?0:y),b=r._private.rscratch,w=f(r,"background-clip","value",n),C=w==="node",T=f(r,"background-image-opacity","value",n)*i,E=f(r,"background-image-smoothing","value",n),A=r.pstyle("corner-radius").value;A!=="auto"&&(A=r.pstyle("corner-radius").pfValue);var S=e.width||e.cachedW,_=e.height||e.cachedH;(S==null||_==null)&&(document.body.appendChild(e),S=e.cachedW=e.width||e.offsetWidth,_=e.cachedH=e.height||e.offsetHeight,document.body.removeChild(e));var I=S,D=_;if(f(r,"background-width","value",n)!=="auto"&&(f(r,"background-width","units",n)==="%"?I=f(r,"background-width","pfValue",n)*v:I=f(r,"background-width","pfValue",n)),f(r,"background-height","value",n)!=="auto"&&(f(r,"background-height","units",n)==="%"?D=f(r,"background-height","pfValue",n)*x:D=f(r,"background-height","pfValue",n)),!(I===0||D===0)){if(d==="contain"){var k=Math.min(v/I,x/D);I*=k,D*=k}else if(d==="cover"){var k=Math.max(v/I,x/D);I*=k,D*=k}var L=l-v/2,R=f(r,"background-position-x","units",n),O=f(r,"background-position-x","pfValue",n);R==="%"?L+=(v-I)*O:L+=O;var M=f(r,"background-offset-x","units",n),B=f(r,"background-offset-x","pfValue",n);M==="%"?L+=(v-I)*B:L+=B;var F=u-x/2,P=f(r,"background-position-y","units",n),z=f(r,"background-position-y","pfValue",n);P==="%"?F+=(x-D)*z:F+=z;var $=f(r,"background-offset-y","units",n),H=f(r,"background-offset-y","pfValue",n);$==="%"?F+=(x-D)*H:F+=H,b.pathCache&&(L-=l,F-=u,l=0,u=0);var Q=t.globalAlpha;t.globalAlpha=T;var j=a.getImgSmoothing(t),ie=!1;if(E==="no"&&j?(a.setImgSmoothing(t,!1),ie=!0):E==="yes"&&!j&&(a.setImgSmoothing(t,!0),ie=!0),p==="no-repeat")C&&(t.save(),b.pathCache?t.clip(b.pathCache):(a.nodeShapes[a.getNodeShape(r)].draw(t,l,u,v,x,A,b),t.clip())),a.safeDrawImage(t,e,0,0,S,_,L,F,I,D),C&&t.restore();else{var ne=t.createPattern(e,p);t.fillStyle=ne,a.nodeShapes[a.getNodeShape(r)].draw(t,l,u,v,x,A,b),t.translate(L,F),t.fill(),t.translate(-L,-F)}t.globalAlpha=Q,ie&&a.setImgSmoothing(t,j)}};Yp={};Yp.eleTextBiggerThanMin=function(t,e){if(!e){var r=t.cy().zoom(),n=this.getPixelRatio(),i=Math.ceil(iB(r*n));e=Math.pow(2,i)}var a=t.pstyle("font-size").pfValue*e,s=t.pstyle("min-zoomed-font-size").pfValue;return!(a<s)};Yp.drawElementText=function(t,e,r,n,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(n==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(n===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),i==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,i,m,a),r&&t.translate(g.x1,g.y1)};Yp.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r<this.fontCaches.length;r++)if(e=this.fontCaches[r],e.context===t)return e;return e={context:t},this.fontCaches.push(e),e};Yp.setupTextStyle=function(t,e){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,n=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=n+" "+s+" "+i+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(RP,"roundRect");Yp.getTextAngle=function(t,e){var r,n=t._private,i=n.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation");if(s.strValue==="autorotate"){var l=Gl(i,"labelAngle",e);r=t.isEdge()?l:0}else s.strValue==="none"?r=0:r=s.pfValue;return r};Yp.drawText=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=i?e.effectiveOpacity():1;if(!(i&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Gl(s,"labelX",r),h=Gl(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,i);var m=r?r+"-":"",g=Gl(s,"labelWidth",r),y=Gl(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),w=e.pstyle("text-halign").value,C=e.pstyle("text-valign").value;b&&(w="center",C="center"),u+=v,h+=x;var T;switch(n?T=this.getTextAngle(e,r):T=0,T!==0&&(f=u,d=h,t.translate(f,d),t.rotate(T),u=0,h=0),C){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var E=e.pstyle("text-background-opacity").value,A=e.pstyle("text-border-opacity").value,S=e.pstyle("text-border-width").pfValue,_=e.pstyle("text-background-padding").pfValue,I=e.pstyle("text-background-shape").strValue,D=I.indexOf("round")===0,k=2;if(E>0||S>0&&A>0){var L=u-_;switch(w){case"left":L-=g;break;case"center":L-=g/2;break}var R=h-y-_,O=g+2*_,M=y+2*_;if(E>0){var B=t.fillStyle,F=e.pstyle("text-background-color").value;t.fillStyle="rgba("+F[0]+","+F[1]+","+F[2]+","+E*l+")",D?RP(t,L,R,O,M,k):t.fillRect(L,R,O,M),t.fillStyle=B}if(S>0&&A>0){var P=t.strokeStyle,z=t.lineWidth,$=e.pstyle("text-border-color").value,H=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+$[0]+","+$[1]+","+$[2]+","+A*l+")",t.lineWidth=S,t.setLineDash)switch(H){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=S/4,t.setLineDash([]);break;case"solid":t.setLineDash([]);break}if(D?RP(t,L,R,O,M,k,"stroke"):t.strokeRect(L,R,O,M),H==="double"){var Q=S/2;D?RP(t,L+Q,R+Q,O-Q*2,M-Q*2,k,"stroke"):t.strokeRect(L+Q,R+Q,O-Q*2,M-Q*2)}t.setLineDash&&t.setLineDash([]),t.lineWidth=z,t.strokeStyle=P}}var j=2*e.pstyle("text-outline-width").pfValue;if(j>0&&(t.lineWidth=j),e.pstyle("text-wrap").value==="wrap"){var ie=Gl(s,"labelWrapCachedLines",r),ne=Gl(s,"labelLineHeight",r),le=g/2,he=this.getLabelJustification(e);switch(he==="auto"||(w==="left"?he==="left"?u+=-g:he==="center"&&(u+=-le):w==="center"?he==="left"?u+=-le:he==="right"&&(u+=le):w==="right"&&(he==="center"?u+=le:he==="right"&&(u+=g))),C){case"top":h-=(ie.length-1)*ne;break;case"center":case"bottom":h-=(ie.length-1)*ne;break}for(var K=0;K<ie.length;K++)j>0&&t.strokeText(ie[K],u,h),t.fillText(ie[K],u,h),h+=ne}else j>0&&t.strokeText(p,u,h),t.fillText(p,u,h);T!==0&&(t.rotate(-T),t.translate(-f,-d))}}};ly={};ly.drawNode=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!Ct(d.x)||!Ct(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),w=b.value,C=new Array(w.length),T=new Array(w.length),E=0,A=0;A<w.length;A++){var S=w[A],_=C[A]=S!=null&&S!=="none";if(_){var I=e.cy().style().getIndexedStyle(e,"background-image-crossorigin","value",A);E++,T[A]=s.getCachedImage(S,I,function(){h.backgroundTimestamp=Date.now(),e.emitAndNotify("background")})}}var D=e.pstyle("background-blacken").value,k=e.pstyle("border-width").pfValue,L=e.pstyle("background-opacity").value*p,R=e.pstyle("border-color").value,O=e.pstyle("border-style").value,M=e.pstyle("border-join").value,B=e.pstyle("border-cap").value,F=e.pstyle("border-position").value,P=e.pstyle("border-dash-pattern").pfValue,z=e.pstyle("border-dash-offset").pfValue,$=e.pstyle("border-opacity").value*p,H=e.pstyle("outline-width").pfValue,Q=e.pstyle("outline-color").value,j=e.pstyle("outline-style").value,ie=e.pstyle("outline-opacity").value*p,ne=e.pstyle("outline-offset").value,le=e.pstyle("corner-radius").value;le!=="auto"&&(le=e.pstyle("corner-radius").pfValue);var he=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:L;s.eleFillStyle(t,e,oe)},"setupShapeColor"),K=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:$;s.colorStrokeStyle(t,R[0],R[1],R[2],oe)},"setupBorderColor"),X=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ie;s.colorStrokeStyle(t,Q[0],Q[1],Q[2],oe)},"setupOutlineColor"),te=o(function(oe,V,xe,q){var pe=s.nodePathCache=s.nodePathCache||[],ve=cme(xe==="polygon"?xe+","+q.join(","):xe,""+V,""+oe,""+le),Pe=pe[ve],_e,we=!1;return Pe!=null?(_e=Pe,we=!0,f.pathCache=_e):(_e=new Path2D,pe[ve]=f.pathCache=_e),{path:_e,cacheHit:we}},"getPath"),J=e.pstyle("shape").strValue,se=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var ue=te(l,u,J,se);g=ue.path,y=ue.cacheHit}var Z=o(function(){if(!y){var oe=d;m&&(oe={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,oe.x,oe.y,l,u,le,f)}m?t.fill(g):t.fill()},"drawShape"),Se=o(function(){for(var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,xe=h.backgrounding,q=0,pe=0;pe<T.length;pe++){var ve=e.cy().style().getIndexedStyle(e,"background-image-containment","value",pe);if(V&&ve==="over"||!V&&ve==="inside"){q++;continue}C[pe]&&T[pe].complete&&!T[pe].error&&(q++,s.drawInscribedImage(t,T[pe],e,pe,oe))}h.backgrounding=q!==E,xe!==h.backgrounding&&e.updateStyle(!1)},"drawImages"),ce=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,V),oe&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,le,f)))},"drawPie"),ae=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=(D>0?D:-D)*oe,xe=D>0?0:255;D!==0&&(s.colorFillStyle(t,xe,xe,xe,V),m?t.fill(g):t.fill())},"darken"),Oe=o(function(){if(k>0){if(t.lineWidth=k,t.lineCap=B,t.lineJoin=M,t.setLineDash)switch(O){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(P),t.lineDashOffset=z;break;case"solid":case"double":t.setLineDash([]);break}if(F!=="center"){if(t.save(),t.lineWidth*=2,F==="inside")m?t.clip(g):t.clip();else{var oe=new Path2D;oe.rect(-l/2-k,-u/2-k,l+2*k,u+2*k),oe.addPath(g),t.clip(oe,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(O==="double"){t.lineWidth=k/3;var V=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=V}t.setLineDash&&t.setLineDash([])}},"drawBorder"),ge=o(function(){if(H>0){if(t.lineWidth=H,t.lineCap="butt",t.setLineDash)switch(j){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var oe=d;m&&(oe={x:0,y:0});var V=s.getNodeShape(e),xe=k;F==="inside"&&(xe=0),F==="outside"&&(xe*=2);var q=(l+xe+(H+ne))/l,pe=(u+xe+(H+ne))/u,ve=l*q,Pe=u*pe,_e=s.nodeShapes[V].points,we;if(m){var Ve=te(ve,Pe,V,_e);we=Ve.path}if(V==="ellipse")s.drawEllipsePath(we||t,oe.x,oe.y,ve,Pe);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(V)){var De=0,qe=0,at=0;V==="round-diamond"?De=(xe+ne+H)*1.4:V==="round-heptagon"?(De=(xe+ne+H)*1.075,at=-(xe/2+ne+H)/35):V==="round-hexagon"?De=(xe+ne+H)*1.12:V==="round-pentagon"?(De=(xe+ne+H)*1.13,at=-(xe/2+ne+H)/15):V==="round-tag"?(De=(xe+ne+H)*1.12,qe=(xe/2+H+ne)*.07):V==="round-triangle"&&(De=(xe+ne+H)*(Math.PI/2),at=-(xe+ne/2+H)/Math.PI),De!==0&&(q=(l+De)/l,ve=l*q,["round-hexagon","round-tag"].includes(V)||(pe=(u+De)/u,Pe=u*pe)),le=le==="auto"?bme(ve,Pe):le;for(var Rt=ve/2,st=Pe/2,Ue=le+(xe+H+ne)/2,ct=new Array(_e.length/2),We=new Array(_e.length/2),ot=0;ot<_e.length/2;ot++)ct[ot]={x:oe.x+qe+Rt*_e[ot*2],y:oe.y+at+st*_e[ot*2+1]};var Yt,bt,Mt,xt,ut=ct.length;for(bt=ct[ut-1],Yt=0;Yt<ut;Yt++)Mt=ct[Yt%ut],xt=ct[(Yt+1)%ut],We[Yt]=vB(bt,Mt,xt,Ue),bt=Mt,Mt=xt;s.drawRoundPolygonPath(we||t,oe.x+qe,oe.y+at,l*q,u*pe,_e,We)}else if(["roundrectangle","round-rectangle"].includes(V))le=le==="auto"?Vp(ve,Pe):le,s.drawRoundRectanglePath(we||t,oe.x,oe.y,ve,Pe,le+(xe+H+ne)/2);else if(["cutrectangle","cut-rectangle"].includes(V))le=le==="auto"?sB():le,s.drawCutRectanglePath(we||t,oe.x,oe.y,ve,Pe,null,le+(xe+H+ne)/4);else if(["bottomroundrectangle","bottom-round-rectangle"].includes(V))le=le==="auto"?Vp(ve,Pe):le,s.drawBottomRoundRectanglePath(we||t,oe.x,oe.y,ve,Pe,le+(xe+H+ne)/2);else if(V==="barrel")s.drawBarrelPath(we||t,oe.x,oe.y,ve,Pe);else if(V.startsWith("polygon")||["rhomboid","right-rhomboid","round-tag","tag","vee"].includes(V)){var Et=(xe+H+ne)/l;_e=wS(TS(_e,Et)),s.drawPolygonPath(we||t,oe.x,oe.y,l,u,_e)}else{var ft=(xe+H+ne)/l;_e=wS(TS(_e,-ft)),s.drawPolygonPath(we||t,oe.x,oe.y,l,u,_e)}if(m?t.stroke(we):t.stroke(),j==="double"){t.lineWidth=xe/3;var yt=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(we):t.stroke(),t.globalCompositeOperation=yt}t.setLineDash&&t.setLineDash([])}},"drawOutline"),ze=o(function(){i&&s.drawNodeOverlay(t,e,d,l,u)},"drawOverlay"),He=o(function(){i&&s.drawNodeUnderlay(t,e,d,l,u)},"drawUnderlay"),$e=o(function(){s.drawElementText(t,e,null,n)},"drawText"),Re=e.pstyle("ghost").value==="yes";if(Re){var Ie=e.pstyle("ghost-offset-x").pfValue,be=e.pstyle("ghost-offset-y").pfValue,W=e.pstyle("ghost-opacity").value,de=W*p;t.translate(Ie,be),X(),ge(),he(W*L),Z(),Se(de,!0),K(W*$),Oe(),ce(D!==0||k!==0),Se(de,!1),ae(de),t.translate(-Ie,-be)}m&&t.translate(-d.x,-d.y),He(),m&&t.translate(d.x,d.y),X(),ge(),he(),Z(),Se(p,!0),K(),Oe(),ce(D!==0||k!==0),Se(p,!1),ae(),m&&t.translate(-d.x,-d.y),$e(),ze(),r&&t.translate(x.x1,x.y1)}};Ege=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n,i,a,s){var l=this;if(n.visible()){var u=n.pstyle("".concat(e,"-padding")).pfValue,h=n.pstyle("".concat(e,"-opacity")).value,f=n.pstyle("".concat(e,"-color")).value,d=n.pstyle("".concat(e,"-shape")).value,p=n.pstyle("".concat(e,"-corner-radius")).value;if(h>0){if(i=i||n.position(),a==null||s==null){var m=n.padding();a=n.width()+2*m,s=n.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,i.x,i.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");ly.drawNodeOverlay=Ege("overlay");ly.drawNodeUnderlay=Ege("underlay");ly.hasPie=function(t){return t=t[0],t._private.hasPie};ly.drawPie=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=e.pstyle("pie-size"),s=n.x,l=n.y,u=e.width(),h=e.height(),f=Math.min(u,h)/2,d=0,p=this.usePaths();p&&(s=0,l=0),a.units==="%"?f=f*a.pfValue:a.pfValue!==void 0&&(f=a.pfValue/2);for(var m=1;m<=i.pieBackgroundN;m++){var g=e.pstyle("pie-"+m+"-background-size").value,y=e.pstyle("pie-"+m+"-background-color").value,v=e.pstyle("pie-"+m+"-background-opacity").value*r,x=g/100;x+d>1&&(x=1-d);var b=1.5*Math.PI+2*Math.PI*d,w=2*Math.PI*x,C=b+w;g===0||d>=1||d+x>1||(t.beginPath(),t.moveTo(s,l),t.arc(s,l,f,b,C),t.closePath(),this.colorFillStyle(t,y[0],y[1],y[2],v),t.fill(),d+=x)}};ys={},dZe=100;ys.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};ys.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,n,i=0;i<e.length;i++)if(n=e[i],n.context===t){r=!1;break}return r&&(n={context:t},e.push(n)),n};ys.createGradientStyleFor=function(t,e,r,n,i){var a,s=this.usePaths(),l=r.pstyle(e+"-gradient-stop-colors").value,u=r.pstyle(e+"-gradient-stop-positions").pfValue;if(n==="radial-gradient")if(r.isEdge()){var h=r.sourceEndpoint(),f=r.targetEndpoint(),d=r.midpoint(),p=Gp(h,d),m=Gp(f,d);a=t.createRadialGradient(d.x,d.y,0,d.x,d.y,Math.max(p,m))}else{var g=s?{x:0,y:0}:r.position(),y=r.paddedWidth(),v=r.paddedHeight();a=t.createRadialGradient(g.x,g.y,0,g.x,g.y,Math.max(y,v))}else if(r.isEdge()){var x=r.sourceEndpoint(),b=r.targetEndpoint();a=t.createLinearGradient(x.x,x.y,b.x,b.y)}else{var w=s?{x:0,y:0}:r.position(),C=r.paddedWidth(),T=r.paddedHeight(),E=C/2,A=T/2,S=r.pstyle("background-gradient-direction").value;switch(S){case"to-bottom":a=t.createLinearGradient(w.x,w.y-A,w.x,w.y+A);break;case"to-top":a=t.createLinearGradient(w.x,w.y+A,w.x,w.y-A);break;case"to-left":a=t.createLinearGradient(w.x+E,w.y,w.x-E,w.y);break;case"to-right":a=t.createLinearGradient(w.x-E,w.y,w.x+E,w.y);break;case"to-bottom-right":case"to-right-bottom":a=t.createLinearGradient(w.x-E,w.y-A,w.x+E,w.y+A);break;case"to-top-right":case"to-right-top":a=t.createLinearGradient(w.x-E,w.y+A,w.x+E,w.y-A);break;case"to-bottom-left":case"to-left-bottom":a=t.createLinearGradient(w.x+E,w.y-A,w.x-E,w.y+A);break;case"to-top-left":case"to-left-top":a=t.createLinearGradient(w.x+E,w.y+A,w.x-E,w.y-A);break}}if(!a)return null;for(var _=u.length===l.length,I=l.length,D=0;D<I;D++)a.addColorStop(_?u[D]:D/(I-1),"rgba("+l[D][0]+","+l[D][1]+","+l[D][2]+","+i+")");return a};ys.gradientFillStyle=function(t,e,r,n){var i=this.createGradientStyleFor(t,"background",e,r,n);if(!i)return null;t.fillStyle=i};ys.colorFillStyle=function(t,e,r,n,i){t.fillStyle="rgba("+e+","+r+","+n+","+i+")"};ys.eleFillStyle=function(t,e,r){var n=e.pstyle("background-fill").value;if(n==="linear-gradient"||n==="radial-gradient")this.gradientFillStyle(t,e,n,r);else{var i=e.pstyle("background-color").value;this.colorFillStyle(t,i[0],i[1],i[2],r)}};ys.gradientStrokeStyle=function(t,e,r,n){var i=this.createGradientStyleFor(t,"line",e,r,n);if(!i)return null;t.strokeStyle=i};ys.colorStrokeStyle=function(t,e,r,n,i){t.strokeStyle="rgba("+e+","+r+","+n+","+i+")"};ys.eleStrokeStyle=function(t,e,r){var n=e.pstyle("line-fill").value;if(n==="linear-gradient"||n==="radial-gradient")this.gradientStrokeStyle(t,e,n,r);else{var i=e.pstyle("line-color").value;this.colorStrokeStyle(t,i[0],i[1],i[2],r)}};ys.matchCanvasSize=function(t){var e=this,r=e.data,n=e.findContainerClientCoords(),i=n[2],a=n[3],s=e.getPixelRatio(),l=e.motionBlurPxRatio;(t===e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE]||t===e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG])&&(s=l);var u=i*s,h=a*s,f;if(!(u===e.canvasWidth&&h===e.canvasHeight)){e.fontCaches=null;var d=r.canvasContainer;d.style.width=i+"px",d.style.height=a+"px";for(var p=0;p<e.CANVAS_LAYERS;p++)f=r.canvases[p],f.width=u,f.height=h,f.style.width=i+"px",f.style.height=a+"px";for(var p=0;p<e.BUFFER_COUNT;p++)f=r.bufferCanvases[p],f.width=u,f.height=h,f.style.width=i+"px",f.style.height=a+"px";e.textureMult=1,s<=1&&(f=r.bufferCanvases[e.TEXTURE_BUFFER],e.textureMult=2,f.width=u*e.textureMult,f.height=h*e.textureMult),e.canvasWidth=u,e.canvasHeight=h,e.pixelRatio=s}};ys.renderTo=function(t,e,r,n){this.render({forcedContext:t,forcedZoom:e,forcedPan:r,drawAllLayers:!0,forcedPxRatio:n})};ys.clearCanvas=function(){var t=this,e=t.data;function r(n){n.clearRect(0,0,t.canvasWidth,t.canvasHeight)}o(r,"clear"),r(e.contexts[t.NODE]),r(e.contexts[t.DRAG])};ys.render=function(t){var e=this;t=t||dme();var r=e.cy,n=t.forcedContext,i=t.drawAllLayers,a=t.drawOnlyNodeLayer,s=t.forcedZoom,l=t.forcedPan,u=t.forcedPxRatio===void 0?this.getPixelRatio():t.forcedPxRatio,h=e.data,f=h.canvasNeedsRedraw,d=e.textureOnViewport&&!n&&(e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming),p=t.motionBlur!==void 0?t.motionBlur:e.motionBlur,m=e.motionBlurPxRatio,g=r.hasCompoundNodes(),y=e.hoverData.draggingEles,v=!!(e.hoverData.selecting||e.touchData.selecting);p=p&&!n&&e.motionBlurEnabled&&!v;var x=p;n||(e.prevPxRatio!==u&&(e.invalidateContainerClientCoordsCache(),e.matchCanvasSize(e.container),e.redrawHint("eles",!0),e.redrawHint("drag",!0)),e.prevPxRatio=u),!n&&e.motionBlurTimeout&&clearTimeout(e.motionBlurTimeout),p&&(e.mbFrames==null&&(e.mbFrames=0),e.mbFrames++,e.mbFrames<3&&(x=!1),e.mbFrames>e.minMbLowQualFrames&&(e.motionBlurPxRatio=e.mbPxRBlurry)),e.clearingMotionBlur&&(e.motionBlurPxRatio=1),e.textureDrawLastFrame&&!d&&(f[e.NODE]=!0,f[e.SELECT_BOX]=!0);var b=r.style(),w=r.zoom(),C=s!==void 0?s:w,T=r.pan(),E={x:T.x,y:T.y},A={zoom:w,pan:{x:T.x,y:T.y}},S=e.prevViewport,_=S===void 0||A.zoom!==S.zoom||A.pan.x!==S.pan.x||A.pan.y!==S.pan.y;!_&&!(y&&!g)&&(e.motionBlurPxRatio=1),l&&(E=l),C*=u,E.x*=u,E.y*=u;var I=e.getCachedZSortedEles();function D(K,X,te,J,se){var ue=K.globalCompositeOperation;K.globalCompositeOperation="destination-out",e.colorFillStyle(K,255,255,255,e.motionBlurTransparency),K.fillRect(X,te,J,se),K.globalCompositeOperation=ue}o(D,"mbclear");function k(K,X){var te,J,se,ue;!e.clearingMotionBlur&&(K===h.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]||K===h.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG])?(te={x:T.x*m,y:T.y*m},J=w*m,se=e.canvasWidth*m,ue=e.canvasHeight*m):(te=E,J=C,se=e.canvasWidth,ue=e.canvasHeight),K.setTransform(1,0,0,1,0,0),X==="motionBlur"?D(K,0,0,se,ue):!n&&(X===void 0||X)&&K.clearRect(0,0,se,ue),i||(K.translate(te.x,te.y),K.scale(J,J)),l&&K.translate(l.x,l.y),s&&K.scale(s,s)}if(o(k,"setContextTransform"),d||(e.textureDrawLastFrame=!1),d){if(e.textureDrawLastFrame=!0,!e.textureCache){e.textureCache={},e.textureCache.bb=r.mutableElements().boundingBox(),e.textureCache.texture=e.data.bufferCanvases[e.TEXTURE_BUFFER];var L=e.data.bufferContexts[e.TEXTURE_BUFFER];L.setTransform(1,0,0,1,0,0),L.clearRect(0,0,e.canvasWidth*e.textureMult,e.canvasHeight*e.textureMult),e.render({forcedContext:L,drawOnlyNodeLayer:!0,forcedPxRatio:u*e.textureMult});var A=e.textureCache.viewport={zoom:r.zoom(),pan:r.pan(),width:e.canvasWidth,height:e.canvasHeight};A.mpan={x:(0-A.pan.x)/A.zoom,y:(0-A.pan.y)/A.zoom}}f[e.DRAG]=!1,f[e.NODE]=!1;var R=h.contexts[e.NODE],O=e.textureCache.texture,A=e.textureCache.viewport;R.setTransform(1,0,0,1,0,0),p?D(R,0,0,A.width,A.height):R.clearRect(0,0,A.width,A.height);var M=b.core("outside-texture-bg-color").value,B=b.core("outside-texture-bg-opacity").value;e.colorFillStyle(R,M[0],M[1],M[2],B),R.fillRect(0,0,A.width,A.height);var w=r.zoom();k(R,!1),R.clearRect(A.mpan.x,A.mpan.y,A.width/A.zoom/u,A.height/A.zoom/u),R.drawImage(O,A.mpan.x,A.mpan.y,A.width/A.zoom/u,A.height/A.zoom/u)}else e.textureOnViewport&&!n&&(e.textureCache=null);var F=r.extent(),P=e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming||e.hoverData.draggingEles||e.cy.animated(),z=e.hideEdgesOnViewport&&P,$=[];if($[e.NODE]=!f[e.NODE]&&p&&!e.clearedForMotionBlur[e.NODE]||e.clearingMotionBlur,$[e.NODE]&&(e.clearedForMotionBlur[e.NODE]=!0),$[e.DRAG]=!f[e.DRAG]&&p&&!e.clearedForMotionBlur[e.DRAG]||e.clearingMotionBlur,$[e.DRAG]&&(e.clearedForMotionBlur[e.DRAG]=!0),f[e.NODE]||i||a||$[e.NODE]){var H=p&&!$[e.NODE]&&m!==1,R=n||(H?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]:h.contexts[e.NODE]),Q=p&&!H?"motionBlur":void 0;k(R,Q),z?e.drawCachedNodes(R,I.nondrag,u,F):e.drawLayeredElements(R,I.nondrag,u,F),e.debug&&e.drawDebugPoints(R,I.nondrag),!i&&!p&&(f[e.NODE]=!1)}if(!a&&(f[e.DRAG]||i||$[e.DRAG])){var H=p&&!$[e.DRAG]&&m!==1,R=n||(H?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG]:h.contexts[e.DRAG]);k(R,p&&!H?"motionBlur":void 0),z?e.drawCachedNodes(R,I.drag,u,F):e.drawCachedElements(R,I.drag,u,F),e.debug&&e.drawDebugPoints(R,I.drag),!i&&!p&&(f[e.DRAG]=!1)}if(this.drawSelectionRectangle(t,k),p&&m!==1){var j=h.contexts[e.NODE],ie=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE],ne=h.contexts[e.DRAG],le=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG],he=o(function(X,te,J){X.setTransform(1,0,0,1,0,0),J||!x?X.clearRect(0,0,e.canvasWidth,e.canvasHeight):D(X,0,0,e.canvasWidth,e.canvasHeight);var se=m;X.drawImage(te,0,0,e.canvasWidth*se,e.canvasHeight*se,0,0,e.canvasWidth,e.canvasHeight)},"drawMotionBlur");(f[e.NODE]||$[e.NODE])&&(he(j,ie,$[e.NODE]),f[e.NODE]=!1),(f[e.DRAG]||$[e.DRAG])&&(he(ne,le,$[e.DRAG]),f[e.DRAG]=!1)}e.prevViewport=A,e.clearingMotionBlur&&(e.clearingMotionBlur=!1,e.motionBlurCleared=!0,e.motionBlur=!0),p&&(e.motionBlurTimeout=setTimeout(function(){e.motionBlurTimeout=null,e.clearedForMotionBlur[e.NODE]=!1,e.clearedForMotionBlur[e.DRAG]=!1,e.motionBlur=!1,e.clearingMotionBlur=!d,e.mbFrames=0,f[e.NODE]=!0,f[e.DRAG]=!0,e.redraw()},dZe)),n||r.emit("render")};ys.drawSelectionRectangle=function(t,e){var r=this,n=r.cy,i=r.data,a=n.style(),s=t.drawOnlyNodeLayer,l=t.drawAllLayers,u=i.canvasNeedsRedraw,h=t.forcedContext;if(r.showFps||!s&&u[r.SELECT_BOX]&&!l){var f=h||i.contexts[r.SELECT_BOX];if(e(f),r.selection[4]==1&&(r.hoverData.selecting||r.touchData.selecting)){var d=r.cy.zoom(),p=a.core("selection-box-border-width").value/d;f.lineWidth=p,f.fillStyle="rgba("+a.core("selection-box-color").value[0]+","+a.core("selection-box-color").value[1]+","+a.core("selection-box-color").value[2]+","+a.core("selection-box-opacity").value+")",f.fillRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]),p>0&&(f.strokeStyle="rgba("+a.core("selection-box-border-color").value[0]+","+a.core("selection-box-border-color").value[1]+","+a.core("selection-box-border-color").value[2]+","+a.core("selection-box-opacity").value+")",f.strokeRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]))}if(i.bgActivePosistion&&!r.hoverData.selecting){var d=r.cy.zoom(),m=i.bgActivePosistion;f.fillStyle="rgba("+a.core("active-bg-color").value[0]+","+a.core("active-bg-color").value[1]+","+a.core("active-bg-color").value[2]+","+a.core("active-bg-opacity").value+")",f.beginPath(),f.arc(m.x,m.y,a.core("active-bg-size").pfValue/d,0,2*Math.PI),f.fill()}var g=r.lastRedrawTime;if(r.showFps&&g){g=Math.round(g);var y=Math.round(1e3/g),v="1 frame = "+g+" ms = "+y+" fps";if(f.setTransform(1,0,0,1,0,0),f.fillStyle="rgba(255, 0, 0, 0.75)",f.strokeStyle="rgba(255, 0, 0, 0.75)",f.font="30px Arial",!Nb){var x=f.measureText(v);Nb=x.actualBoundingBoxAscent}f.fillText(v,0,Nb);var b=60;f.strokeRect(0,Nb+10,250,20),f.fillRect(0,Nb+10,250*Math.min(y/b,1),20)}l||(u[r.SELECT_BOX]=!1)}};o(z0e,"compileShader");o(pZe,"createProgram");o(mZe,"createTextureCanvas");o(wB,"getEffectivePanZoom");o(NP,"modelToRenderedPosition");o(oS,"toWebGLColor");o(lS,"indexToVec4");o(gZe,"vec4ToIndex");o(yZe,"createTexture");o(Sge,"getTypeInfo");o(Cge,"createTypedArray");o(vZe,"createTypedArrayView");o(xZe,"createBufferStaticDraw");o(po,"createBufferDynamicDraw");o(bZe,"createPickingFrameBuffer");G0e=typeof Float32Array<"u"?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)});o(Gb,"create");o(Age,"identity");o(wZe,"multiply");o(DS,"translate");o(_ge,"rotate");o(TB,"scale");o(TZe,"projection");Vb={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},Mb=la({getKey:null,drawElement:null,getBoundingBox:null,getRotation:null,getRotationPoint:null,getRotationOffset:null,isVisible:null,getPadding:null}),kZe=function(){function t(e,r){Mf(this,t),this.debugID=Math.floor(Math.random()*1e4),this.r=e,this.atlasSize=r.webglTexSize,this.rows=r.webglTexRows,this.enableWrapping=r.enableWrapping,this.texHeight=Math.floor(this.atlasSize/this.rows),this.maxTexWidth=this.atlasSize,this.texture=null,this.canvas=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=r.createTextureCanvas(e,this.atlasSize,this.atlasSize),this.scratch=r.createTextureCanvas(e,this.atlasSize,this.texHeight,"scratch")}return o(t,"Atlas"),If(t,[{key:"getKeys",value:o(function(){return new Set(this.keyToLocation.keys())},"getKeys")},{key:"getScale",value:o(function(r){var n=r.w,i=r.h,a=this.texHeight,s=this.maxTexWidth,l=a/i,u=n*l,h=i*l;return u>s&&(l=s/n,u=n*l,h=i*l),{scale:l,texW:u,texH:h}},"getScale")},{key:"draw",value:o(function(r,n,i){var a=this,s=this.atlasSize,l=this.rows,u=this.texHeight,h=this.getScale(n),f=h.scale,d=h.texW,p=h.texH,m=[null,null],g=o(function(w,C){if(i&&C){var T=C.context,E=w.x,A=w.row,S=E,_=u*A;T.save(),T.translate(S,_),T.scale(f,f),i(T,n),T.restore()}},"drawAt"),y=o(function(){g(a.freePointer,a.canvas),m[0]={x:a.freePointer.x,y:a.freePointer.row*u,w:d,h:p},m[1]={x:a.freePointer.x+d,y:a.freePointer.row*u,w:0,h:p},a.freePointer.x+=d,a.freePointer.x==s&&(a.freePointer.x=0,a.freePointer.row++)},"drawNormal"),v=o(function(){var w=a.scratch,C=a.canvas;w.clear(),g({x:0,row:0},w);var T=s-a.freePointer.x,E=d-T,A=u;{var S=a.freePointer.x,_=a.freePointer.row*u,I=T;C.context.drawImage(w,0,0,I,A,S,_,I,A),m[0]={x:S,y:_,w:I,h:p}}{var D=T,k=(a.freePointer.row+1)*u,L=E;C&&C.context.drawImage(w,D,0,L,A,0,k,L,A),m[1]={x:0,y:k,w:L,h:p}}a.freePointer.x=E,a.freePointer.row++},"drawWrapped"),x=o(function(){a.freePointer.x=0,a.freePointer.row++},"moveToStartOfNextRow");if(this.freePointer.x+d<=s)y();else{if(this.freePointer.row>=l-1)return!1;this.freePointer.x===s?(x(),y()):this.enableWrapping?v():(x(),y())}return this.keyToLocation.set(r,m),this.needsBuffer=!0,m},"draw")},{key:"getOffsets",value:o(function(r){return this.keyToLocation.get(r)},"getOffsets")},{key:"isEmpty",value:o(function(){return this.freePointer.x===0&&this.freePointer.row===0},"isEmpty")},{key:"canFit",value:o(function(r){var n=this.atlasSize,i=this.rows,a=this.getScale(r),s=a.texW;return this.freePointer.x+s>n?this.freePointer.row<i-1:!0},"canFit")},{key:"bufferIfNeeded",value:o(function(r){this.texture||(this.texture=yZe(r,this.debugID)),this.needsBuffer&&(this.texture.buffer(this.canvas),this.needsBuffer=!1)},"bufferIfNeeded")},{key:"dispose",value:o(function(){this.texture&&(this.texture.deleteTexture(),this.texture=null,this.needsBuffer=!0)},"dispose")}]),t}(),EZe=function(){function t(e,r){Mf(this,t),this.r=e,this.opts=r,this.keyToIds=new Map,this.idToKey=new Map,this.atlases=[],this.styleKeyToAtlas=new Map,this.styleKeyNeedsRedraw=new Set,this.forceGC=!1}return o(t,"AtlasCollection"),If(t,[{key:"getKeys",value:o(function(){return new Set(this.styleKeyToAtlas.keys())},"getKeys")},{key:"getIdsFor",value:o(function(r){var n=this.keyToIds.get(r);return n||(n=new Set,this.keyToIds.set(r,n)),n},"getIdsFor")},{key:"_createAtlas",value:o(function(){var r=this.r,n=this.opts;return new kZe(r,n)},"_createAtlas")},{key:"_getScratchCanvas",value:o(function(){if(!this.scratch){var r=this.r,n=this.opts,i=n.webglTexSize,a=Math.floor(i/n.webglTexRows);this.scratch=n.createTextureCanvas(r,i,a,"scratch")}return this.scratch},"_getScratchCanvas")},{key:"draw",value:o(function(r,n,i,a){if(this.styleKeyNeedsRedraw.has(n)){this.styleKeyNeedsRedraw.delete(n),this.deleteKey(r,n);var s=this.styleKeyToAtlas.get(n);s&&(s.forceGC=!0),this.styleKeyToAtlas.delete(n)}var l=this.styleKeyToAtlas.get(n);return l||(l=this.atlases[this.atlases.length-1],(!l||!l.canFit(i))&&(l=this._createAtlas(),this.atlases.push(l)),l.draw(n,i,a),this.styleKeyToAtlas.set(n,l),this.getIdsFor(n).add(r),this.idToKey.set(r,n)),l},"draw")},{key:"getAtlas",value:o(function(r){return this.styleKeyToAtlas.get(r)},"getAtlas")},{key:"hasAtlas",value:o(function(r){return this.styleKeyToAtlas.has(r)},"hasAtlas")},{key:"deleteKey",value:o(function(r,n){this.idToKey.delete(r),this.getIdsFor(n).delete(r)},"deleteKey")},{key:"checkKeyIsInvalid",value:o(function(r,n){if(!this.idToKey.has(r))return!1;var i=this.idToKey.get(r);return i!=n?(this.deleteKey(r,i),!0):!1},"checkKeyIsInvalid")},{key:"_getKeysToCollect",value:o(function(){var r=new Set,n=mo(this.styleKeyToAtlas.keys()),i;try{for(n.s();!(i=n.n()).done;){var a=i.value;this.getIdsFor(a).size==0&&r.add(a)}}catch(s){n.e(s)}finally{n.f()}return r},"_getKeysToCollect")},{key:"gc",value:o(function(){var r=this,n=this.atlases.some(function(p){return p.forceGC}),i=this._getKeysToCollect();if(i.size===0&&!n){console.log("nothing to garbage collect");return}var a=[],s=new Map,l=null,u=mo(this.atlases),h;try{var f=o(function(){var m=h.value,g=m.getKeys(),y=SZe(i,g);if(y.size===0&&!m.forceGC)return a.push(m),g.forEach(function(A){return s.set(A,m)}),"continue";l||(l=r._createAtlas(),a.push(l));var v=mo(g),x;try{for(v.s();!(x=v.n()).done;){var b=x.value;if(!y.has(b)){var w=m.getOffsets(b),C=_i(w,2),T=C[0],E=C[1];l.canFit({w:T.w+E.w,h:T.h})||(l=r._createAtlas(),a.push(l)),r._copyTextureToNewAtlas(b,m,l),s.set(b,l)}}}catch(A){v.e(A)}finally{v.f()}},"_loop");for(u.s();!(h=u.n()).done;)var d=f()}catch(p){u.e(p)}finally{u.f()}this.atlases=a,this.styleKeyToAtlas=s},"gc")},{key:"_copyTextureToNewAtlas",value:o(function(r,n,i){var a=n.getOffsets(r),s=_i(a,2),l=s[0],u=s[1];if(u.w===0)i.draw(r,l,function(p){p.drawImage(n.canvas,l.x,l.y,l.w,l.h,0,0,l.w,l.h)});else{var h=this._getScratchCanvas();h.clear(),h.context.drawImage(n.canvas,l.x,l.y,l.w,l.h,0,0,l.w,l.h),h.context.drawImage(n.canvas,u.x,u.y,u.w,u.h,l.w,0,u.w,u.h);var f=l.w+u.w,d=l.h;i.draw(r,{w:f,h:d},function(p){p.drawImage(h,0,0,f,d,0,0,f,d)})}},"_copyTextureToNewAtlas")},{key:"getCounts",value:o(function(){return{keyCount:this.styleKeyToAtlas.size,atlasCount:new Set(this.styleKeyToAtlas.values()).size}},"getCounts")}]),t}();o(SZe,"intersection");CZe=function(){function t(e,r){Mf(this,t),this.r=e;var n=r;this.globalOptions=n,this.maxAtlases=n.webglTexPerBatch,this.atlasSize=n.webglTexSize,this.renderTypes=new Map,this.maxAtlasesPerBatch=r.webglTexPerBatch,this.batchAtlases=[],this._cacheScratchCanvas(n)}return o(t,"AtlasManager"),If(t,[{key:"_cacheScratchCanvas",value:o(function(r){var n=-1,i=-1,a=null,s=r.createTextureCanvas;r.createTextureCanvas=function(l,u,h,f){return f?((!a||u!=n||h!=i)&&(n=u,i=h,a=s(l,u,h)),a):s(l,u,h)}},"_cacheScratchCanvas")},{key:"addRenderType",value:o(function(r,n){var i=new EZe(this.r,this.globalOptions),a=n;this.renderTypes.set(r,rr({type:r,atlasCollection:i},a))},"addRenderType")},{key:"getRenderTypes",value:o(function(){return j0e(this.renderTypes.values())},"getRenderTypes")},{key:"getRenderTypeOpts",value:o(function(r){return this.renderTypes.get(r)},"getRenderTypeOpts")},{key:"invalidate",value:o(function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.forceRedraw,a=i===void 0?!1:i,s=n.filterEle,l=s===void 0?function(){return!0}:s,u=n.filterType,h=u===void 0?function(){return!0}:u,f=!1,d=mo(r),p;try{for(d.s();!(p=d.n()).done;){var m=p.value;if(l(m)){var g=m.id(),y=mo(this.getRenderTypes()),v;try{for(y.s();!(v=y.n()).done;){var x=v.value;if(h(x.type)){var b=x.getKey(m);a?(x.atlasCollection.deleteKey(g,b),x.atlasCollection.styleKeyNeedsRedraw.add(b),f=!0):f|=x.atlasCollection.checkKeyIsInvalid(g,b)}}}catch(w){y.e(w)}finally{y.f()}}}}catch(w){d.e(w)}finally{d.f()}return f},"invalidate")},{key:"gc",value:o(function(){var r=mo(this.getRenderTypes()),n;try{for(r.s();!(n=r.n()).done;){var i=n.value;i.atlasCollection.gc()}}catch(a){r.e(a)}finally{r.f()}},"gc")},{key:"isRenderable",value:o(function(r,n){var i=this.getRenderTypeOpts(n);return i&&i.isVisible(r)},"isRenderable")},{key:"startBatch",value:o(function(){this.batchAtlases=[]},"startBatch")},{key:"getAtlasCount",value:o(function(){return this.batchAtlases.length},"getAtlasCount")},{key:"getAtlases",value:o(function(){return this.batchAtlases},"getAtlases")},{key:"getOrCreateAtlas",value:o(function(r,n,i){var a=this.renderTypes.get(i),s=a.getKey(r),l=r.id();return a.atlasCollection.draw(l,s,n,function(u){a.drawElement(u,r,n,!0,!0)})},"getOrCreateAtlas")},{key:"getAtlasIndexForBatch",value:o(function(r){var n=this.batchAtlases.indexOf(r);if(n<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)return;this.batchAtlases.push(r),n=this.batchAtlases.length-1}return n},"getAtlasIndexForBatch")},{key:"getIndexArray",value:o(function(){return Array.from({length:this.maxAtlases},function(r,n){return n})},"getIndexArray")},{key:"getAtlasInfo",value:o(function(r,n){var i=this.renderTypes.get(n),a=i.getBoundingBox(r),s=this.getOrCreateAtlas(r,a,n),l=this.getAtlasIndexForBatch(s);if(l!==void 0){var u=i.getKey(r),h=s.getOffsets(u),f=_i(h,2),d=f[0],p=f[1];return{atlasID:l,tex:d,tex1:d,tex2:p,bb:a,type:n,styleKey:u}}},"getAtlasInfo")},{key:"canAddToCurrentBatch",value:o(function(r,n){if(this.batchAtlases.length===this.maxAtlasesPerBatch){var i=this.renderTypes.get(n),a=i.getKey(r),s=i.atlasCollection.getAtlas(a);return s&&this.batchAtlases.includes(s)}return!0},"canAddToCurrentBatch")},{key:"setTransformMatrix",value:o(function(r,n,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,s=n.bb,l=n.type,u=n.tex1,h=n.tex2,f=this.getRenderTypeOpts(l),d=f.getPadding?f.getPadding(i):0,p=u.w/(u.w+h.w);a||(p=1-p);var m=this.getAdjustedBB(s,d,a,p),g,y;Age(r);var v=f.getRotation?f.getRotation(i):0;if(v!==0){var x=f.getRotationPoint(i),b=x.x,w=x.y;DS(r,r,[b,w]),_ge(r,r,v);var C=f.getRotationOffset(i);g=C.x+m.xOffset,y=C.y}else g=m.x1,y=m.y1;DS(r,r,[g,y]),TB(r,r,[m.w,m.h])},"setTransformMatrix")},{key:"getTransformMatrix",value:o(function(r,n){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Gb();return this.setTransformMatrix(a,r,n,i),a},"getTransformMatrix")},{key:"getAdjustedBB",value:o(function(r,n,i,a){var s=r.x1,l=r.y1,u=r.w,h=r.h;n&&(s-=n,l-=n,u+=2*n,h+=2*n);var f=0,d=u*a;return i&&a<1?u=d:!i&&a<1&&(f=u-d,s+=f,u=d),{x1:s,y1:l,w:u,h,xOffset:f}},"getAdjustedBB")},{key:"getDebugInfo",value:o(function(){var r=[],n=mo(this.renderTypes),i;try{for(n.s();!(i=n.n()).done;){var a=_i(i.value,2),s=a[0],l=a[1],u=l.atlasCollection.getCounts(),h=u.keyCount,f=u.atlasCount;r.push({type:s,keyCount:h,atlasCount:f})}}catch(d){n.e(d)}finally{n.f()}return r},"getDebugInfo")}]),t}(),MP=0,V0e=1,U0e=2,IP=3,AZe=function(){function t(e,r,n){Mf(this,t),this.r=e,this.gl=r,this.maxInstances=n.webglBatchSize,this.maxAtlases=n.webglTexPerBatch,this.atlasSize=n.webglTexSize,this.bgColor=n.bgColor,n.enableWrapping=!0,n.createTextureCanvas=mZe,this.atlasManager=new CZe(e,n),this.program=this.createShaderProgram(Vb.SCREEN),this.pickingProgram=this.createShaderProgram(Vb.PICKING),this.vao=this.createVAO(),this.debugInfo=[]}return o(t,"ElementDrawingWebGL"),If(t,[{key:"addTextureRenderType",value:o(function(r,n){this.atlasManager.addRenderType(r,n)},"addTextureRenderType")},{key:"invalidate",value:o(function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.type,a=this.atlasManager;return i?a.invalidate(r,{filterType:o(function(l){return l===i},"filterType"),forceRedraw:!0}):a.invalidate(r)},"invalidate")},{key:"gc",value:o(function(){this.atlasManager.gc()},"gc")},{key:"createShaderProgram",value:o(function(r){var n=this.gl,i=`#version 300 es | |
| 1955 | + precision highp float; | |
| 1956 | + | |
| 1957 | + uniform mat3 uPanZoomMatrix; | |
| 1958 | + uniform int uAtlasSize; | |
| 1959 | + | |
| 1960 | + // instanced | |
| 1961 | + in vec2 aPosition; | |
| 1962 | + | |
| 1963 | + // what are we rendering? | |
| 1964 | + in int aVertType; | |
| 1965 | + | |
| 1966 | + // for picking | |
| 1967 | + in vec4 aIndex; | |
| 1968 | + | |
| 1969 | + // For textures | |
| 1970 | + in int aAtlasId; // which shader unit/atlas to use | |
| 1971 | + in vec4 aTex1; // x/y/w/h of texture in atlas | |
| 1972 | + in vec4 aTex2; | |
| 1973 | + | |
| 1974 | + // for any transforms that are needed | |
| 1975 | + in vec4 aScaleRotate1; // vectors use fewer attributes than matrices | |
| 1976 | + in vec2 aTranslate1; | |
| 1977 | + in vec4 aScaleRotate2; | |
| 1978 | + in vec2 aTranslate2; | |
| 1979 | + | |
| 1980 | + // for edges | |
| 1981 | + in vec4 aPointAPointB; | |
| 1982 | + in vec4 aPointCPointD; | |
| 1983 | + in float aLineWidth; | |
| 1984 | + in vec4 aEdgeColor; | |
| 1985 | + | |
| 1986 | + out vec2 vTexCoord; | |
| 1987 | + out vec4 vEdgeColor; | |
| 1988 | + flat out int vAtlasId; | |
| 1989 | + flat out vec4 vIndex; | |
| 1990 | + flat out int vVertType; | |
| 1991 | + | |
| 1992 | + void main(void) { | |
| 1993 | + int vid = gl_VertexID; | |
| 1994 | + vec2 position = aPosition; | |
| 1995 | + | |
| 1996 | + if(aVertType == `.concat(MP,`) { | |
| 1997 | + float texX; | |
| 1998 | + float texY; | |
| 1999 | + float texW; | |
| 2000 | + float texH; | |
| 2001 | + mat3 texMatrix; | |
| 2002 | + | |
| 2003 | + int vid = gl_VertexID; | |
| 2004 | + if(vid <= 5) { | |
| 2005 | + texX = aTex1.x; | |
| 2006 | + texY = aTex1.y; | |
| 2007 | + texW = aTex1.z; | |
| 2008 | + texH = aTex1.w; | |
| 2009 | + texMatrix = mat3( | |
| 2010 | + vec3(aScaleRotate1.xy, 0.0), | |
| 2011 | + vec3(aScaleRotate2.zw, 0.0), | |
| 2012 | + vec3(aTranslate1, 1.0) | |
| 2013 | + ); | |
| 2014 | + } else { | |
| 2015 | + texX = aTex2.x; | |
| 2016 | + texY = aTex2.y; | |
| 2017 | + texW = aTex2.z; | |
| 2018 | + texH = aTex2.w; | |
| 2019 | + texMatrix = mat3( | |
| 2020 | + vec3(aScaleRotate2.xy, 0.0), | |
| 2021 | + vec3(aScaleRotate2.zw, 0.0), | |
| 2022 | + vec3(aTranslate2, 1.0) | |
| 2023 | + ); | |
| 2024 | + } | |
| 2025 | + | |
| 2026 | + if(vid == 1 || vid == 2 || vid == 4 || vid == 7 || vid == 8 || vid == 10) { | |
| 2027 | + texX += texW; | |
| 2028 | + } | |
| 2029 | + if(vid == 2 || vid == 4 || vid == 5 || vid == 8 || vid == 10 || vid == 11) { | |
| 2030 | + texY += texH; | |
| 2031 | + } | |
| 2032 | + | |
| 2033 | + float d = float(uAtlasSize); | |
| 2034 | + vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1 | |
| 2035 | + | |
| 2036 | + gl_Position = vec4(uPanZoomMatrix * texMatrix * vec3(position, 1.0), 1.0); | |
| 2037 | + } | |
| 2038 | + else if(aVertType == `).concat(V0e,` && vid < 6) { | |
| 2039 | + vec2 source = aPointAPointB.xy; | |
| 2040 | + vec2 target = aPointAPointB.zw; | |
| 2041 | + | |
| 2042 | + // adjust the geometry so that the line is centered on the edge | |
| 2043 | + position.y = position.y - 0.5; | |
| 2044 | + | |
| 2045 | + vec2 xBasis = target - source; | |
| 2046 | + vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x)); | |
| 2047 | + vec2 point = source + xBasis * position.x + yBasis * aLineWidth * position.y; | |
| 2048 | + | |
| 2049 | + gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0); | |
| 2050 | + vEdgeColor = aEdgeColor; | |
| 2051 | + } | |
| 2052 | + else if(aVertType == `).concat(U0e,` && vid < 6) { | |
| 2053 | + vec2 pointA = aPointAPointB.xy; | |
| 2054 | + vec2 pointB = aPointAPointB.zw; | |
| 2055 | + vec2 pointC = aPointCPointD.xy; | |
| 2056 | + vec2 pointD = aPointCPointD.zw; | |
| 2057 | + | |
| 2058 | + // adjust the geometry so that the line is centered on the edge | |
| 2059 | + position.y = position.y - 0.5; | |
| 2060 | + | |
| 2061 | + vec2 p0 = pointA; | |
| 2062 | + vec2 p1 = pointB; | |
| 2063 | + vec2 p2 = pointC; | |
| 2064 | + vec2 pos = position; | |
| 2065 | + if(position.x == 1.0) { | |
| 2066 | + p0 = pointD; | |
| 2067 | + p1 = pointC; | |
| 2068 | + p2 = pointB; | |
| 2069 | + pos = vec2(0.0, -position.y); | |
| 2070 | + } | |
| 2071 | + | |
| 2072 | + vec2 p01 = p1 - p0; | |
| 2073 | + vec2 p12 = p2 - p1; | |
| 2074 | + vec2 p21 = p1 - p2; | |
| 2075 | + | |
| 2076 | + // Find the normal vector. | |
| 2077 | + vec2 tangent = normalize(normalize(p12) + normalize(p01)); | |
| 2078 | + vec2 normal = vec2(-tangent.y, tangent.x); | |
| 2079 | + | |
| 2080 | + // Find the vector perpendicular to p0 -> p1. | |
| 2081 | + vec2 p01Norm = normalize(vec2(-p01.y, p01.x)); | |
| 2082 | + | |
| 2083 | + // Determine the bend direction. | |
| 2084 | + float sigma = sign(dot(p01 + p21, normal)); | |
| 2085 | + float width = aLineWidth; | |
| 2086 | + | |
| 2087 | + if(sign(pos.y) == -sigma) { | |
| 2088 | + // This is an intersecting vertex. Adjust the position so that there's no overlap. | |
| 2089 | + vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm); | |
| 2090 | + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0); | |
| 2091 | + } else { | |
| 2092 | + // This is a non-intersecting vertex. Treat it like a mitre join. | |
| 2093 | + vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm); | |
| 2094 | + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0); | |
| 2095 | + } | |
| 2096 | + | |
| 2097 | + vEdgeColor = aEdgeColor; | |
| 2098 | + } | |
| 2099 | + else if(aVertType == `).concat(IP,` && vid < 3) { | |
| 2100 | + // massage the first triangle into an edge arrow | |
| 2101 | + if(vid == 0) | |
| 2102 | + position = vec2(-0.15, -0.3); | |
| 2103 | + if(vid == 1) | |
| 2104 | + position = vec2( 0.0, 0.0); | |
| 2105 | + if(vid == 2) | |
| 2106 | + position = vec2( 0.15, -0.3); | |
| 2107 | + | |
| 2108 | + mat3 transform = mat3( | |
| 2109 | + vec3(aScaleRotate1.xy, 0.0), | |
| 2110 | + vec3(aScaleRotate1.zw, 0.0), | |
| 2111 | + vec3(aTranslate1, 1.0) | |
| 2112 | + ); | |
| 2113 | + gl_Position = vec4(uPanZoomMatrix * transform * vec3(position, 1.0), 1.0); | |
| 2114 | + vEdgeColor = aEdgeColor; | |
| 2115 | + } else { | |
| 2116 | + gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space | |
| 2117 | + } | |
| 2118 | + | |
| 2119 | + vAtlasId = aAtlasId; | |
| 2120 | + vIndex = aIndex; | |
| 2121 | + vVertType = aVertType; | |
| 2122 | + } | |
| 2123 | + `),a=this.atlasManager.getIndexArray(),s=`#version 300 es | |
| 2124 | + precision highp float; | |
| 2125 | + | |
| 2126 | + // define texture unit for each node in the batch | |
| 2127 | + `.concat(a.map(function(h){return"uniform sampler2D uTexture".concat(h,";")}).join(` | |
| 2128 | + `),` | |
| 2129 | + | |
| 2130 | + uniform vec4 uBGColor; | |
| 2131 | + | |
| 2132 | + in vec2 vTexCoord; | |
| 2133 | + in vec4 vEdgeColor; | |
| 2134 | + flat in int vAtlasId; | |
| 2135 | + flat in vec4 vIndex; | |
| 2136 | + flat in int vVertType; | |
| 2137 | + | |
| 2138 | + out vec4 outColor; | |
| 2139 | + | |
| 2140 | + void main(void) { | |
| 2141 | + if(vVertType == `).concat(MP,`) { | |
| 2142 | + `).concat(a.map(function(h){return"if(vAtlasId == ".concat(h,") outColor = texture(uTexture").concat(h,", vTexCoord);")}).join(` | |
| 2143 | + else `),` | |
| 2144 | + } else if(vVertType == `).concat(IP,`) { | |
| 2145 | + // blend arrow color with background (using premultiplied alpha) | |
| 2146 | + outColor.rgb = vEdgeColor.rgb + (uBGColor.rgb * (1.0 - vEdgeColor.a)); | |
| 2147 | + outColor.a = 1.0; // make opaque, masks out line under arrow | |
| 2148 | + } else { | |
| 2149 | + outColor = vEdgeColor; | |
| 2150 | + } | |
| 2151 | + | |
| 2152 | + `).concat(r.picking?`if(outColor.a == 0.0) discard; | |
| 2153 | + else outColor = vIndex;`:"",` | |
| 2154 | + } | |
| 2155 | + `),l=pZe(n,i,s);l.aPosition=n.getAttribLocation(l,"aPosition"),l.aIndex=n.getAttribLocation(l,"aIndex"),l.aVertType=n.getAttribLocation(l,"aVertType"),l.aAtlasId=n.getAttribLocation(l,"aAtlasId"),l.aTex1=n.getAttribLocation(l,"aTex1"),l.aTex2=n.getAttribLocation(l,"aTex2"),l.aScaleRotate1=n.getAttribLocation(l,"aScaleRotate1"),l.aTranslate1=n.getAttribLocation(l,"aTranslate1"),l.aScaleRotate2=n.getAttribLocation(l,"aScaleRotate2"),l.aTranslate2=n.getAttribLocation(l,"aTranslate2"),l.aPointAPointB=n.getAttribLocation(l,"aPointAPointB"),l.aPointCPointD=n.getAttribLocation(l,"aPointCPointD"),l.aLineWidth=n.getAttribLocation(l,"aLineWidth"),l.aEdgeColor=n.getAttribLocation(l,"aEdgeColor"),l.uPanZoomMatrix=n.getUniformLocation(l,"uPanZoomMatrix"),l.uAtlasSize=n.getUniformLocation(l,"uAtlasSize"),l.uBGColor=n.getUniformLocation(l,"uBGColor"),l.uTextures=[];for(var u=0;u<this.atlasManager.maxAtlases;u++)l.uTextures.push(n.getUniformLocation(l,"uTexture".concat(u)));return l},"createShaderProgram")},{key:"createVAO",value:o(function(){var r=[0,0,1,0,1,1,0,0,1,1,0,1],n=[].concat(r,r);this.vertexCount=n.length/2;var i=this.maxInstances,a=this.gl,s=this.program,l=a.createVertexArray();return a.bindVertexArray(l),xZe(a,"vec2",s.aPosition,n),this.indexBuffer=po(a,i,"vec4",s.aIndex),this.vertTypeBuffer=po(a,i,"int",s.aVertType),this.atlasIdBuffer=po(a,i,"int",s.aAtlasId),this.tex1Buffer=po(a,i,"vec4",s.aTex1),this.tex2Buffer=po(a,i,"vec4",s.aTex2),this.scaleRotate1Buffer=po(a,i,"vec4",s.aScaleRotate1),this.translate1Buffer=po(a,i,"vec2",s.aTranslate1),this.scaleRotate2Buffer=po(a,i,"vec4",s.aScaleRotate2),this.translate2Buffer=po(a,i,"vec2",s.aTranslate2),this.pointAPointBBuffer=po(a,i,"vec4",s.aPointAPointB),this.pointCPointDBuffer=po(a,i,"vec4",s.aPointCPointD),this.lineWidthBuffer=po(a,i,"float",s.aLineWidth),this.edgeColorBuffer=po(a,i,"vec4",s.aEdgeColor),a.bindVertexArray(null),l},"createVAO")},{key:"buffers",get:o(function(){var r=this;return this._buffers||(this._buffers=Object.keys(this).filter(function(n){return n.endsWith("Buffer")}).map(function(n){return r[n]})),this._buffers},"get")},{key:"startFrame",value:o(function(r,n){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Vb.SCREEN;this.panZoomMatrix=r,this.debugInfo=n,this.renderTarget=i,this.startBatch()},"startFrame")},{key:"startBatch",value:o(function(){this.instanceCount=0,this.atlasManager.startBatch()},"startBatch")},{key:"endFrame",value:o(function(){this.endBatch()},"endFrame")},{key:"getTempMatrix",value:o(function(){return this.tempMatrix=this.tempMatrix||Gb()},"getTempMatrix")},{key:"drawTexture",value:o(function(r,n,i){var a=this.atlasManager;if(a.isRenderable(r,i)){a.canAddToCurrentBatch(r,i)||this.endBatch();var s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=MP;var l=this.indexBuffer.getView(s);lS(n,l);var u=a.getAtlasInfo(r,i,u),h=u.atlasID,f=u.tex1,d=u.tex2,p=this.atlasIdBuffer.getView(s);p[0]=h;var m=this.tex1Buffer.getView(s);m[0]=f.x,m[1]=f.y,m[2]=f.w,m[3]=f.h;var g=this.tex2Buffer.getView(s);g[0]=d.x,g[1]=d.y,g[2]=d.w,g[3]=d.h;for(var y=this.getTempMatrix(),v=0,x=[1,2];v<x.length;v++){var b=x[v];a.setTransformMatrix(y,u,r,b===1);var w=this["scaleRotate".concat(b,"Buffer")].getView(s);w[0]=y[0],w[1]=y[1],w[2]=y[3],w[3]=y[4];var C=this["translate".concat(b,"Buffer")].getView(s);C[0]=y[6],C[1]=y[7]}this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawTexture")},{key:"drawEdgeArrow",value:o(function(r,n,i){var a=r._private.rscratch,s,l,u;if(i==="source"?(s=a.arrowStartX,l=a.arrowStartY,u=a.srcArrowAngle):(s=a.arrowEndX,l=a.arrowEndY,u=a.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(l)||l==null||isNaN(u)||u==null)){var h=r.pstyle(i+"-arrow-shape").value;if(h!=="none"){var f=r.pstyle(i+"-arrow-color").value,d=r.pstyle("opacity").value,p=r.pstyle("line-opacity").value,m=d*p,g=r.pstyle("width").pfValue,y=r.pstyle("arrow-scale").value,v=this.r.getArrowWidth(g,y),x=this.getTempMatrix();Age(x),DS(x,x,[s,l]),TB(x,x,[v,v]),_ge(x,x,u);var b=this.instanceCount;this.vertTypeBuffer.getView(b)[0]=IP;var w=this.indexBuffer.getView(b);lS(n,w);var C=this.edgeColorBuffer.getView(b);oS(f,m,C);var T=this.scaleRotate1Buffer.getView(b);T[0]=x[0],T[1]=x[1],T[2]=x[3],T[3]=x[4];var E=this.translate1Buffer.getView(b);E[0]=x[6],E[1]=x[7],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}},"drawEdgeArrow")},{key:"drawEdgeLine",value:o(function(r,n){var i=r.pstyle("opacity").value,a=r.pstyle("line-opacity").value,s=r.pstyle("width").pfValue,l=r.pstyle("line-color").value,u=i*a,h=this.getEdgePoints(r);if(h.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),h.length==4){var f=this.instanceCount;this.vertTypeBuffer.getView(f)[0]=V0e;var d=this.indexBuffer.getView(f);lS(n,d);var p=this.edgeColorBuffer.getView(f);oS(l,u,p);var m=this.lineWidthBuffer.getView(f);m[0]=s;var g=this.pointAPointBBuffer.getView(f);g[0]=h[0],g[1]=h[1],g[2]=h[2],g[3]=h[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y<h.length-2;y+=2){var v=this.instanceCount;this.vertTypeBuffer.getView(v)[0]=U0e;var x=this.indexBuffer.getView(v);lS(n,x);var b=this.edgeColorBuffer.getView(v);oS(l,u,b);var w=this.lineWidthBuffer.getView(v);w[0]=s;var C=h[y-2],T=h[y-1],E=h[y],A=h[y+1],S=h[y+2],_=h[y+3],I=h[y+4],D=h[y+5];y==0&&(C=2*E-S+.001,T=2*A-_+.001),y==h.length-4&&(I=2*S-E+.001,D=2*_-A+.001);var k=this.pointAPointBBuffer.getView(v);k[0]=C,k[1]=T,k[2]=E,k[3]=A;var L=this.pointCPointDBuffer.getView(v);L[0]=S,L[1]=_,L[2]=I,L[3]=D,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawEdgeLine")},{key:"getEdgePoints",value:o(function(r){var n=r._private.rscratch,i=n.allpts;if(i.length==4)return i;var a=this.getNumSegments(r);return this.getCurveSegmentPoints(i,a)},"getEdgePoints")},{key:"getNumSegments",value:o(function(r){var n=15;return Math.min(Math.max(n,5),this.maxInstances)},"getNumSegments")},{key:"getCurveSegmentPoints",value:o(function(r,n){if(r.length==4)return r;for(var i=Array((n+1)*2),a=0;a<=n;a++)if(a==0)i[0]=r[0],i[1]=r[1];else if(a==n)i[a*2]=r[r.length-2],i[a*2+1]=r[r.length-1];else{var s=a/n;this.setCurvePoint(r,s,i,a*2)}return i},"getCurveSegmentPoints")},{key:"setCurvePoint",value:o(function(r,n,i,a){if(r.length<=2)i[a]=r[0],i[a+1]=r[1];else{for(var s=Array(r.length-2),l=0;l<s.length;l+=2){var u=(1-n)*r[l]+n*r[l+2],h=(1-n)*r[l+1]+n*r[l+3];s[l]=u,s[l+1]=h}return this.setCurvePoint(s,n,i,a)}},"setCurvePoint")},{key:"endBatch",value:o(function(){var r=this.gl,n=this.vao,i=this.vertexCount,a=this.instanceCount;if(a!==0){var s=this.renderTarget.picking?this.pickingProgram:this.program;r.useProgram(s),r.bindVertexArray(n);var l=mo(this.buffers),u;try{for(l.s();!(u=l.n()).done;){var h=u.value;h.bufferSubData(a)}}catch(g){l.e(g)}finally{l.f()}for(var f=this.atlasManager.getAtlases(),d=0;d<f.length;d++)f[d].bufferIfNeeded(r);for(var p=0;p<f.length;p++)r.activeTexture(r.TEXTURE0+p),r.bindTexture(r.TEXTURE_2D,f[p].texture),r.uniform1i(s.uTextures[p],p);r.uniformMatrix3fv(s.uPanZoomMatrix,!1,this.panZoomMatrix),r.uniform1i(s.uAtlasSize,this.atlasManager.atlasSize);var m=oS(this.bgColor,1);r.uniform4fv(s.uBGColor,m),r.drawArraysInstanced(r.TRIANGLES,0,i,a),r.bindVertexArray(null),r.bindTexture(r.TEXTURE_2D,null),this.debugInfo&&this.debugInfo.push({count:a,atlasCount:f.length}),this.startBatch()}},"endBatch")},{key:"getDebugInfo",value:o(function(){return this.debugInfo},"getDebugInfo")},{key:"getAtlasDebugInfo",value:o(function(){return this.atlasManager.getDebugInfo()},"getAtlasDebugInfo")}]),t}();o(H0e,"fillStyle");_Ze=function(){function t(e){Mf(this,t),this.r=e}return o(t,"OverlayUnderlayRenderer"),If(t,[{key:"getStyleKey",value:o(function(r,n){var i=this.getStyle(r,n),a=i.shape,s=i.opacity,l=i.color;if(!a)return null;var u=n.width(),h=n.height(),f=H0e(l,s);return _f("".concat(a,"-").concat(u,"-").concat(h,"-").concat(f))},"getStyleKey")},{key:"isVisible",value:o(function(r,n){var i=n.pstyle("".concat(r,"-opacity")).value;return i>0},"isVisible")},{key:"getStyle",value:o(function(r,n){var i=n.pstyle("".concat(r,"-opacity")).value,a=n.pstyle("".concat(r,"-color")).value,s=n.pstyle("".concat(r,"-shape")).value;return{opacity:i,color:a,shape:s}},"getStyle")},{key:"getPadding",value:o(function(r,n){return n.pstyle("".concat(r,"-padding")).pfValue},"getPadding")},{key:"draw",value:o(function(r,n,i,a){if(this.isVisible(r,i)){var s=this.r,l=a.w,u=a.h,h=l/2,f=u/2,d=this.getStyle(r,i),p=d.shape,m=d.color,g=d.opacity;n.save(),n.fillStyle=H0e(m,g),p==="round-rectangle"||p==="roundrectangle"?s.drawRoundRectanglePath(n,h,f,l,u,"auto"):p==="ellipse"&&s.drawEllipsePath(n,h,f,l,u),n.fill(),n.restore()}},"draw")}]),t}();o(DZe,"getBGColor");Dge={};Dge.initWebgl=function(t,e){var r=this,n=r.data.contexts[r.WEBGL],i=t.cy.container();t.bgColor=DZe(i),t.webglTexSize=Math.min(t.webglTexSize,n.getParameter(n.MAX_TEXTURE_SIZE)),t.webglTexRows=Math.min(t.webglTexRows,54),t.webglBatchSize=Math.min(t.webglBatchSize,16384),t.webglTexPerBatch=Math.min(t.webglTexPerBatch,n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),r.webglDebug=t.webglDebug,r.webglDebugShowAtlases=t.webglDebugShowAtlases,console.log("max texture units",n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),console.log("max texture size",n.getParameter(n.MAX_TEXTURE_SIZE)),console.log("webgl options",t),r.pickingFrameBuffer=bZe(n),r.pickingFrameBuffer.needsDraw=!0;var a=o(function(f){return r.getTextAngle(f,null)},"getLabelRotation"),s=o(function(f){var d=f.pstyle("label");return d&&d.value},"isLabelVisible");r.eleDrawing=new AZe(r,n,t);var l=new _Ze(r);r.eleDrawing.addTextureRenderType("node-body",Mb({getKey:e.getStyleKey,getBoundingBox:e.getElementBox,drawElement:e.drawElement,isVisible:o(function(f){return f.visible()},"isVisible")})),r.eleDrawing.addTextureRenderType("node-label",Mb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s})),r.eleDrawing.addTextureRenderType("node-overlay",Mb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("overlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("overlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("overlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("overlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("node-underlay",Mb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("underlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("underlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("underlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("underlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("edge-label",Mb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s}));var u=n4(function(){console.log("garbage collect flag set"),r.data.gc=!0},1e4);r.onUpdateEleCalcs(function(h,f){var d=!1;f&&f.length>0&&(d|=r.eleDrawing.invalidate(f)),d&&u()}),LZe(r)};o(LZe,"overrideCanvasRendererFunctions");o(RZe,"clearWebgl");o(NZe,"clearCanvas");o(MZe,"createPanZoomMatrix");o(Lge,"setContextTransform");o(IZe,"drawSelectionRectangle");o(OZe,"drawAxes");o(PZe,"drawAtlases");o(BZe,"getPickingIndexes");o(FZe,"findNearestElementsWebgl");o(Rge,"renderWebgl");Pf={};Pf.drawPolygonPath=function(t,e,r,n,i,a){var s=n/2,l=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u<a.length/2;u++)t.lineTo(e+s*a[u*2],r+l*a[u*2+1]);t.closePath()};Pf.drawRoundPolygonPath=function(t,e,r,n,i,a,s){s.forEach(function(l){return hge(t,l)}),t.closePath()};Pf.drawRoundRectanglePath=function(t,e,r,n,i,a){var s=n/2,l=i/2,u=a==="auto"?Vp(n,i):Math.min(a,l,s);t.beginPath&&t.beginPath(),t.moveTo(e,r-l),t.arcTo(e+s,r-l,e+s,r,u),t.arcTo(e+s,r+l,e,r+l,u),t.arcTo(e-s,r+l,e-s,r,u),t.arcTo(e-s,r-l,e,r-l,u),t.lineTo(e,r-l),t.closePath()};Pf.drawBottomRoundRectanglePath=function(t,e,r,n,i,a){var s=n/2,l=i/2,u=a==="auto"?Vp(n,i):a;t.beginPath&&t.beginPath(),t.moveTo(e,r-l),t.lineTo(e+s,r-l),t.lineTo(e+s,r),t.arcTo(e+s,r+l,e,r+l,u),t.arcTo(e-s,r+l,e-s,r,u),t.lineTo(e-s,r-l),t.lineTo(e,r-l),t.closePath()};Pf.drawCutRectanglePath=function(t,e,r,n,i,a,s){var l=n/2,u=i/2,h=s==="auto"?sB():s;t.beginPath&&t.beginPath(),t.moveTo(e-l+h,r-u),t.lineTo(e+l-h,r-u),t.lineTo(e+l,r-u+h),t.lineTo(e+l,r+u-h),t.lineTo(e+l-h,r+u),t.lineTo(e-l+h,r+u),t.lineTo(e-l,r+u-h),t.lineTo(e-l,r-u+h),t.closePath()};Pf.drawBarrelPath=function(t,e,r,n,i){var a=n/2,s=i/2,l=e-a,u=e+a,h=r-s,f=r+s,d=BP(n,i),p=d.widthOffset,m=d.heightOffset,g=d.ctrlPtOffsetPct*p;t.beginPath&&t.beginPath(),t.moveTo(l,h+m),t.lineTo(l,f-m),t.quadraticCurveTo(l+g,f,l+p,f),t.lineTo(u-p,f),t.quadraticCurveTo(u-g,f,u,f-m),t.lineTo(u,h+m),t.quadraticCurveTo(u-g,h,u-p,h),t.lineTo(l+p,h),t.quadraticCurveTo(l+g,h,l,h+m),t.closePath()};W0e=Math.sin(0),q0e=Math.cos(0),jP={},KP={},Nge=Math.PI/40;for(Ip=0*Math.PI;Ip<2*Math.PI;Ip+=Nge)jP[Ip]=Math.sin(Ip),KP[Ip]=Math.cos(Ip);Pf.drawEllipsePath=function(t,e,r,n,i){if(t.beginPath&&t.beginPath(),t.ellipse)t.ellipse(e,r,n/2,i/2,0,0,2*Math.PI);else for(var a,s,l=n/2,u=i/2,h=0*Math.PI;h<2*Math.PI;h+=Nge)a=e-l*jP[h]*W0e+l*KP[h]*q0e,s=r+u*KP[h]*W0e+u*jP[h]*q0e,h===0?t.moveTo(a,s):t.lineTo(a,s);t.closePath()};c4={};c4.createBuffer=function(t,e){var r=document.createElement("canvas");return r.width=t,r.height=e,[r,r.getContext("2d")]};c4.bufferCanvasImage=function(t){var e=this.cy,r=e.mutableElements(),n=r.boundingBox(),i=this.findContainerClientCoords(),a=t.full?Math.ceil(n.w):i[2],s=t.full?Math.ceil(n.h):i[3],l=Ct(t.maxWidth)||Ct(t.maxHeight),u=this.getPixelRatio(),h=1;if(t.scale!==void 0)a*=t.scale,s*=t.scale,h=t.scale;else if(l){var f=1/0,d=1/0;Ct(t.maxWidth)&&(f=h*t.maxWidth/a),Ct(t.maxHeight)&&(d=h*t.maxHeight/s),h=Math.min(f,d),a*=h,s*=h}l||(a*=u,s*=u,h*=u);var p=document.createElement("canvas");p.width=a,p.height=s,p.style.width=a+"px",p.style.height=s+"px";var m=p.getContext("2d");if(a>0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-n.x1*h,-n.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(n.x1*h,n.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o($Ze,"b64ToBlob");o(Y0e,"b64UriToB64");o(Mge,"output");c4.png=function(t){return Mge(t,this.bufferCanvasImage(t),"image/png")};c4.jpg=function(t){return Mge(t,this.bufferCanvasImage(t),"image/jpeg")};Ige={};Ige.nodeShapeImpl=function(t,e,r,n,i,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,n,i,a);case"polygon":return this.drawPolygonPath(e,r,n,i,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,n,i,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,n,i,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,n,i,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,n,i,a,l);case"barrel":return this.drawBarrelPath(e,r,n,i,a)}};zZe=Oge,Er=Oge.prototype;Er.CANVAS_LAYERS=3;Er.SELECT_BOX=0;Er.DRAG=1;Er.NODE=2;Er.WEBGL=3;Er.CANVAS_TYPES=["2d","2d","2d","webgl2"];Er.BUFFER_COUNT=3;Er.TEXTURE_BUFFER=0;Er.MOTIONBLUR_BUFFER_NODE=1;Er.MOTIONBLUR_BUFFER_DRAG=2;o(Oge,"CanvasRenderer");Er.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Er.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Er.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Er.SELECT_BOX]=e;break;case"gc":r.data.gc=!0;break}};GZe=typeof Path2D<"u";Er.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Er.usePaths=function(){return GZe&&this.pathsEnabled};Er.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Er.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Er.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":Wi(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var n=this.cy.window(),i=n.document;r=i.createElement("canvas"),r.width=t,r.height=e}return r};[Tge,Qc,th,bB,Yp,ly,ys,Dge,Pf,c4,Ige].forEach(function(t){rr(Er,t)});VZe=[{name:"null",impl:lge},{name:"base",impl:vge},{name:"canvas",impl:zZe}],UZe=[{type:"layout",extensions:SQe},{type:"renderer",extensions:VZe}],Pge={},Bge={};o(Fge,"setExtension");o($ge,"getExtension");o(HZe,"setModule");o(WZe,"getModule");QP=o(function(){if(arguments.length===2)return $ge.apply(null,arguments);if(arguments.length===3)return Fge.apply(null,arguments);if(arguments.length===4)return WZe.apply(null,arguments);if(arguments.length===5)return HZe.apply(null,arguments);ai("Invalid extension access syntax")},"extension");Jb.prototype.extension=QP;UZe.forEach(function(t){t.extensions.forEach(function(e){Fge(t.type,e.name,e.impl)})});zge=o(function t(){if(!(this instanceof t))return new t;this.length=0},"Stylesheet"),Wp=zge.prototype;Wp.instanceString=function(){return"stylesheet"};Wp.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};Wp.css=function(t,e){var r=this.length-1;if(Zt(t))this[r].properties.push({name:t,value:e});else if(Ur(t))for(var n=t,i=Object.keys(n),a=0;a<i.length;a++){var s=i[a],l=n[s];if(l!=null){var u=Fa.properties[s]||Fa.properties[LS(s)];if(u!=null){var h=u.name,f=l;this[r].properties.push({name:h,value:f})}}}return this};Wp.style=Wp.css;Wp.generateStyle=function(t){var e=new Fa(t);return this.appendToStyle(e)};Wp.appendToStyle=function(t){for(var e=0;e<this.length;e++){var r=this[e],n=r.selector,i=r.properties;t.selector(n);for(var a=0;a<i.length;a++){var s=i[a];t.css(s.name,s.value)}}return t};qZe="3.31.0",rl=o(function(e){if(e===void 0&&(e={}),Ur(e))return new Jb(e);if(Zt(e))return QP.apply(QP,arguments)},"cytoscape");rl.use=function(t){var e=Array.prototype.slice.call(arguments,1);return e.unshift(rl),t.apply(null,e),this};rl.warnings=function(t){return hme(t)};rl.version=qZe;rl.stylesheet=rl.Stylesheet=zge});var SB=Mi((u4,EB)=>{"use strict";o(function(e,r){typeof u4=="object"&&typeof EB=="object"?EB.exports=r():typeof define=="function"&&define.amd?define([],r):typeof u4=="object"?u4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(u4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=26)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;y<g.length;y++)p=g[y],m=p.withChildren(),m.forEach(function(v){d.add(v)});return d},h.prototype.getNoOfChildren=function(){var d=0,p;if(this.child==null)d=1;else for(var m=this.child.getNodes(),g=0;g<m.length;g++)p=m[g],d+=p.getNoOfChildren();return d==0&&(d=1),d},h.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},h.prototype.calcEstimatedSize=function(){return this.child==null?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},h.prototype.scatter=function(){var d,p,m=-s.INITIAL_WORLD_BOUNDARY,g=s.INITIAL_WORLD_BOUNDARY;d=s.WORLD_CENTER_X+l.nextDouble()*(g-m)+m;var y=-s.INITIAL_WORLD_BOUNDARY,v=s.INITIAL_WORLD_BOUNDARY;p=s.WORLD_CENTER_Y+l.nextDouble()*(v-y)+y,this.rect.x=d,this.rect.y=p},h.prototype.updateBounds=function(){if(this.getChild()==null)throw"assert failed";if(this.getChild().getNodes().length!=0){var d=this.getChild();if(d.updateBounds(!0),this.rect.x=d.getLeft(),this.rect.y=d.getTop(),this.setWidth(d.getRight()-d.getLeft()),this.setHeight(d.getBottom()-d.getTop()),s.NODE_DIMENSIONS_INCLUDE_LABELS){var p=d.getRight()-d.getLeft(),m=d.getBottom()-d.getTop();this.labelWidth>p&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w<b;w++)x=v[w],x.isInterGraph?this.graphManager.remove(x):x.source.owner.remove(x);var C=this.nodes.indexOf(y);if(C==-1)throw"Node not in owner node list!";this.nodes.splice(C,1)}else if(g instanceof u){var x=g;if(x==null)throw"Edge is null!";if(!(x.source!=null&&x.target!=null))throw"Source and/or target is null!";if(!(x.source.owner!=null&&x.target.owner!=null&&x.source.owner==this&&x.target.owner==this))throw"Source and/or target owner is invalid!";var T=x.source.edges.indexOf(x),E=x.target.edges.indexOf(x);if(!(T>-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var C=x.source.owner.getEdges().indexOf(x);if(C==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(C,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),C=w.length,T=0;T<C;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A,S=this.nodes,_=S.length,I=0;I<_;I++){var D=S[I];g&&D.child!=null&&D.updateBounds(),w=D.getLeft(),C=D.getRight(),T=D.getTop(),E=D.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var k=new h(y,x,v-y,b-x);y==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),S[0].getParent().paddingLeft!=null?A=S[0].getParent().paddingLeft:A=this.margin,this.left=k.x-A,this.right=k.x+k.width+A,this.top=k.y-A,this.bottom=k.y+k.height+A},p.calculateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A=g.length,S=0;S<A;S++){var _=g[S];w=_.getLeft(),C=_.getRight(),T=_.getTop(),E=_.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var I=new h(y,x,v-y,b-x);return I},p.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},p.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},p.prototype.calcEstimatedSize=function(){for(var g=0,y=this.nodes,v=y.length,x=0;x<v;x++){var b=y[x];g+=b.calcEstimatedSize()}return g==0?this.estimatedSize=a.EMPTY_COMPOUND_NODE_SIZE:this.estimatedSize=g/Math.sqrt(this.nodes.length),this.estimatedSize},p.prototype.updateConnected=function(){var g=this;if(this.nodes.length==0){this.isConnected=!0;return}var y=new d,v=new Set,x=this.nodes[0],b,w,C=x.withChildren();for(C.forEach(function(I){y.push(I),v.add(I)});y.length!==0;){x=y.shift(),b=x.getEdges();for(var T=b.length,E=0;E<T;E++){var A=b[E];if(w=A.getOtherEndInGraph(x,this),w!=null&&!v.has(w)){var S=w.withChildren();S.forEach(function(I){y.push(I),v.add(I)})}}}if(this.isConnected=!1,v.size>=this.nodes.length){var _=0;v.forEach(function(I){I.owner==g&&_++}),_==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d<f;d++)h=u[d],l.remove(h);var p=[];p=p.concat(l.getNodes());var m;f=p.length;for(var d=0;d<f;d++)m=p[d],l.remove(m);l==this.rootGraph&&this.setRootGraph(null);var g=this.graphs.indexOf(l);this.graphs.splice(g,1),l.parent=null}else if(s instanceof i){if(h=s,h==null)throw"Edge is null!";if(!h.isInterGraph)throw"Not an inter-graph edge!";if(!(h.source!=null&&h.target!=null))throw"Source and/or target is null!";if(!(h.source.edges.indexOf(h)!=-1&&h.target.edges.indexOf(h)!=-1))throw"Source and/or target doesn't know this edge!";var g=h.source.edges.indexOf(h);if(h.source.edges.splice(g,1),g=h.target.edges.indexOf(h),h.target.edges.splice(g,1),!(h.source.owner!=null&&h.source.owner.getGraphManager()!=null))throw"Edge owner graph or owner graph manager is null!";if(h.source.owner.getGraphManager().edges.indexOf(h)==-1)throw"Not in owner graph manager's edge list!";var g=h.source.owner.getGraphManager().edges.indexOf(h);h.source.owner.getGraphManager().edges.splice(g,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(this.allNodes==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<u;h++)s=s.concat(l[h].getNodes());this.allNodes=s}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(this.allEdges==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<l.length;h++)s=s.concat(l[h].getEdges());s=s.concat(this.edges),this.allEdges=s}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(s){if(this.allNodesToApplyGravitation!=null)throw"assert failed";this.allNodesToApplyGravitation=s},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(s){if(s.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=s,s.parent==null&&(s.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(s,l){if(!(s!=null&&l!=null))throw"assert failed";if(s==l)return!0;var u=s.getOwner(),h;do{if(h=u.getParent(),h==null)break;if(h==l)return!0;if(u=h.getOwner(),u==null)break}while(!0);u=l.getOwner();do{if(h=u.getParent(),h==null)break;if(h==s)return!0;if(u=h.getOwner(),u==null)break}while(!0);return!1},a.prototype.calcLowestCommonAncestors=function(){for(var s,l,u,h,f,d=this.getAllEdges(),p=d.length,m=0;m<p;m++){if(s=d[m],l=s.source,u=s.target,s.lca=null,s.sourceInLca=l,s.targetInLca=u,l==u){s.lca=l.getOwner();continue}for(h=l.getOwner();s.lca==null;){for(s.targetInLca=u,f=u.getOwner();s.lca==null;){if(f==h){s.lca=f;break}if(f==this.rootGraph)break;if(s.lca!=null)throw"assert failed";s.targetInLca=f.getParent(),f=s.targetInLca.getOwner()}if(h==this.rootGraph)break;s.lca==null&&(s.sourceInLca=h.getParent(),h=s.sourceInLca.getOwner())}if(s.lca==null)throw"assert failed"}},a.prototype.calcLowestCommonAncestor=function(s,l){if(s==l)return s.getOwner();var u=s.getOwner();do{if(u==null)break;var h=l.getOwner();do{if(h==null)break;if(h==u)return h;h=h.getParent().getOwner()}while(!0);u=u.getParent().getOwner()}while(!0);return u},a.prototype.calcInclusionTreeDepths=function(s,l){s==null&&l==null&&(s=this.rootGraph,l=1);for(var u,h=s.getNodes(),f=h.length,d=0;d<f;d++)u=h[d],u.inclusionTreeDepth=l,u.child!=null&&this.calcInclusionTreeDepths(u.child,l+1)},a.prototype.includesInvalidEdge=function(){for(var s,l=this.edges.length,u=0;u<l;u++)if(s=this.edges[u],this.isOneAncestorOfOther(s.source,s.target))return!0;return!1},t.exports=a},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";var n=r(12);function i(){}o(i,"IGeometry"),i.calcSeparationAmount=function(a,s,l,u){if(!a.intersects(s))throw"assert failed";var h=new Array(2);this.decideDirectionsForOverlappingNodes(a,s,h),l[0]=Math.min(a.getRight(),s.getRight())-Math.max(a.x,s.x),l[1]=Math.min(a.getBottom(),s.getBottom())-Math.max(a.y,s.y),a.getX()<=s.getX()&&a.getRight()>=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]<p?p=l[0]:d=l[1],l[0]=-1*h[0]*(p/2+u),l[1]=-1*h[1]*(d/2+u)},i.decideDirectionsForOverlappingNodes=function(a,s,l){a.getCenterX()<s.getCenterX()?l[0]=-1:l[0]=1,a.getCenterY()<s.getCenterY()?l[1]=-1:l[1]=1},i.getIntersection2=function(a,s,l){var u=a.getCenterX(),h=a.getCenterY(),f=s.getCenterX(),d=s.getCenterY();if(a.intersects(s))return l[0]=u,l[1]=h,l[2]=f,l[3]=d,!0;var p=a.getX(),m=a.getY(),g=a.getRight(),y=a.getX(),v=a.getBottom(),x=a.getRight(),b=a.getWidthHalf(),w=a.getHeightHalf(),C=s.getX(),T=s.getY(),E=s.getRight(),A=s.getX(),S=s.getBottom(),_=s.getRight(),I=s.getWidthHalf(),D=s.getHeightHalf(),k=!1,L=!1;if(u===f){if(h>d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(h<d)return l[0]=u,l[1]=v,l[2]=f,l[3]=T,!1}else if(h===d){if(u>f)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(u<f)return l[0]=g,l[1]=h,l[2]=C,l[3]=d,!1}else{var R=a.height/a.width,O=s.height/s.width,M=(d-h)/(f-u),B=void 0,F=void 0,P=void 0,z=void 0,$=void 0,H=void 0;if(-R===M?u>f?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):R===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===M?f>u?(l[2]=A,l[3]=S,L=!0):(l[2]=E,l[3]=T,L=!0):O===M&&(f>u?(l[2]=C,l[3]=T,L=!0):(l[2]=_,l[3]=S,L=!0)),k&&L)return!1;if(u>f?h>d?(B=this.getCardinalDirection(R,M,4),F=this.getCardinalDirection(O,M,2)):(B=this.getCardinalDirection(-R,M,3),F=this.getCardinalDirection(-O,M,1)):h>d?(B=this.getCardinalDirection(-R,M,1),F=this.getCardinalDirection(-O,M,3)):(B=this.getCardinalDirection(R,M,2),F=this.getCardinalDirection(O,M,4)),!k)switch(B){case 1:z=m,P=u+-w/M,l[0]=P,l[1]=z;break;case 2:P=x,z=h+b*M,l[0]=P,l[1]=z;break;case 3:z=v,P=u+w/M,l[0]=P,l[1]=z;break;case 4:P=y,z=h+-b*M,l[0]=P,l[1]=z;break}if(!L)switch(F){case 1:H=T,$=f+-D/M,l[2]=$,l[3]=H;break;case 2:$=_,H=d+I*M,l[2]=$,l[3]=H;break;case 3:H=S,$=f+D/M,l[2]=$,l[3]=H;break;case 4:$=A,H=d+-I*M,l[2]=$,l[3]=H;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,C=void 0,T=void 0,E=void 0,A=void 0,S=void 0,_=void 0;return w=p-f,T=h-d,A=d*f-h*p,C=v-g,E=m-y,S=y*g-m*v,_=w*E-C*T,_===0?null:(x=(T*S-E*A)/_,b=(C*A-w*S)/_,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l<a?h+=Math.PI:u<s&&(h+=this.TWO_PI)):u<s?h=this.ONE_AND_HALF_PI:h=this.HALF_PI,h},i.doIntersect=function(a,s,l,u){var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=(d-h)*(v-g)-(y-m)*(p-f);if(x===0)return!1;var b=((v-g)*(y-h)+(m-y)*(v-f))/x,w=((f-p)*(y-h)+(d-h)*(v-f))/x;return 0<b&&b<1&&0<w&&w<1},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p<d.length;p++){var m=d[p];m.enumerable=m.enumerable||!1,m.configurable=!0,"value"in m&&(m.writable=!0),Object.defineProperty(f,m.key,m)}}return o(h,"defineProperties"),function(f,d,p){return d&&h(f.prototype,d),p&&h(f,p),f}}();function i(h,f){if(!(h instanceof f))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=o(function(f){return{value:f,next:null,prev:null}},"nodeFrom"),s=o(function(f,d,p,m){return f!==null?f.next=d:m.head=d,p!==null?p.prev=d:m.tail=d,d.prev=f,d.next=p,m.length++,d},"add"),l=o(function(f,d){var p=f.prev,m=f.next;return p!==null?p.next=m:d.head=m,m!==null?m.prev=p:d.tail=p,f.prev=f.next=null,d.length--,f},"_remove"),u=function(){function h(f){var d=this;i(this,h),this.length=0,this.head=null,this.tail=null,f?.forEach(function(p){return d.push(p)})}return o(h,"LinkedList"),n(h,[{key:"size",value:o(function(){return this.length},"size")},{key:"insertBefore",value:o(function(d,p){return s(p.prev,a(d),p,this)},"insertBefore")},{key:"insertAfter",value:o(function(d,p){return s(p,a(d),p.next,this)},"insertAfter")},{key:"insertNodeBefore",value:o(function(d,p){return s(p.prev,d,p,this)},"insertNodeBefore")},{key:"insertNodeAfter",value:o(function(d,p){return s(p,d,p.next,this)},"insertNodeAfter")},{key:"push",value:o(function(d){return s(this.tail,a(d),null,this)},"push")},{key:"unshift",value:o(function(d){return s(null,a(d),this.head,this)},"unshift")},{key:"remove",value:o(function(d){return l(d,this)},"remove")},{key:"pop",value:o(function(){return l(this.tail,this).value},"pop")},{key:"popNode",value:o(function(){return l(this.tail,this)},"popNode")},{key:"shift",value:o(function(){return l(this.head,this).value},"shift")},{key:"shiftNode",value:o(function(){return l(this.head,this)},"shiftNode")},{key:"get_object_at",value:o(function(d){if(d<=this.length()){for(var p=1,m=this.head;p<d;)m=m.next,p++;return m.value}},"get_object_at")},{key:"set_object_at",value:o(function(d,p){if(d<=this.length()){for(var m=1,g=this.head;m<d;)g=g.next,m++;g.value=p}},"set_object_at")}]),h}();t.exports=u},function(t,e,r){"use strict";function n(i,a,s){this.x=null,this.y=null,i==null&&a==null&&s==null?(this.x=0,this.y=0):typeof i=="number"&&typeof a=="number"&&s==null?(this.x=i,this.y=a):i.constructor.name=="Point"&&a==null&&s==null&&(s=i,this.x=s.x,this.y=s.y)}o(n,"Point"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.getLocation=function(){return new n(this.x,this.y)},n.prototype.setLocation=function(i,a,s){i.constructor.name=="Point"&&a==null&&s==null?(s=i,this.setLocation(s.x,s.y)):typeof i=="number"&&typeof a=="number"&&s==null&&(parseInt(i)==i&&parseInt(a)==a?this.move(i,a):(this.x=Math.floor(i+.5),this.y=Math.floor(a+.5)))},n.prototype.move=function(i,a){this.x=i,this.y=a},n.prototype.translate=function(i,a){this.x+=i,this.y+=a},n.prototype.equals=function(i){if(i.constructor.name=="Point"){var a=i;return this.x==a.x&&this.y==a.y}return this==i},n.prototype.toString=function(){return new n().constructor.name+"[x="+this.x+",y="+this.y+"]"},t.exports=n},function(t,e,r){"use strict";function n(i,a,s,l){this.x=0,this.y=0,this.width=0,this.height=0,i!=null&&a!=null&&s!=null&&l!=null&&(this.x=i,this.y=a,this.width=s,this.height=l)}o(n,"RectangleD"),n.prototype.getX=function(){return this.x},n.prototype.setX=function(i){this.x=i},n.prototype.getY=function(){return this.y},n.prototype.setY=function(i){this.y=i},n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},n.prototype.getRight=function(){return this.x+this.width},n.prototype.getBottom=function(){return this.y+this.height},n.prototype.intersects=function(i){return!(this.getRight()<i.x||this.getBottom()<i.y||i.getRight()<this.x||i.getBottom()<this.y)},n.prototype.getCenterX=function(){return this.x+this.width/2},n.prototype.getMinX=function(){return this.getX()},n.prototype.getMaxX=function(){return this.getX()+this.width},n.prototype.getCenterY=function(){return this.y+this.height/2},n.prototype.getMinY=function(){return this.getY()},n.prototype.getMaxY=function(){return this.getY()+this.height},n.prototype.getWidthHalf=function(){return this.width/2},n.prototype.getHeightHalf=function(){return this.height/2},t.exports=n},function(t,e,r){"use strict";var n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(a){return typeof a}:function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};function i(){}o(i,"UniqueIDGeneretor"),i.lastID=0,i.createID=function(a){return i.isPrimitive(a)?a:(a.uniqueID!=null||(a.uniqueID=i.getString(),i.lastID++),a.uniqueID)},i.getString=function(a){return a==null&&(a=i.lastID),"Object#"+a},i.isPrimitive=function(a){var s=typeof a>"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g<m.length;g++)y[g]=m[g];return y}else return Array.from(m)}o(n,"_toConsumableArray");var i=r(0),a=r(6),s=r(3),l=r(1),u=r(5),h=r(4),f=r(17),d=r(27);function p(m){d.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,m!=null&&(this.isRemoteUse=m)}o(p,"Layout"),p.RANDOM_SEED=1,p.prototype=Object.create(d.prototype),p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},p.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},p.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},p.prototype.newGraphManager=function(){var m=new a(this);return this.graphManager=m,m},p.prototype.newGraph=function(m){return new u(null,this.graphManager,m)},p.prototype.newNode=function(m){return new s(this.graphManager,m)},p.prototype.newEdge=function(m){return new l(null,null,m)},p.prototype.checkLayoutSuccess=function(){return this.graphManager.getRoot()==null||this.graphManager.getRoot().getNodes().length==0||this.graphManager.includesInvalidEdge()},p.prototype.runLayout=function(){this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters();var m;return this.checkLayoutSuccess()?m=!1:m=this.layout(),i.ANIMATE==="during"?!1:(m&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,m)},p.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},p.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var m,g=this.graphManager.getAllEdges(),y=0;y<g.length;y++)m=g[y];for(var v,x=this.graphManager.getRoot().getNodes(),y=0;y<x.length;y++)v=x[y];this.update(this.graphManager.getRoot())}},p.prototype.update=function(m){if(m==null)this.update2();else if(m instanceof s){var g=m;if(g.getChild()!=null)for(var y=g.getChild().getNodes(),v=0;v<y.length;v++)update(y[v]);if(g.vGraphObject!=null){var x=g.vGraphObject;x.update(g)}}else if(m instanceof l){var b=m;if(b.vGraphObject!=null){var w=b.vGraphObject;w.update(b)}}else if(m instanceof u){var C=m;if(C.vGraphObject!=null){var T=C.vGraphObject;T.update(C)}}},p.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},p.prototype.transform=function(m){if(m==null)this.transform(new h(0,0));else{var g=new f,y=this.graphManager.getRoot().updateLeftTop();if(y!=null){g.setWorldOrgX(m.x),g.setWorldOrgY(m.y),g.setDeviceOrgX(y.x),g.setDeviceOrgY(y.y);for(var v=this.getAllNodes(),x,b=0;b<v.length;b++)x=v[b],x.transform(g)}}},p.prototype.positionNodesRandomly=function(m){if(m==null)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var g,y,v=m.getNodes(),x=0;x<v.length;x++)g=v[x],y=g.getChild(),y==null||y.getNodes().length==0?g.scatter():(this.positionNodesRandomly(y),g.updateBounds())},p.prototype.getFlatForest=function(){for(var m=[],g=!0,y=this.graphManager.getRoot().getNodes(),v=!0,x=0;x<y.length;x++)y[x].getChild()!=null&&(v=!1);if(!v)return m;var b=new Set,w=[],C=new Map,T=[];for(T=T.concat(y);T.length>0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var A=E.getEdges(),x=0;x<A.length;x++){var S=A[x].getOtherEnd(E);if(C.get(E)!=S)if(!b.has(S))w.push(S),C.set(S,E);else{g=!1;break}}}if(!g)m=[];else{var _=[].concat(n(b));m.push(_);for(var x=0;x<_.length;x++){var I=_[x],D=T.indexOf(I);D>-1&&T.splice(D,1)}b=new Set,C=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x<m.bendpoints.length;x++){var b=this.newNode(null);b.setRect(new Point(0,0),new Dimension(1,1)),v.add(b);var w=this.newEdge(null);this.graphManager.add(w,y,b),g.add(b),y=b}var w=this.newEdge(null);return this.graphManager.add(w,y,m.target),this.edgeToDummyNodes.set(m,g),m.isInterGraph()?this.graphManager.remove(m):v.remove(m),g},p.prototype.createBendpointsFromDummyNodes=function(){var m=[];m=m.concat(this.graphManager.getAllEdges()),m=[].concat(n(this.edgeToDummyNodes.keys())).concat(m);for(var g=0;g<m.length;g++){var y=m[g];if(y.bendpoints.length>0){for(var v=this.edgeToDummyNodes.get(y),x=0;x<v.length;x++){var b=v[x],w=new h(b.getCenterX(),b.getCenterY()),C=y.bendpoints.get(x);C.x=w.x,C.y=w.y,b.getOwner().remove(b)}this.graphManager.add(y,y.source,y.target)}}},p.transform=function(m,g,y,v){if(y!=null&&v!=null){var x=g;if(m<=50){var b=g/y;x-=(g-b)/50*(50-m)}else{var w=g*v;x+=(w-g)/50*(m-50)}return x}else{var C,T;return m<=50?(C=9*g/500,T=g/10):(C=9*g/50,T=-8*g),C*m+T}},p.findCenterOfTree=function(m){var g=[];g=g.concat(m);var y=[],v=new Map,x=!1,b=null;(g.length==1||g.length==2)&&(x=!0,b=g[0]);for(var w=0;w<g.length;w++){var C=g[w],T=C.getNeighborsList().size;v.set(C,C.getNeighborsList().size),T==1&&y.push(C)}var E=[];for(E=E.concat(y);!x;){var A=[];A=A.concat(E),E=[];for(var w=0;w<g.length;w++){var C=g[w],S=g.indexOf(C);S>=0&&g.splice(S,1);var _=C.getNeighborsList();_.forEach(function(k){if(y.indexOf(k)<0){var L=v.get(k),R=L-1;R==1&&E.push(k),v.set(k,R)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(4);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);p<d.length;p++)m[p]=d[p];return m}else return Array.from(d)}o(n,"_toConsumableArray");var i=r(15),a=r(7),s=r(0),l=r(8),u=r(9);function h(){i.call(this),this.useSmartIdealEdgeLengthCalculation=a.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=a.DEFAULT_EDGE_LENGTH,this.springConstant=a.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=a.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=a.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=a.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=a.MAX_ITERATIONS}o(h,"FDLayout"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=a.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},h.prototype.calcIdealEdgeLengths=function(){for(var d,p,m,g,y,v,x=this.getGraphManager().getAllEdges(),b=0;b<x.length;b++)d=x[b],d.idealLength=this.idealEdgeLength,d.isInterGraph&&(m=d.getSource(),g=d.getTarget(),y=d.getSourceInLca().getEstimatedSize(),v=d.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(d.idealLength+=y+v-2*s.SIMPLE_NODE_SIZE),p=d.getLca().getInclusionTreeDepth(),d.idealLength+=a.DEFAULT_EDGE_LENGTH*a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(m.getInclusionTreeDepth()+g.getInclusionTreeDepth()-2*p))},h.prototype.initSpringEmbedder=function(){var d=this.getAllNodes().length;this.incremental?(d>a.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m<d.length;m++)p=d[m],this.calcSpringForce(p,p.idealLength)},h.prototype.calcRepulsionForces=function(){var d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;m<x.length;m++)y=x[m],this.calculateRepulsionForceOfANode(y,b,d,p),b.add(y);else for(m=0;m<x.length;m++)for(y=x[m],g=m+1;g<x.length;g++)v=x[g],y.getOwner()==v.getOwner()&&this.calcRepulsionForce(y,v)},h.prototype.calcGravitationalForces=function(){for(var d,p=this.getAllNodesToApplyGravitation(),m=0;m<p.length;m++)d=p[m],this.calcGravitationalForce(d)},h.prototype.moveNodes=function(){for(var d=this.getAllNodes(),p,m=0;m<d.length;m++)p=d[m],p.move()},h.prototype.calcSpringForce=function(d,p){var m=d.getSource(),g=d.getTarget(),y,v,x,b;if(this.uniformLeafNodeSizes&&m.getChild()==null&&g.getChild()==null)d.updateLengthSimple();else if(d.updateLength(),d.isOverlapingSourceAndTarget)return;y=d.getLength(),y!=0&&(v=this.springConstant*(y-p),x=v*(d.lengthX/y),b=v*(d.lengthY/y),m.springForceX+=x,m.springForceY+=b,g.springForceX-=x,g.springForceY-=b)},h.prototype.calcRepulsionForce=function(d,p){var m=d.getRect(),g=p.getRect(),y=new Array(2),v=new Array(4),x,b,w,C,T,E,A;if(m.intersects(g)){l.calcSeparationAmount(m,g,y,a.DEFAULT_EDGE_LENGTH/2),E=2*y[0],A=2*y[1];var S=d.noOfChildren*p.noOfChildren/(d.noOfChildren+p.noOfChildren);d.repulsionForceX-=S*E,d.repulsionForceY-=S*A,p.repulsionForceX+=S*E,p.repulsionForceY+=S*A}else this.uniformLeafNodeSizes&&d.getChild()==null&&p.getChild()==null?(x=g.getCenterX()-m.getCenterX(),b=g.getCenterY()-m.getCenterY()):(l.getIntersection(m,g,v),x=v[2]-v[0],b=v[3]-v[1]),Math.abs(x)<a.MIN_REPULSION_DIST&&(x=u.sign(x)*a.MIN_REPULSION_DIST),Math.abs(b)<a.MIN_REPULSION_DIST&&(b=u.sign(b)*a.MIN_REPULSION_DIST),w=x*x+b*b,C=Math.sqrt(w),T=this.repulsionConstant*d.noOfChildren*p.noOfChildren/w,E=T*x/C,A=T*b/C,d.repulsionForceX-=E,d.repulsionForceY-=A,p.repulsionForceX+=E,p.repulsionForceY+=A},h.prototype.calcGravitationalForce=function(d){var p,m,g,y,v,x,b,w;p=d.getOwner(),m=(p.getRight()+p.getLeft())/2,g=(p.getTop()+p.getBottom())/2,y=d.getCenterX()-m,v=d.getCenterY()-g,x=Math.abs(y)+d.getWidth()/2,b=Math.abs(v)+d.getHeight()/2,d.getOwner()==this.graphManager.getRoot()?(w=p.getEstimatedSize()*this.gravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,d||p},h.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},h.prototype.calcNoOfChildrenForAllNodes=function(){for(var d,p=this.graphManager.getAllNodes(),m=0;m<p.length;m++)d=p[m],d.noOfChildren=d.getNoOfChildren()},h.prototype.calcGrid=function(d){var p=0,m=0;p=parseInt(Math.ceil((d.getRight()-d.getLeft())/this.repulsionRange)),m=parseInt(Math.ceil((d.getBottom()-d.getTop())/this.repulsionRange));for(var g=new Array(p),y=0;y<p;y++)g[y]=new Array(m);for(var y=0;y<p;y++)for(var v=0;v<m;v++)g[y][v]=new Array;return g},h.prototype.addNodeToGrid=function(d,p,m){var g=0,y=0,v=0,x=0;g=parseInt(Math.floor((d.getRect().x-p)/this.repulsionRange)),y=parseInt(Math.floor((d.getRect().width+d.getRect().x-p)/this.repulsionRange)),v=parseInt(Math.floor((d.getRect().y-m)/this.repulsionRange)),x=parseInt(Math.floor((d.getRect().height+d.getRect().y-m)/this.repulsionRange));for(var b=g;b<=y;b++)for(var w=v;w<=x;w++)this.grid[b][w].push(d),d.setGridCoordinates(g,y,v,x)},h.prototype.updateGrid=function(){var d,p,m=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),d=0;d<m.length;d++)p=m[d],this.addNodeToGrid(p,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},h.prototype.calculateRepulsionForceOfANode=function(d,p,m,g){if(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&m||g){var y=new Set;d.surrounding=new Array;for(var v,x=this.grid,b=d.startX-1;b<d.finishX+2;b++)for(var w=d.startY-1;w<d.finishY+2;w++)if(!(b<0||w<0||b>=x.length||w>=x[0].length)){for(var C=0;C<x[b][w].length;C++)if(v=x[b][w][C],!(d.getOwner()!=v.getOwner()||d==v)&&!p.has(v)&&!y.has(v)){var T=Math.abs(d.getCenterX()-v.getCenterX())-(d.getWidth()/2+v.getWidth()/2),E=Math.abs(d.getCenterY()-v.getCenterY())-(d.getHeight()/2+v.getHeight()/2);T<=this.repulsionRange&&E<=this.repulsionRange&&y.add(v)}}d.surrounding=[].concat(n(y))}for(b=0;b<d.surrounding.length;b++)this.calcRepulsionForce(d,d.surrounding[b])},h.prototype.calcRepulsionRange=function(){return 0},t.exports=h},function(t,e,r){"use strict";var n=r(1),i=r(7);function a(l,u,h){n.call(this,l,u,h),this.idealLength=i.DEFAULT_EDGE_LENGTH}o(a,"FDLayoutEdge"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];t.exports=a},function(t,e,r){"use strict";var n=r(3);function i(s,l,u,h){n.call(this,s,l,u,h),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}o(i,"FDLayoutNode"),i.prototype=Object.create(n.prototype);for(var a in n)i[a]=n[a];i.prototype.setGridCoordinates=function(s,l,u,h){this.startX=s,this.finishX=l,this.startY=u,this.finishY=h},t.exports=i},function(t,e,r){"use strict";function n(i,a){this.width=0,this.height=0,i!==null&&a!==null&&(this.height=a,this.width=i)}o(n,"DimensionD"),n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},t.exports=n},function(t,e,r){"use strict";var n=r(14);function i(){this.map={},this.keys=[]}o(i,"HashMap"),i.prototype.put=function(a,s){var l=n.createID(a);this.contains(l)||(this.map[l]=s,this.keys.push(a))},i.prototype.contains=function(a){var s=n.createID(a);return this.map[a]!=null},i.prototype.get=function(a){var s=n.createID(a);return this.map[s]},i.prototype.keySet=function(){return this.keys},t.exports=i},function(t,e,r){"use strict";var n=r(14);function i(){this.set={}}o(i,"HashSet"),i.prototype.add=function(a){var s=n.createID(a);this.contains(s)||(this.set[s]=a)},i.prototype.remove=function(a){delete this.set[n.createID(a)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(a){return this.set[n.createID(a)]==a},i.prototype.isEmpty=function(){return this.size()===0},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(a){for(var s=Object.keys(this.set),l=s.length,u=0;u<l;u++)a.push(this.set[s[u]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(a){for(var s=a.length,l=0;l<s;l++){var u=a[l];this.add(u)}},t.exports=i},function(t,e,r){"use strict";var n=function(){function l(u,h){for(var f=0;f<h.length;f++){var d=h[f];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(u,d.key,d)}}return o(l,"defineProperties"),function(u,h,f){return h&&l(u.prototype,h),f&&l(u,f),u}}();function i(l,u){if(!(l instanceof u))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=r(11),s=function(){function l(u,h){i(this,l),(h!==null||h!==void 0)&&(this.compareFunction=this._defaultCompareFunction);var f=void 0;u instanceof a?f=u.size():f=u.length,this._quicksort(u,0,f-1)}return o(l,"Quicksort"),n(l,[{key:"_quicksort",value:o(function(h,f,d){if(f<d){var p=this._partition(h,f,d);this._quicksort(h,f,p),this._quicksort(h,p+1,d)}},"_quicksort")},{key:"_partition",value:o(function(h,f,d){for(var p=this._get(h,f),m=f,g=d;;){for(;this.compareFunction(p,this._get(h,g));)g--;for(;this.compareFunction(this._get(h,m),p);)m++;if(m<g)this._swap(h,m,g),m++,g--;else return g}},"_partition")},{key:"_get",value:o(function(h,f){return h instanceof a?h.get_object_at(f):h[f]},"_get")},{key:"_set",value:o(function(h,f,d){h instanceof a?h.set_object_at(f,d):h[f]=d},"_set")},{key:"_swap",value:o(function(h,f,d){var p=this._get(h,f);this._set(h,f,this._get(h,d)),this._set(h,d,p)},"_swap")},{key:"_defaultCompareFunction",value:o(function(h,f){return f>h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h<u.length;h++){var f=u[h];f.enumerable=f.enumerable||!1,f.configurable=!0,"value"in f&&(f.writable=!0),Object.defineProperty(l,f.key,f)}}return o(s,"defineProperties"),function(l,u,h){return u&&s(l.prototype,u),h&&s(l,h),l}}();function i(s,l){if(!(s instanceof l))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=function(){function s(l,u){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p<this.iMax;p++){this.grid[p]=new Array(this.jMax);for(var m=0;m<this.jMax;m++)this.grid[p][m]=0}this.tracebackGrid=new Array(this.iMax);for(var g=0;g<this.iMax;g++){this.tracebackGrid[g]=new Array(this.jMax);for(var y=0;y<this.jMax;y++)this.tracebackGrid[g][y]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return o(s,"NeedlemanWunsch"),n(s,[{key:"getScore",value:o(function(){return this.score},"getScore")},{key:"getAlignments",value:o(function(){return this.alignments},"getAlignments")},{key:"computeGrids",value:o(function(){for(var u=1;u<this.jMax;u++)this.grid[0][u]=this.grid[0][u-1]+this.gap_penalty,this.tracebackGrid[0][u]=[!1,!1,!0];for(var h=1;h<this.iMax;h++)this.grid[h][0]=this.grid[h-1][0]+this.gap_penalty,this.tracebackGrid[h][0]=[!1,!0,!1];for(var f=1;f<this.iMax;f++)for(var d=1;d<this.jMax;d++){var p=void 0;this.sequence1[f-1]===this.sequence2[d-1]?p=this.grid[f-1][d-1]+this.match_score:p=this.grid[f-1][d-1]+this.mismatch_penalty;var m=this.grid[f-1][d]+this.gap_penalty,g=this.grid[f][d-1]+this.gap_penalty,y=[p,m,g],v=this.arrayAllMaxIndexes(y);this.grid[f][d]=y[v[0]],this.tracebackGrid[f][d]=[v.includes(0),v.includes(1),v.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]},"computeGrids")},{key:"alignmentTraceback",value:o(function(){var u=[];for(u.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});u[0];){var h=u[0],f=this.tracebackGrid[h.pos[0]][h.pos[1]];f[0]&&u.push({pos:[h.pos[0]-1,h.pos[1]-1],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),f[1]&&u.push({pos:[h.pos[0]-1,h.pos[1]],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:"-"+h.seq2}),f[2]&&u.push({pos:[h.pos[0],h.pos[1]-1],seq1:"-"+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),h.pos[0]===0&&h.pos[1]===0&&this.alignments.push({sequence1:h.seq1,sequence2:h.seq2}),u.shift()}return this.alignments},"alignmentTraceback")},{key:"getAllIndexes",value:o(function(u,h){for(var f=[],d=-1;(d=u.indexOf(h,d+1))!==-1;)f.push(d);return f},"getAllIndexes")},{key:"arrayAllMaxIndexes",value:o(function(u){return this.getAllIndexes(u,Math.max.apply(null,u))},"arrayAllMaxIndexes")}]),s}();t.exports=a},function(t,e,r){"use strict";var n=o(function(){},"layoutBase");n.FDLayout=r(18),n.FDLayoutConstants=r(7),n.FDLayoutEdge=r(19),n.FDLayoutNode=r(20),n.DimensionD=r(21),n.HashMap=r(22),n.HashSet=r(23),n.IGeometry=r(8),n.IMath=r(9),n.Integer=r(10),n.Point=r(12),n.PointD=r(4),n.RandomSeed=r(16),n.RectangleD=r(13),n.Transform=r(17),n.UniqueIDGeneretor=r(14),n.Quicksort=r(24),n.LinkedList=r(11),n.LGraphObject=r(2),n.LGraph=r(5),n.LEdge=r(1),n.LGraphManager=r(6),n.LNode=r(3),n.Layout=r(15),n.LayoutConstants=r(0),n.NeedlemanWunsch=r(25),t.exports=n},function(t,e,r){"use strict";function n(){this.listeners=[]}o(n,"Emitter");var i=n.prototype;i.addListener=function(a,s){this.listeners.push({event:a,callback:s})},i.removeListener=function(a,s){for(var l=this.listeners.length;l>=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l<this.listeners.length;l++){var u=this.listeners[l];a===u.event&&u.callback(s)}},t.exports=n}])})});var AB=Mi((h4,CB)=>{"use strict";o(function(e,r){typeof h4=="object"&&typeof CB=="object"?CB.exports=r(SB()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof h4=="object"?h4.coseBase=r(SB()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(h4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=7)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in i)a[s]=i[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=i.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutEdge;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraph;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraphManager;function a(l){i.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutNode,a=n(0).IMath;function s(u,h,f,d){i.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p<f.length;p++)d=f[p],d.getChild()==null?(d.moveBy(u,h),d.displacementX+=u,d.displacementY+=h):d.propogateDisplacementToChildren(u,h)},s.prototype.setPred1=function(u){this.pred1=u},s.prototype.getPred1=function(){return pred1},s.prototype.getPred2=function(){return pred2},s.prototype.setNext=function(u){this.next=u},s.prototype.getNext=function(){return next},s.prototype.setProcessed=function(u){this.processed=u},s.prototype.isProcessed=function(){return processed},e.exports=s},function(e,r,n){"use strict";var i=n(0).FDLayout,a=n(4),s=n(3),l=n(5),u=n(2),h=n(1),f=n(0).FDLayoutConstants,d=n(0).LayoutConstants,p=n(0).Point,m=n(0).PointD,g=n(0).Layout,y=n(0).Integer,v=n(0).IGeometry,x=n(0).LGraph,b=n(0).Transform;function w(){i.call(this),this.toBeTiled={}}o(w,"CoSELayout"),w.prototype=Object.create(i.prototype);for(var C in i)w[C]=i[C];w.prototype.newGraphManager=function(){var T=new a(this);return this.graphManager=T,T},w.prototype.newGraph=function(T){return new s(null,this.graphManager,T)},w.prototype.newNode=function(T){return new l(this.graphManager,T)},w.prototype.newEdge=function(T){return new u(null,null,T)},w.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.isSubLayout||(h.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=h.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=h.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=f.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=f.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=f.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=f.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=f.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=f.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/f.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=f.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},w.prototype.layout=function(){var T=d.DEFAULT_CREATE_BENDS_AS_NEEDED;return T&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},w.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(h.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),A=this.nodesWithGravity.filter(function(I){return E.has(I)});this.graphManager.setAllNodesToApplyGravitation(A)}}else{var T=this.getFlatForest();if(T.length>0)this.positionNodesRadially(T);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),A=this.nodesWithGravity.filter(function(S){return E.has(S)});this.graphManager.setAllNodesToApplyGravitation(A),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},w.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%f.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var T=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(_){return T.has(_)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var A=!this.isTreeGrowing&&!this.isGrowthFinished,S=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(A,S),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},w.prototype.getPositionsData=function(){for(var T=this.graphManager.getAllNodes(),E={},A=0;A<T.length;A++){var S=T[A].rect,_=T[A].id;E[_]={id:_,x:S.getCenterX(),y:S.getCenterY(),w:S.width,h:S.height}}return E},w.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var T=!1;if(f.ANIMATE==="during")this.emit("layoutstarted");else{for(;!T;)T=this.tick();this.graphManager.updateBounds()}},w.prototype.calculateNodesToApplyGravitationTo=function(){var T=[],E,A=this.graphManager.getGraphs(),S=A.length,_;for(_=0;_<S;_++)E=A[_],E.updateConnected(),E.isConnected||(T=T.concat(E.getNodes()));return T},w.prototype.createBendpoints=function(){var T=[];T=T.concat(this.graphManager.getAllEdges());var E=new Set,A;for(A=0;A<T.length;A++){var S=T[A];if(!E.has(S)){var _=S.getSource(),I=S.getTarget();if(_==I)S.getBendpoints().push(new m),S.getBendpoints().push(new m),this.createDummyNodesForBendpoints(S),E.add(S);else{var D=[];if(D=D.concat(_.getEdgeListToNode(I)),D=D.concat(I.getEdgeListToNode(_)),!E.has(D[0])){if(D.length>1){var k;for(k=0;k<D.length;k++){var L=D[k];L.getBendpoints().push(new m),this.createDummyNodesForBendpoints(L)}}D.forEach(function(R){E.add(R)})}}}if(E.size==T.length)break}},w.prototype.positionNodesRadially=function(T){for(var E=new p(0,0),A=Math.ceil(Math.sqrt(T.length)),S=0,_=0,I=0,D=new m(0,0),k=0;k<T.length;k++){k%A==0&&(I=0,_=S,k!=0&&(_+=h.DEFAULT_COMPONENT_SEPERATION),S=0);var L=T[k],R=g.findCenterOfTree(L);E.x=I,E.y=_,D=w.radialLayout(L,R,E),D.y>S&&(S=Math.floor(D.y)),I=Math.floor(D.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-D.x/2,d.WORLD_CENTER_Y-D.y/2))},w.radialLayout=function(T,E,A){var S=Math.max(this.maxDiagonalInTree(T),h.DEFAULT_RADIAL_SEPARATION);w.branchRadialLayout(E,null,0,359,0,S);var _=x.calculateBounds(T),I=new b;I.setDeviceOrgX(_.getMinX()),I.setDeviceOrgY(_.getMinY()),I.setWorldOrgX(A.x),I.setWorldOrgY(A.y);for(var D=0;D<T.length;D++){var k=T[D];k.transform(I)}var L=new m(_.getMaxX(),_.getMaxY());return I.inverseTransformPoint(L)},w.branchRadialLayout=function(T,E,A,S,_,I){var D=(S-A+1)/2;D<0&&(D+=180);var k=(D+A)%360,L=k*v.TWO_PI/360,R=Math.cos(L),O=_*Math.cos(L),M=_*Math.sin(L);T.setCenter(O,M);var B=[];B=B.concat(T.getEdges());var F=B.length;E!=null&&F--;for(var P=0,z=B.length,$,H=T.getEdgesBetween(E);H.length>1;){var Q=H[0];H.splice(0,1);var j=B.indexOf(Q);j>=0&&B.splice(j,1),z--,F--}E!=null?$=(B.indexOf(H[0])+1)%z:$=0;for(var ie=Math.abs(S-A)/F,ne=$;P!=F;ne=++ne%z){var le=B[ne].getOtherEnd(T);if(le!=E){var he=(A+P*ie)%360,K=(he+ie)%360;w.branchRadialLayout(le,T,he,K,_+I,I),P++}}},w.maxDiagonalInTree=function(T){for(var E=y.MIN_VALUE,A=0;A<T.length;A++){var S=T[A],_=S.getDiagonal();_>E&&(E=_)}return E},w.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},w.prototype.groupZeroDegreeMembers=function(){var T=this,E={};this.memberGroups={},this.idToDummyNode={};for(var A=[],S=this.graphManager.getAllNodes(),_=0;_<S.length;_++){var I=S[_],D=I.getParent();this.getNodeDegreeWithChildren(I)===0&&(D.id==null||!this.getToBeTiled(D))&&A.push(I)}for(var _=0;_<A.length;_++){var I=A[_],k=I.getParent().id;typeof E[k]>"u"&&(E[k]=[]),E[k]=E[k].concat(I)}Object.keys(E).forEach(function(L){if(E[L].length>1){var R="DummyCompound_"+L;T.memberGroups[R]=E[L];var O=E[L][0].getParent(),M=new l(T.graphManager);M.id=R,M.paddingLeft=O.paddingLeft||0,M.paddingRight=O.paddingRight||0,M.paddingBottom=O.paddingBottom||0,M.paddingTop=O.paddingTop||0,T.idToDummyNode[R]=M;var B=T.getGraphManager().add(T.newGraph(),M),F=O.getChild();F.add(M);for(var P=0;P<E[L].length;P++){var z=E[L][P];F.remove(z),B.add(z)}}})},w.prototype.clearCompounds=function(){var T={},E={};this.performDFSOnCompounds();for(var A=0;A<this.compoundOrder.length;A++)E[this.compoundOrder[A].id]=this.compoundOrder[A],T[this.compoundOrder[A].id]=[].concat(this.compoundOrder[A].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[A].getChild()),this.compoundOrder[A].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(T,E)},w.prototype.clearZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(A){var S=T.idToDummyNode[A];E[A]=T.tileNodes(T.memberGroups[A],S.paddingLeft+S.paddingRight),S.rect.width=E[A].width,S.rect.height=E[A].height})},w.prototype.repopulateCompounds=function(){for(var T=this.compoundOrder.length-1;T>=0;T--){var E=this.compoundOrder[T],A=E.id,S=E.paddingLeft,_=E.paddingTop;this.adjustLocations(this.tiledMemberPack[A],E.rect.x,E.rect.y,S,_)}},w.prototype.repopulateZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(A){var S=T.idToDummyNode[A],_=S.paddingLeft,I=S.paddingTop;T.adjustLocations(E[A],S.rect.x,S.rect.y,_,I)})},w.prototype.getToBeTiled=function(T){var E=T.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var A=T.getChild();if(A==null)return this.toBeTiled[E]=!1,!1;for(var S=A.getNodes(),_=0;_<S.length;_++){var I=S[_];if(this.getNodeDegree(I)>0)return this.toBeTiled[E]=!1,!1;if(I.getChild()==null){this.toBeTiled[I.id]=!1;continue}if(!this.getToBeTiled(I))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},w.prototype.getNodeDegree=function(T){for(var E=T.id,A=T.getEdges(),S=0,_=0;_<A.length;_++){var I=A[_];I.getSource().id!==I.getTarget().id&&(S=S+1)}return S},w.prototype.getNodeDegreeWithChildren=function(T){var E=this.getNodeDegree(T);if(T.getChild()==null)return E;for(var A=T.getChild().getNodes(),S=0;S<A.length;S++){var _=A[S];E+=this.getNodeDegreeWithChildren(_)}return E},w.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},w.prototype.fillCompexOrderByDFS=function(T){for(var E=0;E<T.length;E++){var A=T[E];A.getChild()!=null&&this.fillCompexOrderByDFS(A.getChild().getNodes()),this.getToBeTiled(A)&&this.compoundOrder.push(A)}},w.prototype.adjustLocations=function(T,E,A,S,_){E+=S,A+=_;for(var I=E,D=0;D<T.rows.length;D++){var k=T.rows[D];E=I;for(var L=0,R=0;R<k.length;R++){var O=k[R];O.rect.x=E,O.rect.y=A,E+=O.rect.width+T.horizontalPadding,O.rect.height>L&&(L=O.rect.height)}A+=L+T.verticalPadding}},w.prototype.tileCompoundMembers=function(T,E){var A=this;this.tiledMemberPack=[],Object.keys(T).forEach(function(S){var _=E[S];A.tiledMemberPack[S]=A.tileNodes(T[S],_.paddingLeft+_.paddingRight),_.rect.width=A.tiledMemberPack[S].width,_.rect.height=A.tiledMemberPack[S].height})},w.prototype.tileNodes=function(T,E){var A=h.TILING_PADDING_VERTICAL,S=h.TILING_PADDING_HORIZONTAL,_={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:A,horizontalPadding:S};T.sort(function(k,L){return k.rect.width*k.rect.height>L.rect.width*L.rect.height?-1:k.rect.width*k.rect.height<L.rect.width*L.rect.height?1:0});for(var I=0;I<T.length;I++){var D=T[I];_.rows.length==0?this.insertNodeToRow(_,D,0,E):this.canAddHorizontal(_,D.rect.width,D.rect.height)?this.insertNodeToRow(_,D,this.getShortestRowIndex(_),E):this.insertNodeToRow(_,D,_.rows.length,E),this.shiftToLastRow(_)}return _},w.prototype.insertNodeToRow=function(T,E,A,S){var _=S;if(A==T.rows.length){var I=[];T.rows.push(I),T.rowWidth.push(_),T.rowHeight.push(0)}var D=T.rowWidth[A]+E.rect.width;T.rows[A].length>0&&(D+=T.horizontalPadding),T.rowWidth[A]=D,T.width<D&&(T.width=D);var k=E.rect.height;A>0&&(k+=T.verticalPadding);var L=0;k>T.rowHeight[A]&&(L=T.rowHeight[A],T.rowHeight[A]=k,L=T.rowHeight[A]-L),T.height+=L,T.rows[A].push(E)},w.prototype.getShortestRowIndex=function(T){for(var E=-1,A=Number.MAX_VALUE,S=0;S<T.rows.length;S++)T.rowWidth[S]<A&&(E=S,A=T.rowWidth[S]);return E},w.prototype.getLongestRowIndex=function(T){for(var E=-1,A=Number.MIN_VALUE,S=0;S<T.rows.length;S++)T.rowWidth[S]>A&&(E=S,A=T.rowWidth[S]);return E},w.prototype.canAddHorizontal=function(T,E,A){var S=this.getShortestRowIndex(T);if(S<0)return!0;var _=T.rowWidth[S];if(_+T.horizontalPadding+E<=T.width)return!0;var I=0;T.rowHeight[S]<A&&S>0&&(I=A+T.verticalPadding-T.rowHeight[S]);var D;T.width-_>=E+T.horizontalPadding?D=(T.height+I)/(_+E+T.horizontalPadding):D=(T.height+I)/T.width,I=A+T.verticalPadding;var k;return T.width<E?k=(T.height+I)/E:k=(T.height+I)/T.width,k<1&&(k=1/k),D<1&&(D=1/D),D<k},w.prototype.shiftToLastRow=function(T){var E=this.getLongestRowIndex(T),A=T.rowWidth.length-1,S=T.rows[E],_=S[S.length-1],I=_.width+T.horizontalPadding;if(T.width-T.rowWidth[A]>I&&E!=A){S.splice(-1,1),T.rows[A].push(_),T.rowWidth[E]=T.rowWidth[E]-I,T.rowWidth[A]=T.rowWidth[A]+I,T.width=T.rowWidth[instance.getLongestRowIndex(T)];for(var D=Number.MIN_VALUE,k=0;k<S.length;k++)S[k].height>D&&(D=S[k].height);E>0&&(D+=T.verticalPadding);var L=T.rowHeight[E]+T.rowHeight[A];T.rowHeight[E]=D,T.rowHeight[A]<_.height+T.verticalPadding&&(T.rowHeight[A]=_.height+T.verticalPadding);var R=T.rowHeight[E]+T.rowHeight[A];T.height+=R-L,this.shiftToLastRow(T)}},w.prototype.tilingPreLayout=function(){h.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},w.prototype.tilingPostLayout=function(){h.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},w.prototype.reduceTrees=function(){for(var T=[],E=!0,A;E;){var S=this.graphManager.getAllNodes(),_=[];E=!1;for(var I=0;I<S.length;I++)A=S[I],A.getEdges().length==1&&!A.getEdges()[0].isInterGraph&&A.getChild()==null&&(_.push([A,A.getEdges()[0],A.getOwner()]),E=!0);if(E==!0){for(var D=[],k=0;k<_.length;k++)_[k][0].getEdges().length==1&&(D.push(_[k]),_[k][0].getOwner().remove(_[k][0]));T.push(D),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=T},w.prototype.growTree=function(T){for(var E=T.length,A=T[E-1],S,_=0;_<A.length;_++)S=A[_],this.findPlaceforPrunedNode(S),S[2].add(S[0]),S[2].add(S[1],S[1].source,S[1].target);T.splice(T.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},w.prototype.findPlaceforPrunedNode=function(T){var E,A,S=T[0];S==T[1].source?A=T[1].target:A=T[1].source;var _=A.startX,I=A.finishX,D=A.startY,k=A.finishY,L=0,R=0,O=0,M=0,B=[L,O,R,M];if(D>0)for(var F=_;F<=I;F++)B[0]+=this.grid[F][D-1].length+this.grid[F][D].length-1;if(I<this.grid.length-1)for(var F=D;F<=k;F++)B[1]+=this.grid[I+1][F].length+this.grid[I][F].length-1;if(k<this.grid[0].length-1)for(var F=_;F<=I;F++)B[2]+=this.grid[F][k+1].length+this.grid[F][k].length-1;if(_>0)for(var F=D;F<=k;F++)B[3]+=this.grid[_-1][F].length+this.grid[_][F].length-1;for(var P=y.MAX_VALUE,z,$,H=0;H<B.length;H++)B[H]<P?(P=B[H],z=1,$=H):B[H]==P&&z++;if(z==3&&P==0)B[0]==0&&B[1]==0&&B[2]==0?E=1:B[0]==0&&B[1]==0&&B[3]==0?E=0:B[0]==0&&B[2]==0&&B[3]==0?E=3:B[1]==0&&B[2]==0&&B[3]==0&&(E=2);else if(z==2&&P==0){var Q=Math.floor(Math.random()*2);B[0]==0&&B[1]==0?Q==0?E=0:E=1:B[0]==0&&B[2]==0?Q==0?E=0:E=2:B[0]==0&&B[3]==0?Q==0?E=0:E=3:B[1]==0&&B[2]==0?Q==0?E=1:E=2:B[1]==0&&B[3]==0?Q==0?E=1:E=3:Q==0?E=2:E=3}else if(z==4&&P==0){var Q=Math.floor(Math.random()*4);E=Q}else E=$;E==0?S.setCenter(A.getCenterX(),A.getCenterY()-A.getHeight()/2-f.DEFAULT_EDGE_LENGTH-S.getHeight()/2):E==1?S.setCenter(A.getCenterX()+A.getWidth()/2+f.DEFAULT_EDGE_LENGTH+S.getWidth()/2,A.getCenterY()):E==2?S.setCenter(A.getCenterX(),A.getCenterY()+A.getHeight()/2+f.DEFAULT_EDGE_LENGTH+S.getHeight()/2):S.setCenter(A.getCenterX()-A.getWidth()/2-f.DEFAULT_EDGE_LENGTH-S.getWidth()/2,A.getCenterY())},e.exports=w},function(e,r,n){"use strict";var i={};i.layoutBase=n(0),i.CoSEConstants=n(1),i.CoSEEdge=n(2),i.CoSEGraph=n(3),i.CoSEGraphManager=n(4),i.CoSELayout=n(6),i.CoSENode=n(5),e.exports=i}])})});var Gge=Mi((f4,_B)=>{"use strict";o(function(e,r){typeof f4=="object"&&typeof _B=="object"?_B.exports=r(AB()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof f4=="object"?f4.cytoscapeCoseBilkent=r(AB()):e.cytoscapeCoseBilkent=r(e.coseBase)},"webpackUniversalModuleDefinition")(f4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=1)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).layoutBase.LayoutConstants,a=n(0).layoutBase.FDLayoutConstants,s=n(0).CoSEConstants,l=n(0).CoSELayout,u=n(0).CoSENode,h=n(0).layoutBase.PointD,f=n(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var w in v)b[w]=v[w];for(var w in x)b[w]=x[w];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?i.QUALITY=0:x.quality=="proof"?i.QUALITY=2:i.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=i.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,w=this.idToLNode={},C=this.layout=new l,T=this;T.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var E=C.newGraphManager();this.gm=E;var A=this.options.eles.nodes(),S=this.options.eles.edges();this.root=E.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(A),C);for(var _=0;_<S.length;_++){var I=S[_],D=this.idToLNode[I.data("source")],k=this.idToLNode[I.data("target")];if(D!==k&&D.getEdgesBetween(k).length==0){var L=E.add(C.newEdge(),D,k);L.id=I.id()}}var R=o(function(B,F){typeof B=="number"&&(B=F);var P=B.data("id"),z=T.idToLNode[P];return{x:z.getRect().getCenterX(),y:z.getRect().getCenterY()}},"getPositions"),O=o(function M(){for(var B=o(function(){b.fit&&b.cy.fit(b.eles,b.padding),v||(v=!0,T.cy.one("layoutready",b.ready),T.cy.trigger({type:"layoutready",layout:T}))},"afterReposition"),F=T.options.refresh,P,z=0;z<F&&!P;z++)P=T.stopped||T.layout.tick();if(P){C.checkLayoutSuccess()&&!C.isSubLayout&&C.doPostLayout(),C.tilingPostLayout&&C.tilingPostLayout(),C.isLayoutFinished=!0,T.options.eles.nodes().positions(R),B(),T.cy.one("layoutstop",T.options.stop),T.cy.trigger({type:"layoutstop",layout:T}),x&&cancelAnimationFrame(x),v=!1;return}var $=T.layout.getPositionsData();b.eles.nodes().positions(function(H,Q){if(typeof H=="number"&&(H=Q),!H.isParent()){for(var j=H.id(),ie=$[j],ne=H;ie==null&&(ie=$[ne.data("parent")]||$["DummyCompound_"+ne.data("parent")],$[j]=ie,ne=ne.parent()[0],ne!=null););return ie!=null?{x:ie.x,y:ie.y}:{x:H.position("x"),y:H.position("y")}}}),B(),x=requestAnimationFrame(M)},"iterateAnimated");return C.addListener("layoutstarted",function(){T.options.animate==="during"&&(x=requestAnimationFrame(O))}),C.runLayout(),this.options.animate!=="during"&&(T.options.eles.nodes().not(":parent").layoutPositions(T,T.options,R),v=!1),this},m.prototype.getTopMostNodes=function(v){for(var x={},b=0;b<v.length;b++)x[v[b].id()]=!0;var w=v.filter(function(C,T){typeof C=="number"&&(C=T);for(var E=C.parent()[0];E!=null;){if(x[E.id()])return!1;E=E.parent()[0]}return!0});return w},m.prototype.processChildrenList=function(v,x,b){for(var w=x.length,C=0;C<w;C++){var T=x[C],E=T.children(),A,S=T.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if(T.outerWidth()!=null&&T.outerHeight()!=null?A=v.add(new u(b.graphManager,new h(T.position("x")-S.w/2,T.position("y")-S.h/2),new f(parseFloat(S.w),parseFloat(S.h)))):A=v.add(new u(this.graphManager)),A.id=T.data("id"),A.paddingLeft=parseInt(T.css("padding")),A.paddingTop=parseInt(T.css("padding")),A.paddingRight=parseInt(T.css("padding")),A.paddingBottom=parseInt(T.css("padding")),this.options.nodeDimensionsIncludeLabels&&T.isParent()){var _=T.boundingBox({includeLabels:!0,includeNodes:!1}).w,I=T.boundingBox({includeLabels:!0,includeNodes:!1}).h,D=T.css("text-halign");A.labelWidth=_,A.labelHeight=I,A.labelPos=D}if(this.idToLNode[T.data("id")]=A,isNaN(A.rect.x)&&(A.rect.x=0),isNaN(A.rect.y)&&(A.rect.y=0),E!=null&&E.length>0){var k;k=b.getGraphManager().add(b.newGraph(),A),this.processChildrenList(k,E,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y}])})});function JZe(t,e,r,n,i){return t.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+(i.width-e)/2+", "+r+")")}var YZe,XZe,jZe,KZe,QZe,ZZe,eJe,tJe,Vge,Uge,Hge=N(()=>{"use strict";to();ir();YZe=12,XZe=o(function(t,e,r,n){e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 ${r.height-5} v${-r.height+2*5} q0,-5 5,-5 h${r.width-2*5} q5,0 5,5 v${r.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",r.height).attr("x2",r.width).attr("y2",r.height)},"defaultBkg"),jZe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("width",r.width)},"rectBkg"),KZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n,s=.25*n,l=.35*n,u=.2*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${n*.25},${-1*n*.1} | |
| 2156 | + a${l},${l} 1 0,1 ${n*.4},${-1*n*.1} | |
| 2157 | + a${s},${s} 1 0,1 ${n*.35},${1*n*.2} | |
| 2158 | + | |
| 2159 | + a${a},${a} 1 0,1 ${n*.15},${1*i*.35} | |
| 2160 | + a${u},${u} 1 0,1 ${-1*n*.15},${1*i*.65} | |
| 2161 | + | |
| 2162 | + a${s},${a} 1 0,1 ${-1*n*.25},${n*.15} | |
| 2163 | + a${l},${l} 1 0,1 ${-1*n*.5},0 | |
| 2164 | + a${a},${a} 1 0,1 ${-1*n*.25},${-1*n*.15} | |
| 2165 | + | |
| 2166 | + a${a},${a} 1 0,1 ${-1*n*.1},${-1*i*.35} | |
| 2167 | + a${u},${u} 1 0,1 ${n*.1},${-1*i*.65} | |
| 2168 | + | |
| 2169 | + H0 V0 Z`)},"cloudBkg"),QZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${n*.25},${-1*i*.1} | |
| 2170 | + a${a},${a} 1 0,0 ${n*.25},0 | |
| 2171 | + a${a},${a} 1 0,0 ${n*.25},0 | |
| 2172 | + a${a},${a} 1 0,0 ${n*.25},${1*i*.1} | |
| 2173 | + | |
| 2174 | + a${a},${a} 1 0,0 ${n*.15},${1*i*.33} | |
| 2175 | + a${a*.8},${a*.8} 1 0,0 0,${1*i*.34} | |
| 2176 | + a${a},${a} 1 0,0 ${-1*n*.15},${1*i*.33} | |
| 2177 | + | |
| 2178 | + a${a},${a} 1 0,0 ${-1*n*.25},${i*.15} | |
| 2179 | + a${a},${a} 1 0,0 ${-1*n*.25},0 | |
| 2180 | + a${a},${a} 1 0,0 ${-1*n*.25},0 | |
| 2181 | + a${a},${a} 1 0,0 ${-1*n*.25},${-1*i*.15} | |
| 2182 | + | |
| 2183 | + a${a},${a} 1 0,0 ${-1*n*.1},${-1*i*.33} | |
| 2184 | + a${a*.8},${a*.8} 1 0,0 0,${-1*i*.34} | |
| 2185 | + a${a},${a} 1 0,0 ${n*.1},${-1*i*.33} | |
| 2186 | + | |
| 2187 | + H0 V0 Z`)},"bangBkg"),ZZe=o(function(t,e,r){e.append("circle").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("r",r.width/2)},"circleBkg");o(JZe,"insertPolygonShape");eJe=o(function(t,e,r){let n=r.height,a=n/4,s=r.width-r.padding+2*a,l=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-n/2},{x:s-a,y:-n},{x:a,y:-n},{x:0,y:-n/2}];JZe(e,s,n,l,r)},"hexagonBkg"),tJe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("rx",r.padding).attr("ry",r.padding).attr("width",r.width)},"roundedRectBkg"),Vge=o(async function(t,e,r,n,i){let a=i.htmlLabels,s=n%(YZe-1),l=e.append("g");r.section=s;let u="section-"+s;s<0&&(u+=" section-root"),l.attr("class",(r.class?r.class+" ":"")+"mindmap-node "+u);let h=l.append("g"),f=l.append("g"),d=r.descr.replace(/(<br\/*>)/g,` | |
| 2188 | +`);await Hn(f,d,{useHtmlLabels:a,width:r.width,classes:"mindmap-node-label"},i),a||f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");let p=f.node().getBBox(),[m]=Bo(i.fontSize);if(r.height=p.height+m*1.1*.5+r.padding,r.width=p.width+2*r.padding,r.icon)if(r.type===t.nodeType.CIRCLE)r.height+=50,r.width+=50,l.append("foreignObject").attr("height","50px").attr("width",r.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+r.width/2+", "+(r.height/2-1.5*r.padding)+")");else{r.width+=50;let g=r.height;r.height=Math.max(g,60);let y=Math.abs(r.height-g);l.append("foreignObject").attr("width","60px").attr("height",r.height).attr("style","text-align: center;margin-top:"+y/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+(25+r.width/2)+", "+(y/2+r.padding/2)+")")}else if(a){let g=(r.width-p.width)/2,y=(r.height-p.height)/2;f.attr("transform","translate("+g+", "+y+")")}else{let g=r.width/2,y=r.padding/2;f.attr("transform","translate("+g+", "+y+")")}switch(r.type){case t.nodeType.DEFAULT:XZe(t,h,r,s);break;case t.nodeType.ROUNDED_RECT:tJe(t,h,r,s);break;case t.nodeType.RECT:jZe(t,h,r,s);break;case t.nodeType.CIRCLE:h.attr("transform","translate("+r.width/2+", "+ +r.height/2+")"),ZZe(t,h,r,s);break;case t.nodeType.CLOUD:KZe(t,h,r,s);break;case t.nodeType.BANG:QZe(t,h,r,s);break;case t.nodeType.HEXAGON:eJe(t,h,r,s);break}return t.setElementForId(r.id,l),r.height},"drawNode"),Uge=o(function(t,e){let r=t.getElementById(e.id),n=e.x||0,i=e.y||0;r.attr("transform","translate("+n+","+i+")")},"positionNode")});async function qge(t,e,r,n,i){await Vge(t,e,r,n,i),r.children&&await Promise.all(r.children.map((a,s)=>qge(t,e,a,n<0?s:n,i)))}function rJe(t,e){e.edges().map((r,n)=>{let i=r.data();if(r[0]._private.bodyBounds){let a=r[0]._private.rscratch;Y.trace("Edge: ",n,i),t.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}})}function Yge(t,e,r,n){e.add({group:"nodes",data:{id:t.id.toString(),labelText:t.descr,height:t.height,width:t.width,level:n,nodeId:t.id,padding:t.padding,type:t.type},position:{x:t.x,y:t.y}}),t.children&&t.children.forEach(i=>{Yge(i,e,r,n+1),e.add({group:"edges",data:{id:`${t.id}_${i.id}`,source:t.id,target:i.id,depth:n,section:i.section}})})}function nJe(t,e){return new Promise(r=>{let n=Ge("body").append("div").attr("id","cy").attr("style","display:none"),i=rl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});n.remove(),Yge(t,i,e,0),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}}),i.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),i.ready(a=>{Y.info("Ready",a),r(i)})})}function iJe(t,e){e.nodes().map((r,n)=>{let i=r.data();i.x=r.position().x,i.y=r.position().y,Uge(t,i);let a=t.getElementById(i.nodeId);Y.info("Id:",n,"Position: (",r.position().x,", ",r.position().y,")",i),a.attr("transform",`translate(${r.position().x-i.width/2}, ${r.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)})}var Wge,aJe,Xge,jge=N(()=>{"use strict";kB();Wge=Sa(Gge(),1);dr();zt();vt();Vc();Ei();Hge();Ya();rl.use(Wge.default);o(qge,"drawNodes");o(rJe,"drawEdges");o(Yge,"addNodes");o(nJe,"layoutMindmap");o(iJe,"positionNodes");aJe=o(async(t,e,r,n)=>{Y.debug(`Rendering mindmap diagram | |
| 2189 | +`+t);let i=n.db,a=i.getMindmap();if(!a)return;let s=me();s.htmlLabels=!1;let l=sa(e),u=l.append("g");u.attr("class","mindmap-edges");let h=l.append("g");h.attr("class","mindmap-nodes"),await qge(i,h,a,-1,s);let f=await nJe(a,s);rJe(u,f),iJe(i,f),Ao(void 0,l,s.mindmap?.padding??or.mindmap.padding,s.mindmap?.useMaxWidth??or.mindmap.useMaxWidth)},"draw"),Xge={draw:aJe}});var sJe,oJe,Kge,Qge=N(()=>{"use strict";Ys();sJe=o(t=>{let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)t["lineColor"+r]=t["lineColor"+r]||t["cScaleInv"+r],ca(t["lineColor"+r])?t["lineColor"+r]=Dt(t["lineColor"+r],20):t["lineColor"+r]=Ot(t["lineColor"+r],20);for(let r=0;r<t.THEME_COLOR_LIMIT;r++){let n=""+(17-3*r);e+=` | |
| 2190 | + .section-${r-1} rect, .section-${r-1} path, .section-${r-1} circle, .section-${r-1} polygon, .section-${r-1} path { | |
| 2191 | + fill: ${t["cScale"+r]}; | |
| 2192 | + } | |
| 2193 | + .section-${r-1} text { | |
| 2194 | + fill: ${t["cScaleLabel"+r]}; | |
| 2195 | + } | |
| 2196 | + .node-icon-${r-1} { | |
| 2197 | + font-size: 40px; | |
| 2198 | + color: ${t["cScaleLabel"+r]}; | |
| 2199 | + } | |
| 2200 | + .section-edge-${r-1}{ | |
| 2201 | + stroke: ${t["cScale"+r]}; | |
| 2202 | + } | |
| 2203 | + .edge-depth-${r-1}{ | |
| 2204 | + stroke-width: ${n}; | |
| 2205 | + } | |
| 2206 | + .section-${r-1} line { | |
| 2207 | + stroke: ${t["cScaleInv"+r]} ; | |
| 2208 | + stroke-width: 3; | |
| 2209 | + } | |
| 2210 | + | |
| 2211 | + .disabled, .disabled circle, .disabled text { | |
| 2212 | + fill: lightgray; | |
| 2213 | + } | |
| 2214 | + .disabled text { | |
| 2215 | + fill: #efefef; | |
| 2216 | + } | |
| 2217 | + `}return e},"genSections"),oJe=o(t=>` | |
| 2218 | + .edge { | |
| 2219 | + stroke-width: 3; | |
| 2220 | + } | |
| 2221 | + ${sJe(t)} | |
| 2222 | + .section-root rect, .section-root path, .section-root circle, .section-root polygon { | |
| 2223 | + fill: ${t.git0}; | |
| 2224 | + } | |
| 2225 | + .section-root text { | |
| 2226 | + fill: ${t.gitBranchLabel0}; | |
| 2227 | + } | |
| 2228 | + .icon-container { | |
| 2229 | + height:100%; | |
| 2230 | + display: flex; | |
| 2231 | + justify-content: center; | |
| 2232 | + align-items: center; | |
| 2233 | + } | |
| 2234 | + .edge { | |
| 2235 | + fill: none; | |
| 2236 | + } | |
| 2237 | + .mindmap-node-label { | |
| 2238 | + dy: 1em; | |
| 2239 | + alignment-baseline: middle; | |
| 2240 | + text-anchor: middle; | |
| 2241 | + dominant-baseline: middle; | |
| 2242 | + text-align: center; | |
| 2243 | + } | |
| 2244 | +`,"getStyles"),Kge=oJe});var Zge={};hr(Zge,{diagram:()=>lJe});var lJe,Jge=N(()=>{"use strict";Spe();_pe();jge();Qge();lJe={db:Ape,renderer:Xge,parser:Epe,styles:Kge}});var DB,r1e,n1e=N(()=>{"use strict";DB=function(){var t=o(function(A,S,_,I){for(_=_||{},I=A.length;I--;_[A[I]]=S);return _},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],w=[1,38],C={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(S,_,I,D,k,L,R){var O=L.length-1;switch(k){case 6:case 7:return D;case 8:D.getLogger().trace("Stop NL ");break;case 9:D.getLogger().trace("Stop EOF ");break;case 11:D.getLogger().trace("Stop NL2 ");break;case 12:D.getLogger().trace("Stop EOF2 ");break;case 15:D.getLogger().info("Node: ",L[O-1].id),D.addNode(L[O-2].length,L[O-1].id,L[O-1].descr,L[O-1].type,L[O]);break;case 16:D.getLogger().info("Node: ",L[O].id),D.addNode(L[O-1].length,L[O].id,L[O].descr,L[O].type);break;case 17:D.getLogger().trace("Icon: ",L[O]),D.decorateNode({icon:L[O]});break;case 18:case 23:D.decorateNode({class:L[O]});break;case 19:D.getLogger().trace("SPACELIST");break;case 20:D.getLogger().trace("Node: ",L[O-1].id),D.addNode(0,L[O-1].id,L[O-1].descr,L[O-1].type,L[O]);break;case 21:D.getLogger().trace("Node: ",L[O].id),D.addNode(0,L[O].id,L[O].descr,L[O].type);break;case 22:D.decorateNode({icon:L[O]});break;case 27:D.getLogger().trace("node found ..",L[O-2]),this.$={id:L[O-1],descr:L[O-1],type:D.getType(L[O-2],L[O])};break;case 28:this.$={id:L[O],descr:L[O],type:0};break;case 29:D.getLogger().trace("node found ..",L[O-3]),this.$={id:L[O-3],descr:L[O-1],type:D.getType(L[O-2],L[O])};break;case 30:this.$=L[O-1]+L[O];break;case 31:this.$=L[O];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:w}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:w}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(S,_){if(_.recoverable)this.trace(S);else{var I=new Error(S);throw I.hash=_,I}},"parseError"),parse:o(function(S){var _=this,I=[0],D=[],k=[null],L=[],R=this.table,O="",M=0,B=0,F=0,P=2,z=1,$=L.slice.call(arguments,1),H=Object.create(this.lexer),Q={yy:{}};for(var j in this.yy)Object.prototype.hasOwnProperty.call(this.yy,j)&&(Q.yy[j]=this.yy[j]);H.setInput(S,Q.yy),Q.yy.lexer=H,Q.yy.parser=this,typeof H.yylloc>"u"&&(H.yylloc={});var ie=H.yylloc;L.push(ie);var ne=H.options&&H.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function le(ze){I.length=I.length-2*ze,k.length=k.length-ze,L.length=L.length-ze}o(le,"popStack");function he(){var ze;return ze=D.pop()||H.lex()||z,typeof ze!="number"&&(ze instanceof Array&&(D=ze,ze=D.pop()),ze=_.symbols_[ze]||ze),ze}o(he,"lex");for(var K,X,te,J,se,ue,Z={},Se,ce,ae,Oe;;){if(te=I[I.length-1],this.defaultActions[te]?J=this.defaultActions[te]:((K===null||typeof K>"u")&&(K=he()),J=R[te]&&R[te][K]),typeof J>"u"||!J.length||!J[0]){var ge="";Oe=[];for(Se in R[te])this.terminals_[Se]&&Se>P&&Oe.push("'"+this.terminals_[Se]+"'");H.showPosition?ge="Parse error on line "+(M+1)+`: | |
| 2245 | +`+H.showPosition()+` | |
| 2246 | +Expecting `+Oe.join(", ")+", got '"+(this.terminals_[K]||K)+"'":ge="Parse error on line "+(M+1)+": Unexpected "+(K==z?"end of input":"'"+(this.terminals_[K]||K)+"'"),this.parseError(ge,{text:H.match,token:this.terminals_[K]||K,line:H.yylineno,loc:ie,expected:Oe})}if(J[0]instanceof Array&&J.length>1)throw new Error("Parse Error: multiple actions possible at state: "+te+", token: "+K);switch(J[0]){case 1:I.push(K),k.push(H.yytext),L.push(H.yylloc),I.push(J[1]),K=null,X?(K=X,X=null):(B=H.yyleng,O=H.yytext,M=H.yylineno,ie=H.yylloc,F>0&&F--);break;case 2:if(ce=this.productions_[J[1]][1],Z.$=k[k.length-ce],Z._$={first_line:L[L.length-(ce||1)].first_line,last_line:L[L.length-1].last_line,first_column:L[L.length-(ce||1)].first_column,last_column:L[L.length-1].last_column},ne&&(Z._$.range=[L[L.length-(ce||1)].range[0],L[L.length-1].range[1]]),ue=this.performAction.apply(Z,[O,B,M,Q.yy,J[1],k,L].concat($)),typeof ue<"u")return ue;ce&&(I=I.slice(0,-1*ce*2),k=k.slice(0,-1*ce),L=L.slice(0,-1*ce)),I.push(this.productions_[J[1]][0]),k.push(Z.$),L.push(Z._$),ae=R[I[I.length-2]][I[I.length-1]],I.push(ae);break;case 3:return!0}}return!0},"parse")},T=function(){var A={EOF:1,parseError:o(function(_,I){if(this.yy.parser)this.yy.parser.parseError(_,I);else throw new Error(_)},"parseError"),setInput:o(function(S,_){return this.yy=_||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var _=S.match(/(?:\r\n?|\n).*/g);return _?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var _=S.length,I=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-_),this.offset-=_;var D=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),I.length-1&&(this.yylineno-=I.length-1);var k=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:I?(I.length===D.length?this.yylloc.first_column:0)+D[D.length-I.length].length-I[0].length:this.yylloc.first_column-_},this.options.ranges&&(this.yylloc.range=[k[0],k[0]+this.yyleng-_]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 2247 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),_=new Array(S.length+1).join("-");return S+this.upcomingInput()+` | |
| 2248 | +`+_+"^"},"showPosition"),test_match:o(function(S,_){var I,D,k;if(this.options.backtrack_lexer&&(k={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(k.yylloc.range=this.yylloc.range.slice(0))),D=S[0].match(/(?:\r\n?|\n).*/g),D&&(this.yylineno+=D.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:D?D[D.length-1].length-D[D.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],I=this.performAction.call(this,this.yy,this,_,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),I)return I;if(this._backtrack){for(var L in k)this[L]=k[L];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,_,I,D;this._more||(this.yytext="",this.match="");for(var k=this._currentRules(),L=0;L<k.length;L++)if(I=this._input.match(this.rules[k[L]]),I&&(!_||I[0].length>_[0].length)){if(_=I,D=L,this.options.backtrack_lexer){if(S=this.test_match(I,k[L]),S!==!1)return S;if(this._backtrack){_=!1;continue}else return!1}else if(!this.options.flex)break}return _?(S=this.test_match(_,k[D]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 2249 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var _=this.next();return _||this.lex()},"lex"),begin:o(function(_){this.conditionStack.push(_)},"begin"),popState:o(function(){var _=this.conditionStack.length-1;return _>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(_){return _=this.conditionStack.length-1-Math.abs(_||0),_>=0?this.conditionStack[_]:"INITIAL"},"topState"),pushState:o(function(_){this.begin(_)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(_,I,D,k){var L=k;switch(D){case 0:return this.pushState("shapeData"),I.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let R=/\n\s*/g;return I.yytext=I.yytext.replace(R,"<br/>"),24;break;case 4:return 24;case 5:this.popState();break;case 6:return _.getLogger().trace("Found comment",I.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:_.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return _.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:_.getLogger().trace("end icon"),this.popState();break;case 16:return _.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return _.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return _.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return _.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:_.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return _.getLogger().trace("description:",I.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),_.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),_.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),_.getLogger().trace("node end ...",I.yytext),"NODE_DEND";break;case 36:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),_.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),_.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return _.getLogger().trace("Long description:",I.yytext),21;break;case 42:return _.getLogger().trace("Long description:",I.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return A}();C.lexer=T;function E(){this.yy={}}return o(E,"Parser"),E.prototype=C,C.Parser=E,new E}();DB.parser=DB;r1e=DB});var nl,RB,LB,NB,fJe,dJe,i1e,pJe,mJe,Yi,gJe,yJe,vJe,xJe,bJe,wJe,TJe,a1e,s1e=N(()=>{"use strict";zt();gr();vt();Ya();Ew();nl=[],RB=[],LB=0,NB={},fJe=o(()=>{nl=[],RB=[],LB=0,NB={}},"clear"),dJe=o(t=>{if(nl.length===0)return null;let e=nl[0].level,r=null;for(let n=nl.length-1;n>=0;n--)if(nl[n].level===e&&!r&&(r=nl[n]),nl[n].level<e)throw new Error('Items without section detected, found section ("'+nl[n].label+'")');return t===r?.level?null:r},"getSection"),i1e=o(function(){return RB},"getSections"),pJe=o(function(){let t=[],e=[],r=i1e(),n=me();for(let i of r){let a={id:i.id,label:Tr(i.label??"",n),isGroup:!0,ticket:i.ticket,shape:"kanbanSection",level:i.level,look:n.look};e.push(a);let s=nl.filter(l=>l.parentId===i.id);for(let l of s){let u={id:l.id,parentId:i.id,label:Tr(l.label??"",n),isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:me()}},"getData"),mJe=o((t,e,r,n,i)=>{let a=me(),s=a.mindmap?.padding??or.mindmap.padding;switch(n){case Yi.ROUNDED_RECT:case Yi.RECT:case Yi.HEXAGON:s*=2}let l={id:Tr(e,a)||"kbn"+LB++,level:t,label:Tr(r,a),width:a.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(i!==void 0){let h;i.includes(` | |
| 2250 | +`)?h=i+` | |
| 2251 | +`:h=`{ | |
| 2252 | +`+i+` | |
| 2253 | +}`;let f=cm(h,{schema:lm});if(f.shape&&(f.shape!==f.shape.toLowerCase()||f.shape.includes("_")))throw new Error(`No such shape: ${f.shape}. Shape names should be lowercase.`);f?.shape&&f.shape==="kanbanItem"&&(l.shape=f?.shape),f?.label&&(l.label=f?.label),f?.icon&&(l.icon=f?.icon.toString()),f?.assigned&&(l.assigned=f?.assigned.toString()),f?.ticket&&(l.ticket=f?.ticket.toString()),f?.priority&&(l.priority=f?.priority)}let u=dJe(t);u?l.parentId=u.id||"kbn"+LB++:RB.push(l),nl.push(l)},"addNode"),Yi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},gJe=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Yi.RECT;case"(":return e===")"?Yi.ROUNDED_RECT:Yi.CLOUD;case"((":return Yi.CIRCLE;case")":return Yi.CLOUD;case"))":return Yi.BANG;case"{{":return Yi.HEXAGON;default:return Yi.DEFAULT}},"getType"),yJe=o((t,e)=>{NB[t]=e},"setElementForId"),vJe=o(t=>{if(!t)return;let e=me(),r=nl[nl.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.cssClasses=Tr(t.class,e))},"decorateNode"),xJe=o(t=>{switch(t){case Yi.DEFAULT:return"no-border";case Yi.RECT:return"rect";case Yi.ROUNDED_RECT:return"rounded-rect";case Yi.CIRCLE:return"circle";case Yi.CLOUD:return"cloud";case Yi.BANG:return"bang";case Yi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),bJe=o(()=>Y,"getLogger"),wJe=o(t=>NB[t],"getElementById"),TJe={clear:fJe,addNode:mJe,getSections:i1e,getData:pJe,nodeType:Yi,getType:gJe,setElementForId:yJe,decorateNode:vJe,type2Str:xJe,getLogger:bJe,getElementById:wJe},a1e=TJe});var kJe,o1e,l1e=N(()=>{"use strict";zt();vt();Vc();Ei();Ya();Hw();eT();kJe=o(async(t,e,r,n)=>{Y.debug(`Rendering kanban diagram | |
| 2254 | +`+t);let a=n.db.getData(),s=me();s.htmlLabels=!1;let l=sa(e),u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await ym(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,w=-b*3/2+g,C=w,T=a.nodes.filter(S=>S.parentId===v.id);for(let S of T){if(S.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");S.x=v.x,S.width=b-1.5*p;let I=(await vm(h,S,{config:s})).node().getBBox();S.y=C+I.height/2,await k2(S),C=S.y+I.height/2+p/2}let E=x.cluster.select("rect"),A=Math.max(C-w+3*p,50)+(g-25);E.attr("height",A)}Ao(void 0,l,s.mindmap?.padding??or.kanban.padding,s.mindmap?.useMaxWidth??or.kanban.useMaxWidth)},"draw"),o1e={draw:kJe}});var EJe,SJe,c1e,u1e=N(()=>{"use strict";Ys();EJe=o(t=>{let e="";for(let n=0;n<t.THEME_COLOR_LIMIT;n++)t["lineColor"+n]=t["lineColor"+n]||t["cScaleInv"+n],ca(t["lineColor"+n])?t["lineColor"+n]=Dt(t["lineColor"+n],20):t["lineColor"+n]=Ot(t["lineColor"+n],20);let r=o((n,i)=>t.darkMode?Ot(n,i):Dt(n,i),"adjuster");for(let n=0;n<t.THEME_COLOR_LIMIT;n++){let i=""+(17-3*n);e+=` | |
| 2255 | + .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} polygon, .section-${n-1} path { | |
| 2256 | + fill: ${r(t["cScale"+n],10)}; | |
| 2257 | + stroke: ${r(t["cScale"+n],10)}; | |
| 2258 | + | |
| 2259 | + } | |
| 2260 | + .section-${n-1} text { | |
| 2261 | + fill: ${t["cScaleLabel"+n]}; | |
| 2262 | + } | |
| 2263 | + .node-icon-${n-1} { | |
| 2264 | + font-size: 40px; | |
| 2265 | + color: ${t["cScaleLabel"+n]}; | |
| 2266 | + } | |
| 2267 | + .section-edge-${n-1}{ | |
| 2268 | + stroke: ${t["cScale"+n]}; | |
| 2269 | + } | |
| 2270 | + .edge-depth-${n-1}{ | |
| 2271 | + stroke-width: ${i}; | |
| 2272 | + } | |
| 2273 | + .section-${n-1} line { | |
| 2274 | + stroke: ${t["cScaleInv"+n]} ; | |
| 2275 | + stroke-width: 3; | |
| 2276 | + } | |
| 2277 | + | |
| 2278 | + .disabled, .disabled circle, .disabled text { | |
| 2279 | + fill: lightgray; | |
| 2280 | + } | |
| 2281 | + .disabled text { | |
| 2282 | + fill: #efefef; | |
| 2283 | + } | |
| 2284 | + | |
| 2285 | + .node rect, | |
| 2286 | + .node circle, | |
| 2287 | + .node ellipse, | |
| 2288 | + .node polygon, | |
| 2289 | + .node path { | |
| 2290 | + fill: ${t.background}; | |
| 2291 | + stroke: ${t.nodeBorder}; | |
| 2292 | + stroke-width: 1px; | |
| 2293 | + } | |
| 2294 | + | |
| 2295 | + .kanban-ticket-link { | |
| 2296 | + fill: ${t.background}; | |
| 2297 | + stroke: ${t.nodeBorder}; | |
| 2298 | + text-decoration: underline; | |
| 2299 | + } | |
| 2300 | + `}return e},"genSections"),SJe=o(t=>` | |
| 2301 | + .edge { | |
| 2302 | + stroke-width: 3; | |
| 2303 | + } | |
| 2304 | + ${EJe(t)} | |
| 2305 | + .section-root rect, .section-root path, .section-root circle, .section-root polygon { | |
| 2306 | + fill: ${t.git0}; | |
| 2307 | + } | |
| 2308 | + .section-root text { | |
| 2309 | + fill: ${t.gitBranchLabel0}; | |
| 2310 | + } | |
| 2311 | + .icon-container { | |
| 2312 | + height:100%; | |
| 2313 | + display: flex; | |
| 2314 | + justify-content: center; | |
| 2315 | + align-items: center; | |
| 2316 | + } | |
| 2317 | + .edge { | |
| 2318 | + fill: none; | |
| 2319 | + } | |
| 2320 | + .cluster-label, .label { | |
| 2321 | + color: ${t.textColor}; | |
| 2322 | + fill: ${t.textColor}; | |
| 2323 | + } | |
| 2324 | + .kanban-label { | |
| 2325 | + dy: 1em; | |
| 2326 | + alignment-baseline: middle; | |
| 2327 | + text-anchor: middle; | |
| 2328 | + dominant-baseline: middle; | |
| 2329 | + text-align: center; | |
| 2330 | + } | |
| 2331 | +`,"getStyles"),c1e=SJe});var h1e={};hr(h1e,{diagram:()=>CJe});var CJe,f1e=N(()=>{"use strict";n1e();s1e();l1e();u1e();CJe={db:a1e,renderer:o1e,parser:r1e,styles:c1e}});var MB,d4,m1e=N(()=>{"use strict";MB=function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],n=[1,5,10,12],i={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(n,[2,8]),t(n,[2,9]),{19:[1,16]},t(n,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(n,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,w=2,C=1,T=m.slice.call(arguments,1),E=Object.create(this.lexer),A={yy:{}};for(var S in this.yy)Object.prototype.hasOwnProperty.call(this.yy,S)&&(A.yy[S]=this.yy[S]);E.setInput(u,A.yy),A.yy.lexer=E,A.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var _=E.yylloc;m.push(_);var I=E.options&&E.options.ranges;typeof A.yy.parseError=="function"?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function D(ie){f.length=f.length-2*ie,p.length=p.length-ie,m.length=m.length-ie}o(D,"popStack");function k(){var ie;return ie=d.pop()||E.lex()||C,typeof ie!="number"&&(ie instanceof Array&&(d=ie,ie=d.pop()),ie=h.symbols_[ie]||ie),ie}o(k,"lex");for(var L,R,O,M,B,F,P={},z,$,H,Q;;){if(O=f[f.length-1],this.defaultActions[O]?M=this.defaultActions[O]:((L===null||typeof L>"u")&&(L=k()),M=g[O]&&g[O][L]),typeof M>"u"||!M.length||!M[0]){var j="";Q=[];for(z in g[O])this.terminals_[z]&&z>w&&Q.push("'"+this.terminals_[z]+"'");E.showPosition?j="Parse error on line "+(v+1)+`: | |
| 2332 | +`+E.showPosition()+` | |
| 2333 | +Expecting `+Q.join(", ")+", got '"+(this.terminals_[L]||L)+"'":j="Parse error on line "+(v+1)+": Unexpected "+(L==C?"end of input":"'"+(this.terminals_[L]||L)+"'"),this.parseError(j,{text:E.match,token:this.terminals_[L]||L,line:E.yylineno,loc:_,expected:Q})}if(M[0]instanceof Array&&M.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+L);switch(M[0]){case 1:f.push(L),p.push(E.yytext),m.push(E.yylloc),f.push(M[1]),L=null,R?(L=R,R=null):(x=E.yyleng,y=E.yytext,v=E.yylineno,_=E.yylloc,b>0&&b--);break;case 2:if($=this.productions_[M[1]][1],P.$=p[p.length-$],P._$={first_line:m[m.length-($||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-($||1)].first_column,last_column:m[m.length-1].last_column},I&&(P._$.range=[m[m.length-($||1)].range[0],m[m.length-1].range[1]]),F=this.performAction.apply(P,[y,x,v,A.yy,M[1],p,m].concat(T)),typeof F<"u")return F;$&&(f=f.slice(0,-1*$*2),p=p.slice(0,-1*$),m=m.slice(0,-1*$)),f.push(this.productions_[M[1]][0]),p.push(P.$),m.push(P._$),H=g[f[f.length-2]][f[f.length-1]],f.push(H);break;case 3:return!0}}return!0},"parse")},a=function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 2334 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+` | |
| 2335 | +`+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;m<p.length;m++)if(f=this._input.match(this.rules[p[m]]),f&&(!h||f[0].length>h[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 2336 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;break;case 5:return 20;case 6:return this.popState("escaped_text"),18;break;case 7:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return l}();i.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=i,i.Parser=s,new s}();MB.parser=MB;d4=MB});var XS,jS,YS,LJe,IB,RJe,OB,NJe,MJe,IJe,OJe,g1e,y1e=N(()=>{"use strict";zt();gr();mi();XS=[],jS=[],YS=new Map,LJe=o(()=>{XS=[],jS=[],YS=new Map,Ar()},"clear"),IB=class{constructor(e,r,n=0){this.source=e;this.target=r;this.value=n}static{o(this,"SankeyLink")}},RJe=o((t,e,r)=>{XS.push(new IB(t,e,r))},"addLink"),OB=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},NJe=o(t=>{t=Ze.sanitizeText(t,me());let e=YS.get(t);return e===void 0&&(e=new OB(t),YS.set(t,e),jS.push(e)),e},"findOrCreateNode"),MJe=o(()=>jS,"getNodes"),IJe=o(()=>XS,"getLinks"),OJe=o(()=>({nodes:jS.map(t=>({id:t.ID})),links:XS.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),g1e={nodesMap:YS,getConfig:o(()=>me().sankey,"getConfig"),getNodes:MJe,getLinks:IJe,getGraph:OJe,addLink:RJe,findOrCreateNode:NJe,getAccTitle:Rr,setAccTitle:Lr,getAccDescription:Mr,setAccDescription:Nr,getDiagramTitle:Ir,setDiagramTitle:$r,clear:LJe}});function p4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r<n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r<i||r===void 0&&i>=i)&&(r=i)}return r}var v1e=N(()=>{"use strict";o(p4,"max")});function cy(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var x1e=N(()=>{"use strict";o(cy,"min")});function uy(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}var b1e=N(()=>{"use strict";o(uy,"sum")});var PB=N(()=>{"use strict";v1e();x1e();b1e()});function PJe(t){return t.target.depth}function BB(t){return t.depth}function FB(t,e){return e-1-t.height}function m4(t,e){return t.sourceLinks.length?t.depth:e-1}function $B(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?cy(t.sourceLinks,PJe)-1:0}var zB=N(()=>{"use strict";PB();o(PJe,"targetDepth");o(BB,"left");o(FB,"right");o(m4,"justify");o($B,"center")});function hy(t){return function(){return t}}var w1e=N(()=>{"use strict";o(hy,"constant")});function T1e(t,e){return KS(t.source,e.source)||t.index-e.index}function k1e(t,e){return KS(t.target,e.target)||t.index-e.index}function KS(t,e){return t.y0-e.y0}function GB(t){return t.value}function BJe(t){return t.index}function FJe(t){return t.nodes}function $Je(t){return t.links}function E1e(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function S1e({nodes:t}){for(let e of t){let r=e.y0,n=r;for(let i of e.sourceLinks)i.y0=r+i.width/2,r+=i.width;for(let i of e.targetLinks)i.y1=n+i.width/2,n+=i.width}}function QS(){let t=0,e=0,r=1,n=1,i=24,a=8,s,l=BJe,u=m4,h,f,d=FJe,p=$Je,m=6;function g(){let O={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(O),v(O),x(O),b(O),T(O),S1e(O),O}o(g,"sankey"),g.update=function(O){return S1e(O),O},g.nodeId=function(O){return arguments.length?(l=typeof O=="function"?O:hy(O),g):l},g.nodeAlign=function(O){return arguments.length?(u=typeof O=="function"?O:hy(O),g):u},g.nodeSort=function(O){return arguments.length?(h=O,g):h},g.nodeWidth=function(O){return arguments.length?(i=+O,g):i},g.nodePadding=function(O){return arguments.length?(a=s=+O,g):a},g.nodes=function(O){return arguments.length?(d=typeof O=="function"?O:hy(O),g):d},g.links=function(O){return arguments.length?(p=typeof O=="function"?O:hy(O),g):p},g.linkSort=function(O){return arguments.length?(f=O,g):f},g.size=function(O){return arguments.length?(t=e=0,r=+O[0],n=+O[1],g):[r-t,n-e]},g.extent=function(O){return arguments.length?(t=+O[0][0],r=+O[1][0],e=+O[0][1],n=+O[1][1],g):[[t,e],[r,n]]},g.iterations=function(O){return arguments.length?(m=+O,g):m};function y({nodes:O,links:M}){for(let[F,P]of O.entries())P.index=F,P.sourceLinks=[],P.targetLinks=[];let B=new Map(O.map((F,P)=>[l(F,P,O),F]));for(let[F,P]of M.entries()){P.index=F;let{source:z,target:$}=P;typeof z!="object"&&(z=P.source=E1e(B,z)),typeof $!="object"&&($=P.target=E1e(B,$)),z.sourceLinks.push(P),$.targetLinks.push(P)}if(f!=null)for(let{sourceLinks:F,targetLinks:P}of O)F.sort(f),P.sort(f)}o(y,"computeNodeLinks");function v({nodes:O}){for(let M of O)M.value=M.fixedValue===void 0?Math.max(uy(M.sourceLinks,GB),uy(M.targetLinks,GB)):M.fixedValue}o(v,"computeNodeValues");function x({nodes:O}){let M=O.length,B=new Set(O),F=new Set,P=0;for(;B.size;){for(let z of B){z.depth=P;for(let{target:$}of z.sourceLinks)F.add($)}if(++P>M)throw new Error("circular link");B=F,F=new Set}}o(x,"computeNodeDepths");function b({nodes:O}){let M=O.length,B=new Set(O),F=new Set,P=0;for(;B.size;){for(let z of B){z.height=P;for(let{source:$}of z.targetLinks)F.add($)}if(++P>M)throw new Error("circular link");B=F,F=new Set}}o(b,"computeNodeHeights");function w({nodes:O}){let M=p4(O,P=>P.depth)+1,B=(r-t-i)/(M-1),F=new Array(M);for(let P of O){let z=Math.max(0,Math.min(M-1,Math.floor(u.call(null,P,M))));P.layer=z,P.x0=t+z*B,P.x1=P.x0+i,F[z]?F[z].push(P):F[z]=[P]}if(h)for(let P of F)P.sort(h);return F}o(w,"computeNodeLayers");function C(O){let M=cy(O,B=>(n-e-(B.length-1)*s)/uy(B,GB));for(let B of O){let F=e;for(let P of B){P.y0=F,P.y1=F+P.value*M,F=P.y1+s;for(let z of P.sourceLinks)z.width=z.value*M}F=(n-F+s)/(B.length+1);for(let P=0;P<B.length;++P){let z=B[P];z.y0+=F*(P+1),z.y1+=F*(P+1)}k(B)}}o(C,"initializeNodeBreadths");function T(O){let M=w(O);s=Math.min(a,(n-e)/(p4(M,B=>B.length)-1)),C(M);for(let B=0;B<m;++B){let F=Math.pow(.99,B),P=Math.max(1-F,(B+1)/m);A(M,F,P),E(M,F,P)}}o(T,"computeNodeBreadths");function E(O,M,B){for(let F=1,P=O.length;F<P;++F){let z=O[F];for(let $ of z){let H=0,Q=0;for(let{source:ie,value:ne}of $.targetLinks){let le=ne*($.layer-ie.layer);H+=L(ie,$)*le,Q+=le}if(!(Q>0))continue;let j=(H/Q-$.y0)*M;$.y0+=j,$.y1+=j,D($)}h===void 0&&z.sort(KS),S(z,B)}}o(E,"relaxLeftToRight");function A(O,M,B){for(let F=O.length,P=F-2;P>=0;--P){let z=O[P];for(let $ of z){let H=0,Q=0;for(let{target:ie,value:ne}of $.sourceLinks){let le=ne*(ie.layer-$.layer);H+=R($,ie)*le,Q+=le}if(!(Q>0))continue;let j=(H/Q-$.y0)*M;$.y0+=j,$.y1+=j,D($)}h===void 0&&z.sort(KS),S(z,B)}}o(A,"relaxRightToLeft");function S(O,M){let B=O.length>>1,F=O[B];I(O,F.y0-s,B-1,M),_(O,F.y1+s,B+1,M),I(O,n,O.length-1,M),_(O,e,0,M)}o(S,"resolveCollisions");function _(O,M,B,F){for(;B<O.length;++B){let P=O[B],z=(M-P.y0)*F;z>1e-6&&(P.y0+=z,P.y1+=z),M=P.y1+s}}o(_,"resolveCollisionsTopToBottom");function I(O,M,B,F){for(;B>=0;--B){let P=O[B],z=(P.y1-M)*F;z>1e-6&&(P.y0-=z,P.y1-=z),M=P.y0-s}}o(I,"resolveCollisionsBottomToTop");function D({sourceLinks:O,targetLinks:M}){if(f===void 0){for(let{source:{sourceLinks:B}}of M)B.sort(k1e);for(let{target:{targetLinks:B}}of O)B.sort(T1e)}}o(D,"reorderNodeLinks");function k(O){if(f===void 0)for(let{sourceLinks:M,targetLinks:B}of O)M.sort(k1e),B.sort(T1e)}o(k,"reorderLinks");function L(O,M){let B=O.y0-(O.sourceLinks.length-1)*s/2;for(let{target:F,width:P}of O.sourceLinks){if(F===M)break;B+=P+s}for(let{source:F,width:P}of M.targetLinks){if(F===O)break;B-=P}return B}o(L,"targetTop");function R(O,M){let B=M.y0-(M.targetLinks.length-1)*s/2;for(let{source:F,width:P}of M.targetLinks){if(F===O)break;B+=P+s}for(let{target:F,width:P}of O.sourceLinks){if(F===M)break;B-=P}return B}return o(R,"sourceTop"),g}var C1e=N(()=>{"use strict";PB();zB();w1e();o(T1e,"ascendingSourceBreadth");o(k1e,"ascendingTargetBreadth");o(KS,"ascendingBreadth");o(GB,"value");o(BJe,"defaultId");o(FJe,"defaultNodes");o($Je,"defaultLinks");o(E1e,"find");o(S1e,"computeLinkBreadths");o(QS,"Sankey")});function HB(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function A1e(){return new HB}var VB,UB,Xp,zJe,WB,_1e=N(()=>{"use strict";VB=Math.PI,UB=2*VB,Xp=1e-6,zJe=UB-Xp;o(HB,"Path");o(A1e,"path");HB.prototype=A1e.prototype={constructor:HB,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,l=r-t,u=n-e,h=a-t,f=s-e,d=h*h+f*f;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>Xp)if(!(Math.abs(f*l-u*h)>Xp)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=n-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=i*Math.tan((VB-Math.acos((g+d-y)/(2*v*x)))/2),w=b/x,C=b/v;Math.abs(w-1)>Xp&&(this._+="L"+(t+w*h)+","+(e+w*f)),this._+="A"+i+","+i+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+C*l)+","+(this._y1=e+C*u)}},"arcTo"),arc:o(function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),l=r*Math.sin(n),u=t+s,h=e+l,f=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>Xp||Math.abs(this._y1-h)>Xp)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%UB+UB),d>zJe?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>Xp&&(this._+="A"+r+","+r+",0,"+ +(d>=VB)+","+f+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},"arc"),rect:o(function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};WB=A1e});var D1e=N(()=>{"use strict";_1e()});function ZS(t){return o(function(){return t},"constant")}var L1e=N(()=>{"use strict";o(ZS,"default")});function R1e(t){return t[0]}function N1e(t){return t[1]}var M1e=N(()=>{"use strict";o(R1e,"x");o(N1e,"y")});var I1e,O1e=N(()=>{"use strict";I1e=Array.prototype.slice});function GJe(t){return t.source}function VJe(t){return t.target}function UJe(t){var e=GJe,r=VJe,n=R1e,i=N1e,a=null;function s(){var l,u=I1e.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=WB()),t(a,+n.apply(this,(u[0]=h,u)),+i.apply(this,u),+n.apply(this,(u[0]=f,u)),+i.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(n=typeof l=="function"?l:ZS(+l),s):n},s.y=function(l){return arguments.length?(i=typeof l=="function"?l:ZS(+l),s):i},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function HJe(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function qB(){return UJe(HJe)}var P1e=N(()=>{"use strict";D1e();O1e();L1e();M1e();o(GJe,"linkSource");o(VJe,"linkTarget");o(UJe,"link");o(HJe,"curveHorizontal");o(qB,"linkHorizontal")});var B1e=N(()=>{"use strict";P1e()});function WJe(t){return[t.source.x1,t.y0]}function qJe(t){return[t.target.x0,t.y1]}function JS(){return qB().source(WJe).target(qJe)}var F1e=N(()=>{"use strict";B1e();o(WJe,"horizontalSource");o(qJe,"horizontalTarget");o(JS,"default")});var $1e=N(()=>{"use strict";C1e();zB();F1e()});var g4,z1e=N(()=>{"use strict";g4=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var YJe,XJe,G1e,V1e=N(()=>{"use strict";zt();dr();$1e();Ei();z1e();YJe={left:BB,right:FB,center:$B,justify:m4},XJe=o(function(t,e,r,n){let{securityLevel:i,sankey:a}=me(),s=A3.sankey,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=n.db.getGraph(),b=YJe[m];QS().nodeId(I=>I.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let T=gu(e9);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",I=>(I.uid=g4.next("node-")).id).attr("transform",function(I){return"translate("+I.x0+","+I.y0+")"}).attr("x",I=>I.x0).attr("y",I=>I.y0).append("rect").attr("height",I=>I.y1-I.y0).attr("width",I=>I.x1-I.x0).attr("fill",I=>T(I.id));let E=o(({id:I,value:D})=>v?`${I} | |
| 2337 | +${g}${Math.round(D*100)/100}${y}`:I,"getText");h.append("g").attr("class","node-labels").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",I=>I.x0<f/2?I.x1+6:I.x0-6).attr("y",I=>(I.y1+I.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",I=>I.x0<f/2?"start":"end").text(E);let A=h.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(x.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),S=a?.linkColor??"gradient";if(S==="gradient"){let I=A.append("linearGradient").attr("id",D=>(D.uid=g4.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",D=>D.source.x1).attr("x2",D=>D.target.x0);I.append("stop").attr("offset","0%").attr("stop-color",D=>T(D.source.id)),I.append("stop").attr("offset","100%").attr("stop-color",D=>T(D.target.id))}let _;switch(S){case"gradient":_=o(I=>I.uid,"coloring");break;case"source":_=o(I=>T(I.source.id),"coloring");break;case"target":_=o(I=>T(I.target.id),"coloring");break;default:_=S}A.append("path").attr("d",JS()).attr("stroke",_).attr("stroke-width",I=>Math.max(1,I.width)),Ao(void 0,h,0,p)},"draw"),G1e={draw:XJe}});var U1e,H1e=N(()=>{"use strict";U1e=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` | |
| 2338 | +`).trim(),"prepareTextForParsing")});var jJe,W1e,q1e=N(()=>{"use strict";jJe=o(t=>`.label { | |
| 2339 | + font-family: ${t.fontFamily}; | |
| 2340 | + }`,"getStyles"),W1e=jJe});var Y1e={};hr(Y1e,{diagram:()=>QJe});var KJe,QJe,X1e=N(()=>{"use strict";m1e();y1e();V1e();H1e();q1e();KJe=d4.parse.bind(d4);d4.parse=t=>KJe(U1e(t));QJe={styles:W1e,parser:d4,db:g1e,renderer:G1e}});var Q1e,YB,tet,ret,net,iet,aet,Bf,XB=N(()=>{"use strict";ji();Ya();ir();mi();Q1e={packet:[]},YB=structuredClone(Q1e),tet=or.packet,ret=o(()=>{let t=Fi({...tet,...cr().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),net=o(()=>YB.packet,"getPacket"),iet=o(t=>{t.length>0&&YB.packet.push(t)},"pushWord"),aet=o(()=>{Ar(),YB=structuredClone(Q1e)},"clear"),Bf={pushWord:iet,getPacket:net,getConfig:ret,clear:aet,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var set,oet,cet,Z1e,J1e=N(()=>{"use strict";kp();vt();T1();XB();set=1e4,oet=o(t=>{$c(t,Bf);let e=-1,r=[],n=1,{bitsPerRow:i}=Bf.getConfig();for(let{start:a,end:s,label:l}of t.blocks){if(s&&s<a)throw new Error(`Packet block ${a} - ${s} is invalid. End must be greater than start.`);if(a!==e+1)throw new Error(`Packet block ${a} - ${s??a} is not contiguous. It should start from ${e+1}.`);for(e=s??a,Y.debug(`Packet block ${a} - ${e} with label ${l}`);r.length<=i+1&&Bf.getPacket().length<set;){let[u,h]=cet({start:a,end:s,label:l},n,i);if(r.push(u),u.end+1===n*i&&(Bf.pushWord(r),r=[],n++),!h)break;({start:a,end:s,label:l}=h)}}Bf.pushWord(r)},"populate"),cet=o((t,e,r)=>{if(t.end===void 0&&(t.end=t.start),t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);return t.end+1<=e*r?[t,void 0]:[{start:t.start,end:e*r-1,label:t.label},{start:e*r,end:t.end,label:t.label}]},"getNextFittingBlock"),Z1e={parse:o(async t=>{let e=await uo("packet",t);Y.debug(e),oet(e)},"parse")}});var uet,het,eye,tye=N(()=>{"use strict";Vc();Ei();uet=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=i.getPacket(),d=i.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=sa(e);y.attr("viewbox",`0 0 ${g} ${m}`),vn(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())het(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),het=o((t,e,r,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(n+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-i;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",n).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),eye={draw:uet}});var fet,rye,nye=N(()=>{"use strict";ir();fet={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},rye=o(({packet:t}={})=>{let e=Fi(fet,t);return` | |
| 2341 | + .packetByte { | |
| 2342 | + font-size: ${e.byteFontSize}; | |
| 2343 | + } | |
| 2344 | + .packetByte.start { | |
| 2345 | + fill: ${e.startByteColor}; | |
| 2346 | + } | |
| 2347 | + .packetByte.end { | |
| 2348 | + fill: ${e.endByteColor}; | |
| 2349 | + } | |
| 2350 | + .packetLabel { | |
| 2351 | + fill: ${e.labelColor}; | |
| 2352 | + font-size: ${e.labelFontSize}; | |
| 2353 | + } | |
| 2354 | + .packetTitle { | |
| 2355 | + fill: ${e.titleColor}; | |
| 2356 | + font-size: ${e.titleFontSize}; | |
| 2357 | + } | |
| 2358 | + .packetBlock { | |
| 2359 | + stroke: ${e.blockStrokeColor}; | |
| 2360 | + stroke-width: ${e.blockStrokeWidth}; | |
| 2361 | + fill: ${e.blockFillColor}; | |
| 2362 | + } | |
| 2363 | + `},"styles")});var iye={};hr(iye,{diagram:()=>det});var det,aye=N(()=>{"use strict";XB();J1e();tye();nye();det={parser:Z1e,db:Bf,renderer:eye,styles:rye}});var fy,lye,jp,get,yet,cye,vet,xet,bet,wet,Tet,ket,Eet,Kp,jB=N(()=>{"use strict";ji();Ya();ir();mi();fy={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},lye={axes:[],curves:[],options:fy},jp=structuredClone(lye),get=or.radar,yet=o(()=>Fi({...get,...cr().radar}),"getConfig"),cye=o(()=>jp.axes,"getAxes"),vet=o(()=>jp.curves,"getCurves"),xet=o(()=>jp.options,"getOptions"),bet=o(t=>{jp.axes=t.map(e=>({name:e.name,label:e.label??e.name}))},"setAxes"),wet=o(t=>{jp.curves=t.map(e=>({name:e.name,label:e.label??e.name,entries:Tet(e.entries)}))},"setCurves"),Tet=o(t=>{if(t[0].axis==null)return t.map(r=>r.value);let e=cye();if(e.length===0)throw new Error("Axes must be populated before curves for reference entries");return e.map(r=>{let n=t.find(i=>i.axis?.$refText===r.name);if(n===void 0)throw new Error("Missing entry for axis "+r.label);return n.value})},"computeCurveEntries"),ket=o(t=>{let e=t.reduce((r,n)=>(r[n.name]=n,r),{});jp.options={showLegend:e.showLegend?.value??fy.showLegend,ticks:e.ticks?.value??fy.ticks,max:e.max?.value??fy.max,min:e.min?.value??fy.min,graticule:e.graticule?.value??fy.graticule}},"setOptions"),Eet=o(()=>{Ar(),jp=structuredClone(lye)},"clear"),Kp={getAxes:cye,getCurves:vet,getOptions:xet,setAxes:bet,setCurves:wet,setOptions:ket,getConfig:yet,clear:Eet,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var Cet,uye,hye=N(()=>{"use strict";kp();vt();T1();jB();Cet=o(t=>{$c(t,Kp);let{axes:e,curves:r,options:n}=t;Kp.setAxes(e),Kp.setCurves(r),Kp.setOptions(n)},"populate"),uye={parse:o(async t=>{let e=await uo("radar",t);Y.debug(e),Cet(e)},"parse")}});function Ret(t,e,r,n,i,a,s){let l=e.length,u=Math.min(s.width,s.height)/2;r.forEach((h,f)=>{if(h.entries.length!==l)return;let d=h.entries.map((p,m)=>{let g=2*Math.PI*m/l-Math.PI/2,y=Net(p,n,i,u),v=y*Math.cos(g),x=y*Math.sin(g);return{x:v,y:x}});a==="circle"?t.append("path").attr("d",Met(d,s.curveTension)).attr("class",`radarCurve-${f}`):a==="polygon"&&t.append("polygon").attr("points",d.map(p=>`${p.x},${p.y}`).join(" ")).attr("class",`radarCurve-${f}`)})}function Net(t,e,r,n){let i=Math.min(Math.max(t,e),r);return n*(i-e)/(r-e)}function Met(t,e){let r=t.length,n=`M${t[0].x},${t[0].y}`;for(let i=0;i<r;i++){let a=t[(i-1+r)%r],s=t[i],l=t[(i+1)%r],u=t[(i+2)%r],h={x:s.x+(l.x-a.x)*e,y:s.y+(l.y-a.y)*e},f={x:l.x-(u.x-s.x)*e,y:l.y-(u.y-s.y)*e};n+=` C${h.x},${h.y} ${f.x},${f.y} ${l.x},${l.y}`}return`${n} Z`}function Iet(t,e,r,n){if(!r)return;let i=(n.width/2+n.marginRight)*3/4,a=-(n.height/2+n.marginTop)*3/4,s=20;e.forEach((l,u)=>{let h=t.append("g").attr("transform",`translate(${i}, ${a+u*s})`);h.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${u}`),h.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(l.label)})}var Aet,_et,Det,Let,fye,dye=N(()=>{"use strict";Vc();Aet=o((t,e,r,n)=>{let i=n.db,a=i.getAxes(),s=i.getCurves(),l=i.getOptions(),u=i.getConfig(),h=i.getDiagramTitle(),f=sa(e),d=_et(f,u),p=l.max??Math.max(...s.map(y=>Math.max(...y.entries))),m=l.min,g=Math.min(u.width,u.height)/2;Det(d,a,g,l.ticks,l.graticule),Let(d,a,g,u),Ret(d,a,s,m,p,l.graticule,u),Iet(d,s,l.showLegend,u),d.append("text").attr("class","radarTitle").text(h).attr("x",0).attr("y",-u.height/2-u.marginTop)},"draw"),_et=o((t,e)=>{let r=e.width+e.marginLeft+e.marginRight,n=e.height+e.marginTop+e.marginBottom,i={x:e.marginLeft+e.width/2,y:e.marginTop+e.height/2};return t.attr("viewbox",`0 0 ${r} ${n}`).attr("width",r).attr("height",n),t.append("g").attr("transform",`translate(${i.x}, ${i.y})`)},"drawFrame"),Det=o((t,e,r,n,i)=>{if(i==="circle")for(let a=0;a<n;a++){let s=r*(a+1)/n;t.append("circle").attr("r",s).attr("class","radarGraticule")}else if(i==="polygon"){let a=e.length;for(let s=0;s<n;s++){let l=r*(s+1)/n,u=e.map((h,f)=>{let d=2*f*Math.PI/a-Math.PI/2,p=l*Math.cos(d),m=l*Math.sin(d);return`${p},${m}`}).join(" ");t.append("polygon").attr("points",u).attr("class","radarGraticule")}}},"drawGraticule"),Let=o((t,e,r,n)=>{let i=e.length;for(let a=0;a<i;a++){let s=e[a].label,l=2*a*Math.PI/i-Math.PI/2;t.append("line").attr("x1",0).attr("y1",0).attr("x2",r*n.axisScaleFactor*Math.cos(l)).attr("y2",r*n.axisScaleFactor*Math.sin(l)).attr("class","radarAxisLine"),t.append("text").text(s).attr("x",r*n.axisLabelFactor*Math.cos(l)).attr("y",r*n.axisLabelFactor*Math.sin(l)).attr("class","radarAxisLabel")}},"drawAxes");o(Ret,"drawCurves");o(Net,"relativeRadius");o(Met,"closedRoundCurve");o(Iet,"drawLegend");fye={draw:Aet}});var Oet,Pet,pye,mye=N(()=>{"use strict";ir();_y();ji();Oet=o((t,e)=>{let r="";for(let n=0;n<t.THEME_COLOR_LIMIT;n++){let i=t[`cScale${n}`];r+=` | |
| 2364 | + .radarCurve-${n} { | |
| 2365 | + color: ${i}; | |
| 2366 | + fill: ${i}; | |
| 2367 | + fill-opacity: ${e.curveOpacity}; | |
| 2368 | + stroke: ${i}; | |
| 2369 | + stroke-width: ${e.curveStrokeWidth}; | |
| 2370 | + } | |
| 2371 | + .radarLegendBox-${n} { | |
| 2372 | + fill: ${i}; | |
| 2373 | + fill-opacity: ${e.curveOpacity}; | |
| 2374 | + stroke: ${i}; | |
| 2375 | + } | |
| 2376 | + `}return r},"genIndexStyles"),Pet=o(t=>{let e=oh(),r=cr(),n=Fi(e,r.themeVariables),i=Fi(n.radar,t);return{themeVariables:n,radarOptions:i}},"buildRadarStyleOptions"),pye=o(({radar:t}={})=>{let{themeVariables:e,radarOptions:r}=Pet(t);return` | |
| 2377 | + .radarTitle { | |
| 2378 | + font-size: ${e.fontSize}; | |
| 2379 | + color: ${e.titleColor}; | |
| 2380 | + dominant-baseline: hanging; | |
| 2381 | + text-anchor: middle; | |
| 2382 | + } | |
| 2383 | + .radarAxisLine { | |
| 2384 | + stroke: ${r.axisColor}; | |
| 2385 | + stroke-width: ${r.axisStrokeWidth}; | |
| 2386 | + } | |
| 2387 | + .radarAxisLabel { | |
| 2388 | + dominant-baseline: middle; | |
| 2389 | + text-anchor: middle; | |
| 2390 | + font-size: ${r.axisLabelFontSize}px; | |
| 2391 | + color: ${r.axisColor}; | |
| 2392 | + } | |
| 2393 | + .radarGraticule { | |
| 2394 | + fill: ${r.graticuleColor}; | |
| 2395 | + fill-opacity: ${r.graticuleOpacity}; | |
| 2396 | + stroke: ${r.graticuleColor}; | |
| 2397 | + stroke-width: ${r.graticuleStrokeWidth}; | |
| 2398 | + } | |
| 2399 | + .radarLegendText { | |
| 2400 | + text-anchor: start; | |
| 2401 | + font-size: ${r.legendFontSize}px; | |
| 2402 | + dominant-baseline: hanging; | |
| 2403 | + } | |
| 2404 | + ${Oet(e,r)} | |
| 2405 | + `},"styles")});var gye={};hr(gye,{diagram:()=>Bet});var Bet,yye=N(()=>{"use strict";jB();hye();dye();mye();Bet={parser:uye,db:Kp,renderer:fye,styles:pye}});var KB,bye,wye=N(()=>{"use strict";KB=function(){var t=o(function(w,C,T,E){for(T=T||{},E=w.length;E--;T[w[E]]=C);return T},"o"),e=[1,7],r=[1,13],n=[1,14],i=[1,15],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,21,28,29,30,31,32,40,44,47],d=[1,23],p=[1,24],m=[8,15,16,21,28,29,30,31,32,40,44,47],g=[8,15,16,21,27,28,29,30,31,32,40,44,47],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(C,T,E,A,S,_,I){var D=_.length-1;switch(S){case 4:A.getLogger().debug("Rule: separator (NL) ");break;case 5:A.getLogger().debug("Rule: separator (Space) ");break;case 6:A.getLogger().debug("Rule: separator (EOF) ");break;case 7:A.getLogger().debug("Rule: hierarchy: ",_[D-1]),A.setHierarchy(_[D-1]);break;case 8:A.getLogger().debug("Stop NL ");break;case 9:A.getLogger().debug("Stop EOF ");break;case 10:A.getLogger().debug("Stop NL2 ");break;case 11:A.getLogger().debug("Stop EOF2 ");break;case 12:A.getLogger().debug("Rule: statement: ",_[D]),typeof _[D].length=="number"?this.$=_[D]:this.$=[_[D]];break;case 13:A.getLogger().debug("Rule: statement #2: ",_[D-1]),this.$=[_[D-1]].concat(_[D]);break;case 14:A.getLogger().debug("Rule: link: ",_[D],C),this.$={edgeTypeStr:_[D],label:""};break;case 15:A.getLogger().debug("Rule: LABEL link: ",_[D-3],_[D-1],_[D]),this.$={edgeTypeStr:_[D],label:_[D-1]};break;case 18:let k=parseInt(_[D]),L=A.generateId();this.$={id:L,type:"space",label:"",width:k,children:[]};break;case 23:A.getLogger().debug("Rule: (nodeStatement link node) ",_[D-2],_[D-1],_[D]," typestr: ",_[D-1].edgeTypeStr);let R=A.edgeStrToEdgeData(_[D-1].edgeTypeStr);this.$=[{id:_[D-2].id,label:_[D-2].label,type:_[D-2].type,directions:_[D-2].directions},{id:_[D-2].id+"-"+_[D].id,start:_[D-2].id,end:_[D].id,label:_[D-1].label,type:"edge",directions:_[D].directions,arrowTypeEnd:R,arrowTypeStart:"arrow_open"},{id:_[D].id,label:_[D].label,type:A.typeStr2Type(_[D].typeStr),directions:_[D].directions}];break;case 24:A.getLogger().debug("Rule: nodeStatement (abc88 node size) ",_[D-1],_[D]),this.$={id:_[D-1].id,label:_[D-1].label,type:A.typeStr2Type(_[D-1].typeStr),directions:_[D-1].directions,widthInColumns:parseInt(_[D],10)};break;case 25:A.getLogger().debug("Rule: nodeStatement (node) ",_[D]),this.$={id:_[D].id,label:_[D].label,type:A.typeStr2Type(_[D].typeStr),directions:_[D].directions,widthInColumns:1};break;case 26:A.getLogger().debug("APA123",this?this:"na"),A.getLogger().debug("COLUMNS: ",_[D]),this.$={type:"column-setting",columns:_[D]==="auto"?-1:parseInt(_[D])};break;case 27:A.getLogger().debug("Rule: id-block statement : ",_[D-2],_[D-1]);let O=A.generateId();this.$={..._[D-2],type:"composite",children:_[D-1]};break;case 28:A.getLogger().debug("Rule: blockStatement : ",_[D-2],_[D-1],_[D]);let M=A.generateId();this.$={id:M,type:"composite",label:"",children:_[D-1]};break;case 29:A.getLogger().debug("Rule: node (NODE_ID separator): ",_[D]),this.$={id:_[D]};break;case 30:A.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",_[D-1],_[D]),this.$={id:_[D-1],label:_[D].label,typeStr:_[D].typeStr,directions:_[D].directions};break;case 31:A.getLogger().debug("Rule: dirList: ",_[D]),this.$=[_[D]];break;case 32:A.getLogger().debug("Rule: dirList: ",_[D-1],_[D]),this.$=[_[D-1]].concat(_[D]);break;case 33:A.getLogger().debug("Rule: nodeShapeNLabel: ",_[D-2],_[D-1],_[D]),this.$={typeStr:_[D-2]+_[D],label:_[D-1]};break;case 34:A.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",_[D-3],_[D-2]," #3:",_[D-1],_[D]),this.$={typeStr:_[D-3]+_[D],label:_[D-2],directions:_[D-1]};break;case 35:case 36:this.$={type:"classDef",id:_[D-1].trim(),css:_[D].trim()};break;case 37:this.$={type:"applyClass",id:_[D-1].trim(),styleClass:_[D].trim()};break;case 38:this.$={type:"applyStyles",id:_[D-1].trim(),stylesStr:_[D].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:e,28:r,29:n,31:i,32:a,40:s,44:l,47:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,32:a},{11:27,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},t(g,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,32:a},{32:[2,14]},{17:[1,36]},t(m,[2,24]),{11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{37:[1,47]},{34:48,35:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{39:[1,51]},{34:52,35:y,39:[2,31]},{32:[2,15]},t(g,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(C,T){if(T.recoverable)this.trace(C);else{var E=new Error(C);throw E.hash=T,E}},"parseError"),parse:o(function(C){var T=this,E=[0],A=[],S=[null],_=[],I=this.table,D="",k=0,L=0,R=0,O=2,M=1,B=_.slice.call(arguments,1),F=Object.create(this.lexer),P={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(P.yy[z]=this.yy[z]);F.setInput(C,P.yy),P.yy.lexer=F,P.yy.parser=this,typeof F.yylloc>"u"&&(F.yylloc={});var $=F.yylloc;_.push($);var H=F.options&&F.options.ranges;typeof P.yy.parseError=="function"?this.parseError=P.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Q(ce){E.length=E.length-2*ce,S.length=S.length-ce,_.length=_.length-ce}o(Q,"popStack");function j(){var ce;return ce=A.pop()||F.lex()||M,typeof ce!="number"&&(ce instanceof Array&&(A=ce,ce=A.pop()),ce=T.symbols_[ce]||ce),ce}o(j,"lex");for(var ie,ne,le,he,K,X,te={},J,se,ue,Z;;){if(le=E[E.length-1],this.defaultActions[le]?he=this.defaultActions[le]:((ie===null||typeof ie>"u")&&(ie=j()),he=I[le]&&I[le][ie]),typeof he>"u"||!he.length||!he[0]){var Se="";Z=[];for(J in I[le])this.terminals_[J]&&J>O&&Z.push("'"+this.terminals_[J]+"'");F.showPosition?Se="Parse error on line "+(k+1)+`: | |
| 2406 | +`+F.showPosition()+` | |
| 2407 | +Expecting `+Z.join(", ")+", got '"+(this.terminals_[ie]||ie)+"'":Se="Parse error on line "+(k+1)+": Unexpected "+(ie==M?"end of input":"'"+(this.terminals_[ie]||ie)+"'"),this.parseError(Se,{text:F.match,token:this.terminals_[ie]||ie,line:F.yylineno,loc:$,expected:Z})}if(he[0]instanceof Array&&he.length>1)throw new Error("Parse Error: multiple actions possible at state: "+le+", token: "+ie);switch(he[0]){case 1:E.push(ie),S.push(F.yytext),_.push(F.yylloc),E.push(he[1]),ie=null,ne?(ie=ne,ne=null):(L=F.yyleng,D=F.yytext,k=F.yylineno,$=F.yylloc,R>0&&R--);break;case 2:if(se=this.productions_[he[1]][1],te.$=S[S.length-se],te._$={first_line:_[_.length-(se||1)].first_line,last_line:_[_.length-1].last_line,first_column:_[_.length-(se||1)].first_column,last_column:_[_.length-1].last_column},H&&(te._$.range=[_[_.length-(se||1)].range[0],_[_.length-1].range[1]]),X=this.performAction.apply(te,[D,L,k,P.yy,he[1],S,_].concat(B)),typeof X<"u")return X;se&&(E=E.slice(0,-1*se*2),S=S.slice(0,-1*se),_=_.slice(0,-1*se)),E.push(this.productions_[he[1]][0]),S.push(te.$),_.push(te._$),ue=I[E[E.length-2]][E[E.length-1]],E.push(ue);break;case 3:return!0}}return!0},"parse")},x=function(){var w={EOF:1,parseError:o(function(T,E){if(this.yy.parser)this.yy.parser.parseError(T,E);else throw new Error(T)},"parseError"),setInput:o(function(C,T){return this.yy=T||this.yy||{},this._input=C,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var T=C.match(/(?:\r\n?|\n).*/g);return T?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),C},"input"),unput:o(function(C){var T=C.length,E=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;var A=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),E.length-1&&(this.yylineno-=E.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:E?(E.length===A.length?this.yylloc.first_column:0)+A[A.length-E.length].length-E[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). | |
| 2408 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(C){this.unput(this.match.slice(C))},"less"),pastInput:o(function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var C=this.match;return C.length<20&&(C+=this._input.substr(0,20-C.length)),(C.substr(0,20)+(C.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var C=this.pastInput(),T=new Array(C.length+1).join("-");return C+this.upcomingInput()+` | |
| 2409 | +`+T+"^"},"showPosition"),test_match:o(function(C,T){var E,A,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),A=C[0].match(/(?:\r\n?|\n).*/g),A&&(this.yylineno+=A.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:A?A[A.length-1].length-A[A.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+C[0].length},this.yytext+=C[0],this.match+=C[0],this.matches=C,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(C[0].length),this.matched+=C[0],E=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var _ in S)this[_]=S[_];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,T,E,A;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),_=0;_<S.length;_++)if(E=this._input.match(this.rules[S[_]]),E&&(!T||E[0].length>T[0].length)){if(T=E,A=_,this.options.backtrack_lexer){if(C=this.test_match(E,S[_]),C!==!1)return C;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(C=this.test_match(T,S[A]),C!==!1?C:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. | |
| 2410 | +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(T,E,A,S){var _=S;switch(A){case 0:return 10;case 1:return T.getLogger().debug("Found space-block"),31;break;case 2:return T.getLogger().debug("Found nl-block"),31;break;case 3:return T.getLogger().debug("Found space-block"),29;break;case 4:T.getLogger().debug(".",E.yytext);break;case 5:T.getLogger().debug("_",E.yytext);break;case 6:return 5;case 7:return E.yytext=-1,28;break;case 8:return E.yytext=E.yytext.replace(/columns\s+/,""),T.getLogger().debug("COLUMNS (LEX)",E.yytext),28;break;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:T.getLogger().debug("LEX: POPPING STR:",E.yytext),this.popState();break;case 14:return T.getLogger().debug("LEX: STR end:",E.yytext),"STR";break;case 15:return E.yytext=E.yytext.replace(/space\:/,""),T.getLogger().debug("SPACE NUM (LEX)",E.yytext),21;break;case 16:return E.yytext="1",T.getLogger().debug("COLUMNS (LEX)",E.yytext),21;break;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;break;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 22:return this.popState(),this.pushState("CLASSDEFID"),41;break;case 23:return this.popState(),42;break;case 24:return this.pushState("CLASS"),44;break;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;break;case 26:return this.popState(),46;break;case 27:return this.pushState("STYLE_STMNT"),47;break;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;break;case 29:return this.popState(),49;break;case 30:return this.pushState("acc_title"),"acc_title";break;case 31:return this.popState(),"acc_title_value";break;case 32:return this.pushState("acc_descr"),"acc_descr";break;case 33:return this.popState(),"acc_descr_value";break;case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 40:return this.popState(),T.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 41:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 43:return this.popState(),T.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 44:return this.popState(),T.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 45:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 46:return this.popState(),T.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 47:return this.popState(),T.getLogger().debug("Lex: ("),"NODE_DEND";break;case 48:return this.popState(),T.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 49:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 51:return this.popState(),T.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 52:return this.popState(),T.getLogger().debug("Lex: )"),"NODE_DEND";break;case 53:return this.popState(),T.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 54:return this.popState(),T.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 55:return T.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;break;case 56:return T.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;break;case 57:return T.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;break;case 58:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 59:return T.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;break;case 60:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 61:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 62:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 63:return T.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;break;case 64:return T.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;break;case 65:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 66:return this.pushState("NODE"),36;break;case 67:return this.pushState("NODE"),36;break;case 68:return this.pushState("NODE"),36;break;case 69:return this.pushState("NODE"),36;break;case 70:return this.pushState("NODE"),36;break;case 71:return this.pushState("NODE"),36;break;case 72:return this.pushState("NODE"),36;break;case 73:return T.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;break;case 74:return this.pushState("BLOCK_ARROW"),T.getLogger().debug("LEX ARR START"),38;break;case 75:return T.getLogger().debug("Lex: NODE_ID",E.yytext),32;break;case 76:return T.getLogger().debug("Lex: EOF",E.yytext),8;break;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:T.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:T.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return T.getLogger().debug("LEX: NODE_DESCR:",E.yytext),"NODE_DESCR";break;case 84:T.getLogger().debug("LEX POPPING"),this.popState();break;case 85:T.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (right): dir:",E.yytext),"DIR";break;case 87:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (left):",E.yytext),"DIR";break;case 88:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (x):",E.yytext),"DIR";break;case 89:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (y):",E.yytext),"DIR";break;case 90:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (up):",E.yytext),"DIR";break;case 91:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (down):",E.yytext),"DIR";break;case 92:return E.yytext="]>",T.getLogger().debug("Lex (ARROW_DIR end):",E.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 93:return T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 94:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 95:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 96:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 97:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 98:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 99:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 100:this.pushState("md_string");break;case 101:return T.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 102:return this.popState(),T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 103:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 104:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 105:return T.getLogger().debug("Lex: COLON",E.yytext),E.yytext=E.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return w}();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b}();KB.parser=KB;bye=KB});function Yet(t){switch(Y.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return Y.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function Xet(t){switch(Y.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function jet(t){switch(t.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}var Ul,ZB,QB,Tye,kye,zet,Sye,Get,eC,Vet,Uet,Het,Wet,Cye,JB,y4,qet,Eye,Ket,Qet,Zet,Jet,ett,ttt,rtt,ntt,itt,att,stt,Aye,_ye=N(()=>{"use strict";gL();ji();zt();vt();gr();mi();Ul=new Map,ZB=[],QB=new Map,Tye="color",kye="fill",zet="bgFill",Sye=",",Get=me(),eC=new Map,Vet=o(t=>Ze.sanitizeText(t,Get),"sanitizeText"),Uet=o(function(t,e=""){let r=eC.get(t);r||(r={id:t,styles:[],textStyles:[]},eC.set(t,r)),e?.split(Sye).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(Tye).exec(n)){let s=i.replace(kye,zet).replace(Tye,kye);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),Het=o(function(t,e=""){let r=Ul.get(t);e!=null&&(r.styles=e.split(Sye))},"addStyle2Node"),Wet=o(function(t,e){t.split(",").forEach(function(r){let n=Ul.get(r);if(n===void 0){let i=r.trim();n={id:i,type:"na",children:[]},Ul.set(i,n)}n.classes||(n.classes=[]),n.classes.push(e)})},"setCssClass"),Cye=o((t,e)=>{let r=t.flat(),n=[];for(let i of r){if(i.label&&(i.label=Vet(i.label)),i.type==="classDef"){Uet(i.id,i.css);continue}if(i.type==="applyClass"){Wet(i.id,i?.styleClass??"");continue}if(i.type==="applyStyles"){i?.stylesStr&&Het(i.id,i?.stylesStr);continue}if(i.type==="column-setting")e.columns=i.columns??-1;else if(i.type==="edge"){let a=(QB.get(i.id)??0)+1;QB.set(i.id,a),i.id=a+"-"+i.id,ZB.push(i)}else{i.label||(i.type==="composite"?i.label="":i.label=i.id);let a=Ul.get(i.id);if(a===void 0?Ul.set(i.id,i):(i.type!=="na"&&(a.type=i.type),i.label!==i.id&&(a.label=i.label)),i.children&&Cye(i.children,i),i.type==="space"){let s=i.width??1;for(let l=0;l<s;l++){let u=an(i);u.id=u.id+"-"+l,Ul.set(u.id,u),n.push(u)}}else a===void 0&&n.push(i)}}e.children=n},"populateBlockDatabase"),JB=[],y4={id:"root",type:"composite",children:[],columns:-1},qet=o(()=>{Y.debug("Clear called"),Ar(),y4={id:"root",type:"composite",children:[],columns:-1},Ul=new Map([["root",y4]]),JB=[],eC=new Map,ZB=[],QB=new Map},"clear");o(Yet,"typeStr2Type");o(Xet,"edgeTypeStr2Type");o(jet,"edgeStrToEdgeData");Eye=0,Ket=o(()=>(Eye++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Eye),"generateId"),Qet=o(t=>{y4.children=t,Cye(t,y4),JB=y4.children},"setHierarchy"),Zet=o(t=>{let e=Ul.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),Jet=o(()=>[...Ul.values()],"getBlocksFlat"),ett=o(()=>JB||[],"getBlocks"),ttt=o(()=>ZB,"getEdges"),rtt=o(t=>Ul.get(t),"getBlock"),ntt=o(t=>{Ul.set(t.id,t)},"setBlock"),itt=o(()=>console,"getLogger"),att=o(function(){return eC},"getClasses"),stt={getConfig:o(()=>cr().block,"getConfig"),typeStr2Type:Yet,edgeTypeStr2Type:Xet,edgeStrToEdgeData:jet,getLogger:itt,getBlocksFlat:Jet,getBlocks:ett,getEdges:ttt,setHierarchy:Qet,getBlock:rtt,setBlock:ntt,getColumns:Zet,getClasses:att,clear:qet,generateId:Ket},Aye=stt});var tC,ott,Dye,Lye=N(()=>{"use strict";Ys();tC=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),ott=o(t=>`.label { | |
| 2411 | + font-family: ${t.fontFamily}; | |
| 2412 | + color: ${t.nodeTextColor||t.textColor}; | |
| 2413 | + } | |
| 2414 | + .cluster-label text { | |
| 2415 | + fill: ${t.titleColor}; | |
| 2416 | + } | |
| 2417 | + .cluster-label span,p { | |
| 2418 | + color: ${t.titleColor}; | |
| 2419 | + } | |
| 2420 | + | |
| 2421 | + | |
| 2422 | + | |
| 2423 | + .label text,span,p { | |
| 2424 | + fill: ${t.nodeTextColor||t.textColor}; | |
| 2425 | + color: ${t.nodeTextColor||t.textColor}; | |
| 2426 | + } | |
| 2427 | + | |
| 2428 | + .node rect, | |
| 2429 | + .node circle, | |
| 2430 | + .node ellipse, | |
| 2431 | + .node polygon, | |
| 2432 | + .node path { | |
| 2433 | + fill: ${t.mainBkg}; | |
| 2434 | + stroke: ${t.nodeBorder}; | |
| 2435 | + stroke-width: 1px; | |
| 2436 | + } | |
| 2437 | + .flowchart-label text { | |
| 2438 | + text-anchor: middle; | |
| 2439 | + } | |
| 2440 | + // .flowchart-label .text-outer-tspan { | |
| 2441 | + // text-anchor: middle; | |
| 2442 | + // } | |
| 2443 | + // .flowchart-label .text-inner-tspan { | |
| 2444 | + // text-anchor: start; | |
| 2445 | + // } | |
| 2446 | + | |
| 2447 | + .node .label { | |
| 2448 | + text-align: center; | |
| 2449 | + } | |
| 2450 | + .node.clickable { | |
| 2451 | + cursor: pointer; | |
| 2452 | + } | |
| 2453 | + | |
| 2454 | + .arrowheadPath { | |
| 2455 | + fill: ${t.arrowheadColor}; | |
| 2456 | + } | |
| 2457 | + | |
| 2458 | + .edgePath .path { | |
| 2459 | + stroke: ${t.lineColor}; | |
| 2460 | + stroke-width: 2.0px; | |
| 2461 | + } | |
| 2462 | + | |
| 2463 | + .flowchart-link { | |
| 2464 | + stroke: ${t.lineColor}; | |
| 2465 | + fill: none; | |
| 2466 | + } | |
| 2467 | + | |
| 2468 | + .edgeLabel { | |
| 2469 | + background-color: ${t.edgeLabelBackground}; | |
| 2470 | + rect { | |
| 2471 | + opacity: 0.5; | |
| 2472 | + background-color: ${t.edgeLabelBackground}; | |
| 2473 | + fill: ${t.edgeLabelBackground}; | |
| 2474 | + } | |
| 2475 | + text-align: center; | |
| 2476 | + } | |
| 2477 | + | |
| 2478 | + /* For html labels only */ | |
| 2479 | + .labelBkg { | |
| 2480 | + background-color: ${tC(t.edgeLabelBackground,.5)}; | |
| 2481 | + // background-color: | |
| 2482 | + } | |
| 2483 | + | |
| 2484 | + .node .cluster { | |
| 2485 | + // fill: ${tC(t.mainBkg,.5)}; | |
| 2486 | + fill: ${tC(t.clusterBkg,.5)}; | |
| 2487 | + stroke: ${tC(t.clusterBorder,.2)}; | |
| 2488 | + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; | |
| 2489 | + stroke-width: 1px; | |
| 2490 | + } | |
| 2491 | + | |
| 2492 | + .cluster text { | |
| 2493 | + fill: ${t.titleColor}; | |
| 2494 | + } | |
| 2495 | + | |
| 2496 | + .cluster span,p { | |
| 2497 | + color: ${t.titleColor}; | |
| 2498 | + } | |
| 2499 | + /* .cluster div { | |
| 2500 | + color: ${t.titleColor}; | |
| 2501 | + } */ | |
| 2502 | + | |
| 2503 | + div.mermaidTooltip { | |
| 2504 | + position: absolute; | |
| 2505 | + text-align: center; | |
| 2506 | + max-width: 200px; | |
| 2507 | + padding: 2px; | |
| 2508 | + font-family: ${t.fontFamily}; | |
| 2509 | + font-size: 12px; | |
| 2510 | + background: ${t.tertiaryColor}; | |
| 2511 | + border: 1px solid ${t.border2}; | |
| 2512 | + border-radius: 2px; | |
| 2513 | + pointer-events: none; | |
| 2514 | + z-index: 100; | |
| 2515 | + } | |
| 2516 | + | |
| 2517 | + .flowchartTitleText { | |
| 2518 | + text-anchor: middle; | |
| 2519 | + font-size: 18px; | |
| 2520 | + fill: ${t.textColor}; | |
| 2521 | + } | |
| 2522 | +`,"getStyles"),Dye=ott});var ltt,ctt,utt,htt,ftt,dtt,ptt,mtt,gtt,ytt,vtt,Rye,Nye=N(()=>{"use strict";vt();ltt=o((t,e,r,n)=>{e.forEach(i=>{vtt[i](t,r,n)})},"insertMarkers"),ctt=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),utt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),htt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),ftt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),dtt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),ptt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),mtt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),gtt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),ytt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),vtt={extension:ctt,composition:utt,aggregation:htt,dependency:ftt,lollipop:dtt,point:ptt,circle:mtt,cross:gtt,barb:ytt},Rye=ltt});function xtt(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,n=Math.floor(e/t);return{px:r,py:n}}function eF(t,e,r=0,n=0){Y.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"sieblingWidth",r),t?.size?.width||(t.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(t.children?.length>0){for(let m of t.children)eF(m,e);let s=btt(t);i=s.width,a=s.height,Y.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",i,a);for(let m of t.children)m.size&&(Y.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${i} ${a} ${JSON.stringify(m.size)}`),m.size.width=i*(m.widthInColumns??1)+bi*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,Y.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${i} maxHeight:${a}`));for(let m of t.children)eF(m,e,i,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l<u&&(h=l);let f=Math.ceil(u/h),d=h*(i+bi)+bi,p=f*(a+bi)+bi;if(d<r){Y.debug(`Detected to small siebling: abc95 ${t.id} sieblingWidth ${r} sieblingHeight ${n} width ${d}`),d=r,p=n;let m=(r-h*bi-bi)/h,g=(n-f*bi-bi)/f;Y.debug("Size indata abc88",t.id,"childWidth",m,"maxWidth",i),Y.debug("Size indata abc88",t.id,"childHeight",g,"maxHeight",a),Y.debug("Size indata abc88 xSize",h,"padding",bi);for(let y of t.children)y.size&&(y.size.width=m,y.size.height=g,y.size.x=0,y.size.y=0)}if(Y.debug(`abc95 (finale calc) ${t.id} xSize ${h} ySize ${f} columns ${l}${t.children.length} width=${Math.max(d,t.size?.width||0)}`),d<(t?.size?.width||0)){d=t?.size?.width||0;let m=l>0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*bi-bi)/m;Y.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}Y.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function Mye(t,e){Y.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(Y.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let n=t?.children[0]?.size?.width??0,i=t.children.length*n+(t.children.length-1)*bi;Y.debug("widthOfChildren 88",i,"posX");let a=0;Y.debug("abc91 block?.size?.x",t.id,t?.size?.x);let s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-bi,l=0;for(let u of t.children){let h=t;if(!u.size)continue;let{width:f,height:d}=u.size,{px:p,py:m}=xtt(r,a);if(m!=l&&(l=m,s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-bi,Y.debug("New row in layout for block",t.id," and child ",u.id,l)),Y.debug(`abc89 layout blocks (child) id: ${u.id} Pos: ${a} (px, py) ${p},${m} (${h?.size?.x},${h?.size?.y}) parent: ${h.id} width: ${f}${bi}`),h.size){let g=f/2;u.size.x=s+bi+g,Y.debug(`abc91 layout blocks (calc) px, pyid:${u.id} startingPos=X${s} new startingPosX${u.size.x} ${g} padding=${bi} width=${f} halfWidth=${g} => x:${u.size.x} y:${u.size.y} ${u.widthInColumns} (width * (child?.w || 1)) / 2 ${f*(u?.widthInColumns??1)/2}`),s=u.size.x+g,u.size.y=h.size.y-h.size.height/2+m*(d+bi)+d/2+bi,Y.debug(`abc88 layout blocks (calc) px, pyid:${u.id}startingPosX${s}${bi}${g}=>x:${u.size.x}y:${u.size.y}${u.widthInColumns}(width * (child?.w || 1)) / 2${f*(u?.widthInColumns??1)/2}`)}u.children&&Mye(u,e),a+=u?.widthInColumns??1,Y.debug("abc88 columnsPos",u,a)}}Y.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function Iye(t,{minX:e,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2<e&&(e=a-l/2),s-u/2<r&&(r=s-u/2),a+l/2>n&&(n=a+l/2),s+u/2>i&&(i=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:n,maxY:i}=Iye(a,{minX:e,minY:r,maxX:n,maxY:i}));return{minX:e,minY:r,maxX:n,maxY:i}}function Oye(t){let e=t.getBlock("root");if(!e)return;eF(e,t,0,0),Mye(e,t),Y.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:n,maxX:i,maxY:a}=Iye(e),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}var bi,btt,Pye=N(()=>{"use strict";vt();zt();bi=me()?.block?.padding??8;o(xtt,"calculateBlockPosition");btt=o(t=>{let e=0,r=0;for(let n of t.children){let{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};Y.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>e&&(e=i/(t.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(eF,"setBlockSizes");o(Mye,"layoutBlocks");o(Iye,"findBounds");o(Oye,"layout")});function Bye(t,e){e&&t.attr("style",e)}function wtt(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label,i=t.isNode?"nodeLabel":"edgeLabel",a=r.append("span");return a.html(n),Bye(a,t.labelStyle),a.attr("class",i),Bye(r,t.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var Ttt,vs,rC=N(()=>{"use strict";dr();vt();zt();gr();ir();to();o(Bye,"applyStyle");o(wtt,"addHtmlLabel");Ttt=o((t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),fr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),Y.debug("vertexText"+i);let a={isNode:n,label:DD(na(i)),labelStyle:e.replace("fill:","color:")};return wtt(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),vs=Ttt});var $ye,ktt,Fye,zye=N(()=>{"use strict";vt();$ye=o((t,e,r,n,i)=>{e.arrowTypeStart&&Fye(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&Fye(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),ktt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},Fye=o((t,e,r,n,i,a)=>{let s=ktt[r];if(!s){Y.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function nC(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var tF,Ua,Vye,Uye,Ett,Stt,Gye,Hye,Wye=N(()=>{"use strict";vt();rC();to();dr();zt();ir();gr();JD();w2();zye();tF={},Ua={},Vye=o((t,e)=>{let r=me(),n=fr(r.flowchart.htmlLabels),i=e.labelType==="markdown"?Hn(t,e.label,{style:e.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):vs(e.label,e.labelStyle),a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){let h=i.children[0],f=Ge(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),tF[e.id]=a,e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=vs(e.startLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].startLeft=f,nC(u,e.startLabelLeft)}if(e.startLabelRight){let h=vs(e.startLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].startRight=f,nC(u,e.startLabelRight)}if(e.endLabelLeft){let h=vs(e.endLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].endLeft=f,nC(u,e.endLabelLeft)}if(e.endLabelRight){let h=vs(e.endLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].endRight=f,nC(u,e.endLabelRight)}return i},"insertEdgeLabel");o(nC,"setTerminalWidth");Uye=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,tF[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Ru(n);if(t.label){let a=tF[t.id],s=t.x,l=t.y;if(r){let u=Gt.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=Ua[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Ua[t.id].startRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Ua[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Ua[t.id].endRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),Ett=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),Stt=o((t,e,r)=>{Y.debug(`intersection calc abc89: | |
| 2523 | + outsidePoint: ${JSON.stringify(e)} | |
| 2524 | + insidePoint : ${JSON.stringify(r)} | |
| 2525 | + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.x<e.x?s-a:s+a,u=t.height/2,h=Math.abs(e.y-r.y),f=Math.abs(e.x-r.x);if(Math.abs(i-e.y)*s>Math.abs(n-e.x)*u){let d=r.y<e.y?e.y-u-i:i-u-e.y;l=f*d/h;let p={x:r.x<e.x?r.x+l:r.x-f+l,y:r.y<e.y?r.y+h-d:r.y-h+d};return l===0&&(p.x=e.x,p.y=e.y),f===0&&(p.x=e.x),h===0&&(p.y=e.y),Y.debug(`abc89 topp/bott calc, Q ${h}, q ${d}, R ${f}, r ${l}`,p),p}else{r.x<e.x?l=e.x-s-n:l=n-s-e.x;let d=h*l/f,p=r.x<e.x?r.x+f-l:r.x-f+l,m=r.y<e.y?r.y+d:r.y-d;return Y.debug(`sides calc abc89, Q ${h}, q ${d}, R ${f}, r ${l}`,{_x:p,_y:m}),l===0&&(p=e.x,m=e.y),f===0&&(p=e.x),h===0&&(m=e.y),{x:p,y:m}}},"intersection"),Gye=o((t,e)=>{Y.debug("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(!Ett(e,a)&&!i){let s=Stt(e,n,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),Hye=o(function(t,e,r,n,i,a,s){let l=r.points;Y.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(Y.debug("to cluster abc88",n[r.toCluster]),l=Gye(r.points,n[r.toCluster].node),u=!0),r.fromCluster&&(Y.debug("from cluster abc88",n[r.fromCluster]),l=Gye(l.reverse(),n[r.fromCluster].node).reverse(),u=!0);let d=l.filter(C=>!Number.isNaN(C.y)),p=Do;r.curve&&(i==="graph"||i==="flowchart")&&(p=r.curve);let{x:m,y:g}=qw(r),y=wl().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(b=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,b=b.replace(/\(/g,"\\("),b=b.replace(/\)/g,"\\)")),$ye(x,r,b,s,i);let w={};return u&&(w.updatedPath=l),w.originalPath=r.points,w},"insertEdge")});var Ctt,qye,Yye=N(()=>{"use strict";Ctt=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),qye=o((t,e,r)=>{let n=Ctt(t),i=2,a=e.height+2*r.padding,s=a/i,l=e.width+2*s+r.padding,u=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function Att(t,e){return t.intersect(e)}var Xye,jye=N(()=>{"use strict";o(Att,"intersectNode");Xye=Att});function _tt(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x<i&&(h=-h);var f=Math.abs(e*r*l/u);return n.y<a&&(f=-f),{x:i+h,y:a+f}}var iC,rF=N(()=>{"use strict";o(_tt,"intersectEllipse");iC=_tt});function Dtt(t,e,r){return iC(t,e,e,r)}var Kye,Qye=N(()=>{"use strict";rF();o(Dtt,"intersectCircle");Kye=Dtt});function Ltt(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&Zye(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&Zye(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function Zye(t,e){return t*e>0}var Jye,eve=N(()=>{"use strict";o(Ltt,"intersectLine");o(Zye,"sameSign");Jye=Ltt});function Rtt(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=n-t.width/2-s,h=i-t.height/2-l,f=0;f<e.length;f++){var d=e[f],p=e[f<e.length-1?f+1:0],m=Jye(t,r,{x:u+d.x,y:h+d.y},{x:u+p.x,y:h+p.y});m&&a.push(m)}return a.length?(a.length>1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),w=y.x-r.x,C=y.y-r.y,T=Math.sqrt(w*w+C*C);return b<T?-1:b===T?0:1}),a[0]):t}var tve,rve=N(()=>{"use strict";eve();tve=Rtt;o(Rtt,"intersectPolygon")});var Ntt,nve,ive=N(()=>{"use strict";Ntt=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),nve=Ntt});var In,nF=N(()=>{"use strict";jye();Qye();rF();rve();ive();In={node:Xye,circle:Kye,ellipse:iC,polygon:tve,rect:nve}});function Hl(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Di,Qn,iF=N(()=>{"use strict";rC();to();zt();dr();gr();ir();Di=o(async(t,e,r,n)=>{let i=me(),a,s=e.useHtmlLabels||fr(i.flowchart.htmlLabels);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f=u.node(),d;e.labelType==="markdown"?d=Hn(u,Tr(na(h),i),{useHtmlLabels:s,width:e.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):d=f.appendChild(vs(Tr(na(h),i),e.labelStyle,!1,n));let p=d.getBBox(),m=e.padding/2;if(fr(i.flowchart.htmlLabels)){let g=d.children[0],y=Ge(d),v=g.getElementsByTagName("img");if(v){let x=h.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...v].map(b=>new Promise(w=>{function C(){if(b.style.display="flex",b.style.flexDirection="column",x){let T=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,A=parseInt(T,10)*5+"px";b.style.minWidth=A,b.style.maxWidth=A}else b.style.width="100%";w(b)}o(C,"setupImage"),setTimeout(()=>{b.complete&&C()}),b.addEventListener("error",C),b.addEventListener("load",C)})))}p=g.getBoundingClientRect(),y.attr("width",p.width),y.attr("height",p.height)}return s?u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):u.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:p,halfPadding:m,label:u}},"labelHelper"),Qn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(Hl,"insertPolygonShape")});var Mtt,ave,sve=N(()=>{"use strict";iF();vt();zt();nF();Mtt=o(async(t,e)=>{e.useHtmlLabels||me().flowchart.htmlLabels||(e.centerLabel=!0);let{shapeSvg:n,bbox:i,halfPadding:a}=await Di(t,e,"node "+e.classes,!0);Y.info("Classes = ",e.classes);let s=n.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Qn(e,s),e.intersect=function(l){return In.rect(e,l)},n},"note"),ave=Mtt});function aF(t,e,r,n){let i=[],a=o(l=>{i.push(l,0)},"addBorder"),s=o(l=>{i.push(0,l)},"skipBorder");e.includes("t")?(Y.debug("add top border"),a(r)):s(r),e.includes("r")?(Y.debug("add right border"),a(n)):s(n),e.includes("b")?(Y.debug("add bottom border"),a(r)):s(r),e.includes("l")?(Y.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}var ove,yo,lve,Itt,Ott,Ptt,Btt,Ftt,$tt,ztt,Gtt,Vtt,Utt,Htt,Wtt,qtt,Ytt,Xtt,jtt,Ktt,Qtt,Ztt,cve,Jtt,ert,uve,aC,sF,hve,fve=N(()=>{"use strict";dr();zt();gr();vt();Yye();rC();nF();sve();iF();ove=o(t=>t?" "+t:"","formatClass"),yo=o((t,e)=>`${e||"node default"}${ove(t.classes)} ${ove(t.class)}`,"getClassesFromNode"),lve=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];Y.info("Question main (Circle)");let u=Hl(r,s,s,l);return u.attr("style",e.style),Qn(e,u),e.intersect=function(h){return Y.warn("Intersect called"),In.polygon(e,l,h)},r},"question"),Itt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return In.circle(e,14,s)},r},"choice"),Ott=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=4,a=n.height+e.padding,s=a/i,l=n.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=Hl(r,l,a,u);return h.attr("style",e.style),Qn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"hexagon"),Ptt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,void 0,!0),i=2,a=n.height+2*e.padding,s=a/i,l=n.width+2*s+e.padding,u=qye(e.directions,n,e),h=Hl(r,l,a,u);return h.attr("style",e.style),Qn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"block_arrow"),Btt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Hl(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_left_inv_arrow"),Ftt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_right"),$tt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_left"),ztt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"trapezoid"),Gtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"inv_trapezoid"),Vtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_right_inv_arrow"),Utt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return Qn(e,h),e.intersect=function(f){let d=In.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)<e.width/2||Math.abs(p)==e.width/2&&Math.abs(d.y-e.y)>e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),Htt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(aF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return Qn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"rect"),Wtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(aF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return Qn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"composite"),qtt=o(async(t,e)=>{let{shapeSvg:r}=await Di(t,e,"label",!0);Y.trace("Classes = ",e.class);let n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(aF(n,e.props.borders,i,a),s.delete("borders")),s.forEach(l=>{Y.warn(`Unknown node property ${l}`)})}return Qn(e,n),e.intersect=function(s){return In.rect(e,s)},r},"labelRect");o(aF,"applyNodePropertyBorders");Ytt=o((t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,Y.info("Label text abc79",u,l,typeof l=="object");let h=s.node().appendChild(vs(u,e.labelStyle,!0,!0)),f={width:0,height:0};if(fr(me().flowchart.htmlLabels)){let y=h.children[0],v=Ge(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}Y.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=s.node().appendChild(vs(d.join?d.join("<br/>"):d,e.labelStyle,!0,!0));if(fr(me().flowchart.htmlLabels)){let y=m.children[0],v=Ge(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return Ge(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),Ge(h).attr("transform","translate( "+(f.width<p.width?0:-(p.width-f.width)/2)+", 0)"),f=s.node().getBBox(),s.attr("transform","translate("+-f.width/2+", "+(-f.height/2-g+3)+")"),i.attr("class","outer title-state").attr("x",-f.width/2-g).attr("y",-f.height/2-g).attr("width",f.width+e.padding).attr("height",f.height+e.padding),a.attr("class","divider").attr("x1",-f.width/2-g).attr("x2",f.width/2+g).attr("y1",-f.height/2-g+p.height+g).attr("y2",-f.height/2-g+p.height+g),Qn(e,i),e.intersect=function(y){return In.rect(e,y)},n},"rectWithTitle"),Xtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return Qn(e,s),e.intersect=function(l){return In.rect(e,l)},r},"stadium"),jtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,yo(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("Circle main"),Qn(e,a),e.intersect=function(s){return Y.info("Circle intersect",e,n.width/2+i,s),In.circle(e,n.width/2+i,s)},r},"circle"),Ktt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,yo(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("DoubleCircle main"),Qn(e,l),e.intersect=function(h){return Y.info("DoubleCircle intersect",e,n.width/2+i+a,h),In.circle(e,n.width/2+i+a,h)},r},"doublecircle"),Qtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"subroutine"),Ztt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Qn(e,n),e.intersect=function(i){return In.circle(e,7,i)},r},"start"),cve=o((t,e,r)=>{let n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;r==="LR"&&(i=10,a=70);let s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return Qn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return In.rect(e,l)},n},"forkJoin"),Jtt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Qn(e,i),e.intersect=function(a){return In.circle(e,7,a)},r},"end"),ert=o((t,e)=>{let r=e.padding/2,n=4,i=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=n,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=p.node().appendChild(vs(y,e.labelStyle,!0,!0)),x=v.getBBox();if(fr(me().flowchart.htmlLabels)){let S=v.children[0],_=Ge(v);x=S.getBoundingClientRect(),_.attr("width",x.width),_.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+n,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(me().flowchart.htmlLabels?b+="<"+e.classData.type+">":b+="<"+e.classData.type+">");let w=p.node().appendChild(vs(b,e.labelStyle,!0,!0));Ge(w).attr("class","classTitle");let C=w.getBBox();if(fr(me().flowchart.htmlLabels)){let S=w.children[0],_=Ge(w);C=S.getBoundingClientRect(),_.attr("width",C.width),_.attr("height",C.height)}d+=C.height+n,C.width>f&&(f=C.width);let T=[];e.classData.members.forEach(S=>{let _=S.getDisplayDetails(),I=_.displayText;me().flowchart.htmlLabels&&(I=I.replace(/</g,"<").replace(/>/g,">"));let D=p.node().appendChild(vs(I,_.cssStyle?_.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(fr(me().flowchart.htmlLabels)){let L=D.children[0],R=Ge(D);k=L.getBoundingClientRect(),R.attr("width",k.width),R.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,T.push(D)}),d+=i;let E=[];if(e.classData.methods.forEach(S=>{let _=S.getDisplayDetails(),I=_.displayText;me().flowchart.htmlLabels&&(I=I.replace(/</g,"<").replace(/>/g,">"));let D=p.node().appendChild(vs(I,_.cssStyle?_.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(fr(me().flowchart.htmlLabels)){let L=D.children[0],R=Ge(D);k=L.getBoundingClientRect(),R.attr("width",k.width),R.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,E.push(D)}),d+=i,g){let S=(f-x.width)/2;Ge(v).attr("transform","translate( "+(-1*f/2+S)+", "+-1*d/2+")"),m=x.height+n}let A=(f-C.width)/2;return Ge(w).attr("transform","translate( "+(-1*f/2+A)+", "+(-1*d/2+m)+")"),m+=C.height+n,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,T.forEach(S=>{Ge(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+i/2)+")");let _=S?.getBBox();m+=(_?.height??0)+n}),m+=i,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,E.forEach(S=>{Ge(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let _=S?.getBBox();m+=(_?.height??0)+n}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),Qn(e,l),e.intersect=function(S){return In.rect(e,S)},s},"class_box"),uve={rhombus:lve,composite:Wtt,question:lve,rect:Htt,labelRect:qtt,rectWithTitle:Ytt,choice:Itt,circle:jtt,doublecircle:Ktt,stadium:Xtt,hexagon:Ott,block_arrow:Ptt,rect_left_inv_arrow:Btt,lean_right:Ftt,lean_left:$tt,trapezoid:ztt,inv_trapezoid:Gtt,rect_right_inv_arrow:Vtt,cylinder:Utt,start:Ztt,end:Jtt,note:ave,subroutine:Qtt,fork:cve,join:cve,class_box:ert},aC={},sF=o(async(t,e,r)=>{let n,i;if(e.link){let a;me().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await uve[e.shape](n,e,r)}else i=await uve[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),aC[e.id]=n,e.haveCallback&&aC[e.id].attr("class",aC[e.id].attr("class")+" clickable"),n},"insertNode"),hve=o(t=>{let e=aC[t.id];Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});function dve(t,e,r=!1){let n=t,i="default";(n?.classes?.length||0)>0&&(i=(n?.classes??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=Y9(n?.styles??[]),h=n.label,f=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:i,style:u.style,id:n.id,directions:n.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:n.type,padding:l??cr()?.block?.padding??0}}async function trt(t,e,r){let n=dve(e,r,!1);if(n.type==="group")return;let i=cr(),a=await sF(t,n,{config:i}),s=a.node().getBBox(),l=r.getBlock(n.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function rrt(t,e,r){let n=dve(e,r,!0);if(r.getBlock(n.id).type!=="space"){let a=cr();await sF(t,n,{config:a}),e.intersect=n?.intersect,hve(n)}}async function oF(t,e,r,n){for(let i of e)await n(t,i,r),i.children&&await oF(t,i.children,r,n)}async function pve(t,e,r){await oF(t,e,r,trt)}async function mve(t,e,r){await oF(t,e,r,rrt)}async function gve(t,e,r,n,i){let a=new sn({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=n.getBlock(s.start),u=n.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}];Hye(t,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await Vye(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),Uye({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var yve=N(()=>{"use strict";Vo();ji();Wye();fve();ir();o(dve,"getNodeFromBlock");o(trt,"calculateBlockSize");o(rrt,"insertBlockPositioned");o(oF,"performOperations");o(pve,"calculateBlockSizes");o(mve,"insertBlocks");o(gve,"insertEdges")});var nrt,irt,vve,xve=N(()=>{"use strict";dr();ji();Nye();vt();Ei();Pye();yve();nrt=o(function(t,e){return e.db.getClasses()},"getClasses"),irt=o(async function(t,e,r,n){let{securityLevel:i,block:a}=cr(),s=n.db,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`);Rye(h,["point","circle","cross"],n.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await pve(g,d,s);let y=Oye(s);if(await mve(g,d,s),await gve(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,w=v.width+10,{useMaxWidth:C}=a;vn(h,b,w,!!C),Y.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),vve={draw:irt,getClasses:nrt}});var bve={};hr(bve,{diagram:()=>art});var art,wve=N(()=>{"use strict";wye();_ye();Lye();xve();art={parser:bye,db:Aye,renderer:vve,styles:Dye}});var lF,cF,v4,Eve,uF,Ha,Zc,x4,Sve,crt,b4,Cve,Ave,_ve,Dve,Lve,sC,Ff,oC=N(()=>{"use strict";lF={L:"left",R:"right",T:"top",B:"bottom"},cF={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},v4={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},Eve=o(function(t){return Ha(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),uF=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),Ha=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),Zc=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),x4=o(function(t,e){let r=Ha(t)&&Zc(e),n=Zc(t)&&Ha(e);return r||n},"isArchitectureDirectionXY"),Sve=o(function(t){let e=t[0],r=t[1],n=Ha(e)&&Zc(r),i=Zc(e)&&Ha(r);return n||i},"isArchitecturePairXY"),crt=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),b4=o(function(t,e){let r=`${t}${e}`;return crt(r)?r:void 0},"getArchitectureDirectionPair"),Cve=o(function([t,e],r){let n=r[0],i=r[1];return Ha(n)?Zc(i)?[t+(n==="L"?-1:1),e+(i==="T"?1:-1)]:[t+(n==="L"?-1:1),e]:Ha(i)?[t+(i==="L"?1:-1),e+(n==="T"?1:-1)]:[t,e+(n==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),Ave=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),_ve=o(function(t,e){return x4(t,e)?"bend":Ha(t)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),Dve=o(function(t){return t.type==="service"},"isArchitectureService"),Lve=o(function(t){return t.type==="junction"},"isArchitectureJunction"),sC=o(t=>t.data(),"edgeData"),Ff=o(t=>t.data(),"nodeData")});function Li(t){let e=me().architecture;return e?.[t]?e[t]:Rve[t]}var Rve,vr,urt,hrt,frt,drt,prt,mrt,hF,grt,yrt,vrt,xrt,brt,wrt,Trt,Qp,w4=N(()=>{"use strict";Ya();zt();s6();mi();oC();Rve=or.architecture,vr=new pf(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:Rve,dataStructures:void 0,elements:{}})),urt=o(()=>{vr.reset(),Ar()},"clear"),hrt=o(function({id:t,icon:e,in:r,title:n,iconText:i}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The service id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The service [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The service [${t}]'s parent does not exist. Please make sure the parent is created before this service`);if(vr.records.registeredIds[r]==="node")throw new Error(`The service [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"service",icon:e,iconText:i,title:n,edges:[],in:r}},"addService"),frt=o(()=>Object.values(vr.records.nodes).filter(Dve),"getServices"),drt=o(function({id:t,in:e}){vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"junction",edges:[],in:e}},"addJunction"),prt=o(()=>Object.values(vr.records.nodes).filter(Lve),"getJunctions"),mrt=o(()=>Object.values(vr.records.nodes),"getNodes"),hF=o(t=>vr.records.nodes[t],"getNode"),grt=o(function({id:t,icon:e,in:r,title:n}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The group id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The group [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The group [${t}]'s parent does not exist. Please make sure the parent is created before this group`);if(vr.records.registeredIds[r]==="node")throw new Error(`The group [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="group",vr.records.groups[t]={id:t,icon:e,title:n,in:r}},"addGroup"),yrt=o(()=>Object.values(vr.records.groups),"getGroups"),vrt=o(function({lhsId:t,rhsId:e,lhsDir:r,rhsDir:n,lhsInto:i,rhsInto:a,lhsGroup:s,rhsGroup:l,title:u}){if(!uF(r))throw new Error(`Invalid direction given for left hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${r}`);if(!uF(n))throw new Error(`Invalid direction given for right hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${n}`);if(vr.records.nodes[t]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The left-hand id [${t}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(vr.records.nodes[e]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The right-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);let h=vr.records.nodes[t].in,f=vr.records.nodes[e].in;if(s&&h&&f&&h==f)throw new Error(`The left-hand id [${t}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(l&&h&&f&&h==f)throw new Error(`The right-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let d={lhsId:t,lhsDir:r,lhsInto:i,lhsGroup:s,rhsId:e,rhsDir:n,rhsInto:a,rhsGroup:l,title:u};vr.records.edges.push(d),vr.records.nodes[t]&&vr.records.nodes[e]&&(vr.records.nodes[t].edges.push(vr.records.edges[vr.records.edges.length-1]),vr.records.nodes[e].edges.push(vr.records.edges[vr.records.edges.length-1]))},"addEdge"),xrt=o(()=>vr.records.edges,"getEdges"),brt=o(()=>{if(vr.records.dataStructures===void 0){let t={},e=Object.entries(vr.records.nodes).reduce((l,[u,h])=>(l[u]=h.edges.reduce((f,d)=>{let p=hF(d.lhsId)?.in,m=hF(d.rhsId)?.in;if(p&&m&&p!==m){let g=_ve(d.lhsDir,d.rhsDir);g!=="bend"&&(t[p]??={},t[p][m]=g,t[m]??={},t[m][p]=g)}if(d.lhsId===u){let g=b4(d.lhsDir,d.rhsDir);g&&(f[g]=d.rhsId)}else{let g=b4(d.rhsDir,d.lhsDir);g&&(f[g]=d.lhsId)}return f},{}),l),{}),r=Object.keys(e)[0],n={[r]:1},i=Object.keys(e).reduce((l,u)=>u===r?l:{...l,[u]:1},{}),a=o(l=>{let u={[l]:[0,0]},h=[l];for(;h.length>0;){let f=h.shift();if(f){n[f]=1,delete i[f];let d=e[f],[p,m]=u[f];Object.entries(d).forEach(([g,y])=>{n[y]||(u[y]=Cve([p,m],g),h.push(y))})}}return u},"BFS"),s=[a(r)];for(;Object.keys(i).length>0;)s.push(a(Object.keys(i)[0]));vr.records.dataStructures={adjList:e,spatialMaps:s,groupAlignments:t}}return vr.records.dataStructures},"getDataStructures"),wrt=o((t,e)=>{vr.records.elements[t]=e},"setElementForId"),Trt=o(t=>vr.records.elements[t],"getElementById"),Qp={clear:urt,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addService:hrt,getServices:frt,addJunction:drt,getJunctions:prt,getNodes:mrt,getNode:hF,addGroup:grt,getGroups:yrt,addEdge:vrt,getEdges:xrt,setElementForId:wrt,getElementById:Trt,getDataStructures:brt};o(Li,"getConfigField")});var krt,Nve,Mve=N(()=>{"use strict";kp();vt();T1();w4();krt=o((t,e)=>{$c(t,e),t.groups.map(e.addGroup),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(e.addEdge)},"populateDb"),Nve={parse:o(async t=>{let e=await uo("architecture",t);Y.debug(e),krt(e,Qp)},"parse")}});var Ert,Ive,Ove=N(()=>{"use strict";Ert=o(t=>` | |
| 2526 | + .edge { | |
| 2527 | + stroke-width: ${t.archEdgeWidth}; | |
| 2528 | + stroke: ${t.archEdgeColor}; | |
| 2529 | + fill: none; | |
| 2530 | + } | |
| 2531 | + | |
| 2532 | + .arrow { | |
| 2533 | + fill: ${t.archEdgeArrowColor}; | |
| 2534 | + } | |
| 2535 | + | |
| 2536 | + .node-bkg { | |
| 2537 | + fill: none; | |
| 2538 | + stroke: ${t.archGroupBorderColor}; | |
| 2539 | + stroke-width: ${t.archGroupBorderWidth}; | |
| 2540 | + stroke-dasharray: 8; | |
| 2541 | + } | |
| 2542 | + .node-icon-text { | |
| 2543 | + display: flex; | |
| 2544 | + align-items: center; | |
| 2545 | + } | |
| 2546 | + | |
| 2547 | + .node-icon-text > div { | |
| 2548 | + color: #fff; | |
| 2549 | + margin: 1px; | |
| 2550 | + height: fit-content; | |
| 2551 | + text-align: center; | |
| 2552 | + overflow: hidden; | |
| 2553 | + display: -webkit-box; | |
| 2554 | + -webkit-box-orient: vertical; | |
| 2555 | + } | |
| 2556 | +`,"getStyles"),Ive=Ert});var dF=Mi((T4,fF)=>{"use strict";o(function(e,r){typeof T4=="object"&&typeof fF=="object"?fF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof T4=="object"?T4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(T4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=28)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;y<g.length;y++)p=g[y],m=p.withChildren(),m.forEach(function(v){d.add(v)});return d},h.prototype.getNoOfChildren=function(){var d=0,p;if(this.child==null)d=1;else for(var m=this.child.getNodes(),g=0;g<m.length;g++)p=m[g],d+=p.getNoOfChildren();return d==0&&(d=1),d},h.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},h.prototype.calcEstimatedSize=function(){return this.child==null?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},h.prototype.scatter=function(){var d,p,m=-s.INITIAL_WORLD_BOUNDARY,g=s.INITIAL_WORLD_BOUNDARY;d=s.WORLD_CENTER_X+l.nextDouble()*(g-m)+m;var y=-s.INITIAL_WORLD_BOUNDARY,v=s.INITIAL_WORLD_BOUNDARY;p=s.WORLD_CENTER_Y+l.nextDouble()*(v-y)+y,this.rect.x=d,this.rect.y=p},h.prototype.updateBounds=function(){if(this.getChild()==null)throw"assert failed";if(this.getChild().getNodes().length!=0){var d=this.getChild();if(d.updateBounds(!0),this.rect.x=d.getLeft(),this.rect.y=d.getTop(),this.setWidth(d.getRight()-d.getLeft()),this.setHeight(d.getBottom()-d.getTop()),s.NODE_DIMENSIONS_INCLUDE_LABELS){var p=d.getRight()-d.getLeft(),m=d.getBottom()-d.getTop();this.labelWidth&&(this.labelPosHorizontal=="left"?(this.rect.x-=this.labelWidth,this.setWidth(p+this.labelWidth)):this.labelPosHorizontal=="center"&&this.labelWidth>p?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w<b;w++)x=v[w],x.isInterGraph?this.graphManager.remove(x):x.source.owner.remove(x);var C=this.nodes.indexOf(y);if(C==-1)throw"Node not in owner node list!";this.nodes.splice(C,1)}else if(g instanceof u){var x=g;if(x==null)throw"Edge is null!";if(!(x.source!=null&&x.target!=null))throw"Source and/or target is null!";if(!(x.source.owner!=null&&x.target.owner!=null&&x.source.owner==this&&x.target.owner==this))throw"Source and/or target owner is invalid!";var T=x.source.edges.indexOf(x),E=x.target.edges.indexOf(x);if(!(T>-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var C=x.source.owner.getEdges().indexOf(x);if(C==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(C,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),C=w.length,T=0;T<C;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A,S=this.nodes,_=S.length,I=0;I<_;I++){var D=S[I];g&&D.child!=null&&D.updateBounds(),w=D.getLeft(),C=D.getRight(),T=D.getTop(),E=D.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var k=new h(y,x,v-y,b-x);y==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),S[0].getParent().paddingLeft!=null?A=S[0].getParent().paddingLeft:A=this.margin,this.left=k.x-A,this.right=k.x+k.width+A,this.top=k.y-A,this.bottom=k.y+k.height+A},p.calculateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A=g.length,S=0;S<A;S++){var _=g[S];w=_.getLeft(),C=_.getRight(),T=_.getTop(),E=_.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var I=new h(y,x,v-y,b-x);return I},p.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},p.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},p.prototype.calcEstimatedSize=function(){for(var g=0,y=this.nodes,v=y.length,x=0;x<v;x++){var b=y[x];g+=b.calcEstimatedSize()}return g==0?this.estimatedSize=a.EMPTY_COMPOUND_NODE_SIZE:this.estimatedSize=g/Math.sqrt(this.nodes.length),this.estimatedSize},p.prototype.updateConnected=function(){var g=this;if(this.nodes.length==0){this.isConnected=!0;return}var y=new d,v=new Set,x=this.nodes[0],b,w,C=x.withChildren();for(C.forEach(function(I){y.push(I),v.add(I)});y.length!==0;){x=y.shift(),b=x.getEdges();for(var T=b.length,E=0;E<T;E++){var A=b[E];if(w=A.getOtherEndInGraph(x,this),w!=null&&!v.has(w)){var S=w.withChildren();S.forEach(function(I){y.push(I),v.add(I)})}}}if(this.isConnected=!1,v.size>=this.nodes.length){var _=0;v.forEach(function(I){I.owner==g&&_++}),_==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d<f;d++)h=u[d],l.remove(h);var p=[];p=p.concat(l.getNodes());var m;f=p.length;for(var d=0;d<f;d++)m=p[d],l.remove(m);l==this.rootGraph&&this.setRootGraph(null);var g=this.graphs.indexOf(l);this.graphs.splice(g,1),l.parent=null}else if(s instanceof i){if(h=s,h==null)throw"Edge is null!";if(!h.isInterGraph)throw"Not an inter-graph edge!";if(!(h.source!=null&&h.target!=null))throw"Source and/or target is null!";if(!(h.source.edges.indexOf(h)!=-1&&h.target.edges.indexOf(h)!=-1))throw"Source and/or target doesn't know this edge!";var g=h.source.edges.indexOf(h);if(h.source.edges.splice(g,1),g=h.target.edges.indexOf(h),h.target.edges.splice(g,1),!(h.source.owner!=null&&h.source.owner.getGraphManager()!=null))throw"Edge owner graph or owner graph manager is null!";if(h.source.owner.getGraphManager().edges.indexOf(h)==-1)throw"Not in owner graph manager's edge list!";var g=h.source.owner.getGraphManager().edges.indexOf(h);h.source.owner.getGraphManager().edges.splice(g,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(this.allNodes==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<u;h++)s=s.concat(l[h].getNodes());this.allNodes=s}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(this.allEdges==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<l.length;h++)s=s.concat(l[h].getEdges());s=s.concat(this.edges),this.allEdges=s}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(s){if(this.allNodesToApplyGravitation!=null)throw"assert failed";this.allNodesToApplyGravitation=s},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(s){if(s.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=s,s.parent==null&&(s.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(s,l){if(!(s!=null&&l!=null))throw"assert failed";if(s==l)return!0;var u=s.getOwner(),h;do{if(h=u.getParent(),h==null)break;if(h==l)return!0;if(u=h.getOwner(),u==null)break}while(!0);u=l.getOwner();do{if(h=u.getParent(),h==null)break;if(h==s)return!0;if(u=h.getOwner(),u==null)break}while(!0);return!1},a.prototype.calcLowestCommonAncestors=function(){for(var s,l,u,h,f,d=this.getAllEdges(),p=d.length,m=0;m<p;m++){if(s=d[m],l=s.source,u=s.target,s.lca=null,s.sourceInLca=l,s.targetInLca=u,l==u){s.lca=l.getOwner();continue}for(h=l.getOwner();s.lca==null;){for(s.targetInLca=u,f=u.getOwner();s.lca==null;){if(f==h){s.lca=f;break}if(f==this.rootGraph)break;if(s.lca!=null)throw"assert failed";s.targetInLca=f.getParent(),f=s.targetInLca.getOwner()}if(h==this.rootGraph)break;s.lca==null&&(s.sourceInLca=h.getParent(),h=s.sourceInLca.getOwner())}if(s.lca==null)throw"assert failed"}},a.prototype.calcLowestCommonAncestor=function(s,l){if(s==l)return s.getOwner();var u=s.getOwner();do{if(u==null)break;var h=l.getOwner();do{if(h==null)break;if(h==u)return h;h=h.getParent().getOwner()}while(!0);u=u.getParent().getOwner()}while(!0);return u},a.prototype.calcInclusionTreeDepths=function(s,l){s==null&&l==null&&(s=this.rootGraph,l=1);for(var u,h=s.getNodes(),f=h.length,d=0;d<f;d++)u=h[d],u.inclusionTreeDepth=l,u.child!=null&&this.calcInclusionTreeDepths(u.child,l+1)},a.prototype.includesInvalidEdge=function(){for(var s,l=[],u=this.edges.length,h=0;h<u;h++)s=this.edges[h],this.isOneAncestorOfOther(s.source,s.target)&&l.push(s);for(var h=0;h<l.length;h++)this.remove(l[h]);return!1},t.exports=a},function(t,e,r){"use strict";var n=r(12);function i(){}o(i,"IGeometry"),i.calcSeparationAmount=function(a,s,l,u){if(!a.intersects(s))throw"assert failed";var h=new Array(2);this.decideDirectionsForOverlappingNodes(a,s,h),l[0]=Math.min(a.getRight(),s.getRight())-Math.max(a.x,s.x),l[1]=Math.min(a.getBottom(),s.getBottom())-Math.max(a.y,s.y),a.getX()<=s.getX()&&a.getRight()>=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]<p?p=l[0]:d=l[1],l[0]=-1*h[0]*(p/2+u),l[1]=-1*h[1]*(d/2+u)},i.decideDirectionsForOverlappingNodes=function(a,s,l){a.getCenterX()<s.getCenterX()?l[0]=-1:l[0]=1,a.getCenterY()<s.getCenterY()?l[1]=-1:l[1]=1},i.getIntersection2=function(a,s,l){var u=a.getCenterX(),h=a.getCenterY(),f=s.getCenterX(),d=s.getCenterY();if(a.intersects(s))return l[0]=u,l[1]=h,l[2]=f,l[3]=d,!0;var p=a.getX(),m=a.getY(),g=a.getRight(),y=a.getX(),v=a.getBottom(),x=a.getRight(),b=a.getWidthHalf(),w=a.getHeightHalf(),C=s.getX(),T=s.getY(),E=s.getRight(),A=s.getX(),S=s.getBottom(),_=s.getRight(),I=s.getWidthHalf(),D=s.getHeightHalf(),k=!1,L=!1;if(u===f){if(h>d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(h<d)return l[0]=u,l[1]=v,l[2]=f,l[3]=T,!1}else if(h===d){if(u>f)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(u<f)return l[0]=g,l[1]=h,l[2]=C,l[3]=d,!1}else{var R=a.height/a.width,O=s.height/s.width,M=(d-h)/(f-u),B=void 0,F=void 0,P=void 0,z=void 0,$=void 0,H=void 0;if(-R===M?u>f?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):R===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===M?f>u?(l[2]=A,l[3]=S,L=!0):(l[2]=E,l[3]=T,L=!0):O===M&&(f>u?(l[2]=C,l[3]=T,L=!0):(l[2]=_,l[3]=S,L=!0)),k&&L)return!1;if(u>f?h>d?(B=this.getCardinalDirection(R,M,4),F=this.getCardinalDirection(O,M,2)):(B=this.getCardinalDirection(-R,M,3),F=this.getCardinalDirection(-O,M,1)):h>d?(B=this.getCardinalDirection(-R,M,1),F=this.getCardinalDirection(-O,M,3)):(B=this.getCardinalDirection(R,M,2),F=this.getCardinalDirection(O,M,4)),!k)switch(B){case 1:z=m,P=u+-w/M,l[0]=P,l[1]=z;break;case 2:P=x,z=h+b*M,l[0]=P,l[1]=z;break;case 3:z=v,P=u+w/M,l[0]=P,l[1]=z;break;case 4:P=y,z=h+-b*M,l[0]=P,l[1]=z;break}if(!L)switch(F){case 1:H=T,$=f+-D/M,l[2]=$,l[3]=H;break;case 2:$=_,H=d+I*M,l[2]=$,l[3]=H;break;case 3:H=S,$=f+D/M,l[2]=$,l[3]=H;break;case 4:$=A,H=d+-I*M,l[2]=$,l[3]=H;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,C=void 0,T=void 0,E=void 0,A=void 0,S=void 0,_=void 0;return w=p-f,T=h-d,A=d*f-h*p,C=v-g,E=m-y,S=y*g-m*v,_=w*E-C*T,_===0?null:(x=(T*S-E*A)/_,b=(C*A-w*S)/_,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l<a?h+=Math.PI:u<s&&(h+=this.TWO_PI)):u<s?h=this.ONE_AND_HALF_PI:h=this.HALF_PI,h},i.doIntersect=function(a,s,l,u){var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=(d-h)*(v-g)-(y-m)*(p-f);if(x===0)return!1;var b=((v-g)*(y-h)+(m-y)*(v-f))/x,w=((f-p)*(y-h)+(d-h)*(v-f))/x;return 0<b&&b<1&&0<w&&w<1},i.findCircleLineIntersections=function(a,s,l,u,h,f,d){var p=(l-a)*(l-a)+(u-s)*(u-s),m=2*((a-h)*(l-a)+(s-f)*(u-s)),g=(a-h)*(a-h)+(s-f)*(s-f)-d*d,y=m*m-4*p*g;if(y>=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p<d.length;p++){var m=d[p];m.enumerable=m.enumerable||!1,m.configurable=!0,"value"in m&&(m.writable=!0),Object.defineProperty(f,m.key,m)}}return o(h,"defineProperties"),function(f,d,p){return d&&h(f.prototype,d),p&&h(f,p),f}}();function i(h,f){if(!(h instanceof f))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=o(function(f){return{value:f,next:null,prev:null}},"nodeFrom"),s=o(function(f,d,p,m){return f!==null?f.next=d:m.head=d,p!==null?p.prev=d:m.tail=d,d.prev=f,d.next=p,m.length++,d},"add"),l=o(function(f,d){var p=f.prev,m=f.next;return p!==null?p.next=m:d.head=m,m!==null?m.prev=p:d.tail=p,f.prev=f.next=null,d.length--,f},"_remove"),u=function(){function h(f){var d=this;i(this,h),this.length=0,this.head=null,this.tail=null,f?.forEach(function(p){return d.push(p)})}return o(h,"LinkedList"),n(h,[{key:"size",value:o(function(){return this.length},"size")},{key:"insertBefore",value:o(function(d,p){return s(p.prev,a(d),p,this)},"insertBefore")},{key:"insertAfter",value:o(function(d,p){return s(p,a(d),p.next,this)},"insertAfter")},{key:"insertNodeBefore",value:o(function(d,p){return s(p.prev,d,p,this)},"insertNodeBefore")},{key:"insertNodeAfter",value:o(function(d,p){return s(p,d,p.next,this)},"insertNodeAfter")},{key:"push",value:o(function(d){return s(this.tail,a(d),null,this)},"push")},{key:"unshift",value:o(function(d){return s(null,a(d),this.head,this)},"unshift")},{key:"remove",value:o(function(d){return l(d,this)},"remove")},{key:"pop",value:o(function(){return l(this.tail,this).value},"pop")},{key:"popNode",value:o(function(){return l(this.tail,this)},"popNode")},{key:"shift",value:o(function(){return l(this.head,this).value},"shift")},{key:"shiftNode",value:o(function(){return l(this.head,this)},"shiftNode")},{key:"get_object_at",value:o(function(d){if(d<=this.length()){for(var p=1,m=this.head;p<d;)m=m.next,p++;return m.value}},"get_object_at")},{key:"set_object_at",value:o(function(d,p){if(d<=this.length()){for(var m=1,g=this.head;m<d;)g=g.next,m++;g.value=p}},"set_object_at")}]),h}();t.exports=u},function(t,e,r){"use strict";function n(i,a,s){this.x=null,this.y=null,i==null&&a==null&&s==null?(this.x=0,this.y=0):typeof i=="number"&&typeof a=="number"&&s==null?(this.x=i,this.y=a):i.constructor.name=="Point"&&a==null&&s==null&&(s=i,this.x=s.x,this.y=s.y)}o(n,"Point"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.getLocation=function(){return new n(this.x,this.y)},n.prototype.setLocation=function(i,a,s){i.constructor.name=="Point"&&a==null&&s==null?(s=i,this.setLocation(s.x,s.y)):typeof i=="number"&&typeof a=="number"&&s==null&&(parseInt(i)==i&&parseInt(a)==a?this.move(i,a):(this.x=Math.floor(i+.5),this.y=Math.floor(a+.5)))},n.prototype.move=function(i,a){this.x=i,this.y=a},n.prototype.translate=function(i,a){this.x+=i,this.y+=a},n.prototype.equals=function(i){if(i.constructor.name=="Point"){var a=i;return this.x==a.x&&this.y==a.y}return this==i},n.prototype.toString=function(){return new n().constructor.name+"[x="+this.x+",y="+this.y+"]"},t.exports=n},function(t,e,r){"use strict";function n(i,a,s,l){this.x=0,this.y=0,this.width=0,this.height=0,i!=null&&a!=null&&s!=null&&l!=null&&(this.x=i,this.y=a,this.width=s,this.height=l)}o(n,"RectangleD"),n.prototype.getX=function(){return this.x},n.prototype.setX=function(i){this.x=i},n.prototype.getY=function(){return this.y},n.prototype.setY=function(i){this.y=i},n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},n.prototype.getRight=function(){return this.x+this.width},n.prototype.getBottom=function(){return this.y+this.height},n.prototype.intersects=function(i){return!(this.getRight()<i.x||this.getBottom()<i.y||i.getRight()<this.x||i.getBottom()<this.y)},n.prototype.getCenterX=function(){return this.x+this.width/2},n.prototype.getMinX=function(){return this.getX()},n.prototype.getMaxX=function(){return this.getX()+this.width},n.prototype.getCenterY=function(){return this.y+this.height/2},n.prototype.getMinY=function(){return this.getY()},n.prototype.getMaxY=function(){return this.getY()+this.height},n.prototype.getWidthHalf=function(){return this.width/2},n.prototype.getHeightHalf=function(){return this.height/2},t.exports=n},function(t,e,r){"use strict";var n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(a){return typeof a}:function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};function i(){}o(i,"UniqueIDGeneretor"),i.lastID=0,i.createID=function(a){return i.isPrimitive(a)?a:(a.uniqueID!=null||(a.uniqueID=i.getString(),i.lastID++),a.uniqueID)},i.getString=function(a){return a==null&&(a=i.lastID),"Object#"+a},i.isPrimitive=function(a){var s=typeof a>"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g<m.length;g++)y[g]=m[g];return y}else return Array.from(m)}o(n,"_toConsumableArray");var i=r(0),a=r(7),s=r(3),l=r(1),u=r(6),h=r(5),f=r(17),d=r(29);function p(m){d.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,m!=null&&(this.isRemoteUse=m)}o(p,"Layout"),p.RANDOM_SEED=1,p.prototype=Object.create(d.prototype),p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},p.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},p.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},p.prototype.newGraphManager=function(){var m=new a(this);return this.graphManager=m,m},p.prototype.newGraph=function(m){return new u(null,this.graphManager,m)},p.prototype.newNode=function(m){return new s(this.graphManager,m)},p.prototype.newEdge=function(m){return new l(null,null,m)},p.prototype.checkLayoutSuccess=function(){return this.graphManager.getRoot()==null||this.graphManager.getRoot().getNodes().length==0||this.graphManager.includesInvalidEdge()},p.prototype.runLayout=function(){this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters();var m;return this.checkLayoutSuccess()?m=!1:m=this.layout(),i.ANIMATE==="during"?!1:(m&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,m)},p.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},p.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var m,g=this.graphManager.getAllEdges(),y=0;y<g.length;y++)m=g[y];for(var v,x=this.graphManager.getRoot().getNodes(),y=0;y<x.length;y++)v=x[y];this.update(this.graphManager.getRoot())}},p.prototype.update=function(m){if(m==null)this.update2();else if(m instanceof s){var g=m;if(g.getChild()!=null)for(var y=g.getChild().getNodes(),v=0;v<y.length;v++)update(y[v]);if(g.vGraphObject!=null){var x=g.vGraphObject;x.update(g)}}else if(m instanceof l){var b=m;if(b.vGraphObject!=null){var w=b.vGraphObject;w.update(b)}}else if(m instanceof u){var C=m;if(C.vGraphObject!=null){var T=C.vGraphObject;T.update(C)}}},p.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},p.prototype.transform=function(m){if(m==null)this.transform(new h(0,0));else{var g=new f,y=this.graphManager.getRoot().updateLeftTop();if(y!=null){g.setWorldOrgX(m.x),g.setWorldOrgY(m.y),g.setDeviceOrgX(y.x),g.setDeviceOrgY(y.y);for(var v=this.getAllNodes(),x,b=0;b<v.length;b++)x=v[b],x.transform(g)}}},p.prototype.positionNodesRandomly=function(m){if(m==null)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var g,y,v=m.getNodes(),x=0;x<v.length;x++)g=v[x],y=g.getChild(),y==null||y.getNodes().length==0?g.scatter():(this.positionNodesRandomly(y),g.updateBounds())},p.prototype.getFlatForest=function(){for(var m=[],g=!0,y=this.graphManager.getRoot().getNodes(),v=!0,x=0;x<y.length;x++)y[x].getChild()!=null&&(v=!1);if(!v)return m;var b=new Set,w=[],C=new Map,T=[];for(T=T.concat(y);T.length>0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var A=E.getEdges(),x=0;x<A.length;x++){var S=A[x].getOtherEnd(E);if(C.get(E)!=S)if(!b.has(S))w.push(S),C.set(S,E);else{g=!1;break}}}if(!g)m=[];else{var _=[].concat(n(b));m.push(_);for(var x=0;x<_.length;x++){var I=_[x],D=T.indexOf(I);D>-1&&T.splice(D,1)}b=new Set,C=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x<m.bendpoints.length;x++){var b=this.newNode(null);b.setRect(new Point(0,0),new Dimension(1,1)),v.add(b);var w=this.newEdge(null);this.graphManager.add(w,y,b),g.add(b),y=b}var w=this.newEdge(null);return this.graphManager.add(w,y,m.target),this.edgeToDummyNodes.set(m,g),m.isInterGraph()?this.graphManager.remove(m):v.remove(m),g},p.prototype.createBendpointsFromDummyNodes=function(){var m=[];m=m.concat(this.graphManager.getAllEdges()),m=[].concat(n(this.edgeToDummyNodes.keys())).concat(m);for(var g=0;g<m.length;g++){var y=m[g];if(y.bendpoints.length>0){for(var v=this.edgeToDummyNodes.get(y),x=0;x<v.length;x++){var b=v[x],w=new h(b.getCenterX(),b.getCenterY()),C=y.bendpoints.get(x);C.x=w.x,C.y=w.y,b.getOwner().remove(b)}this.graphManager.add(y,y.source,y.target)}}},p.transform=function(m,g,y,v){if(y!=null&&v!=null){var x=g;if(m<=50){var b=g/y;x-=(g-b)/50*(50-m)}else{var w=g*v;x+=(w-g)/50*(m-50)}return x}else{var C,T;return m<=50?(C=9*g/500,T=g/10):(C=9*g/50,T=-8*g),C*m+T}},p.findCenterOfTree=function(m){var g=[];g=g.concat(m);var y=[],v=new Map,x=!1,b=null;(g.length==1||g.length==2)&&(x=!0,b=g[0]);for(var w=0;w<g.length;w++){var C=g[w],T=C.getNeighborsList().size;v.set(C,C.getNeighborsList().size),T==1&&y.push(C)}var E=[];for(E=E.concat(y);!x;){var A=[];A=A.concat(E),E=[];for(var w=0;w<g.length;w++){var C=g[w],S=g.indexOf(C);S>=0&&g.splice(S,1);var _=C.getNeighborsList();_.forEach(function(k){if(y.indexOf(k)<0){var L=v.get(k),R=L-1;R==1&&E.push(k),v.set(k,R)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(5);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);p<d.length;p++)m[p]=d[p];return m}else return Array.from(d)}o(n,"_toConsumableArray");var i=r(15),a=r(4),s=r(0),l=r(8),u=r(9);function h(){i.call(this),this.useSmartIdealEdgeLengthCalculation=a.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=a.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=a.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=a.MAX_ITERATIONS}o(h,"FDLayout"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=a.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},h.prototype.calcIdealEdgeLengths=function(){for(var d,p,m,g,y,v,x,b=this.getGraphManager().getAllEdges(),w=0;w<b.length;w++)d=b[w],p=d.idealLength,d.isInterGraph&&(g=d.getSource(),y=d.getTarget(),v=d.getSourceInLca().getEstimatedSize(),x=d.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(d.idealLength+=v+x-2*s.SIMPLE_NODE_SIZE),m=d.getLca().getInclusionTreeDepth(),d.idealLength+=p*a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(g.getInclusionTreeDepth()+y.getInclusionTreeDepth()-2*m))},h.prototype.initSpringEmbedder=function(){var d=this.getAllNodes().length;this.incremental?(d>a.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m<d.length;m++)p=d[m],this.calcSpringForce(p,p.idealLength)},h.prototype.calcRepulsionForces=function(){var d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;m<x.length;m++)y=x[m],this.calculateRepulsionForceOfANode(y,b,d,p),b.add(y);else for(m=0;m<x.length;m++)for(y=x[m],g=m+1;g<x.length;g++)v=x[g],y.getOwner()==v.getOwner()&&this.calcRepulsionForce(y,v)},h.prototype.calcGravitationalForces=function(){for(var d,p=this.getAllNodesToApplyGravitation(),m=0;m<p.length;m++)d=p[m],this.calcGravitationalForce(d)},h.prototype.moveNodes=function(){for(var d=this.getAllNodes(),p,m=0;m<d.length;m++)p=d[m],p.move()},h.prototype.calcSpringForce=function(d,p){var m=d.getSource(),g=d.getTarget(),y,v,x,b;if(this.uniformLeafNodeSizes&&m.getChild()==null&&g.getChild()==null)d.updateLengthSimple();else if(d.updateLength(),d.isOverlapingSourceAndTarget)return;y=d.getLength(),y!=0&&(v=d.edgeElasticity*(y-p),x=v*(d.lengthX/y),b=v*(d.lengthY/y),m.springForceX+=x,m.springForceY+=b,g.springForceX-=x,g.springForceY-=b)},h.prototype.calcRepulsionForce=function(d,p){var m=d.getRect(),g=p.getRect(),y=new Array(2),v=new Array(4),x,b,w,C,T,E,A;if(m.intersects(g)){l.calcSeparationAmount(m,g,y,a.DEFAULT_EDGE_LENGTH/2),E=2*y[0],A=2*y[1];var S=d.noOfChildren*p.noOfChildren/(d.noOfChildren+p.noOfChildren);d.repulsionForceX-=S*E,d.repulsionForceY-=S*A,p.repulsionForceX+=S*E,p.repulsionForceY+=S*A}else this.uniformLeafNodeSizes&&d.getChild()==null&&p.getChild()==null?(x=g.getCenterX()-m.getCenterX(),b=g.getCenterY()-m.getCenterY()):(l.getIntersection(m,g,v),x=v[2]-v[0],b=v[3]-v[1]),Math.abs(x)<a.MIN_REPULSION_DIST&&(x=u.sign(x)*a.MIN_REPULSION_DIST),Math.abs(b)<a.MIN_REPULSION_DIST&&(b=u.sign(b)*a.MIN_REPULSION_DIST),w=x*x+b*b,C=Math.sqrt(w),T=(d.nodeRepulsion/2+p.nodeRepulsion/2)*d.noOfChildren*p.noOfChildren/w,E=T*x/C,A=T*b/C,d.repulsionForceX-=E,d.repulsionForceY-=A,p.repulsionForceX+=E,p.repulsionForceY+=A},h.prototype.calcGravitationalForce=function(d){var p,m,g,y,v,x,b,w;p=d.getOwner(),m=(p.getRight()+p.getLeft())/2,g=(p.getTop()+p.getBottom())/2,y=d.getCenterX()-m,v=d.getCenterY()-g,x=Math.abs(y)+d.getWidth()/2,b=Math.abs(v)+d.getHeight()/2,d.getOwner()==this.graphManager.getRoot()?(w=p.getEstimatedSize()*this.gravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,d||p},h.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},h.prototype.calcNoOfChildrenForAllNodes=function(){for(var d,p=this.graphManager.getAllNodes(),m=0;m<p.length;m++)d=p[m],d.noOfChildren=d.getNoOfChildren()},h.prototype.calcGrid=function(d){var p=0,m=0;p=parseInt(Math.ceil((d.getRight()-d.getLeft())/this.repulsionRange)),m=parseInt(Math.ceil((d.getBottom()-d.getTop())/this.repulsionRange));for(var g=new Array(p),y=0;y<p;y++)g[y]=new Array(m);for(var y=0;y<p;y++)for(var v=0;v<m;v++)g[y][v]=new Array;return g},h.prototype.addNodeToGrid=function(d,p,m){var g=0,y=0,v=0,x=0;g=parseInt(Math.floor((d.getRect().x-p)/this.repulsionRange)),y=parseInt(Math.floor((d.getRect().width+d.getRect().x-p)/this.repulsionRange)),v=parseInt(Math.floor((d.getRect().y-m)/this.repulsionRange)),x=parseInt(Math.floor((d.getRect().height+d.getRect().y-m)/this.repulsionRange));for(var b=g;b<=y;b++)for(var w=v;w<=x;w++)this.grid[b][w].push(d),d.setGridCoordinates(g,y,v,x)},h.prototype.updateGrid=function(){var d,p,m=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),d=0;d<m.length;d++)p=m[d],this.addNodeToGrid(p,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},h.prototype.calculateRepulsionForceOfANode=function(d,p,m,g){if(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&m||g){var y=new Set;d.surrounding=new Array;for(var v,x=this.grid,b=d.startX-1;b<d.finishX+2;b++)for(var w=d.startY-1;w<d.finishY+2;w++)if(!(b<0||w<0||b>=x.length||w>=x[0].length)){for(var C=0;C<x[b][w].length;C++)if(v=x[b][w][C],!(d.getOwner()!=v.getOwner()||d==v)&&!p.has(v)&&!y.has(v)){var T=Math.abs(d.getCenterX()-v.getCenterX())-(d.getWidth()/2+v.getWidth()/2),E=Math.abs(d.getCenterY()-v.getCenterY())-(d.getHeight()/2+v.getHeight()/2);T<=this.repulsionRange&&E<=this.repulsionRange&&y.add(v)}}d.surrounding=[].concat(n(y))}for(b=0;b<d.surrounding.length;b++)this.calcRepulsionForce(d,d.surrounding[b])},h.prototype.calcRepulsionRange=function(){return 0},t.exports=h},function(t,e,r){"use strict";var n=r(1),i=r(4);function a(l,u,h){n.call(this,l,u,h),this.idealLength=i.DEFAULT_EDGE_LENGTH,this.edgeElasticity=i.DEFAULT_SPRING_STRENGTH}o(a,"FDLayoutEdge"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];t.exports=a},function(t,e,r){"use strict";var n=r(3),i=r(4);function a(l,u,h,f){n.call(this,l,u,h,f),this.nodeRepulsion=i.DEFAULT_REPULSION_STRENGTH,this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}o(a,"FDLayoutNode"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];a.prototype.setGridCoordinates=function(l,u,h,f){this.startX=l,this.finishX=u,this.startY=h,this.finishY=f},t.exports=a},function(t,e,r){"use strict";function n(i,a){this.width=0,this.height=0,i!==null&&a!==null&&(this.height=a,this.width=i)}o(n,"DimensionD"),n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},t.exports=n},function(t,e,r){"use strict";var n=r(14);function i(){this.map={},this.keys=[]}o(i,"HashMap"),i.prototype.put=function(a,s){var l=n.createID(a);this.contains(l)||(this.map[l]=s,this.keys.push(a))},i.prototype.contains=function(a){var s=n.createID(a);return this.map[a]!=null},i.prototype.get=function(a){var s=n.createID(a);return this.map[s]},i.prototype.keySet=function(){return this.keys},t.exports=i},function(t,e,r){"use strict";var n=r(14);function i(){this.set={}}o(i,"HashSet"),i.prototype.add=function(a){var s=n.createID(a);this.contains(s)||(this.set[s]=a)},i.prototype.remove=function(a){delete this.set[n.createID(a)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(a){return this.set[n.createID(a)]==a},i.prototype.isEmpty=function(){return this.size()===0},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(a){for(var s=Object.keys(this.set),l=s.length,u=0;u<l;u++)a.push(this.set[s[u]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(a){for(var s=a.length,l=0;l<s;l++){var u=a[l];this.add(u)}},t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"Matrix"),n.multMat=function(i,a){for(var s=[],l=0;l<i.length;l++){s[l]=[];for(var u=0;u<a[0].length;u++){s[l][u]=0;for(var h=0;h<i[0].length;h++)s[l][u]+=i[l][h]*a[h][u]}}return s},n.transpose=function(i){for(var a=[],s=0;s<i[0].length;s++){a[s]=[];for(var l=0;l<i.length;l++)a[s][l]=i[l][s]}return a},n.multCons=function(i,a){for(var s=[],l=0;l<i.length;l++)s[l]=i[l]*a;return s},n.minusOp=function(i,a){for(var s=[],l=0;l<i.length;l++)s[l]=i[l]-a[l];return s},n.dotProduct=function(i,a){for(var s=0,l=0;l<i.length;l++)s+=i[l]*a[l];return s},n.mag=function(i){return Math.sqrt(this.dotProduct(i,i))},n.normalize=function(i){for(var a=[],s=this.mag(i),l=0;l<i.length;l++)a[l]=i[l]/s;return a},n.multGamma=function(i){for(var a=[],s=0,l=0;l<i.length;l++)s+=i[l];s*=-1/i.length;for(var u=0;u<i.length;u++)a[u]=s+i[u];return a},n.multL=function(i,a,s){for(var l=[],u=[],h=[],f=0;f<a[0].length;f++){for(var d=0,p=0;p<a.length;p++)d+=-.5*a[p][f]*i[p];u[f]=d}for(var m=0;m<s.length;m++){for(var g=0,y=0;y<s.length;y++)g+=s[m][y]*u[y];h[m]=g}for(var v=0;v<a.length;v++){for(var x=0,b=0;b<a[0].length;b++)x+=a[v][b]*h[b];l[v]=x}return l},t.exports=n},function(t,e,r){"use strict";var n=function(){function l(u,h){for(var f=0;f<h.length;f++){var d=h[f];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(u,d.key,d)}}return o(l,"defineProperties"),function(u,h,f){return h&&l(u.prototype,h),f&&l(u,f),u}}();function i(l,u){if(!(l instanceof u))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=r(11),s=function(){function l(u,h){i(this,l),(h!==null||h!==void 0)&&(this.compareFunction=this._defaultCompareFunction);var f=void 0;u instanceof a?f=u.size():f=u.length,this._quicksort(u,0,f-1)}return o(l,"Quicksort"),n(l,[{key:"_quicksort",value:o(function(h,f,d){if(f<d){var p=this._partition(h,f,d);this._quicksort(h,f,p),this._quicksort(h,p+1,d)}},"_quicksort")},{key:"_partition",value:o(function(h,f,d){for(var p=this._get(h,f),m=f,g=d;;){for(;this.compareFunction(p,this._get(h,g));)g--;for(;this.compareFunction(this._get(h,m),p);)m++;if(m<g)this._swap(h,m,g),m++,g--;else return g}},"_partition")},{key:"_get",value:o(function(h,f){return h instanceof a?h.get_object_at(f):h[f]},"_get")},{key:"_set",value:o(function(h,f,d){h instanceof a?h.set_object_at(f,d):h[f]=d},"_set")},{key:"_swap",value:o(function(h,f,d){var p=this._get(h,f);this._set(h,f,this._get(h,d)),this._set(h,d,p)},"_swap")},{key:"_defaultCompareFunction",value:o(function(h,f){return f>h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";function n(){}o(n,"SVD"),n.svd=function(i){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=i.length,this.n=i[0].length;var a=Math.min(this.m,this.n);this.s=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(Math.min(this.m+1,this.n)),this.U=function(xt){var ut=o(function Et(ft){if(ft.length==0)return 0;for(var yt=[],nt=0;nt<ft[0];nt++)yt.push(Et(ft.slice(1)));return yt},"allocate");return ut(xt)}([this.m,a]),this.V=function(xt){var ut=o(function Et(ft){if(ft.length==0)return 0;for(var yt=[],nt=0;nt<ft[0];nt++)yt.push(Et(ft.slice(1)));return yt},"allocate");return ut(xt)}([this.n,this.n]);for(var s=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(this.n),l=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p<Math.max(f,d);p++){if(p<f){this.s[p]=0;for(var m=p;m<this.m;m++)this.s[p]=n.hypot(this.s[p],i[m][p]);if(this.s[p]!==0){i[p][p]<0&&(this.s[p]=-this.s[p]);for(var g=p;g<this.m;g++)i[g][p]/=this.s[p];i[p][p]+=1}this.s[p]=-this.s[p]}for(var y=p+1;y<this.n;y++){if(function(xt,ut){return xt&&ut}(p<f,this.s[p]!==0)){for(var v=0,x=p;x<this.m;x++)v+=i[x][p]*i[x][y];v=-v/i[p][p];for(var b=p;b<this.m;b++)i[b][y]+=v*i[b][p]}s[y]=i[p][y]}if(function(xt,ut){return xt&&ut}(u,p<f))for(var w=p;w<this.m;w++)this.U[w][p]=i[w][p];if(p<d){s[p]=0;for(var C=p+1;C<this.n;C++)s[p]=n.hypot(s[p],s[C]);if(s[p]!==0){s[p+1]<0&&(s[p]=-s[p]);for(var T=p+1;T<this.n;T++)s[T]/=s[p];s[p+1]+=1}if(s[p]=-s[p],function(xt,ut){return xt&&ut}(p+1<this.m,s[p]!==0)){for(var E=p+1;E<this.m;E++)l[E]=0;for(var A=p+1;A<this.n;A++)for(var S=p+1;S<this.m;S++)l[S]+=s[A]*i[S][A];for(var _=p+1;_<this.n;_++)for(var I=-s[_]/s[p+1],D=p+1;D<this.m;D++)i[D][_]+=I*l[D]}if(h)for(var k=p+1;k<this.n;k++)this.V[k][p]=s[k]}}var L=Math.min(this.n,this.m+1);if(f<this.n&&(this.s[f]=i[f][f]),this.m<L&&(this.s[L-1]=0),d+1<L&&(s[d]=i[d][L-1]),s[L-1]=0,u){for(var R=f;R<a;R++){for(var O=0;O<this.m;O++)this.U[O][R]=0;this.U[R][R]=1}for(var M=f-1;M>=0;M--)if(this.s[M]!==0){for(var B=M+1;B<a;B++){for(var F=0,P=M;P<this.m;P++)F+=this.U[P][M]*this.U[P][B];F=-F/this.U[M][M];for(var z=M;z<this.m;z++)this.U[z][B]+=F*this.U[z][M]}for(var $=M;$<this.m;$++)this.U[$][M]=-this.U[$][M];this.U[M][M]=1+this.U[M][M];for(var H=0;H<M-1;H++)this.U[H][M]=0}else{for(var Q=0;Q<this.m;Q++)this.U[Q][M]=0;this.U[M][M]=1}}if(h)for(var j=this.n-1;j>=0;j--){if(function(xt,ut){return xt&&ut}(j<d,s[j]!==0))for(var ie=j+1;ie<a;ie++){for(var ne=0,le=j+1;le<this.n;le++)ne+=this.V[le][j]*this.V[le][ie];ne=-ne/this.V[j+1][j];for(var he=j+1;he<this.n;he++)this.V[he][ie]+=ne*this.V[he][j]}for(var K=0;K<this.n;K++)this.V[K][j]=0;this.V[j][j]=1}for(var X=L-1,te=0,J=Math.pow(2,-52),se=Math.pow(2,-966);L>0;){var ue=void 0,Z=void 0;for(ue=L-2;ue>=-1&&ue!==-1;ue--)if(Math.abs(s[ue])<=se+J*(Math.abs(this.s[ue])+Math.abs(this.s[ue+1]))){s[ue]=0;break}if(ue===L-2)Z=4;else{var Se=void 0;for(Se=L-1;Se>=ue&&Se!==ue;Se--){var ce=(Se!==L?Math.abs(s[Se]):0)+(Se!==ue+1?Math.abs(s[Se-1]):0);if(Math.abs(this.s[Se])<=se+J*ce){this.s[Se]=0;break}}Se===ue?Z=3:Se===L-1?Z=1:(Z=2,ue=Se)}switch(ue++,Z){case 1:{var ae=s[L-2];s[L-2]=0;for(var Oe=L-2;Oe>=ue;Oe--){var ge=n.hypot(this.s[Oe],ae),ze=this.s[Oe]/ge,He=ae/ge;if(this.s[Oe]=ge,Oe!==ue&&(ae=-He*s[Oe-1],s[Oe-1]=ze*s[Oe-1]),h)for(var $e=0;$e<this.n;$e++)ge=ze*this.V[$e][Oe]+He*this.V[$e][L-1],this.V[$e][L-1]=-He*this.V[$e][Oe]+ze*this.V[$e][L-1],this.V[$e][Oe]=ge}}break;case 2:{var Re=s[ue-1];s[ue-1]=0;for(var Ie=ue;Ie<L;Ie++){var be=n.hypot(this.s[Ie],Re),W=this.s[Ie]/be,de=Re/be;if(this.s[Ie]=be,Re=-de*s[Ie],s[Ie]=W*s[Ie],u)for(var re=0;re<this.m;re++)be=W*this.U[re][Ie]+de*this.U[re][ue-1],this.U[re][ue-1]=-de*this.U[re][Ie]+W*this.U[re][ue-1],this.U[re][Ie]=be}}break;case 3:{var oe=Math.max(Math.max(Math.max(Math.max(Math.abs(this.s[L-1]),Math.abs(this.s[L-2])),Math.abs(s[L-2])),Math.abs(this.s[ue])),Math.abs(s[ue])),V=this.s[L-1]/oe,xe=this.s[L-2]/oe,q=s[L-2]/oe,pe=this.s[ue]/oe,ve=s[ue]/oe,Pe=((xe+V)*(xe-V)+q*q)/2,_e=V*q*(V*q),we=0;(function(xt,ut){return xt||ut})(Pe!==0,_e!==0)&&(we=Math.sqrt(Pe*Pe+_e),Pe<0&&(we=-we),we=_e/(Pe+we));for(var Ve=(pe+V)*(pe-V)+we,De=pe*ve,qe=ue;qe<L-1;qe++){var at=n.hypot(Ve,De),Rt=Ve/at,st=De/at;if(qe!==ue&&(s[qe-1]=at),Ve=Rt*this.s[qe]+st*s[qe],s[qe]=Rt*s[qe]-st*this.s[qe],De=st*this.s[qe+1],this.s[qe+1]=Rt*this.s[qe+1],h)for(var Ue=0;Ue<this.n;Ue++)at=Rt*this.V[Ue][qe]+st*this.V[Ue][qe+1],this.V[Ue][qe+1]=-st*this.V[Ue][qe]+Rt*this.V[Ue][qe+1],this.V[Ue][qe]=at;if(at=n.hypot(Ve,De),Rt=Ve/at,st=De/at,this.s[qe]=at,Ve=Rt*s[qe]+st*this.s[qe+1],this.s[qe+1]=-st*s[qe]+Rt*this.s[qe+1],De=st*s[qe+1],s[qe+1]=Rt*s[qe+1],u&&qe<this.m-1)for(var ct=0;ct<this.m;ct++)at=Rt*this.U[ct][qe]+st*this.U[ct][qe+1],this.U[ct][qe+1]=-st*this.U[ct][qe]+Rt*this.U[ct][qe+1],this.U[ct][qe]=at}s[L-2]=Ve,te=te+1}break;case 4:{if(this.s[ue]<=0&&(this.s[ue]=this.s[ue]<0?-this.s[ue]:0,h))for(var We=0;We<=X;We++)this.V[We][ue]=-this.V[We][ue];for(;ue<X&&!(this.s[ue]>=this.s[ue+1]);){var ot=this.s[ue];if(this.s[ue]=this.s[ue+1],this.s[ue+1]=ot,h&&ue<this.n-1)for(var Yt=0;Yt<this.n;Yt++)ot=this.V[Yt][ue+1],this.V[Yt][ue+1]=this.V[Yt][ue],this.V[Yt][ue]=ot;if(u&&ue<this.m-1)for(var bt=0;bt<this.m;bt++)ot=this.U[bt][ue+1],this.U[bt][ue+1]=this.U[bt][ue],this.U[bt][ue]=ot;ue++}te=0,L--}break}}var Mt={U:this.U,V:this.V,S:this.s};return Mt},n.hypot=function(i,a){var s=void 0;return Math.abs(i)>Math.abs(a)?(s=a/i,s=Math.abs(i)*Math.sqrt(1+s*s)):a!=0?(s=i/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=n},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h<u.length;h++){var f=u[h];f.enumerable=f.enumerable||!1,f.configurable=!0,"value"in f&&(f.writable=!0),Object.defineProperty(l,f.key,f)}}return o(s,"defineProperties"),function(l,u,h){return u&&s(l.prototype,u),h&&s(l,h),l}}();function i(s,l){if(!(s instanceof l))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=function(){function s(l,u){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p<this.iMax;p++){this.grid[p]=new Array(this.jMax);for(var m=0;m<this.jMax;m++)this.grid[p][m]=0}this.tracebackGrid=new Array(this.iMax);for(var g=0;g<this.iMax;g++){this.tracebackGrid[g]=new Array(this.jMax);for(var y=0;y<this.jMax;y++)this.tracebackGrid[g][y]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return o(s,"NeedlemanWunsch"),n(s,[{key:"getScore",value:o(function(){return this.score},"getScore")},{key:"getAlignments",value:o(function(){return this.alignments},"getAlignments")},{key:"computeGrids",value:o(function(){for(var u=1;u<this.jMax;u++)this.grid[0][u]=this.grid[0][u-1]+this.gap_penalty,this.tracebackGrid[0][u]=[!1,!1,!0];for(var h=1;h<this.iMax;h++)this.grid[h][0]=this.grid[h-1][0]+this.gap_penalty,this.tracebackGrid[h][0]=[!1,!0,!1];for(var f=1;f<this.iMax;f++)for(var d=1;d<this.jMax;d++){var p=void 0;this.sequence1[f-1]===this.sequence2[d-1]?p=this.grid[f-1][d-1]+this.match_score:p=this.grid[f-1][d-1]+this.mismatch_penalty;var m=this.grid[f-1][d]+this.gap_penalty,g=this.grid[f][d-1]+this.gap_penalty,y=[p,m,g],v=this.arrayAllMaxIndexes(y);this.grid[f][d]=y[v[0]],this.tracebackGrid[f][d]=[v.includes(0),v.includes(1),v.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]},"computeGrids")},{key:"alignmentTraceback",value:o(function(){var u=[];for(u.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});u[0];){var h=u[0],f=this.tracebackGrid[h.pos[0]][h.pos[1]];f[0]&&u.push({pos:[h.pos[0]-1,h.pos[1]-1],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),f[1]&&u.push({pos:[h.pos[0]-1,h.pos[1]],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:"-"+h.seq2}),f[2]&&u.push({pos:[h.pos[0],h.pos[1]-1],seq1:"-"+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),h.pos[0]===0&&h.pos[1]===0&&this.alignments.push({sequence1:h.seq1,sequence2:h.seq2}),u.shift()}return this.alignments},"alignmentTraceback")},{key:"getAllIndexes",value:o(function(u,h){for(var f=[],d=-1;(d=u.indexOf(h,d+1))!==-1;)f.push(d);return f},"getAllIndexes")},{key:"arrayAllMaxIndexes",value:o(function(u){return this.getAllIndexes(u,Math.max.apply(null,u))},"arrayAllMaxIndexes")}]),s}();t.exports=a},function(t,e,r){"use strict";var n=o(function(){},"layoutBase");n.FDLayout=r(18),n.FDLayoutConstants=r(4),n.FDLayoutEdge=r(19),n.FDLayoutNode=r(20),n.DimensionD=r(21),n.HashMap=r(22),n.HashSet=r(23),n.IGeometry=r(8),n.IMath=r(9),n.Integer=r(10),n.Point=r(12),n.PointD=r(5),n.RandomSeed=r(16),n.RectangleD=r(13),n.Transform=r(17),n.UniqueIDGeneretor=r(14),n.Quicksort=r(25),n.LinkedList=r(11),n.LGraphObject=r(2),n.LGraph=r(6),n.LEdge=r(1),n.LGraphManager=r(7),n.LNode=r(3),n.Layout=r(15),n.LayoutConstants=r(0),n.NeedlemanWunsch=r(27),n.Matrix=r(24),n.SVD=r(26),t.exports=n},function(t,e,r){"use strict";function n(){this.listeners=[]}o(n,"Emitter");var i=n.prototype;i.addListener=function(a,s){this.listeners.push({event:a,callback:s})},i.removeListener=function(a,s){for(var l=this.listeners.length;l>=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l<this.listeners.length;l++){var u=this.listeners[l];a===u.event&&u.callback(s)}},t.exports=n}])})});var mF=Mi((k4,pF)=>{"use strict";o(function(e,r){typeof k4=="object"&&typeof pF=="object"?pF.exports=r(dF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof k4=="object"?k4.coseBase=r(dF()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(k4,function(t){return(()=>{"use strict";var e={45:(a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u},806:(a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h},767:(a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},880:(a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},578:(a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},765:(a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,w=l(551).DimensionD,C=l(551).Layout,T=l(551).Integer,E=l(551).IGeometry,A=l(551).LGraph,S=l(551).Transform,_=l(551).LinkedList;function I(){u.call(this),this.toBeTiled={},this.constraints={}}o(I,"CoSELayout"),I.prototype=Object.create(u.prototype);for(var D in u)I[D]=u[D];I.prototype.newGraphManager=function(){var k=new h(this);return this.graphManager=k,k},I.prototype.newGraph=function(k){return new f(null,this.graphManager,k)},I.prototype.newNode=function(k){return new d(this.graphManager,k)},I.prototype.newEdge=function(k){return new p(null,null,k)},I.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},I.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},I.prototype.layout=function(){var k=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return k&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},I.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var L=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(B){return L.has(B)});this.graphManager.setAllNodesToApplyGravitation(R)}}else{var k=this.getFlatForest();if(k.length>0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var L=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(O){return L.has(O)});this.graphManager.setAllNodesToApplyGravitation(R),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},I.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var k=new Set(this.getAllNodes()),L=this.nodesWithGravity.filter(function(M){return k.has(M)});this.graphManager.setAllNodesToApplyGravitation(L),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var R=!this.isTreeGrowing&&!this.isGrowthFinished,O=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(R,O),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},I.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),L={},R=0;R<k.length;R++){var O=k[R].rect,M=k[R].id;L[M]={id:M,x:O.getCenterX(),y:O.getCenterY(),w:O.width,h:O.height}}return L},I.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var k=!1;if(y.ANIMATE==="during")this.emit("layoutstarted");else{for(;!k;)k=this.tick();this.graphManager.updateBounds()}},I.prototype.moveNodes=function(){for(var k=this.getAllNodes(),L,R=0;R<k.length;R++)L=k[R],L.calculateDisplacement();Object.keys(this.constraints).length>0&&this.updateDisplacements();for(var R=0;R<k.length;R++)L=k[R],L.move()},I.prototype.initConstraintVariables=function(){var k=this;this.idToNodeMap=new Map,this.fixedNodeSet=new Set;for(var L=this.graphManager.getAllNodes(),R=0;R<L.length;R++){var O=L[R];this.idToNodeMap.set(O.id,O)}var M=o(function le(he){for(var K=he.getChild().getNodes(),X,te=0,J=0;J<K.length;J++)X=K[J],X.getChild()==null?k.fixedNodeSet.has(X.id)&&(te+=100):te+=le(X);return te},"calculateCompoundWeight");if(this.constraints.fixedNodeConstraint){this.constraints.fixedNodeConstraint.forEach(function(K){k.fixedNodeSet.add(K.nodeId)});for(var L=this.graphManager.getAllNodes(),O,R=0;R<L.length;R++)if(O=L[R],O.getChild()!=null){var B=M(O);B>0&&(O.fixedNodeWeight=B)}}if(this.constraints.relativePlacementConstraint){var F=new Map,P=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(le){k.fixedNodesOnHorizontal.add(le),k.fixedNodesOnVertical.add(le)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var z=this.constraints.alignmentConstraint.vertical,R=0;R<z.length;R++)this.dummyToNodeForVerticalAlignment.set("dummy"+R,[]),z[R].forEach(function(he){F.set(he,"dummy"+R),k.dummyToNodeForVerticalAlignment.get("dummy"+R).push(he),k.fixedNodeSet.has(he)&&k.fixedNodesOnHorizontal.add("dummy"+R)});if(this.constraints.alignmentConstraint.horizontal)for(var $=this.constraints.alignmentConstraint.horizontal,R=0;R<$.length;R++)this.dummyToNodeForHorizontalAlignment.set("dummy"+R,[]),$[R].forEach(function(he){P.set(he,"dummy"+R),k.dummyToNodeForHorizontalAlignment.get("dummy"+R).push(he),k.fixedNodeSet.has(he)&&k.fixedNodesOnVertical.add("dummy"+R)})}if(m.RELAX_MOVEMENT_ON_CONSTRAINTS)this.shuffle=function(le){var he,K,X;for(X=le.length-1;X>=2*le.length/3;X--)he=Math.floor(Math.random()*(X+1)),K=le[X],le[X]=le[he],le[he]=K;return le},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(le){if(le.left){var he=F.has(le.left)?F.get(le.left):le.left,K=F.has(le.right)?F.get(le.right):le.right;k.nodesInRelativeHorizontal.includes(he)||(k.nodesInRelativeHorizontal.push(he),k.nodeToRelativeConstraintMapHorizontal.set(he,[]),k.dummyToNodeForVerticalAlignment.has(he)?k.nodeToTempPositionMapHorizontal.set(he,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(he)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(he,k.idToNodeMap.get(he).getCenterX())),k.nodesInRelativeHorizontal.includes(K)||(k.nodesInRelativeHorizontal.push(K),k.nodeToRelativeConstraintMapHorizontal.set(K,[]),k.dummyToNodeForVerticalAlignment.has(K)?k.nodeToTempPositionMapHorizontal.set(K,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(K)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(K,k.idToNodeMap.get(K).getCenterX())),k.nodeToRelativeConstraintMapHorizontal.get(he).push({right:K,gap:le.gap}),k.nodeToRelativeConstraintMapHorizontal.get(K).push({left:he,gap:le.gap})}else{var X=P.has(le.top)?P.get(le.top):le.top,te=P.has(le.bottom)?P.get(le.bottom):le.bottom;k.nodesInRelativeVertical.includes(X)||(k.nodesInRelativeVertical.push(X),k.nodeToRelativeConstraintMapVertical.set(X,[]),k.dummyToNodeForHorizontalAlignment.has(X)?k.nodeToTempPositionMapVertical.set(X,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(X)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(X,k.idToNodeMap.get(X).getCenterY())),k.nodesInRelativeVertical.includes(te)||(k.nodesInRelativeVertical.push(te),k.nodeToRelativeConstraintMapVertical.set(te,[]),k.dummyToNodeForHorizontalAlignment.has(te)?k.nodeToTempPositionMapVertical.set(te,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(te)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(te,k.idToNodeMap.get(te).getCenterY())),k.nodeToRelativeConstraintMapVertical.get(X).push({bottom:te,gap:le.gap}),k.nodeToRelativeConstraintMapVertical.get(te).push({top:X,gap:le.gap})}});else{var H=new Map,Q=new Map;this.constraints.relativePlacementConstraint.forEach(function(le){if(le.left){var he=F.has(le.left)?F.get(le.left):le.left,K=F.has(le.right)?F.get(le.right):le.right;H.has(he)?H.get(he).push(K):H.set(he,[K]),H.has(K)?H.get(K).push(he):H.set(K,[he])}else{var X=P.has(le.top)?P.get(le.top):le.top,te=P.has(le.bottom)?P.get(le.bottom):le.bottom;Q.has(X)?Q.get(X).push(te):Q.set(X,[te]),Q.has(te)?Q.get(te).push(X):Q.set(te,[X])}});var j=o(function(he,K){var X=[],te=[],J=new _,se=new Set,ue=0;return he.forEach(function(Z,Se){if(!se.has(Se)){X[ue]=[],te[ue]=!1;var ce=Se;for(J.push(ce),se.add(ce),X[ue].push(ce);J.length!=0;){ce=J.shift(),K.has(ce)&&(te[ue]=!0);var ae=he.get(ce);ae.forEach(function(Oe){se.has(Oe)||(J.push(Oe),se.add(Oe),X[ue].push(Oe))})}ue++}}),{components:X,isFixed:te}},"constructComponents"),ie=j(H,k.fixedNodesOnHorizontal);this.componentsOnHorizontal=ie.components,this.fixedComponentsOnHorizontal=ie.isFixed;var ne=j(Q,k.fixedNodesOnVertical);this.componentsOnVertical=ne.components,this.fixedComponentsOnVertical=ne.isFixed}}},I.prototype.updateDisplacements=function(){var k=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(ne){var le=k.idToNodeMap.get(ne.nodeId);le.displacementX=0,le.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var L=this.constraints.alignmentConstraint.vertical,R=0;R<L.length;R++){for(var O=0,M=0;M<L[R].length;M++){if(this.fixedNodeSet.has(L[R][M])){O=0;break}O+=this.idToNodeMap.get(L[R][M]).displacementX}for(var B=O/L[R].length,M=0;M<L[R].length;M++)this.idToNodeMap.get(L[R][M]).displacementX=B}if(this.constraints.alignmentConstraint.horizontal)for(var F=this.constraints.alignmentConstraint.horizontal,R=0;R<F.length;R++){for(var P=0,M=0;M<F[R].length;M++){if(this.fixedNodeSet.has(F[R][M])){P=0;break}P+=this.idToNodeMap.get(F[R][M]).displacementY}for(var z=P/F[R].length,M=0;M<F[R].length;M++)this.idToNodeMap.get(F[R][M]).displacementY=z}}if(this.constraints.relativePlacementConstraint)if(m.RELAX_MOVEMENT_ON_CONSTRAINTS)this.totalIterations%10==0&&(this.shuffle(this.nodesInRelativeHorizontal),this.shuffle(this.nodesInRelativeVertical)),this.nodesInRelativeHorizontal.forEach(function(ne){if(!k.fixedNodesOnHorizontal.has(ne)){var le=0;k.dummyToNodeForVerticalAlignment.has(ne)?le=k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(ne)[0]).displacementX:le=k.idToNodeMap.get(ne).displacementX,k.nodeToRelativeConstraintMapHorizontal.get(ne).forEach(function(he){if(he.right){var K=k.nodeToTempPositionMapHorizontal.get(he.right)-k.nodeToTempPositionMapHorizontal.get(ne)-le;K<he.gap&&(le-=he.gap-K)}else{var K=k.nodeToTempPositionMapHorizontal.get(ne)-k.nodeToTempPositionMapHorizontal.get(he.left)+le;K<he.gap&&(le+=he.gap-K)}}),k.nodeToTempPositionMapHorizontal.set(ne,k.nodeToTempPositionMapHorizontal.get(ne)+le),k.dummyToNodeForVerticalAlignment.has(ne)?k.dummyToNodeForVerticalAlignment.get(ne).forEach(function(he){k.idToNodeMap.get(he).displacementX=le}):k.idToNodeMap.get(ne).displacementX=le}}),this.nodesInRelativeVertical.forEach(function(ne){if(!k.fixedNodesOnHorizontal.has(ne)){var le=0;k.dummyToNodeForHorizontalAlignment.has(ne)?le=k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(ne)[0]).displacementY:le=k.idToNodeMap.get(ne).displacementY,k.nodeToRelativeConstraintMapVertical.get(ne).forEach(function(he){if(he.bottom){var K=k.nodeToTempPositionMapVertical.get(he.bottom)-k.nodeToTempPositionMapVertical.get(ne)-le;K<he.gap&&(le-=he.gap-K)}else{var K=k.nodeToTempPositionMapVertical.get(ne)-k.nodeToTempPositionMapVertical.get(he.top)+le;K<he.gap&&(le+=he.gap-K)}}),k.nodeToTempPositionMapVertical.set(ne,k.nodeToTempPositionMapVertical.get(ne)+le),k.dummyToNodeForHorizontalAlignment.has(ne)?k.dummyToNodeForHorizontalAlignment.get(ne).forEach(function(he){k.idToNodeMap.get(he).displacementY=le}):k.idToNodeMap.get(ne).displacementY=le}});else{for(var R=0;R<this.componentsOnHorizontal.length;R++){var $=this.componentsOnHorizontal[R];if(this.fixedComponentsOnHorizontal[R])for(var M=0;M<$.length;M++)this.dummyToNodeForVerticalAlignment.has($[M])?this.dummyToNodeForVerticalAlignment.get($[M]).forEach(function(he){k.idToNodeMap.get(he).displacementX=0}):this.idToNodeMap.get($[M]).displacementX=0;else{for(var H=0,Q=0,M=0;M<$.length;M++)if(this.dummyToNodeForVerticalAlignment.has($[M])){var j=this.dummyToNodeForVerticalAlignment.get($[M]);H+=j.length*this.idToNodeMap.get(j[0]).displacementX,Q+=j.length}else H+=this.idToNodeMap.get($[M]).displacementX,Q++;for(var ie=H/Q,M=0;M<$.length;M++)this.dummyToNodeForVerticalAlignment.has($[M])?this.dummyToNodeForVerticalAlignment.get($[M]).forEach(function(he){k.idToNodeMap.get(he).displacementX=ie}):this.idToNodeMap.get($[M]).displacementX=ie}}for(var R=0;R<this.componentsOnVertical.length;R++){var $=this.componentsOnVertical[R];if(this.fixedComponentsOnVertical[R])for(var M=0;M<$.length;M++)this.dummyToNodeForHorizontalAlignment.has($[M])?this.dummyToNodeForHorizontalAlignment.get($[M]).forEach(function(K){k.idToNodeMap.get(K).displacementY=0}):this.idToNodeMap.get($[M]).displacementY=0;else{for(var H=0,Q=0,M=0;M<$.length;M++)if(this.dummyToNodeForHorizontalAlignment.has($[M])){var j=this.dummyToNodeForHorizontalAlignment.get($[M]);H+=j.length*this.idToNodeMap.get(j[0]).displacementY,Q+=j.length}else H+=this.idToNodeMap.get($[M]).displacementY,Q++;for(var ie=H/Q,M=0;M<$.length;M++)this.dummyToNodeForHorizontalAlignment.has($[M])?this.dummyToNodeForHorizontalAlignment.get($[M]).forEach(function(J){k.idToNodeMap.get(J).displacementY=ie}):this.idToNodeMap.get($[M]).displacementY=ie}}}},I.prototype.calculateNodesToApplyGravitationTo=function(){var k=[],L,R=this.graphManager.getGraphs(),O=R.length,M;for(M=0;M<O;M++)L=R[M],L.updateConnected(),L.isConnected||(k=k.concat(L.getNodes()));return k},I.prototype.createBendpoints=function(){var k=[];k=k.concat(this.graphManager.getAllEdges());var L=new Set,R;for(R=0;R<k.length;R++){var O=k[R];if(!L.has(O)){var M=O.getSource(),B=O.getTarget();if(M==B)O.getBendpoints().push(new b),O.getBendpoints().push(new b),this.createDummyNodesForBendpoints(O),L.add(O);else{var F=[];if(F=F.concat(M.getEdgeListToNode(B)),F=F.concat(B.getEdgeListToNode(M)),!L.has(F[0])){if(F.length>1){var P;for(P=0;P<F.length;P++){var z=F[P];z.getBendpoints().push(new b),this.createDummyNodesForBendpoints(z)}}F.forEach(function($){L.add($)})}}}if(L.size==k.length)break}},I.prototype.positionNodesRadially=function(k){for(var L=new x(0,0),R=Math.ceil(Math.sqrt(k.length)),O=0,M=0,B=0,F=new b(0,0),P=0;P<k.length;P++){P%R==0&&(B=0,M=O,P!=0&&(M+=m.DEFAULT_COMPONENT_SEPERATION),O=0);var z=k[P],$=C.findCenterOfTree(z);L.x=B,L.y=M,F=I.radialLayout(z,$,L),F.y>O&&(O=Math.floor(F.y)),B=Math.floor(F.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-F.x/2,v.WORLD_CENTER_Y-F.y/2))},I.radialLayout=function(k,L,R){var O=Math.max(this.maxDiagonalInTree(k),m.DEFAULT_RADIAL_SEPARATION);I.branchRadialLayout(L,null,0,359,0,O);var M=A.calculateBounds(k),B=new S;B.setDeviceOrgX(M.getMinX()),B.setDeviceOrgY(M.getMinY()),B.setWorldOrgX(R.x),B.setWorldOrgY(R.y);for(var F=0;F<k.length;F++){var P=k[F];P.transform(B)}var z=new b(M.getMaxX(),M.getMaxY());return B.inverseTransformPoint(z)},I.branchRadialLayout=function(k,L,R,O,M,B){var F=(O-R+1)/2;F<0&&(F+=180);var P=(F+R)%360,z=P*E.TWO_PI/360,$=Math.cos(z),H=M*Math.cos(z),Q=M*Math.sin(z);k.setCenter(H,Q);var j=[];j=j.concat(k.getEdges());var ie=j.length;L!=null&&ie--;for(var ne=0,le=j.length,he,K=k.getEdgesBetween(L);K.length>1;){var X=K[0];K.splice(0,1);var te=j.indexOf(X);te>=0&&j.splice(te,1),le--,ie--}L!=null?he=(j.indexOf(K[0])+1)%le:he=0;for(var J=Math.abs(O-R)/ie,se=he;ne!=ie;se=++se%le){var ue=j[se].getOtherEnd(k);if(ue!=L){var Z=(R+ne*J)%360,Se=(Z+J)%360;I.branchRadialLayout(ue,k,Z,Se,M+B,B),ne++}}},I.maxDiagonalInTree=function(k){for(var L=T.MIN_VALUE,R=0;R<k.length;R++){var O=k[R],M=O.getDiagonal();M>L&&(L=M)}return L},I.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},I.prototype.groupZeroDegreeMembers=function(){var k=this,L={};this.memberGroups={},this.idToDummyNode={};for(var R=[],O=this.graphManager.getAllNodes(),M=0;M<O.length;M++){var B=O[M],F=B.getParent();this.getNodeDegreeWithChildren(B)===0&&(F.id==null||!this.getToBeTiled(F))&&R.push(B)}for(var M=0;M<R.length;M++){var B=R[M],P=B.getParent().id;typeof L[P]>"u"&&(L[P]=[]),L[P]=L[P].concat(B)}Object.keys(L).forEach(function(z){if(L[z].length>1){var $="DummyCompound_"+z;k.memberGroups[$]=L[z];var H=L[z][0].getParent(),Q=new d(k.graphManager);Q.id=$,Q.paddingLeft=H.paddingLeft||0,Q.paddingRight=H.paddingRight||0,Q.paddingBottom=H.paddingBottom||0,Q.paddingTop=H.paddingTop||0,k.idToDummyNode[$]=Q;var j=k.getGraphManager().add(k.newGraph(),Q),ie=H.getChild();ie.add(Q);for(var ne=0;ne<L[z].length;ne++){var le=L[z][ne];ie.remove(le),j.add(le)}}})},I.prototype.clearCompounds=function(){var k={},L={};this.performDFSOnCompounds();for(var R=0;R<this.compoundOrder.length;R++)L[this.compoundOrder[R].id]=this.compoundOrder[R],k[this.compoundOrder[R].id]=[].concat(this.compoundOrder[R].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[R].getChild()),this.compoundOrder[R].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(k,L)},I.prototype.clearZeroDegreeMembers=function(){var k=this,L=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(R){var O=k.idToDummyNode[R];if(L[R]=k.tileNodes(k.memberGroups[R],O.paddingLeft+O.paddingRight),O.rect.width=L[R].width,O.rect.height=L[R].height,O.setCenter(L[R].centerX,L[R].centerY),O.labelMarginLeft=0,O.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var M=O.rect.width,B=O.rect.height;O.labelWidth&&(O.labelPosHorizontal=="left"?(O.rect.x-=O.labelWidth,O.setWidth(M+O.labelWidth),O.labelMarginLeft=O.labelWidth):O.labelPosHorizontal=="center"&&O.labelWidth>M?(O.rect.x-=(O.labelWidth-M)/2,O.setWidth(O.labelWidth),O.labelMarginLeft=(O.labelWidth-M)/2):O.labelPosHorizontal=="right"&&O.setWidth(M+O.labelWidth)),O.labelHeight&&(O.labelPosVertical=="top"?(O.rect.y-=O.labelHeight,O.setHeight(B+O.labelHeight),O.labelMarginTop=O.labelHeight):O.labelPosVertical=="center"&&O.labelHeight>B?(O.rect.y-=(O.labelHeight-B)/2,O.setHeight(O.labelHeight),O.labelMarginTop=(O.labelHeight-B)/2):O.labelPosVertical=="bottom"&&O.setHeight(B+O.labelHeight))}})},I.prototype.repopulateCompounds=function(){for(var k=this.compoundOrder.length-1;k>=0;k--){var L=this.compoundOrder[k],R=L.id,O=L.paddingLeft,M=L.paddingTop,B=L.labelMarginLeft,F=L.labelMarginTop;this.adjustLocations(this.tiledMemberPack[R],L.rect.x,L.rect.y,O,M,B,F)}},I.prototype.repopulateZeroDegreeMembers=function(){var k=this,L=this.tiledZeroDegreePack;Object.keys(L).forEach(function(R){var O=k.idToDummyNode[R],M=O.paddingLeft,B=O.paddingTop,F=O.labelMarginLeft,P=O.labelMarginTop;k.adjustLocations(L[R],O.rect.x,O.rect.y,M,B,F,P)})},I.prototype.getToBeTiled=function(k){var L=k.id;if(this.toBeTiled[L]!=null)return this.toBeTiled[L];var R=k.getChild();if(R==null)return this.toBeTiled[L]=!1,!1;for(var O=R.getNodes(),M=0;M<O.length;M++){var B=O[M];if(this.getNodeDegree(B)>0)return this.toBeTiled[L]=!1,!1;if(B.getChild()==null){this.toBeTiled[B.id]=!1;continue}if(!this.getToBeTiled(B))return this.toBeTiled[L]=!1,!1}return this.toBeTiled[L]=!0,!0},I.prototype.getNodeDegree=function(k){for(var L=k.id,R=k.getEdges(),O=0,M=0;M<R.length;M++){var B=R[M];B.getSource().id!==B.getTarget().id&&(O=O+1)}return O},I.prototype.getNodeDegreeWithChildren=function(k){var L=this.getNodeDegree(k);if(k.getChild()==null)return L;for(var R=k.getChild().getNodes(),O=0;O<R.length;O++){var M=R[O];L+=this.getNodeDegreeWithChildren(M)}return L},I.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},I.prototype.fillCompexOrderByDFS=function(k){for(var L=0;L<k.length;L++){var R=k[L];R.getChild()!=null&&this.fillCompexOrderByDFS(R.getChild().getNodes()),this.getToBeTiled(R)&&this.compoundOrder.push(R)}},I.prototype.adjustLocations=function(k,L,R,O,M,B,F){L+=O+B,R+=M+F;for(var P=L,z=0;z<k.rows.length;z++){var $=k.rows[z];L=P;for(var H=0,Q=0;Q<$.length;Q++){var j=$[Q];j.rect.x=L,j.rect.y=R,L+=j.rect.width+k.horizontalPadding,j.rect.height>H&&(H=j.rect.height)}R+=H+k.verticalPadding}},I.prototype.tileCompoundMembers=function(k,L){var R=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(O){var M=L[O];if(R.tiledMemberPack[O]=R.tileNodes(k[O],M.paddingLeft+M.paddingRight),M.rect.width=R.tiledMemberPack[O].width,M.rect.height=R.tiledMemberPack[O].height,M.setCenter(R.tiledMemberPack[O].centerX,R.tiledMemberPack[O].centerY),M.labelMarginLeft=0,M.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var B=M.rect.width,F=M.rect.height;M.labelWidth&&(M.labelPosHorizontal=="left"?(M.rect.x-=M.labelWidth,M.setWidth(B+M.labelWidth),M.labelMarginLeft=M.labelWidth):M.labelPosHorizontal=="center"&&M.labelWidth>B?(M.rect.x-=(M.labelWidth-B)/2,M.setWidth(M.labelWidth),M.labelMarginLeft=(M.labelWidth-B)/2):M.labelPosHorizontal=="right"&&M.setWidth(B+M.labelWidth)),M.labelHeight&&(M.labelPosVertical=="top"?(M.rect.y-=M.labelHeight,M.setHeight(F+M.labelHeight),M.labelMarginTop=M.labelHeight):M.labelPosVertical=="center"&&M.labelHeight>F?(M.rect.y-=(M.labelHeight-F)/2,M.setHeight(M.labelHeight),M.labelMarginTop=(M.labelHeight-F)/2):M.labelPosVertical=="bottom"&&M.setHeight(F+M.labelHeight))}})},I.prototype.tileNodes=function(k,L){var R=this.tileNodesByFavoringDim(k,L,!0),O=this.tileNodesByFavoringDim(k,L,!1),M=this.getOrgRatio(R),B=this.getOrgRatio(O),F;return B<M?F=O:F=R,F},I.prototype.getOrgRatio=function(k){var L=k.width,R=k.height,O=L/R;return O<1&&(O=1/O),O},I.prototype.calcIdealRowWidth=function(k,L){var R=m.TILING_PADDING_VERTICAL,O=m.TILING_PADDING_HORIZONTAL,M=k.length,B=0,F=0,P=0;k.forEach(function(ne){B+=ne.getWidth(),F+=ne.getHeight(),ne.getWidth()>P&&(P=ne.getWidth())});var z=B/M,$=F/M,H=Math.pow(R-O,2)+4*(z+O)*($+R)*M,Q=(O-R+Math.sqrt(H))/(2*(z+O)),j;L?(j=Math.ceil(Q),j==Q&&j++):j=Math.floor(Q);var ie=j*(z+O)-O;return P>ie&&(ie=P),ie+=O*2,ie},I.prototype.tileNodesByFavoringDim=function(k,L,R){var O=m.TILING_PADDING_VERTICAL,M=m.TILING_PADDING_HORIZONTAL,B=m.TILING_COMPARE_BY,F={rows:[],rowWidth:[],rowHeight:[],width:0,height:L,verticalPadding:O,horizontalPadding:M,centerX:0,centerY:0};B&&(F.idealRowWidth=this.calcIdealRowWidth(k,R));var P=o(function(le){return le.rect.width*le.rect.height},"getNodeArea"),z=o(function(le,he){return P(he)-P(le)},"areaCompareFcn");k.sort(function(ne,le){var he=z;return F.idealRowWidth?(he=B,he(ne.id,le.id)):he(ne,le)});for(var $=0,H=0,Q=0;Q<k.length;Q++){var j=k[Q];$+=j.getCenterX(),H+=j.getCenterY()}F.centerX=$/k.length,F.centerY=H/k.length;for(var Q=0;Q<k.length;Q++){var j=k[Q];if(F.rows.length==0)this.insertNodeToRow(F,j,0,L);else if(this.canAddHorizontal(F,j.rect.width,j.rect.height)){var ie=F.rows.length-1;F.idealRowWidth||(ie=this.getShortestRowIndex(F)),this.insertNodeToRow(F,j,ie,L)}else this.insertNodeToRow(F,j,F.rows.length,L);this.shiftToLastRow(F)}return F},I.prototype.insertNodeToRow=function(k,L,R,O){var M=O;if(R==k.rows.length){var B=[];k.rows.push(B),k.rowWidth.push(M),k.rowHeight.push(0)}var F=k.rowWidth[R]+L.rect.width;k.rows[R].length>0&&(F+=k.horizontalPadding),k.rowWidth[R]=F,k.width<F&&(k.width=F);var P=L.rect.height;R>0&&(P+=k.verticalPadding);var z=0;P>k.rowHeight[R]&&(z=k.rowHeight[R],k.rowHeight[R]=P,z=k.rowHeight[R]-z),k.height+=z,k.rows[R].push(L)},I.prototype.getShortestRowIndex=function(k){for(var L=-1,R=Number.MAX_VALUE,O=0;O<k.rows.length;O++)k.rowWidth[O]<R&&(L=O,R=k.rowWidth[O]);return L},I.prototype.getLongestRowIndex=function(k){for(var L=-1,R=Number.MIN_VALUE,O=0;O<k.rows.length;O++)k.rowWidth[O]>R&&(L=O,R=k.rowWidth[O]);return L},I.prototype.canAddHorizontal=function(k,L,R){if(k.idealRowWidth){var O=k.rows.length-1,M=k.rowWidth[O];return M+L+k.horizontalPadding<=k.idealRowWidth}var B=this.getShortestRowIndex(k);if(B<0)return!0;var F=k.rowWidth[B];if(F+k.horizontalPadding+L<=k.width)return!0;var P=0;k.rowHeight[B]<R&&B>0&&(P=R+k.verticalPadding-k.rowHeight[B]);var z;k.width-F>=L+k.horizontalPadding?z=(k.height+P)/(F+L+k.horizontalPadding):z=(k.height+P)/k.width,P=R+k.verticalPadding;var $;return k.width<L?$=(k.height+P)/L:$=(k.height+P)/k.width,$<1&&($=1/$),z<1&&(z=1/z),z<$},I.prototype.shiftToLastRow=function(k){var L=this.getLongestRowIndex(k),R=k.rowWidth.length-1,O=k.rows[L],M=O[O.length-1],B=M.width+k.horizontalPadding;if(k.width-k.rowWidth[R]>B&&L!=R){O.splice(-1,1),k.rows[R].push(M),k.rowWidth[L]=k.rowWidth[L]-B,k.rowWidth[R]=k.rowWidth[R]+B,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var F=Number.MIN_VALUE,P=0;P<O.length;P++)O[P].height>F&&(F=O[P].height);L>0&&(F+=k.verticalPadding);var z=k.rowHeight[L]+k.rowHeight[R];k.rowHeight[L]=F,k.rowHeight[R]<M.height+k.verticalPadding&&(k.rowHeight[R]=M.height+k.verticalPadding);var $=k.rowHeight[L]+k.rowHeight[R];k.height+=$-z,this.shiftToLastRow(k)}},I.prototype.tilingPreLayout=function(){m.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},I.prototype.tilingPostLayout=function(){m.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},I.prototype.reduceTrees=function(){for(var k=[],L=!0,R;L;){var O=this.graphManager.getAllNodes(),M=[];L=!1;for(var B=0;B<O.length;B++)if(R=O[B],R.getEdges().length==1&&!R.getEdges()[0].isInterGraph&&R.getChild()==null){if(m.PURE_INCREMENTAL){var F=R.getEdges()[0].getOtherEnd(R),P=new w(R.getCenterX()-F.getCenterX(),R.getCenterY()-F.getCenterY());M.push([R,R.getEdges()[0],R.getOwner(),P])}else M.push([R,R.getEdges()[0],R.getOwner()]);L=!0}if(L==!0){for(var z=[],$=0;$<M.length;$++)M[$][0].getEdges().length==1&&(z.push(M[$]),M[$][0].getOwner().remove(M[$][0]));k.push(z),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=k},I.prototype.growTree=function(k){for(var L=k.length,R=k[L-1],O,M=0;M<R.length;M++)O=R[M],this.findPlaceforPrunedNode(O),O[2].add(O[0]),O[2].add(O[1],O[1].source,O[1].target);k.splice(k.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},I.prototype.findPlaceforPrunedNode=function(k){var L,R,O=k[0];if(O==k[1].source?R=k[1].target:R=k[1].source,m.PURE_INCREMENTAL)O.setCenter(R.getCenterX()+k[3].getWidth(),R.getCenterY()+k[3].getHeight());else{var M=R.startX,B=R.finishX,F=R.startY,P=R.finishY,z=0,$=0,H=0,Q=0,j=[z,H,$,Q];if(F>0)for(var ie=M;ie<=B;ie++)j[0]+=this.grid[ie][F-1].length+this.grid[ie][F].length-1;if(B<this.grid.length-1)for(var ie=F;ie<=P;ie++)j[1]+=this.grid[B+1][ie].length+this.grid[B][ie].length-1;if(P<this.grid[0].length-1)for(var ie=M;ie<=B;ie++)j[2]+=this.grid[ie][P+1].length+this.grid[ie][P].length-1;if(M>0)for(var ie=F;ie<=P;ie++)j[3]+=this.grid[M-1][ie].length+this.grid[M][ie].length-1;for(var ne=T.MAX_VALUE,le,he,K=0;K<j.length;K++)j[K]<ne?(ne=j[K],le=1,he=K):j[K]==ne&&le++;if(le==3&&ne==0)j[0]==0&&j[1]==0&&j[2]==0?L=1:j[0]==0&&j[1]==0&&j[3]==0?L=0:j[0]==0&&j[2]==0&&j[3]==0?L=3:j[1]==0&&j[2]==0&&j[3]==0&&(L=2);else if(le==2&&ne==0){var X=Math.floor(Math.random()*2);j[0]==0&&j[1]==0?X==0?L=0:L=1:j[0]==0&&j[2]==0?X==0?L=0:L=2:j[0]==0&&j[3]==0?X==0?L=0:L=3:j[1]==0&&j[2]==0?X==0?L=1:L=2:j[1]==0&&j[3]==0?X==0?L=1:L=3:X==0?L=2:L=3}else if(le==4&&ne==0){var X=Math.floor(Math.random()*4);L=X}else L=he;L==0?O.setCenter(R.getCenterX(),R.getCenterY()-R.getHeight()/2-y.DEFAULT_EDGE_LENGTH-O.getHeight()/2):L==1?O.setCenter(R.getCenterX()+R.getWidth()/2+y.DEFAULT_EDGE_LENGTH+O.getWidth()/2,R.getCenterY()):L==2?O.setCenter(R.getCenterX(),R.getCenterY()+R.getHeight()/2+y.DEFAULT_EDGE_LENGTH+O.getHeight()/2):O.setCenter(R.getCenterX()-R.getWidth()/2-y.DEFAULT_EDGE_LENGTH-O.getWidth()/2,R.getCenterY())}},a.exports=I},991:(a,s,l)=>{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v<g.length;v++)y=g[v],y.getChild()==null?(y.displacementX+=p,y.displacementY+=m):y.propogateDisplacementToChildren(p,m)},f.prototype.move=function(){var p=this.graphManager.getLayout();(this.child==null||this.child.getNodes().length==0)&&(this.moveBy(this.displacementX,this.displacementY),p.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY)),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},f.prototype.setPred1=function(p){this.pred1=p},f.prototype.getPred1=function(){return pred1},f.prototype.getPred2=function(){return pred2},f.prototype.setNext=function(p){this.next=p},f.prototype.getNext=function(){return next},f.prototype.setProcessed=function(p){this.processed=p},f.prototype.isProcessed=function(){return processed},a.exports=f},902:(a,s,l)=>{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y<g.length;y++)v[y]=g[y];return v}else return Array.from(g)}o(u,"_toConsumableArray");var h=l(806),f=l(551).LinkedList,d=l(551).Matrix,p=l(551).SVD;function m(){}o(m,"ConstraintHandler"),m.handleConstraints=function(g){var y={};y.fixedNodeConstraint=g.constraints.fixedNodeConstraint,y.alignmentConstraint=g.constraints.alignmentConstraint,y.relativePlacementConstraint=g.constraints.relativePlacementConstraint;for(var v=new Map,x=new Map,b=[],w=[],C=g.getAllNodes(),T=0,E=0;E<C.length;E++){var A=C[E];A.getChild()==null&&(x.set(A.id,T++),b.push(A.getCenterX()),w.push(A.getCenterY()),v.set(A.id,A))}y.relativePlacementConstraint&&y.relativePlacementConstraint.forEach(function(oe){!oe.gap&&oe.gap!=0&&(oe.left?oe.gap=h.DEFAULT_EDGE_LENGTH+v.get(oe.left).getWidth()/2+v.get(oe.right).getWidth()/2:oe.gap=h.DEFAULT_EDGE_LENGTH+v.get(oe.top).getHeight()/2+v.get(oe.bottom).getHeight()/2)});var S=o(function(V,xe){return{x:V.x-xe.x,y:V.y-xe.y}},"calculatePositionDiff"),_=o(function(V){var xe=0,q=0;return V.forEach(function(pe){xe+=b[x.get(pe)],q+=w[x.get(pe)]}),{x:xe/V.size,y:q/V.size}},"calculateAvgPosition"),I=o(function(V,xe,q,pe,ve){function Pe(st,Ue){var ct=new Set(st),We=!0,ot=!1,Yt=void 0;try{for(var bt=Ue[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;ct.add(xt)}}catch(ut){ot=!0,Yt=ut}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}return ct}o(Pe,"setUnion");var _e=new Map;V.forEach(function(st,Ue){_e.set(Ue,0)}),V.forEach(function(st,Ue){st.forEach(function(ct){_e.set(ct.id,_e.get(ct.id)+1)})});var we=new Map,Ve=new Map,De=new f;_e.forEach(function(st,Ue){st==0?(De.push(Ue),q||(xe=="horizontal"?we.set(Ue,x.has(Ue)?b[x.get(Ue)]:pe.get(Ue)):we.set(Ue,x.has(Ue)?w[x.get(Ue)]:pe.get(Ue)))):we.set(Ue,Number.NEGATIVE_INFINITY),q&&Ve.set(Ue,new Set([Ue]))}),q&&ve.forEach(function(st){var Ue=[];if(st.forEach(function(ot){q.has(ot)&&Ue.push(ot)}),Ue.length>0){var ct=0;Ue.forEach(function(ot){xe=="horizontal"?(we.set(ot,x.has(ot)?b[x.get(ot)]:pe.get(ot)),ct+=we.get(ot)):(we.set(ot,x.has(ot)?w[x.get(ot)]:pe.get(ot)),ct+=we.get(ot))}),ct=ct/Ue.length,st.forEach(function(ot){q.has(ot)||we.set(ot,ct)})}else{var We=0;st.forEach(function(ot){xe=="horizontal"?We+=x.has(ot)?b[x.get(ot)]:pe.get(ot):We+=x.has(ot)?w[x.get(ot)]:pe.get(ot)}),We=We/st.length,st.forEach(function(ot){we.set(ot,We)})}});for(var qe=o(function(){var Ue=De.shift(),ct=V.get(Ue);ct.forEach(function(We){if(we.get(We.id)<we.get(Ue)+We.gap)if(q&&q.has(We.id)){var ot=void 0;if(xe=="horizontal"?ot=x.has(We.id)?b[x.get(We.id)]:pe.get(We.id):ot=x.has(We.id)?w[x.get(We.id)]:pe.get(We.id),we.set(We.id,ot),ot<we.get(Ue)+We.gap){var Yt=we.get(Ue)+We.gap-ot;Ve.get(Ue).forEach(function(bt){we.set(bt,we.get(bt)-Yt)})}}else we.set(We.id,we.get(Ue)+We.gap);_e.set(We.id,_e.get(We.id)-1),_e.get(We.id)==0&&De.push(We.id),q&&Ve.set(We.id,Pe(Ve.get(Ue),Ve.get(We.id)))})},"_loop");De.length!=0;)qe();if(q){var at=new Set;V.forEach(function(st,Ue){st.length==0&&at.add(Ue)});var Rt=[];Ve.forEach(function(st,Ue){if(at.has(Ue)){var ct=!1,We=!0,ot=!1,Yt=void 0;try{for(var bt=st[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;q.has(xt)&&(ct=!0)}}catch(ft){ot=!0,Yt=ft}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}if(!ct){var ut=!1,Et=void 0;Rt.forEach(function(ft,yt){ft.has([].concat(u(st))[0])&&(ut=!0,Et=yt)}),ut?st.forEach(function(ft){Rt[Et].add(ft)}):Rt.push(new Set(st))}}}),Rt.forEach(function(st,Ue){var ct=Number.POSITIVE_INFINITY,We=Number.POSITIVE_INFINITY,ot=Number.NEGATIVE_INFINITY,Yt=Number.NEGATIVE_INFINITY,bt=!0,Mt=!1,xt=void 0;try{for(var ut=st[Symbol.iterator](),Et;!(bt=(Et=ut.next()).done);bt=!0){var ft=Et.value,yt=void 0;xe=="horizontal"?yt=x.has(ft)?b[x.get(ft)]:pe.get(ft):yt=x.has(ft)?w[x.get(ft)]:pe.get(ft);var nt=we.get(ft);yt<ct&&(ct=yt),yt>ot&&(ot=yt),nt<We&&(We=nt),nt>Yt&&(Yt=nt)}}catch(At){Mt=!0,xt=At}finally{try{!bt&&ut.return&&ut.return()}finally{if(Mt)throw xt}}var dn=(ct+ot)/2-(We+Yt)/2,Tt=!0,On=!1,tn=void 0;try{for(var _r=st[Symbol.iterator](),Dr;!(Tt=(Dr=_r.next()).done);Tt=!0){var Pn=Dr.value;we.set(Pn,we.get(Pn)+dn)}}catch(At){On=!0,tn=At}finally{try{!Tt&&_r.return&&_r.return()}finally{if(On)throw tn}}})}return we},"findAppropriatePositionForRelativePlacement"),D=o(function(V){var xe=0,q=0,pe=0,ve=0;if(V.forEach(function(Ve){Ve.left?b[x.get(Ve.left)]-b[x.get(Ve.right)]>=0?xe++:q++:w[x.get(Ve.top)]-w[x.get(Ve.bottom)]>=0?pe++:ve++}),xe>q&&pe>ve)for(var Pe=0;Pe<x.size;Pe++)b[Pe]=-1*b[Pe],w[Pe]=-1*w[Pe];else if(xe>q)for(var _e=0;_e<x.size;_e++)b[_e]=-1*b[_e];else if(pe>ve)for(var we=0;we<x.size;we++)w[we]=-1*w[we]},"applyReflectionForRelativePlacement"),k=o(function(V){var xe=[],q=new f,pe=new Set,ve=0;return V.forEach(function(Pe,_e){if(!pe.has(_e)){xe[ve]=[];var we=_e;for(q.push(we),pe.add(we),xe[ve].push(we);q.length!=0;){we=q.shift();var Ve=V.get(we);Ve.forEach(function(De){pe.has(De.id)||(q.push(De.id),pe.add(De.id),xe[ve].push(De.id))})}ve++}}),xe},"findComponents"),L=o(function(V){var xe=new Map;return V.forEach(function(q,pe){xe.set(pe,[])}),V.forEach(function(q,pe){q.forEach(function(ve){xe.get(pe).push(ve),xe.get(ve.id).push({id:pe,gap:ve.gap,direction:ve.direction})})}),xe},"dagToUndirected"),R=o(function(V){var xe=new Map;return V.forEach(function(q,pe){xe.set(pe,[])}),V.forEach(function(q,pe){q.forEach(function(ve){xe.get(ve.id).push({id:pe,gap:ve.gap,direction:ve.direction})})}),xe},"dagToReversed"),O=[],M=[],B=!1,F=!1,P=new Set,z=new Map,$=new Map,H=[];if(y.fixedNodeConstraint&&y.fixedNodeConstraint.forEach(function(oe){P.add(oe.nodeId)}),y.relativePlacementConstraint&&(y.relativePlacementConstraint.forEach(function(oe){oe.left?(z.has(oe.left)?z.get(oe.left).push({id:oe.right,gap:oe.gap,direction:"horizontal"}):z.set(oe.left,[{id:oe.right,gap:oe.gap,direction:"horizontal"}]),z.has(oe.right)||z.set(oe.right,[])):(z.has(oe.top)?z.get(oe.top).push({id:oe.bottom,gap:oe.gap,direction:"vertical"}):z.set(oe.top,[{id:oe.bottom,gap:oe.gap,direction:"vertical"}]),z.has(oe.bottom)||z.set(oe.bottom,[]))}),$=L(z),H=k($)),h.TRANSFORM_ON_CONSTRAINT_HANDLING){if(y.fixedNodeConstraint&&y.fixedNodeConstraint.length>1)y.fixedNodeConstraint.forEach(function(oe,V){O[V]=[oe.position.x,oe.position.y],M[V]=[b[x.get(oe.nodeId)],w[x.get(oe.nodeId)]]}),B=!0;else if(y.alignmentConstraint)(function(){var oe=0;if(y.alignmentConstraint.vertical){for(var V=y.alignmentConstraint.vertical,xe=o(function(we){var Ve=new Set;V[we].forEach(function(at){Ve.add(at)});var De=new Set([].concat(u(Ve)).filter(function(at){return P.has(at)})),qe=void 0;De.size>0?qe=b[x.get(De.values().next().value)]:qe=_(Ve).x,V[we].forEach(function(at){O[oe]=[qe,w[x.get(at)]],M[oe]=[b[x.get(at)],w[x.get(at)]],oe++})},"_loop2"),q=0;q<V.length;q++)xe(q);B=!0}if(y.alignmentConstraint.horizontal){for(var pe=y.alignmentConstraint.horizontal,ve=o(function(we){var Ve=new Set;pe[we].forEach(function(at){Ve.add(at)});var De=new Set([].concat(u(Ve)).filter(function(at){return P.has(at)})),qe=void 0;De.size>0?qe=b[x.get(De.values().next().value)]:qe=_(Ve).y,pe[we].forEach(function(at){O[oe]=[b[x.get(at)],qe],M[oe]=[b[x.get(at)],w[x.get(at)]],oe++})},"_loop3"),Pe=0;Pe<pe.length;Pe++)ve(Pe);B=!0}y.relativePlacementConstraint&&(F=!0)})();else if(y.relativePlacementConstraint){for(var Q=0,j=0,ie=0;ie<H.length;ie++)H[ie].length>Q&&(Q=H[ie].length,j=ie);if(Q<$.size/2)D(y.relativePlacementConstraint),B=!1,F=!1;else{var ne=new Map,le=new Map,he=[];H[j].forEach(function(oe){z.get(oe).forEach(function(V){V.direction=="horizontal"?(ne.has(oe)?ne.get(oe).push(V):ne.set(oe,[V]),ne.has(V.id)||ne.set(V.id,[]),he.push({left:oe,right:V.id})):(le.has(oe)?le.get(oe).push(V):le.set(oe,[V]),le.has(V.id)||le.set(V.id,[]),he.push({top:oe,bottom:V.id}))})}),D(he),F=!1;var K=I(ne,"horizontal"),X=I(le,"vertical");H[j].forEach(function(oe,V){M[V]=[b[x.get(oe)],w[x.get(oe)]],O[V]=[],K.has(oe)?O[V][0]=K.get(oe):O[V][0]=b[x.get(oe)],X.has(oe)?O[V][1]=X.get(oe):O[V][1]=w[x.get(oe)]}),B=!0}}if(B){for(var te=void 0,J=d.transpose(O),se=d.transpose(M),ue=0;ue<J.length;ue++)J[ue]=d.multGamma(J[ue]),se[ue]=d.multGamma(se[ue]);var Z=d.multMat(J,d.transpose(se)),Se=p.svd(Z);te=d.multMat(Se.V,d.transpose(Se.U));for(var ce=0;ce<x.size;ce++){var ae=[b[ce],w[ce]],Oe=[te[0][0],te[1][0]],ge=[te[0][1],te[1][1]];b[ce]=d.dotProduct(ae,Oe),w[ce]=d.dotProduct(ae,ge)}F&&D(y.relativePlacementConstraint)}}if(h.ENFORCE_CONSTRAINTS){if(y.fixedNodeConstraint&&y.fixedNodeConstraint.length>0){var ze={x:0,y:0};y.fixedNodeConstraint.forEach(function(oe,V){var xe={x:b[x.get(oe.nodeId)],y:w[x.get(oe.nodeId)]},q=oe.position,pe=S(q,xe);ze.x+=pe.x,ze.y+=pe.y}),ze.x/=y.fixedNodeConstraint.length,ze.y/=y.fixedNodeConstraint.length,b.forEach(function(oe,V){b[V]+=ze.x}),w.forEach(function(oe,V){w[V]+=ze.y}),y.fixedNodeConstraint.forEach(function(oe){b[x.get(oe.nodeId)]=oe.position.x,w[x.get(oe.nodeId)]=oe.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var He=y.alignmentConstraint.vertical,$e=o(function(V){var xe=new Set;He[V].forEach(function(ve){xe.add(ve)});var q=new Set([].concat(u(xe)).filter(function(ve){return P.has(ve)})),pe=void 0;q.size>0?pe=b[x.get(q.values().next().value)]:pe=_(xe).x,xe.forEach(function(ve){P.has(ve)||(b[x.get(ve)]=pe)})},"_loop4"),Re=0;Re<He.length;Re++)$e(Re);if(y.alignmentConstraint.horizontal)for(var Ie=y.alignmentConstraint.horizontal,be=o(function(V){var xe=new Set;Ie[V].forEach(function(ve){xe.add(ve)});var q=new Set([].concat(u(xe)).filter(function(ve){return P.has(ve)})),pe=void 0;q.size>0?pe=w[x.get(q.values().next().value)]:pe=_(xe).y,xe.forEach(function(ve){P.has(ve)||(w[x.get(ve)]=pe)})},"_loop5"),W=0;W<Ie.length;W++)be(W)}y.relativePlacementConstraint&&function(){var oe=new Map,V=new Map,xe=new Map,q=new Map,pe=new Map,ve=new Map,Pe=new Set,_e=new Set;if(P.forEach(function(Hr){Pe.add(Hr),_e.add(Hr)}),y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var we=y.alignmentConstraint.vertical,Ve=o(function(et){xe.set("dummy"+et,[]),we[et].forEach(function(mt){oe.set(mt,"dummy"+et),xe.get("dummy"+et).push(mt),P.has(mt)&&Pe.add("dummy"+et)}),pe.set("dummy"+et,b[x.get(we[et][0])])},"_loop6"),De=0;De<we.length;De++)Ve(De);if(y.alignmentConstraint.horizontal)for(var qe=y.alignmentConstraint.horizontal,at=o(function(et){q.set("dummy"+et,[]),qe[et].forEach(function(mt){V.set(mt,"dummy"+et),q.get("dummy"+et).push(mt),P.has(mt)&&_e.add("dummy"+et)}),ve.set("dummy"+et,w[x.get(qe[et][0])])},"_loop7"),Rt=0;Rt<qe.length;Rt++)at(Rt)}var st=new Map,Ue=new Map,ct=o(function(et){z.get(et).forEach(function(mt){var Kt=void 0,lt=void 0;mt.direction=="horizontal"?(Kt=oe.get(et)?oe.get(et):et,oe.get(mt.id)?lt={id:oe.get(mt.id),gap:mt.gap,direction:mt.direction}:lt=mt,st.has(Kt)?st.get(Kt).push(lt):st.set(Kt,[lt]),st.has(lt.id)||st.set(lt.id,[])):(Kt=V.get(et)?V.get(et):et,V.get(mt.id)?lt={id:V.get(mt.id),gap:mt.gap,direction:mt.direction}:lt=mt,Ue.has(Kt)?Ue.get(Kt).push(lt):Ue.set(Kt,[lt]),Ue.has(lt.id)||Ue.set(lt.id,[]))})},"_loop8"),We=!0,ot=!1,Yt=void 0;try{for(var bt=z.keys()[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;ct(xt)}}catch(Hr){ot=!0,Yt=Hr}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}var ut=L(st),Et=L(Ue),ft=k(ut),yt=k(Et),nt=R(st),dn=R(Ue),Tt=[],On=[];ft.forEach(function(Hr,et){Tt[et]=[],Hr.forEach(function(mt){nt.get(mt).length==0&&Tt[et].push(mt)})}),yt.forEach(function(Hr,et){On[et]=[],Hr.forEach(function(mt){dn.get(mt).length==0&&On[et].push(mt)})});var tn=I(st,"horizontal",Pe,pe,Tt),_r=I(Ue,"vertical",_e,ve,On),Dr=o(function(et){xe.get(et)?xe.get(et).forEach(function(mt){b[x.get(mt)]=tn.get(et)}):b[x.get(et)]=tn.get(et)},"_loop9"),Pn=!0,At=!1,Ce=void 0;try{for(var tt=tn.keys()[Symbol.iterator](),St;!(Pn=(St=tt.next()).done);Pn=!0){var mr=St.value;Dr(mr)}}catch(Hr){At=!0,Ce=Hr}finally{try{!Pn&&tt.return&&tt.return()}finally{if(At)throw Ce}}var rn=o(function(et){q.get(et)?q.get(et).forEach(function(mt){w[x.get(mt)]=_r.get(et)}):w[x.get(et)]=_r.get(et)},"_loop10"),gn=!0,Zr=!1,Ni=void 0;try{for(var Zn=_r.keys()[Symbol.iterator](),Sn;!(gn=(Sn=Zn.next()).done);gn=!0){var mr=Sn.value;rn(mr)}}catch(Hr){Zr=!0,Ni=Hr}finally{try{!gn&&Zn.return&&Zn.return()}finally{if(Zr)throw Ni}}}()}for(var de=0;de<C.length;de++){var re=C[de];re.getChild()==null&&re.setCenter(b[x.get(re.id)],w[x.get(re.id)])}},a.exports=m},551:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(45);return i})()})});var Pve=Mi((E4,gF)=>{"use strict";o(function(e,r){typeof E4=="object"&&typeof gF=="object"?gF.exports=r(mF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof E4=="object"?E4.cytoscapeFcose=r(mF()):e.cytoscapeFcose=r(e.coseBase)},"webpackUniversalModuleDefinition")(E4,function(t){return(()=>{"use strict";var e={658:a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h<l;h++)u[h-1]=arguments[h];return u.forEach(function(f){Object.keys(f).forEach(function(d){return s[d]=f[d]})}),s}},548:(a,s,l)=>{var u=function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),w;!(y=(w=b.next()).done)&&(g.push(w.value),!(m&&g.length===m));y=!0);}catch(C){v=!0,x=C}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m<d.length;m++)p[d[m].id()]=!0;var g=d.filter(function(y,v){typeof y=="number"&&(y=v);for(var x=y.parent()[0];x!=null;){if(p[x.id()])return!1;x=x.parent()[0]}return!0});return g},f.connectComponents=function(d,p,m,g){var y=new h,v=new Set,x=[],b=void 0,w=void 0,C=void 0,T=!1,E=1,A=[],S=[],_=o(function(){var D=d.collection();S.push(D);var k=m[0],L=d.collection();L.merge(k).merge(k.descendants().intersection(p)),x.push(k),L.forEach(function(M){y.push(M),v.add(M),D.merge(M)});for(var R=o(function(){k=y.shift();var B=d.collection();k.neighborhood().nodes().forEach(function($){p.intersection(k.edgesWith($)).length>0&&B.merge($)});for(var F=0;F<B.length;F++){var P=B[F];if(b=m.intersection(P.union(P.ancestors())),b!=null&&!v.has(b[0])){var z=b.union(b.descendants());z.forEach(function($){y.push($),v.add($),D.merge($),m.has($)&&x.push($)})}}},"_loop2");y.length!=0;)R();if(D.forEach(function(M){p.intersection(M.connectedEdges()).forEach(function(B){D.has(B.source())&&D.has(B.target())&&D.merge(B)})}),x.length==m.length&&(T=!0),!T||T&&E>1){w=x[0],C=w.connectedEdges().length,x.forEach(function(M){M.connectedEdges().length<C&&(C=M.connectedEdges().length,w=M)}),A.push(w.id());var O=d.collection();O.merge(x[0]),x.forEach(function(M){O.merge(M)}),x=[],m=m.difference(O),E++}},"_loop");do _();while(!T);return g&&A.length>0&&g.set("dummy"+(g.size+1),A),S},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,w=!1,C=void 0;try{for(var T=p.nodeIndexes[Symbol.iterator](),E;!(b=(E=T.next()).done);b=!0){var A=E.value,S=u(A,2),_=S[0],I=S[1],D=m.cy.getElementById(_);if(D){var k=D.boundingBox(),L=p.xCoords[I]-k.w/2,R=p.xCoords[I]+k.w/2,O=p.yCoords[I]-k.h/2,M=p.yCoords[I]+k.h/2;L<g&&(g=L),R>y&&(y=R),O<v&&(v=O),M>x&&(x=M)}}}catch($){w=!0,C=$}finally{try{!b&&T.return&&T.return()}finally{if(w)throw C}}var B=d.x-(y+g)/2,F=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function($){return $+B}),p.yCoords=p.yCoords.map(function($){return $+F})}else{Object.keys(p).forEach(function($){var H=p[$],Q=H.getRect().x,j=H.getRect().x+H.getRect().width,ie=H.getRect().y,ne=H.getRect().y+H.getRect().height;Q<g&&(g=Q),j>y&&(y=j),ie<v&&(v=ie),ne>x&&(x=ne)});var P=d.x-(y+g)/2,z=d.y-(x+v)/2;Object.keys(p).forEach(function($){var H=p[$];H.setCenter(H.getCenterX()+P,H.getCenterY()+z)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,w=void 0,C=void 0,T=void 0,E=void 0,A=d.descendants().not(":parent"),S=A.length,_=0;_<S;_++){var I=A[_];w=p[g.get(I.id())]-I.width()/2,C=p[g.get(I.id())]+I.width()/2,T=m[g.get(I.id())]-I.height()/2,E=m[g.get(I.id())]+I.height()/2,y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var D={};return D.topLeftX=y,D.topLeftY=x,D.width=v-y,D.height=b-x,D},f.calcParentsWithoutChildren=function(d,p){var m=d.collection();return p.nodes(":parent").forEach(function(g){var y=!1;g.children().forEach(function(v){v.css("display")!="none"&&(y=!0)}),y||m.merge(g)}),m},a.exports=f},816:(a,s,l)=>{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,w){var C=b.cy,T=b.eles,E=T.nodes(),A=T.edges(),S=void 0,_=void 0,I=void 0,D={};b.randomize&&(S=w.nodeIndexes,_=w.xCoords,I=w.yCoords);var k=o(function($){return typeof $=="function"},"isFn"),L=o(function($,H){return k($)?$(H):$},"optFn"),R=u.calcParentsWithoutChildren(C,T),O=o(function z($,H,Q,j){for(var ie=H.length,ne=0;ne<ie;ne++){var le=H[ne],he=null;le.intersection(R).length==0&&(he=le.children());var K=void 0,X=le.layoutDimensions({nodeDimensionsIncludeLabels:j.nodeDimensionsIncludeLabels});if(le.outerWidth()!=null&&le.outerHeight()!=null)if(j.randomize)if(!le.isParent())K=$.add(new f(Q.graphManager,new d(_[S.get(le.id())]-X.w/2,I[S.get(le.id())]-X.h/2),new p(parseFloat(X.w),parseFloat(X.h))));else{var te=u.calcBoundingBox(le,_,I,S);le.intersection(R).length==0?K=$.add(new f(Q.graphManager,new d(te.topLeftX,te.topLeftY),new p(te.width,te.height))):K=$.add(new f(Q.graphManager,new d(te.topLeftX,te.topLeftY),new p(parseFloat(X.w),parseFloat(X.h))))}else K=$.add(new f(Q.graphManager,new d(le.position("x")-X.w/2,le.position("y")-X.h/2),new p(parseFloat(X.w),parseFloat(X.h))));else K=$.add(new f(this.graphManager));if(K.id=le.data("id"),K.nodeRepulsion=L(j.nodeRepulsion,le),K.paddingLeft=parseInt(le.css("padding")),K.paddingTop=parseInt(le.css("padding")),K.paddingRight=parseInt(le.css("padding")),K.paddingBottom=parseInt(le.css("padding")),j.nodeDimensionsIncludeLabels&&(K.labelWidth=le.boundingBox({includeLabels:!0,includeNodes:!1,includeOverlays:!1}).w,K.labelHeight=le.boundingBox({includeLabels:!0,includeNodes:!1,includeOverlays:!1}).h,K.labelPosVertical=le.css("text-valign"),K.labelPosHorizontal=le.css("text-halign")),D[le.data("id")]=K,isNaN(K.rect.x)&&(K.rect.x=0),isNaN(K.rect.y)&&(K.rect.y=0),he!=null&&he.length>0){var J=void 0;J=Q.getGraphManager().add(Q.newGraph(),K),z(J,he,Q,j)}}},"processChildrenList"),M=o(function($,H,Q){for(var j=0,ie=0,ne=0;ne<Q.length;ne++){var le=Q[ne],he=D[le.data("source")],K=D[le.data("target")];if(he&&K&&he!==K&&he.getEdgesBetween(K).length==0){var X=H.add($.newEdge(),he,K);X.id=le.id(),X.idealLength=L(b.idealEdgeLength,le),X.edgeElasticity=L(b.edgeElasticity,le),j+=X.idealLength,ie++}}b.idealEdgeLength!=null&&(ie>0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=j/ie:k(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),B=o(function($,H){H.fixedNodeConstraint&&($.constraints.fixedNodeConstraint=H.fixedNodeConstraint),H.alignmentConstraint&&($.constraints.alignmentConstraint=H.alignmentConstraint),H.relativePlacementConstraint&&($.constraints.relativePlacementConstraint=H.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var F=new h,P=F.newGraphManager();return O(P.addRoot(),u.getTopMostNodes(E),F,b),M(F,P,A),B(F,b),F.runLayout(),D},"coseLayout");a.exports={coseLayout:v}},212:(a,s,l)=>{var u=function(){function b(w,C){for(var T=0;T<C.length;T++){var E=C[T];E.enumerable=E.enumerable||!1,E.configurable=!0,"value"in E&&(E.writable=!0),Object.defineProperty(w,E.key,E)}}return o(b,"defineProperties"),function(w,C,T){return C&&b(w.prototype,C),T&&b(w,T),w}}();function h(b,w){if(!(b instanceof w))throw new TypeError("Cannot call a class as a function")}o(h,"_classCallCheck");var f=l(658),d=l(548),p=l(657),m=p.spectralLayout,g=l(816),y=g.coseLayout,v=Object.freeze({quality:"default",randomize:!0,animate:!0,animationDuration:1e3,animationEasing:void 0,fit:!0,padding:30,nodeDimensionsIncludeLabels:!1,uniformNodeDimensions:!1,packComponents:!0,step:"all",samplingType:!0,sampleSize:25,nodeSeparation:75,piTol:1e-7,nodeRepulsion:o(function(w){return 4500},"nodeRepulsion"),idealEdgeLength:o(function(w){return 50},"idealEdgeLength"),edgeElasticity:o(function(w){return .45},"edgeElasticity"),nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,tilingCompareBy:void 0,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.3,fixedNodeConstraint:void 0,alignmentConstraint:void 0,relativePlacementConstraint:void 0,ready:o(function(){},"ready"),stop:o(function(){},"stop")}),x=function(){function b(w){h(this,b),this.options=f({},v,w)}return o(b,"Layout"),u(b,[{key:"run",value:o(function(){var C=this,T=this.options,E=T.cy,A=T.eles,S=[],_=void 0,I=void 0,D=[],k=void 0,L=[];T.fixedNodeConstraint&&(!Array.isArray(T.fixedNodeConstraint)||T.fixedNodeConstraint.length==0)&&(T.fixedNodeConstraint=void 0),T.alignmentConstraint&&(T.alignmentConstraint.vertical&&(!Array.isArray(T.alignmentConstraint.vertical)||T.alignmentConstraint.vertical.length==0)&&(T.alignmentConstraint.vertical=void 0),T.alignmentConstraint.horizontal&&(!Array.isArray(T.alignmentConstraint.horizontal)||T.alignmentConstraint.horizontal.length==0)&&(T.alignmentConstraint.horizontal=void 0)),T.relativePlacementConstraint&&(!Array.isArray(T.relativePlacementConstraint)||T.relativePlacementConstraint.length==0)&&(T.relativePlacementConstraint=void 0);var R=T.fixedNodeConstraint||T.alignmentConstraint||T.relativePlacementConstraint;R&&(T.tile=!1,T.packComponents=!1);var O=void 0,M=!1;if(E.layoutUtilities&&T.packComponents&&(O=E.layoutUtilities("get"),O||(O=E.layoutUtilities()),M=!0),A.nodes().length>0)if(M){var P=d.getTopMostNodes(T.eles.nodes());if(k=d.connectComponents(E,T.eles,P),k.forEach(function(ce){var ae=ce.boundingBox();L.push({x:ae.x1+ae.w/2,y:ae.y1+ae.h/2})}),T.randomize&&k.forEach(function(ce){T.eles=ce,S.push(m(T))}),T.quality=="default"||T.quality=="proof"){var z=E.collection();if(T.tile){var $=new Map,H=[],Q=[],j=0,ie={nodeIndexes:$,xCoords:H,yCoords:Q},ne=[];if(k.forEach(function(ce,ae){ce.edges().length==0&&(ce.nodes().forEach(function(Oe,ge){z.merge(ce.nodes()[ge]),Oe.isParent()||(ie.nodeIndexes.set(ce.nodes()[ge].id(),j++),ie.xCoords.push(ce.nodes()[0].position().x),ie.yCoords.push(ce.nodes()[0].position().y))}),ne.push(ae))}),z.length>1){var le=z.boundingBox();L.push({x:le.x1+le.w/2,y:le.y1+le.h/2}),k.push(z),S.push(ie);for(var he=ne.length-1;he>=0;he--)k.splice(ne[he],1),S.splice(ne[he],1),L.splice(ne[he],1)}}k.forEach(function(ce,ae){T.eles=ce,D.push(y(T,S[ae])),d.relocateComponent(L[ae],D[ae],T)})}else k.forEach(function(ce,ae){d.relocateComponent(L[ae],S[ae],T)});var K=new Set;if(k.length>1){var X=[],te=A.filter(function(ce){return ce.css("display")=="none"});k.forEach(function(ce,ae){var Oe=void 0;if(T.quality=="draft"&&(Oe=S[ae].nodeIndexes),ce.nodes().not(te).length>0){var ge={};ge.edges=[],ge.nodes=[];var ze=void 0;ce.nodes().not(te).forEach(function(He){if(T.quality=="draft")if(!He.isParent())ze=Oe.get(He.id()),ge.nodes.push({x:S[ae].xCoords[ze]-He.boundingbox().w/2,y:S[ae].yCoords[ze]-He.boundingbox().h/2,width:He.boundingbox().w,height:He.boundingbox().h});else{var $e=d.calcBoundingBox(He,S[ae].xCoords,S[ae].yCoords,Oe);ge.nodes.push({x:$e.topLeftX,y:$e.topLeftY,width:$e.width,height:$e.height})}else D[ae][He.id()]&&ge.nodes.push({x:D[ae][He.id()].getLeft(),y:D[ae][He.id()].getTop(),width:D[ae][He.id()].getWidth(),height:D[ae][He.id()].getHeight()})}),ce.edges().forEach(function(He){var $e=He.source(),Re=He.target();if($e.css("display")!="none"&&Re.css("display")!="none")if(T.quality=="draft"){var Ie=Oe.get($e.id()),be=Oe.get(Re.id()),W=[],de=[];if($e.isParent()){var re=d.calcBoundingBox($e,S[ae].xCoords,S[ae].yCoords,Oe);W.push(re.topLeftX+re.width/2),W.push(re.topLeftY+re.height/2)}else W.push(S[ae].xCoords[Ie]),W.push(S[ae].yCoords[Ie]);if(Re.isParent()){var oe=d.calcBoundingBox(Re,S[ae].xCoords,S[ae].yCoords,Oe);de.push(oe.topLeftX+oe.width/2),de.push(oe.topLeftY+oe.height/2)}else de.push(S[ae].xCoords[be]),de.push(S[ae].yCoords[be]);ge.edges.push({startX:W[0],startY:W[1],endX:de[0],endY:de[1]})}else D[ae][$e.id()]&&D[ae][Re.id()]&&ge.edges.push({startX:D[ae][$e.id()].getCenterX(),startY:D[ae][$e.id()].getCenterY(),endX:D[ae][Re.id()].getCenterX(),endY:D[ae][Re.id()].getCenterY()})}),ge.nodes.length>0&&(X.push(ge),K.add(ae))}});var J=O.packComponents(X,T.randomize).shifts;if(T.quality=="draft")S.forEach(function(ce,ae){var Oe=ce.xCoords.map(function(ze){return ze+J[ae].dx}),ge=ce.yCoords.map(function(ze){return ze+J[ae].dy});ce.xCoords=Oe,ce.yCoords=ge});else{var se=0;K.forEach(function(ce){Object.keys(D[ce]).forEach(function(ae){var Oe=D[ce][ae];Oe.setCenter(Oe.getCenterX()+J[se].dx,Oe.getCenterY()+J[se].dy)}),se++})}}}else{var B=T.eles.boundingBox();if(L.push({x:B.x1+B.w/2,y:B.y1+B.h/2}),T.randomize){var F=m(T);S.push(F)}T.quality=="default"||T.quality=="proof"?(D.push(y(T,S[0])),d.relocateComponent(L[0],D[0],T)):d.relocateComponent(L[0],S[0],T)}var ue=o(function(ae,Oe){if(T.quality=="default"||T.quality=="proof"){typeof ae=="number"&&(ae=Oe);var ge=void 0,ze=void 0,He=ae.data("id");return D.forEach(function(Re){He in Re&&(ge={x:Re[He].getRect().getCenterX(),y:Re[He].getRect().getCenterY()},ze=Re[He])}),T.nodeDimensionsIncludeLabels&&(ze.labelWidth&&(ze.labelPosHorizontal=="left"?ge.x+=ze.labelWidth/2:ze.labelPosHorizontal=="right"&&(ge.x-=ze.labelWidth/2)),ze.labelHeight&&(ze.labelPosVertical=="top"?ge.y+=ze.labelHeight/2:ze.labelPosVertical=="bottom"&&(ge.y-=ze.labelHeight/2))),ge==null&&(ge={x:ae.position("x"),y:ae.position("y")}),{x:ge.x,y:ge.y}}else{var $e=void 0;return S.forEach(function(Re){var Ie=Re.nodeIndexes.get(ae.id());Ie!=null&&($e={x:Re.xCoords[Ie],y:Re.yCoords[Ie]})}),$e==null&&($e={x:ae.position("x"),y:ae.position("y")}),{x:$e.x,y:$e.y}}},"getPositions");if(T.quality=="default"||T.quality=="proof"||T.randomize){var Z=d.calcParentsWithoutChildren(E,A),Se=A.filter(function(ce){return ce.css("display")=="none"});T.eles=A.not(Se),A.nodes().not(":parent").not(Se).layoutPositions(C,T,ue),Z.length>0&&Z.forEach(function(ce){ce.position(ue(ce))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b}();a.exports=x},657:(a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,w=new Map,C=new Map,T=[],E=[],A=[],S=[],_=[],I=[],D=[],k=[],L=void 0,R=void 0,O=1e8,M=1e-9,B=m.piTol,F=m.samplingType,P=m.nodeSeparation,z=void 0,$=o(function(){for(var xe=0,q=0,pe=!1;q<z;){xe=Math.floor(Math.random()*R),pe=!1;for(var ve=0;ve<q;ve++)if(S[ve]==xe){pe=!0;break}if(!pe)S[q]=xe,q++;else continue}},"randomSampleCR"),H=o(function(xe,q,pe){for(var ve=[],Pe=0,_e=0,we=0,Ve=void 0,De=[],qe=0,at=1,Rt=0;Rt<R;Rt++)De[Rt]=O;for(ve[_e]=xe,De[xe]=0;_e>=Pe;){we=ve[Pe++];for(var st=T[we],Ue=0;Ue<st.length;Ue++)Ve=w.get(st[Ue]),De[Ve]==O&&(De[Ve]=De[we]+1,ve[++_e]=Ve);I[we][q]=De[we]*P}if(pe){for(var ct=0;ct<R;ct++)I[ct][q]<_[ct]&&(_[ct]=I[ct][q]);for(var We=0;We<R;We++)_[We]>qe&&(qe=_[We],at=We)}return at},"BFS"),Q=o(function(xe){var q=void 0;if(xe){q=Math.floor(Math.random()*R),L=q;for(var ve=0;ve<R;ve++)_[ve]=O;for(var Pe=0;Pe<z;Pe++)S[Pe]=q,q=H(q,Pe,xe)}else{$();for(var pe=0;pe<z;pe++)H(S[pe],pe,xe,!1)}for(var _e=0;_e<R;_e++)for(var we=0;we<z;we++)I[_e][we]*=I[_e][we];for(var Ve=0;Ve<z;Ve++)D[Ve]=[];for(var De=0;De<z;De++)for(var qe=0;qe<z;qe++)D[De][qe]=I[S[qe]][De]},"allBFS"),j=o(function(){for(var xe=f.svd(D),q=xe.S,pe=xe.U,ve=xe.V,Pe=q[0]*q[0]*q[0],_e=[],we=0;we<z;we++){_e[we]=[];for(var Ve=0;Ve<z;Ve++)_e[we][Ve]=0,we==Ve&&(_e[we][Ve]=q[we]/(q[we]*q[we]+Pe/(q[we]*q[we])))}k=h.multMat(h.multMat(ve,_e),h.transpose(pe))},"sample"),ie=o(function(){for(var xe=void 0,q=void 0,pe=[],ve=[],Pe=[],_e=[],we=0;we<R;we++)pe[we]=Math.random(),ve[we]=Math.random();pe=h.normalize(pe),ve=h.normalize(ve);for(var Ve=0,De=M,qe=M,at=void 0;;){Ve++;for(var Rt=0;Rt<R;Rt++)Pe[Rt]=pe[Rt];if(pe=h.multGamma(h.multL(h.multGamma(Pe),I,k)),xe=h.dotProduct(Pe,pe),pe=h.normalize(pe),De=h.dotProduct(Pe,pe),at=Math.abs(De/qe),at<=1+B&&at>=1)break;qe=De}for(var st=0;st<R;st++)Pe[st]=pe[st];for(Ve=0,qe=M;;){Ve++;for(var Ue=0;Ue<R;Ue++)_e[Ue]=ve[Ue];if(_e=h.minusOp(_e,h.multCons(Pe,h.dotProduct(Pe,_e))),ve=h.multGamma(h.multL(h.multGamma(_e),I,k)),q=h.dotProduct(_e,ve),ve=h.normalize(ve),De=h.dotProduct(_e,ve),at=Math.abs(De/qe),at<=1+B&&at>=1)break;qe=De}for(var ct=0;ct<R;ct++)_e[ct]=ve[ct];E=h.multCons(Pe,Math.sqrt(Math.abs(xe))),A=h.multCons(_e,Math.sqrt(Math.abs(q)))},"powerIteration");u.connectComponents(g,y,u.getTopMostNodes(v),b),x.forEach(function(V){u.connectComponents(g,y,u.getTopMostNodes(V.descendants().intersection(y)),b)});for(var ne=0,le=0;le<v.length;le++)v[le].isParent()||w.set(v[le].id(),ne++);var he=!0,K=!1,X=void 0;try{for(var te=b.keys()[Symbol.iterator](),J;!(he=(J=te.next()).done);he=!0){var se=J.value;w.set(se,ne++)}}catch(V){K=!0,X=V}finally{try{!he&&te.return&&te.return()}finally{if(K)throw X}}for(var ue=0;ue<w.size;ue++)T[ue]=[];x.forEach(function(V){for(var xe=V.children().intersection(y);xe.nodes(":childless").length==0;)xe=xe.nodes()[0].children().intersection(y);var q=0,pe=xe.nodes(":childless")[0].connectedEdges().length;xe.nodes(":childless").forEach(function(ve,Pe){ve.connectedEdges().length<pe&&(pe=ve.connectedEdges().length,q=Pe)}),C.set(V.id(),xe.nodes(":childless")[q].id())}),v.forEach(function(V){var xe=void 0;V.isParent()?xe=w.get(C.get(V.id())):xe=w.get(V.id()),V.neighborhood().nodes().forEach(function(q){y.intersection(V.edgesWith(q)).length>0&&(q.isParent()?T[xe].push(C.get(q.id())):T[xe].push(q.id()))})});var Z=o(function(xe){var q=w.get(xe),pe=void 0;b.get(xe).forEach(function(ve){g.getElementById(ve).isParent()?pe=C.get(ve):pe=ve,T[q].push(pe),T[w.get(pe)].push(xe)})},"_loop"),Se=!0,ce=!1,ae=void 0;try{for(var Oe=b.keys()[Symbol.iterator](),ge;!(Se=(ge=Oe.next()).done);Se=!0){var ze=ge.value;Z(ze)}}catch(V){ce=!0,ae=V}finally{try{!Se&&Oe.return&&Oe.return()}finally{if(ce)throw ae}}R=w.size;var He=void 0;if(R>2){z=R<m.sampleSize?R:m.sampleSize;for(var $e=0;$e<R;$e++)I[$e]=[];for(var Re=0;Re<z;Re++)k[Re]=[];return m.quality=="draft"||m.step=="all"?(Q(F),j(),ie(),He={nodeIndexes:w,xCoords:E,yCoords:A}):(w.forEach(function(V,xe){E.push(g.getElementById(xe).position("x")),A.push(g.getElementById(xe).position("y"))}),He={nodeIndexes:w,xCoords:E,yCoords:A}),He}else{var Ie=w.keys(),be=g.getElementById(Ie.next().value),W=be.position(),de=be.outerWidth();if(E.push(W.x),A.push(W.y),R==2){var re=g.getElementById(Ie.next().value),oe=re.outerWidth();E.push(W.x+de/2+oe/2+m.idealEdgeLength),A.push(W.y)}return He={nodeIndexes:w,xCoords:E,yCoords:A},He}},"spectralLayout");a.exports={spectralLayout:d}},579:(a,s,l)=>{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h},140:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(579);return i})()})});var dy,Zp,yF=N(()=>{"use strict";tu();dy=o(t=>`<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/>${t}</g>`,"wrapIcon"),Zp={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:dy('<path id="b" data-name="4" d="m20,57.86c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path id="c" data-name="3" d="m20,45.95c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path id="d" data-name="2" d="m20,34.05c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse id="e" data-name="1" cx="40" cy="22.14" rx="20" ry="7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="20" y1="57.86" x2="20" y2="22.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="60" y1="57.86" x2="60" y2="22.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},server:{body:dy('<rect x="17.5" y="17.5" width="45" height="45" rx="2" ry="2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="32.5" x2="62.5" y2="32.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="47.5" x2="62.5" y2="47.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><g><path d="m56.25,25c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,25c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><path d="m56.25,40c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,40c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><path d="m56.25,55c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,55c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g>')},disk:{body:dy('<rect x="20" y="15" width="40" height="50" rx="1" ry="1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="24" cy="19.17" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="56" cy="19.17" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="24" cy="60.83" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="56" cy="60.83" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="40" cy="33.75" rx="14" ry="14.58" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="40" cy="33.75" rx="4" ry="4.17" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m37.51,42.52l-4.83,13.22c-.26.71-1.1,1.02-1.76.64l-4.18-2.42c-.66-.38-.81-1.26-.33-1.84l9.01-10.8c.88-1.05,2.56-.08,2.09,1.2Z" style="fill: #fff; stroke-width: 0px;"/>')},internet:{body:dy('<circle cx="40" cy="40" r="22.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="40" y1="17.5" x2="40" y2="62.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="40" x2="62.5" y2="40" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m39.99,17.51c-15.28,11.1-15.28,33.88,0,44.98" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m40.01,17.51c15.28,11.1,15.28,33.88,0,44.98" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="19.75" y1="30.1" x2="60.25" y2="30.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="19.75" y1="49.9" x2="60.25" y2="49.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},cloud:{body:dy('<path d="m65,47.5c0,2.76-2.24,5-5,5H20c-2.76,0-5-2.24-5-5,0-1.87,1.03-3.51,2.56-4.36-.04-.21-.06-.42-.06-.64,0-2.6,2.48-4.74,5.65-4.97,1.65-4.51,6.34-7.76,11.85-7.76.86,0,1.69.08,2.5.23,2.09-1.57,4.69-2.5,7.5-2.5,6.1,0,11.19,4.38,12.28,10.17,2.14.56,3.72,2.51,3.72,4.83,0,.03,0,.07-.01.1,2.29.46,4.01,2.48,4.01,4.9Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},unknown:OC,blank:{body:dy("")}}}});var Bve,Fve,$ve,zve,Gve=N(()=>{"use strict";tu();zt();to();w4();yF();oC();Bve=o(async function(t,e){let r=Li("padding"),n=Li("iconSize"),i=n/2,a=n/6,s=a/2;await Promise.all(e.edges().map(async l=>{let{source:u,sourceDir:h,sourceArrow:f,sourceGroup:d,target:p,targetDir:m,targetArrow:g,targetGroup:y,label:v}=sC(l),{x,y:b}=l[0].sourceEndpoint(),{x:w,y:C}=l[0].midpoint(),{x:T,y:E}=l[0].targetEndpoint(),A=r+4;if(d&&(Ha(h)?x+=h==="L"?-A:A:b+=h==="T"?-A:A+18),y&&(Ha(m)?T+=m==="L"?-A:A:E+=m==="T"?-A:A+18),!d&&Qp.getNode(u)?.type==="junction"&&(Ha(h)?x+=h==="L"?i:-i:b+=h==="T"?i:-i),!y&&Qp.getNode(p)?.type==="junction"&&(Ha(m)?T+=m==="L"?i:-i:E+=m==="T"?i:-i),l[0]._private.rscratch){let S=t.insert("g");if(S.insert("path").attr("d",`M ${x},${b} L ${w},${C} L${T},${E} `).attr("class","edge"),f){let _=Ha(h)?v4[h](x,a):x-s,I=Zc(h)?v4[h](b,a):b-s;S.insert("polygon").attr("points",cF[h](a)).attr("transform",`translate(${_},${I})`).attr("class","arrow")}if(g){let _=Ha(m)?v4[m](T,a):T-s,I=Zc(m)?v4[m](E,a):E-s;S.insert("polygon").attr("points",cF[m](a)).attr("transform",`translate(${_},${I})`).attr("class","arrow")}if(v){let _=x4(h,m)?"XY":Ha(h)?"X":"Y",I=0;_==="X"?I=Math.abs(x-T):_==="Y"?I=Math.abs(b-E)/1.5:I=Math.abs(x-T)/2;let D=S.append("g");if(await Hn(D,v,{useHtmlLabels:!1,width:I,classes:"architecture-service-label"},me()),D.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),_==="X")D.attr("transform","translate("+w+", "+C+")");else if(_==="Y")D.attr("transform","translate("+w+", "+C+") rotate(-90)");else if(_==="XY"){let k=b4(h,m);if(k&&Sve(k)){let L=D.node().getBoundingClientRect(),[R,O]=Ave(k);D.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*R*O*45})`);let M=D.node().getBoundingClientRect();D.attr("transform",` | |
| 2557 | + translate(${w}, ${C-L.height/2}) | |
| 2558 | + translate(${R*M.width/2}, ${O*M.height/2}) | |
| 2559 | + rotate(${-1*R*O*45}, 0, ${L.height/2}) | |
| 2560 | + `)}}}}}))},"drawEdges"),Fve=o(async function(t,e){let n=Li("padding")*.75,i=Li("fontSize"),s=Li("iconSize")/2;await Promise.all(e.nodes().map(async l=>{let u=Ff(l);if(u.type==="group"){let{h,w:f,x1:d,y1:p}=l.boundingBox();t.append("rect").attr("x",d+s).attr("y",p+s).attr("width",f).attr("height",h).attr("class","node-bkg");let m=t.append("g"),g=d,y=p;if(u.icon){let v=m.append("g");v.html(`<g>${await wo(u.icon,{height:n,width:n,fallbackPrefix:Zp.prefix})}</g>`),v.attr("transform","translate("+(g+s+1)+", "+(y+s+1)+")"),g+=n,y+=i/2-1-2}if(u.label){let v=m.append("g");await Hn(v,u.label,{useHtmlLabels:!1,width:f,classes:"architecture-service-label"},me()),v.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),v.attr("transform","translate("+(g+s+4)+", "+(y+s+2)+")")}}}))},"drawGroups"),$ve=o(async function(t,e,r){for(let n of r){let i=e.append("g"),a=Li("iconSize");if(n.title){let h=i.append("g");await Hn(h,n.title,{useHtmlLabels:!1,width:a*1.5,classes:"architecture-service-label"},me()),h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),h.attr("transform","translate("+a/2+", "+a+")")}let s=i.append("g");if(n.icon)s.html(`<g>${await wo(n.icon,{height:a,width:a,fallbackPrefix:Zp.prefix})}</g>`);else if(n.iconText){s.html(`<g>${await wo("blank",{height:a,width:a,fallbackPrefix:Zp.prefix})}</g>`);let d=s.append("g").append("foreignObject").attr("width",a).attr("height",a).append("div").attr("class","node-icon-text").attr("style",`height: ${a}px;`).append("div").html(n.iconText),p=parseInt(window.getComputedStyle(d.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;d.attr("style",`-webkit-line-clamp: ${Math.floor((a-2)/p)};`)}else s.append("path").attr("class","node-bkg").attr("id","node-"+n.id).attr("d",`M0 ${a} v${-a} q0,-5 5,-5 h${a} q5,0 5,5 v${a} H0 Z`);i.attr("class","architecture-service");let{width:l,height:u}=i._groups[0][0].getBBox();n.width=l,n.height=u,t.setElementForId(n.id,i)}return 0},"drawServices"),zve=o(function(t,e,r){r.forEach(n=>{let i=e.append("g"),a=Li("iconSize");i.append("g").append("rect").attr("id","node-"+n.id).attr("fill-opacity","0").attr("width",a).attr("height",a),i.attr("class","architecture-junction");let{width:l,height:u}=i._groups[0][0].getBBox();i.width=l,i.height=u,t.setElementForId(n.id,i)})},"drawJunctions")});function Srt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"service",id:r.id,icon:r.icon,label:r.title,parent:r.in,width:Li("iconSize"),height:Li("iconSize")},classes:"node-service"})})}function Crt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"junction",id:r.id,parent:r.in,width:Li("iconSize"),height:Li("iconSize")},classes:"node-junction"})})}function Art(t,e){e.nodes().map(r=>{let n=Ff(r);if(n.type==="group")return;n.x=r.position().x,n.y=r.position().y,t.getElementById(n.id).attr("transform","translate("+(n.x||0)+","+(n.y||0)+")")})}function _rt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function Drt(t,e){t.forEach(r=>{let{lhsId:n,rhsId:i,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=x4(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${n}-${i}`,label:d,source:n,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:i,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function Lrt(t,e,r){let n=o((l,u)=>Object.entries(l).reduce((h,[f,d])=>{let p=0,m=Object.entries(d);if(m.length===1)return h[f]=m[0][1],h;for(let g=0;g<m.length-1;g++)for(let y=g+1;y<m.length;y++){let[v,x]=m[g],[b,w]=m[y];if(r[v]?.[b]===u)h[f]??=[],h[f]=[...h[f],...x,...w];else if(v==="default"||b==="default")h[f]??=[],h[f]=[...h[f],...x,...w];else{let T=`${f}-${p++}`;h[T]=x;let E=`${f}-${p++}`;h[E]=w}}return h},{}),"flattenAlignments"),i=e.map(l=>{let u={},h={};return Object.entries(l).forEach(([f,[d,p]])=>{let m=t.getNode(f)?.in??"default";u[p]??={},u[p][m]??=[],u[p][m].push(f),h[d]??={},h[d][m]??=[],h[d][m].push(f)}),{horiz:Object.values(n(u,"horizontal")).filter(f=>f.length>1),vert:Object.values(n(h,"vertical")).filter(f=>f.length>1)}}),[a,s]=i.reduce(([l,u],{horiz:h,vert:f})=>[[...l,...h],[...u,...f]],[[],[]]);return{horizontal:a,vertical:s}}function Rrt(t){let e=[],r=o(i=>`${i[0]},${i[1]}`,"posToStr"),n=o(i=>i.split(",").map(a=>parseInt(a)),"strToPos");return t.forEach(i=>{let a=Object.fromEntries(Object.entries(i).map(([h,f])=>[r(f),h])),s=[r([0,0])],l={},u={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;s.length>0;){let h=s.shift();if(h){l[h]=1;let f=a[h];if(f){let d=n(h);Object.entries(u).forEach(([p,m])=>{let g=r([d[0]+m[0],d[1]+m[1]]),y=a[g];y&&!l[g]&&(s.push(g),e.push({[lF[p]]:y,[lF[Eve(p)]]:f,gap:1.5*Li("iconSize")}))})}}}}),e}function Nrt(t,e,r,n,i,{spatialMaps:a,groupAlignments:s}){return new Promise(l=>{let u=Ge("body").append("div").attr("id","cy").attr("style","display:none"),h=rl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${Li("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${Li("padding")}px`}}]});u.remove(),_rt(r,h),Srt(t,h),Crt(e,h),Drt(n,h);let f=Lrt(i,a,s),d=Rrt(a),p=h.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(m){let[g,y]=m.connectedNodes(),{parent:v}=Ff(g),{parent:x}=Ff(y);return v===x?1.5*Li("iconSize"):.5*Li("iconSize")},edgeElasticity(m){let[g,y]=m.connectedNodes(),{parent:v}=Ff(g),{parent:x}=Ff(y);return v===x?.45:.001},alignmentConstraint:f,relativePlacementConstraint:d});p.one("layoutstop",()=>{function m(g,y,v,x){let b,w,{x:C,y:T}=g,{x:E,y:A}=y;w=(x-T+(C-v)*(T-A)/(C-E))/Math.sqrt(1+Math.pow((T-A)/(C-E),2)),b=Math.sqrt(Math.pow(x-T,2)+Math.pow(v-C,2)-Math.pow(w,2));let S=Math.sqrt(Math.pow(E-C,2)+Math.pow(A-T,2));b=b/S;let _=(E-C)*(x-T)-(A-T)*(v-C);switch(!0){case _>=0:_=1;break;case _<0:_=-1;break}let I=(E-C)*(v-C)+(A-T)*(x-T);switch(!0){case I>=0:I=1;break;case I<0:I=-1;break}return w=Math.abs(w)*_,b=b*I,{distances:w,weights:b}}o(m,"getSegmentWeights"),h.startBatch();for(let g of Object.values(h.edges()))if(g.data?.()){let{x:y,y:v}=g.source().position(),{x,y:b}=g.target().position();if(y!==x&&v!==b){let w=g.sourceEndpoint(),C=g.targetEndpoint(),{sourceDir:T}=sC(g),[E,A]=Zc(T)?[w.x,C.y]:[C.x,w.y],{weights:S,distances:_}=m(w,C,E,A);g.style("segment-distances",_),g.style("segment-weights",S)}}h.endBatch(),p.run()}),p.run(),h.ready(m=>{Y.info("Ready",m),l(h)})})}var Vve,Mrt,Uve,Hve=N(()=>{"use strict";tu();kB();Vve=Sa(Pve(),1);dr();vt();Vc();Ei();w4();yF();oC();Gve();P4([{name:Zp.prefix,icons:Zp}]);rl.use(Vve.default);o(Srt,"addServices");o(Crt,"addJunctions");o(Art,"positionNodes");o(_rt,"addGroups");o(Drt,"addEdges");o(Lrt,"getAlignments");o(Rrt,"getRelativeConstraints");o(Nrt,"layoutArchitecture");Mrt=o(async(t,e,r,n)=>{let i=n.db,a=i.getServices(),s=i.getJunctions(),l=i.getGroups(),u=i.getEdges(),h=i.getDataStructures(),f=sa(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await $ve(i,p,a),zve(i,p,s);let g=await Nrt(a,s,l,u,i,h);await Bve(d,g),await Fve(m,g),Art(i,g),Ao(void 0,f,Li("padding"),Li("useMaxWidth"))},"draw"),Uve={draw:Mrt}});var Wve={};hr(Wve,{diagram:()=>Irt});var Irt,qve=N(()=>{"use strict";Mve();w4();Ove();Hve();Irt={parser:Nve,db:Qp,renderer:Uve,styles:Ive}});var bnt={};hr(bnt,{default:()=>xnt});tu();PC();Xf();var YX="c4",PCe=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),BCe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(qX(),WX));return{id:YX,diagram:t}},"loader"),FCe={id:YX,detector:PCe,loader:BCe},XX=FCe;var Xie="flowchart",xOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),bOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:Xie,diagram:t}},"loader"),wOe={id:Xie,detector:xOe,loader:bOe},jie=wOe;var Kie="flowchart-v2",TOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),kOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:Kie,diagram:t}},"loader"),EOe={id:Kie,detector:TOe,loader:kOe},Qie=EOe;var sae="er",DOe=o(t=>/^\s*erDiagram/.test(t),"detector"),LOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(aae(),iae));return{id:sae,diagram:t}},"loader"),ROe={id:sae,detector:DOe,loader:LOe},oae=ROe;var uue="gitGraph",tze=o(t=>/^\s*gitGraph/.test(t),"detector"),rze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(cue(),lue));return{id:uue,diagram:t}},"loader"),nze={id:uue,detector:tze,loader:rze},hue=nze;var Gue="gantt",Hze=o(t=>/^\s*gantt/.test(t),"detector"),Wze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(zue(),$ue));return{id:Gue,diagram:t}},"loader"),qze={id:Gue,detector:Hze,loader:Wze},Vue=qze;var Que="info",Zze=o(t=>/^\s*info/.test(t),"detector"),Jze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Kue(),jue));return{id:Que,diagram:t}},"loader"),Zue={id:Que,detector:Zze,loader:Jze};var lhe="pie",fGe=o(t=>/^\s*pie/.test(t),"detector"),dGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ohe(),she));return{id:lhe,diagram:t}},"loader"),che={id:lhe,detector:fGe,loader:dGe};var The="quadrantChart",RGe=o(t=>/^\s*quadrantChart/.test(t),"detector"),NGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(whe(),bhe));return{id:The,diagram:t}},"loader"),MGe={id:The,detector:RGe,loader:NGe},khe=MGe;var Khe="xychart",jGe=o(t=>/^\s*xychart-beta/.test(t),"detector"),KGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(jhe(),Xhe));return{id:Khe,diagram:t}},"loader"),QGe={id:Khe,detector:jGe,loader:KGe},Qhe=QGe;var sfe="requirement",tVe=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),rVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(afe(),ife));return{id:sfe,diagram:t}},"loader"),nVe={id:sfe,detector:tVe,loader:rVe},ofe=nVe;var Afe="sequence",zVe=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),GVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Cfe(),Sfe));return{id:Afe,diagram:t}},"loader"),VVe={id:Afe,detector:zVe,loader:GVe},_fe=VVe;var Ife="class",XVe=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),jVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Mfe(),Nfe));return{id:Ife,diagram:t}},"loader"),KVe={id:Ife,detector:XVe,loader:jVe},Ofe=KVe;var Ffe="classDiagram",ZVe=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),JVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Bfe(),Pfe));return{id:Ffe,diagram:t}},"loader"),eUe={id:Ffe,detector:ZVe,loader:JVe},$fe=eUe;var Ede="state",LUe=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),RUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(kde(),Tde));return{id:Ede,diagram:t}},"loader"),NUe={id:Ede,detector:LUe,loader:RUe},Sde=NUe;var _de="stateDiagram",IUe=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),OUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Ade(),Cde));return{id:_de,diagram:t}},"loader"),PUe={id:_de,detector:IUe,loader:OUe},Dde=PUe;var Wde="journey",nHe=o(t=>/^\s*journey/.test(t),"detector"),iHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Hde(),Ude));return{id:Wde,diagram:t}},"loader"),aHe={id:Wde,detector:nHe,loader:iHe},qde=aHe;vt();Vc();Ei();var sHe=o((t,e,r)=>{Y.debug(`rendering svg for syntax error | |
| 2561 | +`);let n=sa(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),vn(n,100,512,!0),i.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"),i.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"),i.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"),i.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"),i.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"),i.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"),i.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"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),fP={draw:sHe},Yde=fP;var oHe={db:{},renderer:fP,parser:{parse:o(()=>{},"parse")}},Xde=oHe;var jde="flowchart-elk",lHe=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),cHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:jde,diagram:t}},"loader"),uHe={id:jde,detector:lHe,loader:cHe},Kde=uHe;var Tpe="timeline",DHe=o(t=>/^\s*timeline/.test(t),"detector"),LHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(wpe(),bpe));return{id:Tpe,diagram:t}},"loader"),RHe={id:Tpe,detector:DHe,loader:LHe},kpe=RHe;var e1e="mindmap",cJe=o(t=>/^\s*mindmap/.test(t),"detector"),uJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Jge(),Zge));return{id:e1e,diagram:t}},"loader"),hJe={id:e1e,detector:cJe,loader:uJe},t1e=hJe;var d1e="kanban",AJe=o(t=>/^\s*kanban/.test(t),"detector"),_Je=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(f1e(),h1e));return{id:d1e,diagram:t}},"loader"),DJe={id:d1e,detector:AJe,loader:_Je},p1e=DJe;var j1e="sankey",ZJe=o(t=>/^\s*sankey-beta/.test(t),"detector"),JJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(X1e(),Y1e));return{id:j1e,diagram:t}},"loader"),eet={id:j1e,detector:ZJe,loader:JJe},K1e=eet;var sye="packet",pet=o(t=>/^\s*packet-beta/.test(t),"detector"),met=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(aye(),iye));return{id:sye,diagram:t}},"loader"),oye={id:sye,detector:pet,loader:met};var vye="radar",Fet=o(t=>/^\s*radar-beta/.test(t),"detector"),$et=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(yye(),gye));return{id:vye,diagram:t}},"loader"),xye={id:vye,detector:Fet,loader:$et};var Tve="block",srt=o(t=>/^\s*block-beta/.test(t),"detector"),ort=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(wve(),bve));return{id:Tve,diagram:t}},"loader"),lrt={id:Tve,detector:srt,loader:ort},kve=lrt;var Yve="architecture",Ort=o(t=>/^\s*architecture/.test(t),"detector"),Prt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(qve(),Wve));return{id:Yve,diagram:t}},"loader"),Brt={id:Yve,detector:Ort,loader:Prt},Xve=Brt;Xf();zt();var jve=!1,py=o(()=>{jve||(jve=!0,ad("error",Xde,t=>t.toLowerCase().trim()==="error"),ad("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{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")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),z4(XX,p1e,$fe,Ofe,oae,Vue,Zue,che,ofe,_fe,Kde,Qie,jie,t1e,kpe,hue,Dde,Sde,qde,khe,K1e,oye,Qhe,kve,Xve,xye))},"addDiagrams");vt();Xf();zt();var Kve=o(async()=>{Y.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(Yf).map(async([r,{detector:n,loader:i}])=>{if(i)try{jy(r)}catch{try{let{diagram:a,id:s}=await i();ad(s,a,n)}catch(a){throw Y.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete Yf[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){Y.error(`Failed to load ${e.length} external diagrams`);for(let r of e)Y.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");vt();dr();var lC="comm",cC="rule",uC="decl";var Qve="@import";var Zve="@namespace",Jve="@keyframes";var e2e="@layer";var vF=Math.abs,S4=String.fromCharCode;function hC(t){return t.trim()}o(hC,"trim");function C4(t,e,r){return t.replace(e,r)}o(C4,"replace");function t2e(t,e,r){return t.indexOf(e,r)}o(t2e,"indexof");function $f(t,e){return t.charCodeAt(e)|0}o($f,"charat");function zf(t,e,r){return t.slice(e,r)}o(zf,"substr");function vo(t){return t.length}o(vo,"strlen");function r2e(t){return t.length}o(r2e,"sizeof");function my(t,e){return e.push(t),t}o(my,"append");var fC=1,gy=1,n2e=0,il=0,Ri=0,vy="";function dC(t,e,r,n,i,a,s,l){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:fC,column:gy,length:s,return:"",siblings:l}}o(dC,"node");function i2e(){return Ri}o(i2e,"char");function a2e(){return Ri=il>0?$f(vy,--il):0,gy--,Ri===10&&(gy=1,fC--),Ri}o(a2e,"prev");function al(){return Ri=il<n2e?$f(vy,il++):0,gy++,Ri===10&&(gy=1,fC++),Ri}o(al,"next");function rh(){return $f(vy,il)}o(rh,"peek");function A4(){return il}o(A4,"caret");function pC(t,e){return zf(vy,t,e)}o(pC,"slice");function yy(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}o(yy,"token");function s2e(t){return fC=gy=1,n2e=vo(vy=t),il=0,[]}o(s2e,"alloc");function o2e(t){return vy="",t}o(o2e,"dealloc");function mC(t){return hC(pC(il-1,xF(t===91?t+2:t===40?t+1:t)))}o(mC,"delimit");function l2e(t){for(;(Ri=rh())&&Ri<33;)al();return yy(t)>2||yy(Ri)>3?"":" "}o(l2e,"whitespace");function c2e(t,e){for(;--e&&al()&&!(Ri<48||Ri>102||Ri>57&&Ri<65||Ri>70&&Ri<97););return pC(t,A4()+(e<6&&rh()==32&&al()==32))}o(c2e,"escaping");function xF(t){for(;al();)switch(Ri){case t:return il;case 34:case 39:t!==34&&t!==39&&xF(Ri);break;case 40:t===41&&xF(t);break;case 92:al();break}return il}o(xF,"delimiter");function u2e(t,e){for(;al()&&t+Ri!==57;)if(t+Ri===84&&rh()===47)break;return"/*"+pC(e,il-1)+"*"+S4(t===47?t:al())}o(u2e,"commenter");function h2e(t){for(;!yy(rh());)al();return pC(t,il)}o(h2e,"identifier");function p2e(t){return o2e(gC("",null,null,null,[""],t=s2e(t),0,[0],t))}o(p2e,"compile");function gC(t,e,r,n,i,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,w="",C=i,T=a,E=n,A=w;v;)switch(g=b,b=al()){case 40:if(g!=108&&$f(A,d-1)==58){t2e(A+=C4(mC(b),"&","&\f"),"&\f",vF(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:A+=mC(b);break;case 9:case 10:case 13:case 32:A+=l2e(g);break;case 92:A+=c2e(A4()-1,7);continue;case 47:switch(rh()){case 42:case 47:my(Frt(u2e(al(),A4()),e,r,u),u),(yy(g||1)==5||yy(rh()||1)==5)&&vo(A)&&zf(A,-1,void 0)!==" "&&(A+=" ");break;default:A+="/"}break;case 123*y:l[h++]=vo(A)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(A=C4(A,/\f/g,"")),m>0&&(vo(A)-d||y===0&&g===47)&&my(m>32?d2e(A+";",n,r,d-1,u):d2e(C4(A," ","")+";",n,r,d-2,u),u);break;case 59:A+=";";default:if(my(E=f2e(A,e,r,h,f,i,l,w,C=[],T=[],d,a),a),b===123)if(f===0)gC(A,e,E,E,C,a,d,l,T);else{switch(p){case 99:if($f(A,3)===110)break;case 108:if($f(A,2)===97)break;default:f=0;case 100:case 109:case 115:}f?gC(t,E,E,n&&my(f2e(t,E,E,0,0,i,l,w,i,C=[],d,T),T),i,T,d,l,n?C:T):gC(A,E,E,E,[""],T,0,l,T)}}h=f=m=0,y=x=1,w=A="",d=s;break;case 58:d=1+vo(A),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&a2e()==125)continue}switch(A+=S4(b),b*y){case 38:x=f>0?1:(A+="\f",-1);break;case 44:l[h++]=(vo(A)-1)*x,x=1;break;case 64:rh()===45&&(A+=mC(al())),p=rh(),f=d=vo(w=A+=h2e(A4())),b++;break;case 45:g===45&&vo(A)==2&&(y=0)}}return a}o(gC,"parse");function f2e(t,e,r,n,i,a,s,l,u,h,f,d){for(var p=i-1,m=i===0?a:[""],g=r2e(m),y=0,v=0,x=0;y<n;++y)for(var b=0,w=zf(t,p+1,p=vF(v=s[y])),C=t;b<g;++b)(C=hC(v>0?m[b]+" "+w:C4(w,/&\f/g,m[b])))&&(u[x++]=C);return dC(t,e,r,i===0?cC:l,u,h,f,d)}o(f2e,"ruleset");function Frt(t,e,r,n){return dC(t,e,r,lC,S4(i2e()),zf(t,2,-2),0,n)}o(Frt,"comment");function d2e(t,e,r,n,i){return dC(t,e,r,uC,zf(t,0,n),zf(t,n+1,-1),n,i)}o(d2e,"declaration");function yC(t,e){for(var r="",n=0;n<t.length;n++)r+=e(t[n],n,t,e)||"";return r}o(yC,"serialize");function m2e(t,e,r,n){switch(t.type){case e2e:if(t.children.length)break;case Qve:case Zve:case uC:return t.return=t.return||t.value;case lC:return"";case Jve:return t.return=t.value+"{"+yC(t.children,n)+"}";case cC:if(!vo(t.value=t.props.join(",")))return""}return vo(r=yC(t.children,n))?t.return=t.value+"{"+r+"}":""}o(m2e,"stringify");u7();HT();oO();var $rt="graphics-document document";function g2e(t,e){t.attr("role",$rt),e!==""&&t.attr("aria-roledescription",e)}o(g2e,"setA11yDiagramInfo");function y2e(t,e,r,n){if(t.insert!==void 0){if(r){let i=`chart-desc-${n}`;t.attr("aria-describedby",i),t.insert("desc",":first-child").attr("id",i).text(r)}if(e){let i=`chart-title-${n}`;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}o(y2e,"addSVGa11yTitleDescription");s0();ji();ji();zt();Xf();BC();ir();var xy=class t{constructor(e,r,n,i,a){this.type=e;this.text=r;this.db=n;this.parser=i;this.renderer=a}static{o(this,"Diagram")}static async fromText(e,r={}){let n=cr(),i=a0(e,n);e=PX(e)+` | |
| 2562 | +`;try{jy(i)}catch{let h=ZF(i);if(!h)throw new i0(`Diagram ${i} not found.`);let{id:f,diagram:d}=await h();ad(f,d)}let{db:a,parser:s,renderer:l,init:u}=jy(i);return s.parser&&(s.parser.yy=a),a.clear?.(),u?.(n),r.title&&a.setDiagramTitle?.(r.title),await s.parse(e),new t(i,e,a,s,l)}async render(e,r){await this.renderer.draw(this.text,e,r,this)}getParser(){return this.parser}getType(){return this.type}};gr();var v2e=[];var x2e=o(()=>{v2e.forEach(t=>{t()}),v2e=[]},"attachFunctions");vt();var b2e=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");$4();Ew();function w2e(t){let e=t.match(F4);if(!e)return{text:t,metadata:{}};let r=cm(e[1],{schema:lm})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}o(w2e,"extractFrontMatter");ir();var zrt=o(t=>t.replace(/\r\n?/g,` | |
| 2563 | +`).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),Grt=o(t=>{let{text:e,metadata:r}=w2e(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),Vrt=o(t=>{let e=Gt.detectInit(t)??{},r=Gt.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:IX(t),directive:e}},"processDirectives");function bF(t){let e=zrt(t),r=Grt(e),n=Vrt(r.text),i=Fi(r.config,n.directive);return t=b2e(n.text),{code:t,title:r.title,config:i}}o(bF,"preprocessDiagram");tA();q4();ir();function T2e(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}o(T2e,"toBase64");var Urt=5e4,Hrt="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Wrt="sandbox",qrt="loose",Yrt="http://www.w3.org/2000/svg",Xrt="http://www.w3.org/1999/xlink",jrt="http://www.w3.org/1999/xhtml",Krt="100%",Qrt="100%",Zrt="border:0;margin:0;",Jrt="margin:0",ent="allow-top-navigation-by-user-activation allow-popups",tnt='The "iframe" tag is not supported by your browser.',rnt=["foreignobject"],nnt=["dominant-baseline"];function C2e(t){let e=bF(t);return Ly(),W$(e.config??{}),e}o(C2e,"processAndSetConfigs");async function int(t,e){py();try{let{code:r,config:n}=C2e(t);return{diagramType:(await A2e(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(int,"parse");var k2e=o((t,e,r=[])=>` | |
| 2564 | +.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),ant=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` | |
| 2565 | +${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` | |
| 2566 | +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` | |
| 2567 | +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{ur(l.styles)||s.forEach(u=>{r+=k2e(l.id,u,l.styles)}),ur(l.textStyles)||(r+=k2e(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),snt=o((t,e,r,n)=>{let i=ant(t,r),a=zG(e,i,t.themeVariables);return yC(p2e(`${n}{${a}}`),m2e)},"createUserStyles"),ont=o((t="",e,r)=>{let n=t;return!r&&!e&&(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=na(n),n=n.replace(/<br>/g,"<br/>"),n},"cleanUpSvgCode"),lnt=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":Qrt,n=T2e(`<body style="${Jrt}">${t}</body>`);return`<iframe style="width:${Krt};height:${r};${Zrt}" src="data:text/html;charset=UTF-8;base64,${n}" sandbox="${ent}"> | |
| 2568 | + ${tnt} | |
| 2569 | +</iframe>`},"putIntoIFrame"),E2e=o((t,e,r,n,i)=>{let a=t.append("div");a.attr("id",r),n&&a.attr("style",n);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",Yrt);return i&&s.attr("xmlns:xlink",i),s.append("g"),t},"appendDivSvgG");function S2e(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(S2e,"sandboxedIframe");var cnt=o((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),unt=o(async function(t,e,r){py();let n=C2e(e);e=n.code;let i=cr();Y.debug(i),e.length>(i?.maxTextSize??Urt)&&(e=Hrt);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let L=Ge(p?l:h).node();L&&"remove"in L&&L.remove()},"removeTempElements"),d=Ge("body"),p=i.securityLevel===Wrt,m=i.securityLevel===qrt,g=i.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let k=S2e(Ge(r),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge(r);E2e(d,t,u,`font-family: ${g}`,Xrt)}else{if(cnt(document,t,u,s),p){let k=S2e(Ge("body"),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge("body");E2e(d,t,u)}let y,v;try{y=await xy.fromText(e,{title:n.title})}catch(k){if(i.suppressErrorRendering)throw f(),k;y=await xy.fromText("error"),v=k}let x=d.select(h).node(),b=y.type,w=x.firstChild,C=w.firstChild,T=y.renderer.getClasses?.(e,y),E=snt(i,b,T,a),A=document.createElement("style");A.innerHTML=E,w.insertBefore(A,C);try{await y.renderer.draw(e,t,vb.version,y)}catch(k){throw i.suppressErrorRendering?f():Yde.draw(e,t,vb.version),k}let S=d.select(`${h} svg`),_=y.db.getAccTitle?.(),I=y.db.getAccDescription?.();fnt(b,S,_,I),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",jrt);let D=d.select(h).node().innerHTML;if(Y.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),D=ont(D,p,fr(i.arrowMarkerAbsolute)),p){let k=d.select(h+" svg").node();D=lnt(D,k)}else m||(D=ch.sanitize(D,{ADD_TAGS:rnt,ADD_ATTR:nnt,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(x2e(),v)throw v;return f(),{diagramType:b,svg:D,bindFunctions:y.db.bindFunctions}},"render");function hnt(t={}){let e=Gn({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),V$(e),e?.theme&&e.theme in To?e.themeVariables=To[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=To.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?t7(e):r7();wy(r.logLevel),py()}o(hnt,"initialize");var A2e=o((t,e={})=>{let{code:r}=bF(t);return xy.fromText(r,e)},"getDiagramFromText");function fnt(t,e,r,n){g2e(e,t),y2e(e,r,n,e.attr("id"))}o(fnt,"addA11yInfo");var Gf=Object.freeze({render:unt,parse:int,getDiagramFromText:A2e,initialize:hnt,getConfig:cr,setConfig:X4,getSiteConfig:r7,updateSiteConfig:U$,reset:o(()=>{Ly()},"reset"),globalReset:o(()=>{Ly(lh)},"globalReset"),defaultConfig:lh});wy(cr().logLevel);Ly(cr());Yd();ir();var dnt=o((t,e,r)=>{Y.warn(t),Z9(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),_2e=o(async function(t={querySelector:".mermaid"}){try{await pnt(t)}catch(e){if(Z9(e)&&Y.error(e.str),nh.parseError&&nh.parseError(e),!t.suppressErrors)throw Y.error("Use the suppressErrors option to suppress these errors"),e}},"run"),pnt=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let n=Gf.getConfig();Y.debug(`${t?"":"No "}Callback function found`);let i;if(r)i=r;else if(e)i=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");Y.debug(`Found ${i.length} diagrams`),n?.startOnLoad!==void 0&&(Y.debug("Start On Load: "+n?.startOnLoad),Gf.updateSiteConfig({startOnLoad:n?.startOnLoad}));let a=new Gt.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed),s,l=[];for(let u of Array.from(i)){Y.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=B4(Gt.entityDecode(s)).trim().replace(/<br\s*\/?>/gi,"<br/>");let f=Gt.detectInit(s);f&&Y.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await N2e(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){dnt(d,l,nh.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),D2e=o(function(t){Gf.initialize(t)},"initialize"),mnt=o(async function(t,e,r){Y.warn("mermaid.init is deprecated. Please use run instead."),t&&D2e(t);let n={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await _2e(n)},"init"),gnt=o(async(t,{lazyLoad:e=!0}={})=>{py(),z4(...t),e===!1&&await Kve()},"registerExternalDiagrams"),L2e=o(function(){if(nh.startOnLoad){let{startOnLoad:t}=Gf.getConfig();t&&nh.run().catch(e=>Y.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",L2e,!1)}var ynt=o(function(t){nh.parseError=t},"setParseErrorHandler"),vC=[],wF=!1,R2e=o(async()=>{if(!wF){for(wF=!0;vC.length>0;){let t=vC.shift();if(t)try{await t()}catch(e){Y.error("Error executing queue",e)}}wF=!1}},"executeQueue"),vnt=o(async(t,e)=>new Promise((r,n)=>{let i=o(()=>new Promise((a,s)=>{Gf.parse(t,e).then(l=>{a(l),r(l)},l=>{Y.error("Error parsing",l),nh.parseError?.(l),s(l),n(l)})}),"performCall");vC.push(i),R2e().catch(n)}),"parse"),N2e=o((t,e,r)=>new Promise((n,i)=>{let a=o(()=>new Promise((s,l)=>{Gf.render(t,e,r).then(u=>{s(u),n(u)},u=>{Y.error("Error parsing",u),nh.parseError?.(u),l(u),i(u)})}),"performCall");vC.push(a),R2e().catch(i)}),"render"),nh={startOnLoad:!0,mermaidAPI:Gf,parse:vnt,render:N2e,init:mnt,run:_2e,registerExternalDiagrams:gnt,registerLayoutLoaders:vR,initialize:D2e,parseError:void 0,contentLoaded:L2e,setParseErrorHandler:ynt,detectType:a0,registerIconPacks:P4},xnt=nh;return V2e(bnt);})(); | |
| 2570 | +/*! Check if previously processed */ | |
| 2571 | +/*! | |
| 2572 | + * Wait for document loaded before starting the execution | |
| 2573 | + */ | |
| 2574 | +/*! Bundled license information: | |
| 2575 | + | |
| 2576 | +dompurify/dist/purify.es.mjs: | |
| 2577 | + (*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE *) | |
| 2578 | + | |
| 2579 | +js-yaml/dist/js-yaml.mjs: | |
| 2580 | + (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) | |
| 2581 | + | |
| 2582 | +lodash-es/lodash.js: | |
| 2583 | + (** | |
| 2584 | + * @license | |
| 2585 | + * Lodash (Custom Build) <https://lodash.com/> | |
| 2586 | + * Build: `lodash modularize exports="es" -o ./` | |
| 2587 | + * Copyright OpenJS Foundation and other contributors <https://openjsf.org/> | |
| 2588 | + * Released under MIT license <https://lodash.com/license> | |
| 2589 | + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> | |
| 2590 | + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors | |
| 2591 | + *) | |
| 2592 | + | |
| 2593 | +cytoscape/dist/cytoscape.esm.mjs: | |
| 2594 | + (*! | |
| 2595 | + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable | |
| 2596 | + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) | |
| 2597 | + Licensed under The MIT License (http://opensource.org/licenses/MIT) | |
| 2598 | + *) | |
| 2599 | + (*! | |
| 2600 | + Event object based on jQuery events, MIT license | |
| 2601 | + | |
| 2602 | + https://jquery.org/license/ | |
| 2603 | + https://tldrlegal.com/license/mit-license | |
| 2604 | + https://github.com/jquery/jquery/blob/master/src/event.js | |
| 2605 | + *) | |
| 2606 | + (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *) | |
| 2607 | + (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *) | |
| 2608 | +*/ | |
| 2609 | +globalThis.mermaid = globalThis.__esbuild_esm_mermaid.default; | |
| 2609 | < \ No newline at end of file |
A
user_manual/explanation/cycle-vie-pull-request.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Cycle de vie d'une pull request | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/explanation/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Explication | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/explanation/modele-collaboration.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Modèle de collaboration sur gitrust | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/explanation/securite-utilisateur.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Sécurité côté utilisateur | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/how-to/configurer-2fa.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Configurer la double authentification (2FA) | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/how-to/consulter-sbom.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Consulter le SBOM d'un dépôt | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/how-to/creer-personal-access-token.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Créer un Personal Access Token | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/how-to/fusionner-strategies.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Stratégies de fusion (ff / squash / merge commit) | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/how-to/gerer-cles-ssh.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Gérer ses clés SSH | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/how-to/gerer-equipes-permissions.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Gérer les équipes et les permissions | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/how-to/importer-depot-externe.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Importer un dépôt externe | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/how-to/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Guides pratiques | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/how-to/ouvrir-pull-request.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Ouvrir une pull request | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/how-to/utiliser-labels-issues.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Utiliser les labels et les issues | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/index.md
+73
-0
@@ -0,0 +1,73 @@
| 1 | +# Manuel utilisateur | |
| 2 | + | |
| 3 | +Ce manuel t'accompagne depuis ta première connexion à une instance gitrust jusqu'à l'autonomie complète : pousser du code, collaborer via les pull requests, gérer les issues et automatiser tes workflows avec la CI intégrée. Tu n'as pas besoin d'administrer ni de comprendre l'architecture interne — ce manuel suppose seulement que tu sais utiliser Git en ligne de commande. | |
| 4 | + | |
| 5 | +## Parcours d'apprentissage | |
| 6 | + | |
| 7 | +Le manuel est structuré comme un **parcours progressif** de 4 tutoriels. Chaque tutoriel te laisse dans un état stable, vérifié, avant de passer au suivant. L'aide fournie recule d'un cran à chaque étape (du copier-coller intégral vers la composition autonome). | |
| 8 | + | |
| 9 | +```mermaid | |
| 10 | +graph LR | |
| 11 | + A[Compte créé] --> B[01-premier-pas<br/>20 min] | |
| 12 | + B --> C[02-cloner-pousser<br/>25 min] | |
| 13 | + C --> D[03-collaborer<br/>25 min] | |
| 14 | + D --> E[04-automatiser-ci<br/>20 min] | |
| 15 | + E --> F[Utilisateur autonome] | |
| 16 | +``` | |
| 17 | + | |
| 18 | +> **Checkpoint de parcours** : avant de passer au tutoriel 02, tu dois pouvoir te connecter à gitrust, voir ton dépôt dans l'interface et l'accès SSH configuré. Si ce n'est pas le cas, relis le tutoriel 01. | |
| 19 | + | |
| 20 | +> **Checkpoint de parcours** : avant le tutoriel 03, tu dois avoir poussé au moins un commit sur ta branche via SSH. Si ce n'est pas le cas, relis le tutoriel 02. | |
| 21 | + | |
| 22 | +> **Checkpoint de parcours** : avant le tutoriel 04, tu dois avoir ouvert et mergé une pull request. Si ce n'est pas le cas, relis le tutoriel 03. | |
| 23 | + | |
| 24 | +--- | |
| 25 | + | |
| 26 | +## Tutoriels — apprendre en faisant | |
| 27 | + | |
| 28 | +Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suis-les dans l'ordre — chacun suppose le précédent complété. | |
| 29 | + | |
| 30 | +- [01 — Premiers pas : 2FA, clé SSH, premier dépôt](tutorials/01-premier-pas.md) — ~20 min | |
| 31 | +- [02 — Cloner et pousser du code](tutorials/02-cloner-pousser.md) — ~25 min | |
| 32 | +- [03 — Collaborer : équipes, issues, pull requests](tutorials/03-collaborer.md) — ~25 min | |
| 33 | +- [04 — Automatiser avec la CI](tutorials/04-automatiser-ci.md) — ~20 min | |
| 34 | + | |
| 35 | +--- | |
| 36 | + | |
| 37 | +## How-to — recettes pour les tâches courantes | |
| 38 | + | |
| 39 | +Les how-to répondent à « comment faire X » sans explication de fond. Tu peux les consulter dans n'importe quel ordre selon ton besoin immédiat. | |
| 40 | + | |
| 41 | +Ces guides supposent que tu as suivi le parcours tutoriels. Ils ne répètent pas les étapes de base. | |
| 42 | + | |
| 43 | +- [Gérer ses clés SSH](how-to/gerer-cles-ssh.md) | |
| 44 | +- [Configurer la 2FA](how-to/configurer-2fa.md) | |
| 45 | +- [Créer un Personal Access Token](how-to/creer-personal-access-token.md) | |
| 46 | +- [Gérer les équipes et permissions](how-to/gerer-equipes-permissions.md) | |
| 47 | +- [Ouvrir une pull request](how-to/ouvrir-pull-request.md) | |
| 48 | +- [Fusionner : fast-forward, squash, merge commit](how-to/fusionner-strategies.md) | |
| 49 | +- [Utiliser les labels hiérarchiques](how-to/utiliser-labels-issues.md) | |
| 50 | +- [Importer un dépôt externe](how-to/importer-depot-externe.md) | |
| 51 | +- [Consulter le SBOM de ton projet](how-to/consulter-sbom.md) | |
| 52 | + | |
| 53 | +--- | |
| 54 | + | |
| 55 | +## Référence — informations techniques exactes | |
| 56 | + | |
| 57 | +La référence est destinée à la consultation ponctuelle, pas à la lecture linéaire. Elle documente les formats, schémas et comportements exacts. | |
| 58 | + | |
| 59 | +- [Modèle de permissions (4 rôles)](reference/modele-permissions.md) | |
| 60 | +- [API REST v1 — authentification, pagination, codes d'erreur](reference/api-rest-v1.md) | |
| 61 | +- [Schéma YAML `.gitrust-ci.yml` (Easy Mode)](reference/gitrust-ci-yml-schema.md) | |
| 62 | +- [Syntaxe Markdown supportée](reference/markdown-et-syntaxe.md) | |
| 63 | +- [Notifications : SSE, e-mail, préférences](reference/notifications.md) | |
| 64 | + | |
| 65 | +--- | |
| 66 | + | |
| 67 | +## Explication — comprendre le pourquoi | |
| 68 | + | |
| 69 | +Les explanations t'aident à construire des modèles mentaux durables. Lis-les quand tu veux comprendre *pourquoi* gitrust fonctionne ainsi, pas seulement *comment*. | |
| 70 | + | |
| 71 | +- [Modèle de collaboration gitrust](explanation/modele-collaboration.md) | |
| 72 | +- [Sécurité utilisateur : 2FA, PAT, audit log](explanation/securite-utilisateur.md) | |
| 73 | +- [Cycle de vie d'une pull request](explanation/cycle-vie-pull-request.md) |
A
user_manual/reference/api-rest-v1.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# API REST v1 | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/reference/gitrust-ci-yml-schema.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Schéma du fichier .gitrust-ci.yml | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/reference/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Référence | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/reference/markdown-et-syntaxe.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Markdown et syntaxe supportée | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/reference/modele-permissions.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Modèle de permissions (4 rôles) | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/reference/notifications.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Notifications | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/tutorials/01-premier-pas.md
+189
-0
@@ -0,0 +1,189 @@
| 1 | +# Premiers pas : active la 2FA, ajoute ta clé SSH et crée ton premier dépôt | |
| 2 | + | |
| 3 | +## Objectifs | |
| 4 | + | |
| 5 | +À la fin de ce tutoriel, tu sauras : | |
| 6 | + | |
| 7 | +- **O1. Activer** l'authentification à deux facteurs (2FA) sur ton compte gitrust | |
| 8 | +- **O2. Enregistrer** une clé SSH publique dans ton profil pour te connecter sans mot de passe | |
| 9 | +- **O3. Créer** un dépôt vide et vérifier qu'il est accessible à l'URL attendue | |
| 10 | + | |
| 11 | +## Pré-requis | |
| 12 | + | |
| 13 | +- **Technique** : un compte gitrust existant (e-mail + mot de passe), Git installé (`git --version` répond), une paire de clés SSH générée ou à générer (`ssh-keygen`) | |
| 14 | +- **Pédagogique** : aucun tutoriel préalable requis — c'est le point de départ du parcours | |
| 15 | +- **Temps estimé** : ~20 minutes | |
| 16 | + | |
| 17 | +## Vue d'ensemble | |
| 18 | + | |
| 19 | +Avant de taper la première commande, prenons 2 minutes pour comprendre ce que tu vas faire et pourquoi. | |
| 20 | + | |
| 21 | +**Un dépôt** (_repository_), c'est comme un dossier de projet avec tout l'historique de ses modifications — une boîte d'archives vivante que Git surveille. Sur gitrust, ce dossier vit sur le serveur et peut être partagé avec ton équipe. | |
| 22 | + | |
| 23 | +**Une clé SSH** fonctionne comme une serrure et une clé : tu gardes la clé privée sur ta machine (ne la partage jamais), et tu déposes la clé publique dans ton profil gitrust. Ensuite, Git se connecte automatiquement sans te redemander de mot de passe — gitrust reconnaît ta machine. | |
| 24 | + | |
| 25 | +**La 2FA** (authentification à deux facteurs) ajoute un second verrou à ton compte : même si quelqu'un vole ton mot de passe, il ne peut pas se connecter sans le code de ton téléphone. C'est une protection essentielle pour tout compte qui héberge du code. | |
| 26 | + | |
| 27 | +Voici le flux que tu vas configurer : | |
| 28 | + | |
| 29 | +```mermaid | |
| 30 | +sequenceDiagram | |
| 31 | + participant T as Ton navigateur | |
| 32 | + participant G as gitrust (HTTPS :4000) | |
| 33 | + participant S as Ton terminal (SSH :2222) | |
| 34 | + | |
| 35 | + T->>G: Connexion avec e-mail + mdp + code 2FA | |
| 36 | + T->>G: Dépôt de la clé SSH publique | |
| 37 | + S->>G: git push via SSH (authentifié par clé) | |
| 38 | + G-->>T: Dépôt visible dans l'interface web | |
| 39 | +``` | |
| 40 | + | |
| 41 | +--- | |
| 42 | + | |
| 43 | +## Étape 1 : Connecte-toi et accède aux paramètres de sécurité | |
| 44 | + | |
| 45 | +Ouvre ton navigateur et va sur l'URL de ton instance gitrust (par exemple `https://demo.gitrust.eu`). Connecte-toi avec ton e-mail et ton mot de passe. | |
| 46 | + | |
| 47 | +Une fois connecté, clique sur ton avatar en haut à droite, puis sur **Paramètres** (`/settings`). Dans le menu de gauche, sélectionne **Sécurité**. | |
| 48 | + | |
| 49 | +**Checkpoint** : tu dois voir la page *Sécurité* avec une section « Authentification à deux facteurs » et le statut « Désactivée ». Si tu ne la vois pas, vérifie que tu es bien connecté avec le bon compte. | |
| 50 | + | |
| 51 | +--- | |
| 52 | + | |
| 53 | +## Étape 2 : Active la 2FA avec une application d'authentification | |
| 54 | + | |
| 55 | +Sur la page *Sécurité*, clique sur **Activer la 2FA**. gitrust affiche un QR code. | |
| 56 | + | |
| 57 | +1. Ouvre ton application d'authentification (Google Authenticator, Authy, ou tout équivalent compatible TOTP). | |
| 58 | +2. Scanne le QR code avec l'application. | |
| 59 | +3. L'application affiche un code à 6 chiffres qui change toutes les 30 secondes. | |
| 60 | +4. Saisis ce code dans le champ **Code de vérification** et clique **Confirmer**. | |
| 61 | + | |
| 62 | +Sortie attendue (message dans l'interface) : | |
| 63 | +``` | |
| 64 | +La 2FA a été activée avec succès. | |
| 65 | +Conservez vos codes de secours dans un endroit sûr. | |
| 66 | +``` | |
| 67 | + | |
| 68 | +gitrust affiche également **10 codes de secours** (format `XXXX-XXXX`). Copie-les et conserve-les hors ligne — ils te permettent de récupérer l'accès si tu perds ton téléphone. | |
| 69 | + | |
| 70 | +**Checkpoint** : retourne sur *Paramètres → Sécurité*. La section 2FA doit maintenant afficher « **Activée** » en vert. Si elle affiche toujours « Désactivée », recommence l'étape en t'assurant que le code à 6 chiffres est saisi avant qu'il expire. | |
| 71 | + | |
| 72 | +--- | |
| 73 | + | |
| 74 | +## Étape 3 : Génère ou localise ta clé SSH | |
| 75 | + | |
| 76 | +Si tu n'as pas encore de paire de clés SSH, génère-en une maintenant dans ton terminal : | |
| 77 | + | |
| 78 | +```bash | |
| 79 | +ssh-keygen -t ed25519 -C "mon-compte@example.com" | |
| 80 | +``` | |
| 81 | + | |
| 82 | +Sortie attendue : | |
| 83 | +``` | |
| 84 | +Generating public/private ed25519 key pair. | |
| 85 | +Enter file in which to save the key (/home/toi/.ssh/id_ed25519): | |
| 86 | +Enter passphrase (empty for no passphrase): | |
| 87 | +Enter same passphrase again: | |
| 88 | +Your identification has been saved in /home/toi/.ssh/id_ed25519 | |
| 89 | +Your public key has been saved in /home/toi/.ssh/id_ed25519.pub | |
| 90 | +The key fingerprint is: | |
| 91 | +SHA256:xXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx mon-compte@example.com | |
| 92 | +``` | |
| 93 | + | |
| 94 | +Appuie sur Entrée pour accepter le chemin par défaut. Tu peux choisir une passphrase ou laisser vide (appuie deux fois sur Entrée). Une passphrase ajoute une couche de sécurité. | |
| 95 | + | |
| 96 | +Affiche maintenant ta **clé publique** (le fichier `.pub` — celui-ci est fait pour être partagé) : | |
| 97 | + | |
| 98 | +```bash | |
| 99 | +cat ~/.ssh/id_ed25519.pub | |
| 100 | +``` | |
| 101 | + | |
| 102 | +Sortie attendue (une seule ligne) : | |
| 103 | +``` | |
| 104 | +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mon-compte@example.com | |
| 105 | +``` | |
| 106 | + | |
| 107 | +Copie cette ligne entière dans le presse-papier. | |
| 108 | + | |
| 109 | +**Checkpoint** : la commande `cat` doit afficher une ligne commençant par `ssh-ed25519` (ou `ssh-rsa` si tu as une clé plus ancienne). Si elle affiche « No such file or directory », la génération n'a pas abouti — relance `ssh-keygen`. | |
| 110 | + | |
| 111 | +--- | |
| 112 | + | |
| 113 | +## Étape 4 : Enregistre la clé SSH dans ton profil gitrust | |
| 114 | + | |
| 115 | +Dans ton navigateur, retourne sur *Paramètres* et clique sur **Clés SSH** dans le menu de gauche. | |
| 116 | + | |
| 117 | +Clique sur **Ajouter une clé SSH**. Un formulaire apparaît : | |
| 118 | + | |
| 119 | +- **Titre** : donne un nom descriptif à cette clé (ex. `laptop-perso-2026`, `poste-bureau`) | |
| 120 | +- **Clé** : colle la ligne copiée à l'étape précédente | |
| 121 | + | |
| 122 | +Clique **Enregistrer la clé**. | |
| 123 | + | |
| 124 | +Sortie attendue (message dans l'interface) : | |
| 125 | +``` | |
| 126 | +Clé SSH ajoutée avec succès. | |
| 127 | +``` | |
| 128 | + | |
| 129 | +Teste maintenant la connexion SSH depuis ton terminal : | |
| 130 | + | |
| 131 | +```bash | |
| 132 | +ssh -T git@demo.gitrust.eu -p 2222 | |
| 133 | +``` | |
| 134 | + | |
| 135 | +Sortie attendue : | |
| 136 | +``` | |
| 137 | +Bonjour tonpseudo ! Vous êtes authentifié, mais gitrust ne fournit pas d'accès shell. | |
| 138 | +``` | |
| 139 | + | |
| 140 | +**Checkpoint** : si tu obtiens ce message, ta clé SSH est correctement enregistrée. Si tu obtiens `Permission denied (publickey)`, vérifie que tu as bien copié la clé **publique** (`.pub`) et non la clé privée. Consulte la section « Et si ça ne marche pas » ci-dessous. | |
| 141 | + | |
| 142 | +--- | |
| 143 | + | |
| 144 | +## Étape 5 : Crée ton premier dépôt vide | |
| 145 | + | |
| 146 | +Dans ton navigateur, clique sur le **+** en haut à droite (ou navigue vers `/repo/new`). | |
| 147 | + | |
| 148 | +Remplis le formulaire : | |
| 149 | + | |
| 150 | +- **Propriétaire** : ton pseudo | |
| 151 | +- **Nom du dépôt** : `mon-premier-depot` (lettres, chiffres, tirets uniquement) | |
| 152 | +- **Visibilité** : Privé (ou Public selon ta préférence) | |
| 153 | +- **Initialiser le dépôt** : coche « Ajouter un README » | |
| 154 | + | |
| 155 | +Clique sur **Créer le dépôt**. | |
| 156 | + | |
| 157 | +Sortie attendue : gitrust te redirige vers la page du dépôt à l'URL : | |
| 158 | +``` | |
| 159 | +https://demo.gitrust.eu/tonpseudo/mon-premier-depot | |
| 160 | +``` | |
| 161 | + | |
| 162 | +La page affiche un fichier `README.md` avec le nom du dépôt, et la barre latérale montre 1 commit, 1 branche (`main`). | |
| 163 | + | |
| 164 | +**Checkpoint** : note l'URL affichée dans la barre d'adresse de ton navigateur. Elle doit correspondre au patron `https://<instance>/<pseudo>/<nom-depot>`. Si tu vois une erreur 404 ou 500, relis le formulaire de création. | |
| 165 | + | |
| 166 | +--- | |
| 167 | + | |
| 168 | +## Récapitulatif | |
| 169 | + | |
| 170 | +- ✓ **O1 accompli** : la 2FA est activée sur ton compte — tu l'as vérifiée sur la page *Sécurité* qui affiche « Activée » | |
| 171 | +- ✓ **O2 accompli** : ta clé SSH publique est enregistrée — tu l'as confirmée avec `ssh -T git@... -p 2222` qui a répondu « Vous êtes authentifié » | |
| 172 | +- ✓ **O3 accompli** : ton premier dépôt est créé et visible à l'URL `/<pseudo>/mon-premier-depot` | |
| 173 | + | |
| 174 | +--- | |
| 175 | + | |
| 176 | +## Et si ça ne marche pas | |
| 177 | + | |
| 178 | +| Symptôme | Cause probable | Correction | | |
| 179 | +|----------|----------------|------------| | |
| 180 | +| `Permission denied (publickey)` lors du test SSH | Tu as collé la clé privée au lieu de la clé publique, ou le fichier `.pub` ne correspond pas à la clé active | Dans gitrust, supprime la clé ajoutée. Retourne au terminal et exécute `ssh-add -l` pour voir les clés actives. Recopie la bonne clé `.pub` avec `cat ~/.ssh/id_ed25519.pub` | | |
| 181 | +| `Connection refused` lors du test SSH | Le port SSH de l'instance est différent de 2222, ou l'instance est inaccessible | Vérifie avec l'administrateur le port SSH réel. Essaie `ssh -T git@<instance> -p 22` en alternative | | |
| 182 | +| Le code 2FA est refusé alors qu'il semble correct | L'horloge de ton téléphone est désynchronisée (décalage > 30 s) | Active la synchronisation automatique de l'heure sur ton téléphone (*Paramètres → Date et heure → Automatique*). Réessaie immédiatement après | | |
| 183 | +| Le dépôt redirige vers une erreur 422 lors de la création | Le nom contient des caractères interdits (espaces, accents, `/`) | Utilise uniquement des lettres non accentuées, chiffres et tirets. Évite les points en début ou fin de nom | | |
| 184 | + | |
| 185 | +--- | |
| 186 | + | |
| 187 | +## Prochaine étape | |
| 188 | + | |
| 189 | +→ [02 — Cloner et pousser du code](02-cloner-pousser.md) : clone ton dépôt en local avec SSH, fais ton premier commit et pousse-le sur gitrust (~25 min) |
A
user_manual/tutorials/02-cloner-pousser.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# 02 — Cloner et pousser du code | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/tutorials/03-collaborer.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# 03 — Collaborer : équipes, issues, pull requests | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/tutorials/04-automatiser-ci.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# 04 — Automatiser avec la CI | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
A
user_manual/tutorials/index.md
+11
-0
@@ -0,0 +1,11 @@
| 1 | +# Tutoriels | |
| 2 | + | |
| 3 | +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial. | |
| 4 | +> | |
| 5 | +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours. | |
| 6 | + | |
| 7 | +## TODO | |
| 8 | + | |
| 9 | +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md)) | |
| 10 | +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`) | |
| 11 | +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis |
GitRust